XialerMoies/dsh-prompt-easymanager ↗★ 0

dsh-prompt-easymanager

给 DeepSeek Harness 用的个人提示词管理器:把「个人提示词 + 系统提示词改动」存成预设,按会话或全局挂载,并能改写、关闭、还原 DSH 的原生段落,还能看清模型实际收到的最终提示词。 适合需要按会话灵活挂载提示词并查看模型实际接收内容的调优用户。

Package
dsh-prompt-easymanager
Compatibility
Unverified
Version
0.3.4
License
MIT
Last updated
Oct 2, 2026

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:XialerMoies/dsh-prompt-easymanager

个人提示词 · dsh-prompt-easymanager

为 DeepSeek Harness 的每个会话挂载任意几条系统提示词,并直接看到模型实际收到的最终结果。


它解决什么问题

dsh 的系统提示词是很多段拼起来的:persona、AGENTS.md、技能、工具说明、时间上下文…… 想换掉其中一段,通常只能去改 profile 的 YAML;想知道"改完到底长什么样",只能靠猜。

这个插件给两样东西:

  • 按会话挂提示词 —— 一个会话可以同时挂「身份补丁」「领域知识」「输出契约」, 各自按 order 插到不同位置,不用揉成一大段。新会话自动用全局默认那几条。
  • 看清最终结果 —— 预览读的是 dsh 写进会话日志的 system/message, 那是模型真正收到过的内容,变量都已替换完毕。

还有一层:原生段落可以单独改写、关掉、还原(见下面「段落改写」)。


安装

从 GitHub 装(推荐):

dsh plugin --profile web add github:XialerMoies/dsh-prompt-easymanager#v0.3.4

#v0.3.4 是版本标签 —— 换个标签就是换个版本,装哪个版本一目了然。

装完重启 DSH Web。

名字里那个 web 是 profile 名,按你自己的来(dsh profile list 能看到)。

为什么不从 npm 装:这个包名在 npm 上被一个功能相近的独立实现占了 (SaiSenBox 的 dsh-prompt-manager,跟这个项目没有关系)。改用 dsh-prompt-easymanager 发布时,新包被 npm 扣在「暂存待批」的状态里, CLI 看不到也没法批。GitHub 直装不受影响。

装不上、要更新、要卸载? 见 docs/install.md。 装之前想确认它碰什么? 见 docs/permissions.md —— 读写哪些文件、连什么网络、坏了会怎样、卸载后留什么。摘要: 零运行时依赖、零外部服务、不执行任何命令、不碰任何凭据。

从源码装(想改代码时用这个)

指向本地目录:

"dsh-prompt-easymanager": "file:"

例如 file:D:/tools/dsh-prompt-easymanager(Windows 用正斜杠)。

想改源码即刻生效,就把 node_modules/dsh-prompt-easymanager 做成指向源码目录的 junction(符号链接),而不是让包管理器拷贝一份:

$nm   = "$env:USERPROFILE\.dsh\profiles\
\node_modules"   # profile 名按你的来
$src  = ""
Remove-Item "$nm\dsh-prompt-easymanager" -Recurse -Force -ErrorAction SilentlyContinue
New-Item -ItemType Junction -Path "$nm\dsh-prompt-easymanager" -Target $src

⚠️ 再跑一次 pnpm install 会把 junction 换成实体拷贝。 不会丢改动(pnpm 是从源码目录拷的),但之后改源码就不生效了 —— 重跑上面两行。

装完重启 dsh。之后凡是改了插件代码,也都要重启 —— 原因见「注意事项」。


用法

order 插在哪、什么时候生效、目录格式怎么写 —— 都在 system-prompt.md, 这里只说怎么点。那份不进发布包,装了插件想看点上面那个链接。

会话头部

[●] [写代码]  [预览]  [↻]
 │     │        │       └─ 重读 catalog.json
 │     │        └─ 展开最终系统提示词
 │     └─ 一个下拉框:这个会话用哪套(**点一下就生效**,没有「应用」按钮)
 └─ 状态点:灰=未挂 / 绿=自己选过 / 蓝=跟随全局 / 黄=agent 未加载 / 红=通信失败

点开是一个预设下拉框(不是选提示词 tag)。三个状态互不相同:

选什么含义
某条预设这个会话就用它
系统提示词显式什么都不挂(哪怕全局开着也不挂)
跟随全局用全局那条;全局改了就跟着变

「系统提示词」和「跟随全局」不是一回事:全局开着时,前者一条都不挂, 后者吃全局那条。合并了就没法表达「这个会话别挂全局的」。

