dsh-system-prompt-studio
Verifieddsh-system-prompt-studio · v0.2.1 · MIT · Web UI
Inspect the system prompt DSH actually assembles and edit individual sections or runtime contexts by name.
Install
dsh plugin add dsh-system-prompt-studio 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
Readme
dsh-system-prompt-studio
为 DeepSeek Harness(DSH)提供 System Prompt 检查与逐段编辑能力。
插件监听 DSH 的 system-prompt/assemble 组装结果,把实际参与组装的 sections 和 contexts 按名称展示出来。你可以直接编辑某一段的文本并保存,插件会在下一次组装时按名称覆盖对应段落。
功能
- 查看 DSH 实际组装的 System Prompt,而不是重新拼一份近似文本。
- 按名称编辑单个 section 或 context。
- 设置页提供完整 Prompt 预览、当前版本/无覆盖版本切换、复制。
- 支持按名称或内容筛选、展开/收起、批量保存。
- 支持恢复单个段落或全部恢复默认。
- 输入框左侧状态胶囊显示覆盖数量,点击可恢复全部默认。
- 覆盖内容持久化到磁盘,重启 DSH 后仍然生效。
- 原子写入,单次覆盖数据上限 16 MiB。
- 自动记录最近最多 8 个组装目标,按时间排序展示。
工作方式
插件注册一个 system-prompt/assemble waterfall 监听器:
- 先调用
next()取得 DSH 原生组装结果。 - 按名称应用
sections/contexts覆盖。 - 把当前结果和未覆盖版本保存在内存快照中,供设置页预览。
- 返回覆盖后的组装结果。
覆盖项的文本会以 interpolate: false 注入,因此保存后是固定文本,不会再次展开 {{变量}}。编辑动态段落前请确认是否要固定当前值。
设置页的“完整 Prompt”使用 DSH 的最终组装结果,反映 DSH 在 waterfall 之后的处理。contexts 是独立注入的运行时消息,不包含在这段 sections 预览中。
安装
npm
dsh plugin --profile <profile> add dsh-system-prompt-studio
安装后完全退出并重新启动 DSH。
本地开发或验证
开发或验证时建议使用非 desktop 的自定义 profile,例如:
dsh plugin --profile spsweb add "link:C:/path/to/dsh-system-prompt-studio"
dsh --profile spsweb --dump-config
dsh --profile spsweb web
--dump-config 应能看到 dsh-system-prompt-studio 条目。
desktop profile
DSH desktop 的 profile 由 Electron 应用管理,dsh --profile desktop --dump-config 会被拒绝。安装到 desktop 时:
- 优先使用 DSH 设置里的插件管理界面安装本地插件。
- 安装后完全退出并重新启动 DSH。
- 如果手动编辑 profile,确保
package.json的dependencies和dsh.profile.bundles都包含本插件。 cordis.patch.yml中不能把本插件设为disabled: true。
不要只添加依赖而忘记 bundle 注册;两者缺一都不会加载插件。
使用
打开 DSH 设置,左侧会出现 System Prompt 分区;对话输入框左侧会出现 System Prompt 状态 胶囊。
编辑目标
“编辑目标”下拉框列出:
全局:没有绑定具体 agent 的组装结果。会话 …:DSH 当前 agent 的组装结果。- 其它已捕获的作用域快照。
目标只决定设置页读取哪一份组装结果。覆盖文件按 section/context 名称生效,不按目标隔离;同一个名称的覆盖会影响所有使用该名称的组装结果。
全局目标没有具体 agent,因此 {{model}} 等由 agent 提供的变量可能保持原样。选择会话目标后,这些变量会显示为实际值。
Sections 和 Contexts
- 分段:按 DSH 最终组装顺序列出 section,修改后覆盖对应名称的段落。
- 上下文:列出运行时 context,单独保存,不会混入 sections 文本。
点击条目展开编辑。折叠时显示只读预览。动态段落会显示“动态”标记;保存后固定为当前文本。
保存与恢复
- 保存本节:只保存当前段落的修改。
- 固定当前值:把动态段落当前渲染出的文本保存为固定文本。
- 保存全部修改:批量保存当前所有未保存修改。
- 恢复默认:删除当前段落的覆盖。
- 恢复全部默认:清空整个覆盖文件。
“无覆盖版本”显示同一段落未应用覆盖时的文本,便于对照。
覆盖文件按名称匹配
覆盖只对当前组装结果中存在的同名 section/context 生效。旧的、已不存在的名称不会报错,但也不会生效,可用“恢复全部默认”清理。
数据文件
默认路径:
%USERPROFILE%\.dsh\system-prompt-studio\overrides.json
如果设置了环境变量:
DSH_HOME:使用%DSH_HOME%\system-prompt-studio\overrides.jsonDSH_PROFILE_DIR:使用%DSH_PROFILE_DIR%\system-prompt-studio\overrides.json
也可以在插件配置中指定:
- id: dsh-system-prompt-studio
config:
home: C:/path/to/state
overridesFile: overrides.json
routePath: /dsh-system-prompt-studio/api
overridesFile 为相对路径时相对于 home。
文件结构:
{
"version": 1,
"sections": {
"deployment:persona-prefix": "固定文本"
},
"contexts": {
"some:context": "固定文本"
}
}
写入使用临时文件加同目录原子替换;Windows 上遇到文件占用会有限重试。文件权限为 0600。
v0.1 的 prompt.txt / state.json 不会被自动读取或迁移;升级后需要在新的编辑器中重新保存。插件不会删除旧文件。
HTTP API
Web 服务注册路径:
/dsh-system-prompt-studio/api
读操作使用 GET,写操作使用 POST + JSON。服务端会拒绝跨域 Origin。
| 方法 | action | 说明 |
|---|---|---|
| GET | status |
覆盖数量、文件路径、错误、载入时间、字节数 |
| GET | overview&target=... |
目标、sections、contexts、当前/无覆盖 Prompt、存储状态 |
| POST | save |
{ "sections": {}, "contexts": {}, "resetSections": [], "resetContexts": [] } |
| POST | reset |
{ "kind": "section" | "context", "name": "..." } |
| POST | resetAll |
清空全部覆盖 |
示例:
curl.exe "http://127.0.0.1:3191/dsh-system-prompt-studio/api?action=status"
curl.exe "http://127.0.0.1:3191/dsh-system-prompt-studio/api?action=overview"
curl.exe -X POST -H "Content-Type: application/json" -d "{\"sections\":{\"deployment:persona-suffix\":\"固定文本\"}}" "http://127.0.0.1:3191/dsh-system-prompt-studio/api?action=save"
端口以 DSH 实际监听端口为准。
兼容性与限制
- 面向 DSH
0.2.x的 Cordis 插件接口,使用ctx.on('system-prompt/assemble')、ctx.systemPrompt、ctx.agents与ctx.webServer.register()。 - 覆盖文件是全局按名称生效的,不区分 agent。需要为不同 agent 使用不同文本时,请避免使用同名 section,或在 DSH 侧使用独立 section 名称。
- 如果其它插件声明了
completesection,DSH 会在 waterfall 之后恢复该 complete section。此时设置页显示最终结果,但对 section 的覆盖不会改变该 complete section;contexts 覆盖仍可生效。不要让多个插件同时声明 complete section。 - 动态变量由 DSH 的变量提供方解析;没有具体 agent 时,部分变量没有值,预览中会保留原样。
- 保存固定文本后不再随变量变化;这是有意的编辑行为。
- 覆盖内容由用户自行负责;插件只做读取、展示、存储和覆盖。
开发
node --check lib\index.js
node --check lib\client.js
node test\host-test.mjs
测试使用模拟的 Cordis context、systemPrompt、agents 和 webServer,不依赖正在运行的 DSH。
License
MIT