点击任务行查看实时终端输出并停止任务
35.9/100
综合分
9
GitHub 星标
35
npm 周下载
—/5
用户评分
数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-plugin-job-panelnpm 源 · dsh-plugin-job-panel 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-plugin-job-panel @ 0.1.7-alpha.2
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 06:37:21
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 7 处,展示前 7 条)
- 发起网络请求lib/client.js:196
const response = await fetch(`${OUTPUT_PATH}?${params.toString()}`, { signal, cache: "no-store" }); - 发起网络请求lib/client.js:204
const response = await fetch(`${FULL_PATH}?${params.toString()}`, { signal, cache: "no-store" }); - 发起网络请求lib/client.js:209
const response = await fetch(STOP_PATH, { - 写入剪贴板lib/client.js:10295
await navigator.clipboard.writeText(command); - 发起网络请求src/client/api.js:42
const response = await fetch(`${OUTPUT_PATH}?${params.toString()}`, { signal, cache: "no-store" }); - 发起网络请求src/client/api.js:62
const response = await fetch(`${FULL_PATH}?${params.toString()}`, { signal, cache: "no-store" }); - 发起网络请求src/client/api.js:73
const response = await fetch(STOP_PATH, {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图功能亮点
- 点击任务行查看输出
- 实时终端输出
- 停止任务
DeepSeek Harness 网页界面右侧边栏的任务面板。
最近更新
在 GitHub 查看全部 →v0.1.7-alpha.22026-09-26
dsh 0.1.7 兼容版本。
版本说明——从这个版本起,插件版本号与它验证过的 dsh 版本保持一致(0.1.7-alpha.2 ↔ dsh 0.1.7-alpha.2)。这个版本在功能上就是原本的 0.1.1 修复版,取代 npm 上的 0.1.0。
· 修复
· 弹窗行标识(dsh 0.1.7)——dsh 0.1.7 改了后台任务弹窗识别行的方式(JobItem fiber / guide entry id),导致从弹窗行打开任务面板失效。面板现在跟踪新的标识,同时兼容 0.1.6 时期的形态,两个 dsh 版本都能正常用。(#1724607)
- 修复 dsh 0.1.7 任务弹窗行标识变更导致的「点击行无反应」问题;新旧两种行形态均兼容。
· 新增 / 文档
· 简体中文 README,带中英切换。
· 固定验证基线:META/dsh-upgrade.json 标记、META/dsh-baseline.txt(dsh 0.1.7-alpha.2),以及 verified-dsh/v0.1.7-alpha.2 标签。
· 验证
· npm test —— 39 通过 / 0 失败;node --check lib/*.js 无报错。
· 在运行中的 dsh 0.1.7-alpha.2 上实测通过。
· 安装
npx @deepseek-ai/dsh plugin --profile web add dsh-plugin-job-panel -w
安装(或升级)后重启 dsh web——bundle 层不会热重载——然后刷新页面。
完整更新日志:
v0.1.02026-09-20
DeepSeek Harness 网页图形界面的右侧栏任务面板首次公开发布:点击会话头部后台任务浮层里的某一行即可查看任务,包括命令、带 iterm2 风格有界回滚的实时终端输出、完整的溢出文件历史,并能停止该任务。
· 亮点
· 浮层行可点击——官方后台任务浮层只渲染只读行,不提供行级扩展位;这里按文档给出的无扩展位方式增强行(MutationObserver + data-* + 一条 CSS 规则),绝不向 React 管理的子节点注入内容
· 面板——通过官方两阶段 sidebarRightTabs 路径注册的页面标签类型:类型标签、实时状态点、跳动的时长、启动/结束/详情信息、带复制按钮的命令块、捕获的 spawn 工作目录,以及停止控件;分屏、浮动、全屏由停靠套件提供
· 真正的终端引擎——输出渲染在嵌入的 xterm.js 终端里:SGR 颜色(16/256/真彩色)、OSC、C1 双字节转义、粗体/暗淡/斜体/下划线、回车进度重绘;2000 行回滚,自动跟随并带浮动跳回按钮
· 语义化日志配色——纯文本捕获内容在展示时按级别词汇着色(error 红 / warn 琥珀 / debug 暗淡,沿用 console-logger 惯例);面板从不改动模型读取的流,输出里真实的转义序列按原样渲染
· 完整的溢出文件历史——超出 64 KB 内存窗口的流会保留宿主溢出文件;一个按钮拼接溢出文件头部与保留的尾部,并检测字节数缺口
· 有意的停止——第一次点击进入 3 秒待确认,第二次点击确认;宿主通过启动时记录的属主会话执行终止,浏览器从不宣称拥有权限
· 安装
npx @deepseek-ai/dsh plugin --profile web add dsh-plugin-job-panel -w
前置条件(dsh 可达性、pnpm)、用 cookie 探测验证路由、无 pnpm 的手动回退方案,以及故障排查:见 README。
· 兼容性
· 已针对 @deepseek-ai/dsh@0.1.5-rc.2 验证;Node >= 22
· 插件耦合了有文档但不稳定的内部接缝(任务注册表的启动语义、SubprocessHandle.collected 读取器、侧栏扩展位、/api 边界)——升级 dsh 时请重新核对 README 里的「版本敏感接缝」表
· npm 包附带构建好的 lib/(21 个文件,约 150 kB);@xterm/* 已打包在内,运行时除 dsh 本身外无需任何依赖
· 素材
下面的 demo.gif 就是 README 中展示的录屏。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-plugin-job-panel
DeepSeek Harness Web GUI 的右侧边栏任务面板
点击会话标题栏"后台任务"弹窗中的任意一行 → 查看命令、跟随其实时终端输出、停止该任务。
npm
node
License: MIT
verified
点击弹窗中的某一行 → 面板页签打开并显示实时输出;完整历史从溢出文件加载;停止控件先待命、再确认。
双面插件(dual-face):一个包内同时包含 Node 半边(观察探针 + 三条精确 /api 路由)与浏览器半边(面板主体 + 弹窗行增强)。
已针对 @deepseek-ai/dsh@0.1.7-alpha.2 验证。MIT 许可。
展开完整文档(README 剩余 1 节)
dsh-plugin-job-panel
DeepSeek Harness Web GUI 的右侧边栏任务面板
点击会话标题栏"后台任务"弹窗中的任意一行 → 查看命令、跟随其实时终端输出、停止该任务。
npm
node
License: MIT
verified
点击弹窗中的某一行 → 面板页签打开并显示实时输出;完整历史从溢出文件加载;停止控件先待命、再确认。
双面插件(dual-face):一个包内同时包含 Node 半边(观察探针 + 三条精确 /api 路由)与浏览器半边(面板主体 + 弹窗行增强)。
已针对 @deepseek-ai/dsh@0.1.7-alpha.2 验证。MIT 许可。
亮点
| 🖱 弹窗行可点击 | 官方"后台任务"弹窗只渲染只读行 —— 本插件让每一行都成为点击目标,打开(或重新定位)面板页签 |
| 🖥 真正的终端引擎 | 输出渲染在嵌入式 xterm.js 终端里:SGR 颜色(16/256/真彩色)、OSC、粗体/暗淡/斜体/下划线、回车重绘的进度条 |
| 🎨 语义化日志配色 | 纯文本在展示阶段按级别词汇着色 —— error 红、warn 琥珀、debug 暗 —— 绝不触碰模型读取的那条捕获流 |
| 📜 基于溢出文件的完整历史 | 超出 64 KB 窗口的流内容保存为宿主侧溢出文件;一个按钮即可把溢出文件前段与保留尾段拼接起来(带字节缺口检测) |
| ⏹ 三思而后停 | 第一次点击进入 3 秒待命,第二次才确认;宿主按启动时记录的属主会话执行 kill |
安装
前置要求:
- dsh 命令可用 —— dsh --version。如果 dsh 不是全局命令(多数安装只通过 npx 使用),请给下文每条 dsh 命令加上 npx @deepseek-ai/dsh 前缀
- pnpm 已在 PATH 中(dsh 插件管理器会调用它):npm install -g pnpm
来自 npm registry —— 包自带构建好的 lib/,无需构建步骤
npx @deepseek-ai/dsh plugin --profile web add dsh-plugin-job-panel -w
或直接从 GitHub 安装
npx @deepseek-ai/dsh plugin --profile web add git+https://github.com/cholf5/dsh-plugin-job-panel.git -w
重启一次 dsh web(新增 bundle 不会热加载),然后刷新浏览器页面。
验证宿主路由是否已生效 —— 请携带会话 cookie:围栏会拒绝一切未携带 cookie 的 /api 请求,因此 401 不能说明任何注册状态:
curl -s -c /tmp/dsh-cookies.txt "http://127.0.0.1:3080/?token=" -o /dev/null # 换取会话 cookie(303)
curl -s -b /tmp/dsh-cookies.txt "http://127.0.0.1:3080/api/job-panel/output" # 400 jobId 校验报文 = 已注册;404 "not found" = 未注册
然后点击会话标题栏"后台任务"弹窗中的任意一行 —— 它会打开面板页签。
没有 pnpm,也不想装?手动回退方案
git clone https://github.com/cholf5/dsh-plugin-job-panel.git ~/.dsh/profiles/web/node_modules/dsh-plugin-job-panel
然后让 ~/.dsh/profiles/web/cordis.patch.yml 的内容为(这是该文件最终的顶层形态 —— 不要盲目地在 [] 行后面追加):
- insert:
- id: job-panel
name: dsh-plugin-job-panel
运行中的 dsh 会热加载这行补丁;随后刷新浏览器。
更新 / 卸载
npx @deepseek-ai/dsh plugin --profile web update dsh-plugin-job-panel -w # 或 remove dsh-plugin-job-panel -w
之后重启 dsh web。
它做了什么
1. 弹窗行可点击。 官方"后台任务"弹窗(dsh-client-ui-jobs)不提供行级扩展席位,因此这里采用文档记载的"无席位"增强方式:MutationObserver 为每一行打上 data-job-panel-id(任务 id,从该行的 React fiber 上读取 —— 自 dsh 0.1.7 起是 JobItem 包装 fiber 上的 props.job.id;0.1.5 的"带 key 的 "形态作为回退继续支持),一个点击监听器负责打开(或重新定位)面板页签 —— 但行内原生的终止按钮保持原行为,不会触发导航 —— CSS 提供指针/悬停/箭头视觉提示。绝不向 React 管理的子节点中注入任何元素。
2. 面板。 一种页面页签类型(kind: job-output,含引导区入口),通过官方两段式 sidebarRightTabs 路径注册;面板主体渲染 kind 徽标、实时状态点、跳动的时长、启动/结束/详情信息、命令块(生产者标签 —— 对 bash 任务即命令本身,带复制按钮和记录下的 spawn cwd)、流式输出视图,以及停止控件。页面页签在其所在窗格内去重,因此点击另一个任务会重新定位同一个页签;分屏 / 浮动 / 全屏则由停靠套件免费奉送。
3. 输出。 页签可见期间,面板以自己的字节偏移每 500 ms 轮询一次,并把原始增量转发给嵌入式 xterm.js 终端 —— 真正的终端引擎,因此 SGR 颜色(16/256/真彩色)、OSC、C1 双字节转义、粗体/暗淡/斜体/下划线以及回车重绘的进度条都原生渲染,样式状态跨行延续,与真实终端完全一致。有界历史即终端自身的回滚缓冲区(2000 行,iterm2 风格);自动跟随始终贴住底部,直到用户向上滚动(此时出现浮动跳回按钮);发生有损读取时,会带着缺口标记从保留尾段重新开始。当某个流的输出超出其内存窗口(默认每流 64 KB)时,宿主会保留一份溢出文件,"加载完整历史"按钮会重置视图,并把溢出文件前段与保留尾段按字节计数缺口检测拼接起来。
4. 停止。 第一次点击让按钮进入 3 秒待命,第二次点击才确认。宿主调用 ctx.jobs.kill(id, { id: ownerSession }) —— 注册表按会话 id 对调用者做鸭子类型判别,而属主会话是启动时记录的那个,所以浏览器从不自行声明权限。
输出是如何工作的(最有意思的部分)
浏览器半边 宿主半边 ┌───────────────────────────┐ ┌─────────────────────────────────┐ │ 弹窗行(可点击) │ GET /api/… │ JobTap 包装(行为保持): │ │ 面板页签 │ ──────────────▶ │ ctx.jobs.start │ │ └ 嵌入式 xterm.js │ 受围栏保护的 │ ctx.subprocess.spawn │ │ + 语义化颜色 │ /api 通道 │ 3 条精确路由: │ │ 停止控件(待命→确认) │ ◀────────────── │ output / full / stop │ └───────────────────────────┘ └─────────────────────────────────┘
任务注册表契约通过每个任务一个消费游标(ctx.jobs.read())暴露流输出,游标归模型的 job_output 工具所有;官方 README 把"独立观察者需要游标或快照 API"列为已知限制。若直接经由注册表读取,会抢走本属于模型的增量,并抑制其完成通知。
因此,本插件在下一层进行观察:
- 包装 ctx.jobs.start(保持行为不变),记录 kind / label / 属主会话,并在生产者的同步 run() 执行期间让对应条目保持打开;
- 包装 ctx.subprocess.spawn,把进行中的 start 所产生的第一个 collect 模式句柄归属到该条目 —— 句柄的 collected.stdout / collected.stderr 是文档明确为无游标的 SubprocessOutputReader("独立读取器不会互相消费对方的输出"),可从任意全流字节偏移读取,进程退出后依然可读。
共享的、经认证的 /api 通道上的三条精确路由负责提供这些数据:GET /api/job-panel/output(增量读取 + 快照)、GET /api/job-panel/full(溢出文件前段 + 保留尾段)、POST /api/job-panel/stop(终止)。请求先通过 connection 包的信任围栏与 cookie 认证,然后才进入分发。
终端颜色
捕获流按设计就是纯文本:harness 以 NO_COLOR=1、TERM=dumb 且无 TTY 运行每条命令,让模型看到干净的文本 —— 面板绝不触碰那条流。颜色只在展示阶段重建,分为两层:
1. 语义级别(始终开启)。 纯文本日志行 —— 绝大多数情况 —— 按级别词汇渲染:error/failed/fatal/exception/panic 红色,warn/deprecated 琥珀色,debug/trace/verbose 暗淡,即各控制台日志器的通用约定(.NET、serilog、log4j、……)。分类器只负责判断;终端把判断结果作为展示阶段的 SGR 包裹,应用到本身不含转义序列的行上。
2. 真材实料(如果存在)。 如果命令的输出本身就带转义序列,嵌入式终端会像真正的终端一样渲染它们 —— 16/256 色、真彩色、属性、光标寻址的进度重绘 —— 中间没有任何映射层。
想让某个任务显示真正的终端颜色,就在命令里强制打开 —— 常见的颜色检测器对 FORCE_COLOR 的优先级高于 NO_COLOR:
FORCE_COLOR=1 dotnet run # .NET / chalk / 大多数 Node 工具
CLICOLOR_FORCE=1 ./mytool # GNU 风格的工具
tool --color=always … # 带显式开关的工具
[!NOTE]
模型自己的 job_output 读的是同一条捕获流 —— 对模型会读取其输出的任务强制开启颜色,等于把转义序列也摆到模型面前。这个取舍属于命令的作者;面板刻意不去剥离或改写流来改变它。
终端主题跟随产品:面板背景、前景以及 error/warn 调色板项在挂载时从 dsh token 解析,并在主题切换时重新解析;16 色调色板的其余项采用中等亮度取值,在浅色与深色表面上都清晰可读。
已知限制
- 非 bash 任务(一次性后台子代理、……)是进程内生产者,没有可供观察的子进程句柄:其面板展示元数据与停止控件,并附"无输出流"说明。
- 插件加载之前启动的任务(包括宿主半边重载后)未被探针捕获:没有输出;停止时回退为使用展示该行的会话在浏览器侧提供的会话 id。
- 人为终止会抑制模型的完成通知 —— kill() 会把终态投递标记为已上报,这是 0.1.5-rc.2 中一个已被官方接受的接缝缺口;模型会在下一次 job_output/job_list/job_wait 调用时发现任务已被停止,不会挂起。
- dsh web 重启会清空任务注册表(按设计存于内存);对应任务已消失的面板会如实说明。
- 运行中任务超出溢出上限(每流 64 MB)的输出无法完整恢复;在完整历史视图中,溢出文件前段另有上限(默认每流 2 MB)。
版本敏感的接缝(升级 dsh 后请复查)
| 接缝 | 假设的事实 | 位置 |
| jobs-local.start() | 同步调用 spec.run() | lib/tap.js 的关联逻辑 |
| SubprocessHandle.collected | 基于偏移的读取器,readFrom(byteOffset) | lib/routes.js |
| ctx.jobs.kill/get | 按 caller.id 与属主 id 做鸭子类型判别 | lib/routes.js |
| 弹窗 DOM | ;行身份 = JobItem fiber 上的 props.job.id(0.1.7;旧版:带 key 的 fiber key),终止按钮 = 行内没有 aria-expanded 的那个按钮 | src/client/enhance-dropdown.js |
| 侧边栏席位 | 按 sidebar.right.pane.tab 键控的席位,useTabInfo hook 属性 | src/client/index.jsx |
| /api 围栏 | 未认证探测一律返回 401(本版本与具体路由无关 —— 旧的"404 = 未注册"启发式不再成立) | — |
故障排查
| 现象 | 原因与修复 |
| dsh: command not found | 仅通过 npx 安装 —— 每条命令加前缀 npx @deepseek-ai/dsh |
| pnpm was not found(退出码 127) | npm install -g pnpm,或使用上文的手动回退方案 |
| ERR_PNPM_ADDING_TO_ROOT | 漏掉了 -w 标志 |
| 已安装但行不可点击 / 没有面板 | 重启 dsh web(bundle 层不会热加载),然后刷新页面 |
开发
想在本插件上做二次开发,请从本地检出安装(link: 符号链接 —— 源码改动直接生效):
dsh plugin --profile web add link:/abs/path/to/dsh-plugin-job-panel -w
重启一次之后(bundle 安装不会热加载):
| 改动 | 生效方式 |
| lib/client.js(先运行 npm run build) | 由 dsh-client-hmr 热替换,无需重启 |
| lib/.js(宿主半边) | 重启 dsh web |
| cordis.patch.yml | 热加载 |
npm install # esbuild + @xterm(全部为 devDependencies)
npm test # node --test:output-buffer / log-line / stream-piper / 宿主路由 / bundle 工厂
npm run build # src/client/ -> lib/client.js
node --check lib/index.js
npm run build 从 src/client/ 重新生成 lib/client.js(esbuild 会把 @xterm/xterm 及其样式表一起打进产物 —— 所有构建期依赖都是 devDependency,因此从 registry 安装时只会拉取本包)。lib/ 已提交入库,所以以 link: 方式安装的 profile 无需任何安装步骤即可拾取改动。
宿主半边是纯 ESM JavaScript,没有构建步骤;浏览器半边由 build.js 构建,它把 esbuild 的 CJS 产物包装成浏览器模块系统所期望的 window.__ModuleLoader__.load({ id, factory }) 形态。平台种子模块(react、react/jsx-runtime、@deepseek-ai/dsh-client-ui-primitives)保持 external,经加载器的模块表解析;嵌入式终端(@xterm/xterm、@xterm/addon-fit —— 均为 MIT 许可,出自 xterm.js 作者之手)及其样式表则被打包进产物。
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
cholf5/dsh-plugin-job-panel
点击任务行查看实时终端输出并停止任务
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4