前言¶
在 DSH 里做带长期上下文的智能体时,「学了什么、掌握到哪一步、下次该复习什么」往往散落在对话记录或笔记里,Agent 很难稳定引用。常见做法是另开数据库或 SaaS 学习平台,数据不在本机、也不方便和 Harness 工具链对齐。
下面介绍 dsh-learning-hub(GitHub:ZBC-QRLA/dsh-learning-hub):把 _learner 目录下的纯 Markdown/JSON 转成课程分支树、概念关系图、可证据化的进度与间隔复习,并暴露 learning_hub 工具和三栏仪表盘。无数据库、无 CDN、无遥测,数据留在本地,可手工编辑、diff 与备份。维护者为 ZBC-QRLA,社区目录分类为「记忆」;当前版本 0.1.1(README 标注为 early,数据 schema 与 tool action 可能演进)。
这是什么¶
一句话:local-first 的 DSH 学习中枢插件——读写在 _learner 文件夹,给 Agent 一个 learning_hub 工具,给人一个 loopback 上的 /learning-hub/ 面板。
与「只在对话里口头记进度」相比,它把 mastery 变更绑在 record + evidence 上,并维护 1/3/7/14 天复习计划;与云端学习 App 相比,它不依赖外网,也不把凭证写进 _learner。
核心功能¶
分支树与概念图¶
- Branch tree:活跃与计划中的课程,每门课下有概念与 next step。
- Concept graph:先修(有向无环)、相关(对称)边;掌握度着色,可点击查看详情。
证据优先的进度¶
mastery(0–5)仅在有 record 时变更,不接受静默「我觉得你会了」式升级。- Records 事件类型:
study | practice | exam | review | misconception;evidence必填且需可追溯(作业 id、文件、session id 等)。 - 空 evidence 或
seed:/待补充/示例:等占位符会在写入前被拒绝。
间隔复习与路由¶
- 复习日程:1 / 3 / 7 / 14 天;
reviewaction 可返回到期概念。 - Routing:结合 cwd、关键词、分支名、概念名,给出 primary/secondary branch 与 confidence。
Agent 工具与 HTTP API¶
- 单一工具
learning_hub,多 action:status、route、record、search、review、link等。 - 本地 HTTP:仪表盘、
/api/learning-hub/state、/record、/route;非 loopback 请求会被拒绝;写请求需同源 JSON,body 上限 64 KiB;写入前在_learner/.backups/备份。
仪表盘(0.1.1 增强)¶
- 三栏布局,可折叠侧栏,桌面/平板/手机与明/暗主题;无构建步骤,纯 HTML/CSS/JS。
- Drilldown:点击 KPI、掌握度分布、堆叠条或 hero 统计,可在原生对话框中查看数字背后的概念。
- Photo to DSH:记录表单可附照片,浏览器内压缩后通过同源 RPC 发到所选 DSH session。
- One-click DSH login:
GET /learning-hub/auth走 DSH 浏览器认证并设置 HttpOnly cookie,面板可加载session/list与session/prompt。
混合 seed / 真实数据¶
seed:true的 fixture 行保持严格;真实record使用seed:false、session id 与非占位 evidence,并同步reviews.json(due、mastery、interval_days、status、last_reviewed)与sessions.jsonl。
环境与依赖¶
- DSH:
>=0.2.1-rc.3 <0.3.0-0 - Node.js:
>=20(DSH 自带运行时;独立 Node 便于跑测试)
许可证:MIT。
安装与启用¶
官方 README 给出的是 从本地 checkout 链接进 profile,而非 dsh plugin add github:… 一类拼接命令。步骤如下。
1、将插件目录链入 DSH profile:
dsh plugin --profile desktop add D:\path\to\dsh-learning-hub
2、编辑 <DSH_HOME>\profiles\desktop\cordis.patch.yml,指向你的 learner 数据与 bundled panel:
- id: learning-hub
name: dsh-learning-hub
config:
dataRoot: 'D:\path\to\learner'
panelDir: 'D:\path\to\dsh-learning-hub\public'
# port: 19480 # optional loopback-only extra port
3、重启 DSH 后:
- Agent 可用工具
learning_hub; - 面板:
http://127.0.0.1:<DSH_PORT>/learning-hub/; - API:
/api/learning-hub/state、/record、/route。
未配置时插件使用 bundled demo:examples/demo-learner/ 与 public/。
数据模型(_learner/)¶
单一数据源,典型文件包括:
profile.md
branches.json
concepts.json
progress.jsonl
errors.json
reviews.json
sessions.jsonl
materials/index.md
.backups/
概念含 id、name、aliases、branches、prereq、related、mastery、evidence、misconceptions、sources、next_review 等;混合模式下还有 seed 与 mastery_basis。细节见仓库 docs/DATA-SCHEMA.md。
典型用法¶
Agent 调用 learning_hub¶
{"action":"status"}
{"action":"route","cwd":"D:/courses/c","text":"pointers and arrays"}
{"action":"record","branch":"cs.c","unit":"pointer","event":"practice","mastery":2,"evidence":"homework-4 Q3"}
{"action":"search","query":"pointer"}
{"action":"review","withinDays":7}
{"action":"link","from":"cs.c.array","to":"cs.c.pointer","relation":"prereq"}
本地验证(开发机)¶
node --test # 35 tests (34 plugin + panel selfcheck)
node test/panel-selfcheck.mjs # 523 panel checks
也可用任意静态服务器打开 public/index.html,或安装插件后访问 /learning-hub/。
适用场景与注意¶
适合:希望在 DSH 工作流里统一管理课程分支、概念先修、复习队列,且希望数据完全本地、可版本管理的开发者或自学者。
务必注意:
- 插件以 当前 DSH 进程权限 读写
_learner;安装前请阅读源码与 MIT 许可证,并理解docs/SECURITY.md:HTTP 仅 loopback;认证面向本地 DSH 浏览器,不是多用户或远程访问产品;若通过隧道或反向代理暴露面板,需额外评估风险。 - 状态为 0.1.1 early,schema 与 action 可能变化,见
docs/ROADMAP.md。 - 修改
lib/需重启 DSH;改 panel 刷新浏览器即可。
结尾¶
dsh-learning-hub 把学习结构、证据化进度和间隔复习收进 _learner 与 learning_hub 工具,配合 loopback 仪表盘,适合「本地优先、Agent 可调用」的记忆类工作流。