把排队消息提前送到下一步,长任务不中断
29.8/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sdlhs/dsh-interject该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
把排队中的消息提前送达,不打断不终止正在跑的模型调用,不影响当前的思考求索
README
由 DeepSeek 最新模型翻译生成dsh-interject —— 会话插队
agent 跑长任务(一段深度思考可能就是十几分钟)时,你打的话默认要等整个 turn 结束才轮到。
这个插件把新消息提前到下一个 step 边界送给模型,而当前这次模型调用完全不被打断。
DeepSeek Harness host 插件,无 client 半,不改 WebUI,不碰 app.asar。
问题
agent 正在跑一个很长的 turn(一个推理 step 就能跑几分钟)时,你发过去的消息会进入 next-turn 收件箱队列,而循环要等整个 turn 结束才会来领取它——那可能已经过了很多 step。
原理
DSH 收件箱有两条队列:
| 队列 | 谁写进去 | 何时被领取 |
| next-turn | 繁忙态 Enter(排队发送) | 整个 turn 结束后 |
| next-step | Cmd/Ctrl+Enter(插话发送) | 下一个 step 边界(一个 step = 一次模型调用 + 它的工具) |
插件监听 agent/inbox/inserted,命中策略时把消息从 next-turn 挪进 next-step。
下一个 step 一开始,模型就在历史里看到你的话,而当前这段思考一点不作废。
展开完整文档(README 剩余 1 节)
dsh-interject —— 会话插队
agent 跑长任务(一段深度思考可能就是十几分钟)时,你打的话默认要等整个 turn 结束才轮到。
这个插件把新消息提前到下一个 step 边界送给模型,而当前这次模型调用完全不被打断。
DeepSeek Harness host 插件,无 client 半,不改 WebUI,不碰 app.asar。
问题
agent 正在跑一个很长的 turn(一个推理 step 就能跑几分钟)时,你发过去的消息会进入 next-turn 收件箱队列,而循环要等整个 turn 结束才会来领取它——那可能已经过了很多 step。
原理
DSH 收件箱有两条队列:
| 队列 | 谁写进去 | 何时被领取 |
| next-turn | 繁忙态 Enter(排队发送) | 整个 turn 结束后 |
| next-step | Cmd/Ctrl+Enter(插话发送) | 下一个 step 边界(一个 step = 一次模型调用 + 它的工具) |
插件监听 agent/inbox/inserted,命中策略时把消息从 next-turn 挪进 next-step。
下一个 step 一开始,模型就在历史里看到你的话,而当前这段思考一点不作废。
为什么不能「边想边读」:llm.stream(request) 的 messages 数组在构造请求时就冻结、
HTTP body 已经在线,生成期间没有追加输入的通道。所以只有两条路——等这次调用结束(默认),或中止再重发(interrupt)。
安装
从插件市场
在 DSH 插件市场搜索 dsh-interject 安装即可,市场会从本仓库解析包。
从源码
git clone https://github.com/sdlhs/dsh-interject.git
cd dsh-interject
dsh plugin --profile desktop add .
包内声明了 dsh.bundle.patch,profile 会自动读取 cordis.patch.yml,下次启动就挂上。
装完或改完 lib/index.js 必须完全重启 DSH——DSH 以静态 ESM 加载插件,改文件对运行中的进程无效。
手工装配(不用市场)
在 profile 的 cordis.patch.yml 里加:
- insert:
- id: dsh-interject
name: dsh-interject
name 必须是包名,不能写绝对路径——市场按 loader entry 的 name 匹配,写绝对路径会让插件卡片一直显示「已安装,未生效」。
配置
~/.dsh/dsh-interject.json,热加载,改完保存即生效,不用重启。
{
"enabled": true,
"onQueue": "steer",
"onSteer": "pass",
"interruptWhile": "thinking",
"graceMs": 250,
"cooldownMs": 2000,
"includeSubagents": false,
"stallMs": 120000,
"wakeFallbackMs": 3000,
"bootMarker": true,
"log": true
}
| 字段 | 取值 | 含义 |
| onQueue | steer / interrupt / pass | 普通 Enter(进 next-turn)时怎么办。steer = 升格到 next-step(默认,零浪费) |
| onSteer | pass / interrupt | Cmd+Enter(进 next-step)时怎么办。pass = 不插手(默认,它本来就等着下个边界) |
| interruptWhile | thinking / always | 硬打断的时机;thinking 时跑工具阶段会退化成软插话,不白杀一个长命令 |
| graceMs | 毫秒 | 命中后延迟多久动手,用于合并同批消息 |
| cooldownMs | 毫秒 | 两次硬打断的最小间隔 |
| includeSubagents | bool | 是否也管子 agent(默认只管你看得见的根会话) |
| stallMs | 毫秒,0 关闭 | 单步超过这么久就在日志里写一行「还在跑」 |
| wakeFallbackMs | 毫秒,0 关闭 | 硬打断后等 driver 回到 idle 的最长时间;只在「拿不到内部唤醒字段」的退化路径上用到 |
| bootMarker | bool | 是否写 ~/.dsh/dsh-interject-boot.json(含版本号 / pid / 生效配置) |
| log | bool | 诊断日志开关 |
默认 = 完全不打断。 想让 Cmd+Enter 变成抢断手势:{"onSteer": "interrupt"}。
想彻底关掉:{"enabled": false}。
环境变量覆盖:DSH_INTERJECT_CONFIG(配置路径)、DSH_INTERJECT_LOG(日志路径,空串关闭日志)、 DSH_INTERJECT_BOOT(boot 标记路径)。
会不会更费 token
默认配置不会:插件没有多发任何请求,只是把一条待处理消息换了个队列。唯一增量是这句话更早进历史,本 turn 剩余请求多带它一遍——走 prompt cache 前缀命中,单价很低。
只有 interrupt 才真花钱:被中止那次请求已产生的输出照常计费,然后重发一整条历史。
验证
Get-Content "$env:TEMP\dsh-interject.log" -Tail 20
正常工作时能看到 next-turn -> next-step <id>;单步超过 stallMs 会出现 step N of turn M has been running Xs (still going) —— 用它可以分清「一个请求真卡了」和「很多正常 step 堆出来的长 turn」(UI 上那个「深度求索中,用时 X」算的是整个 turn)。
确认活进程跑的是哪一版(改完代码必须重启,但重启后容易怀疑「到底加载了没」):
Get-Content "$env:USERPROFILE\.dsh\dsh-interject-boot.json"
里面的 version 就是当前进程实际加载的版本号。日志是按时间追加的,看到旧配置行并不能证明进程跑的是旧代码;这个文件每次 apply() 整份重写,只有真加载了才会更新。
测试脚本会把自己的 boot 标记重定向到临时目录(DSH_INTERJECT_BOOT),否则跑一次自检就会把这里的证据冲掉。如果这个文件里的 pid 不是你正在用的 DSH 进程,说明它被别的东西写过。
离线自检(不需要 DSH):
node test/test-interject.mjs # 46 项:策略、能力探测、退化路径
node test/test-interject-loop.mjs # 18 项:接一份照抄 agent-loop 的迷你 driver
两个脚本默认测 ../lib/index.js;用 DSH_INTERJECT_ENTRY 可指向别的构建产物。
兼容性
声明为 >=0.2.0-rc.1,不设上限。为了确认插件用到的公开面,逐行读过三个宿主版本的源码:
| 版本 | 状态 |
| 0.2.0-rc.2 | 已核对(开发用宿主) |
| 0.2.1-rc.5 | 已核对(npm latest / next) |
| 0.2.2-alpha.2 | 已核对(npm alpha) |
每个能力都是探测而不是假设它存在——插件不 import 任何 @deepseek-ai/* 包,只用宿主传进来的 ctx / agent 对象。这样做不是为了兼容更老的版本,而是让它在未来的 0.3 / 0.4 上不会因为某个内部字段改名就整个失效:探测不到的一律退化为公开写法(例如拿不到 phase 就走「等 agent/status 报 idle 再 steer」,而不是唤醒闩)。
这三个版本一致的公开面:ctx.agents.get/roots、agent.session、agent.status、
agent.inbox.{nextTurn,nextStep,hasPending,claim,append,prepend,replace,remove,splice}、
agent.followup/steer/inject/cancel、session 事件 step/start、step/end、turn/end、 assistant/message、assistant/attempt、tool/call、tool/result、agent/inbox/inserted (payload {agent, message})、agent/disposed(payload {agent})、message.source.kind === 'user'、以及内部字段 agent.phase.wakeRequested。
已知边界
- steer 不是零延迟:它只能等到当前这次模型调用的边界。那次调用要跑十分钟还是得等十分钟。
- 搬消息会留下一次 outcome: 'canceled' 的 agent/inbox/spliced:公开 API 的固有形状
(inbox.remove() 走 splice())。已核实无害:goal driver 的 sameQueued() 要求
source.kind === 'goal';UI 的 retireFailedSubmission() 对纯文本提交不产生错误。
- interrupt 模式优先摸 agent.phase.wakeRequested 这一处内部字段(能闩上就还在同一个 turn 里继续,最快);闩不上时自动退到公开路径:等 agent/status 事件报 idle 再
steer() 补送,兜底 wakeFallbackMs 毫秒。两条路都有离线测试覆盖。
- 改 lib/index.js 必须完全重启 DSH(托盘退出,不是关窗口)。只有 JSON 配置是热加载的。
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
sdlhs/dsh-interject
把排队消息提前送到下一步,长任务不中断
相关插件 · 其他
模型破甲清洗HunYiSage/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,993已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,270已汉化DSH
70.8
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。