🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

提示词注入器 MacilyDots/dsh-prompt-inject

DeepSeek Harness
MacilyDots22 天前有提交已提供中文文档扫描:未发现敏感能力

为完整人格预设注入自定义提示文本变量

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MacilyDots/dsh-prompt-inject
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · skill
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 22 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 注册可配置提示词变量
  • 向完整人格预设注入文本块

DSH 插件:注册可配置的提示词变量,让使用 complete:true 人设的智能体预设也能收到注入的文本块。

README

由 DeepSeek 最新模型翻译生成
dsh-prompt-inject 给「用了 complete: true 的 DSH agent 预设」注入一段附加提示文本。 为什么需要它 DSH 的系统提示(system prompt)由若干 section 拼装而成,注册入口是 @deepseek-ai/dsh-system-prompt 的 ctx.systemPrompt.section()。 但 assemble() 里有一条硬规则: sections: completeSection === void 0 ? transformed.sections : [completeSection] 只要有任何一个 section 带 complete: true(典型用法是 persona 独占整个人格,例如 @deepseek-ai/dsh-persona 配 complete: true),最终只剩它一个 section —— 往注册表里再 section() 加多少段,都会被整段丢掉。 还能进得去的入口只剩一个:prompt 变量插值。complete 段虽然不是拼接对象,但它照样过 renderPrompt() 的 interpolate(),所以只要在它的文本里写 {{变量名}},就会被展开成变量 provider 的返回值。 这个插件把「一段文本」注册成一个 prompt 变量,供预设前缀引用。
展开完整文档(README 剩余 1 节)
dsh-prompt-inject

给「用了 complete: true 的 DSH agent 预设」注入一段附加提示文本。

为什么需要它

DSH 的系统提示(system prompt)由若干 section 拼装而成,注册入口是 @deepseek-ai/dsh-system-prompt 的 ctx.systemPrompt.section()。

但 assemble() 里有一条硬规则:

sections: completeSection === void 0 ? transformed.sections : [completeSection]

只要有任何一个 section 带 complete: true(典型用法是 persona 独占整个人格,例如 @deepseek-ai/dsh-persona 配 complete: true),最终只剩它一个 section —— 往注册表里再 section() 加多少段,都会被整段丢掉。

还能进得去的入口只剩一个:prompt 变量插值。complete 段虽然不是拼接对象,但它照样过 renderPrompt() 的 interpolate(),所以只要在它的文本里写
{{变量名}},就会被展开成变量 provider 的返回值。

这个插件把「一段文本」注册成一个 prompt 变量,供预设前缀引用。
插件本身不含任何内容,文本由使用者通过配置提供。

⚠️ 一条必须先知道的规则

interpolate() 对未注册的变量是抛错,不是忽略:

unknown prompt variable "{{x}}" in section "..."

这个错误发生在渲染系统提示的时候 —— 那个预设的整条会话链路都会失败 (对话、回信、任何模型调用都发不出去)。

所以:

- 前缀里写了 {{x}},就必须保证注册 x 的插件处于加载状态;
- 卸载插件之前,先用 tools/disable.mjs 摘掉引用;
- tools/check.mjs 检查这个配对,tools/uninstall.mjs 在还有引用时会拒绝执行。

安装

下文用 %DSH_HOME% 指 DSH 主目录(Windows 默认 %USERPROFILE%\.dsh,其它平台 ~/.dsh),profile 名默认 desktop。

1. 把本仓库放进 profile 的 node_modules:

robocopy "<本仓库路径>" "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-prompt-inject" /E /XD .git

2. 挂进 bundle 列表:

node tools/install.mjs

DSH 的 profile 加载顺序是 package.json 的 dsh.profile.bundles → cordis.patch.yml → --patch overlays(见 profile 目录里 cordis.yml 的注释)。
所以「插件有没有被加载」由 bundles 决定,而不是 cordis.patch.yml。
这一点很关键:cordis.patch.yml 会被 GUI 重写,bundles 列表不会。

3. 给目标预设挂上变量引用:

node tools/enable.mjs --preset preset-<你的预设 id>

4. 复查配对:

node tools/check.mjs

5. 重启 DSH。

配置

在 profile 的 cordis.patch.yml 里覆盖插件配置:

- id: prompt-inject
config:
variable: inject
textFile: '<文本文件的绝对路径>'

| 字段 | 默认 | 说明 |
| variable | inject | 注册的变量名;预设前缀里写 {{<这个名字>}}。必须匹配 [a-z][a-z0-9_]* |
| textFile | '' | 文本文件路径(UTF-8)。改动后按 mtime 自动重载,不必重启 DSH |
| text | '' | 内联文本。textFile 优先;两者都空则不注入任何内容 |
| presets | [] | agent 预设 id 白名单(对应会话创建记录里的 agentPreset)。空 = 不限制 |
| sessions | [] | 会话 id 白名单。空 = 不限制 |
| cwds | [] | 工作目录白名单(会话 header.cwd)。空 = 不限制 |
| enabled | true | 总开关 |
| stateFile | '' | 外部开关文件(JSON)。用于跟随别的插件的开关状态 |
| stateKey | enabled | 在上面那个 JSON 里读哪个键;该键必须严格等于 true 才注入 |
| debug | false | 往 %DSH_HOME%/prompt-inject.log 记每次求值的结果 |

variable 和 presets 是两道独立的闸门:引用决定「谁能拿到」(没写引用的预设根本不会展开这个变量),provider 决定「什么时候返回空」(白名单、开关、外部状态)。

工具

| 脚本 | 作用 |
| tools/check.mjs | 检查配对状态,并列出 profile 里全部变量引用。退出码 1 = 危险 |
| tools/enable.mjs --preset <id> | 往该预设 persona 的 prefix 末尾追加 {{variable}}(幂等) |
| tools/disable.mjs --preset <id> | 摘掉引用(幂等) |
| tools/install.mjs | 挂进 dsh.profile.bundles |
| tools/uninstall.mjs | 从 bundles 移除;还有引用时拒绝执行 |
所有写操作都会先在同目录留一份 .bak-prompt-inject-<时间戳>。加 --dry 可以只看改动不落盘。

卸载

node tools/disable.mjs --preset <preset-id>
node tools/uninstall.mjs
重启 DSH,然后自行删除 node_modules 里的插件目录

已知边界

- 一个 complete 段:assemble() 检测到多个 complete: true 会直接抛 multiple complete prompt sections are active。本插件不注册 section,不参与这个约束。
- 变量名不能撞车:同名变量重复注册会抛 prompt variable "x" is already registered。
和别的插件撞名时换一个 variable 值即可。
- provider 永不抛错:assemble() 同步调用每个 provider,provider 一抛会话就废。
所以插件内部所有读文件、读状态的动作都被 try/catch 兜住,最坏情况返回空串(等于不注入)。

许可

MIT
预览分享卡片长什么样 ↓MacilyDots/dsh-prompt-inject
分享 · DeepSeek Harness Hub
MacilyDots/dsh-prompt-inject

为完整人格预设注入自定义提示文本变量

回到顶部