READMESource: main@226d27c5
dsh-archive-toolkit
给 DeepSeek Harness 的会话归档工具:删会话、删消息、按消息分叉、整条消息引用。
DSH 的会话日志是只追加(append-only)的:官方只提供归档,没有消息级删除、任意消息分叉或“整条消息引用”的入口。本插件把这些能力补成一个 bundle,并且不改写任何历史日志。
这是一个整合型插件:消息删除的 surface 折叠与转录隐藏改编自 dsh-delete-turn,会话级联删除改编自 dsh-session-delete-cascade,两者均为 MIT。分叉与整条引用为本项目新增的胶水层。详见 NOTICE。
功能
| 位置 | 能力 |
|---|---|
左侧会话 ⋯ 菜单 |
删除会话:连同子代理子孙一起删除;运行中的会话会被拒绝并指出是哪一条 |
| 消息悬停操作行 | 删除:删除该消息或整轮;分叉:保留该条之前的记录,打开新会话;引用:把整条消息作为引用带入输入框 |
| 助手回复操作条 | 分叉、引用、删除三个按钮,位于官方复制/反馈按钮旁 |
| 会话标题栏 | 多选删除:一次勾选多条消息/步骤/回复,合并为一次替换请求 |
- 删除是“遮蔽”而非改写:追加一条官方
surfaceOp: { op: 'replace', startSeq, endSeq }载体事件,后续模型请求不再包含被遮蔽内容;原始日志逐字节保留,可审计。界面隐藏依据从日志里的替换事件重建,刷新、重启后仍然生效。 - 分叉语义:用户消息 → 切在该轮开始之前,新会话保留之前的记录,原提问回填到新会话输入框;助手回复 → 切在它回答的那条提问之后,新会话保留提问、丢掉这条回复,便于换一种答法。
- 引用语义:整条消息(提问或回答)作为 QuoteNode 进入输入框,可继续编辑、补充后发送。
安装
从 GitHub 安装(推荐,个人重装用)
桌面端:
设置 → 插件 → 添加插件
粘贴仓库地址:
https://github.com/chwb0505/dsh-archive-toolkit完全退出并重开 App(或刷新页面)。
命令行 profile(非 desktop):
dsh plugin --profile <profile> add github:chwb0505/dsh-archive-toolkit
desktopprofile 由桌面端独占管理,不能使用 CLI 安装;请走“设置 → 插件”。
从本地目录安装(开发)
dsh plugin --profile <profile> add file:C:/path/to/dsh-archive-toolkit
卸载
桌面端:设置 → 插件,找到本插件点卸载。卸载不会恢复已遮蔽的内容(原始日志仍在,可用官方工具重建)。
使用
- 删会话:侧栏会话行
⋯→ 删除会话。确认框会列出将被连带删除的子会话;运行中的会话会被拒绝。 - 删消息:悬停任意消息,点垃圾桶;用户消息上还有“删除这一轮”。助手回复的删除按钮在官方操作条里。
- 分叉:悬停消息点分叉图标。新会话打开后,输入框已回填原提问,改完直接发送即可。
- 引用:悬停消息点引用图标,整条消息进入输入框,继续输入你的问题。
- 多选删除:会话标题栏右侧的勾选按钮进入多选,勾选后底部浮条“删除选中”。
技术说明
- Host 半:注册
GET /api/archive-toolkit/state、GET /api/archive-toolkit/context、POST /api/archive-toolkit/delete、POST /api/archive-toolkit/session-delete;只接受回环地址与同源请求。 - Client 半:通过官方 slot(
conversation.chat.assistant-actions、conversation.input.overlay、conversation.session.header.utilities、shell.overlay)和data-chat-flow-*DOM 锚点接入,不读取 React fiber,不依赖 CSS Module 哈希类名。 - 删除的 surface fold、范围规划与转录隐藏逻辑改编自 dsh-delete-turn;会话血缘遍历与有序删除改编自 dsh-session-delete-cascade。
兼容性
- 实测:DSH
0.2.2-rc.1(Windows 桌面端,Chromium 内核)。 - Node:
>=22。 - 0.2.x 的客户端 slot 或 Chat DOM 锚点若有改动,插件可能需要跟进;删除 Host 侧只依赖
sessionQuery/sessions/sessionPersistence等公开服务。
安全边界
- 所有 Host 路由只接受回环地址与同源请求。
- 不发送任何遥测,不访问外部网络,不读取会话之外的用户文件。
- 会话删除只删除 DSH 会话根目录内的会话目录,并对会话 id 做字符校验。
- 删除前有确认框;运行中的会话拒绝删除。
已知限制
- 删除不可撤销:被遮蔽的内容无法“反删除”(原始日志仍在,但插件不提供恢复入口)。
- 分叉要求源会话有可用的切点;首条提问之前没有记录,无法分叉。
- 引用只取文本:附件不会随引用进入输入框。
- 会话删除按持久化 header 遍历子代理血缘;纯内存中尚未落盘的子会话不在遍历范围(实际使用中子会话先落盘)。
- 宿主插件树只在启动时加载,安装/升级后必须重启 DSH。
开发
npm test # surface fold / 分叉切点 / 会话级联删除
node --check src/index.js
node --check src/client.js
目录:
src/index.js Host 路由与消息删除
src/logic.js surface fold、范围规划、血缘与隐藏台账
src/session-delete.js 会话级联删除
src/client.js 浏览器半:槽位、行内按钮、弹窗、引用/分叉
test/ Node 测试
许可
MIT。第三方改编部分见 LICENSE-delete-turn、LICENSE-session-delete-cascade 与 NOTICE。
No comments yet. Be the first to write one.