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

命令监视窗 GavinQiEr/dsh-cmdwatch

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

命令窗:实时监控 DeepSeek Harness(DSH)命令,在 Web UI 里查看前台和后台命令输出,不打断对话。

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

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add GavinQiEr/dsh-cmdwatch
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 20 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-cmdwatch(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/21 23:46:25

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 19 处,展示前 19 条)
  • 读取本地文件
    lib/index.js:106
    const buf = readFileSync(f.file);
  • 删除本地文件
    lib/index.js:126
    try { unlinkSync(f.file); } catch (e) { }
  • 删除本地文件
    lib/index.js:133
    try { unlinkSync(f.file); } catch (e) { }
  • 执行外部命令固定命令
    lib/index.js:442
    const child = spawn(
  • 删除本地文件
    lib/index.js:789
    for (const f of fgStreams.values()) { try { unlinkSync(f.file); } catch (e) { } }
  • 删除本地文件
    lib/index.js:799
    if (f) { try { unlinkSync(f.file); } catch (e) { } fgStreams.delete(key); }
  • 发起网络请求
    client/client.js:213
    const res = await fetch("/cmdmon/snapshot?" + params.toString(), {
  • 发起网络请求
    client/client.js:373
    const res = await fetch("/cmdmon/clear", {
  • 发起网络请求
    client/client.js:386
    await fetch("/cmdmon/setStream", {
  • 写入本地文件
    client/build.mjs:39
    await mkdir(dirname(outputPath), { recursive: true });
  • 写入本地文件
    client/build.mjs:40
    await writeFile(outputPath, wrapped, 'utf8');
  • 读取本地文件
    test-hostsync.mjs:30
    const source = readFileSync(join(libDir, 'index.js'), 'utf8');
  • 写入本地文件
    test-hostsync.mjs:36
    writeFileSync(tmpEntry, source.replace(ORIGINAL_IMPORT, 'const defineTool = (d) => d;'), 'utf8');
  • 删除本地文件
    test-hostsync.mjs:43
    rmSync(tmpEntry, { force: true });
  • 写入本地文件
    test-hostsync.mjs:204
    writeFileSync(teeFile, 'B-1\nB-2\n', 'utf8');
  • 写入本地文件
    test-hostsync.mjs:214
    writeFileSync(teeFile, 'B-1\nB-2\nB-4\nB-5\n', 'utf8');
  • 读取本地文件
    test-hostsync.mjs:222
    assert('Tee 日志文件已清理(修复前残留)', !existsSync(teeFile));
  • 写入本地文件
    test-hostsync.mjs:244
    writeFileSync(join(workDir, '.cmdmon-call_me_5.log'), 'one\ntwo\n', 'utf8');
  • 删除本地文件递归
    test-hostsync.mjs:287
    rmSync(workDir, { recursive: true, force: true });
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/dsh-jobs
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 实时查看命令输出
  • 无需暂停对话
  • 显示前台后台输出

README

由 DeepSeek 最新模型翻译生成
dsh-cmdwatch 命令窗 实时显示 dsh 发起的命令内容与执行输出,无需暂停对话即可查看前后台执行进度。 | English DSH Target:>=0.1.0-rc.6 <0.2.0(已在 0.1.1-rc.2 验证) DSH 目前处于 developer preview,官方明示会有破坏性变更(breaking changes)。 本插件兼容区间与版本跟进记录见 CHANGELOG.md。 安装 一键安装(推荐) dsh plugin --profile web add github:GavinQiEr/dsh-cmdwatch dsh 不在 PATH 时,用 npx '@deepseek-ai/dsh' plugin --profile web add ... 代替。 安装后重启 web profile(dsh web),输入框上方会出现「命令监视」面板。
展开完整文档(README 剩余 1 节)
dsh-cmdwatch 命令窗

实时显示 dsh 发起的命令内容与执行输出,无需暂停对话即可查看前后台执行进度。

| English

DSH Target:>=0.1.0-rc.6 <0.2.0(已在 0.1.1-rc.2 验证)

DSH 目前处于 developer preview,官方明示会有破坏性变更(breaking changes)。
本插件兼容区间与版本跟进记录见 CHANGELOG.md。

安装

一键安装(推荐)

dsh plugin --profile web add github:GavinQiEr/dsh-cmdwatch

dsh 不在 PATH 时,用 npx '@deepseek-ai/dsh' plugin --profile web add ... 代替。

安装后重启 web profile(dsh web),输入框上方会出现「命令监视」面板。

备选安装方式

| 方式 | 命令 |
| npm 包 | dsh plugin --profile web add dsh-cmdwatch |
| git 仓库(完整 URL) | dsh plugin --profile web add https://github.com/GavinQiEr/dsh-cmdwatch.git |
| 指定分支/提交 | dsh plugin --profile web add github:GavinQiEr/dsh-cmdwatch#main |
| 本地目录(开发调试) | dsh plugin --profile web add /path/to/dsh-cmdwatch |
| tarball 打包 | dsh plugin --profile web add ./dsh-cmdwatch-0.3.2.tgz |

npm 方式需先 npm publish(见下方构建说明);未发布前请用 git / 本地目录 / tarball 方式。

功能

- 后台任务(run_in_background: true):实时进度流——命令行、进度、状态、时间逐行滚动,点击展开完整输出
- 前台命令(pwsh/bash 等工具调用):命令一发出即在面板出现,执行中同样实时滚动(插件自动插入 Tee/tee 把输出落盘后轮询;带 Select-Object -Last 等管道时 Tee 插在管道之前,工具结果语义不变)
- 会话隔离:面板只显示本会话的命令(前台命令 + 后台任务),别的会话的命令一律不进这个面板——右侧栏所在的 shell.overlay 是 root scope 槽位、框架不传会话标识,面板因此从会话级槽位实例接力获取会话标识;拿不到标识时保持为空,绝不退化成 "显示全部会话"。切换会话时面板立即清空并刷新为当前会话的内容,切回去仍能看到该会话的命令(宿主按会话保留记录,重新以 since=0 拉取)。
- 实时流:默认开启,插件每 500ms 主动读取后台任务输出增量并推送到面板
- 运行中置顶 / 自动展开 / 完成归档:正在运行/停止中的记录固定在最上方,且最上面那条自动展开(执行中无需点击即可看输出,输出区放宽到 40vh,原始命令默认折叠、点击才展开);完成后在主表停留 5 秒,再自动折叠进下方「已完成 (N)」组(默认收起,点击标题展开)
- 自动滚动:输出区自动滚到最新一行,焦点始终停在最新输出
- 长命令缩短:压平换行、前 60% + … + 尾部 40%,悬停查看全文
- 命令净化:dsh 自主拼出的命令若带收集型管道(| Select-Object -Last N、 | tail -n N)或输出重定向(| Out-File、>)等阻断实时流的段,插件自动插入 Tee-Object/tee(插在最早的此类段之前)并注入 PYTHONUNBUFFERED,面板实时显示全量进度、原管道语义完全保留(-Last N 仍只回最后 N 行、 Out-File 照常写文件);行上只保留 工具/任务 类型徽标,黄色 ⚠ 只在真正的问题 (包装失败、检测到阻断段却无法安全插 Tee 等)时出现;"已包装 Tee""实时捕获""已注入环境变量"等例行说明在悬停提示与展开行的一行灰字里呈现,不再占用行内空间

前台 vs 后台:怎么选

| 执行方式 | 实时进度 | 说明 |
| 后台任务 run_in_background: true | ✅ 实时滚动 | 无收集/重定向段时走 jobs 官方通道抢读;有此类段时插件插 Tee 落盘并轮询文件,长命令(pytest、构建、脚本)推荐 |
| 前台命令(默认) | ✅ 实时滚动(Tee 捕获) | 插件插入 Tee-Object/tee 落盘并轮询,输出实时显示;Tee 插在收集/重定向段之前,工具结果保持原样(如 -Last 3 仍只回最后 3 行) |

要实时看进度(如 pytest),两种方式都可以:

前台(默认):插件自动插 Tee,面板实时滚动,dsh 拿到的结果不变
python -m pytest tests/... -q

⚠️ 插件会在命令执行前自动插入 Tee-Object/tee(pwsh/bash),输出落盘到工作区/临时目录的 .cmdmon-<callId>.log,插件轮询该文件实现实时显示;命令完成后自动删除日志。Tee 插在最早的收集型/输出重定向段之前——面板看到全量渐进输出,而 dsh 的原管道(-Last、Out-File、Get-Content 等)原样保留、工具结果零改变。多语句/多行命令按顶层语句(; 或换行)逐条覆盖——不会出现"只有最后一条语句的输出进面板";换行是否算语句边界按 PowerShell/bash 续行规则判定(行尾
|、,、反引号等视为续行)。赋值/export、控制流(exit/return…)、if/foreach
等语句块会被跳过(接了会改变语义或直接语法错误);这类"部分覆盖"的调用会在完成时用完整工具结果补全面板输出。是否被包装/是否实时捕获,看悬停提示(含原始命令)与展开行的一行灰字;行上不再挂「改」「实时」徽标。若不想让插件包装命令,可设 rewrite: false (后台)或 foregroundStream: false(前台,回退到「完成后显示」)。

配置

| 配置项 | 默认 | 说明 |
| rewrite | true | 后台命令存在收集/重定向段时插入 Tee 实时输出 |
| pythonUnbuffered | true | 命中 python 时注入 PYTHONUNBUFFERED(避免块缓冲) |
| foregroundStream | true | 前台命令插入 Tee 落盘并实时显示 |
| warn | true | 面板警示收集型/重定向/提前终止型管道 |
| debug | false | 向宿主终端输出 [cmdmon] 诊断日志(排查用) |

在 cordis.patch.yml 的插件行加 config 即可:

- insert:
- id: dsh-cmdwatch
name: dsh-cmdwatch
config:
rewrite: false # 例:只警示,不自动改写

精确等待 API(/cmdmon/wait)

主进程等待子进程,常常只能「估个时间再睡」。job_output 的 wait: true 虽是事件驱动,但只对任务 owner 可用,且有 30s 默认上限;本端点把「零预估等待」变成任何进程/会话都能用的原语:

GET /cmdmon/wait?key=<记录key>&timeout_ms=N[&session=<id>|&all=1] GET /cmdmon/wait?timeout_ms=N[&session=<id>] # 不带 key:等待可见范围内全部结束

- 目标记录进入终止状态(completed/failed/killed)立即返回;记录尚未出现时持续等待(可等一个即将启动的任务)
- timeout_ms 默认 600000(10 分钟)、上限 3600000(1 小时);超时返回 timedOut: true
- 会话隔离与 /cmdmon/snapshot 同一套规则;客户端断开即停止轮询
- 返回体含 record(与面板同字段:status/finishedAt/output 等)

零预估等待任务完成(key 形如 job:pwsh-3 或 tool:call_xxx) $r = Invoke-RestMethod 'http://127.0.0.1:3080/cmdmon/wait?key=job:pwsh-3&timeout_ms=600000'
if (-not $r.timedOut) { "任务结束:$($r.record.status)($($r.record.detail))" }

构建(开发者)

npm install
npm run build:client # esbuild 打包 client/index.jsx → client/client.js
npm test # 单测 + 宿主集成测试(222 用例:命令净化 108 / owner 登记 32 / 会话隔离 25 / 面板列表 29 / 宿主时序 28)
npm pack # 产出 dsh-cmdwatch-0.5.11.tgz

发布到 npm(可选,便于收录与安装):

npm login
npm publish # 发布 dsh-cmdwatch

注意事项

- 「实时流」开启时,后台任务的输出增量会被插件消费,dsh 模型的 job_output
工具将读到空增量((no new output))——这是设计取舍:插件替你盯着输出,
无需暂停对话让 dsh 查进度。需要 dsh 亲自读输出时,先关掉面板上的「实时流」。
- 记录保存在宿主进程内存中,进程重启后清空(动态监控场景,非持久化日志)。
- 命令净化在 tools/execute 阶段、权限检查(tools/pre-execute)之后改写命令——只插入 Tee 管道(落盘日志)并注入环境变量,不改变运行的程序、参数与原管道语义(-Last、Out-File、Get-Content 等工具结果不变)。
- 后台任务会显示两条记录:带「工具」类型徽标的工具调用行(输出只有 started background job ...)与带「任务」类型徽标的任务行——实时输出只进任务行(无管道时走 jobs 通道、有管道时走 Tee 日志),展开任务行查看。前台命令只有一条工具记录,执行中实时输出就在该行,完成后日志文件自动删除。
- 排查实时流问题时,开 debug: true 看宿主终端 [cmdmon] 日志,或用 /cmdmon/snapshot?all=1 读 diagEvents(面板用的请求一律带 session=<id>,不带 session 时端点只返回无会话归属的记录,避免串会话);面板展开行也会给出诊断提示。
- 会话隔离的两条硬约束(宿主侧强制):/cmdmon/snapshot 不带 session 时不返回任何有会话归属的记录(all=1 仅供排查);/cmdmon/clear 不带参数时什么都不清,必须显式 { session } 或 { all: true }。

License

MIT
预览分享卡片长什么样 ↓GavinQiEr/dsh-cmdwatch
分享 · DeepSeek Harness Hub
GavinQiEr/dsh-cmdwatch

命令窗:实时监控 DeepSeek Harness(DSH)命令,在 Web UI 里查看前台和后台命令输出,不打断对话。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部