Plugin directory / Developer / dsh-plugin-rollout-scout
dsh-plugin-rollout-scout
Unverified SpookySandwich
What it does
检测 DSH 账号被分配到哪个对话模型:为探测会话的实时思维链打分,判为旧模型的立刻中止。Detect which conversation model your DeepSeek Harness account is served, by scoring probe conversations' live chain-of-thought.
Unverified — not yet verified
检测 DSH 账号被分配到哪个对话模型:为探测会话的实时思维链打分,判为旧模型的立刻中止。Detect which conversation model your DeepSeek Harness account is served, by scoring probe conversations' live chain-of-thought. Not yet verified — install and test it yourself.
“Unverified” means our automated CI has not yet installed this plugin. Feature descriptions and version compatibility are the author’s claims. This is not a security audit and not an endorsement of third-party code.
README
dsh-plugin-rollout-scout
English | 简体中文
服务商有时会灰度发布新的对话模型,你分到哪一个全看运气。灰度侦察会用你自己的账号开启一批临时会话,在思维链流式输出的同时读取它,并按「推理是怎么写的」打分——读起来像你手上这个旧模型的立刻中止,不像的留下来。
它是基于措辞的启发式小工具,不是权威判据。它做的每件事你都可以手动完成:开一个新会话、扫一眼思维链、关掉。

判定方式
信号在于 每个段落是怎么开头的,而不是某个短语在全文出现了多少次。若按全文累计,「Let me」会单纯因为篇幅变长而越积越多,一段本来很好的长思维链最终也会被判为差。只看开头,度量才稳定。
每段只读前 48 个字符。而关键短语往往并不在第 0 个字符:
The directory is empty. Let me create a 3D cyberpunk scene.
To avoid conflicts, I'll keep I18n.cs edits under one change.
有两个决定性信号,且刻意 不对称:
| 信号 | 效果 |
|---|---|
任意段落以 Let me 开头 |
旧模型——立即中止该轮 |
整条思维链 以 I'll 开头 |
灰度模型——放行跑完并保留 |
I'll 只有出现在最开头才算证据:旧模型也会在 中间某段 写「I'll create a single HTML file…」,然后隔几段又说「Let me build…」。把每个 I'll 都当证据会造成误判。
两者都没触发时,其余开头进入评分:
加成 = (规整段落 ? 1 : 0) + (有停顿 ? 1 : 0)
置信度 = (正向开头数 + 加成 + 1) / (已分类开头数 + 加成 + 2)
加成把总结链的形态本身也算作证据,因此段落规整、又有停顿的思维链在还没有任何
开头被分类时就会高于 50%。它只影响这个数字:真正保留仍需要凑满「最少开头数」。
段落开头写满 48 个字符就会打分,即使模型从不换行。后出现的 Let me 会推翻 先前的保留。
灰度链路常常用一个 小模型总结思维链。总结模型经常以 We need to… 开头(所以段首 we 只记负分,不直接判死),写出 规整、一段一段的长段落,并且 输出一阵、卡住、再输出一阵。这三条都是新链路的正面证据。旧模型不规律——整段糊成一块,或夹着很短的 Let me 行。
正向开头是第一人称单数的计划语气——I'm、I am、I've、I have、I need、I think、I also、I will,以及位于开头的 For。负向开头是 Let me / Let's,以及开头里出现的任何第一人称复数(we、we need、we will、we'll …)。灰度模型用 “I”,不用 “we”。加一的先验让证据稀少时分数停在 50% 附近,不会因为一个词就给出自信判断:
| 证据 | 置信度 | 判定 |
|---|---|---|
| 暂无 | 50% | 继续观察 |
| 1 正 / 10 负 | 15% | 丢弃 |
| 5 正 / 0 负 | 86% | 保留 |
低于 低于此分即丢弃(0.35)丢弃,高于 高于此分即保留(0.7)保留,但都要先累计到 最少开头数(4)。若连续开了十段一个正向开头都没有,则放弃;思维链 以中文为主(字母中 80% 以上为汉字)则直接丢弃——英文推理里引用一句中文提示词不算。
针对灰度链路的速度与时延特征,还支持两项前置早停开关:
- 生成速度 (TPS) 上限:灰度模型流式吐字速度常在 40~50 字/秒左右(旧模型通常显著更快)。开启后一旦流式 TPS 超过指定上限(默认 60 字/秒),立刻中止该轮,在开头几秒内挽救 Token。
- 首字延迟 (TTFT) 下限:旧模型常在极短时间内(< 1~2 秒)开始输出。可设置首字延迟下限(默认 2 秒),低于此阈值立即在首个字符到达时判定为旧模型并丢弃。
分类器有基于人工标注样本的测试,此外还覆盖了接口防护、发起失败时的行为,以及删除会话的规则:
npm test
控制台
灰度侦察 位于侧边栏底部、「设置」旁边,点开就是下述整屏控制台。它注册在 sidebar.footer.action 座位上,因此与外壳自带的条目样式一致;侧边栏收起为窄栏时,它也会收成一个图标。
左栏 —— 探测提示词、模型(默认 V4-Pro / High)、并发数、存放目录,以及四项评分阈值。阈值下方是自检,再往下是各项开关:TPS 速度上限、首字延迟区间、命中强匹配时自动暂停、思维链以中文为主时丢弃、从磁盘删除旧模型会话。评分规则的长说明收在 评分是怎么算的 里,不再夹在控件中间。
操作按钮固定在左栏底部,设置滚动时不会跟着走,并按分量排列:开始 / 暂停 单独一行,强制停止 与 清空已结束 并排,删除全部会话 则是一行纯文字——它不该长得像顺手就会点到的东西。
评分阈值下方有一条自检:自检 13/13 · 已知灰度样本保留 5/5。它用当前表单里的设置,把十三条人工标注的思维链跑一遍——走的是真实探测同一套分类器,不消耗 Token、不发起探测。把「高于此分即保留」调到标注样本都够不着,它会变成橙色并列出被排除的样本。这是分辨「没找到」和「根本找不到」的办法,否则这两种情况在控制台里长得一模一样。
右栏 —— 已发起 / 进行中 / 已保留 / 已丢弃 / 最高分,下方是随探测新增与离开正常流动的最新优先队列。每行带分数条、命中短语与思维链预览。鼠标放到某一行时,只把这一行钉在当前屏幕位置,显示 固定中 并露出 保留;其他行仍可正常移动。若它正在淡出,淡出也会立刻停止,鼠标还在时不能消失。点击整张卡片打开会话;从悬停直接点进会话时,这次临时救援会带进会话界面,直到鼠标再次移动。未固定、未保留的行默认不显示保留按钮;要真正留住一个探测,请在悬停时点 保留。
固定必须收到宿主对当前这一次鼠标手势的明确确认;若请求被拒、超时或确认不匹配,界面会撤销固定,而不会显示一个实际没有保活能力的假状态。
开始 前会先提醒你确认通知设置——一次运行会开启大量会话,而 DSH Desktop 可能逐个弹通知。探测提示词以插件消息发送,本身不会触发通知;弹窗会显示桌面通知当前是否开启,并可一键关闭。勾选 不再提示 即可跳过。
开始 会变为 暂停:停止发起新探测,中止已判定为旧模型的探测,尚未判定的各自跑完。再变为 继续。强制停止 会中止所有进行中的会话。
判旧的探测先淡出约 3 秒(卡片底边一条细线收掉),期间会话还在跑;淡完才取消。这个截止时间只在首次判旧时建立,后续流式文本不会把它重置。悬停会暂停并记住剩余时间,移开后只继续这一段,不会重新赠送完整 3 秒——只有 保留 才会真正留下。
悬停时出现的 保留 是对会话文件的承诺:不淡出、不清理、不删除,且该标记在插件重载后依然有效。它不会让正在消耗 Token 的回合变成不可停止——强制停止 仍会结束该回合,但会话和保留标记都留下。判定为灰度并跑完的探测会自动保留。已保留的行会持续显示 已保留,再次点击可交回常规清理规则。
探测会话在侧边栏里会自动命名:运行时叫 灰度探测 12,命中后改为 ★ 灰度命中 12 · 87%,在一堆探测里一眼就能认出。已保留的卡片上有 重命名,可以自己起名字;起了名字就等于保留。
清空已结束 会从列表移除已完成的探测,并删除这些会话文件。删除全部会话 会清空该目录下所有探测(包括已经从列表清掉的),并把编号从 1 重新计。
如果 Rollout Scout 的持久所有权记录里存在当前控制台没有对应卡片的探测会话——插件重载、升级或应用重启都会留下这类残留——顶部会出现提示条,可一键 清理。只有插件自己生成并记录的会话 ID 才算;DSH 的空白工作区占位会话,以及用户在同一目录里手动创建的普通会话,都不会被推断成探测。
v3 所有权记录把 owned、protected、deleting 分成三个独立状态。只有会话先持久进入 deleting,才允许物理删除;因此重载后可以继续未完成的清理,而不会把每一个未保留 ID 都误当成删到一半。保留操作在当前进程内按安全侧失败:写盘失败时卡片仍受保护,并显示 重试保留(或 重试取消保留),不会反向执行用户不想要的删除。请在重启前完成重试,因为文件系统从未接受的意图,任何应用都无法在重启后凭空还原。
两者都不会动仍在流式输出或正在释放资源的探测,已保留的也不例外。暂停只是停止发起,进行中的探测仍在跑,所以此时 删除全部会话 会要求你先 强制停止,并等宿主完成释放后才允许删除,以免删掉仍在写入的会话文件。存放目录不能是主目录、磁盘根目录,也不能位于 ~/.dsh 之内——删除以该目录为范围,这些位置会把无关会话卷进去。
若连续三个探测连启动都失败(服务不可达、目录不可写等),运行会自行停止并报出错误,而不是一直重复同一个失败。点 继续 可以重试。
运行状态在宿主端,因此关掉控制台后仍会继续——侧边栏那一行的图标上带一个状态小点(侦察中呼吸闪烁、暂停为灰、命中转绿),宽栏里还会显示进行中的数量、命中后带绿色角标,悬停可看已试数量与目前最高置信度。收成窄栏后只剩这个小点可看,所以它长在图标上而不是文字里。
安装
dsh plugin --profile web add dsh-plugin-rollout-scout
安装后请重启 DSH:宿主端随服务器加载。界面跟随 DSH 显示语言(中文 / English)。
也可以直接从仓库安装,跟的是 master 而不是最近一次发布:
dsh plugin --profile web add github:SpookySandwich/dsh-plugin-rollout-scout
web 是 profile 名称,请换成你实际使用的那个。独立版启动的是 web,DSH Desktop 用的是 desktop。~/.dsh/profiles/ 下就是你现有的 profile,安装结果落在对应 profile 的 package.json 里。
lib/client.js 是构建产物,但已提交进仓库,所以从仓库安装时也无需任何构建步骤。若你修改了 plugin.client.js,请运行 npm run build 重新生成(npm test 也会顺带生成),并把结果一并提交。
工作原理
- 宿主端提供
/rollout-scout接口,用ctx.agents.create(不带 seed)把每个探测创建为全新会话,并通过installModelSelection设置模型与思考强度。 - 探测提示词以插件消息发送,这样一次运行才不会逐个探测地弹出系统通知。
- 订阅该 agent 作用域内的
session/event,从assistant/chunk读取reasoning-delta(流式思维链),每收到一块就重新分类。 - 判为旧模型时调用
agent.cancel中止该轮;判为灰度则放行至turn/end。流式过程中最后一段会被暂时忽略(开头可能只写了一半),turn 结束后再用完整文本重新分类。 - 探测会话创建在你指定的目录下(作为一个工作区),判为旧模型的会话可选择从磁盘删除。
/rollout-scout监听在本地端口上,因此按本地接口的方式做了防护:写操作必须带application/json内容类型(这会强制浏览器发起 CORS 预检,而预检永远不会被放行),跨源的Origin一律拒绝。你恰好打开的某个网页无法借此发起探测或删除数据。
兼容性
入口占用 sidebar.footer.action 座位(list 类型,会与其它底部操作并排,而不是把谁挤掉),控制台本体渲染在全局 shell.overlay 层。两者都不属于会话作用域,因此不与任何会话内插件冲突。需要侧边栏声明了该座位的 DSH 版本;否则控制台将没有入口。与 dsh-plugin-smooth-stream、dsh-plugin-no-workspace、dsh-plugin-message-edit 同族。
关于额度
每个探测都是一次真实的对话轮次,消耗你自己的额度。被丢弃的通常一两秒内就中止,但只要不停止,运行中的任务会一直发起新探测。并发数与各项阈值都可自行调整。
许可
MIT © SpookySandwich
Install
Install the catalog once, then DeepSeek Harness can find and install any plugin from this site automatically:
dsh plugin add dshbase-catalog Then say "install dsh-plugin-rollout-scout for me" — your agent finds it in the directory and installs it. Docs: dshbase-catalog · verified packs.
This plugin is GitHub source (not published to npm) — install it straight from the repo:
Web profile:
dsh plugin --profile web add github:SpookySandwich/dsh-plugin-rollout-scout Headless (CLI) profile:
dsh plugin --profile headless add github:SpookySandwich/dsh-plugin-rollout-scout Test report
Not yet L3-verified — see failure note below if we already ran it.
2026-08-25 · flagged webonly Note: 验证: web-only;待 L4 web CDP;L4 web CDP runtime-fail on dsh 0.1.0-rc.8. Browse all pending failures →