前言¶
DeepSeek Harness (DSH) 在处理长任务时,通常只提供两种上下文状态:保留全部内容,或者由 dsh-compaction-basic 压缩成一个不可见的摘要。在大规模任务中,这会导致垃圾数据(如 4k token 的 grep 堆栈、已解决的子任务)长期占用窗口,直到触发阈值进行无法检查或撤销的压缩。
catsenior507/dsh-context-assembler 将上下文从单纯的“长度”转变为“一组决策”。它基于会话日志构建可检查的上下文树,允许你通过浏览器面板控制模型实际接收的内容,同时保持未修改节点的 KV 缓存兼容性。
核心功能¶
该插件在 DSH 会话表面(Session Surface)之上建立了一个上下文树。其核心操作是将 N 个连续的事件节点替换为 1 个节点,从而改变模型接收到的内容。
节点模式
每个节点支持三种模式,通过三态开关切换:
* full:原样保留内容,不做替换。
* key:保留关键信息,内容会被替换为摘要。
* off:丢弃内容,仅保留极短的标记(可配置为 0 tokens)。
主要能力
* 上下文树:基于会话日志生成,支持按层级查看(turn -> step -> system/user/assistant/tool)。
* 浏览器面板:提供可视化编辑、实时预览/应用、统计信息(可见/折叠/原始 token 数)。
* 代理工具:注册了 context_assembler 工具,支持 tree、set、preset、messages 四个操作。
* KV 缓存兼容:因为只替换被折叠的节点,未修改的节点位置保持不变,可被 Provider 复用 KV 缓存。
安装与启用¶
使用官方安装命令添加插件:
dsh plugin --profile web add https://github.com/catsenior507/dsh-context-assembler
安装后需重启 dsh web 进程以加载插件。dsh-web-watchdog 面板通常提供快速重启按钮。
使用方式¶
浏览器面板操作¶
- 打开面板:在浏览器中按下快捷键
Ctrl+Shift+K,或者点击界面右下角的 Assembled Context 按钮。 - 会话选择:默认显示最近活跃的会话。子代理会话会单独列出,因为它们拥有独立的表面。
- 编辑树:
- 在树视图中,每一行代表一个节点(turn、step、system、message 等)。
- 点击行首的三态开关切换
full/key/off。 - 顶部工具栏提供快捷操作,例如“工具结果设为 key”、“关闭所有内容”或“展开所有”。
- 应用更改:调整完成后,点击底部的 Apply 按钮。只有点击 Apply 后,更改才会写入会话日志,否则仅保存在浏览器内存中。
代理工具¶
该插件向模型注册了 context_assembler 工具,支持以下动作:
tree:读取当前上下文树的结构,包括 surfaceSeq、节点类型、当前模式和估算 token 数。set:通过 surfaceSeq 修改节点的模式。digest 由模型自行编写,dryRun 可用于预览效果。preset:编写规则预设,供用户一键应用。messages:查看模型当前实际接收到的消息及其 token 总数。
这让代理可以在子任务完成后,主动将自己操作的历史折叠为单行结论,而不是被动等待压缩。
注意事项¶
- 实时派生:面板每次打开时都会从会话日志重新派生树,不依赖插件的持久状态。这意味着恢复会话、切换进程或代理自行折叠后,面板显示与日志是一致的。
- 原子性要求:工具调用(tool-call)与其结果必须保持原子性(完整组)。插件会自动扩展折叠范围以覆盖整个工具组。
- 折叠恢复限制:目前的表面替换仅支持 N→1。多节点折叠(N>1)无法完美恢复。插件明确说明:单节点折叠可原样恢复,多节点折叠会恢复为带有分隔符的完整重放消息。
- 配置细节:配置文件中包含 loopback API 端口设置(如 port: 4799),用于在无 webServer 环境下的通信。
总结¶
Assembled Context 将 DSH 的上下文控制权交还给了用户和代理。通过浏览器面板和代理工具,你可以精细管理 Token 预算,避免无关历史污染窗口,同时利用 KV 缓存优化性能。