用 dsh-stickers 给 DeepSeek Harness 网页对话加上双向表情

前言

DeepSeek Harness(dsh)把模型、工具、会话、沙箱和界面都做成可替换的插件。写代码、跑测试、改评审意见,对话区里大多是纯文本:智能体回一句「测试通过了」,用户再回一句「你看看」。语气对得上,场面却像在工单系统里聊天。

dsh-stickers 把表情贴纸接进 WebUI。用户点输入框旁的 🐋 选择器,或者敲 /sticker;智能体在普通对话里按语境调用 send_sticker。同一份 catalog 同时服务这三条入口,卡片会写进持久会话历史。本文按插件目录页、GitHub 仓库 README、package.json 和源码交叉核对后整理:它是什么、装在哪、怎么发、哪些能力现在没有。

DeepSeek Harness 当前仍是开发者预览版,官方仓库写明会有不兼容变更。本文提到的社区插件目录 deepseek-harness-plugin.com 是独立站点,用来发现和复制安装命令,与 DeepSeek / 幻方没有官方从属关系。官方推荐的发现方式仍是 GitHub 的 dsh-plugin 话题。

这是什么

dsh-stickers 是一款界面增强插件,由 william-jin-cmu 维护,npm 包名是 @dsh-external/dsh-stickers,当前 package.json 版本为 0.1.0,许可证为 BSD-3-Clause。仓库创建于 2026 年 8 月 8 日;截至 2026 年 8 月 17 日查阅,GitHub 显示 20 星,目录页仍显示 13 星,以仓库实时数据为准。

它解决的问题很具体:让 WebUI 里的用户和智能体都能发表情,而且表情要留在会话记录里,而不是弹一层马上消失的 overlay。README 把定位写成:纯 DSH 外部插件,不修改 DSH core。package.jsondsh.client.platformweb,和「只做完整 WebUI 支持」的说明一致。

