在触顶前收尾回答,并提醒父代理唤醒被截断的子代理
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/ADkun/dsh-auto-stop.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
该类项目属生态应用(桌面端 / Web 外壳),不以 dsh plugin add 方式安装,请按仓库说明部署
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0⚪ 扫描:无法判定尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。
- · 取源不可用(Error: github tarball HTTP 404 @ https:
- · api.github.com
- · repos
- · ADkun
- · dsh-auto-stop
- · tarball)
扫描于 2026/11/3(1 天前)
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 触顶前结束响应
- 提醒父代理唤醒子代理
DSH 插件,在输出 token 触顶前结束响应,并引导被截断的子代理的父智能体把它送回继续干活。
README
由 DeepSeek 最新模型翻译生成dsh-auto-stop
一个 DSH 插件,在响应即将触到模型输出上限之前就结束它,这样截断提示出现时,还有空间把回答干净地收尾——而当这条响应来自子代理时,它会告诉该子代理的父智能体,直接把它送回工作。
已达到输出 token 上限回答被截断,已有输出保留在对话中。发送“继续”可让模型接着输出。
DSH 本来就会在上限处停下,而且是正好停在上限:回合在句子中间结束,工具调用被丢弃,想拿到剩下的回答,得靠有人注意到并追问。对于后台子代理,根本没人会注意到——它没法为自己请求续写,父智能体只有碰巧读到结算通知才会知道。
这个插件把停止点稍微提前,并让后续动作自动发生。
工作原理
1. 在模型输出流上做抢先截断。
展开完整文档(README 剩余 1 节)
dsh-auto-stop
一个 DSH 插件,在响应即将触到模型输出上限之前就结束它,这样截断提示出现时,还有空间把回答干净地收尾——而当这条响应来自子代理时,它会告诉该子代理的父智能体,直接把它送回工作。
已达到输出 token 上限回答被截断,已有输出保留在对话中。发送“继续”可让模型接着输出。
DSH 本来就会在上限处停下,而且是正好停在上限:回合在句子中间结束,工具调用被丢弃,想拿到剩下的回答,得靠有人注意到并追问。对于后台子代理,根本没人会注意到——它没法为自己请求续写,父智能体只有碰巧读到结算通知才会知道。
这个插件把停止点稍微提前,并让后续动作自动发生。
工作原理
1. 在模型输出流上做抢先截断。 它注册一个 llm/stream 监听器——也就是包裹每次流式模型调用的那条瀑布流——并按 harness 自己的优先级顺序,解析当前这次调用的输出上限:
| 来源 | 含义 |
| options.maxTokens | 本次调用冻结的每请求上限 |
| agent.options.maxTokens | 循环向它的智能体请求的上限 |
| llm.resolveModelInfo(...).defaultMaxTokens | 调用方省略上限时,适配器物化的默认上限 |
它在响应到达时实时计量(支持 CJK;见限制),一旦估算值达到 ceiling - reserve,就关闭仍然打开的块,发出 harness 自己的终止信号 { kind: 'max-tokens' },并停止读取服务商。
这个终止块不是绕过 DSH 的 hack;它就是 DSH 的截断路径。max-tokens 结束会让智能体循环提交这条不完整的助手消息、锁存原因、跳过工具派发(在 max-tokens 下,块组装器会丢弃工具调用块,正是因为它们无法安全执行)、结束回合,并渲染上面的提示。下游的一切——持久会话日志、聊天消息、SubagentResult.stopReason——都由同一个信号推导出来,所以下游不需要知道这个插件的存在。
2. 为被截断的子代理做父级交接。 当耗尽空间的智能体是被委派的子代理时,插件会把一条两行通知引导进它的父智能体,并点名继续它的确切调用:
[dsh-auto-stop] 子代理 <child-id> 输出触顶被中断(约 31000 tokens)。
立即发送:send_message(agent_id="<child-id>", message="继续(从断点接着写,不要重复已写内容)")
Agent.steer 是每条 DSH 投递路径底层的原语:它把一条面向模型的消息拼接进智能体的收件箱并唤醒它,所以空闲的父智能体会开启一个回合,把这条通知当作指令来读。它自己再 send_message 回子代理时,要么引导活跃的子代理,要么冷恢复已结算的那个——所以无论子代理的运行是否已经结束,交接都能生效。
根对话刻意不通知:它们的受众是你,而你已经收到 DSH 自己的通知。subagent_fork 也不会收到通知——它共享血缘,却不构成委派,去干预它的「父级」只会打断一段无关的对话。
3. 没有上限的调用就不管。 截断点是算出来的,不是猜出来的:解析不出上限时,插件不会凭空造一个,不包装流,不截断,原样把响应交给 harness 处理。它按模型说一次,而不是按响应说一次:
[dsh-auto-stop] no output ceiling for ali/deepseek-v4.1-flash: standing aside (declare maxTokens on the model entry to arm the early cutoff)
上限已知、但估算偏低时,服务商会自行截断——这次截断仍走同一条交接路径上报,所以子级的续写从不依赖估算是否准确。
因此 defaultMaxTokens 总得有个来源;见 Arming the cutoff。
安装
从这个检出目录安装 bundle,或直接从仓库安装:
plugin_manager:
action: install_bundle
target: D:\dsh\dsh-auto-stop
plugin_manager:
action: install_bundle
target: git@github.com:ADkun/dsh-auto-stop.git # or: github:ADkun/dsh-auto-stop
本地 target 必须是绝对路径;git@host:owner/repo 写法、github:owner/repo 简写、托管仓库 URL 都通过 pnpm 拉取。bundle 的 cordis.patch.yml 会插入一行:
- insert:
- id: dsh-auto-stop
name: 'dsh-auto-stop'
要移除插件,删掉这一行即可(或在 Plugins 页面禁用它)。激活时它会在日志里说明:
[dsh-auto-stop] armed: responses end just before their output ceiling, and a truncated child is handed back to its parent
Arming the cutoff
这行日志只说明监听器已注册。截断本身需要调用的输出上限,而 只有当服务商配置里模型的条目声明了 maxTokens,DSH 才知道这个数字。 pi-ai 路由如果把模型当作普通的 id/name 列表交出去——OpenAI 兼容网关就是这种情况,也是最常见的情况——就什么都没声明,所以要按模型声明一次上限:
llm-pi-ai provider config, per model
- id: deepseek-v4.1-flash
name: deepseek-v4.1-flash
maxTokens: 32768 # the model's real output ceiling
一次声明干两件事:DSH 把这个数字放进每个请求,服务商到此为止;插件也用同一个数字计量,提前一个预留量停下。32768 是 pi-ai 自己的内部兜底值,不代表任何具体模型——请用模型真实的上限。填得比真实值低,响应会比需要的更早结束;什么都不声明,就由服务商自己的限制说了算,而这恰恰是插件看不到的情况。
声明了上限,插件会按模型披露一次,并记进日志:
[dsh-auto-stop] ali/deepseek-v4.1-flash reports a 32768-token output ceiling
在模型的额度上限被声明之前,插件对该模型的调用完全不采取任何动作:不截断、不计量、不交接。它看到的该模型第一次调用会写下上面那句「暂不介入」;之后对同一模型的调用保持沉默,第二个模型则另算一例。对未声明的模型来说,这是诚实的答案——没有数字,就没有依据提前叫停预留,凭猜测提前截断一轮,那是插件的错,不是模型的极限。
配置
每个字段都能在 Plugins 页面实时编辑;插件在每次模型调用前重新读取解析后的配置,所以保存的值会立刻作用于下一次响应。
| 选项 | 默认值 | 作用 |
| enabled | true | 总开关 |
| reserveRatio | 0.05 | 预留不用的额度上限比例 |
| reserveMin | 256 | 预留量的下限,用于额度上限较小的情况 |
| charsPerToken | 3.5 | CJK 范围之外的每 token 字符数 |
| cjkTokensPerChar | 0.8 | 每个 CJK 字符对应的 token 数 |
| minBudget | 1024 | 低于此值的额度上限完全不处理 |
| notifyParent | true | 把被截断的子代理交还给父代理 |
| parentPrompt | (中文,两行) | 通知内容;{agentId}、{tokens}、{continueMessage} |
| continueMessage | 继续(从断点接着写,不要重复已写内容) | 要求父代理回传的内容 |
截断点落在 ceiling - max(reserveMin, ceiling * reserveRatio)。预留量用来支付估算误差、收尾块,以及服务商计入但任何增量都没携带的部分。提前几百 token 结束响应无伤大雅;超出真实上限才是插件要防的失败——所以用 3.5 而不是 DSH 自己的固定每 token 4 字符。
限制
- 估算只是启发式。 流式响应边到边报文本,token 只在结束时才报,所以必须在到达上限之前触发的截断,等不到服务商自己的计数。预留量吸收误差;服务商侧的检测兜住漏掉的部分。
- CJK 按字符估算(约每字 1 token),而不是按 DSH 固定的每 token 4 字符规则——那条规则会把 CJK 输出多算四倍。如果你的模型对不上,就调宽或调窄 cjkTokensPerChar 和 charsPerToken。
- 额度上限从未披露的模型完全不处理。 不武装截断,也不计任何量,所以在这种模型上跑满空间的子代理不会被交还:服务商截断,这一轮就此结束,和插件存在之前一模一样。每个模型会有一行日志,写明武装它所需的配置(武装截断)。只有当模型自身的条目声明了 maxTokens 时,defaultMaxTokens 才会传到 resolveModelInfo:路由的 defaultMaxTokens 是内部目录的兜底值,永远不会被披露,而路由若把模型列为纯 id/name 条目,则声明
- 不处理。 每个模型只询问一次分辨率,然后缓存起来,并记录一个公开的上限。
- 跳过压缩和标题调用。 这些调用带有 purpose,截断它们会破坏 harness 自己产出的输出,而不是响应。
- 运行时导入。 插件使用 node:crypto 和 node:module;它从不导入 harness 包,因为从已安装的配置档里无法解析这些包。Plugins 页面的表单是唯一需要导入的东西:@deepseek-ai/schemastery 在运行时解析,如果某个环境无法解析它,所有行为都保留,只失去表单。
目录结构
src/plugin.js 监听器、上限解析、交接 src/cutoff.js 流计量和合成的 max-tokens 结束 src/budget.js 上限 -> 截断 src/estimate.js 感知 CJK 的输出 token 估算 src/lineage.js 子级 vs. 根级 vs. 分叉 src/notify.js 受引导的消息及其模板 src/config.js 默认值和归一化 src/settings.js 实时 Plugins 页面 schema test/ node:test,无依赖
开发
npm test # node --test test
测试不需要 node_modules:流测试自带一份 DSH 流不变量的本地副本(@deepseek-ai/dsh-llm/lib/invariant.js、validateStream),这样合成流在交给真实 harness 之前,会先按真实语法检查一遍。
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ADkun/dsh-auto-stop
在触顶前收尾回答,并提醒父代理唤醒被截断的子代理
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,489已汉化DSH
73.1
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,918已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,453已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
Download DS Bot for Windows 10/11 64-bit / 下载 Windows…
★ 5,293已汉化DSH
71.2
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,797已汉化DSH
71.1
这是你的仓库?认领条目