deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
English | 中文
让看不到自己思考的模型,看见自己的内心。
DSH 默认会保留模型的思考过程并传进下一步循环,只有触发上下文压缩时才会丢。闭源模型是例外:它们的加密思考不会完整进入 DSH 上下文,也无法用 provider 的原生状态接续,于是每进入下一步,模型都要重新推测上一步做了什么——这份推测在下一步又会作废,白白消耗时间与 token。
本插件让被选中的路由在调用工具前用可见文本留下一句行动摘要,并把它写进会话历史,下一步及其之后每一步都能直接读到。它只影响被选中的路由,不改动其它模型,也不隐藏任何历史。
⚠️ 安装前请衡量: 启用后,被选中的模型会从流式输出变为伪非流式——回复内容由插件缓存后再一次性输出。其它模型不受影响。
provider + model 精确匹配。dsh plugin --profile web add "github:zhourenke/dsh-reasoning-summary"
安装后需要重启 DSH 并刷新页面,随后可以在 设置 → 插件 → 推理摘要 看到本插件的配置选项。
卸载:
dsh plugin --profile web remove @zhourenke/dsh-reasoning-summary
插件默认完全关闭(models 为空)。
在 设置 → 插件 → 推理摘要 里勾选要触发的路由并保存即可,卡片读的是 DSH 实时的模型目录。
也可以直接编辑 ~/.dsh/settings.yaml:
reasoning-summary:
models:
- provider: <provider-id>
model: <model-id>
provider 与 model 必须与 DSH 里实际的 id 逐字一致,两个都要匹配;写错的条目不会报错,只是不生效(在设置卡片里勾选就不会写错)。
保存即生效,无需重启无需刷新网页。
确认它在工作:被选中的模型在每步最后一个工具调用之后,界面上会弹出 注入上下文 · reasoning-summary 提示。
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
models |
array | [] |
触发路由列表,每项为 { provider, model }。空列表是唯一的关闭状态,也是默认值。 |
provider 与 model 必须同时匹配;同一个 model 挂在另一个 provider 下不会启用那条路由。插件会在每个 Session 首个选中且已预热的步骤,向模型追加一条普通上下文消息,要求它在调用工具之前,先用可见文本写一句行动摘要,格式是一个字面标签:
<summary>target or artifact, the concrete evidence or current state, and the immediate operation or decision</summary>
工具只在 DSH 收到结构化的 DSH tool-call block 时才会执行;把工具调用写成普通可见文本不会执行。插件要求摘要写明相关的用户请求、涉及的文件 / 函数 / 命令、已确认的观察或结果,以及紧接着要做的动作或决定;"继续分析""检查实现"这类无法据此行动的话没有意义。
这条要求在每个 Session 中只追加一次:后续步骤和后续 turn 都不会重复累积同一段文字,插件重新激活时也会先确认历史里是否已有它。它是普通的会话历史消息,因此中途切换模型后同样读得到,也不会撤销或重排当前步骤已有的用户消息与摘要。路由未选中或仍在预热时不追加;模型选择和设置变化只影响下一次准入。
Provider 是否命中前缀缓存取决于 Provider 自己的缓存键与请求投影,因此这种消息通道不构成零成本保证。
插件会缓存被选中路由中仍需摘要解析或工具文本过滤的输出。处于缓冲区安全前缀的完整 reasoning block 会在匹配的 block-end 到达时立即按 Provider 原始顺序输出,供下游流处理插件(例如 reasoning-merge)实时消费;普通文本、工具帧和 usage 仍会等待摘要判定或 finish。因此该路由是部分伪非流式:连续的 reasoning block 可以流式显示,但任何位于未决文本之后的内容不能越过该文本,以免重排输出或泄漏工具步骤普通文本。
判定只看可见文本:只写在推理 / 思考内容里的摘要等同没写。摘要还必须出现在第一个工具调用之前。工具步骤的这些文本(包括摘要标签本身)都不会显示在界面上。 模型漏写时,下一步会带上这段提醒:
Missing action summary: no <summary> tag was received in visible text — reasoning/thinking content is never read, and text outside the tag is discarded. Before your next tool call, emit the summary as visible assistant text in a literal <summary>...</summary> tag.
流在闭合标签之前就结束时(非失败),已收到的内容按不完整处理:
Summary incomplete: the response ended before the closing tag; only a fully closed tag counts as a summary.
当同一次输出出现两个完整的 <summary> 标签却没有工具调用时,插件会判定疑似自旋:立即放行当前输出、向下一步排队 [No tool call received],并让该 Session 进入自旋抑制。抑制期间已勾选路由的后续步骤都会透明预热,不注入本插件提示,也不解析或隐藏流;只有后续没有再次自旋、且完整成功的结构化工具步骤到达 step/end 后,才会解除抑制并在下一步恢复提示。
[No tool call received]
DSH executes tools only when the assistant emits structured DSH tool-call blocks. Text that imitates a tool invocation is ordinary assistant text and is not executed.
Use the appropriate structured DSH tool-call block(s) now, or stop writing summaries and provide the complete user-facing answer.
这条提示排在下一步的 inbox 里:轮次自然结束时会随下一步自动到达模型,无需你干预;你手动终止回答也不会让它丢失——DSH 的用户中断会保留待领取的队列,你随后发出的下一条消息会唤醒模型,提示在同一个步骤边界紧跟那条消息进入上下文。所以中断空转后只需随口说一句(例如「注意工具调用格式」),插件自带的准确提示就会自动送达,不必由你复述细节。
最终的普通答复不要求摘要,也不会产生记录,其中的字面 <summary>…</summary> 会原样保留。
每个工具步骤的摘要都以普通 user/message 写入或排队,模型看到的是紧凑形式:
[Action summary]
Read src/index.ts; confirmed the parser location; next update the nearest-pair regression.
只有不完整或缺失的状态才在标题里标 partial 或 missing。工具循环继续时,摘要会在所有根工具调用的 tool/result 提交后进入 Agent inbox;工具调用直接结束 turn 时,摘要直接追加到 durable session。两种形式都留在正常会话历史里,任何后续 provider / model 都读得到。
模型只输出推理、既没有工具调用也没有可见答复时,插件会在同一个 turn 内请求继续,通知标题为 [Continue after reasoning-only response],最多 3 次。
预热状态按 Session 隔离,只存在于内存中、不写入会话历史,因此 DSH 重启后所有路由都需要重新预热。冷启动、模型切换,或上一次工具步骤已超过 30 分钟时,选中路由的下一步是透明预热:不注入本插件提示,也不解析、隐藏、relay 或 continuation 当前流。
只有当这个步骤真正进入、产生结构化工具调用、助手消息正常完成、工具结果已经结算并到达 step/end 后,当前路由才会记录一条成功工具证据;这条证据不要求步骤当时已勾选,未勾选只影响当前步骤是否处理插件输出,不影响它作为预热证据。之后同一 Provider/Model 路由在距最近一次成功工具步骤严格少于 30 分钟时可以直接接续;正好 30 分钟、时钟回拨、没有成功工具步骤、失败或中断步骤都会重新预热。
每次切换 Provider/Model 都会强制重新预热,即使目标路由以前已经准备好,或切换前后都在启用列表中。首次直接回答不会让插件提前生效;例如第一轮没有工具调用,第二轮第一步出现工具调用时该步仍透明放行,第二轮后续步骤才可获得提示。
每个步骤在准入时采样一次当前路由与设置:
| 步骤准入状态 | 当前步骤的新行为 | 已有摘要历史 |
|---|---|---|
| 精确路由已启用且已预热 | 注入提示;处理当前流;可产生 relay 或 continuation | 完整可见 |
| 精确路由已启用但正在预热 | 普通流原样通过;不解析、不隐藏、不产生 relay / continuation | 完整可见 |
| 精确路由未启用 | 普通流原样通过;不产生新的 relay / continuation | 完整可见 |
已准入的步骤不受中途变更影响:模型切换或设置变更只作用于下一个步骤,当前步骤仍会写完摘要并持久化。因此以下行为都是有意设计的:
<summary>…</summary>;只写在推理 / 思考内容里的不算。[Action summary: missing] / [Action summary: partial] 表示上一条摘要没写全;[Continue after reasoning-only response] 表示上一轮只有推理、没有动作也没有答复。reasoning_content / thinking 照常传递,也不删除历史里的 thinking。models 只决定新步骤是否产生摘要,不改变任何模型能看到的历史范围。<summary> 标签却没有任何工具调用时,插件放行本步文本并注入自己的提示(而不是隐藏),便于及时中断;带真实工具调用的步骤不受影响。在 DSH v0.1.5-rc.1(2026-09)下测试通过。
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。