挂载方式也写在仓库里。Node 侧用 cordis.patch.yml 插入 id 为 dsh-stickers 的插件,注册:

  • send_sticker Agent tool
  • /sticker 用户命令
  • 一段指导智能体何时发表情的 system prompt
  • /api/dsh-stickers/* 的 PNG 路由(仅在 webServer 存在时启用)

Browser 侧由客户端清单自动发现,注册三个官方 slot:conversation.input.right(选择器)、conversation.chat.commandview/sticker(用户卡片)、conversation.chat.toolview/send_sticker(Agent 卡片)。

核心功能

同一份 catalog,三条入口

表情定义集中在 src/shared/catalog.ts。用户选择器、/sticker 命令和 Agent 的 send_sticker 读同一份列表。新增一张图时,同时改 catalog 即可,不必在三处各写一遍。

用户侧有两种发法:

  1. 在 WebUI 输入框右侧点 🐋,从公开表情里点选。选择器顶部可以切换蓝鲸娘 / 黑鲸娘,默认蓝鲸娘。
  2. 直接输入 /sticker <id>,黑鲸娘版本再加一个 black 参数。

智能体侧不是等用户说「发表情」。插件把 send_sticker 注册成 tool,并在 system prompt 里写明:每回合最多一张,只在能补语气时用,不能拿表情代替实质回答。参数是 { id, variant? }variant 缺省为 blue,用户切到黑鲸娘后可传 'black'

PNG 不走外链。插件自己提供 /api/dsh-stickers/*,用户卡片和 Agent 卡片都会进入持久会话历史。

14 张公开表情,4 张偏工作流

下面 14 张会出现在 🐋 选择器里,人类可以用 /sticker 发送,Agent 也可以按同一个 ID 调用。文案以仓库 README 为准。

ID 文案
daily-chat 适合日常对话,即时响应
human-questions 人类的怪问题怎么那么多…
use-ai-for-this 你拿 AI 搞这个?
fish-philosophy 生鱼忧患,死鱼安乐
enough 这就够了
server-busy 服务器繁忙,请稍后再试
thinking-stopped 思考已停止
great-question 哇,这个问题问的真妙!
deep-thought 已深度思考
no-thanks No thanks I use DeepSeek
tests-passed 测试通过!
root-cause 找到原因了
running-tests 正在跑测试
fixed-review 改好了,你看看

后四张被 README 标成工作流反应:测试通过、定位根因、正在跑测试、改完请验收。日常闲聊和编码回合都能对上号。

10 张只有 Agent 能发的彩蛋

另外 10 张 visibilityagent。它们只出现在 send_sticker 的 tool schema 里,选择器看不到,/sticker 也会拒绝发送。源码里用户路径走 publicStickerById(),Agent 路径才允许隐藏 ID。

ID 文案
self-destruct 最近自己搓自己时,自杀频率有点高
restart-myself 我重启一下自己
hot-update 热更新成功,进程没了
restore-session 正在恢复会话…未分组里见
browser-left 会话太长,浏览器先走一步
not-stuck 我不是卡,我在深度思考
memory-alive 内存正在努力活着
subagents-down 已召唤 Subagent,已全员中断
plugins 插件装得很好,下次别装了
session-locked Session 没坏,只是打不开了

README 写明:一部分图沿用 DeepSeek Harness 官方贴纸;另一部分创意来自「【官方】DSH 内测群」里群友反馈的真实使用问题,例如热更新后进程退出、Session 打不开、长会话里浏览器掉队、Subagent 集体中断。黑鲸娘全套 24 张图由 少女阿原(@ayuanwong) 绘制,双角色切换的交互也来自她的提案。

当前不支持 TUI

仓库专门解释了为什么不做终端界面。turtle-ui 现有的第三方扩展面只有临时的 tui.openOverlay(),没有把插件组件插入持久 transcript 的接口。overlay 关掉就没了,滚动或重开 session 也无法恢复,不符合「聊天历史中的表情消息」这一语义。

本版本因此只发布完整的 WebUI 支持,不用瞬时 overlay 冒充 TUI。README 的预期是:等 turtle-ui 提供通用、可回放的 transcript renderer API 后,再在不加入表情专用 core 代码的前提下补 TUI。

安装与启用

目录页给出的安装命令如下,在已经能运行的 DeepSeek Harness 终端里执行:

dsh plugin add github:william-jin-cmu/dsh-stickers

插件以当前 dsh 进程的权限运行,安装时可能执行代码。目录页建议安装前检查源码和许可证;需要可复现安装时,把 commit 哈希钉死。2026 年 8 月 17 日查阅时,main 最新提交是 1703f09915db1058b6031b31e52fd404560e0a78(2026-08-13,说明为适配 dsh 0812 final beta,并把 PNG 路由从已更名的 httpServer 迁到 webServer):

dsh plugin add github:william-jin-cmu/dsh-stickers#1703f09915db1058b6031b31e52fd404560e0a78

目录站点的通用步骤是:先有 CLI(例如 npx @deepseek-ai/dsh web),再 dsh plugin add ...,最后用 dsh plugins list 确认已加载。这个插件的客户端声明了 platform: "web",本地从源码安装时 README 也要求挂到 web profile:

pnpm install
pnpm run typecheck
pnpm test
pnpm run build

export DSH_HOME=/absolute/path/to/an/isolated-dsh-home
dsh plugin --profile web add /absolute/path/to/dsh-stickers
dsh web

仓库要求 Node 22,以及一份可运行的 DSH checkout。package.jsonengines 写的是 ^22.19.0 || >=24.0.0。Harness 仍在快速改接口,本仓库 8 月 13 日那次提交就是一次对 core 重命名的适配;装完后如果选择器在、图片 404,优先核对当前 dsh 是否仍提供 webServer,以及 PNG 路由有没有注册上。

典型用法

下面几条都能从 README 和 src/index.ts 直接复现,不依赖额外配置项。

1. 用选择器发一张公开表情

打开 dsh web 进入网页对话,点输入框右侧的 🐋。弹出层标题是「DSH 表情」,顶部可在「蓝鲸娘」「黑鲸娘」之间切换。点 tests-passed,选择器会把草稿写成 /sticker tests-passed(黑鲸娘则是 /sticker tests-passed black)并提交。会话里会出现一张用户表情卡片,图片地址形如 /api/dsh-stickers/21-tests-passed.png

2. 用斜杠命令指定 ID

不想点选时,直接输入:

/sticker root-cause
/sticker fixed-review black

命令 hint 是公开 ID 列表加可选的 [black]。传了选择器里没有的彩蛋 ID,会返回「表情不存在或不可由用户发送」。角色参数只能是 blueblack,其他值会报「未知的表情角色」。

3. 让智能体按语境回一张

Agent 调用形式在 README 里写明:

send_sticker({ id: "running-tests" })
send_sticker({ id: "hot-update", variant: "black" })

running-tests 双方都能发;hot-update 只在 Agent schema 里。插件注入的 guidance 要求:每回合最多一张,只补语气,不代替回答。工具结果会渲染成 Agent 表情卡片,同样走 /api/dsh-stickers/*,并进入会话历史。

适用场景与注意事项

适合已经在用 DeepSeek Harness 网页界面、希望对话区多一点反应、少一点工单感的人。编码场景里,测试通过、找到原因、请验收这几张公开表情可以直接当状态标记;内测群里反复出现的热更新、Session、Subagent 问题,则留给 Agent 的彩蛋。

使用前需要接受这几条边界:

  • 只覆盖 WebUI。 TUI 当前没有持久 transcript 插件接口,本版本故意不做。
  • 表情图由本机 dsh 进程提供。 路由挂在 webServer 上;没有 Web 服务时 PNG 不会注册。
  • 插件以当前 dsh 进程权限运行。 安装可能执行构建脚本。装之前看仓库、许可证和近期提交,只装信任的来源;要可复现就固定 commit。
  • 许可证是 BSD-3-Clause,源码公开,可以免费安装使用。素材来源混有官方贴纸和社区绘制的黑鲸娘变体,再分发时以仓库许可证和原作者说明为准。
  • Harness 是开发者预览版。 核心插件和 API 仍会变。本仓库已经为 webServer@deepseek-ai/cordis 等更名做过一次迁移,后续不排除再适配。

小结

dsh-stickers 没有改 DSH core,而是用官方 slot、斜杠命令和 Agent tool,把同一份表情 catalog 接到网页对话里。用户点 🐋 或敲 /sticker,智能体在合适的时候回一张;14 张公开、10 张彩蛋,蓝鲸娘和黑鲸娘各一套,卡片留在会话历史中。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-stickers/

GitHub:https://github.com/william-jin-cmu/dsh-stickers

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

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

小夜