DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

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

dsh-shell-surfaces

Shell Surfaces

将机器的其他执行环境整合为一个 DSH 工具:WSL Linux 用户空间、nushell 的结构化管道、MSYS2 用户空间(bash/zsh/fish/brush),以及用于交互式程序的真实控制台。通过 surface 参数使用一个工具,让会话不再事事调用 pwsh。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:Nesarf/dsh-shell-surfaces#02e70aa8159c82808ef42bbc2b8d085d492de9da
README兼容性版本

兼容性与来源证明

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

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

版本

0.1.0stable
2026/10/15

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
未声明
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/10/15
查看源码 ↗
README Badge

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

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

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

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

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Experimental Inspector@deepseek-ai/dsh-experimental-inspector用于 Host 调试和 Client Runtime 检查的实验性跨 realm CDP hub

README

dsh-shell-surfaces

https://github.com/Nesarf/dsh-shell-surfaces -- a DSH plugin, installed with dsh plugin --profile <profile> add github:Nesarf/dsh-shell-surfaces.

One DSH tool for the execution surfaces this machine has besides pwsh: a WSL Linux userland, nushell's structured pipelines, the MSYS2 userland (bash / zsh / fish / brush), and a real console for interactive programs.

It exists because a rule that is only written down is not a capability. The selection rules for these surfaces have been recorded for a while, but a session could only act on them by composing a command string for pwsh and hoping the quoting survived the trip. Here they are callable.

shell_surfaces(action="surfaces")                    what exists here, and where each was looked for
shell_surfaces(action="run", surface="wsl",  command="grep -P '(?<=Linux )[0-9.]+' /proc/version")
shell_surfaces(action="run", surface="nu",   command="open data.json | where n > 3 | to json")
shell_surfaces(action="run", surface="msys", command="pacman -Q | wc -l")
shell_surfaces(action="run", surface="pty",  command="powershell -File install.ps1", send=["y\n"])

Why one tool and not seven

Every registered tool spends part of the context on its description. Seven tools would say the same thing seven times. The selection rules -- which surface for a structured pipe, which for a Linux-only tool, which for a program that waits for input -- live in this one description, and a session reads them exactly when it is choosing.

What it is not

  • No prompt injection and no message hooks. It registers a tool and nothing else, so it cannot be the plugin that writes a malformed message.
  • No terminal emulator. A terminal emulator draws text for a person and adds nothing a subprocess can use. The one surface that needs a console talks to ConPTY directly.

The facts behind the argument lists

Each of these was measured on this machine, and each shapes the argv:

FactConsequence
A command handed through a shell can be re-parsed twiceThe command travels as one argv element; a script file is preferred over an inline string
MSYS2's /tmp follows TMPDIR, which this machine passes down as a Windows pathmsys / zsh / fish run as login shells, which normalises the environment
brush has no Cygwin runtime beside it, so /tmp is <drive>:\tmpbrush gets no login flag and no POSIX-path assumptions; its PATH needs usr\bin as well as ucrt64\bin, or every external command fails while the shell reports a healthy version
PtyProcess.read blocksReading happens on its own thread; a read loop that also decides when to stop can block the very check that would stop it
A console wants Enter, which is a carriage returnsend normalises a trailing newline (real, escaped, or literal) to CR, and a bare answer gets one added
wsl.exe sometimes prints the result and then declines to exitA timeout with output is reported differently from a timeout without it; wsl.exe --shutdown is the reset (measured: a cold instance answered in 58 s, the same call after a reset in 8 s, and warm in 0.13 s)

Layout

PathWhat it is
lib/index.jsthe tool: one shell_surfaces, actions run and surfaces
lib/surfaces.jsthe table: paths, arguments, environments, and the absent-reason for each surface
lib/runner.jsargv construction, bounded output with spill, timeout classification
scripts/pty_runner.pythe console: pywinpty, a reader thread, ANSI stripping, one JSON report
scripts/live-check.mjsruns one real command per surface through the plugin's own code path
scripts/pty-gate.ps1the interactive fixture: a Read-Host prompt for the pty case
test/surfaces-test.mjsthe table, the argv shape, the tool contract

Verification

node test/surfaces-test.mjs          # 55 checks, no host needed
node scripts/live-check.mjs          # one real command per surface on this machine
node scripts/live-check.mjs wsl nu   # or only some of them

Every surface was also run for real (2026-10-15): wsl returned the kernel and a /proc count, nu returned a number through a structured pipeline, msys returned its bash version and a package count, zsh its parameter-expansion result, fish its arithmetic result, brush an uppercased string, and pty answered a Read-Host prompt with y and printed the branch it took.

Honest boundaries

  • Windows-first. The surfaces it knows about are this class of machine's: a WSL distro, MSYS2, nushell, and ConPTY. On POSIX the platform already ships a single shell, so most of this is unnecessary there.
  • No isolation of its own: a command runs with the harness process's rights. The file sandbox and approval policy still apply to the process tree.
  • MSYS-family output is assumed UTF-8 (LANG=C.UTF-8 is set). A Windows program reached through a surface may still answer in the OEM code page.
  • The MSYS2 surfaces need DSH_MSYS_ROOT if MSYS2 is not at D:\msys64; nushell needs DSH_NU if nu.exe is not in %LOCALAPPDATA%\Programs\nu\bin; the pty surface needs python on PATH with pywinpty installed.