🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

阻塞调用拦截 baldovinmarques391-design/dsh-ban-wait

DeepSeek Harness
baldovinmarques391-design14 天前有提交已提供中文文档扫描:含敏感能力

拦截会让智能体循环卡死的工具参数,自动改写为后台执行

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add baldovinmarques391-design/dsh-ban-wait
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · security
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 4 处,展示前 4 条)
  • 读取本地文件
    bundle-check.mjs:26
    manifest = JSON.parse(readFileSync(join(projectDir, 'package.json'), 'utf8'))
  • 读取本地文件
    bundle-check.mjs:50
    if (existsSync(join(projectDir, relative)) && (shipped === undefined || shipped.includes(relative))) pass(`shipped and present: ${relative}`)
  • 读取本地文件
    bundle-check.mjs:53
    if (manifest.main !== undefined && existsSync(join(projectDir, manifest.main))) pass(`main resolves: ${manifest.main}`)
  • 读取本地文件
    bundle-check.mjs:58
    if (!existsSync(bootEntry)) {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

拒绝会把智能体循环钉住的工具参数:阻塞等待、临场延长超时,以及可选的同步长任务。

README

由 DeepSeek 最新模型翻译生成
dsh-ban-wait 一个 Host 插件,拒绝会让 DSH 智能体循环停摆的工具参数。 它之所以存在,是因为 shell 命令超时并不是上限。pwsh-sandbox 的 timeoutMs: 1000 会把长命令提升为后台任务,但模型可以在调用时自己传 timeoutMs: 180000,执行器会照办,直到 maxTimeoutMs(默认 600000 ms)为止——单次工具调用里就能跑三分钟。同一类漏洞还有 job_output { wait: true },只受 10 分钟默认值约束。这个插件把「没有哪次调用能让循环停摆」变成工具注册表的属性,而不是模型自觉性的属性。 文件 | 文件 | 作用 | | index.js | 插件本体:策略 + 全局 ctx.tools.guard() | | check.mjs | 策略的离线自检(30 条断言,不启动 DSH 进程) | | bundle-check.mjs | 安装前检查:用 harness 自带的补丁加载器,重放插件页面所检查的内容 | | cordis.patch.yml | bundle 的补丁:插入 Host 平面那一行 | | package.json | dsh.bundle.patch → cordis.patch.yml;无依赖 | 策略 | 配置字段 | 默认值 | 含义 |
展开完整文档(README 剩余 1 节)
dsh-ban-wait

一个 Host 插件,拒绝会让 DSH 智能体循环停摆的工具参数。

它之所以存在,是因为 shell 命令超时并不是上限。pwsh-sandbox 的 timeoutMs: 1000 会把长命令提升为后台任务,但模型可以在调用时自己传 timeoutMs: 180000,执行器会照办,直到 maxTimeoutMs(默认 600000 ms)为止——单次工具调用里就能跑三分钟。同一类漏洞还有 job_output { wait: true },只受 10 分钟默认值约束。这个插件把「没有哪次调用能让循环停摆」变成工具注册表的属性,而不是模型自觉性的属性。

文件

| 文件 | 作用 |
| index.js | 插件本体:策略 + 全局 ctx.tools.guard() |
| check.mjs | 策略的离线自检(30 条断言,不启动 DSH 进程) |
| bundle-check.mjs | 安装前检查:用 harness 自带的补丁加载器,重放插件页面所检查的内容 |
| cordis.patch.yml | bundle 的补丁:插入 Host 平面那一行 |
| package.json | dsh.bundle.patch → cordis.patch.yml;无依赖 |

策略

| 配置字段 | 默认值 | 含义 |
| maxBlockingMs | 1000 | 模型提供的任何单次调用阻塞提示的上限 |
| denyWaitTools | ["job_output"] | wait: true 会被拒绝的工具 |
| timeoutHintTools | ["pwsh", "bash"] | timeoutMs / timeout_ms 会对照 maxBlockingMs 检查的工具 |
| requireBackgroundTools | [] | 必须以 run_in_background: true 调用的工具 |

拒绝会返回一条 Error: … 工具结果,写明禁令、撇清后台任务的责任,并说明如何重新发起调用,让模型一步就能恢复。配置值不可用时记录日志并替换为默认值,而不是抛错:这里的一个笔误不能导致实例启动失败。

安装

通过插件页面安装——这是唯一能让插件带着自己的开关出现在清单里的渠道:

1. 添加插件 → 粘贴项目的绝对目录(你刚克隆下来的 checkout)。本地目录会在任何 npm 规格解析之前由 isAbsolute() 识别,从不访问 registry,所以那个对话框里的 registry 选择器无关紧要。
2. 管理器读取 package.json,要求有 name 和 dsh.bundle,把依赖加到配置档,然后自动协调 dsh.profile.bundles(「新的 bundle 依赖会自动激活」)。插件随后出现在已安装下,带一个开关。
3. 如果结果提示需要重启,就重启实例:新的 Host 模块代不会加载进正在运行的进程。

不要再往配置档补丁里给这个插件加一行原始 loader。bundle 的 cordis.patch.yml 会插入行 id ban-wait,两行共用这个 id 会让按 id 定位的补丁——开关、任何覆盖——只命中其中一行。

配套配置,没有它,守卫就是模型和三分钟调用之间唯一的屏障:

- id: pwsh-sandbox
name: "@deepseek-ai/dsh-pwsh-sandbox"
config:
timeoutMs: 1000 # default for a command
maxTimeoutMs: 1000 # ceiling for the model's timeoutMs argument — the line that matters maxOutputBytes: 10000

验证

the policy itself (30 assertions)
node check.mjs

the package the plugin page will inspect: path, package.json, name, dsh.bundle,
files coverage, and a real parse of cordis.patch.yml by the harness loader
node bundle-check.mjs

这两步都不能证明插件已激活——激活发生在配置档挂载 bundle 层的时候,插件页面会在安装结果里报告。

实时探测(每次都会返回拒绝,而不是执行):

job_output { job_id: "pwsh-1", wait: true } → Error: … (ban-wait): job_output was called with wait: true
pwsh { command: "ok", timeoutMs: 180000 } → Error: … caps how long one tool call may hold the agent loop at 1000 ms
pwsh { command: "ok" } → runs normally
workflow { script: "return 1" } → runs synchronously (not banned by default)

已在实例 3080 上验证:两次拒绝都会触发,普通调用和非阻塞的任务读取行为与之前完全一致,这一行能实时挂载和卸载——全程都不需要重启。

边界

- 守卫看的是参数,不是时长。某个工具没有阻塞参数、只是跑得久,它就管不到;这种情况要靠 requireBackgroundTools,而 shell 的 maxTimeoutMs 上限已经替命令处理了。
- ask_user_question 故意永不封禁:阻塞等人正是它的功能。
- workflow 和同步的 subagent 默认不封禁。它们在调用内部做实际工作,改成后台运行会改变结果的消费方式。想要这种取舍时,按工具逐个启用:
requireBackgroundTools: [workflow, subagent]

已被取代

这个插件最初只是一条封禁规则,仅拒绝 job_output { wait: true };那个早期版本已经并入这里发布的策略,所以没有需要单独安装的东西了。
预览分享卡片长什么样 ↓baldovinmarques391-design/dsh-ban-wait
分享 · DeepSeek Harness Hub
baldovinmarques391-design/dsh-ban-wait

拦截会让智能体循环卡死的工具参数,自动改写为后台执行

回到顶部