dsh-thinking-trail
English: A plugin for DeepSeek Harness that keeps an AI's task trails (goal → route → decisions → lessons) in local JSONL, so the next similar task starts from a bridge instead of from scratch. Zero dependencies, MIT.
给 DeepSeek Harness 用的「思考路径」插件:AI 把每个任务的目标 → 路线 → 决策 → 教训留在本地,下次遇到同类任务先查旧路,而不是从零找路。
- 跨会话:路径存在
~/.dsh/thinking-trails/*.jsonl,不同对话共享同一份。 - 人可读:纯 JSONL 明文,可以直接 grep / 打开看 / 提交到仓库。
- 零依赖:只用 Node 标准库,不 import 任何
@deepseek-ai/*内部包,方便单独复制、开源、改造。 - 七个工具,四件事:
- 思考路径:
record_thought任务收尾写一条(goal、route必填,decisions/lessons/tags可选);recall_thoughts按关键词检索,不带关键词返回最近几条。 - 任务日志:
open_task_log建一份按任务的 md(路径 / 经验 / 不足 / 进步 / 思考路径);append_task_log往对应小节追加,建好会把完整路径告诉你。多步任务 AI 会直接建,不再问你。record_thought收尾时也会顺手把路径写进当前日志。 - 能力核对:
check_capability列出「这次任务需要的能力 → 本机有没有」:扫已装 skill(~/.dsh/skills)和已装插件(profilebundles),缺的会明说。 - 会话素材调度:
link_material把从别的会话调来的内容登记进日志表格,同 session_id + seq 自动判重;list_material列出已登记的,避免重复搬运。
- 思考路径:
- 一条系统提示(order 150):
- 需求精化(内部步骤,不回显):收到需求先在心里拆成「目标 / 必须满足 / 不能碰 / 怎么算做完」,直接执行;不回显拆解、不挤牙膏式追问;一次工具调用能拿全的不分两次。用用户的语言思考;非简单任务先给路线再执行;接到新任务先查旧路径库、收尾存一条、多步任务自动建日志,全程不打断你;需要别处会话的内容才
session_search,每读一条登记去重。
- 需求精化(内部步骤,不回显):收到需求先在心里拆成「目标 / 必须满足 / 不能碰 / 怎么算做完」,直接执行;不回显拆解、不挤牙膏式追问;一次工具调用能拿全的不分两次。用用户的语言思考;非简单任务先给路线再执行;接到新任务先查旧路径库、收尾存一条、多步任务自动建日志,全程不打断你;需要别处会话的内容才
安装
需要 Node 18+ 和一份 DSH(Cordis 插件树)。
# 方式一:从 GitHub 直接装(尚未发布 npm,请用仓库地址)
dsh plugin add https://github.com/2697574898-netizen/dsh-thinking-trail
# 方式二:手动挂载(Electron 桌面版,profile 由应用托管)
cd ~/.dsh/profiles/desktop
pnpm add file:/path/to/dsh-thinking-trail # 或从 git/npm 装
# 再把 "dsh-thinking-trail" 加进该 profile package.json 的 dsh.profile.bundles
装好后重启应用:~/.dsh/thinking-trails/state.json 出现即表示已加载;加载失败会写同级 apply-error.txt。
卸载:从 bundles 删掉包名并移除依赖即可,已记录的路径和日志不会被删。
配置
在 profile 的 cordis.patch.yml 里按 id 覆盖:
- id: dsh-thinking-trail
config:
dir: /Users/you/notes/trails # 默认 <DSH_HOME>/thinking-trails
maxResults: 5 # recall 默认返回条数
改完代码怎么生效
必须重启应用。实测当前版本 dsh 的 hmr 只热载 profile 配置(cordis.patch.yml),对模块代码无效:
root: ["node_modules/..."]相对路径会解析到 dsh-hmr 包自己的目录(baseDir取的是ctx.baseUrl),因此永远 watch 不到;- 换成绝对路径、或开
ignored: [],目录虽然对上,但profileModules()只认能被 Loader 匹配的file:模块,改文件后不触发 reload; - 用
disabled: true/false强制重建也不生效。
所以流程是:改 lib/index.js → node test/smoke.mjs → 退出应用重开。重启后 ~/.dsh/thinking-trails/state.json 会盖新的 appliedAt,可用来确认加载成功;加载失败会写 apply-error.txt。
配置文件位置
- 路径库:
<DSH_HOME>/thinking-trails/trails.jsonl(2 MB 自动轮转) - 任务日志:
<DSH_HOME>/thinking-trails/logs/YYYY-MM-DD-<标题>.md - 当前日志指针:
<DSH_HOME>/thinking-trails/current-log.json(record_thought靠它找日志) - DSH_HOME 默认
~/.dsh;可用上面的dir配置整体挪走。
自测
node test/smoke.mjs
会跑一遍 mock 注册、用 dsh 真实的 JSON Schema 校验器校验工具 schema,并验证记录/检索。默认从 /tmp/ex 找 dsh 内部包副本,可用 DSH_TOOLS=/path/to/dsh-tools/lib/index.js 覆盖。
License
MIT
确认是否生效
cat ~/.dsh/thinking-trails/state.json # 看 version 与 appliedAt
系统提示里出现「## 思考路径(thinking-trail)」= 插件已加载。
改完代码后同步到运行目录(file: 依赖是复制安装,不是软链):
cd ~/.dsh/profiles/desktop && pnpm install
然后重启应用。
No comments yet. Be the first to write one.