dsh-system-prompt
在 DSH → 设置 → 系统提示词 里直接编辑并替换每个会话的系统提示词;点「重置」恢复默认。 不追加、不叠加,就是替换本身。
English: Edits the actual system prompt in DSH Settings. The saved text replaces the assembled prompt for every session from the next model request; Reset restores the default prompt.
MIT · DSH 0.2.2-rc.1 · Node ≥ 24 · 21 tests passing
仓库:https://github.com/HuiHuanYe/dsh-system-prompt
行为
| 操作 | 行为 |
|---|---|
| 打开设置页 | 编辑框显示当前系统提示词(默认内容来自最近一次真实请求的装配缓存,可整体编辑) |
| 保存 | 文本写入 $DSH_HOME/custom-system-prompt.md,从下一个模型请求起整体替换系统提示词,无需重启 |
| 重置 | 删除保存文件,系统提示词恢复默认;编辑框同步变回默认内容 |
| 不保存 | 插件不注册任何提示词内容,对默认行为零影响 |
| 实时反馈 | 使用默认/已启用、未保存修改、字节数(上限 256 KiB)、读取/保存失败原因 |
替换机制
- 在
system-prompt/assemble上注册**最外层(prepend)**监听:先让其余装配链跑完,再在存在保存内容时把sections换成单个字面段。agent-loop 的step()正是对装配结果调用renderPrompt(),所以替换后的段就是模型收到的系统提示词。 - 工具声明由框架单独发送,替换后工具仍然可用。
- runtime context(工作目录、沙箱、审批策略等)不属于系统提示词文本,框架仍会照常提供。
- 代价:保存替换后,内置提示词段不再出现,包括 Harness 身份、部署人设、plan/team 策略、工具使用说明与工具 SDK、环境说明等。替换文本需要自带你依赖的全部约束。
- 不会把默认提示词注入到替换文本里:编辑框里的默认内容只是编辑起点,保存的是你最终看到的文本。
存储
$DSH_HOME/custom-system-prompt.md # 未设置 DSH_HOME 时回退到 ~/.dsh
- 文件由插件读写;直接编辑该文件也会在下一个请求生效。
- BOM、CRLF、首尾空白会被规范化;按 UTF-8 上限 256 KiB 截断,且不切开多字节字符。
- 保存空/纯空白 = 删除文件 = 恢复默认。
- 保存请求的 JSON 转义可能把体积放大到 6 倍,请求体上限据此放宽;解码后的文本仍按 256 KiB 校验。
使用
- 打开 设置 → 系统提示词,编辑框里是当前的系统提示词。
- 修改后点「保存」。状态变成“已保存 · 下一个请求起生效”,从下一条消息开始所有会话都使用这份文本。
- 想回到框架默认内容,点「重置」。
替换立即影响所有会话(包括当前会话)的下一个模型请求。若是想“在默认提示词之外补充几句”, 请把默认内容一起保留在替换文本里,或改用追加式的插件。
安装
git clone https://github.com/HuiHuanYe/dsh-system-prompt.git
- 在 DSH → 设置 → 插件 → 从目录安装 中选择该目录;CLI profile 也可
dsh plugin --profile <name> add 'link:<绝对路径>'(桌面 profile 由 Electron 独占管理,请用插件页)。 - 或直接安装仓库:
dsh plugin --profile <name> add github:HuiHuanYe/dsh-system-prompt。 - 安装后若未热加载,重启一次 DSH 即可(已安装插件换新代码不会热替换模块)。
- 卸载:插件页移除 Bundle,再按需删除
$DSH_HOME/custom-system-prompt.md。
本地开发接线
本地目录安装是链接(junction)到仓库;开发时的 package.json 依赖与 bundle 选择形如:
"dependencies": { "dsh-system-prompt": "link:D:/path/to/dsh-system-prompt" },
"dsh": { "profile": { "bundles": [ "…", "dsh-system-prompt" ] } }
行 id 必须全局唯一
cordis.patch.yml 里的 id: custom-system-prompt 是 Loader 的行 id,不能与任何已存在的行 id 重复:Loader 按 id 覆盖(后层替换前层),不是按 id 追加。
- 绝对不要用
system-prompt:那是内置核心行(@deepseek-ai/dsh-system-prompt,提供systemPrompt服务)的 id。复用它会把核心行整行替换成本插件,导致systemPrompt服务没有任何提供者,所有注入该服务的插件全部挂起,启动直接失败。 - 同理不要复用
tools、agent-loop等核心行 id;用本插件自己的命名空间前缀。
结构
dsh-system-prompt/
├── index.js Host 半:assemble 替换监听 + 默认提示词缓存 + GET/POST 路由
├── client.js Client 半:settings.section 页面(纯 JS + React,仅用主题 token)
├── cordis.patch.yml bundle 行(行 id 必须唯一)
├── package.json dsh.bundle.patch + dsh.client(web, immediately)
├── locale/{en,zh}.json 插件管理器展示标题/描述
├── icon.svg 图标
└── test/
├── host.test.mjs Host 契约:替换、缓存、路由、保存/重置、校验、失败策略
└── client-wiring.test.mjs Client 契约:注册、加载、保存、重置、失败与重试
开发与测试
node --check index.js
node --check client.js
node test/host.test.mjs
node test/client-wiring.test.mjs
- Host 测试 15 项、Client 测试 6 项(共 21 个用例),全部通过。
- 2026-11-11 已在真实 Host(desktop profile)上端到端验证:设置页注册(
registrant=dsh-system-prompt, id=system-prompt, order=18, active=true);写入替换文本后,下一个模型请求的系统提示词只剩替换文本(默认身份/人设/框架指令全部消失,工具仍可调用);删除文件后下一个请求恢复完整默认提示词。
兼容性
DSH 0.2.2-rc.1(已验证)· Node ≥ 24 · Windows 已实测。需要 systemPrompt、connection 两个 Host 服务;
无构建步骤、无运行时依赖。设置页外观在浅色/深色主题下尚未人工目视确认。
已知限制
- 替换会移除内置提示词段(含 plan/team 策略段);plan 模式、团队协作等行为约束需要在替换文本里自行保留。
- 编辑框的默认内容来自最近一次真实装配;不同 agent preset 的 scoped 段可能不同,页面打开时所显示的是“最近一次请求”的版本。
- 当前进程若仍加载旧模块(插件代码更新后未重启),页面行为不会更新,需重启应用与 Host。
许可证
MIT © 2026 dsh-system-prompt contributors
No comments yet. Be the first to write one.