refactor(plugins): 莞易学迁到 pugins/guanyixue

- platforms/guanyixue.py → pugins/guanyixue/main.py
- jspx.py / study.py / detect.py 一并搬进插件目录,插件自包含:
  热重载会把实现模块一起重新 import,不再是半截插件
- 导入路径改成 study_tool.pugins.guanyixue.*;quiz.py 两处引用同步更新
- platforms/__init__.py 只剩运行时,load_builtin() 只调 load_plugins()
- 新增 pugins/guanyixue/pugin.json(id / title / name)
- 同步 AGENTS.md、docs/architecture.md、docs/pugin.md、docs/OPTIMIZATION.md
This commit is contained in:
study-tool
2026-10-31 16:18:45 +08:00
parent 8e8d6b83f1
commit 491fd08c1e
11 changed files with 74 additions and 38 deletions
+11 -7
View File
@@ -82,7 +82,8 @@ src/study_tool/pugins/
<名字>/
pugin.json 注册信息:id / title / name(不写能力绑定)
main.py class <名字>(Platform)
gdgxk/ 广东公需课:pugin.json + main.py
gdgxk/ 广东公需课:pugin.json + main.py + utils/(拆开的实现模块)
guanyixue/ 莞易学:pugin.json + main.py + jspx.py / study.py / detect.py
```
约定:
@@ -139,8 +140,7 @@ quiz_key / cookies / plan / project / name`,插件只取自己需要的。
和 `main.py`(按上面的骨架写 `class <名字>(Platform)`)。
2. `main.py` 末尾 `PLATFORM = registry.register(<名字>())`。
3. 不需要改 `load_builtin()`、路由或前端 —— 加载器扫目录时自动 import 各插件。
跟 `jspx` / `study` 这类共享实现模块关系紧密的平台,仍可以放 `platforms/<名字>.py`,
在 `load_builtin()` 里加一行 import。
实现复杂时可以在同一目录再拆 `jspx.py` / `study.py` 这类实现模块(见 `guanyixue/`)。
4. 启动服务,`GET /api/platforms` 应出现该平台。
5. 联调顺序:`/api/login` → `/api/courses` → `/api/discover` → `/api/study`。
@@ -153,8 +153,10 @@ quiz_key / cookies / plan / project / name`,插件只取自己需要的。
平台私有的重登逻辑改成 `_relogin` 这类私有方法。
3. 加类属性 `id` / `label` / `entries`,删掉模块末尾的逐项注册。
4. 模块末尾改成 `PLATFORM = registry.register(<类名>())`。
5. 逐个验证槽位行为与迁移前一致;同一平台的两个代际由 `study` 里按
`course["generation"]` 分发(参见 `guanyixue.py`)。
5. 实现模块(`jspx.py` / `study.py` / `detect.py`)一起搬进 `pugins/<名字>/`,目录内互相
引用改成 `study_tool.pugins.<名字>.xxx`;外部(如 `quiz.py`)引用同步改路径。
6. 逐个验证槽位行为与迁移前一致;同一平台的两个代际由 `study` 里按
`course["generation"]` 分发(参见 `pugins/guanyixue/main.py`)。
## 硬约束
@@ -197,5 +199,7 @@ quiz_key / cookies / plan / project / name`,插件只取自己需要的。
`course["platform"]` 分发;平台用自由函数 + 逐项注册;学习流程仍在引擎。
3. 契约补全:`contract.py` 推导 `capabilities`;`SessionExpired` 移到 `platforms/errors.py`;
各平台学习流程从引擎搬回平台模块(`engine.py` 只剩账号级编排)。
4. 类式(当前):`Platform` 变成普通基类,平台写成子类(类属性 + 方法),
禁止逐项传函数注册;`gdgxk` 与 `guanyixue` 已完成迁移。
4. 类式:`Platform` 变成普通基类,平台写成子类(类属性 + 方法),禁止逐项传函数注册。
5. 插件目录(当前):平台全部迁到 `pugins/<名字>/`(`pugin.json` + `main.py`,实现复杂的
再拆 `jspx.py` / `study.py` 等),`load_plugins()` 扫目录加载,支持启停与热重载;
`gdgxk`、`guanyixue` 都已完成迁移。