編集者注

WASD258-jpg/dsh-prompt-inject

Per-session system prompt injection for DSH: template library, per-session picker, default template for new sessions.

これは DeepSeek Harness(DSH)プラグインです。当サイトは GitHub README、インストール情報、メンテナンス状況、公開セキュリティシグナルをまとめています。

dsh-prompt-inject

English | 中文

DeepSeek Harness(DSH)的会话级系统提示词注入器:每个会话可独立选择一段注入到系统提示词的文本(渲染在 persona 之后、工具引导之前)。

社区项目——非 DeepSeek 官方插件,不代表 DeepSeek 背书。

功能特性

  • 按会话注入——每个会话独立选择模板(或「无」),不同会话互不干扰。section 从 agent.ctx 注册(cordis caller 绑定 → 该会话的 scope 层),只影响顶层会话。
  • 模板库——保存/编辑/删除命名模板(name + text + order);可设默认模板,新会话自动套用。
  • 输入框工具行下拉——「会话提示词」选择器(conversation.input.right 插槽)直接在输入行为当前会话挑选模板,无需敲命令。
  • 设置页两个区块——设置 →「会话提示词模板」管理模板库与新会话默认模板;设置 →「系统提示词」是只读查看器,展示任意 live 会话完整组装出的系统提示词。
  • 分层查看——按来源分组:全局层(所有模式共有)、preset 层(该模式专有段)、会话层(仅本会话)、注入段(本插件自定义)——每段带名称、order、字数。
  • 变量插值——模板文本支持 {{model}} / {{cwd}}
  • 运行中即时生效——切换模板 = dispose 旧段 + 注册新段,该会话下一个模型请求生效,无需重启。
  • 验证端点——GET /assemble 返回实际组装出的系统提示词,并在 preset 锁定提示词时如实报告 completeBlocksInjection
  • 多入口——/prompt 命令、prompt_inject 工具、HTTP API、UI 全部驱动同一份配置。

安装

这是 bundle 型插件:运行在 DSH web profile 进程内,注册宿主端服务 + web 客户端模块。需要 DSH web profile(@deepseek-ai/dsh-web-app)。

  1. 克隆或下载本仓库:

    git clone https://github.com/WASD258-jpg/dsh-prompt-inject.git
    
  2. 安装进 DSH profile 依赖目录(二选一):

    Option A:npm 安装(推荐)

    cd "$env:USERPROFILE\.dsh\profiles"
    npm install @wasd258/dsh-prompt-inject --no-save
    

    Option B:从源码复制

    $src = '.\dsh-prompt-inject'
    $dst = "$env:USERPROFILE\.dsh\profiles\node_modules\@wasd258\dsh-prompt-inject"
    New-Item -ItemType Directory -Force -Path "$dst\lib" | Out-Null
    Copy-Item "$src\package.json", "$src\lib\index.js", "$src\lib\client.js", "$src\LICENSE", "$src\NOTICE" $dst -Force
    

    Linux/macOS 请把 $env:USERPROFILE\.dsh 换成 ~/.dsh(或 $DSH_HOME)。

  3. 把包加入 profile 的 bundle 列表——在 $DSH_HOME/profiles/<profile>/package.json(如 web)的 dsh.profile.bundles 数组追加 "@wasd258/dsh-prompt-inject"

    {
      "name": "dsh-profile-web",
      "private": true,
      "dependencies": {},
      "dsh": {
        "profile": {
          "bundles": [
            "@deepseek-ai/dsh-base",
            "@deepseek-ai/dsh-web-app",
            "@wasd258/dsh-prompt-inject"
          ]
        }
      }
    }
    
  4. 重启 DSH web(或热装配 bundle),然后刷新浏览器页面加载客户端模块(lib/client.js——immediately: true,页面加载即注册进 slots 系统)。输入框工具行出现「会话提示词」下拉,设置页出现两个新区块。

使用

命令

在任意会话中执行:

