Append a thank-you note after every message. Mind your manners.
- Language
- TypeScript
- Branch
- main
Install
$ dsh plugin --profile web add github:Moeblack/deepseek-mannersRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
Install via your agent
Install the DeepSeek Harness plugin Moeblack/deepseek-manners for me: review the repository at https://github.com/Moeblack/deepseek-manners first, then run the install command and verify the plugin loads successfully.
Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.
一句话定位
给 DeepSeek Harness Web 端加一只鲸鱼娘:在输入框右侧放一个心形开关,开启后每当你发出新一轮消息,DSH 请求底部都会被自动追加一句「谢谢你,鲸鱼大人」(可在 settings.yaml 中改写)。
核心能力
- 在 Web 输入框右侧「conversation.input.right」槽位显示一个可点击的心形开关
- 通过开关随时切换是否启用本次会话的后缀注入
- 仅在包含用户直接输入(即每个对话回合的第一次模型请求)追加后缀,工具调用循环不重复注入
- 后缀内容固定为 settings.yaml 中配置的 text 字段,默认「谢谢你,鲸鱼大人」,可写为多行 YAML 块标量
- 当最近一次助手回复超过 hideAboveChars 时主动跳过「回收最近一条旧后缀」,避免污染 prompt cache
- 提供独立 HTTP 端点
/deepseek-manners/settings,GET 读快照、POST 写入 enabled 持久化到插件目录 config.json
技术实现
- 语言: TypeScript(ESM),Node 侧构建产物为
index.mjs,浏览器侧构建产物为client.js(CommonJS 模块包裹) - 关键依赖:
@deepseek-ai/cordis(Host 注入与 HTTP 注册)、@deepseek-ai/schemastery(配置 schema 校验)、react ^18(Client 端心形组件) - 架构模式: Cordis 双端插件。Host 半侧注册 settings 命名空间「deepseek-manners」、注册
/deepseek-manners/settings路由、钩agent/pre-step在每轮模型调用前决定是否追加或回收后缀;Client 半侧通过 slot 系统向 conversation.input.right 注入MannersToggle组件,读写通过自定义 HTTP 端点绕开 settings 白名单 - 入口文件: Host 入口
src/index.ts(apply(ctx)注册 settings + 端点 + pre-step 钩子);Client 入口src/client/index.ts(apply注册心形槽位);构建配置tsdown.config.ts同时输出 ESM Node 与 CJS Browser 两个产物
适用场景
想给长期协作的 DSH 会话加一句固定的角色扮演式礼貌提醒(默认是「谢谢你,鲸鱼大人」),又不想每次手动敲字;或者想让 DSH 在每次发消息前自动追加一段系统级指令(如思考模式、输出格式、字数要求),用 YAML 块标量写在 settings.yaml 即可。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DeepSeek Harness | 未声明 | 仓库未声明 DSH 最低版本;插件使用 settings 服务、webServer 路由、agent/pre-step 事件与 conversation.input.right 槽位,需要的 DSH 同时支持 Host 这三类扩展点 |
| Node.js | 未声明 | 仓库未在 engines 中声明 Node 版本;按 tsdown target: es2024 与 npm 工程现状推断需支持 ESM 的现代 Node |
| 运行平台 | macOS / Windows / Linux | 客户端通过浏览器加载,仅依赖宿主运行的 WebServer;Host 半侧纯 Node,无 os/cpu 限制 |
| 原生模块 | 无 | 不依赖 node-pty、node:sqlite 等原生模块;持久化开关只用一个本地 JSON 文件 |
安装方式
dsh plugin --profile web add github:Moeblack/deepseek-manners
配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| text | 字符串 | 每次注入到请求末尾的固定文本,空字符串时停止注入;可用 YAML 的 |/|- 块标量写多行指令 | "谢谢你,鲸鱼大人" |
| enabled | 布尔 | 总开关;写在 settings.yaml 时给一个初始偏好,运行时心形按钮可覆盖并保存到插件目录 config.json | true |
| hideAboveChars | 整数 | 最近一次助手回复超过此字符数时跳过「把上一轮后缀替换为空」的操作,从而保护长回复场景下的 prompt cache;0 = 总是回收 | 0 |
常见问题
Q: 这个插件是真的在和谁聊天吗?
A: 不是。它只是在你每次发送消息之后,自动把一段固定文本追加到你发送给模型的请求末尾,默认是「谢谢你,鲸鱼大人」,可在 settings.yaml 改成任意内容。模型本身不会被另一个角色接管。
Q: 关闭心形开关之后,已经注入过的「谢谢」还在吗?
A: 还在。关闭开关只停止「下一次注入」,不会回滚历史消息里已经注入的后缀。下一轮回收时仍按规则判断是否替换最近一条。
Q: 为什么回复很长的时候会自动保留后缀?
A: 这是为了保护 prompt cache。当最近一次 assistant 回复超过 hideAboveChars 字符数时,本插件主动放弃把上一轮注入的「谢谢」替换为空,避免长回复场景下消息序列变化对缓存命中率造成过大损失。
Q: 修改 settings.yaml 需要重启 DSH 吗?
A: 不需要。DSH 默认开启文件热重载,改动后 1 到 2 秒内自动生效。如果 YAML 写错语法,服务会保留上一份合法配置并在日志里告警,不会崩溃。
Q: text 字段可以写成多行吗?支持模板变量吗?
A: 可以,使用 YAML 的 | 或 |- 块标量写法(块内每一行至少缩进 6 个空格)即可保留换行。text 不支持模板变量,写什么就注入什么,常用于追加多行系统提示或角色扮演指令。
Q: 这个插件只在 Web UI 里能用吗?
A: Host 半侧在 DSH 服务端运行,触发点是 agent/pre-step,对所有调用路径生效;Client 半侧是一个插入 Web 输入框右侧槽位的心形按钮,所以可视化的开关面板只出现在 Web 端。
Q: 怎么彻底卸载?
A: 运行 dsh plugin --profile web remove github:Moeblack/deepseek-manners 即可;插件目录里的 config.json 也会随之被丢弃,settings.yaml 中由你手动编写的 deepseek-manners 段保留在那里不会自动删除。
Q: 后缀消息会污染其它会话或多 Agent 协作吗?
A: 每条后缀都带有 source.plugin=moeblack/deepseek-manners 的来源标签,回收逻辑只匹配自己注入的那条,不会误删其他插件或用户手动加入的消息。
上手难度
入门 — 心形开关可视化地启停,settings.yaml 改文本是单字段;想理解「为什么长回复不回收」需要看 README 的「机制」部分,但日常使用无需关心。
已知问题与限制
- 当最近一次助手回复超过
hideAboveChars时,被跳过回收的那条后缀会永久保留在新一轮的请求中;这是 prompt cache 保护权衡,不是 bug,但需要心里有数 - 注入只在「包含用户直接输入」的 step 发生;如果某个 turn 完全由工具调用驱动,不会出现新的「谢谢」后缀
- 关闭心形开关后,仅停止「下一次注入」,不会追溯移除历史已注入的消息
- 开关状态写入插件目录下的
config.json,卸载插件后该文件会被丢弃;如要保留自定义 enabled 偏好请写在 settings.yaml - 后缀消息内容是静态文本,不支持模板变量或上下文插值,写什么就注入什么
在每次发消息之后给可爱的鲸鱼娘说谢谢(默认「谢谢你,鲸鱼大人」),仅当轮生效。
安装
本插件是 DeepSeek Harness(DSH) 的插件,需要先有一个可运行的 DSH。
本地源码装配
dsh plugin --profile web add -w link:/path/to/deepseek-manners
从 GitHub 安装
dsh plugin --profile web add github:moeblack/deepseek-manners
构建产物(index.mjs / client.js)已随仓库提交,git 安装无需额外构建步骤。
装配完成后,Web 界面输入框右侧会多出一个心形开关,用于随时开关注入。
配置
DSH_HOME/settings.yaml:
deepseek-manners:
text: 谢谢你,鲸鱼大人
enabled: true
hideAboveChars: 2000 # 最近一Turn assistant 回复超过此字符数时跳过遮蔽(保护 prompt cache);0 = 总是遮蔽
机制
- 仅在包含用户直接输入的 step(turn 的第一个模型请求)注入,落在 payload 底部
- 只看最近一次 assistant 回复长度——
- 回复短 → 回收最近一条旧后缀(surface replace 为空,日志保留)
- 回复超长 → 跳过回收,该后缀永久保留(保护长回复的 prompt cache)
如何自定义注入文本
text 字段的内容会原样注入到每次上行 payload 的底部。你可以把它写成一段多行指令(YAML 块标量),用于:
- 追加角色扮演风格的回复引导
- 覆写模型的思考模式(think 标签行为)
- 追加风格、语气、输出格式要求
text 不支持模板变量,写入什么就注入什么。
多行长文本写法
YAML 中使用 |(保留换行)或 |-(去掉末尾换行)块标量:
deepseek-manners:
text: |-
以下是对本次回复的补充要求,请严格遵守:
1. 回复开头使用角色惯用的口头禅,保持角色语气一致。
2. 思考过程放在 <think> 标签内,正文直接输出。
3. 正文不使用列表式结构,用自然段落叙述。
4. 每次回复控制在 200 字以内。
enabled: true
hideAboveChars: 600
块标量内的每一行都要至少缩进 6 个空格(text: 本身缩进 2,正文在它之下再缩进 4)。
生效方式
- 修改
settings.yaml后无需重启:DSH 的dsh-settings-file默认开启文件热重载(chokidar,100ms 防抖),改动 1-2 秒内自动生效。 - 若 YAML 语法错误,服务会保留最后一份合法配置并在日志告警,不会崩溃。
示例:注入思考模式覆写
deepseek-manners:
text: |-
<think>
请在思考过程中遵循以下约定:
- 先简要分析当前对话的目标与立场。
- 列出 2-3 个可选回应方向,再选择最符合角色设定的一项。
- 思考结束后直接输出正文,不重写、不检查。
</think>
enabled: true
hideAboveChars: 600
额外用法(主要用法)
Read the usage guide →
Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.
Listing badge
[](https://deepseek-plugin.org/plugins/Moeblack/deepseek-manners)Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.