dsh-kb-sync
在本地控制页运行并监控知识库同步流水线 适合需要本地监控同步脚本状态与日志的用户,需 Node 20+
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:284022719/dsh-kb-sync说明文档
阅读完整 README ↗配置
插件不猜你的目录:没配置时它照常加载,控制页会直接告诉你缺什么。
方式一:profile patch(~/.dsh/profiles/ /cordis.patch.yml,按 id 覆盖)
- id: dsh-kb-sync
name: 'dsh-kb-sync'
config:
root: 'D:\path\to\pipeline' # 流水线根目录;下面几项都能由它推出来
# syncScript: '...\sync\sync-daily.cmd' # 默认自动发现 sync\sync-daily.{cmd,ps1,sh}
# logDir: '...\sync\logs'
# lastSyncFile: '...\sync\LAST-SYNC.txt'
# tokenFile: '...\.token' # 只读 mtime,不读内容
# tokenOldDays: 21 # 超过就标「token 偏旧」
# kbDir: '...\knowledge-base' # 体检脚本的默认落点
# doctorScript: '...\tools\kb.mjs' # 任何可执行脚本都行
# doctorArgs: ['doctor']
# nodeBin: 'node'
# timeoutMs: 3600000
方式二:插件文件夹里的 config.json(推荐——配置跟着代码走,整包拷走也不丢)
// /config.json (可先复制 config.example.json 改名)
{ "root": "D:\\path\\to\\pipeline", "outDir": "data/kb", "tokenOldDays": 21 }
方式三:设置文件(有些 profile 会在重启时重写自己的 cordis.patch.yml,手写的 loader 行会丢;设置文件不会)
// $DSH_HOME/.dsh-kb-sync.json (未设 DSH_HOME 时即 ~/.dsh/.dsh-kb-sync.json)
{ "root": "/srv/pipeline", "tokenOldDays": 14 }
方式四:环境变量 DSH_KB_SYNC_ROOT / DSH_KB_SYNC_OUT_DIR。
优先级:loader config → 环境变量 → 用户设置文件 → 插件文件夹里的 config.json → 内置默认。文件缺失或 JSON 坏掉都按空处理(不影响加载),读到哪些会在 /status 的 configFile 字段里报告(used / localUsed)。
数据落在哪(自包含)
默认就是插件文件夹内:/data/kb/(conversations/*.md + conversations.jsonl + catalog.json)。
所以插件不与别的脚本共用知识库目录、也不会互相覆盖 —— 想复用别人的库才需要显式配 outDir。
// 例:把知识库放到别处(或复用一个已有库)
{ "outDir": "D:\\dsh\\knowledge-base" }
POSIX 示例(syncScript 指向 .sh 时用 /bin/sh 执行):
{ "root": "/srv/kb-pipeline", "syncScript": "/srv/kb-pipeline/sync/daily.sh", "logDir": "/srv/kb-pipeline/sync/logs" }
使用
打开 http://127.0.0.1:/__dsh-kb-sync/(与 GUI 同一个端口)。页面分三步,另有编排区:
① 网页端登录态 —— 粘贴一次 userToken,它只进 DSH 凭据服务(不落明文文件、不进日志/响应)。
② 拉取
- 拉取新对话(增量):会话列表 → 只取「新增 / 续聊」的线程 → 写
conversations/*.md+conversations.jsonl+catalog.json;续聊就地更新、文件名不变。 - 全量回填:走官方导出包(
export_all→ 轮询到就绪 → 下载 zip → 解析conversations.json)。只在第一次需要完整历史时用;已有会话仅在导出内容更多时才更新。服务端生成导出可能要几分钟,所以它在后台跑,页面每 3 秒刷新阶段:trigger → waiting-export → downloading → parsing → merging → done。
③ 检索 —— 关键词搜标题与正文,可勾「只看用户说的话」;每条命中都可点「展开全文」,直接在页面里读那个会话的完整 Markdown(思考过程与联网检索记录都在)。编排区三个按钮仍是:运行已有同步脚本 / 跑知识库体检 / 刷新状态。
| 路由 | 方法 | 作用 |
|---|---|---|
/__dsh-kb-sync/ | GET | 控制页(单文件 HTML,无外部请求) |
/__dsh-kb-sync/status | GET | 状态 JSON:路径、凭据文件年龄、进度文件末 8 行、最新日志尾部、拉取/回填进度 |
/__dsh-kb-sync/token | GET / POST | 查 / 存 userToken(GET 只回「配没配」,永不回值) |
/__dsh-kb-sync/token/clear | POST | 清除已存的 userToken |
/__dsh-kb-sync/pull | POST | 增量拉取,同步返回本轮摘要 |
/__dsh-kb-sync/backfill | POST | 启动全量回填,立即返回 202(进度看 /status) |
/__dsh-kb-sync/kb | GET | 知识库状态(条数 / 大小 / 最近一次拉取) |
/__dsh-kb-sync/search?q=&role= | GET | 检索;role=user 只看用户发言 |
/__dsh-kb-sync/conversation?id= | GET | 取一个会话的完整 Markdown(超过 400 KB 截断并标注) |
/__dsh-kb-sync/run | POST | 启动你已有的同步命令;已在运行时返回 409 |
/__dsh-kb-sync/doctor | POST | 运行体检命令,返回 stdout / stderr / 退出码 |
/__dsh-kb-sync/log?name= | GET | 读日志目录下某个文件的尾部(文件名白名单 + 越界拒绝) |