284022719/dsh-kb-sync ↗★ 0

dsh-kb-sync

在本地控制页运行并监控知识库同步流水线 适合需要本地监控同步脚本状态与日志的用户,需 Node 20+

套件
dsh-kb-sync
相容性
待驗證
版本
0.1.0
授權
MIT
最近更新
2026年10月11日

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:284022719/dsh-kb-sync

配置

插件不猜你的目录:没配置时它照常加载,控制页会直接告诉你缺什么。

方式一: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/statusGET状态 JSON:路径、凭据文件年龄、进度文件末 8 行、最新日志尾部、拉取/回填进度
/__dsh-kb-sync/tokenGET / POST查 / 存 userToken(GET 只回「配没配」,永不回值)
/__dsh-kb-sync/token/clearPOST清除已存的 userToken
/__dsh-kb-sync/pullPOST增量拉取,同步返回本轮摘要
/__dsh-kb-sync/backfillPOST启动全量回填,立即返回 202(进度看 /status)
/__dsh-kb-sync/kbGET知识库状态(条数 / 大小 / 最近一次拉取)
/__dsh-kb-sync/search?q=&role=GET检索;role=user 只看用户发言
/__dsh-kb-sync/conversation?id=GET取一个会话的完整 Markdown(超过 400 KB 截断并标注)
/__dsh-kb-sync/runPOST启动你已有的同步命令;已在运行时返回 409
/__dsh-kb-sync/doctorPOST运行体检命令,返回 stdout / stderr / 退出码
/__dsh-kb-sync/log?name=GET读日志目录下某个文件的尾部(文件名白名单 + 越界拒绝)