WinRNGS/dsh-session-prompt-standalone

dsh-session-prompt-standalone

dsh的提示词注入

待分类

@dsh-external/dsh-session-prompt

为 DeepSeek Harness 提供提示词管理器。可管理自己的全局层与工作区层,完整查看 DSH 原件与最终装配文本;其他插件和 Agent 的提示词默认只读,经两次确认后可保存独立覆盖。

仓库已经包含编译后的 lib/,普通用户和安装 Agent 不需要准备开发环境,也不需要先执行构建。

0.5.0 需要宿主提供下文列出的官方提示词、Connection 与 Web 身份校验接口。DSH 0.1.0-rc.5 不受支持;若宿主缺少这些接口,请由用户或管理员决定升级到兼容宿主。本插件不会自动升级 DSH。

功能

  • 全局默认提示词与当前工作区提示词可以同时启用;
  • 每层可选择 System 或 User Context 身份;
  • 每层可独立设置启用状态和排序值;
  • 设置长期保存在 DSH 数据目录中,重启和上下文压缩后仍会重新装配;
  • 设置界面可预览当前会话的段落顺序、来源与最终文本;
  • 正式 Settings → 提示词管理器与输入栏快捷入口共用同一界面;
  • 高级覆盖可修改其他 System / User Context 段落、移除段落或调整最终位置,不改提供方源文件;
  • 高级编辑默认锁定,需先确认风险,再手动输入“解锁高级编辑”;这是防止误操作的编辑门槛,不是用户身份认证或模型安全沙箱。锁回及重启只限制编辑,已存覆盖继续生效;
  • 模型发起的修改必须经过 DSH 原生审批,不能静默改写设置;
  • 支持多 profile 并发保护、revision 冲突检测和外部文件热重载;
  • 提供版本化设置迁移、异常数据保护和恢复默认。

快速安装

方式一:直接从 Git 仓库安装

这是用户和安装 Agent 的推荐方式:

dsh plugin --profile web add "github:WinRNGS/dsh-session-prompt-standalone#main"

如果实际运行的是其他 profile,把 web 换成对应名称。安装完成后重启该 DSH profile。

方式二:下载后本地安装

gh repo clone WinRNGS/dsh-session-prompt-standalone
cd dsh-session-prompt-standalone
dsh plugin --profile web add .

Windows 上建议把仓库放在不含空格的目录中,以避开部分旧版 DSH CLI 转发本地路径时的参数解析问题。

方式三:安装打包文件

在仓库目录执行:

npm pack
dsh plugin --profile web add ./dsh-external-dsh-session-prompt-0.5.0.tgz

安装 Agent 可以直接执行方式一;若环境禁止 Git 依赖,则下载仓库后执行方式二。无需修改 DSH 源码或手工复制 lib/。

使用

打开 DSH Settings → 提示词管理器,或在会话输入栏右侧点击 提示词管理。设置页需要明确选择“查看的会话”;未选择时只显示全局与宿主预览。输入栏入口直接使用该会话。

在“我的提示词”中:

  1. 选择“全局默认”或“当前工作区”;
  2. 选择 System 或 User Context;
  3. 设置排序值、启用状态和正文;
  4. 保存,下一次模型请求生效;
  5. 展开装配预览,检查顺序、来源与最终文本。

“恢复默认”会恢复插件配置中的初始全局值;“移除覆盖”只删除当前工作区层。

在“其他 DSH 提示词”中,默认可只读查看每段名称、来源、身份、原件位置、最终位置、覆盖来源,以及完整原件/渲染/最终文本。高级编辑必须先阅读风险警告并确认,再在新的确认面板核对影响范围和恢复方式,手动输入“解锁高级编辑”后提交第二次确认。令牌只在内存中保存,服务端也验证权限;关闭面板、切换会话/范围和锁回会撤销本面板编辑权限。

解锁后可编辑覆盖正文、最终位置,或取消“保留这一段在最终提示词中”以移除该段。全局覆盖影响所有会话,工作区覆盖按所选实时 Agent 的真实 cwd 保存并优先于全局。删除本作用域覆盖恢复提供方原件;删除工作区覆盖后若存在全局覆盖,则继续继承全局。重置按钮只删除本作用域的高级覆盖,不删除“我的提示词”。保存冲突时草稿保留,必须重新读取最新配置、对照预览后再合并保存。

