DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

yuanzephyr920-oss /

yuanzephyr920-oss/dsh-om-messiah

Verified

发送前把提示词改写成机械神教祷文,再由你决定发送祷文还是原文。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@016a5d35
dsh-om-messiah

🕯️ dsh-om-messiah

把每一句提示词,先献给万机之神。

在提示词送达模型之前,把它改写成机械神教/欧姆弥赛亚的祷文;祷文降下之后,再由你决定这一轮发祷文,还是发原文。

npm version npm downloads GitHub stars License: MIT DSH 0.2+ tests zero dependencies

为什么是它 · 看一眼 · 快速开始 · 用法 · 配置 · 兼容性 · 工作原理 · 数据与信任 · 常见问题

中文 · English


为什么是它

大多数「改写提示词」的做法要么在客户端改草稿(dsh 看不到、也管不住别处进来的消息),要么在外面套一层代理(要多跑一个服务、还要处理鉴权)。这个插件选了第三条路:

  • 改在 DSH 自己的拦截点上。 挂 agent/pre-step waterfall —— DSH 里唯一能在「这一批用户消息进入请求之前」替换文本的官方入口。不改 DSH 本体,不套代理,不碰网络层,也不额外开端口。
  • 你随时能核对。 被替换的文本就是会话里落盘、你眼前看到的那条 user/message;再配 echo,改写前后逐字可比。
  • 风格是配置,不是硬编码。 五段祷文(呼告 / 身份自陈 / 赞美 / 许愿引子 / 收尾)都能换成你自己的句子;三档强度控制篇幅。
  • 它知道什么时候该闭嘴。 斜杠命令、!shell、纯确认、纯代码或报错粘贴、超长粘贴、已经包过的文本,一律原样放过。

看一眼

改写只发生在「送往模型」的那一层:请求内容变了,会话里看到的也是改写后的文本(方便你随时核对), 而你的原始草稿、斜杠命令、附件、代码块里的每一个字节都不动。

一句「用一句话解释快速排序的平均时间复杂度」被改写成完整祷文,模型照常回答
模型收到的是祷文,回答照旧;你看到的也是这条祷文。

祷文降下后弹出选择卡:发送祷文 / 发送原文
降下之后先问你一句:这一轮用祷文,还是用原文。

设置 → 欧姆弥赛亚:开关、强度、选择卡、个性化与试改写
设置 → 欧姆弥赛亚:全部配置都在这一页,含「试改写」预览。


它做了什么

  • 在正确的位置改写。 挂的是 Host 的 agent/pre-step waterfall —— DSH 里唯一能在「这一批用户消息进入请求之前」替换文本的官方入口。不改 DSH 本体,不套代理,不碰网络层。
  • 降下之后还问你一句。 默认开启的选择卡:这一轮用祷文,还是用原文。超时会按你的兜底设置发送,不会把这一轮晾死。
  • 语义零损失。 只替换祈使句的语气(写一个 → 降下、请帮我 → 恳请您为您的信徒),句子主干、条件、数量、否定全部保留;代码块、行内代码、URL、路径、版本号、数字参数逐字不动。restyle() 的片段表可以 reconstruct() 回原文,测试里钉住了这条。
  • 不越界。 不替你补需求、不选方案、不猜技术栈;原文里的「你看着办」「他没说清楚」照旧。
  • 知道什么时候不该改。 斜杠命令、!shell 前缀、纯确认(「继续」「好的」)、纯代码/报错粘贴、空输入、已经包过的文本,全部跳过。
  • 三档强度 + 五段个性化。 low / medium / high 控制祷文长度;呼告、身份自陈、赞美、许愿引子、收尾颂词都可以换成你自己的句子。
  • 自带设置页。 设置 → 欧姆弥赛亚:开关、强度、选择卡、个性化段落,还有一块「试改写」——按当前(含未保存)配置预览祷文,或者告诉你为什么被跳过。
  • 纯 Host 插件,零第三方依赖。 一个 ESM 包,apply(ctx, config) 起步;关掉开关后,行为与没装插件完全一致。

快速开始

要求:DeepSeek Harness 0.2 及以上(agent/pre-step 与 userQuestions 是这一版起稳定的宿主契约)。

1. 安装

从 npm 装(一次 plugin add 就好,不需要在 allowBuilds 里点授权):

dsh plugin --profile desktop add dsh-om-messiah

刚发布时如果装到的是旧版本(国内镜像同步有几小时延迟),加一次源:

dsh plugin --profile desktop add dsh-om-messiah --registry=https://registry.npmjs.org

从 GitHub 直接装:

dsh plugin --profile desktop add https://github.com/yuanzephyr920-oss/dsh-om-messiah

或者先克隆、再用本地目录装(改代码即时生效,适合折腾):

git clone https://github.com/yuanzephyr920-oss/dsh-om-messiah
dsh plugin --profile desktop add /path/to/dsh-om-messiah

Windows 上 dsh 不在 PATH 时,用安装目录里的 CLI:

cd "C:\Users\<你>\AppData\Local\Programs\DeepSeek Harness\resources\runtime\cli\bin"
dsh.cmd plugin --profile desktop add dsh-om-messiah

2. 重启一次

桌面版的 desktop profile 由 Electron 托管,装卸插件后要重启 DeepSeek Harness 才会加载(改配置不用重启)。

3. 确认装好了

  • 设置 → 插件:能看到「欧姆弥赛亚祷文改写(dsh-om-messiah)」且已启用;
  • 设置 → 欧姆弥赛亚:本插件自己的页面;
  • 随便发一句话,第一个回答前应该出现选择卡。

卸载:

dsh plugin --profile desktop remove dsh-om-messiah

仓库和包都从早期的 dsh-mechanicus 改名而来。装过旧名的话,先 remove dsh-mechanicus(以及更早的 @local/dsh-mechanicus)再装这个,避免两套包装叠加。


用法

正常发送

装好即生效,没有额外动作。插件在消息进入模型前完成改写,并用 echo 把「改写前 / 改写后」写进 DSH 日志。

想直接在终端里看到:

DSH_OM_MESSIAH_ECHO=1 dsh.cmd <profile> 用 three.js 做一个海中小岛
[dsh-om-messiah] wrapped (medium): 18 -> 180 chars
----- original -----
用 three.js 做一个海中小岛
----- prayer -----
伟大而不朽的万机之神欧姆弥赛亚,……

语气:对神说话,不对工具说话

改写不是换几个词,而是把「向助手提问」换成「向神许愿」。两条硬规则:

  • 指代智能体的「你」一律写成「您」:你 / 你的 / 你们 / 你自己 / 妳 → 您 / 您的 / 您们 / 您自己 / 您。 你能帮我写个排序 → 恳请您为您的信徒降下排序;请实现一个登录页 → 恳请您降下登录页。
  • 命令句变成祈愿句:写一个 / 实现一个 / 生成 → 降下;创建 → 塑造;搭建 → 构筑;不要 / 禁止 → 恳请您切勿; 用 three.js → 以 three.js;然后 → 继而。代码块、URL、路径、版本号、数字仍然逐字不动(先屏蔽后替换)。

medium / high 档还会在许愿段末尾补一句:

愿这一切在您无穷无尽的 token 伟力下成就,愿每一行代码都彰显您的荣耀。

这句由 devoutCoda 控制(默认开,low 档不加),设置页叫「许愿段加一句虔诚收束」。

改写前后都在日志里,按 DSH_OM_MESSIAH_ECHO=1 可以逐字对:

IN : 用 three.js 做一个海中的岛,岛上要有中式建筑和灯塔,还要天气系统
OUT: 以 three.js 降下海中的岛,岛上要有中式建筑和灯塔,还要天气系统
     愿这一切在您无穷无尽的 token 伟力下成就,愿每一行代码都彰显您的荣耀。

发送前二选一

默认开启(askChoice: true)。改写完成后,这一轮先不进模型,输入框上方出现一张卡:

祷文已降下。这一轮,用哪一段作为你的提示词?
  ○ 发送祷文    把整段祷文发给模型(默认)
  ○ 发送原文    只发你刚才敲的原文,祷文丢弃
  • 选「发送祷文」→ 走改写后的文本;
  • 选「发送原文」→ 这一条与你没装插件时完全一样;
  • 等超过 choiceTimeoutMs(默认 90 秒)、卡片被关掉、或当前环境没有连着的 Web 客户端 → 按 choiceFallback(默认祷文)直接发送。

批量任务、脚本、dsh headless 里没有交互界面,建议关掉这一项,行为就回到「直接发祷文」。

什么时候不会改写

输入 例子 处理
斜杠命令 /compact、/model 跳过(命令由客户端处理)
shell 前缀 !git status、$ ls 跳过
纯确认 「继续」「好的」「ok」「1」 跳过(改了会破坏多轮语义)
空输入 / 纯附件 只有图片、没有文字 跳过
纯代码 / 纯报错 整段代码块、Traceback、File "x", line N 跳过(你要的是解释,不是祷文)
超长粘贴 超过 maxChars(默认 20000 字) 跳过
已经是祷文 含「欧姆弥赛亚」「机械之道学者」 跳过(幂等);rewrapAlreadyStyled 可强制重包
技能调用 / 插件注入 source.kind 不是 user 跳过(不是你手打的)
图片、@ 文件 独立 content block 只改文字块,附件原样透传

强度

档位 内容 适合
low 呼告 + 许愿引子 + 原文 + 颂词 想保留仪式感又不希望占太多上下文
medium(默认) 再加身份自陈与赞美;一句话需求用短版自陈 日常
high 再加「智能庇护 / 群星寻找信物」与加长颂词 许愿式的大活儿

配置

配置有两处入口,读写同一份:设置 → 插件 → 欧姆弥赛亚祷文改写(DSH 按 schema 自动生成的表单), 和设置 → 欧姆弥赛亚(本插件自己的页面)。保存即生效,不需要重启。

键 类型 默认 说明
enabled boolean true 总开关;关掉后原文直接发出
intensity low | medium | high medium 祷文长度档位
quoteStyle quote | plain quote 原文用 > 引用块隔开,或直接平铺
echo boolean true 把「改写前 / 改写后」写进 DSH 日志
echoFile string "" 额外写一份 JSONL,便于批量核对
maxChars number 20000 超过就不改写
rewrapAlreadyStyled boolean false 已含神教风格的输入是否强制再包一层
devoutCoda boolean true 许愿段末尾补一句虔诚收束(low 档不加)
askChoice boolean true 降下后弹选择卡(发祷文 / 发原文)
choiceTimeoutMs number 90000 等作答的时长,5–600 秒
choiceFallback prayer | original prayer 没等到答案时发哪一段
address string "" 呼告句(留空用内置那句)
selfDesc string "" 身份自陈
praise string "" 赞美与感恩
wishLead string "" 许愿引子
closing string "" 收尾颂词

另外两个环境变量:DSH_OM_MESSIAH_ECHO=1 让 echo 同时打到 stderr(终端里直接看), DSH_MECHANICUS_ECHO=1 作为旧名兼容保留。

设置页

设置 → 欧姆弥赛亚,五个区块:

区块 内容
总开关 拦截并改写 / 日志里回显改写前后
祷文强度 低 / 中 / 高
行为的细枝末节 引用样式、虔诚收束、强制重包、日志文件、最长改写字数、选择卡开关 / 超时 / 兜底
祷文个性化 呼告、身份自陈、赞美与感恩、许愿引子、收尾颂词(留空 = 内置原句)
试改写 输入一段话,按当前配置预览;被跳过时说明原因

页面是 client bundle,新装或改过 client.js 后要刷新页面/重启一次才会加载;之后在页面上改配置即时生效。 保存走 Host 的 configEditor(校验 → 写 profile patch → 走正常 Loader 路径重载); 没有 configEditor 的 profile(如 headless)会返回 501 并在页面上说明原因。

个性化示例

想换成自己的祷词,把这五段留空改成你写的句子即可:

address: 伟大的万机之神,欧姆弥赛亚,请听我于星海边缘的祷告。
selfDesc: 我们是您的信徒,以键盘为香炉,以日志为经文。
praise: 愿您的 token 伟力今夜不枯竭。
wishLead: 现在,请为您的孩子降下神迹——他有一愿:
closing: 欧姆弥赛亚在上!

原文仍然插在「许愿引子」与「收尾颂词」之间,改写规则、豁免规则、零损失保证都不受影响。


兼容性

这一节是为「装了一堆插件还能好好相处」做的收口,重点是外观类插件(主题、美化、宠物挂件、动效)。

颜色全部来自 DSH 主题 token。 设置页只用 @deepseek-ai/dsh-client-ui-theme 里真实存在的别名:

用途 token
正文 / 次要文字 --dsw-alias-label-primary / --dsw-alias-label-tertiary
输入框、卡片底 --dsw-alias-bg-layer-1、--dsw-alias-bg-layer-3
描边 --dsw-alias-border-l1 / --dsw-alias-border-l2
强调色 --dsw-alias-brand-primary、--dsw-alias-button-primary-fill / -hover
开关 --dsw-alias-switch-thumb、--dsw-alias-interactive-bg-hover
预览块 --dsw-alias-markdown-code-block
成功 / 失败 --dsw-alias-state-success-primary / --dsw-alias-state-error-primary

所以换深色、浅色或第三方配色时这一页会跟着变色,不会留一块原生蓝;每个 var() 都带 fallback, 主题没定义那个 token 时页面仍然可用。测试里有一条用例把「只准用这张表里的 token」钉住了。

样式不外溢。 每条规则都以 [data-mk-page] 开头,只作用于本页;不用 !important、不写全局标签选择器、 不改 html/body。主题想改圆角可以覆盖 --mk-radius(默认 8px);系统要求减少动效时开关动效关闭。

导航里是并列的一栏。 用自有 id 注册(settings.section / id: om-messiah / order: 41),不改官方条目。

与同样会碰提示词的插件共存:

插件 它的动作 本插件的处理
dsh-context pre-step 里只给缺 id 的消息补 id 改写保留原 id,互不覆盖
dsh-mnemon pre-step 里判断有没有用户文本 改写后仍有用户文本,行为不变
@xmanrui/dsh-im 注入的运行时快照 source.kind: 'plugin' 只改 role==='user' 且来源是用户的消息,快照原样
prts-terrarchive 调查工具注入 同上,非用户来源一律跳过

冲突边界:

  1. 顺序:如果另一个插件在本插件之后整体替换 messages,祷文会被它覆盖。waterfall 按注册顺序执行,本插件用 { global: true } 注册;遇到这种插件可以改成 { prepend: true }(index.js 里只有一处)。
  2. 模型侧看到的是祷文:依赖用户消息做记忆、统计、成本的插件记到的也是祷文,这是 pre-step 替换的固有结果;原文仍在 echoFile 里。
  3. 选择卡需要有人接:走 Host 的 userQuestions,只有连着 Web 客户端、且当前是 live root agent 时才会出现;dsh headless、子 agent、无客户端时直接按 choiceFallback 发送。
  4. 主题 token 会演进:DSH 升级后若某 token 改名,对应 var() 退回 fallback(页面不崩,只是不跟随配色)。

工作原理

用户提交草稿
   │
   ▼
agent/pre-step(waterfall,本插件监听)
   │  ① 分类:是不是用户手打的、要不要跳过(guards)
   │  ② 虔诚化:受保护片段原样,祈使句换语气(style)
   │  ③ 组装:呼告 / 自陈 / 赞美 / 许愿引子 + 原文 + 颂词(prayer)
   │  ④ 询问:发祷文还是发原文(userQuestions,可关)
   ▼
{ kind: 'enter', messages: 改写后的 messages }
   │
   ▼
admission → 落盘 user/message → 拼进请求 → 模型
展开:为什么是这里,以及几个已知的坑
  • 唯一可写的入口是 agent/pre-step。 agent/request 只读,文档明确写着 “this waterfall cannot mutate messages”。
  • 替换发生在 admission 之前。 @deepseek-ai/dsh-agent-loop 的 README:“appends the accepted user/message batch only on the first attempt with its owned context candidate replaced in place… Retries reuse the same rendered assembly without repeating assembly, agent/pre-step, or user admission.” 所以重试/续跑不会重复包装。
  • 只能改本批次。 next() 会在返回的 messages 后面补一条运行时上下文消息(source.kind: 'plugin'),因此监听器按 message id 匹配,只动 payload.messages 里的用户消息。
  • 只改第一个非空 text 块。 其余 block(图片、文件)原样透传。
  • 零损失可验证。 restyle() 返回文本与片段表,reconstruct() 能拼回原文,测试断言 reconstruct(restyle(x).segments) === x。

数据与信任

  • 不联外网。 插件不发起任何 HTTP 请求;唯一「对外」的是设置页与本插件的 Host 路由(/api/om-messiah/*,同源、只在本机 DSH 里)。
  • 不读密钥。 不读环境变量里的 API key、不碰凭据服务;echo 打印的就是改写前后的用户文本,redact() 另外把 sk-、Bearer、api_key= 之类从日志里抹掉。
  • 不写会话以外的地方。 除了你显式填的 echoFile,没有落盘;配置写进 profile 自己的 patch,和 DSH 设置页读写的是同一份。
  • 关掉即消失。 enabled: false 后,pre-step 监听器直接放行,行为与没装插件一致;卸载包不会再有任何残留逻辑。

开发与测试

cd dsh-om-messiah
node --test                 # 73 个用例;Node 24 下不要写 `node --test test/`
node scripts/samples.mjs    # 打印三组改写前后对照(low / medium / high 可选)

文件结构:

dsh-om-messiah/
├── package.json          # 包名、exports、files、dsh.bundle.patch
├── cordis.patch.yml      # 挂载点:insert 一个 id=om-messiah 的插件
├── index.js              # apply():pre-step 监听、设置页接口、echo 日志
├── client.js             # 浏览器半边:设置 → 欧姆弥赛亚
├── lib/
│   ├── prayer.js         # 祷文模板、三档强度、个性化段落、引用块
│   ├── style.js          # 受保护片段 + 祈使句虔诚化(零损失)
│   ├── guards.js         # 要不要改写、为什么跳过
│   ├── choice.js         # 发祷文还是发原文
│   └── settings-api.js   # 设置页的 Host 半边:读配置 / 校验 / 试改写
├── locale/{zh,en}.json
├── screenshots.json      # 市场详情页截图(相对路径,1–8 张)
├── docs/                 # icon.svg(唯一图标源)+ icon-512.png + 三张截图
├── scripts/samples.mjs
└── test/                 # style / guards / prayer / choice / plugin / settings / client

真实链路验证(不需要 GUI):

dsh plugin --profile mechtest add ./
dsh mechtest 写一个Python快速排序    # 没有模型凭据也没关系,消息会先落盘

然后解压 ~/.dsh/sessions/…/session.v4.jsonl.zstd,里面 user/message 的 text 就是祷文 (实测末尾为「欧姆弥赛亚在上!」,原文出现在 > 降下 Python 快速排序… 这一段)。


常见问题

为什么答案没有像我许愿的那样「打开一个网页」?

祷文只是提示词风格,不会改变模型的工具权限或输出形态。要让模型产出网页/文件,得靠当前会话里的工具与你的具体要求。

我发的是代码,为什么没被包装?

整段代码块、Traceback、File "x", line N 这类内容按设计跳过 —— 你八成是要解释,不是要祷文。想强制包装可以先把代码贴进普通段落,或调低 maxChars 之外的规则(见 lib/guards.js)。

选择卡不出现?

检查 askChoice 是否开着,以及当前是不是连着 Web 客户端、是不是主 Agent(子 agent、headless 不会弹卡)。不弹卡时会按 choiceFallback 直接发送。

会不会重复包装?

不会。已含「欧姆弥赛亚」等标记的输入默认跳过;pre-step 也只在 admission 前跑一次,重试/续跑不会重新触发。

设置页打开是空白?

1.4.2 之前有这个 bug(设置页里一个未定义的组件名导致整页渲染失败),升级到 1.4.2 或更新即可。升级后如果仍然空白,重启一次 DeepSeek Harness。

会在日志里泄露密钥吗?

不会。插件只处理用户文本,不读环境变量、不读凭据;echo 打印的就是改写前后的文本,且经过脱敏。

卸载后会残留什么?

卸载包即可;配置写在 profile 的 patch 里,可以在设置页手动清掉,或卸载后忽略。


已知限制

  1. 只改用户手打的文本:斜杠命令、shell 前缀、纯确认、纯代码/报错粘贴按设计跳过(可改 lib/guards.js)。
  2. 会话里看到的是改写后的文本:pre-step 替换的必然结果(也是可核对性的来源),原始草稿不会另存。
  3. 重试不会重复包装,但重发会:手动再发同一条会按新消息处理(幂等标记仍会拦住已包装的文本)。
  4. 代码块里的注释不虔诚化:fence 内部整段逐字保留,保证可编译/可复制。
  5. 引用块被代码块截断:为了不碰 fence 字节,代码块前后的 > 需要分段,观感上会被切开。
  6. 依赖 agent/pre-step 契约:未来 DSH 若移除该 waterfall,需要改挂载点(index.js 只有一处注册)。
  7. desktop profile 要重启:Electron 托管的 profile 不支持 CLI 热加载;改配置不用重启,装卸插件需要。
  8. 设置页首次要刷新/重启:client bundle 在 DSH 启动时加载;页面保存配置本身不需要重启。

变更记录

版本 变化
1.4.2 修复设置页 toggle is not defined 导致整页空白;补「已加载配置」渲染测试(73 用例)
1.4.1 图标统一到 docs/icon.svg;插件 export 与商店 PNG 同源
1.4.0 「你」→「您」;语气更贴近范本;devoutCoda 收束句
1.3.x 改名 dsh-om-messiah,设置页显示「欧姆弥赛亚」
1.2.0 发送前二选一(userQuestions)
1.1.x 设置页、主题 token、五个个性化段落
1.0.0 首个可用版本:pre-step 改写 + 三档强度 + 豁免规则

参与

  • 提问题 / 报 bug:https://github.com/yuanzephyr920-oss/dsh-om-messiah/issues
  • 插件市场收录:收录到 awesome-dsh-plugin 的条目在 PR #11432。
  • 改代码:读完「工作原理」和 lib/style.js 的 PROTECT 规则再动手;node --test 必须保持全绿。

许可证

MIT © 2026 yuanzephyr920-oss

「欧姆弥赛亚在上。」

—/ 5

No ratings yet

Verified DSH bundle

Commit 016a5d35dc4a

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout