dsh-empty-turn-guard

DSH PLUGIN模型与账号接入

仓库 FYTXY/dsh-empty-turn-guard

模型与账号接入 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

dsh-empty-turn-guard 是 FYTXY 维护的 模型与账号接入 类 DSH 可安装插件, 仓库为 FYTXY/dsh-empty-turn-guard,许可证 MIT。 下面按「装什么、怎么装、验没验过、跑起来要注意什么」逐项列出。

一句话选型结论

按资料字段整理

dsh-empty-turn-guard 是模型与账号接入类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类模型与账号接入 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-23 创建于 2026-10-23
README 8.4 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:FYTXY/dsh-empty-turn-guard#v0.4.0
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

模型与账号接入
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

智能体编排

上游标签

ai-agentcordisdeepseekdeepseek-harnessdshdsh-bundledsh-plugin

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在模型与账号接入场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-empty-turn-guard当前 L4 · 沙盒安装通过 低风险 0 未标注 有
archify L4 · 沙盒安装通过 低风险 8.0 万 未标注 有
DeepSeek-Reasonix L4 · 沙盒安装通过 低风险 3.6 万 未标注 有
nocobase L3 · 安装规范通过 低风险 2.5 万 0.1.1-rc.2 无
learn-harness-engineering L4 · 沙盒安装通过 低风险 2.0 万 未标注 有
dsh-our-free-model 未做沙盒验证 未标注 8,064 未标注 无

仓库档案

模型与账号接入
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方FYTXY仓库 dsh-empty-turn-guard · 默认分支 main
分类模型与账号接入ai
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-23 · 2026-10-23最后推送 2026-10-23
本站收录2026-10-30首次进入本站目录的时间

README 全文

8.4 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-empty-turn-guard

English | 简体中文

给 DSH(DeepSeek-Harness) 用的一个小插件,只针对一种失败:模型回复只剩协议残渣——既没有正文、也没有工具调用——而 DSH 把这当成"正常说完了"。本插件把它改判成一个可重试的错误,让这一步重试,而不是静默结束回合。

它是一个标准 DSH bundle(自带 cordis.patch.yml 的包),安装不修改 DSH 任何文件。

特性

  • 拦住"半截回答"那一轮。 当回复只剩 </||DSML|| calls>、 或纯标点时,这一步会带退避重试,而不是被当成一条完整消息落盘。
  • 两处设置入口。 设置 → 内置插件 →「空回合守卫」 一个独立 tab,以及侧边栏 「插件」 面板上的同名卡片,改的是同一个开关。
  • 不会误伤正常回复。 三个条件必须同时成立:结束原因是 stop、没有观察到任何工具调用、去掉协议标记后正文为空。单词回答、单个 ?、只是提到了标签的正常文字,都原样放行。
  • 不碰截断。 max-tokens 是"真回答被截短",本来就是可见的独立结果,不归本插件管。
  • 零运行时依赖。 宿主半只引一个 schema 库;浏览器半是手写 bundle,不需要构建工具。
  • 日志只记长度,不记内容。 诊断信息里是 text=24ch,模型输出不会经本插件写进日志文件。

安装

# 直接从 GitHub 装(现在就能用)
dsh plugin --profile <你的profile> add github:FYTXY/dsh-empty-turn-guard

# 从本地源码 link 安装(自己开发用)
dsh plugin --profile <你的profile> add link:<本目录绝对路径>

# 从 npm 装——尚未发布,这条现在会报 E404
dsh plugin --profile <你的profile> add dsh-empty-turn-guard

