前言¶
在 DeepSeek Harness(DSH)里,智能体做探索时会产生不少中间步骤:读取、搜索、试验、工具调用与输出。这些步骤写进 durable log 便于审计,但如果继续留在模型可见的会话表面,后续请求会一直携带这些中间过程,占掉本来可用于当前任务的上下文。
@dpskh/tool-rewind 解决的是这个问题:在保留 durable log 的前提下,把最近一个 checkpoint mark 之后的探索表面折叠成一份自动生成报告。下一轮请求开始时,模型看到的是报告,而不是探索过程中的每一步。
这是什么¶
@dpskh/tool-rewind 是 dpskh 维护的 DeepSeek Harness 插件,定位为 exploration fold。挂载后,它提供两个入口:
ctx.rewind
rewind
其中 ctx.rewind 是服务接口,rewind 是面向模型的插件工具。它需要与 @dpskh/tool-checkpoint 配合使用:checkpoint 负责记录 mark,rewind 负责折叠 mark 之后的探索表面。
该插件不修改上游包,也不写自己的 session events;折叠只提交一个 core-vocabulary 的 user/message 替换。当前已核实资料中的包信息如下:
name: @dpskh/tool-rewind
version: 0.2.0
private: true
license: MIT
核心能力¶
折叠探索表面¶
它读取 session 中最新的 checkpoint mark,选择该 mark 之后的一段 surface span,通过 ctx.llm 生成报告,然后把这段探索表面替换为报告。
这个替换使用与 DSH compaction seam 相同的机制:
surfaceOp: { op: 'replace' }
替换之后,后续请求不再携带探索过程中的中间步骤;durable log 仍保留完整探索内容,用于审计。
服务调用¶
文档给出的服务调用方式是:
ctx.rewind.rewind(agent, signal)
这一步会完成三件事:选择最新 mark 之后的 surface span,调用报告生成,然后提交替换后的 user/message 报告。
如果折叠失败,插件不会写入内容:原探索区域保持完整,mark 仍然 active,调用会以 classified RewindError 拒绝。资料列出的失败类型如下:
NO_CHECKPOINT
EMPTY_REGION
UNBALANCED
FOLD_IN_PROGRESS
CHANGED
SHRINK
插件使用 per-session in-process lock 拒绝同一 session 的并发折叠。只要 session 中存在 active checkpoint mark,它会注入一个 turn-stopping warning,使当前 turn 不能结束,直到 rewind 折叠探索。
报告生成¶
报告由 ctx.llm 生成。报告调用中的 provider/model 解析顺序为:
- 配置里的 override;
- session 最后一次 routed
request/headerconfig; - agent options。
如果这三处都无法解析出 provider/model,报告调用会失败。
当 route 暴露 off reasoning effort 时,报告调用会禁用 thinking。空完成会重试,最多重试次数由配置项 maxSummarizationRetries 决定。
报告调用会复用 session 的 system prompt 和 tool schemas,使其保持为 last routed request 的前缀,从而维持 warm prefix cache。
安装与启用¶
当前已核实资料没有给出官方安装命令。不要凭包名拼接命令;下面只展示资料中出现的挂载配置。
单独配置 @dpskh/tool-rewind:
- id: tool-rewind
name: '@dpskh/tool-rewind'
config:
toolName: rewind
maxTokens: 1024
maxSummarizationRetries: 2
summarizationProvider: deepseek
summarizationModel: deepseek-chat
reportLanguage: en
字段含义如下:
toolName: rewind
maxTokens: 1024
maxSummarizationRetries: 2
summarizationProvider: deepseek
summarizationModel: deepseek-chat
reportLanguage: en
实际使用时通常需要和 checkpoint 插件一起挂载:
- id: tool-checkpoint
name: '@dpskh/tool-checkpoint' # https://github.com/dpskh/dsh-checkpoint
- id: tool-rewind
name: '@dpskh/tool-rewind'
config:
reportLanguage: en
只挂载 @dpskh/tool-rewind 时,因为没有 checkpoint mark,折叠没有对象,会以 no-checkpoint error 失败。
典型用法¶
调用服务¶
在 DSH 代码或插件逻辑中,可以直接调用:
ctx.rewind.rewind(agent, signal)
这个调用负责选择表面范围、生成报告,并提交替换后的报告消息。
模型工具返回¶
rewind 工具无参数,资料给出的返回对象为:
{ markId, foldedNodes, start, end, foldedChars, reportChars }
模型可见性¶
替换后的报告从下一次请求开始对模型可见。探索过程中的 durable events 仍留在 log 中,但不再出现在模型可见的表面上。
插件还会加入一个系统提示段落:
tool:rewind
用于建立 fold discipline,也就是在标记后的探索发生后及时折叠,而不是把中间步骤一直留在模型可见表面。
适用场景与注意¶
适合谁¶
适合需要同时保留审计日志和压缩模型可见上下文的 DSH 智能体场景。常见做法是:
- 用
@dpskh/tool-checkpoint标记探索起点; - 让智能体完成一段探索;
- 用
@dpskh/tool-rewind把这段探索折叠为报告; - 后续请求只基于报告继续,而不是基于整段中间过程。
需要注意的限制¶
-
必须有 checkpoint mark。
rewind单独工作时,会因为缺少 mark 而失败。 -
一个 marker 只折叠一次。
对同一个 marker 再次折叠会被拒绝为空区域。新一轮探索需要新的 checkpoint。 -
shrink 检查基于字符数,不是 token 数。
报告必须比被折叠区域的模型可见文本更短。图像块没有文本尺度,会被保守忽略。 -
某些 route 下可能出现空完成。
如果 route 没有暴露offreasoning effort,默认 thinking 可能耗尽maxTokens,导致空完成。此时只能依赖maxSummarizationRetries的重试预算。 -
自动 compaction 可能先于 rewind 发生。
如果自动 compaction 在rewind运行前遮蔽了部分探索,折叠会覆盖表面上仍然剩余的部分;storage-resident mark 仍会保留。 -
失败时不写入。
失败会保留原区域,保留 active mark,并以 classifiedRewindError拒绝。 -
安装前需要检查源码与许可证。
插件以当前 DSH 进程权限运行。安装前建议检查源码、依赖和MIT许可证是否符合你的使用环境。
链接¶
目录页:
https://dshfind.com/zh/plugins/dpskh/dsh-rewind?ref=badge
GitHub:
https://github.com/dpskh/dsh-rewind