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

多后端终端 deepseekv41flash/dsh-multi-shell

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

让模型按需切换 Git Bash、PowerShell 与 WSL 执行命令

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · security
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成

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

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

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

读写/删除本地文件
查看扫描证据(共 2 处,展示前 2 条)
  • 读取本地文件
    lib/index.js:657
    directory = statSync(cwd).isDirectory();
  • 读取本地文件
    lib/shells.js:92
    const stat = lstatSync(candidate);
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm@deepseek-ai/dsh-sandbox@deepseek-ai/dsh-shell@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

一个 DSH(DeepSeek Harness)插件:只注册一个 shell 工具,但让模型在每次调用时自己选后端—— Git Bash(默认)、PowerShell、WSL。

README

由 DeepSeek 最新模型翻译生成
dsh-multi-shell English · 简体中文 一个 DSH(DeepSeek Harness)插件:只注册一个 shell 工具,但让模型在每次调用时自己选后端—— Git Bash(默认)、PowerShell、WSL。和 dsh-bash-terminal 的区别只有两点,但正是这两点: | | dsh-bash-terminal | dsh-multi-shell | | 选后端的人 | 用户(设置页「默认终端」),模型不能选 | 模型(shell 参数,逐次选择) | | 跨 DSH 版本 | 声明 peerDependencies: ^0.1.5-rc.1 等精确范围,宿主升到 0.2.x 后过不了版本门控 | 只用 范围且模块内没有任何版本判断;可选服务全部按调用时解析,缺一个只坏一次调用,不会整条 fiber 加载失败 | 工具 shell 参数: | 参数 | 必填 | 说明 | | command | 是 | 命令正文;按所选后端写对应语法 | | description | 是 | 5–10 词的主动语态说明(UI 用) | | shell | 否 | gitbash(默认)/ powershell / wsl | | distro | 否 | WSL 发行版名,只能与 shell=wsl 同用;缺省用系统默认发行版 |
展开完整文档(README 剩余 1 节)
dsh-multi-shell

English · 简体中文

一个 DSH(DeepSeek Harness)插件:只注册一个 shell 工具,但让模型在每次调用时自己选后端—— Git Bash(默认)、PowerShell、WSL。和 dsh-bash-terminal 的区别只有两点,但正是这两点:

| | dsh-bash-terminal | dsh-multi-shell |
| 选后端的人 | 用户(设置页「默认终端」),模型不能选 | 模型(shell 参数,逐次选择) |
| 跨 DSH 版本 | 声明 peerDependencies: ^0.1.5-rc.1 等精确范围,宿主升到 0.2.x 后过不了版本门控 | 只用 范围且模块内没有任何版本判断;可选服务全部按调用时解析,缺一个只坏一次调用,不会整条 fiber 加载失败 |

工具

shell 参数:

| 参数 | 必填 | 说明 |
| command | 是 | 命令正文;按所选后端写对应语法 |
| description | 是 | 5–10 词的主动语态说明(UI 用) |
| shell | 否 | gitbash(默认)/ powershell / wsl |
| distro | 否 | WSL 发行版名,只能与 shell=wsl 同用;缺省用系统默认发行版 |
| workdir | 否 | 工作目录;相对路径按会话目录展开;gitbash/powershell 收 C:\... 或 /c/...,wsl 收 Windows 路径(自动映射 /mnt/...)或 Linux 绝对路径 |
| timeoutMs | 否 | 前台超时(ms),默认 120000、上限 600000;到点杀进程树 |
| run_in_background | 否 | 后台任务,返回 job id(用 job_output / job_kill);无超时 |
| sandbox_permissions + justification | 否 | 沙箱升级(仅 powershell 后端有意义),经 ctx.approval 审批 |

三个后端实际执行的 argv:

- gitbash → <Git>\bin\bash.exe -lc <command>(POSIX;$VAR;PATH 含 /usr/bin、/mingw64/bin)
- powershell → pwsh -NoLogo -NoProfile -NonInteractive -Command <UTF-8 前导 + command>
(前导把 [Console]::OutputEncoding / $OutputEncoding 钉成 UTF-8,中文不再乱码)。
前导带 LanguageMode 守卫:只读沙箱会把 pwsh 跑在 ConstrainedLanguage 下,那里构造编码对象会被语言模式拒绝,守卫让受限会话不再每次调用都往 stderr 打两条 InvalidOperation(官方 pwsh 工具目前仍会打);代价是受限只读下非 ASCII 输出仍是代码页编码(语言模式无解)。
- wsl → wsl [-d <distro>] -e bash -lc <command>;DSH_ 环境变量通过 WSLENV 过边界

