DeepSeek Harness Hub
← 返回列表

沙箱失败解读器ArmyWas/dsh-failure-lens

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

识别 Windows 沙箱 spawn EPERM 失败并即时给出双语解释

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/15 · 已提供中文文档

一个确定性的DeepSeek Harness插件,用于在上下文中解释Windows沙箱生成EPERM失败

综合分
30.6
GitHub 分
30.6
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add ArmyWas/dsh-failure-lens
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-chat@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-session
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-failure-lens

CI
Upstream canary
License

官方 DeepSeek Harness 社区讨论
· 分享一份经过隐私裁剪的真实现场报告

English · 简体中文说明见下文

一个小巧、确定性的 DeepSeek Harness Web 客户端插件(v0.3),它会在对话中出现某一类高置信度的 Windows 沙箱失败时立即给出解释:由受限的 Node 子进程尝试使用管道 stdio 所导致的 spawn EPERM。

它会在匹配的工具结果之后立即添加一个单独的 Conversation Node——一个紧凑、双语、可被键盘/辅助技术读取的警告行。它从不替换内置工具行,从不修补 DOM,从不修改会话日志,从不运行另一个模型,从不自动批准任何内容,也从不隐藏原始输出。

它检测什么(恰好一种特征)

dsh-failure-lens 仅在同一个 tool-result 块中同时出现以下全部四项时才匹配:

1. Error: spawn EPERM
2. code: 'EPERM' 或 code: "EPERM"
3. syscall: 'spawn' 或 syscall: "spawn"
4. 一个 Node 子进程堆栈标记,例如 node:internal/child_process

同一个块还必须带有持久的失败证据:要么是 isError: true,要么是一个非零的 [exit code: N] 标记。证据绝不从另一个块借用。这可以防止一条成功命令因打印出完整的历史堆栈而被错误标记。

空白字符、CRLF/LF 行尾、ANSI 颜色转义、重复堆栈以及两种引号风格都会被确定性地处理。它不会匹配泛化的 EPERM、用户编写的助手消息、不同的 syscall,或仅仅提到该短语但没有结构化特征和失败证据的成功文本。

该特征来自一个真实导出的会话:tool/result,序列 24071,其结果文本带有六段重复的 Error: spawn EPERM 堆栈,并以 [exit code: 1] 结尾,而它的 tool-result 块却具有 isError: false。只消费抛出的工具错误的失败观察者永远看不到这种情况;本插件改为读取已记录的结果文本。观察到的 isError: false 是动机,而非匹配条件——非零退出标记才是此 fixture 中的持久证据。参见 证据边界。

你会看到什么
dsh-failure-lens v0.2 在 DeepSeek Harness 中解释一次真实的 spawn EPERM 结果

上面的截图是已安装的 v0.2 插件在 Harness 中回放一个持久化的、真实的
npm test 事件——并非模拟图。原始事件由 v0.1.0 工作区测试产生;v0.2 在一次干净的服务重启后
对这段未更改的会话证据重新分类,并添加了解析出的 exit 1 标签。版本 0.3 保留了
这套 UI 和分类器,同时将客户端集成迁移到 Harness 当前的 post-Runtime 服务图。

在匹配到工具结果后,会使用官方 Harness 视觉语言和设计令牌(StateDot、行装饰、--dsw-alias- 令牌)显示一行紧凑的警告:

| 中文 | 英文 |
|---|---|
| Harness 沙箱限制 | Harness sandbox limitation |
| 测试未启动;这不代表测试断言失败。 | The test never started; this does not mean a test assertion failed. |
| 如需验证,请在用户批准后以沙箱外权限重试同一命令。 | To verify, retry the same command outside the sandbox after user approval. |
| EPERM · spawn · 退出码 1 | EPERM · spawn · exit 1 |

该行是历史信息:它读取已经发生的事情,绝不编造事实。原始输出仍保留在其正上方的内置工具卡片中。

不是失败记录器

此插件刻意保持范围狭窄,并且不是
dsh-fail-logger:

- dsh-fail-logger 将抛出*的失败记录到长期技能中,并且明确不会因非零 shell 退出码而触发。此观察到的事件是 isError: false 且为非零退出码,因此落在该工具的契约之外。
- dsh-failure-lens 不添加任何记录,不写入任何技能,并且仅在四条件 spawn EPERM 签名加上同一块中的失败证据时触发。它是对一个已知沙箱边界的只读、展示性解释。

安装

需要 Node ^22.19.0 || >=24.0.0 以及 DeepSeek Harness Web 配置文件。

版本 0.3 面向
@deepseek-ai/dsh@0.1.2-rc.1 中的当前客户端架构。仓库 CI 覆盖 Windows、macOS 和 Linux 上的 Node 22.19 和 24。每周一次的兼容性金丝雀会从 @deepseek-ai/dsh@next 解析出一份一致的发布清单,并将每个活跃客户端包固定到该确切版本。一个单独的注册表卫生哨兵会跟踪孤立的 @deepseek-ai/dsh-client-runtime@next 标签;其结果并不决定此插件是否针对活跃客户端图构建。一个已知的未更改缺口会作为警告报告,同时有一个跟踪 issue 记录状态变化,因此仓库不会因同一外部状况而被反复标记为红色。
这一区别和注册表证据记录在
上游发布一致性讨论中。

从 npm 安装稳定包(无需克隆或本地构建):

dsh plugin --profile web add dsh-failure-lens@0.3.0
0.2.1 及更高版本通过 OIDC 可信发布工作流从其对应的公开 GitHub Releases 发布,并带有 npm 来源证明。若要同时固定传输方式和版本,请使用等效的发布资产:

dsh plugin --profile web add https://github.com/ArmyWas/dsh-failure-lens/releases/download/v0.3.0/dsh-failure-lens-0.3.0.tgz

或者在开发时安装本地检出:

dsh plugin --profile web add link:

该包通过 dsh.bundle.patch 声明其随附的 cordis.patch.yml。dsh plugin 命令会安装依赖,并将该 bundle 追加到配置文件的 dsh.profile.bundles 有序列表中。重启 Web 配置文件并刷新浏览器。

Harness 0.1.0-rc.8 安装使用旧的客户端 Runtime 架构;对于这些配置文件,请固定使用 dsh-failure-lens@0.2.2。不要在同一配置文件中混用 0.2 和 0.3 客户端代际。

卸载 / 回滚

dsh plugin --profile web remove dsh-failure-lens

同一个 dsh plugin 命令会移除该依赖及其 bundle 列表条目。

若要在不卸载的情况下回滚到先前的组合,请编辑配置文件的 cordis.patch.yml(位于 $DSH_HOME/profiles/web 下),以禁用该插件行:

- id: dsh-failure-lens
disabled: true

回滚是即时的:该插件不拥有任何持久状态,不向会话日志写入任何内容,其 disposer 会完全按照官方客户端插件生命周期要求移除 Conversation Definition、键控渲染器和语言字典。

隐私与安全

- 无遥测、无网络、无磁盘写入。 该插件读取已传递到浏览器的会话事件并渲染一行。它不向任何地方写入任何内容。
- 无模型调用。 分类是一个纯确定性函数;该插件从不调用 LLM,从不更改系统提示,也从不向请求添加 token。
- 无审批。 该插件从不自动批准,从不扩大沙箱权限,也从不重新运行任何内容。其“下一步操作”行仅为建议文本。
- 无原始输出重复。 工具结果保留在内置工具卡片中。该插件既不复制堆栈,也不复制长输出;它仅显示一行摘要,并且对于屏幕阅读器,显示证据类型、堆栈计数、退出码(存在时)和 errno。
- 无 DOM 修补。 该功能仅通过文档化的 uiConversation.events.register、slots.inject('conversation.chat.node', …) 和 locale.register 接口进行组合。没有 DOM 注入,也没有导入私有客户端内部实现。

可审计的声明/观测表面总结于
能力声明。特别是,字面量
node:internal/child_process 是分类器证据,而不是子进程导入或
执行调用。

误报
签名加失败证据的合取是刻意保守的。如果某个非沙箱进程以形状完全相同的 Node spawn EPERM 栈以及非零退出码/工具错误标志失败,仍有可能出现误报。因此该行只说明此证据与什么一致,并在其上方保留原始结果;如果你看到某一行你认为有误,请附上经隐私裁剪的事件提交 issue。

贡献

参见 CONTRIBUTING.md、SECURITY.md、证据边界 和发布/采用门槛。测试套件包含一个源自真实导出 Harness 会话的正例,以及若干负例相似样本(通用 EPERM、不同 syscall、用户撰写的文本、缺失结构、成功的历史输出、跨块证据、ANSI/CRLF/重复栈)。在提交 PR 前请运行 npm test、npm run typecheck、npm run build 和 npm run pack:check。

许可证

Apache-2.0。参见 LICENSE。

简体中文说明

dsh-failure-lens 是一个确定性的 DeepSeek Harness 网页客户端插件(v0.3)。它只在同一个 tool-result 块中同时出现以下四项签名证据时才提示,并紧跟在匹配的工具结果之后插入一个独立的 Conversation Node(紧凑警告行,中英双语,支持键盘与屏幕阅读器):

1. Error: spawn EPERM
2. code: 'EPERM' 或 code: "EPERM"
3. syscall: 'spawn' 或 syscall: "spawn"
4. Node 子进程的栈标记(如 node:internal/child_process)

同一块还必须有可持久验证的失败证据:isError: true,或非零 [exit code: N];插件不会跨块拼接签名或借用失败标记。因此,成功命令即使打印了一段完整的历史错误栈也不会误触发。

它不会替换官方工具行、不会做 DOM 注入、不会修改会话日志、不会调用模型、不会自动审批,也不会复制原始长日志。该签名来自真实导出的会话(tool/result,序列 24071,六个重复 Error: spawn EPERM 栈并以 [exit code: 1] 结尾)。其中 isError: false 是我们发现观察盲区的动机,不是分类条件;本事件由非零退出码提供失败证据。详见证据边界。

它与 dsh-fail-logger 的边界:后者只记录被抛出的失败,且不处理非零退出码;而本事件是 isError: false 的非零退出码,本插件只做只读、展示性的解释,不写入任何长期记忆。

0.3 版面向现行的 @deepseek-ai/dsh@0.1.2-rc.1 客户端架构。安装:dsh plugin --profile web add dsh-failure-lens@0.3.0;也可使用完全固定的 GitHub Release 地址 dsh plugin --profile web add https://github.com/ArmyWas/dsh-failure-lens/releases/download/v0.3.0/dsh-failure-lens-0.3.0.tgz。旧的 Harness 0.1.0-rc.8 仍应固定使用 dsh-failure-lens@0.2.2,不要在同一 profile 中混用两代客户端架构。0.2.1 及后续 npm 版本由 GitHub OIDC 可信发布工作流从对应公开 Release 发布,并附带 provenance 来源证明。本地开发可用 dsh plugin --profile web add link:。安装命令会安装依赖,并把 bundle 自动追加到 profile 的 dsh.profile.bundles,随后重启 Web profile。卸载:dsh plugin --profile web remove dsh-failure-lens,它会同步移除 bundle 条目。插件不产生任何持久状态。

隐私与安全:无遥测、无网络、无磁盘写入、无模型调用、无自动审批、无原始输出复制、无 DOM 补丁,全部通过官方 uiConversation.events.register / slots.inject / locale.register 三个公开接口组合。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

同作者(ArmyWas)的其他插件

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群