DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Shell Progress — DeepSeek Harness 插件(DSH Plugin)
← Plugins
S

dsh-shell-progress

Shell Progress

DeepSeek Harness 插件:用于多步骤 PowerShell 工具调用的分段式进度条

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:9087/dsh-shell-progress#30dea8b79dbc29dc496b38d3bc6dce7a3e41fead
README兼容性版本

兼容性与来源证明

Shell Progress 以 dsh-shell-progress 发布,当前版本为 0.4.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/16

版本

0.4.2stable
2026/10/16
0.4.0stable
2026/10/16
0.3.0stable
2026/10/16
查看其余 3 个版本

README

dsh-shell-progress

English | 中文

A DeepSeek Harness plugin that shows where a multi-step shell command is right now, as a segmented progress bar inside the tool-call card.

One call, one card — photographed mid-run, not drawn by hand:

The card while a four-step command runs: a partly filled segmented bar with the step in flight and its clock, the finished step's output beneath it, and the steps still to come

The real card, expanded, with 1/4 done and step 2 in flight.

The question it answers is "is this command still working, or is it stuck?" — so the live position is the feature, not a bonus. The bar lives in the collapsed card: a glance at the transcript is the whole point, and hiding it behind a disclosure would make it a two-step interaction.

Install

dsh plugin --profile web add dsh-shell-progress

Or mount it by hand in the profile's cordis.patch.yml:

- insert:
    - id: shell-progress
      name: dsh-shell-progress

Then restart dsh web (the host loads the plugin once, at start-up).

What the model sees

Nothing new. shell_progress registers a tool whose model-visible text is byte-identical to what the pwsh tool returns for the same command — same stdout, same [stderr] section, same [exit code: N] markers. Step data never enters the conversation; it travels in the tool result's presentationMeta, which the harness persists on the tool/result event.

There is no nonce, no marker and no reordering anywhere the model can read.

Configuration

- insert:
    - id: shell-progress
      name: dsh-shell-progress
      config:
        enabled: true
        pollIntervalMs: 120
        maxStepOutputChars: 8192
        maxSteps: 400
        liveRetentionMs: 300000
FieldDefaultMeaning
enabledtrueRegister the shell_progress tool.
pollIntervalMs120How often the host reads the running process's output.
maxStepOutputChars8192Per-step output kept in the persisted progress.
maxSteps400A command split into more steps than this runs unmodified.
liveRetentionMs300000How long a settled call's live record is kept for a late poll.

When a step's output passes maxStepOutputChars, the lines that do not fit are dropped from the CARD's copy, and that step's output is followed by the number of characters that are missing — in the step list and in the segment's hover card alike. Without it a truncated step reads exactly like a quiet one. The budget is the card's memory, not the tool result: the model-visible stdout comes from the shell seam and is unaffected by it (the seam's own truncated / spillPath reporting applies as it always does).

How it works

  1. Split. The command is cut into top-level steps: non-empty lines that start at column 0, do not start with }, and sit at brace depth 0. Brace counting skips single-quoted strings, double-quoted strings (with the backtick escape) and # comments. Loop bodies are never steps, so one iteration cannot produce a marker.
  2. Instrument. Each step's own line gets an inlined marker prefixed to it — never a new line, so the line count and every other line stay untouched.
  3. Run. The instrumented text goes through ctx.shell, exactly as the pwsh tool runs a command, with the same timeout, sandbox policy, managed environment and cancellation.
  4. Follow. While the process runs, the host reads its incremental output and turns each marker into "the current step", stamping a monotonic timestamp.
  5. Persist. The final per-step timings and output ride output.presentationMeta, so a reloaded session rebuilds the whole card from the session log alone.

The marker must stay inlined

src/instrument.ts carries the long version; the short one is that a PowerShell function call is itself a command, and running it overwrites $?. A marker written as a helper therefore clobbers the automatic variable it was asked to preserve — and the caller's $? afterwards reports the helper's success, so even a helper that captures and restores the value internally cannot fix it. Measured on this host (Windows PowerShell 5.1, which is what the shell seam resolves to when PowerShell 7 is not installed):

Marker shape$? after a failed command
none (control)False ✅
helper function, capture + restore insideTrue ❌
inlined capture + restoreFalse ✅

tests/powershell.spec.ts runs both shapes against a real shell and asserts the difference, so a future refactor into a helper fails the suite.

When it does not track

The command runs unmodified — and no marker is written — when any of these hold:

  • the splitter meets something it cannot decide (unterminated quote, block comment, here-string, line continuation, unbalanced braces or parentheses);
  • the command already contains a step-marker shape, or already uses $__ok;
  • the resolved sandbox mode is read-only;
  • the command splits into more than maxSteps steps.

A refused call's card is the plain one: the command and everything it printed, with no bar, no counter and no step rows. There is nothing to draw — no marker was written, so no step has a time or an output of its own, and the planner's best-effort step list is dropped rather than rendered as rows that could only ever read "pending". The reason for the refusal goes to the host log (shell-progress: running the command unmodified — …), not onto the card.

A command with one step is uninstrumented too — there is no order to keep, so there is nothing to mark — but its card is not degraded: the host stamps that step's own start and end, so the bar draws its single segment and it goes pending → running → done with the command's clock beside it.

None of these is an error: the model gets exactly what pwsh would have given.

Layout

HalfSourceRuns in
Hostsrc/index.ts (+ the pure modules beside it)the DSH host process (Node)
Clientsrc/client/* (React)the browser

The two halves share src/types.ts and src/split.ts and nothing else.

The live channel is a poll, not a push. A plugin installed outside the DSH tree cannot receive host events — the forwarded-event allowlist is a static array inside the DSH build — so the browser polls /shell-progress (an authenticated request/response channel this plugin owns) every 250ms — the store's default cadence — while a call is in flight. The settled state never needs the poll: it is already in the session log.

Development

pnpm install
pnpm run typecheck
pnpm test
pnpm run build

The three workflow badges at the top are these:

WorkflowWhat it does
ci.ymlTypechecks, builds and runs the unit suite against the harness versions pinned in devDependencies — ONE host version, the one this repository declares.
harness-matrix.ymlRe-runs the three suites that cross the plugin/host seam (the registered tool driven through apply, the pwsh planner, the bash planner) once per published harness version — the only real answer to "will this still work after the host upgrades". A version inside the declared peer range blocks the build; the newest published version rides along as a non-blocking probe.
release.ymlOn a v* tag: the same gate, then npm publish --provenance through Trusted Publishing (OIDC — no token anywhere), then a GitHub Release.

See DEVELOP.md and PUBLISH.md.

License

MIT

收起版本
0.2.0stable
2026/10/15
0.1.1stable
2026/10/14
0.1.0stable
2026/10/14

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Whale Widgetdsh-whale-widgetDSH Web 界面右下角的 DeepSeek 余额小鲸鱼挂件:余额/今日已用/峰谷定价、自定义泡泡点击序列(文本/余额/今日/峰谷/图片/随机语句与并列加权选择)、逐行样式与字体、悬浮快捷编辑、音效与每轮消耗、自定义角色/动图/音效、吸附与翻转自定义Client Ui Skill Explorer@linxin666/dsh-client-ui-skill-explorerDSH 技能中心:按来源(bundled / project / user / custom / runtime)浏览已加载的技能,在 Web GUI 面板中启用或禁用、创建和删除技能。Remote Web Ui@linxin666/dsh-remote-web-ui通过扫码配对访问 dsh Web GUI,共享一个官方界面:设置按钮旁的二维码可将手机和 PC 配对到同一个 Web GUI(手机采用竖屏触控适配层,PC 使用完整桌面界面),通过一次性令牌和 rClient Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。
最新版
0.4.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/16
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录