Skip to content

dsh-system-prompt-studio

Verified

dsh-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 监听器:

  1. 先调用 next() 取得 DSH 原生组装结果。
  2. 按名称应用 sections / contexts 覆盖。
  3. 把当前结果和未覆盖版本保存在内存快照中,供设置页预览。
  4. 返回覆盖后的组装结果。

覆盖项的文本会以 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 时:

  1. 优先使用 DSH 设置里的插件管理界面安装本地插件。
  2. 安装后完全退出并重新启动 DSH。
  3. 如果手动编辑 profile,确保 package.json 的 dependencies 和 dsh.profile.bundles 都包含本插件。
  4. 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.json
  • DSH_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 名称。
  • 如果其它插件声明了 complete section,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