dsh plugin … add 会把参数转给 pnpm,所以 GitHub 简写、tag、分支都能用(例如 github:FYTXY/dsh-empty-turn-guard#v0.4.0)。

装完重启 DSH,进 设置 → 内置插件 →「空回合守卫」,把开关打开。

不用 CLI 的手工安装

  1. 把本目录放到固定位置,例如 ~/.dsh/plugins/dsh-empty-turn-guard。
  2. 在 profile 的 node_modules 里建软链 / junction 指向它。
  3. 在 profile 的 package.json 里,把包名同时加进 dependencies 和 dsh.profile.bundles 数组。
  4. 重启 DSH。

不要改用"往 cordis.patch.yml 里插一行裸路径"的老办法——那样它只是个普通模块、不算 bundle,设置里也就没有那个开关。

用 link: 或手工方式安装时,@deepseek-ai/schemastery 要从 DSH 自带的那份解析。如果 node 报 ERR_MODULE_NOT_FOUND: @deepseek-ai/schemastery,建一个 junction 指过去:

New-Item -ItemType Junction -Path ".\node_modules\@deepseek-ai\schemastery" `
-Target "$env:USERPROFILE\.dsh\profiles\\node_modules\@deepseek-ai\schemastery"

从 GitHub 正常安装时 pnpm 会自己处理,不用这一步。

配置

1. 开关

两个入口改的是同一件事(profile package.json 里 dsh.profile.bundles 的这一项),用哪个都行:

入口 展示内容
设置 → 内置插件 → 「空回合守卫」 插件自己的配置页:开关、当前状态说明、保存 / 丢弃
侧边栏 → 「插件」 面板 bundle 卡片上的同一个开关

关掉会卸载本插件、llm/stream 恢复原样(空回合又会静默完成);打开会重新加载守卫。两者都不需要重装、立即生效。

插件面板里本插件那一行的开关是灰色的,这是正常的:DSH 只允许通过 profile 自己的 patch 文件启停"行",而本插件的行来自包自带的 cordis.patch.yml,所以行开关锁定——真正生效的是包的开关。

2. 只禁用逻辑、保留安装

想留着包但跳过拦截,给这一行加 config:

- id: dsh-empty-turn-guard
name: 'dsh-empty-turn-guard'
config:
enabled: false

enabled 是 volatile 字段,运行时是活引用而不是冻结值;守卫每次请求都会重读它,所以设置页拨开关对下一次模型请求就生效,无需重启。

3. 确认它生效了

宿主日志(Windows:%APPDATA%\DSH Desktop\logs\host\dsh-<日期>.log;Linux:~/.config/DSH Desktop/logs/host/)里会出现:

[dsh-empty-turn-guard] empty-turn-guard: mounted (markup-only stops become EMPTY_RESPONSE retries)

真的拦到一次空回合时:

[dsh-empty-turn-guard] rewriting an empty stop (text=24ch) into EMPTY_RESPONSE

紧接着通常还能看到 llm/retry / llm/retry-started——那就是重试在跑。

工作原理

LLM 调用
└─ llm/stream  ◀── 本插件包在这里(global,前置)
└─ 适配器流(openai-responses | anthropic-messages)
└─ 分块:block-start / text-delta / block-end / usage / finish

遇到 finish:
reason.kind === "stop"
且没有观察到工具调用
且 stripMarkup(正文) === ""        ⇒  改写成 error EMPTY_RESPONSE
否则                                  ⇒  原样放行

error EMPTY_RESPONSE
└─ @deepseek-ai/dsh-llm-retry:它在 DEFAULT_RETRYABLE_CODES 里
└─ 重试这一步(最多 5 次,初始 500ms,上限 10s,10% 抖动)

llm/stream 是每次模型调用都要过的唯一漏斗,瀑布式事件允许监听者包裹适配器的分块流,而不是事后修补。改写 finish 分块——而不是改文字或往对话里插消息——能保持历史干净,并直接复用 provider 已经声明的重试机制。

两个过滤条件让拦截保持克制:没有声明 tools 的请求直接跳过(标题生成、压缩这类后台调用走同一条流,空回复是正常的);max-tokens 跳过(截断是真实回答)。

它针对的失败形态、背后的实测数据、以及"换协议为什么不管用",都写在 docs/root-cause.md。

兼容性

  • DSH 0.2.0-rc.2(在该版本验证通过)。
  • Node.js >= 22。
  • 只用既有接缝:llm/stream 瀑布与 EMPTY_RESPONSE 错误码,不修改 DSH 任何文件。
  • @deepseek-ai/schemastery 是对等依赖,由 DSH 提供。
  • Config 里必须保留 .volatile() 字段:@deepseek-ai/dsh-settings 会静默丢弃没有任何 volatile 字段的命名空间,设置卡片会消失。详见 docs/root-cause.md 末尾。

非目标

  • 不修中转站:残渣仍会出现在正文里,只是不再"假装完成"。
  • 不清洗历史消息:已经落盘的怪标记不会被动。
  • 不管退化刷屏:一路重复到 max-tokens 的情况本来就有可见结果。
  • 不保证重试一定成功:如果中转持续只吐残渣,重试会耗尽并给出明确报错——仍好过静默半截。

开发

没有构建步骤,lib/index.js 与 lib/client.js 就是发布产物。

npm run check   # 对两个入口跑 node --check
npm test        # 对 tests/ 跑 node --test

lib/client.js 是手写的 ModuleLoader bundle,因为浏览器侧是通过求值 window.__ModuleLoader__.load({ id, factory }) 加载的。它只允许 require 三样东西:react、react/jsx-runtime、@deepseek-ai/dsh-client-ui-primitives。不要为它引入打包器。

评审标准见 CONTRIBUTING.md,安全边界见 SECURITY.md。

目录结构

dsh-empty-turn-guard/
├── lib/index.js           # 宿主半:llm/stream 守卫(零运行时依赖)
├── lib/client.js          # 浏览器半:设置页 / 插件面板的卡片
├── cordis.patch.yml       # bundle patch:把插件行挂进配置树
├── package.json           # dsh.bundle.patch 与 dsh.client 指向上面两个入口
├── tests/                 # 两个半边的 node:test 套件
│   ├── guard.test.mjs
│   └── client-bundle.test.mjs
├── docs/root-cause.md     # 本插件针对的失败形态与取证
├── .github/workflows/     # CI:Linux / Windows × Node 22 / 24
├── CHANGELOG.md
├── CONTRIBUTING.md
├── SECURITY.md
└── LICENSE

卸载

dsh plugin --profile <你的profile> remove dsh-empty-turn-guard

或者去 设置 → 内置插件 →「空回合守卫」 把开关关掉。

许可证

MIT

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-empty-turn-guard 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:FYTXY/dsh-empty-turn-guard#v0.4.0` 即可。

dsh-empty-turn-guard 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-empty-turn-guard 安全吗?

低风险。

dsh-empty-turn-guard 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-empty-turn-guard 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

模型与账号接入
按星标排序,可作替代方案

archify

archify

从仓库或系统描述生成经过校验的自包含交互式架构图、流程图、时序图、数据流图和生命周期图。

L4 · 沙盒安装通过 8.0 万 星

nocobase

nocobase

L3 · 安装规范通过 2.5 万 星

dsh-our-free-model

dsh-our-free-model

为 DeepSeek Harness 挂载免登录、免 API Key 的免费前沿模型通道,装完即用,并附用量看板与 OpenAI 兼容本地转

未标注验证等级 8,064 星

dsh-purge

dsh-purge

dsh-purge 是一款 DeepSeek Harness 设置插件,可修改默认副本、权限策略和工具限制,并添加规则卡片以分组应用补丁,支

L5 · 运行验证通过 4,573 星

FYTXY 的其它插件

1 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。