命令说明
/prompt(或 status/list/?查看当前会话提示词、默认模板与模板库
/prompt use <模板id|none>当前会话应用 / 移除模板
/prompt save <名称> <文本>保存模板(名称须为不含空格的一个词;其余整行作为文本)
/prompt delete <模板id>删除模板(若为默认模板则同时清除)
/prompt default <模板id|none>设置 / 清除新会话默认模板

示例会话(输出与插件实际输出一致;模板 id 自动生成:名称 slug 化 + 4 位 base36 时间戳后缀,如 code-reviewer-9k2m):

/prompt
当前会话提示词:「Code Reviewer」(code-reviewer-9k2m)
默认模板:(无)
模板库:
  code-reviewer-9k2m「Code Reviewer」(120 字) ← 当前会话
  safety-auditor-1b7e「安全审查员」(85 字)

用法:
  /prompt use <模板id|none>       —— 当前会话应用 / 移除模板
  /prompt save <名称> <文本>      —— 保存新模板
  /prompt delete <模板id>         —— 删除模板
  /prompt default <模板id|none>   —— 设置新会话默认模板

/prompt use code-reviewer-9k2m
当前会话已应用「Code Reviewer」(下一轮生效)。
/prompt use none
当前会话已移除提示词(下一轮生效)。
/prompt save 安全审查员 You are a strict safety auditor.
模板已保存:安全审查员-abc1「安全审查员」
使用:/prompt use 安全审查员-abc1
/prompt delete safety-auditor-1b7e
模板已删除:safety-auditor-1b7e
/prompt default code-reviewer-9k2m
默认模板已设置:code-reviewer-9k2m(此后新会话自动应用)。
/prompt default none
已清除默认模板。
/prompt use missing-id
模板不存在:missing-id(/prompt list 查看)

UI 操作

  • 输入框工具行 →「会话提示词」下拉:为当前会话挑模板(「提示词:无」= 不注入)。选择立即应用、下一轮请求生效;下拉每 5 秒向服务端刷新一次。
  • 设置 →「会话提示词模板」:新建 / 编辑 / 删除模板(删除带确认)并设置新会话默认模板。
  • 设置 →「系统提示词」:选一个 live 会话,按层(全局 / preset / 会话 / 注入)查看完整组装出的系统提示词;若该会话 preset 是 complete persona,显示琥珀色警告说明注入不生效。

prompt_inject 工具

模型自己也能通过 prompt_inject 工具管理提示词("Per-session system prompt injection… Changes take effect on the NEXT model request of that session"):

action必填参数效果
get当前会话模板、默认模板、完整模板库
applytemplateId"none" 解除)设置 / 解除当前会话模板
savenametext;可选 templateIdorder新建模板;templateId 命中已有模板则更新
deletetemplateId删除模板
defaulttemplateId"none"/"" 清除)设置新会话默认模板

HTTP API

宿主端在 /api/dsh-prompt-inject 下注册路由:

方法路径说明
GET/status?sessionId=会话当前模板 + 默认模板 + 模板库(sessionId 可选)
GET/assemble?sessionId=完整组装出的系统提示词 + 分层明细 + complete persona 检测
GET/sessions运行中的(顶层)会话及 preset id
POST/apply{"sessionId","templateId"} —— 给会话应用模板
POST/save{"name","text","id"?,"order"?} —— 新建/更新模板
POST/delete{"id"} —— 删除模板
POST/default{"templateId"} —— 设置新会话默认模板

GET /status

GET /api/dsh-prompt-inject/status?sessionId=abc123
{ "ok": true, "sessionId": "abc123", "current": "code-reviewer-9k2m", "currentName": "Code Reviewer", "defaultTemplate": "", "templates": [{ "id": "code-reviewer-9k2m", "name": "Code Reviewer", "text": "You are a strict code reviewer…", "order": 1 }] }

GET /assemble

GET /api/dsh-prompt-inject/assemble?sessionId=abc123
{ "ok": true, "sessionId": "abc123", "presetId": "standard", "presetName": "Standard",
  "length": 3842, "injectedLength": 120, "injected": "You are a strict code reviewer…",
  "complete": null, "completeBlocksInjection": false,
  "sections": [
    { "name": "persona", "order": 0, "text": "…", "layer": "global", "category": "system" },
    { "name": "tool-guidance", "order": 100, "text": "…", "layer": "standard", "category": "system" },
    { "name": "prompt-inject", "order": 1, "text": "…", "layer": "agent", "category": "injected" } ],
  "prompt": "…" }

sections 是逐段明细:layerglobal / preset id / agentcategoryinjected(本插件自定义段)或 system。遇到 complete persona preset 时,响应含 complete: "<段名>"completeBlocksInjection: true

错误情况