非零退出以 [exit code: N] 标记返回(末行,供终端卡片反解);超时以 [timed out after Nms] 开头、末尾仍带 [exit code: N];输出超过 64 KiB 截尾并给完整输出文件路径。

沙箱语义

- PowerShell:read-only / workspace-write 下经 ctx.sandbox.confine 包装 argv(fail-closed)。
没有可用的 provider 时拒绝执行,不会偷偷裸跑;runner 自身失败(ACL runner 退出 127 等)会被识别为 SANDBOX_UNAVAILABLE 类错误("命令没跑,是沙箱坏了"),不会伪装成命令失败。
- Git Bash / WSL:不隔离。原因:DSH 的 Windows ACL 受限令牌 runner 起不动 Cygwin/MSYS2 (bash 启动即 CreateFileMapping ... Win32 error 5),而 WSL 只是进程隔离、/mnt/c 仍可写。
结果里除 sandbox.enforcement(gitbash-unconfined / wsl-isolation)外,受限会话下每次渲染都会追加一行模型可见的 [sandbox: <backend> runs unconfined under <mode> — file effects are not restricted ...],不让「未隔离」只躺在结构化字段里。
- 沙箱升级(sandbox_permissions)只对 powershell 开放;对 gitbash/wsl 传该参数会报错,因为这两个后端根本不受沙箱约束,没有「升级」可谈。请求的模式等于当前会话模式时按无操作放行,不弹审批(与官方 bash 工具一致)。
- 拒绝判定用官方的 matchesSignature(要求非零退出 + 命中小写 stderr 签名),不会把成功命令的非终止错误误标成沙箱拒绝。

管理员 PowerShell(sudo 提示)

插件把这条提示直接写进工具描述(模型每次都能看到):宿主机若启用 Sudo for Windows 内联模式 (sudo config 显示内联/inline),从 gitbash 后端提权:

MSYS_NO_PATHCONV=1 sudo --disable-input pwsh -NoProfile -NonInteractive -Command '<脚本>' </dev/null
约束:每次调用弹一次 UAC,没有凭据缓存;提权进程本工具杀不掉,脚本必须自带超时与自清; 不要用 UI 自动化去点 UAC(点在安全桌面上,点不到)。

配置(在 profile patch 里按需覆盖)

- id: tool-multi-shell
config:
defaultShell: gitbash # 模型不传 shell 时的后端 pwshPath: '' # 留空 = 自动探测(Program Files\PowerShell\7 → WindowsApps → PATH → 5.1) gitBashPath: '' wslPath: '' timeoutMs: 120000 maxTimeoutMs: 600000 maxOutputBytes: 65536 maxSpillBytes: 67108864 graceMs: 3000 enableRunInBackground: true

配置是普通对象(没有 schemastery schema),因此不依赖 DSH 的设置页 API;apply() 启动时校验数值配置(必须为正有限数,graceMs ≤ 2147483647),非法值直接给出字段名清楚的启动错误,不会拖到流回调里崩宿主。

安装 / 回滚

