DSH Default Overrides
为 DeepSeek Harness(DSH)的 standard 预设做可配置覆盖:选择 Bash / PowerShell 执行通道,并按需禁用预设行、固定 persona、隐藏框架身份说明。所有改动都只作用于内存中的预设配置,不修改 DSH 安装包。
四种 Shell 模式复用宿主官方执行器与工具;其余选项通过行补丁改写官方 standard 预设。这是通过 npm 安装的 DSH bundle 插件:源码直接运行,无需编译或安装脚本,DSH 从 package.json 的 dsh.bundle.patch 读取插件补丁,自动完成插件插入与 ready 接线。
功能范围
- 四种 Shell 模式,每次只向模型暴露所选方言的一个 Shell 工具。
- 两条可执行文件路径可以同时保留;显式路径会传给对应后端,路径无效直接报错。
- 模型说明与工具参数一致,补充当前方言及禁止套用其他 Shell 的操作规则。
- 通过
disabledTools按行 ID 禁用standard中的任意插件行。 - 通过
persona固定或替换standard的 persona 文本,其余标准指引与运行时上下文照常组装。 - 通过
includeHarnessIdentity隐藏全局harness:identity段,只去掉一句框架身份说明。 - 通过
normalizeWindowsPaths在命令进入 Bash 前把 Windows 反斜杠路径改写为正斜杠。 - 通过内存补丁调整官方
standard预设,保留minimal和其他预设。
未配置任何选项时,本插件不改变官方预设:不切换 Shell、不禁用任何工具行、不改 persona,也不隐藏身份段。
shellMode |
使用的路径 | 模型工具 | 状态 |
|---|---|---|---|
bash |
bashPath |
bash |
每次新 Shell |
persistent-bash |
bashPath |
bash |
目录、变量、函数跨调用保留 |
pwsh |
pwshPath |
pwsh |
每次新 Shell |
persistent-pwsh |
pwshPath |
pwsh |
目录、变量、函数跨调用保留 |
一次性工具必填 command、description,支持 workdir、timeoutMs、run_in_background;持久化工具仅接受 command。
环境要求
- Node.js
>=24.15.0,本机验证版本为24.15.0。 - DSH
0.1.7-rc.1,目标 profile 包含官方standard预设,例如web。 - 安装插件的 DSH CLI 需要 PATH 中有
pnpm。 - 当前面向
danger-full-access使用场景。
清单通过可选 peer 声明 DSH 精确版本,供宿主兼容性检查使用;可选标记避免包管理器自动安装另一套 DSH。升级宿主前需要重跑验证并更新此声明。源码通过宿主 Loader 解析官方包,没有独立运行依赖。
安装
web 替换为实际使用的 profile。首次安装会把 bundle 自动加入该 profile 的 dsh.profile.bundles:
dsh plugin --profile web add dsh-default-overrides
需要固定版本时在包名后追加 @版本。也可在 DSH 插件管理器中安装相同包规格。包内只有可直接加载的源码,没有 prepare / postinstall 脚本,无需批准本插件的依赖构建。
安装后完整重启 DSH,再新建 standard 会话。默认不改变官方预设:既不切换 Shell,也不禁用工具行、不改 persona、不隐藏身份段,需要哪些行为就在 profile 补丁里显式配置。
自定义 profile 的 bundle 顺序必须让本插件位于提供 preset-standard 的 bundle 之后;正常 web profile 安装会自动追加。已有文件 URL 部署请先按迁移说明移除旧插入行,避免重复实例。
配置
将配置合并到实际 profile 的 cordis.patch.yml(位置为 $DSH_HOME/profiles/<profile>/cordis.patch.yml)。这里只覆盖 bundle 已创建的条目,不使用 insert。下面列出全部配置面,按需删减,未写出的选项保持默认;Windows 路径示例见 examples/cordis.patch.yml。
- id: local-dsh-default-overrides
config:
shellMode: persistent-bash
bashPath: /bin/bash
timeoutMs: 300000
envContext: true
disabledTools:
- tool-web
- tool-workflow
persona:
prefix: 'You are a helpful software engineer assistant.'
includeHarnessIdentity: false
normalizeWindowsPaths: true
Windows 可将 bashPath 设置为 'C:/Program Files/Git/bin/bash.exe',并同时保留 pwshPath: 'C:/Program Files/PowerShell/7/pwsh.exe'。切换时只修改 shellMode。DSH 对匹配行的 config 做整体替换,因此要保留仍需使用的配置字段。
| 字段 | 默认值 | 说明 |
|---|---|---|
shellMode |
未设置 | 四种取值见上表;不设置时保留官方 Shell 选择 |
disabledTools |
[] |
standard 预设中要禁用的行 ID 数组;ID 不存在时直接报错。不设置时不禁用任何行 |
persona |
未设置 | 覆盖 standard 的 persona 行,字段见下。不设置时不修改 persona |
includeHarnessIdentity |
未设置 | 是否保留 harness:identity 段(You are an AI agent powered by DeepSeek Harness.)。不设置时不修改;false 隐藏该句 |
normalizeWindowsPaths |
false |
仅 Bash 两模式:命令进入 bash 前把 C:\a\b 改写成 C:/a/b。设到其他模式会报错 |
bashPath |
未设置 | Bash 两模式必填,必须是存在的绝对文件路径 |
pwshPath |
未设置 | 建议显式填写以固定版本;未填写时委托官方 PowerShell 探测 |
timeoutMs |
300000 |
正整数。持久化模式为命令截止时间;一次性模式沿用官方等待、后台处理与上限 |
envContext |
true |
是否向模型添加模式、配置路径和会话工作区;关闭后仍保留工具操作规则 |
disabledTools 按 standard 预设的行 ID 生效,包含分组内的行。常用 ID 有 tool-web、tool-workflow、tool-ralph、skill-filesystem;完整列表见安装中 @deepseek-ai/dsh-web-app/presets/standard.patch.yml 的 config.plugins。本插件只做 disabled: true,不改变这些行的其他配置。
persona 覆盖官方 persona 行(@deepseek-ai/dsh-persona),可写字段与该插件的 schema 一致:
persona 字段 |
默认值 | 说明 |
|---|---|---|
prefix |
保留官方值 | persona 前缀正文,也就是模型的身份说明 |
suffix |
保留官方值 | persona 后缀;官方值是 Your working directory is {{cwd}}. |
complete |
false |
写 true 会把 prefix 变成整个系统提示词,抑制 suffix 与所有其他段落 |
includeRuntimeContext |
true |
写 false 会抑制该 agent 作用域的运行时上下文快照 |
行补丁整体替换 config,本插件先展开当前有效配置再覆盖你写出的字段,因此未写的字段(例如官方 suffix)会保留。complete 与 includeRuntimeContext 即使未写也会显式落成上表默认值,避免上游把提示词锁成单句。字段内的 {{...}} 按宿主已注册的变量严格插值,变量不存在会让组装报错。persona 至少写一个字段,键名或类型写错会在启动时直接报错。
includeHarnessIdentity 作用于全局 system-prompt 行(dsh-base 声明),而不是 standard 预设的 persona 行,因此影响该 profile 的所有预设与会话。写 false 只让模型少收到 harness:identity 这一段 You are an AI agent powered by DeepSeek Harness.,模型与 API、工具注册、Shell、团队/Goal/Workflow、沙箱与审批都不受影响;计划模式指引、工具说明、persona 与运行时上下文照常组装。本插件复用宿主 @deepseek-ai/dsh-system-prompt 的官方开关,不新造隐藏机制。
该选项要生效,全局 system-prompt 行必须在插件就绪后再解析配置,因此 bundle 补丁为该行添加了 dshDefaultOverridesReady 等待。用户层若覆盖了该行的 inject,同样要保留这个信号。不使用该选项时这条等待仍然存在,代价只是启动顺序上的一次等待。
normalizeWindowsPaths 解决 Windows 上 Bash 把反斜杠当转义符吃掉的问题:cd C:\Users\me 在 bash 里会变成 cd C:Usersme 而失败。开启后,C:\a\b 会在命令进入 bash 之前被改写成 C:/a/b,一次性与持久化两种 Bash 模式都生效:
- 只改写盘符开头的路径段;引号内的路径(含空格)一路改写到配对引号;
sed 's/\\d//'、"a\tb"这类正则与转义里的反斜杠不受影响。 - UNC 路径(
\\server\share)不在覆盖范围;若某条命令需要把 Windows 反斜杠路径当字面量传给只认反斜杠的原生程序(例如robocopy),改写会改变它的含义,这类命令请关闭该选项或改用该程序可接受的写法。 - 持久化模式通过给
dsh-terminal-bash传官方shellArgs、用--rcfile加载一个垫片实现(写在系统临时目录dsh-default-overrides-bashrc.sh,每次启动重新生成)。垫片只在命令里出现X:\时才启动 node 做改写,其他命令原样透传。 - 该改写依赖宿主持久化工具仍以
eval --包装命令;宿主改版后垫片可能静默失效——命令照常执行,只是不再改写。
工具说明与 command 参数说明里也写明了“不要使用反斜杠、含空格的路径要加引号”,与上面的确定性改写互为补充。
只验证和使用当前模式对应的路径。一次性工具的前台等待超时可能将命令转为后台任务,并不等于杀死进程。配置后使用新会话验收,旧会话可能保留旧预设和 Shell 状态。
bundle 已为 preset-standard 添加 dshDefaultOverridesReady。如果用户层或其他 bundle 覆盖了该行的 inject,必须把这个信号与其他依赖一起保留;不能把它加在 agent-preset-registry 上。插件暂未导出设置表单 schema,使用上述 YAML 配置。
旧 shellPath 和 blockNestedShells: true 的迁移见迁移说明。插件不修改宿主 PATH,也不强制阻断任意脚本启动其他 Shell。
更新、停用与文件部署
- 更新时对同一 profile 执行
add并指定新版本,然后完整重启 DSH。 - 在插件管理器中以整个 bundle为单位停用;仅禁用主插件行会让
standard等不到 ready。卸载可执行dsh plugin --profile web remove dsh-default-overrides。 - 停用或卸载时,删除用户层针对
local-dsh-default-overrides的配置;若旧部署手工添加过 ready 依赖,也要仅移除该依赖并保留其他依赖。 - 仍支持直接文件部署,使用 examples/file.cordis.patch.yml,同时部署主插件和同目录适配器。文件入口与 bundle 二选一。
验证
无须在本仓库安装依赖。先运行语法检查:
npm run check
分发验证指定已安装 DSH 的主包目录和实际 Bash 路径;该主包目录应包含 DSH 自身的清单:
npm run verify:package -- \
'/absolute/path/to/node_modules/@deepseek-ai/dsh' \
'/bin/bash'
分发验证脚本打出真实 npm tarball,在临时 DSH_HOME 中调用 DSH CLI 离线安装,检查 bundle 自动选择、profile 覆盖、包导入与 ready 顺序,然后从安装产物运行现有运行验证。不启动完整宿主,也不修改现用 profile。
只验证工作树中的运行源码时使用 npm run verify -- <DSH-installation> <bash-path> [pwsh-path]。两个验证命令都可追加真实 PowerShell 路径,例如:
npm run verify:package -- `
'C:/actual/node_modules/@deepseek-ai/dsh' `
'C:/Program Files/Git/bin/bash.exe' `
'C:/Program Files/PowerShell/7/pwsh.exe'
运行验证覆盖四模式注册与路径传递、工具参数与提示、persona 与 harness:identity 的真实提示词组装、预设范围、ready 重载、Bash 真进程、持久化 PTY、状态/退出码、后台失败与取消。未提供 PowerShell 路径时只检查 Pwsh 注册与启动参数,并明确跳过实跑。
已验证边界
本机验证环境为 macOS、Node.js 24.15.0、DSH 0.1.7-rc.1。该 DSH 安装含既有 Bash marker 修复,本仓库不附带或修改宿主补丁,详见运行契约记录。
Windows Git Bash/ConPTY、PowerShell 真进程与完整 GUI/模型会话未在此环境实测。声明精确版本也不构成对未修改 DSH 安装的完整兼容证明。
参考
分发设计见bundle 决定,迁入依据见独立仓库决定。实现参考 router-standard 和 dsh-win32,执行契约以实际安装的 DSH 为准。
许可证
本仓库代码采用 MIT License。DSH 及其他外部项目遵循各自的许可证。
No comments yet. Be the first to write one.