条件状态码响应体
非回环来源403{"ok":false,"error":"prompt-inject API is loopback-only"}
Host 头非法403{"ok":false,"error":"invalid host header"}
跨域 POST403{"ok":false,"error":"cross-origin request rejected"}
Content-Type 非 JSON415{"ok":false,"error":"Content-Type 必须是 application/json"}
JSON 无效 / 请求体超限(上限 128 KiB)400{"ok":false,"error":"请求体不是有效 JSON"}
未知路由404{"ok":false,"error":"unknown route: <route>"}
会话不在运行(/assemble/apply404{"ok":false,"error":"会话 <id> 不在运行中"}
模板不存在 / 入参非法(业务错误)200{"ok":false,"error":"模板不存在:<id>"}(或 name 不能为空文本过长(上限 65536 字符)

工作原理

  • agent 作用域注入——agent/created 时按 sessions[id] ?? defaultTemplate 解析该会话模板,从 agent.ctx 注册 prompt-inject section;cordis caller 绑定让段落落在该 agent 的 scope 层,只影响这一个会话。只注入顶层(root)会话,agent/disposed 时自动清理。
  • 运行中切换——applyForSession 先 dispose 旧段再注册新段;section 的 text函数,每次组装动态求值,所以下一轮请求即生效——无需重启。
  • 持久化——配置存于 $DSH_HOME/dsh-prompt-inject.jsontemplatessessionsdefaultTemplate),原子写入(临时文件 + rename);resume/重启后 agent 重建,选择自动重新应用。
  • 排序与变量——模板默认 order: 1(persona 在 0、工具引导在 100+);文本支持 {{model}} / {{cwd}};空文本段自动从组装中消失。
  • KV 缓存说明——注入文本进入该会话每个请求的系统提示词;修改会改变 KV 缓存前缀,下一轮缓存复用失效——这是修改的正常代价。
  • 宿主端——注入 systemPrompttoolscommandsagentswebServer;web 端注入 slots 系统(conversation.input.right + 两个 settings.section)。

隐私与安全

  • 威胁模型——本 API 设计上无鉴权,只服务本机:任何本地进程都能读取组装出的系统提示词与模板库,并能驱动写操作。请在可信的本机环境运行 DSH;不要把 DSH 绑到公网接口并指望本插件防护——回环校验是纵深防御,不是认证边界。
  • 仅限回环——来源地址必须是 127.0.0.1::1::ffff:127.0.0.1,否则直接 403。
  • 防 DNS rebinding——Host 头必须是当前端口的回环主机名(无 Host 头回退到地址校验)。GET /assemble 可能返回敏感数据,因此 GET/POST 一视同仁。
  • 写操作防跨站——POST 额外要求同源 Origin 头 + Content-Type: application/json,阻止恶意网页驱动修改。
  • 无遥测——不发起外部请求、不采集统计、不读写凭据。配置明文落盘在 $DSH_HOME/dsh-prompt-inject.json;模板本身可能敏感,请保护好 home 目录。
  • 请求体上限 128 KiB(131072 字节)。

兼容性

  • 需要 DSH(DeepSeek Harness)web profile(@deepseek-ai/dsh-web-app)。
  • Node.js >= 22.19.0。当前版本 0.1.1(npm 包名 @wasd258/dsh-prompt-inject)。
  • 官方仓库 commit 47f9438 时代实测(bundle 接口、web profile、Windows 11)。
  • complete persona 边界——persona 配置 complete: true 的 preset(如 minimalanchored-standard)会把系统提示词锁定为唯一段:注入对这类会话不生效/assemble 通过 completeBlocksInjection 如实报告,设置页查看器显示琥珀色警告。请使用非 complete 的 preset(Standard、Creator…),或把文本写进 preset 的 persona。
  • 查看器默认优先选中非 complete 会话(这类会话才能看到有意义的注入结果)。

官方生态要求

DeepSeek Harness CONTRIBUTING,官方仓库不接受外部 PR;社区插件放在各自仓库并添加 dsh-plugin topic。本仓库遵循此约定:独立社区项目,与 DeepSeek 无隶属或背书关系。

许可

MIT —— 见 LICENSE。部分内容参考 DeepSeek Harness;来源与免责声明见 NOTICE

REPOSITORY SIGNALS

セキュリティとインストールエビデンス

このスコアは公開リポジトリメタデータと当サイトに登録されたインストールエビデンスのみに基づくもので、コードセキュリティ監査とは異なります。

出所の追跡可能性

公開プラグインカタログから取得し、公開 GitHub リポジトリにリンクしています。

ライセンス

GitHub メタデータにライセンスが検出されませんでした。

メンテナンス活動

過去180日以内にコードの更新があります。

インストールエビデンス

再現可能な正確なインストールメタデータはまだ登録されていません。リポジトリの説明に従って手動で確認してください。

インストールライフサイクルスクリプト

確認したパッケージメタデータにインストールライフサイクルスクリプトは宣言されていません。

注意点missing-license