编辑的是提供方本次求值生成的正文,不是函数源码。保留提供方原有的变量解释方式:已经启用模板插值的段可以使用当前可用的 {{变量}},未知变量会被拒绝;设置为不插值的段保留字面文本。工具指导段可编辑,但工具 schema 不在此处修改。完整 complete 宿主提示词、空/无效原件、本插件自己的注入层等受保护项会明确标为只读。本插件注入层仍在“我的提示词”修改。原件位置和最终位置是同身份列表的装配序号,不代表原插件的注册排序值。

模型可以调用 dsh_session_prompt_set 提议修改全局正文,但真正写入前必须经过 DSH 原生审批界面的人工确认。工具结果不会重复回显完整提示词。

注入身份

身份DSH 原生机制行为
SystemsystemPrompt.section()每次模型请求时重新装配进真正的 system prompt;恢复会话或压缩上下文后仍然存在。
User ContextsystemPrompt.context()生成带来源信息的 user-role runtime-context 快照;只在内容变化时投影新快照,不会每轮机械重复追加。

User Context 是 DSH 当前最接近“聊天中注入”的原生通道,但不是任意历史深度插入。插件不伪造 Assistant 消息,也不提供“倒数第 N 条消息”注入,以免破坏会话恢复、工具调用与消息配对。

层级与排序

全局层和工作区层可以同时生效。工作区层使用当前会话工作目录的规范化路径作为内部键,浏览器不能自行指定其他工作区路径。

排序值越小越靠前。参考顺序:

  • Harness Identity:-100
  • Agent Preset / Persona:0
  • 插件全局层:10
  • 插件工作区层:20
  • DSH 工具说明:通常为 100–199

System 和 User Context 属于两个独立序列,排序值只在各自序列内比较。

设置与安全

自定义层设置以明文 JSON 保存在本地 DSH 数据目录的 dsh-session-prompt.json 中。当前格式版本为 2:

{
  "version": 2,
  "global": {
    "enabled": true,
    "prompt": "全局规则",
    "role": "system",
    "order": 10
  },
  "workspaces": {
    "normalized-workspace-key": {
      "path": "workspace-path",
      "enabled": true,
      "prompt": "项目规则",
      "role": "user-context",
      "order": 20
    }
  }
}
  • 单段正文上限 256 KiB,请求体上限 1 MiB,设置文件上限 4 MiB;
  • 最多保存 512 个工作区层;
  • 写入使用临时文件与原子替换,并用跨 profile 文件锁保护;
  • API 使用 revision 与 If-Match 检测陈旧草稿,冲突返回 409;
  • 写入要求 JSON 请求,并使用 revision / If-Match 检测陈旧草稿;这些格式与并发检查不代表用户身份认证;
  • 外部文件变化会触发热重载;未知的新格式版本或超大文件进入只读保护;
  • 单个无效层会保留可恢复正文但自动禁用,不影响其他有效层;
  • 整份 JSON 损坏时,下次保存前会生成带时间标记的备份;
  • DSH 会解释完整的双花括号模板变量。插件定位为纯文本注入,因此拒绝这种结构,避免未知变量导致后续模型请求失败。

上条双花括号限制仅适用于“我的提示词”自定义层;高级覆盖保留提供方的变量解释模式。

高级覆盖独立保存在同一数据目录的明文 JSON 文件 dsh-prompt-manager.json(格式 version 1),不迁移或覆盖原有 version 2 自定义层。它也使用原子写入、revision、跨进程锁和文件热重载;异常/未来版本进入只读保护。WebServer 模式下,原自定义层 API 与高级管理器 API 两类提示词 HTTP 接口均经过 DSH 标准 requestRejection 与连接 Cookie 身份校验,复用宿主已有凭证,不需要额外插件密码或 API Key;高级 Web 写操作还检查真实 socket 是否为 loopback、请求来源是否同源,并要求两次人工确认。没有 WebServer 的宿主通过官方 @deepseek-ai/dsh-client-connection 本地 Connection carrier 提供标准本地路径;本地 Fetch 适配使用 POST /delete 以兼容不支持 DELETE 的 Connection 契约。协议标记、请求头、revision 或来源字符串本身都不授予权限。服务端重启会清除编辑授权,但继续装配已有覆盖。

两次确认是降低误操作风险的操作门槛,不是登录、身份认证或模型安全沙箱;loopback、同源和宿主连接校验也不构成绝对安全保证。提示词仍由用户配置的模型服务按正常模型请求处理。

提示词只能影响模型行为,不能保证任何模型百分之百遵循。

