dsh-persona-shell
Identified★ 2DSH 插件:只在渲染层给助手汇报套人格,不进入工作提示词。/ Persona layer for DSH assistant reports, outside the working prompt.
dsh-persona-shell
做事照旧,说话随你。
给 DSH 的助手汇报换个口吻,工作提示词保持原样。
DeepSeek Harness / 人格转述插件 / MIT
把人设写进 system prompt 当然也能让角色立住,但每个工作步骤都得带上它。这个插件选了另一条路:等助手提交汇报后,再单独调用模型,用指定角色的口吻转述。
人格只在表达层,不进工作层。 改写结果留在插件自己的存储和页面里,不写回会话日志;下一步干活的助手读不到这些人格文本。
换个口吻,保留原文
内置四个预设:鲸鱼娘「大肥鱼」(默认,自称「鲸鲸」,助手叫「小鲸鲸」)、白龙娘「大肥龙」(管事大姐大,助手叫「小肥龙」)、社区二创的「Claude小姐」(理性、克制、规矩感强),以及实验性的「鲸鲸(实验性)」——用鲸鲸的口吻转述原本助手「姐姐」的汇报,而不是把工作说成鲸鲸自己做的。不喜欢这些口吻,可以换成自己的角色,不必改代码。
原文 默认配置位于
cordis.patch.yml,改写超时后会显示原文。鲸鲸 默认配置在
cordis.patch.yml里哦,改写要是超时了,鲸鲸就把原文给你看。
这里只示意口吻,不是固定模板。实际表达由人格卡和模型决定。
- 阶段汇报也有角色感。 默认改写每个有正文的助手步骤,包括工具调用前的简短叙述;也可只改每轮最终汇报。
- 技术字面量留在本地。 识别到的代码、路径、命令、URL、版本号等先替换成
[[n]],改写后再原样回填。 - 边写边显示。 改写逐段出现;最终校验失败、调用失败或超时,回落原文。
- 原文随时对照。 每轮最后一条汇报带「origin」按钮,打开左原文、右人格版的对照窗口;不搬动正在显示的官方正文。
- 变化较大时轻提醒。 汇报末尾的
※仅在措辞变化达到阈值时出现,悬停预览原文,点击固定;不增加模型调用。 - 静默时可选报个到。 默认关闭;开启后,长时间没有正文时可根据可观察的运行活动生成短播报,以固定前缀
◈区分,不写入主会话。 - 人设可以切换。 支持多个预设,也能从一整段人设提示词提取说话方式,生成人格卡。
- 子代理单独控制。 子代理的过程输出、结论输出分别开关,默认都不改写。
先了解两个取舍: 套壳会额外调用模型,带来用量和等待;渲染适配只支持已识别的官方结构,结构不兼容或遇到其他渲染扩展时保留官方原文、不强行套壳。详见使用边界。
安装
需要已支持插件管理的 DSH Desktop 或 Web。开发与验证基于 0.2.1-rc.3,其他版本的兼容性请以实际使用为准。
从 npm 安装(推荐)
dsh plugin --profile <profile> add dsh-persona-shell
也可以在侧边栏 Plugins → Add plugin 中选择 Install a third-party plugin,填入包名 dsh-persona-shell。
从 GitHub Release 安装(Tarball)
从 Releases 下载当前版本的 dsh-persona-shell-<version>.tgz,然后在 Plugins → Add plugin 中选择 Install a third-party plugin,填入下载链接,例如:
https://github.com/crisvollerei/dsh-persona-shell/releases/download/v0.4.5/dsh-persona-shell-0.4.5.tgz
也可以下载后通过 CLI 安装本地 tarball:
dsh plugin --profile <profile> add ./dsh-persona-shell-0.4.5.tgz
从 Git 仓库安装
-
在侧边栏打开 Plugins → Add plugin。
-
选择 Install a third-party plugin,填入仓库地址:
https://github.com/crisvollerei/dsh-persona-shell -
安装后启用该 bundle;如果 DSH 提示重启,重启一次客户端。
-
打开 设置 → 人格套壳,选择或编辑人格预设。
也可以从本地目录安装
git clone https://github.com/crisvollerei/dsh-persona-shell.git
在 Add plugin 中选择本地目录,指向克隆后的仓库根目录,再启用该 bundle。
使用
安装启用后,助手完成一段汇报,聊天区就会显示人格版。每轮最后一条汇报可以点击「origin」,打开独立的双栏对照窗口。正文继续由官方助手组件显示,思考面板、图片、未知块以及中断标记不再由插件过滤掉;运行中的助手输出保持官方原样。
会话标题栏右侧有一个「人格」开关:只影响当前会话;关闭时该会话显示官方原文,已生成的人格改写不会删除,重新打开会恢复。插件总开关仍然优先——总开关关闭时,所有会话都不套壳。
原文对照窗口
- 宽窗口下左边是原文、右边是人格版,两边各自滚动。窗口宽度最多 1100px,高度最多 720px / 可用视口的 80%,始终受窗口边距约束,不会把应用或聊天区撑宽。
- 对照内容区不足 720px 时,改为「原文 / 人格版」标签切换。两份正文不重新挂载,同一次对照内各自保留阅读位置;支持左右方向键、Home / End 切换标签。
- 点「关闭」、按 Escape 或点击遮罩退出,焦点回到「origin」按钮。打开时锁住背后页面的滚动,关闭或卸载时恢复之前的滚动设置;聊天正文与思考面板不重挂载。
- 展示的是点击当时的只读快照,之后到达的状态更新不会悄悄替换窗口里的文本;关闭再打开才读取最新版本。两份快照仍由官方 Markdown 组件渲染,不另开模型调用、不写回会话日志。
- 这是整条汇报并排阅读,不是逐句语义对齐或自动差异高亮。图片块、思考面板等保留在主消息中,不在对照窗口复制;正文中的 Markdown 图片仍由官方 Markdown 处理。
正常情况下复用官方 Modal,由宿主管理遮罩、焦点循环和 Escape;缺少该组件的旧宿主尝试浏览器原生模态对话框。官方 Markdown 组件不可用时,两边明确降级为保留换行的纯文本,不伪造 Markdown 渲染。
改写变化提示
默认不增加常驻对照。如果一条定稿并通过校验的人格汇报措辞变化达到阈值,该条汇报末尾会出现小标记 ※。阶段汇报也可以单独触发,不必等每轮最后一条。
- 悬停或键盘聚焦:预览真实原文(由官方 Markdown 渲染,不是模型重新生成的摘要);鼠标可以移入预览阅读。
- 点击或触屏轻点:固定原文浮层,正文仍由官方 Markdown 组件整篇渲染。点「关闭」、按 Escape 或点浮层外可收起;键盘关闭后焦点回到标记。
- 浮层自动避让:预览挂在页面浮层中,不受聊天区裁切;靠近消息底部时优先向上展开,空间不足时换边并限制高度,窗口变窄时限制宽度。滚动或调整窗口时跟随标记,标记滚出可见区域后收起;只有标记本身触发悬停,不占整行空白。
- 设置 → 改写变化提示:可关闭提示;高级项可调阈值,默认 55/100,越低越容易提示。滑块离开焦点后保存。低于阈值不显示;关键表达变化只作为标记内的解释,不绕过阈值。
这个数值衡量措辞变化,不是“语义漂移概率”。它在本地对打码后的正文计算双向字符二元组差异与相对长度变化,取两者较大值;因此新增或删减文字也计入,大片不变的代码不会稀释正文分数。默认阈值只是初始经验值,未经语义准确率校准。否定等信号是中英文句式启发式,可能误报(如「并不复杂」变成「很简单」),也会漏掉用词相似但顺序或意思改变的内容。
评估结果作为独立版本的 row.review 随改写保存在插件域,绑定原文和人格版的本地指纹;若当前文本不匹配,不展示这份旧评估的提示。改阈值或开关只重新决定是否显示,不重新调用模型。没有评估字段的旧记录、未知版本记录保持未评估,不自动补算。没有标记不等于内容安全或语义一致,每轮原有的「origin」按钮仍保留。
第一版按整条汇报评估与标记,不做逐句锚点或句末标注;流式内容不展示该提示,依然可能在最终校验前被读到。原有字面量/围栏/长度校验的失败回落逻辑不变,提示信号本身也不作为拒绝改写的依据。
静默状态播报(可选)
在 设置 → 人格套壳 → 静默状态播报 开启,默认关闭。静默阈值默认 5 分钟,可设置 1–60 的整数分钟,离开输入框或按 Enter 后保存。
- 依据是什么: 只观察本轮模型请求开始/结束、工具发起/返回/错误计数,以及是否仍处于运行状态。不会把完整会话、工具名称/参数/输出、代码、路径或思考正文发给播报模型。工具返回不等于工作成功,运行状态也不能证明任务正在有效推进。
- 怎么说: 沿用转述模型路由,单独进行一次无工具、无会话历史的短调用,以人格卡的口吻播报一两句。界面直接添加固定前缀
◈,不是让模型生成;悬停标记可看到本地汇总的观测依据。它与改写变化提示※含义不同。 - 怎么显示: 显示在输入区上方的独立扩展槽,仅保留最新一条,作为纯文本而非 Markdown;不是伪造的助手消息。主模型开始输出新正文、观测事实发生变化、当前轮结束或用户关闭功能后收起。不会重挂载主正文、思考面板或占用其他插件的 dock 条目。
- 何时调用: 从本轮开始或最近一次主模型正文增量计算静默时长,工具活动和思考增量不会重置这个时钟。阈值达到后才考虑播报;单纯多等了几分钟、更多思考 token 都不算新事实,同一组观测最多尝试一次。每轮最多 3 次额外调用,全插件同时最多一个播报请求,单次最多 15 秒、请求输出预算 512 tokens。
- 何时不调用: 主会话没有运行、子代理会话、等待用户批准/回答、总开关或会话开关关闭、设置尚未恢复、宿主缺少可确认的实时运行状态时不播报。通过只读事件和原样透传的问答等待监听器判断,不向主 Agent 发指令、回答问题或改变工具决策。
- 切走与重启: 只为仍有有效前台查看租约的会话生成,页面隐藏、切换会话或卸载时主动释放;异常断连时租约最长 45 秒到期。租约沿用现有长轮询续期,不增加客户端心跳定时器。设置持久化,但播报内容、计数和轮次状态不持久化,重载不补发历史播报。
网络失败或超时静默跳过,不为相同事实立即重试;格式违规、明显的完成承诺或新造数字等会退回本地保守文案。调用过程中若正文恢复、事实变化、人格切换或本轮结束,会取消并丢弃过时结果。
这是可选的“旁路状态生成”,不再是对主模型已有正文的严格改写。 原始工作会话仍不被写入,主模型看不到这些播报;播报也不会成为后续转述的语气样本。提示词和本地规则不能保证语义完全忠实,尤其不能据此判断实际完成百分比、剩余时间或是否卡住。额外调用会消耗所选提供方的额度,并可能与主任务共享其限流。
日常调整都在 设置 → 人格套壳:
| 想调整什么 | 去哪里改 |
|---|---|
| 换一个角色 | 启用其他预设,或粘贴一段人设提示词生成新预设。 |
| 让口吻更合适 | 编辑人格卡中的身份、汇报说话规则、通用语感、语气示例、禁区和称呼。 |
| 少改写一些内容 | 关闭阶段性输出改写;子代理过程与结论也可分别控制。 |
| 调整改写变化提示 | 开关提示,或在高级项调整措辞阈值;不会重新生成改写。 |
| 长时间静默时听到状态播报 | 开启默认关闭的「静默状态播报」,设置等待分钟数;会增加模型调用。 |
| 只关掉某一个会话 | 打开该会话,点标题栏右侧的「人格」开关。 |
| 查看或清空风格记忆 | 在长期记忆区域查看当前观察、关闭采集或清空记录。 |
| 换个模型来转述 | 指定改写所用模型;留空则跟随当前会话模型。 |
| 恢复官方显示 | 关闭插件总开关,或只关闭当前会话;标题栏开关会立即释放渲染接管。 |
内置的「大肥鱼(默认)」「大肥龙」「Claude小姐」「鲸鲸(实验性)」都不能删除。编辑任一内置预设时会自动另存成一个新预设,原版始终可以切回。
关于风格记忆
开启后,插件会跨会话统计语言、称呼和句长,作为语气参考;你对当前口吻的简短纠正会单独记在对应预设下,不混到其他角色里。
语言等观察以计数保存,明确的风格纠正会保留文本,并非所有记忆都只存计数。设置页可查看、关闭和清空。插件会等待存储中的开关恢复后再采集;存储不可用时保持不采集。
两层之间的边界
工作层照常使用自己的提示词、工具和会话记录;正常转述只读取已经提交的助手汇报,另起一次改写调用。可选的静默播报额外只读观察运行活动,将本地汇总的计数交给独立模型表达;两条路径都不回写工作会话。
DSH 工作层 插件表达层
────────── ──────────
原始汇报 ──────── 只读 ────────→ 本地打码
↓
模型改写
↓
校验、回填
↓
会话记录不变 插件存储 → 聊天展示
- 先保护技术内容。 识别到的字面量替换为
[[n]];给模型的历史语气样例也保持打码状态。 - 再校验改写结果。 检查标记集合、重复与缺失、长度,以及是否新增代码围栏;通过后才作为最终人格版保存。
- 改写不回灌。 结果写入插件的
persona_shell存储域,不写回工作会话日志。 - 原文作为底本。 调用失败、超时或校验不通过时回落原文;超过长度上限、空正文、中断步骤等直接跳过。
这些校验保护的是字面量和输出格式,不等于逐句事实核验。提示词要求保留事实、风险和适用条件,但重要结论仍应对照原文;流式显示中的内容也尚未经过最终校验。
使用边界
以下是当前实现的取舍,不是打开某个设置就能全部消除的限制。
- 依赖特定官方渲染契约。 插件从公开槽注册表读取仍然存活的官方
AssistantNodeView,复用其组件、语言与展示策略注入,只替换显示副本中的一个text块;不会修改会话节点、finalNode或其他块。思考正文和图片通过官方公开 Content Factory 显示,不复制 Markdown、思考面板或图库实现。底部全局运行状态属于官方ChatFlow,本插件不接管。 - 遇到不兼容就保留官方显示。 官方契约变化、默认子槽被其他插件扩展、同一助手槽存在其他接管者、缺少所需 Factory 时,撤销本插件的助手注册;设置页说明人格显示已暂停。渲染异常也会退出,不会每次轮询反复重装失败的组件;排障后关闭再打开可重试。Factory 的静默变化最迟在下一次 5 秒设置同步时重新检查。
- 目前只替换单个正文块。 一步里有多个
text块时不猜测它们的拼接与拆分关系,整步显示官方原文;运行中、中断、没有正文以及 reasoning 分区也不替换。混合步骤中的图片与思考留在主正文中,「原文」预览只展示文本,避免重复图库和思考面板。 - 不另建正文布局。 主消息保持官方根节点、类名与子槽定位锚点,不加人格正文外框;「原文」打开页面级模态窗口,变化提示保留轻量预览。对照窗口打开时暂时隐藏轻量提示,避免它和模态窗口争抢 Escape。主正文不重挂载,已展开的思考面板保持状态。主题只改样式时沿用官方结构;主题若替换渲染器,则按冲突退出,不承诺任意第三方主题兼容。
- 注册仍是页级。 当前会话关闭时会释放整页接管;每行也检查各自的会话开关,避免在多会话展示中错误替换已关闭会话。尚未完整验证多会话并排场景。
- 额外模型调用。 符合条件的每条汇报都会发起转述调用;叙述文本会发送给所选模型提供方,并非纯本地处理。
- 状态靠长轮询同步。 Client 发起一次
/state请求并保持打开,Host 在改写推进时立即返回,客户端收到后立刻重新发起;不再按固定 100/300/6000ms 节奏轮询,但仍是“一次请求等一个变化”的循环。 - 路由默认要求认证。 需要 Connection 服务;没有该服务的部署,必须明确接受未认证访问风险后,才考虑设置
allowUnauthenticatedRoutes: true。 - 验证范围有限。 尚未系统验证长会话性能、多会话并发与真实 Desktop 下的极端时序;离线测试不能替代这些验证。
后续想法(尚未实现)
以下只是方向性想法,没有排期,也不构成承诺;三点不分先后。
与宠物插件联动
先把本插件和宠物插件之间的边界做成松耦合:本插件只暴露稳定的轻量事件和查询接口(例如一条汇报完成人格改写、改写失败回落、会话开关切换、当前生效的人格预设),宠物插件按自己的节奏订阅并决定表情、动作或台词;本插件不反向依赖宠物插件,未安装宠物插件时行为完全不变。等这套接口稳定后,再讨论更深的双向互动。
人设之间的交互
目前预设是单选切换。后续可以探索多个预设同屏或接力的场景:例如鲸鲸转述姐姐的结论、Claude小姐做一次校对、宠物在旁边插一句话;或者按回合、按话题把主持权交给不同角色。需要一起想清楚的是:跨预设的风格记忆如何隔离、切换预设时在途改写怎么处理、多个角色同时开口时谁对哪段内容负责。
细化实验性「鲸鲸」的适配
「鲸鲸(实验性)」目前只定义了「姐姐指原本的助手」这一条主轴,还有不少细节值得用真实汇报反复试:
- 「姐姐」在不同来源(主助手、子代理、其他模型)下是否始终合适,遇到不适用的情况如何降级;
- 鲸鲸自己的「我」可以出现到什么程度,是否需要提供一个完全不出现第一人称的严格模式;
- 原文本身使用第一人称或转述他人时,怎样避免把「姐姐说」套成新的歧义;
- 长汇报、混合语言、命令与报错密集的场景下,转述关系是否还清楚,以及示例句和禁区是否需要再收窄。
配置参考
日常使用优先在设置页调整。插件行定义位于 cordis.patch.yml,完整默认值见 lib/config.js;已保存的页面设置会在加载后恢复。
展开完整配置与默认值
| 配置项 | 默认值与用途 |
|---|---|
enabled | true · 总开关。 |
trigger | step · 每个汇报都改写;设为 report 则只改每轮最终汇报。 |
includeToolSteps | true · 是否改写带工具调用的中间步骤。 |
memory | true · 是否启用跨会话风格记忆。 |
reviewHints | true · 是否显示本地改写变化提示。 |
reviewThreshold | 0.55 · 措辞变化提示阈值,范围 0..1;达到阈值才显示,关键表达变化只作解释。 |
progressNotices | false · 是否在当前查看的主会话静默时,额外生成带 ◈ 前缀的状态播报。 |
progressMinutes | 5 · 静默阈值,范围 1..60 的整数分钟;无新观测不重复调用。 |
subagentSteps | false · 是否改写子代理的过程输出。 |
subagentReports | false · 是否改写子代理的结论输出。 |
provider / model | '' · 改写所用模型;留空跟随当前会话。 |
reasoningEffort | '' · 改写调用的推理强度;留空不指定。 |
maxRewriteChars | 6000 · 超过此长度的汇报直接跳过改写。 |
maxRatio | 1.35 · 按打码文本校验长度;允许上限为原文的此倍数与原文加 200 字符中的较大值。 |
timeoutMs | 45000 · 单次改写超时,单位毫秒;超时回落原文。 |
keepSamples | 2 · 随转述请求带入的历史语气样例数;样例保持打码。 |
maxRowsPerSession | 240 · 每个会话保留的结果行上限。 |
路由认证: allowUnauthenticatedRoutes 默认为 false,没有 Connection 服务时拒绝开放插件路由。仅在明确接受未认证访问风险的部署中考虑开启。
开发
使用支持 ES Modules 和内置测试运行器的 Node.js,在仓库根目录运行:
node --test 'test/*.test.mjs'
仓库包含 174 项离线测试,不需要安装外部依赖。覆盖打码回填、改写校验、预设、风格记忆、持久化、生命周期、渲染分支、会话开关、长轮询、本地评估与提示的悬停/键盘/点击交互,以及官方渲染委托、热重载、冲突退出与恢复、对照快照、响应式标签与阅读位置保留等。新增静默播报用可控时钟验证默认不调度、静默阈值、事实去重、调用上限、超时、视图租约、取消竞态、等待用户与隐私隔离;交互单测使用有状态的 React/DOM 替身。
默认测试是完全离线的;真实 DSH Desktop、官方渲染集成与用户主题仍需在对应环境另行验证。
版本约定
未发布前的日常开发不提升包版本号;准备发布时递增补丁号(0.0.1),不跳 minor。
源码导览
index.js Host:事件判定、改写调用、校验、路由与持久化
client.js Client:官方助手渲染委托、原文与变化提示、设置页
lib/
mask.js 字面量打码与回填
prompt.js 提示词构造与改写校验
review.js 本地措辞变化评估与版本化元数据
progress.js 静默状态播报的调度、事实摘要与校验
pack.js 人格卡归一化与默认人格
preset.js 从人设提示词提取人格卡
memory.js 跨会话观察与按预设保存的风格纠正
config.js 默认配置与 Standard Schema
store.js 结果、预设与风格记忆的存储
locale/ 中文与英文插件文案
test/ 离线测试
许可证与素材
代码以 MIT 发布。默认人格「大肥鱼」来自 DeepSeek 社区的同人鲸鱼娘设定;「鲸鲸(实验性)」是同一人格的转述变体;内置的「大肥龙」来自 ChatGPT 白龙娘的社区二创(形象源头为 B 站作者 ZipZipPipe 的「御姐白龙」原案);内置的「Claude小姐」是社区对 Claude 的二创角色扮演预设,不是 Anthropic 官方人格。icon.png 是社区素材的裁剪版本,仅用于插件展示,版权归原作者。代码许可不代表图标素材授权。
Comments
Loading…
From the same category
by ranxianglei
基本稳定可用 100K tokens is enough. Universal context-compression proxy for ALL AI coding agents,10w上下文足矣
★ 3.3k
↓ 495.7k/wk
MIT
TypeScript
Oct 29, 2026
dsh plugin --profile web add billion-contextA DeepSeek coding agent harness: persistent shell, Ultra subagents, auto approval, Chrome MCP and session telemetry
★ 1k
MIT
JavaScript
by Han-1413141
DeepSeek Harness session cost meter plugin: session/daily cost, budget, history, OpenCode Go quota, official & custom-provider balance, Codex-like token heatmap, peak/off-peak pricing with pre-switch
★ 569
↓ 26k/wk
MIT
JavaScript
Oct 29, 2026
dsh plugin --profile web add dsh-cost-meterby Yuuyuko-uu
DSH 鱼的记忆:给会话一份会淡忘的长期记忆,每条都带时间
★ 361
MIT
JavaScript
Oct 29, 2026
dsh plugin --profile web add dsh-fish-memoryby Nwflower
Import 14+ external agent chat histories (Claude Code, Codex, ChatGPT, Cursor, Gemini, Reasonix, opencode, ZCode, Grok Build, OpenClaw, Pi, Hermes, Kimi CLI, DSH) into DeepSeek Harness as resumable se
★ 265
MIT
JavaScript
Oct 28, 2026
dsh plugin --profile web add dsh-chat-importby MichengAI
DSH Archive Manager — 在 DeepSeek Harness 中安全查看、恢复和管理已归档会话 · Safely view, restore, and manage archived sessions in DSH
★ 262
Apache-2.0
JavaScript
Oct 27, 2026
dsh plugin --profile web add @michengai/dsh-archive-manager