本体是纯 ESM、零构建的包:package.json + lib/ + cordis.patch.yml 即可运行。
npm:dsh-multi-shell( https://www.npmjs.com/package/dsh-multi-shell )。

从 npm 安装到某个 profile(把包加进该 profile 并登记到 bundles,重启 DSH 后生效):

dsh plugin --profile desktop add dsh-multi-shell
然后把 "dsh-multi-shell" 加进该 profile package.json 的 dsh.profile.bundles 数组(或用 DSH 设置页的插件管理器安装,它会同时写 dependencies + bundles)

本机当前 profile(desktop)用的是本地 link(开发态):

- package.json:"dsh-multi-shell": "link:C:\\Users\\Admin\\dsh-multi-shell"
- dsh.profile.bundles:追加 dsh-multi-shell
- node_modules/dsh-multi-shell junction → 插件目录

本次会话里由 loader.create 热装配运行;重启后由 bundles 正常装配(bundles 行与 junction 已落盘)。
回滚:

1. 从 profile package.json 的 dsh.profile.bundles 与 dependencies 删掉 dsh-multi-shell,删 junction;
2. 若要回到旧插件,把 ~/.dsh/profiles/desktop/cordis.patch.yml 里 tool-bash-terminal 的 disabled: true 删掉。
两个插件都注册 shell 工具名,同时只能启用一个(重名注册会让后加载的那个 fiber 失败)。

已验证(2026-10-30,DSH 0.2.1-rc.4 / desktop-next 2.0.21-next)

| 项 | 结果 |
| 默认 gitbash | bash 5.3.15(1),MINGW64,/c/... workdir 正确 |
| powershell | pwsh 7.6.8,中文输出正常(UTF-8 前导生效) |
| wsl | Debian,Windows 路径自动映射 /mnt/c/...;workdir=/home 的 Linux 路径经 cd 前导生效 |
| 超时 | timeoutMs=500 杀 sleep 3,返回 [timed out after 500ms] + 末行 [exit code: 1](终端卡片可反解为失败) |
| 后台任务 | 前台返回 job shell/gitbash-…,job_output 拿到增量与完成状态;job_kill 后 [status: killed];WSL 后台同样可用(首次启动 VM 时输出会在结束时一次性出现) |
| 空串参数 | justification: "" / distro: "" 按未提供处理;shell 为空串仍被 schema enum 拒绝(模型侧极少见) |
| 错误路径 | 不存在的 workdir → 明确报错;gitbash 传 /usr/bin → 教学错误(改用 /c/...);distro 配给 gitbash → 拒绝;run_in_background 在无 jobs 组合里 → 拒绝 |
| 输出截断 | 200k 行输出截尾并给出完整 spill 文件路径 |
| 沙箱(隔离探针) | workspace-write 下 ctx.sandbox.confine + pwsh argv 可执行(enforcement: partial);越界写 C:\Users\Public\... 被拒绝,stderr 命中 access to the path 拒绝签名 |
| 沙箱(本会话) | 本会话工作区 = C:\Users\Admin,而临时目录 …\AppData\Local\Temp 在工作区内,ACL provider 直接拒绝(temp root must be outside the workspace);官方 pwsh 工具同样报此错,属宿主环境限制,不是插件缺陷 |
| 受限只读编码 | 加 LanguageMode 守卫后:本插件 stderr 干净;官方 pwsh 工具对照仍打两条 InvalidOperation。中文在 ConstrainedLanguage 下仍是代码页编码(两者一致,语言模式无解) |
| 重启后 bundles 装配 | 重启后 loader 条目为 {id: "tool-multi-shell", parent: "include", fiber: 2}——稳定的 bundle 行 id、include 树、active;注入器 registry 无该包,不会二次注入 |
| 审批 allow-once | 只读下写盘被拒 → 同命令加 sandbox_permissions: danger-full-access + justification → 用户批准 → 命令执行成功并读回写入内容 |
| 审批 rejected | 同命令再次发起、用户点拒绝 → the user rejected escalating this command to "danger-full-access"; it stays denied, so stop and explain instead of working around it;命令未执行、探针文件不存在、会话仍只读 |
| 管理员 PowerShell(sudo) | 用工具描述里的模板从 gitbash 提权:MSYS_NO_PATHCONV=1 sudo --disable-input pwsh ... </dev/null → IsInRole(Administrator) 返回 True,net session 成功(NET_SESSION_OK);一次 UAC 点击 |

未验证:审批弹窗的 cancelled 分支(需要点取消而不是拒绝);workspace-write 升级后的实际执行(本会话工作区与临时目录同根,ACL provider 会在批准后拒绝,属宿主环境限制,官方 pwsh 工具同样如此)。

结构

dsh-multi-shell/
├── package.json # 名字/导出/peerDependencies(全部 "*")/dsh.bundle.patch ├── cordis.patch.yml # bundle 层:insert 一行 id=tool-multi-shell ├── lib/ │ ├── index.js # 工具定义、子进程/后台任务/沙箱/审批/渲染 │ └── shells.js # 纯函数:探测、argv、env、workdir、deadline、配置校验 ├── scripts/check.sh # 零构建校验:node --check + 单测 + npm pack dry-run ├── test/shells.test.mjs # 离线单测(node --test,12 例) └── README-en.md # English README
预览分享卡片长什么样 ↓deepseekv41flash/dsh-multi-shell
分享 · DeepSeek Harness Hub
deepseekv41flash/dsh-multi-shell

让模型按需切换 Git Bash、PowerShell 与 WSL 执行命令

回到顶部