dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
从 T-Auto/dsh-ops 0.4.1(commit dfafddc,MIT)中单独抽出的 bash 组件: 只做一件事——把 ops_bash 发布成一个具备宿主管辖(sandbox / 审批 / 输出溢出 / 后台 job)语义的 shell 工具。 file / PTC / discovery / panel / TUI / hide-official 这六条组件行全部没有移植。
@deepseek-ai/* 的运行时值(只有类型导入),加载期不会因为宿主包缺失而失败。ctx.get('subprocess') / ctx.get('sandboxPolicy') / ctx.get('sandbox') / ctx.get('jobs') 借用宿主服务。bash 工具的差别:多一个 script_path 参数、更严格的参数校验、failure.code/effectState/retry 结构化失败信息。dsh-plugin.json(manifest v0.15)+ dsh.bundle.patch 行 + ./shell 组件导出 +根级图标与 locale/{en,zh}.json,npm run validate:manifest 用官方 @dsh-std/manifest 解析器过一遍。
项 · 内容 上游项目 · T-Auto/dsh-ops 上游版本 / 提交 · 0.4.1 / dfafddc(Merge PR #403) 上游许可 · MIT,Copyright (c) 2026 T-Auto and the dsh-ops contributors 上游许可原文 · licenses/dsh-ops-LICENSE(原样保留) 间接上游 · @deepseek-ai/dsh-tool-bash 0.2.0-rc.2(MIT,Copyright (c) 2026 DeepSeek),经 dsh-ops 转承;原文见 licenses/deepseek-harness/LICENSE 逐文件对应关系与全部改动 · docs/PROVENANCE.md 第三方声明 · NOTICE
本项目是二次开发而非上游发布物:包名、配置段、DSH_HOME 子目录、运维命令都改为 dsh-bash; 仅保留 bash 一条组件行;不管理 PowerShell;组件入口不导出 Config(见 PROVENANCE 的说明)。 上游原有的版权与许可声明全部保留,未替换。
dsh-plugin.json DSH manifest v0.15(host facet / Tool 契约 / 权限 / 组件与提示词声明)
cordis.patch.yml 唯一一行 dsh-bash-shell
locale/, docs/assets/ 插件卡片用的语言文件与图标
src/index.ts 组件入口:解析 bash → 发布工具 → 提示词段 → 可选禁用宿主 shell
src/components/shell/ Loader 行入口(dsh-bash/shell)
src/config.ts 行配置校验(未知键报错)
src/policy.ts 工具名 / 路由提示词(只描述 ops_bash 与宿主的 pwsh)
src/shells.ts + src/shells/ 解析、探测、执行、结果渲染、job、宿主契约(原样移植)
src/session-shells.ts 按 agent/session 维度发布与撤销,跟随 sandboxPolicy 变化
src/shells/session-execution 每次调用的权限断言 + 受限模式 confinement 接线
src/bash-ipc.ts Windows 受限模式的私有 MSYS 运行时缓存与校验
src/bash-pe.ts MSYS DLL 补丁(把 KERNEL32/NTDLL 导入重定向到 IPC 代理)
src/workspace-preparation.ts Windows workspace ACL 前置(WRITE_OWNER)
src/workspace-preparation.ts → bin/prepare-workspace.ps1
scripts/provision-bash.mjs 安装固定版本的上游 bash(Git for Windows PortableGit)
scripts/build-bash-ipc.mjs 构建 Windows 受限模式所需 IPC 代理(需要 MSVC)
scripts/validate-manifest.mjs 官方 manifest 解析器 + 本仓库事实一致性检查
scripts/verify-install.mjs 检查某个 profile 里的安装状态
bin/dsh-bash.mjs status / provision / build-ipc 运维命令
test/ 10 个套件(见下表)
.github/workflows/ci.yml ubuntu 上 build + lib 同步 + manifest + 套件 + 类型检查npm install --ignore-scripts
npm run build # src/ -> lib/(lib/ 已提交,供 git 安装直接用)
npm run validate:manifest
npm test # build + 全部 10 个套件
npm run verify # build + manifest + 套件
node test/run.mjs mount # 只跑文件名含 mount 的套件测试套件(一个进程一个套件,test/lib/harness.mjs 汇总,test/lib/host.mjs 提供 Cordis 形态的宿主替身):
套件 · 覆盖 · 用例 config · 默认值、未知键报错、旧 dsh-ops 键、类型/边界 · 13 resolution · 配置 → store → 包内 → PATH/常见路径的优先级、WSL 排除、POSIX 分支、永不抛异常 · 13 tool-contract · ops_bash 名称、参数表与执行器一致、输出 schema、resolve() 校验矩阵、渲染标记 · 19 execution · 真实命令、关闭的 stdin、script_path、workdir、超时杀进程树、取消、截断+spill、诊断、权限断言 · 18 mount · 真实 apply() 挂载:发布/撤销、升级审批拒绝、jobs 参数、deny-host-shell、幂等重算 · 17(1 跳过) policy · 路由提示词各分支、宿主 shell 拒绝理由 · 10 workdir · Windows/POSIX 锚定规则、/d/ 映射、跨盘拒绝、UNC、非法输入 · 13 restricted-ipc · 受限模式门槛、回执校验、私有运行时 PATH、重命名重试、隔离目录 · 11 provisioner · store 回执归属、预览/删除、selectBashRuntime、Git 探测 · 12 packaging · manifest/导出/bundle patch/提示词段/图标与语言文件一致性、零宿主值导入 · 18
本机实测(Windows 11 / Node 24.20 / DSH 0.2.1-rc.3):ALL SUITES PASSED: 10/10,共 144 个用例(1 个按平台跳过)。
真实宿主启动验证:用一个临时 profile(dsh --from-default-profile web)装上本包后启动 web 应用, --dump-config 里出现 # == dsh-bash → dsh-bash-shell 行,启动 stderr 无 did not activate 警告, 说明 Loader 能解析 bundle patch 并成功激活该行。
移植经验(踩过的坑):组件行入口不能导出一个普通函数当 Config。Loader 会把它当schemastery schema 调.validate,直接报Cannot read properties of undefined (reading 'validate')
并让整行激活失败。校验放在 apply() 里,未知键仍然报错。Windows 本身没有 POSIX bash,dsh-ops 的做法是钉住上游发行版并校验摘要。这个包保留了同一套机制:
node bin/dsh-bash.mjs provision # 下载并校验 PortableGit 2.56.0.2 -> %USERPROFILE%\.dsh\dsh-bash\shells\bash\2.56.0.2
node bin/dsh-bash.mjs status # 当前会跑哪个 bash、来源、受限模式兼容性解析顺序(src/shells/resolve.ts):
bashPath(不可用就报错,不会偷偷换一个 shell)/dsh-bash/shells/bash//bin/bash.exevendor/bash/-/ 或 @dsh-bash/bash-- 平台包allowSystemShellFallback: true 时才查 PATH 与常见安装位置(Windows 会主动排除 WSL 的 System32\bash.exe)POSIX 上直接用发行版自带的 bash(同样支持 bashPath 覆盖)。
danger-full-access 下任意被解析到的 bash 都能跑。受限模式在 Windows 上只跑固定版本的 MSYS: runtime/win32-x64/bash-ipc/provenance.json 必须存在,msys-2.0.dll 的摘要必须与回执一致, 两个 IPC 代理 DLL 会被逐字节校验后复制进 /dsh-bash/bash-ipc//。
构建这套代理需要 VS C++ 工具链:
$env:DSH_OPS_VCVARS64 = "C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
node bin/dsh-bash.mjs build-ipc没有回执时受限模式会明确拒绝并给出修复路径(本机就是这样:无 MSVC,status 显示 restricted modes: unavailable),不会退化为不受限执行。
cordis.patch.yml 里的 dsh-bash-shell 行:
键 · 默认 · 说明 bashPath · — · 绝对路径;设置后以它为准,不可用即报错 publishBashTool · true · 是否发布 ops_bash shellPolicy · advise · deny-host-shell 会隐藏并拒绝宿主 bash/pwsh/pwsh_persistent deniedHostTools · 上述三个 · deny-host-shell 的拒绝清单 promptPolicy · true · 是否发布 shell 路由提示词段 extraGuidance · "" · 追加到提示词段的说明 allowSystemShellFallback · false · 是否允许回落到系统 bash(仅 Windows 需要显式打开)
serverName / enableShellTools / toolCallTimeoutMs 是 dsh-ops 旧行遗留键:接受并忽略,便于直接从 dsh-ops 行复制配置。
仓库地址:。lib/ 已随仓库提交,所以从 git 安装不需要本地 TypeScript。
# 桌面端必须用应用自带的 CLI
& "<安装目录>\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add github:null0xfff/dsh-bash
# 或者用 npm 包(发布后)
& "<安装目录>\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add dsh-bash安装后装一次钉住的 bash 载荷,然后重启应用(或让插件管理器重载 profile):
node bin/dsh-bash.mjs provision
node bin/dsh-bash.mjs status本机 dsh plugin ... add 被无关依赖挡住:dsh-purge 的 GitHub 归档摘要与 lockfile 不一致 (ERR_PNPM_TARBALL_INTEGRITY),pnpm 拒绝继续,与本插件无关。等价的手工安装步骤:
\profiles\desktop\node_modules\dsh-bash;package.json 的依赖写 "dsh-bash": "github:null0xfff/dsh-bash"(本机已如此);"dsh-bash" 出现在 dsh.profile.bundles;ops_bash 才会出现在工具表里。上述 git 安装路径已在临时 profile 上实测通过:dsh plugin --profile add github:null0xfff/dsh-bash 装好后启动 web 应用,stderr 无激活警告,行 dsh-bash-shell 正常挂载。
安装状态可随时自检(只读,不启动应用):
node scripts/verify-install.mjs desktop
# package/dependency/bundle row/bash/source/restricted 六项,附结论修好 dsh-purge 的摘要问题后,标准命令即可原样接管这套依赖与 bundles 配置。
DSH_HOME 子目录都是 dsh-bash,与 dsh-ops 并存不冲突(互不读取对方的 store)。ctx.get('result') 之类服务完全不需要。ops_bash 与宿主 pwsh,不再包含 ops_* 文件工具表格。dfafddc(MIT,Copyright (c) 2026 T-Auto and the dsh-ops contributors),原文见 licenses/dsh-ops-LICENSE;逐文件对应与改动见 docs/PROVENANCE.md。src/shells/host-tool.ts、src/shells/host-contract.ts、src/shells/approval.ts 另改编自 @deepseek-ai/dsh-tool-bash 0.2.0-rc.2(MIT,Copyright (c) 2026 DeepSeek),原文见 licenses/deepseek-harness/LICENSE。LICENSE 保留上述版权行,第三方声明汇总在 NOTICE。native/bash-ipc/*.cpp 为 dsh-ops 原创 MIT 代码。