liangmianya/dsh-synapse
liangmianya/dsh-synapseDeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
设置 → 插件 下的会话管理面板:列出全部会话的标题、工作目录、agent 预设、更新时间、轮次与步数,展开可查看消息历史,删除非运行中的会话,并经浏览器 Blob URL 导出为 JSON 或 Markdown。
DeepSeek Harness (DSH) 插件:在 Desktop 与 Web UI 的「设置 → 插件」里提供一个会话管理面板, 支持查看历史消息、删除会话、导出单条会话(JSON 或 Markdown)。
src/index.ts:Cordis Host 服务 ctx.sessionManager,通过 0.2.0-rc.2
ctx.sessionQuery 服务读取会话,负责删除、格式转换,以及 4 个 Remote API
(list / readHistory / delete / export)。src/client.ts:Web 客户端插件,通过标准 /api RPC 调用 Host,注册
settings.plugins.tab slot,在「设置 → 插件」里渲染会话列表与详情面板。src/types.ts:Host 对浏览器公开的白名单 DTO。lib/:由 TypeScript 生成的发布产物,不要手工修改。sessionId 必须是裸 UUID 或匹配 session-<uuid>,分别兼容新版子代理会话和
传统根会话。SESSION_ID_PATTERN 在 ^…$ 上锚定,因此 ../<uuid> /
<uuid>/child 这类路径穿越尝试也会被拒绝。running 状态)不可删除,需要先结束会话。0.2.0-rc.2(Desktop 或 Web)pnpm install
pnpm run typecheck
pnpm run build
pnpm run test
从插件目录生成 tarball:
pnpm pack
随后把它装进任一 profile(Desktop 和 Web 装的是同一份 tarball——cordis.patch.yml
的 sessionManager 条目是 profile 无关的):
# 官方桌面版
dsh plugin --profile desktop add ../../plugin-releases/dsh-session-manager-0.2.0.tgz
# 浏览器 Web 版
dsh plugin --profile web add ../../plugin-releases/dsh-session-manager-0.2.0.tgz
安装 bundle 后,包内 cordis.patch.yml 提供默认配置。需要覆盖时,在对应 profile
的 home patch 里使用同一个 id:
~/.dsh/profiles/desktop/cordis.patch.yml~/.dsh/profiles/web/cordis.patch.yml- insert:
- id: sessionManager
name: dsh-session-manager
config:
sessionsRoot: ~/.dsh/sessions
maxExportBytes: 10485760
previewMessageLimit: 200
如果文件当前内容只有 [],必须用上面的列表替换 [],不能把列表追加在 [] 后面。
Harness 的后置 patch 会按 id 替换整份 config,因此覆盖时需要写出希望保留的全部字段。
检查最终组合结果:
dsh --profile desktop --dump-config
dsh --profile web --dump-config
| 字段 | 默认值 | 说明 |
|---|---|---|
sessionsRoot | ~/.dsh/sessions | DSH 会话存档根目录 |
maxExportBytes | 10485760 | 单次导出的字节上限(10 MiB),超过返回 too-large |
previewMessageLimit | 200 | readHistory 单次返回的最大消息条数 |
启动 profile(desktop 或 web)后检查:
session.jsonl.zstd
解码后内容一致。Desktop 与 Web 走的是同一份 Host Remote API(
sessionManager/*),面板的 字段与行为完全一致;差异只在外壳 UI(设置 tab 的位置 / 主题)。
dsh-session-manager@0.2.x 要求宿主 @deepseek-ai/* 包为 0.2.0-rc.2
且 @deepseek-ai/cordis@~4.0.4。在 0.1.0-rc.7 宿主上的安装请继续用
dsh-session-manager@0.1.5——ctx.sessionQuery 契约和 Typert 接线在
0.1.x → 0.2.x 期间发生了变化,两条线不可互换。session-running:会话正在运行中,无法删除;请先结束该会话。not-found:会话目录已不存在,可能已被其他进程清理。invalid-session-id:sessionId 既不是裸 UUID,也不符合 session-<uuid>,请求被拒绝。permission-denied:Host 进程没有删除或读取该目录的权限。upstream-error:zstd 解压或 JSONL 解析失败,文件可能损坏。too-large:会话存档超过 maxExportBytes,已拒绝导出。