dsh-nushell
English | 中文
dsh-nushell 是一个 DeepSeek Harness Web Profile Bundle,在默认 standard Agent preset 中用 Nushell 执行 DSH 内置的 bash 工具。
面向模型的工具名称和参数仍保持为 bash,但命令会以 nu --no-config-file -c <command> 运行。用户的 config.nu 和 env.nu 不会影响工具调用;后台任务、权限审批、沙箱、超时和输出处理继续使用 DSH 的原有机制。
前置条件
- 适配 DSH
0.2 系列(以下载的 0.2.1-alpha.1 源码为基准),并使用 Node.js >=22.19.0。
- 已安装 Nushell,并能通过
PATH 中的 nu 调用。若需使用其他位置的可执行文件,请在启动 DSH 前将 DSH_NU_PATH 设置为其绝对路径。
安装
dsh plugin --profile web add dsh-nushell
安装后重启 Web Profile,并新建一个使用 standard preset 的会话。已有会话可能继续保留旧 preset 的配置。
插件读取当前已安装的 standard preset 配置,只替换 Bash/PowerShell 工具,并将 Nushell 执行器放入独立的 shell 隔离域。其他 preset 不受影响;原 preset-standard 配置仍是来源,应保持禁用,由 nushell-standard 负责注册。修改来源配置后重启 Profile。
本地开发与测试
先安装依赖并构建:
pnpm install
pnpm run typecheck
pnpm test
pnpm run test:smoke
生成引用本机构建产物绝对路径的补丁:
pnpm run patch:local
该命令从 cordis.patch.yml 生成未纳入 Git 的 cordis.patch.local.yml,并将 preset 适配器替换为本机 dist/preset.js 的绝对 file:/// 路径。适配器使用同目录的 sandbox.js 和 tool.js。
使用该补丁启动 DSH:
dsh web --patch ./cordis.patch.local.yml
修改源码后,先重新构建,再运行 pnpm run patch:local。
使用方式
工具仍叫 bash,但必须编写 Nushell 语法:
ls | where type == file | get name
open package.json | get name
$env.DSH_WEB_URL
后台执行使用 run_in_background,通过 job_output 收集输出、job_kill 停止任务。默认情况下,有后台任务服务时,前台命令达到超时会转为后台任务;工具配置 promoteOnTimeout: false 可改为超时终止。缺少后台任务服务时会按超时终止。
每次调用都会创建新的 Nushell 进程。请使用工具的 workdir 参数,不要依赖前一次调用的 cd 状态。
限制
- Shell 状态、别名和变量不会在工具调用之间持久化。
- 为了兼容性,公开工具名仍是
bash;插件自己的 consumer 会将其描述和系统提示固定为 Nushell 语义。
- 执行器将隔离委托给 DSH 沙箱,并按当前 runner 的拒绝特征分类文件访问拒绝和 runner 故障。
- 默认补丁面向 Web 的
standard preset;其他 preset 需要单独配置。