数据流与隐私边界

  • 两份设置文件都以明文 JSON 保存在本地 DSH 数据目录。它们可包含自定义提示词、高级覆盖正文及工作区路径;插件不会对这些文件内容加密。
  • 如果 dsh-session-prompt.json 损坏,插件会在下一次保存前保留原文件的带时间标记备份。备份包含原 JSON 内容,因此也可能包含原提示词和工作区信息。
  • 管理器预览会展示其他插件或 Agent 的原件、渲染文本、最终文本以及会话对应的工作区路径;这些内容可能敏感,请谨慎复制、截图或分享。
  • 插件装配的 System / User Context 内容会作为正常 DSH 模型请求的一部分发送至用户配置的模型服务。插件源码审查未发现本插件主动进行额外第三方上报或遥测;这不涵盖 DSH 宿主、其他插件、依赖或模型服务自身的数据处理。
  • 两类提示词 HTTP 接口复用宿主标准连接 Cookie 身份校验;管理器写入另外要求真实 loopback socket、同源来源和两次人工确认。没有 WebServer 时只使用正式 Connection carrier 的本地路径。任何不满足预期传输或认证契约的请求都应拒绝,不将自定义 headers 或协议标记当作权限凭证。
  • 双确认仅用于降低误操作风险,不是身份认证或模型沙箱;认证与传输检查不能保证模型遵守提示词,也不提供绝对安全保证。

兼容性与验证范围

  • 兼容性以宿主 API 契约为准,而不是仅凭 Desktop 外壳版本推定;宿主必须提供官方 SystemPrompt、Connection,以及 WebServer 模式下的标准连接认证能力。
  • DSH 0.1.0-rc.5 不支持这些所需契约。若当前宿主版本不具备它们,需要由用户或管理员先升级宿主;插件不会自动升级宿主,也不承诺兼容所有版本区间。
  • 第三方 DSH Desktop 2.0.9(内嵌 DSH 0.1.5-rc.1):此前只做过只读 UI 验证,不代表写入或认证路径兼容。
  • DSH 0.1.6-alpha.1:完成官方 API 的静态兼容核对;隔离测试使用真实 Connection 与 SystemPrompt 实现,并通过真实 React bundle 的 Web HTTP 与本地 Connection 两种模式测试。
  • 尚未在官方 DSH 0.1.6-alpha.1 Windows 桌面窗口上做端到端验证,也未完成真实用户数据的写入矩阵;不能据此宣称所有宿主版本、桌面窗口或写入流程均已验证。

可选初始值

在 bundle 配置中设置初始全局提示词:

- insert:
    - id: dsh-session-prompt
      name: '@dsh-external/dsh-session-prompt'
      config:
        prompt: '你的初始全局提示词'

设置文件优先于该初始值。“恢复默认”会回到此值;未配置时使用插件内置文本。

更新与卸载

更新时重新执行对应的安装命令,然后重启 DSH。设置文件独立于插件包,正常更新不会清除已有提示词。

卸载请使用 DSH 自身的插件管理命令。卸载插件不会自动删除设置文件,便于重新安装后恢复;如需彻底清理,应由用户自行确认后删除该设置文件。

开发与验证

只有修改 TypeScript 源码时才需要一份已经安装依赖的 DSH checkout:

DSH_CHECKOUT=<path-to-dsh-checkout> npm run typecheck
DSH_CHECKOUT=<path-to-dsh-checkout> npm run build
npm run test:smoke
npm run test:manager
npm run test:client
DSH_CHECKOUT=<path-to-dsh-checkout> npm run test:transport
npm pack

PowerShell 可先设置同名环境变量,再执行这些命令。构建脚本会临时链接 DSH workspace 依赖;这些依赖不会进入仓库或发布包。

主要目录:

src/index.ts          宿主端:设置、注入、工具、API、预览
src/default-prompt.ts 内置默认提示词
src/prompt-manager.ts 高级覆盖、装配拦截、确认权限与管理器 API
src/prompt-http.ts    WebServer HTTP 入口与标准连接认证适配
src/safe-diagnostic.ts 敏感诊断信息脱敏
src/client/api.ts    客户端 Web / 本地 Connection API 适配
src/manager-types.ts  管理器共享契约
src/client/index.ts   正式设置页与输入栏入口
src/client/manager.ts 统一管理界面与两次确认
src/client/custom-layer.ts 原有自定义层编辑器
lib/                  已编译、可直接安装的发布产物
scripts/              构建、冒烟、管理器、客户端与传输测试
cordis.patch.yml      DSH bundle 装配层

License

MIT