dsh-learning-hub:用本地 Markdown/JSON 搭个人学习中枢

前言

在 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 天;review action 可返回到期概念。
  • 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 可调用」的记忆类工作流。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye