dsh-default-overrides
Verifieddsh-default-overrides · v0.3.6 · MIT
Configurable Bash and PowerShell overrides for the DSH standard preset.
Install
dsh plugin add dsh-default-overrides Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
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 工具。
bashPath与pwshPath都可省略:显式路径会传给对应后端并在无效时报错,省略则用官方默认。- 模型说明与工具参数一致,补充当前方言及禁止套用其他 Shell 的操作规则。
- 通过
disabledTools按行 ID 禁用standard中的任意插件行。 - 通过
persona固定或替换 persona 文本,其余标准指引与运行时上下文照常组装;personaPresets决定这份人设作用于哪些预设(默认只有standard)。 - 通过
includeHarnessIdentity隐藏全局harness:identity段,只去掉一句框架身份说明。 - 通过
envContext补充环境事实段:平台与工作区对 profile 内每个预设的 agent 都给出,Shell 通道细节只在插件确实配置过该预设时给出。 - 通过
normalizeWindowsPaths在命令进入 Bash 前把 Windows 反斜杠路径改写为正斜杠。 - 通过内存补丁调整官方
standard预设的行(Shell、禁用清单),以及personaPresets列出的每个预设的 persona 行,保留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;插件不声明engines,不做版本拦截。 - DSH:验证基线为
0.1.7-rc.1与0.1.7-rc.2,目标 profile 需包含官方standard预设(例如web)。 - 安装插件的 DSH CLI 需要 PATH 中有
pnpm。 - 当前面向
danger-full-access使用场景。
插件不声明任何版本约束(没有 peerDependencies、没有 engines),因此宿主的兼容性检查与包管理器的引擎校验都不会拦截安装。代价是兼容性不再由安装环节把关:升级 DSH 或 Node 后请重跑验证,由验证结果判断是否仍兼容。源码通过宿主 Loader 解析官方包,不复制或另装一套 DSH 依赖。
安装
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: persistent-bash 时会用官方默认终端(/bin/bash)启动持久化会话;persistent-pwsh 省略 pwshPath 时由官方探测 PowerShell。一次性模式省略 bashPath 且未开启 normalizeWindowsPaths 时,插件完全不改官方 Shell 行,等于官方默认行为(Windows 上官方默认给出的是 pwsh);省略 bashPath 但需要路径改写时,改写走官方默认的 bash -c。
Shell 补丁、行补丁与提示词平面三者互不牵连:行补丁只作用于官方 standard 预设(它是本插件声明兼容的结构基线),而提示词平面不按预设名过滤——环境事实段对 profile 内每个预设的 agent 都贡献,只是只有被行补丁配置过的预设才声明 Shell 通道并补充工具说明。这样:
- 未接管通道时(含一次性 bash 无路径回退到官方行)只声明平台、会话工作区,以及"通道由当前预设或宿主默认提供、本插件未配置",不会在 Windows 回退到官方 pwsh 时被误标成 bash,也不会声称本插件的
timeoutMs生效。 minimal、ptc或自定义预设的会话照样拿到平台与工作区事实,但不会被塞进本插件配置的方言说明(那些预设的 Shell 由它们自己的行决定)。
| 字段 | 默认值 | 说明 |
|---|---|---|
shellMode |
未设置 | 四种取值见上表;不设置时保留官方 Shell 选择 |
disabledTools |
[] |
standard 预设中要禁用的行 ID 数组;ID 不存在时直接报错。不设置时不禁用任何行 |
persona |
未设置 | 覆盖 persona 行,字段见下。不设置时不修改 persona |
personaPresets |
['standard'] |
哪些预设的 persona 行接受上面的 persona 覆盖。只放宽 persona 行:Shell 与 disabledTools 仍只作用于 standard。必须与 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 可执行文件(Windows 上通常要指向 Git Bash);省略时持久化模式用官方默认 /bin/bash,一次性模式在无需改写时保持官方行不动 |
pwshPath |
未设置 | 可选。建议显式填写以固定版本;省略时委托官方 PowerShell 探测 |
timeoutMs |
300000 |
正整数。持久化模式为命令截止时间;一次性模式沿用官方等待、后台处理与上限 |
envContext |
未设置(选了 shellMode 时按 true) |
是否向模型添加环境事实段:平台与工作区对每个预设都给出,Shell 通道细节(模式、可执行文件、参数语义、截止时间)只在行补丁确实配置过该预设时给出。显式写 true 时即使未配置 Shell 也会贡献平台与工作区;显式写 false 不贡献该段但仍保留工具操作规则;什么都不配置时本插件零影响 |
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 至少写一个字段,键名或类型写错会在启动时直接报错。
personaPresets 让同一份人设覆盖多个同构预设(官方 standard、ptc、cordis 的 persona 行结构一致)。写出 ptc 或 cordis 不会带来 standard 的 Shell 覆盖与行 ID 清单,那些改动仍只作用于 standard。刻意排除 minimal:它的 persona 行是 complete: true + includeRuntimeContext: false,而本插件会显式写入 complete: false + includeRuntimeContext: true,列进去等于把它从单句提示词改回普通会话。列出的预设若被上游改了 persona 行结构,启动时直接报错;写错预设 id 不会报错(宿主不提供可枚举的预设清单),只是那个预设静默拿不到人设。
行补丁在 internal/config 阶段生效,因此被列出的预设行必须先等到本插件就绪。bundle 补丁已为 preset-standard、preset-ptc、preset-cordis、preset-minimal 各加一条 dshDefaultOverridesReady;若把自建预设列进 personaPresets,要自己在那条行上补同样的 inject,否则插件钩子尚未注册、该预设的 config 已经解析完,补丁会被静默丢弃。
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 的真实提示词组装、personaPresets 的跨预设生效与未列出预设的默认保留、环境事实段在每种 shellMode × envContext 组合下的文本与工具表、预设范围、ready 重载、Bash 真进程、持久化 PTY、状态/退出码、后台失败与取消。未提供 PowerShell 路径时只检查 Pwsh 注册与启动参数,并明确跳过实跑。
已验证边界
本机验证环境为 macOS、Node.js 24.15.0、DSH 0.1.7-rc.2。该 DSH 安装含既有 Bash marker 修复,本仓库不附带或修改宿主补丁,详见运行契约记录。
Windows Git Bash/ConPTY、PowerShell 真进程与完整 GUI/模型会话未在此环境实测。由于插件不声明版本约束,验证通过也不构成对未修改 DSH 安装或其他 DSH/Node 版本的兼容承诺。
参考
分发设计见bundle 决定,迁入依据见独立仓库决定,跨预设人设的作用范围见 persona 跨预设。实现参考 router-standard 和 dsh-win32,执行契约以实际安装的 DSH 为准。
许可证
本仓库代码采用 MIT License。DSH 及其他外部项目遵循各自的许可证。