按钮文字就是这个会话实际用哪条:预设里有个人提示词→预设名; 只改了系统提示词→系统提示词 · 改;两样都没改→系统提示词。 跟着全局来的会加 ·跟随全局(否则分不清是自己选的还是跟着走的)。

新会话页

还没开会话的那一页,「工作区」「agent 预设」右边也有一个同样的下拉框。

⚠️ 两点要知道:

  • 那一页还没有会话,所以它改的是全局那条预设(真按会话存要 dsh 给 「会话创建」钩子,而那一行的上下文里连会话 id 都没有)。
  • 那个下拉框是渲染后插进去的(dsh 给那一行只留了两个位置,都被人占了)。 好处是不碰 dsh 的文件、它更新不会覆盖;代价是 dsh 改版可能失效 —— 那时它不出现,但页面不会坏。

设置页

设置 → 提示词管理(设置面板侧边栏的独立一项,不在「插件」标签页里面)。

从上到下:提示词组合 → 个人提示词(库)→ 系统提示词(改 dsh 原生段落)。

「提示词组合」是一整张卡片,卡片头一行就是全部动作:

[开关] 写代码 ✎   [写代码 ▾] [保存] [删除] [↻]
──────────────────────────────────────────────
系统提示词   ☑ harness:identity   ☐ tool:bash
☑ 代码规范   ☐ 输出格式契约   ☐ 领域知识
控件干什么
开关全局注入总开关(合在这一块里 —— 它管的就是这一层)
标题当前在哪套配置上;✎ 改名
下拉换一套
保存把当前勾选写进这套预设
删除删掉这套(在保存和刷新之间)
↻从盘上重读

勾选分两组,含义不同:

  • 个人提示词(下半部):勾 = 这条加进预设。
  • 系统提示词(上半部那排 tag):勾 = 这段的改动留在预设里; 取消勾 = 这一段回到原生。

⚠️ tag 上的「取消勾」不是「关掉这段提示词」—— 那是下面「系统提示词」那栏 disable 干的事。 而且这排 tag 只列有改动的段落,一段都没改就不显示 (列没改过的会让人以为勾上就能改)。

开关管的是全局这一层:

效果
开没自己选过的会话都挂全局那条预设
关全局这一层整体停用:没自己选过的会话什么都不挂;
会话页也只能选「具体预设」或「系统提示词」,不能跟随全局

选预设和开开关是一对:要开就得先选一条预设(没选会报错), 反过来选了预设就自动开。

段落改写(改 dsh 原生段落)跟注不注入是两件事,不受这个开关影响。

改完保存立即重载并重挂所有已分配的会话,下一步就生效。不用手动重启。

正文一律写进库目录的 .md;删条目、或把模式改成「不注入」,正文文件会一并删掉。

预览

列出模型上次实际收到的系统提示词正文,以及 sections / 运行时上下文 / 工具 schema 各自的 token 合计。属于本插件注入的段落用绿框标出。

⚠️ 会话日志里只有文字段落,不含工具定义 —— 工具走模型 API 自己的 tools 参数, 不写进 system/message。所以「模型实际收到 ≈ N」是两者之和。

段落改写

除了「挂自己的提示词」,还能单独改写 dsh 原生段落:改正文、临时关掉、一键还原官方原文。 官方更新了某一段会标「官方已更新」,你可以选跟随新原文或保留自己的改写。

设计取舍写在 section-overrides-design.md(同样不进发布包)。


注意事项

① 改了插件代码要重启 dsh。

界面那一半是按需加载的,改动后不重启,浏览器会去要一个已经变了的旧文件 —— 表现是设置页整片空白。

(设置页里改提示词不用重启,保存即生效。)

② 你的数据都在 $DSH_HOME 下,升级不会丢。

~/.dsh/dsh-prompt-easymanager-state.json   预设、会话选择、段落改写
~/.dsh/prompts/catalog.json                提示词库的条目
~/.dsh/prompts/.md                     每条提示词的正文

⚠️ 库故意放在包外:装在 node_modules 里的包目录会被 pnpm update 换掉, 库要是放在包里,升级一次就没了。

想备份就整个拷 ~/.dsh/prompts/;状态文件也拷上就是完整备份。

状态文件不会自动清理,这是故意的:每条约 60 字节——攒到 10,000 个会话也只有 约 600 KB,不值得为它冒误删的风险。

③ 挂的提示词越多,上下文越贵。

每条提示词都占 token,而且改了系统提示词会让模型侧的 prompt cache 失效, 下一轮更贵。别在一轮对话里反复切。它碰什么、测试能保证什么,见 docs/permissions.md。


MIT