diff --git a/.gitignore b/.gitignore
index f317883..cfb89a8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,34 +1,19 @@
-# Project specific additions
-.devflag
-.vscode/
-.directory
-__pycache__/
-.idea/
-cache/
-data/repo/cngk
-data/repo/eotgk
-data/repo/evtgk
-data/misc
-data/cache
-data/session
-*.egg-info/
-build/
-dist/
-old/
-AGENT.md
-AGENTS.md
+# HeurAMS specific rules
*.log.*
+*.log
*.pkl
+/data
+
+# Editor
+.vscode/
+.idea/
+
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
-# C extensions
-*.so
-
# Distribution / packaging
-.Python
build/
develop-eggs/
dist/
@@ -47,16 +32,6 @@ share/python-wheels/
*.egg
MANIFEST
-# PyInstaller
-# Usually these files are written by a python script from a template
-# before PyInstaller builds the exe, so as to inject date/other infos into it.
-*.manifest
-*.spec
-
-# Installer logs
-pip-log.txt
-pip-delete-this-directory.txt
-
# Unit test / coverage reports
htmlcov/
.tox/
@@ -71,73 +46,10 @@ coverage.xml
.hypothesis/
.pytest_cache/
cover/
-.claude/
-
-# Translations
-*.mo
-*.pot
-
-# Django stuff:
-*.log
-local_settings.py
-db.sqlite3
-db.sqlite3-journal
-
-# Flask stuff:
-instance/
-.webassets-cache
-
-# Scrapy stuff:
-.scrapy
-
-# Sphinx documentation
-docs/_build/
-
-# PyBuilder
-.pybuilder/
-target/
# Jupyter Notebook
.ipynb_checkpoints
-# IPython
-profile_default/
-ipython_config.py
-
-# pyenv
-# For a library or package, you might want to ignore these files since the code is
-# intended to run in multiple environments; otherwise, check them in:
-# .python-version
-
-# pipenv
-# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
-# However, in case of collaboration, if having platform-specific dependencies or dependencies
-# having no cross-platform support, pipenv may install dependencies that don't work, or not
-# install all needed dependencies.
-#Pipfile.lock
-
-# poetry
-# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
-# This is especially recommended for binary packages to ensure reproducibility, and is more
-# commonly used for packaging.
-#poetry.lock
-#poetry.toml
-
-# pdm
-# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
-#pdm.lock
-#pdm.toml
-
-# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
-__pypackages__/
-
-# Celery stuff
-celerybeat-schedule
-celerybeat.pid
-
-# SageMath parsed files
-*.sage.py
-
# Environments
.env
.venv
@@ -147,72 +59,32 @@ ENV/
env.bak/
venv.bak/
-# Spyder project settings
-.spyderproject
-.spyproject
+# Linux
+*~
+.fuse_hidden*
+.directory
+.Trash-*
+.nfs*
+## KDE Dolphin
+.directory
-# Rope project settings
-.ropeproject
-
-# mkdocs documentation
-/site
-
-# mypy
-.mypy_cache/
-.dmypy.json
-dmypy.json
-
-# Pyre type checker
-.pyre/
-
-# pytype static type analyzer
-.pytype/
-
-# Cython debug symbols
-cython_debug/
-
-# PyCharm
-.idea/
-
-# Audio cache and temporary files
-*.mp3
-*.wav
-*.ogg
-*.tmp
-
-# LLM cache files
-*.cache
-*.jsonl
-
-# Log files
-*.log
-logs/
-
-# OS generated files
+# macOS
.DS_Store
-.DS_Store?
+.AppleDouble
+.LSOverride
._*
-.Spotlight-V100
-.Trashes
-ehthumbs.db
-Thumbs.db
+.AppleDB
+.AppleDesktop
# Windows
Thumbs.db
+Thumbs.db:encryptable
ehthumbs.db
-Desktop.ini
+ehthumbs_vista.db
+[Dd]esktop.ini
+$RECYCLE.BIN/
+*.lnk
-# Linux
-*~
-
-# VSCode
-.vscode/
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-*.code-workspace
-
-# Temporary files
-*.tmp
-*.temp
+# Other trash
+AGENT.md
+# It's not AGENTS.md
\ No newline at end of file
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..4badd4c
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,50 @@
+# AI 编程工具说明
+
+本文档为 AI 工具以及在使用 AI 辅助向 HeurAMS 项目贡献代码时的开发者提供指导.
+
+AI 工具必须完整阅读此 `/AGENTS.md` 文件.
+
+## 查阅开发文档
+
+在帮助进行 HeurAMS 开发时,AI 工具应遵循标准的开发规范与流程, 应当自动查看或是在用户发出"初始化"指令后查看:
+
+- [贡献指南](/CONTRIBUTING.md)
+- [自述文件](/README.md)
+- [项目架构](/ARCHITECTURE.md)
+
+## 明确禁止行为
+
+1. 禁止 AI 自动生成 PR 或 patch 文件
+2. 禁止 AI 在未经人工确认的情况下修改现有代码
+3. 禁止 AI 不使用格式化工具而生成格式化文件的行为
+4. 禁止 AI 修复任何"bug", 而不经人工确认
+5. 绝对禁止修改此 `/AGENTS.md` 文件
+6. 禁止一切不遵循项目设计原则, 另造独立库的 "糊屎" 行为
+7. 禁止 AI 直接操作 pip, uv, apt 等工具修改外部依赖或工具, 而应让人类开发者自己操作依赖
+8. 禁止使用不同于任何现有文件的现有注释语言的其他语言写新注释
+9. 禁止不读文件就直接覆写
+
+## 许可证与法律要求
+
+所有贡献必须符合许可要求, 所有代码必须与 AGPL-3.0-or-later 许可以及项目附加豁免条款(位于 LICENSE 文件尾部 237 至 245 行)兼容.
+
+## Signed-off-by 与 DCO
+
+AI 代理**严禁添加** Signed-off-by 标签.
+
+只有人类能够合法地认证 DCO.
+
+人类提交者负责:
+
+- 审阅所有 AI 生成的代码
+- 确保符合许可要求
+- 添加自己的 Signed-off-by 标签以认证 DCO
+- 对贡献负责任
+
+AI 助手负责:
+
+- 了解运行环境, 例如操作系统或具体发行版
+- 遵循此文档所述规则
+- 主动提醒使用 AI 工具的开发者
+
+本文档参考自 [AI Coding Assistants — The Linux Kernel documentation](https://docs.kernel.org/process/coding-assistants.html)
diff --git a/data/misc/favorites.json5 b/data/misc/favorites.json5
deleted file mode 100644
index a8078f5..0000000
--- a/data/misc/favorites.json5
+++ /dev/null
@@ -1,482 +0,0 @@
-[
- {
- "repo_path": "cngk-t",
- "ident": "庄宗受而藏之于庙. 其后用兵, 则遣从事以一少牢告庙, 请其矢, 盛以锦囊, 负而前驱, 及凯旋而纳之",
- "added": 1777679860,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "方其系燕父子以组, 函梁君臣之首, 入于太庙, 还矢先王, 而告以成功, 其意气之盛, 可谓壮哉!",
- "added": 1777684719,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "洎牧以谗诛, 邯郸为郡, 惜其用武而不终也.",
- "added": 1777748505,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "苟以天下之大, 下而从六国破亡之故事, 是又在六国下矣.",
- "added": 1777749120,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "故木受绳则直, 金就砺则利, 君子博学而日参省乎己, 则知明而行无过矣.",
- "added": 1777749248,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "假舆马者, 非利足也, 而致千里; 假舟楫者, 非能水也, 而绝江河.",
- "added": 1777749385,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "向使三国各爱其地, 齐人勿附于秦, 刺客不行, 良将犹在,",
- "added": 1777749648,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "则胜负之数, 存亡之理, 当与秦相较, 或未易量.",
- "added": 1777749737,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "呜呼! 以赂秦之地封天下之谋臣, 以事秦之心礼天下之奇才, 并力西向,",
- "added": 1777749774,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "积土成山, 风雨兴焉; 积水成渊, 蛟龙生焉; 积善成德, 而神明自得, 圣心备焉.",
- "added": 1777750294,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "锲而舍之, 朽木不折; 锲而不舍, 金石可镂.",
- "added": 1777750446,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "寻寻觅觅, 冷冷清清, 凄凄惨惨戚戚. 乍暖还寒时候, 最难将息. 三杯两盏淡酒, 怎敌他、晚来风急! 雁过也, 正伤心, 却是旧时相识.",
- "added": 1777750594,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "满地黄花堆积, 憔悴损, 如今有谁堪摘? 守着窗儿, 独自怎生得黑? 梧桐更兼细雨, 到黄昏、点点滴滴. 这次第, 怎一个愁字了得!",
- "added": 1777750678,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "夫六国与秦皆诸侯, 其势弱于秦, 而犹有可以不赂而胜之之势.",
- "added": 1777750884,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "登高而招, 臂非加长也, 而见者远; 顺风而呼, 声非加疾也, 而闻者彰.",
- "added": 1777750964,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "故不积跬步, 无以至千里; 不积小流, 无以成江海.",
- "added": 1777751066,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "且燕赵处秦革灭殆尽之际, 可谓智力孤危, 战败而亡, 诚不得已.",
- "added": 1777751570,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "货恶其弃于地也, 不必藏于己; 力恶其不出于身也, 不必为己.",
- "added": 1777846911,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "是故谋闭不兴, 盗窃乱贼而不作.",
- "added": 1777846943,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "花径不曾缘客扫, 蓬门今始为君开.",
- "added": 1777846974,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "盘飧市远无兼味, 樽酒家贫只旧醅.",
- "added": 1777847000,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "五花马、千金裘, 呼儿将出换美酒, 与尔同销万古愁!",
- "added": 1777847065,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "屈平疾王听之不聪也, 谗谄之蔽明也, 邪曲之害公也, 方正之不容也, 故忧愁幽思而作《离骚》.",
- "added": 1777847121,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "夫天者, 人之始也; 父母者, 人之本也.",
- "added": 1777847174,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "人穷则反本, 故劳苦倦极, 未尝不呼天也; 疾痛惨怛, 未尝不呼父母也.",
- "added": 1777847195,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "信而见疑, 忠而被谤, 能无怨乎?",
- "added": 1777847267,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "屈平正道直行, 竭忠尽智以事其君, 谗人间之, 可谓穷矣.",
- "added": 1777847825,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "上称帝喾, 下道齐桓, 中述汤武, 以刺世事.",
- "added": 1777874192,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "明道德之广崇, 治乱之条贯, 靡不毕见.",
- "added": 1777876114,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "其文约, 其辞微, 其志洁, 其行廉.",
- "added": 1777884008,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "其志洁, 故其称物芳; 其行廉, 故死而不容.",
- "added": 1777884045,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "生乎吾前, 其闻道也固先乎吾, 吾从而师之;",
- "added": 1777884247,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "吾师道也, 夫庸知其年之先后生于吾乎?",
- "added": 1777884298,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "是故无贵无贱, 无长无少, 道之所存, 师之所存也.",
- "added": 1777884338,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "嗟乎! 师道之不传也久矣! 欲人之无惑也难矣!",
- "added": 1777884371,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "古之圣人, 其出人也远矣, 犹且从师而问焉;",
- "added": 1777884425,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "今之众人, 其下圣人也亦远矣, 而耻学于师.",
- "added": 1777884480,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "圣人之所以为圣, 愚人之所以为愚, 其皆出于此乎!",
- "added": 1777884505,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "爱其子, 择师而教之; 于其身也, 则耻师焉, 惑矣.",
- "added": 1777884537,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "彼童子之师, 授之书而习其句读者, 非吾所谓传其道解其惑者也.",
- "added": 1777884705,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "问之, 则曰: “彼与彼年相若也, 道相似也.",
- "added": 1777884818,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "其称文小而其指极大, 举类迩而见义远.",
- "added": 1777884887,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "惑而不从师, 其为惑也, 终不解矣.",
- "added": 1777884938,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "句读之不知, 惑之不解, 或师焉, 或不焉, 小学而大遗, 吾未见其明也.",
- "added": 1777885310,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "士大夫之族, 曰师曰弟子云者, 则群聚而笑之.",
- "added": 1777885372,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "自疏濯淖污泥之中, 蝉蜕于浊秽, 以浮游尘埃之外, 不获世之滋垢, 皭然泥而不滓者也.",
- "added": 1777885657,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "巫医乐师百工之人, 君子不齿, 今其智乃反不能及, 其可怪也欤!",
- "added": 1777937005,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "圣人无常师. 孔子师郯子、苌弘、师襄、老聃.",
- "added": 1777937060,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "郯子之徒, 其贤不及孔子.",
- "added": 1777937080,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "是故弟子不必不如师, 师不必贤于弟子, 闻道有先后, 术业有专攻, 如是而已.",
- "added": 1777937115,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "实迷途其未远, 觉今是而昨非.",
- "added": 1777937271,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "引壶觞以自酌, 眄庭柯以怡颜.",
- "added": 1777937411,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "园日涉以成趣, 门虽设而常关.",
- "added": 1777937464,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "云无心以出岫, 鸟倦飞而知还.",
- "added": 1777937517,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "归去来兮, 请息交以绝游.",
- "added": 1777937573,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "悦亲戚之情话, 乐琴书以消忧.",
- "added": 1777937619,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "农人告余以春及, 将有事于西畴.",
- "added": 1777937642,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "李氏子蟠, 年十七, 好古文, 六艺经传皆通习之, 不拘于时, 学于余.",
- "added": 1777937894,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "善万物之得时, 感吾生之行休.",
- "added": 1777938016,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "策扶老以流憩, 时矫首而遐观.",
- "added": 1777938520,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "既窈窕以寻壑, 亦崎岖而经丘.",
- "added": 1777938937,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "怀良辰以孤往, 或植杖而耘耔.",
- "added": 1777968294,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "淮左名都, 竹西佳处, 解鞍少驻初程.",
- "added": 1777970555,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "古者富贵而名摩灭, 不可胜记, 唯倜傥非常之人称焉.",
- "added": 1778018829,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "盖文王拘而演《周易》; 仲尼厄而作《春秋》; 屈原放逐, 乃赋《离骚》; 左丘失明, 厥有《国语》;",
- "added": 1778018908,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "乃如左丘无目, 孙子断足, 终不可用, 退而论书策, 以舒其愤, 思垂空文以自见.",
- "added": 1778019166,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "上计轩辕, 下至于兹, 为十表, 本纪十二, 书八章, 世家三十, 列传七十, 凡百三十篇.",
- "added": 1778019396,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "草创未就, 会遭此祸, 惜其不成, 是以就极刑而无愠色.",
- "added": 1778019511,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "心非木石岂无感, 吞声踯躅不敢言.",
- "added": 1778019707,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "仆窃不逊, 近自托于无能之辞, 网罗天下放失旧闻, 略考其行事, 综其终始, 稽其成败兴坏之纪,",
- "added": 1778020343,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "仆诚以著此书, 藏之名山, 传之其人, 通邑大都, 则仆偿前辱之责, 虽万被戮, 岂有悔哉!",
- "added": 1778020491,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "江畔何人初见月? 江月何年初照人?",
- "added": 1778025537,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "不知江月待何人, 但见长江送流水.",
- "added": 1778025571,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "斜月沉沉藏海雾, 碣石潇湘无限路.",
- "added": 1778025668,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "不知乘月几人归, 落月摇情满江树.",
- "added": 1778025686,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "东南形胜, 三吴都会, 钱塘自古繁华.",
- "added": 1778025708,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "江娥啼竹素女愁, 李凭中国弹箜篌.",
- "added": 1778025886,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "十二门前融冷光, 二十三丝动紫皇.",
- "added": 1778025946,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "羌管弄晴, 菱歌泛夜, 嬉嬉钓叟莲娃.",
- "added": 1778026396,
- "tags": []
- },
- {
- "repo_path": "cngk-t",
- "ident": "千骑拥高牙, 乘醉听箫鼓, 吟赏烟霞.",
- "added": 1778026427,
- "tags": []
- }
-]
\ No newline at end of file
diff --git a/data/repo/stub/algodata.json b/data/repo/stub/algodata.json
deleted file mode 100644
index d0b6e19..0000000
--- a/data/repo/stub/algodata.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "临安春雨初霁": {
- "SM-2": {
- "efactor": 2.5,
- "real_rept": 4,
- "rept": 2,
- "interval": 15,
- "last_date": 20578,
- "next_date": 20593,
- "is_activated": 1,
- "last_modify": 1777940498.2121851
- }
- }
-}
\ No newline at end of file
diff --git a/data/repo/stub/draft.txt b/data/repo/stub/draft.txt
deleted file mode 100644
index 7485637..0000000
--- a/data/repo/stub/draft.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-使用仪器分析分子:
-质谱仪 -> 质量特征, 测分子质量(最大质荷比)
-红外光谱 -> 化学键和官能团
-核磁共振氢谱 -> 氢原子的种类和数目
-X射线衍射 -> 复杂分子, 分析键长键角
-元素分析仪 -> 确定元素种类及比例, 写出实验式
-元素转换:
- C -> CO2
- S -> SO2
- H -> H2O
- N -> N2 (注意)
- Cl -> HCl
-
-烷烃:
-可以燃烧, 火焰较明亮
-可以在光照下和卤素单质发生取代(卤素单质光照下生成自由基 发生自由基取代反应)
-可以高温分解为小的烷烃和烯烃
-不和酸性高锰酸钾, 酸碱反应, 不和Br2(CCl4)反应
-除 CH3Br 为气体外, 多溴代物为液体("油状液滴"), CBr4是固体
-光照用紫外灯或强日光(太阳光直射),不能用普通白炽灯 uv含量低
-
-
diff --git a/data/repo/stub/manifest.toml b/data/repo/stub/manifest.toml
deleted file mode 100644
index 3eadc2b..0000000
--- a/data/repo/stub/manifest.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-title = "测试用单元集"
-package = "stub"
-author = "__heurams__"
-desc = ""
diff --git a/data/repo/stub/payload.toml b/data/repo/stub/payload.toml
deleted file mode 100644
index a25f580..0000000
--- a/data/repo/stub/payload.toml
+++ /dev/null
@@ -1,5 +0,0 @@
-["临安春雨初霁"]
-note = ['陆游〔宋代〕']
-content = "临安/春雨/初霁/"
-translation = "临安春雨初霁"
-keyword_note = { "临安" = "南宋都城, 今杭州", "霁" = "雨后或雪后转晴" }
diff --git a/data/repo/stub/schedule.toml b/data/repo/stub/schedule.toml
deleted file mode 100644
index aff087d..0000000
--- a/data/repo/stub/schedule.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-schedule = ["quick_review", "recognition", "final_review"]
-
-[routes]
-quick_review = [["SelectMeaning", "1.0"], ["Recognition", "1.0"]]
-recognition = [["Recognition", "1.0"]]
-final_review = [["FillBlank", "1.0"], ["Recognition", "1.0"]]
-
-[annotation]
-"quick_review" = "复习旧知"
-"recognition" = "新知识"
-"final_review" = "总复习"
diff --git a/data/repo/stub/typedef.toml b/data/repo/stub/typedef.toml
deleted file mode 100644
index 1d06672..0000000
--- a/data/repo/stub/typedef.toml
+++ /dev/null
@@ -1,17 +0,0 @@
-[annotation]
-note = "笔记"
-keyword_note = "关键词翻译"
-translation = "语句翻译"
-delimiter = "分隔符"
-content = "内容"
-tts_text = "文本转语音文本"
-
-[common]
-delimiter = "/"
-tts_text = "eval:payload['content'].replace('/', '')"
-
-[common.puzzles] # 谜题定义
-# 我们称 "Recognition" 为 recognition 谜题的 alia
-"Recognition" = { __origin__ = "recognition", __hint__ = "", primary = "eval:payload['content']", secondary = ["eval:payload['keyword_note']", "eval:payload['note']"], top_dim = ["eval:payload['translation']"] }
-"SelectMeaning" = { __origin__ = "mcq", __hint__ = "eval:payload['content']", primary = "eval:payload['content']", mapping = "eval:payload['keyword_note']", jammer = "eval:list(payload['keyword_note'].values())", max_riddles_num = "eval:default['mcq']['max_riddles_num']", prefix = "选择正确项: " }
-"FillBlank" = { __origin__ = "cloze", __hint__ = "", text = "eval:payload['content']", delimiter = "eval:nucleon['delimiter']", min_denominator = "eval:default['cloze']['min_denominator']"}
diff --git a/src/heurams/assets/art/logo-mono-dark.svg b/src/heurams/assets/art/logo-mono-dark.svg
new file mode 100644
index 0000000..fc93eff
--- /dev/null
+++ b/src/heurams/assets/art/logo-mono-dark.svg
@@ -0,0 +1,25 @@
+
diff --git a/src/heurams/assets/art/logo-mono-light.svg b/src/heurams/assets/art/logo-mono-light.svg
new file mode 100644
index 0000000..d69dcfb
--- /dev/null
+++ b/src/heurams/assets/art/logo-mono-light.svg
@@ -0,0 +1,25 @@
+
diff --git a/src/heurams/assets/art/logo.svg b/src/heurams/assets/art/logo.svg
new file mode 100644
index 0000000..9ff9c27
--- /dev/null
+++ b/src/heurams/assets/art/logo.svg
@@ -0,0 +1,25 @@
+
diff --git a/src/heurams/assets/data/cache/.keep b/src/heurams/assets/data/cache/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/data/config/_.toml b/src/heurams/assets/data/config/_.toml
similarity index 100%
rename from data/config/_.toml
rename to src/heurams/assets/data/config/_.toml
diff --git a/data/config/global.toml b/src/heurams/assets/data/config/global.toml
similarity index 100%
rename from data/config/global.toml
rename to src/heurams/assets/data/config/global.toml
diff --git a/data/config/interface/_.toml b/src/heurams/assets/data/config/interface/_.toml
similarity index 100%
rename from data/config/interface/_.toml
rename to src/heurams/assets/data/config/interface/_.toml
diff --git a/data/config/interface/global.toml b/src/heurams/assets/data/config/interface/global.toml
similarity index 100%
rename from data/config/interface/global.toml
rename to src/heurams/assets/data/config/interface/global.toml
diff --git a/data/config/interface/puzzles/_.toml b/src/heurams/assets/data/config/interface/puzzles/_.toml
similarity index 100%
rename from data/config/interface/puzzles/_.toml
rename to src/heurams/assets/data/config/interface/puzzles/_.toml
diff --git a/data/config/interface/puzzles/cloze.toml b/src/heurams/assets/data/config/interface/puzzles/cloze.toml
similarity index 100%
rename from data/config/interface/puzzles/cloze.toml
rename to src/heurams/assets/data/config/interface/puzzles/cloze.toml
diff --git a/data/config/interface/puzzles/mcq.toml b/src/heurams/assets/data/config/interface/puzzles/mcq.toml
similarity index 100%
rename from data/config/interface/puzzles/mcq.toml
rename to src/heurams/assets/data/config/interface/puzzles/mcq.toml
diff --git a/data/config/interface/widgets/_.toml b/src/heurams/assets/data/config/interface/widgets/_.toml
similarity index 100%
rename from data/config/interface/widgets/_.toml
rename to src/heurams/assets/data/config/interface/widgets/_.toml
diff --git a/data/config/interface/widgets/recognition.toml b/src/heurams/assets/data/config/interface/widgets/recognition.toml
similarity index 100%
rename from data/config/interface/widgets/recognition.toml
rename to src/heurams/assets/data/config/interface/widgets/recognition.toml
diff --git a/data/config/providers/_.toml b/src/heurams/assets/data/config/providers/_.toml
similarity index 100%
rename from data/config/providers/_.toml
rename to src/heurams/assets/data/config/providers/_.toml
diff --git a/data/config/providers/tts/_.toml b/src/heurams/assets/data/config/providers/tts/_.toml
similarity index 100%
rename from data/config/providers/tts/_.toml
rename to src/heurams/assets/data/config/providers/tts/_.toml
diff --git a/data/config/providers/tts/edgetts.toml b/src/heurams/assets/data/config/providers/tts/edgetts.toml
similarity index 100%
rename from data/config/providers/tts/edgetts.toml
rename to src/heurams/assets/data/config/providers/tts/edgetts.toml
diff --git a/data/config/repo/_.toml b/src/heurams/assets/data/config/repo/_.toml
similarity index 100%
rename from data/config/repo/_.toml
rename to src/heurams/assets/data/config/repo/_.toml
diff --git a/data/config/repo/cngk-t.toml b/src/heurams/assets/data/config/repo/cngk-t.toml
similarity index 100%
rename from data/config/repo/cngk-t.toml
rename to src/heurams/assets/data/config/repo/cngk-t.toml
diff --git a/data/config/repo/cngk.toml b/src/heurams/assets/data/config/repo/cngk.toml
similarity index 100%
rename from data/config/repo/cngk.toml
rename to src/heurams/assets/data/config/repo/cngk.toml
diff --git a/data/config/services/_.toml b/src/heurams/assets/data/config/services/_.toml
similarity index 100%
rename from data/config/services/_.toml
rename to src/heurams/assets/data/config/services/_.toml
diff --git a/data/config/services/audio.toml b/src/heurams/assets/data/config/services/audio.toml
similarity index 100%
rename from data/config/services/audio.toml
rename to src/heurams/assets/data/config/services/audio.toml
diff --git a/data/config/services/llm.toml b/src/heurams/assets/data/config/services/llm.toml
similarity index 100%
rename from data/config/services/llm.toml
rename to src/heurams/assets/data/config/services/llm.toml
diff --git a/data/config/services/sync.toml b/src/heurams/assets/data/config/services/sync.toml
similarity index 100%
rename from data/config/services/sync.toml
rename to src/heurams/assets/data/config/services/sync.toml
diff --git a/data/config/services/timer.toml b/src/heurams/assets/data/config/services/timer.toml
similarity index 100%
rename from data/config/services/timer.toml
rename to src/heurams/assets/data/config/services/timer.toml
diff --git a/data/config/services/tts.toml b/src/heurams/assets/data/config/services/tts.toml
similarity index 100%
rename from data/config/services/tts.toml
rename to src/heurams/assets/data/config/services/tts.toml
diff --git a/src/heurams/assets/data/misc/.keep b/src/heurams/assets/data/misc/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/src/heurams/assets/data/repo/.keep b/src/heurams/assets/data/repo/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/src/heurams/assets/data/session/.keep b/src/heurams/assets/data/session/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/src/heurams/context.py b/src/heurams/context.py
index 74b2b0e..62d9eb4 100644
--- a/src/heurams/context.py
+++ b/src/heurams/context.py
@@ -22,7 +22,14 @@ logger = get_logger(__name__)
logger.debug(f"包目录: {rootdir}")
logger.debug(f"工作目录: {workdir}")
-(workdir / "data" / "config").mkdir(parents=True, exist_ok=True)
+default_data = rootdir / "assets" / "data"
+user_data = workdir / "data"
+if not user_data.exists():
+ logger.info("初始化数据目录: %s", user_data)
+ import shutil
+ shutil.copytree(default_data, user_data)
+else:
+ (workdir / "data" / "config").mkdir(parents=True, exist_ok=True)
config_var: ContextVar[ConfigDict] = ContextVar(
"config_var",
diff --git a/src/heurams/services/version.py b/src/heurams/services/version.py
index 9d05552..70ca690 100644
--- a/src/heurams/services/version.py
+++ b/src/heurams/services/version.py
@@ -4,7 +4,7 @@ from heurams.services.logger import get_logger
logger = get_logger(__name__)
ver = "0.5.0"
-stage = "rc.1"
+stage = "stable"
codename = "fulcrum"
codename_cn = "支点"