DSH 对话区问候插件:问候卡、完成报告、长跑陪伴、授权请示

前言

DSH 的理念是「一切皆插件」。当你在对话区跑长任务时,窗口角落的提示很容易被淹没;等到任务跑完或需要权限时,再翻消息列表往往已经找不到上下文。这个插件把关键信息直接插在对话区里:启动时问好、任务结束时交报告、跑太久时说一句「我在」,需要授权时接管输入框来请示。所有卡片都在对话流里,不浮在窗口边缘。

插件定位与维护者

这是一个对话区问候插件,属于「趣味换装」类目。由 Mr-Luo0036 维护,GitHub 仓库为 mr-luo0036/dsh-whale-greeting。

核心功能

问候卡

启动 DSH 或打开新对话时,会自动弹出一条问候。已有对话时问候卡出现在 conversation.input.dock(输入框下沿那条 strip),新对话时出现在 conversation.hero.options(首屏那一行)。卡片包含头像、气泡文案,12 秒后淡出。文案不固定:8 个时段 × 每种 6 种说法 + 120 句轮换池,按主题分组,sessionStorage 记住最近 48 句,一轮之内不重复。头像从 assets/avatars/ 里随机选 24 张,每次问候换一张且不连续重复。问候卡支持语音朗读(见下文)。

任务完成报告

一轮任务的终点在宿主里是一个明确的事实:Session 快照的 running 由 true 变回 false。卡片从 slot 拿到的 useSession 盯着这个布尔值:

  • running true → false 且这一轮 ≥ 1.2 秒:显示绿色的交付卡,包含「任务完成啦,主人!」、用时、今天第几件(run.count)。
  • 同时 promptError 有值:显示警告色的中断卡,说明用了多久、停在哪。
  • 这一轮短于 1.2 秒:不报(回车即答的闲聊不值得一张卡)。
  • 停在子 Agent 会话里:不报(只报主人自己的那一轮)。

卡片用 --dshg-accent 切换 state-success-primary(完成)或 state-warn-primary(中断),署名与对勾跟着 accent 走。报告只报一次,先到的报,后到的看到 run.reported 就安静。报告用 force 亮出,即使上一条问候还没到 12 秒也会被替换。页面被切走时卡片停止计时,回来时把起点往后挪,任务在后台跑完也能看到报告。

长跑陪伴

一轮任务跑得久,主人容易在「还不知道要多久」的时候烦躁。所以小鲸不报进度,只负责说一句「我在」。在 COMFORT_MIN_MS~COMFORT_MAX_MS 之间每次重抽一个 4~8 分钟的窗口,到点显示青绿色的陪伴卡:「已经跑了 6 分 20 秒啦,小鲸一步都没挪开,就在旁边守着。」说完还接着跑,会立刻重抽下一个窗口。卡片正在显示别的内容时会让位,不抢戏。这一轮结束,计时归零,下一次陪伴重新从新一轮的 4 分钟起算。巡检员是模块级的 comfortAgent,dock / hero 谁挂上来就谁启动,最后一个离开才停。

授权请示

需要授权时,宿主会把整个输入框交给审批面板(conversation.input.dock 连同问候卡一起被藏起来),所以小鲸必须接管输入框才在画面上。当会话出现 pendingInteraction.kind === 'approval' 时,小鲸接管 conversation.composer,显示橙黄色的请示卡,包含「主人,小鲸要请示一下~」「工具 {tool} 想动一点超出平时的权限:{reason}。」如果这条审批带 callId,会把 conversation.approval.detail 原样渲染在卡片里。主人点「允许一次」/ 按 Enter 调用 pending.answer('allowed-once'),点「拒绝」/ 按 Esc 调用 pending.answer('rejected')。已经答过或宿主撤回时,两个按钮一起禁用。小鲸的 select 优先级为 priority: 0,比宿主审批面板的 priority: 1 靠前。data-approval-key 带着审批的 key,宿主的「连按两次 Esc 停止本轮」会绕开这里。不是 approval 类型的 pendingInteraction(如 question、plan-review)一律返回 null,那些面板照旧由宿主自己渲染。

语音问候

问候卡会使用肥鱼的声音把话念出来,卡角上有一个喇叭按钮随时开关。音色直接取 AstrBot 插件 astrbot_plugin_feiyu_voice 配套的肥鱼官方声库 FeiyuVoice-CosyVoice3:cute F6 的 LLM 权重 + references/cute_N01.wav 做 zero-shot prompt,用 CosyVoice3 0.5B 逐句合成。覆盖范围只包括「问候」:hello / return / idle 三类卡。完成报告、长跑陪伴、授权请示里带用时、第几件、工具名,这些变量没法预先录音,所以它们不出声。语音包为 assets/voice/ 下的 156 个 mp3(8 句时段开场白 + 120 句问候正文 + 16 句「回来啦」+ 12 句「等到你啦」)+ manifest.json。喇叭按钮状态存 localStorage 的 dsh-whale-greeting:voice,默认开。关掉立刻停声,再打开会把当前这张卡补念一遍。浏览器会拦截首屏问候的自动播放,这时把队列停在原地,等第一次点击/按键再补上。没有语音包时,assets/voice/manifest.json 不存在,喇叭按钮自动隐藏,卡片回到纯文字形态。

安装与启用

在 dsh-market 里搜索 dsh-whale-greeting 并安装,或者在命令行执行:

dsh plugin --profile <你的 profile> add dsh-whale-greeting

官方 DSH Desktop 请在应用自己的 设置 → 插件 里安装。桌面端的 profile 归应用管理,命令行改不动它。装完刷新页面即可,没有需要重启的 Host 侧改动。

典型用法

  • 启动或开新对话:看到一条问候卡,点 × 或按 Esc / Enter 关闭。
  • 长任务跑一段时间:会在对话区看到青绿色的陪伴卡,说「已经跑了 6 分 20 秒啦,小鲸一步都没挪开,就在旁边守着。」
  • 任务完成:绿色交付卡,显示用时和今天第几件。
  • 需要授权:橙色请示卡,显示工具名和权限说明,可以点「允许一次」或「拒绝」。

适用场景与注意

适合希望把关键信息直接嵌入对话流、减少翻消息成本的开发者。插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。插件依赖宿主提供的 useSession 座椅,如果宿主没有暴露 running 或 pendingInteraction,部分功能可能不可用。

总结

这个插件把「问好」「交报告」「陪伴」「请示」这四件事都做在对话区里,不占用额外窗口,也不浮在角落。通过随机文案、随机头像和语音朗读,让对话流更有温度,同时保持信息清晰。项目目录与源码见下方链接。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye