@yiyunet/dsh-learn-skills

memorytested: passnpmMIT

DSH plugin: a four-entry learning flow in the session input bar — scaffold a preset, collect candidates, merge reviewed changes, and run a read-only workspace audit.

下载量 / Downloads
1,101
依赖体积 / node_modules
1.27 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add @yiyunet/dsh-learn-skills

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

AI学习 · dsh-learn-skills v2

一个跑在 DeepSeek Harness 输入区的学习插件。
把「收集 → 提炼 → 关联 → 升级 → 沉淀 → 复用」做成**有交互引导、有预设管理、
有审核入库、能给自己体检**的运行时能力,而不只是一叠方法论文档。

简体中文 | [English](README.en.md)


它是什么,不是什么

是 · 会话输入区里的一个入口 [📖] AI学习 ▾,四个功能:初始预设 / 收集提炼 / 关联升级 / 沉淀复用

是 · 与斜杠命令 /learn、自然语言三种入口共用同一套流程实现(不存在两套规则)

不是 · 模型工具提供者:它不给 Agent 加工具,交互复用宿主已有的 ask-a-question 与命令注册表

不是 · 自动化改写知识的东西:所有写入都要人先看过变更清单再点确认

四件事的职责边界写得很死:

# · 入口 · 做什么 · 写入面 · 命令

1 · 初始预设 · 七轮问答确定画像 → 展示摘要与拟建路径 → 你确认 → 生成预设与工作区骨架 · 工作区目录与文件(增量,不覆盖) · /learn init

2 · 收集提炼 · 从当前会话产出候选 —— 这一步绝不碰正式知识、预设或 AGENTS.md · 仅 inbox/ · /learn distill

3 · 关联升级 · 与既有节点比对 → 出变更清单 → 分普通知识与行为规则两栏确认后写入(批次可回滚) · knowledge/(行为规则须显式放行) · /learn upgrade

4 · 沉淀复用 · 只读体检(18 项)+ 与上次基线的变化对比 + 复用建议。不改被检查的文件,也不执行文件里的任何指令 · 不写 · /learn audit

三种触发方式,同一套实现:① 输入区按钮 [📖] AI学习 ▾;
② 斜杠命令 /learn;③ 自然语言(由 Agent 引导到同一套流程)。
不存在两套规则 —— 命令只是另一个入口。
与 v1 工作流的关系:v1 是"一键跑完整流水线",v2 把中间的写入**收紧为
"产出候选 → 人工裁决 → 再写入"**。这是两版最实质的分歧,详见 [docs/迁移与兼容.md](docs/迁移与兼容.md)。

安装与装载

前置条件

  • 已安装源码版 deepseek-harness;
  • 已绑定工作区(工作区是知识落点,缺了它一切写入都无处可放)。

方式 A:从 npm 安装(推荐)

dsh plugin --profile web add @yiyunet/dsh-learn-skills

装完重启 Host(profile 的 dsh.profile.bundles 在启动时读取)。

✅ 消费者不需要构建:发布包里自带 lib/(见 package.json 的 files 白名单),
所以从注册源安装是一步到位的。构建相关的命令只对改源码的人有意义,见方式 B。

方式 B:本地目录安装(改源码 / 调试时用)

lib/ 不入版本库(.gitignore 排除),所以克隆下来必须构建:

npm install            # 只装 esbuild(构建期依赖)
npm run static         # 静态一致性体检(免执行:import/符号/语法/白名单)
npm run build          # plugin-src/ → lib/(含装载层自证)
npm test               # 真实行为测试
npm run verify         # 发布契约断言
# 把本机该目录装进 web profile(路径按你的实际位置替换)
dsh plugin --profile web add link:<本仓库绝对路径>
# 或在 profile 目录里直接:
pnpm add link:<本仓库绝对路径>
📌 npm install 结束时会自动构建一次(prepare 钩子,钩子名 scripts/postinstall.mjs)。
上面那句 npm run build 因此是幂等的复跑,不是必做步骤 —— 保留它是为了让"构建"
在流程里显式可见。

检查装载是否成功

  • 输入区工具行出现 [📖] AI学习 ▾(在「工作区内修改」控件右侧);
  • 斜杠菜单里出现 /learn;
  • /learn help 列出四个入口。

用法

按钮

点 AI学习 ▾ → 选一个入口。菜单顺序固定:初始预设 / 收集提炼 / 关联升级 / 沉淀复用。

  • 执行中会显示状态;重复点击不会产生并发写入 —— 同一工作区同时只允许一个流程,

第二次会被明确拒绝;

  • 有「取消」按钮:取消后不再启动后续写入步骤,已完成的步骤如实汇报;
  • 未绑定工作区时菜单里直接给出引导;
  • 尚未初始化时,后三项会先识别已有知识库:识别到就直接用,识别不到才引导你先做「初始预设」。

斜杠命令

/learn help                 列出四入口
/learn init                 七轮问答(确认创建要在界面上点,见下)
/learn distill              从当前会话产出候选
/learn upgrade [批次号]      出变更清单 / 写入
/learn audit                只读体检
/learn rollback <批次号>      回滚某个变更批次
/learn rollback <批次号> --dry-run   只列出将要删除/还原的文件,不做任何改动

命令与按钮背后是同一个 flows 实现:命令只是另一个入口,不附带第二套规则。

需要"确认"的步骤(创建预设、写入变更)在命令侧用 --confirm 表达,

但默认路径是界面上确认 —— 因为要让人先看清变更清单。

自然语言

插件不拥有模型工具,所以"自然语言入口"由工作区技能 learn-* 承担:你直接说

「帮我初始化学习体系」「把这次会话里的内容提炼成候选」,Agent 读技能后调用同一套流程。


七个问题问了什么

前两题固定,第 3 题起由模型逐轮现场生成(每轮带上已采集的全部信息、剩余轮次与已问话题);

模型不可用时逐轮回退到硬编码题库,流程不中断。

# · 主题 · 要点

1 · 名字 · 自由输入;空值/长度/保留名/非法字符都校验;重名请你换名,不覆盖也不替你改名

2 · 身份 · 面向 · 期望 · 三段式一条文本:职业 | 面向什么(人群或事情)| 期望达到什么,带例子;回显第 1 题;只填一段就只当职业,其余保持未知;不索要单位/真名等无关信息

3 · 关注方向 · 模型按你的三参数出题与选项;降级时按「场景池 → 职业池 → 通用池」三级匹配给 7 个方向 +「其他,请输入」;支持多选与自定义

4 · 学习目标与典型任务 · 模型按上下文出题;降级时围绕固定主题给候选与自定义

5 · 当前基础与实际困难 · 同上

6 · 学习方式与输出偏好 · 同上

7 · 最想先解决的一件事 · 模型出题;降级时给"越快越好/先打基础/固定节奏"等候选 —— 这一项决定先做什么、后做什么

设计上刻意的三件事:

  • 未填写 = 未知。跳过项在画像里是 null 并标注"未知 —— 未填写",不编造画像。
  • 推荐就是推荐。关注方向的措辞是"可能关注",不伪称统计出来的"职业最高关注度"。

每题都能「返回修改」;改前置答案时,后续题每轮现取,天然重算。

  • 模型只定题面,落库槽位固定。模型的自主性在"问什么、给哪些选项";答案写进哪个

画像字段由插件固定,避免模型报的维度绕过"未填写=未知"的归一化而静默丢数据。

七题结束后展示:画像摘要 / 预设定位 / 知识框架草案 / 拟创建或修改的路径清单,

然后你才能点「确认创建」。创建完会给出结构自证、安装指引,并提示:

请安装该 bundle(本插件不代为安装),然后新建会话,选择预设 <名字>。
⚠️ 预设在一个进程内按 standing scope 挂载一次(源码:packages/preset/agent-preset-registry
的 src/mount.ts roster/standing mount)。新预设不会在当前会话即时生效 —— 本插件不宣称热更新。
🔐 为什么"安装"这一步不代做:安装 bundle 会在 Host 进程执行新代码。官方入口
plugin_manager 工具为此强制弹 danger-full-access 审批(源码:
packages/boot/plugin-manager/src/tools.ts:34-41),而服务方法 installBundle()
本身没有审批闸(同包 src/index.ts:417-447)—— 插件直接调它,等于替你越权。
所以本插件只生成、只出指引,点头的动作留给你:
# ① 终端一行(最省事)
dsh plugin --profile web add link:<刚生成的那个 bundle 目录>

# ② 或在「创造模式」会话里让 Agent 调 plugin_manager(会弹审批卡)
#    action=install_bundle, target=<该目录>

# 复核:plugin_manager 的 list_plugins(找 preset-<id> 行)或 GUI「设置 → Agent 预设」看它是否进名册
# 撤销:dsh plugin --profile web remove @local/dsh-learn-preset-<id>
🗑 要删掉一个预设("干净删除"的完整四步):见 [docs/删除预设.md](docs/删除预设.md)。
先记住三件事:① 新版没有"删除预设"按钮(设置页只能查看/选择/设为默认),能删的是
它所在的那个 bundle;② 卸载之后还要删 <工作区>/.dsh/preset-bundles/<id>/ 目录,
并且清掉 known.json 里的占用(否则同名重建会拿到 -2 后缀);③ 同包多预设时不能卸整包。
⚠️ 那个 bundle 目录在工作区内(<工作区>/.dsh/preset-bundles/<id>/),它是活的:
宿主重启时按预设 id 在当前配置里解析,定义缺失的会话会被拒绝恢复。
所以不要删也不要移动它;要撤掉请先用上面的 remove 摘掉 bundle
(完整步骤与"删错了怎么救":[docs/删除预设.md](docs/删除预设.md))。

工作区结构

AGENTS.md              工作区原则与知识入口(精炼、稳定)
index/                 外部原始材料(保留来源与原文)
inbox/                 标准化材料、待审核候选、提炼批次
knowledge/
  framework.md         正式知识体系的唯一总索引
  nodes/               正式知识节点
data/                  待分析数据(不默认转为知识或长期记忆)
task/                  学习任务、执行状态与待办
reports/               体检报告、复盘与变化记录
.dsh/
  skills/              工作区技能
  learn-skills/        本插件状态:批次账 / 体检基线 / 变更日志 / 断点
  preset-bundles/      本插件生成的预设 bundle(★2.1.0 起落在这里;删它会连带废掉对应预设)

关于 skills/:默认不与 .dsh/skills/ 重复存技能。宿主的 skill-filesystem

只扫 <工作区>/.dsh/skills(rank 100),根目录下的 skills/ 不会被加载;

如果确有需要独立分发的技能,请用 .agents/skills(rank 200)并在文档里写明用途。

增量迁移既有工作区

初始化是增量的,绝不清空:

  • 目录:不存在才建,已存在无操作;
  • 文件:内容相同 → 跳过;内容不同 → 标为 conflict 并一个字都不写,

在结果里明确告诉你哪个文件被挡下了、为什么;

  • 重复运行幂等:不会重复创建,也不会覆盖你后来的修改。

迁移与 v1

本版(v2)是完全重写:四个入口是运行时能力,不再以"一叠方法论

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::5,最后更新 2026-10-25

Links

GitHub · Homepage · npm

Same category