lim1202/dsh-agent-theater:在 DSH 里把会话变成一座角色舞台

前言

DSH 本体的会话界面是 Chat 加 Trajectory:你敲一段话,Agent 跑一批工具,最后拿到一段回复。工具调用分散在轨迹里,一轮的交付文件散落在会话之间,碰到需要审批的节点还得切到原生 UI 去看原因。想看个「整体进度」往往要自己对照时间线数。

Agent Theater 想解决的不是「信息不够」,而是信息呈现方式。它在 Chat、Trajectory 之外多加一个 conversation.view 视图,把整轮会话演成一场舞台剧:角色跟随真实工具事件做动作,你的话变成短暂的漫画气泡,Agent 的输出变成字幕,轮到结束时舞台上直接摆出这轮的真实成果与交付物。代码仓库在 GitHub lim1202/dsh-agent-theater,维护者 lim1202,社区目录 SkillHub 把它归在「趣味换装」分类,目前星标还是 0。它不是官方插件。

这是什么

一句话定位:一个纯前端扩展的 DSH 插件,注册一个名为 Theater / 剧场的会话视图,不改变 DSH 核心,不改 Chat 与 Trajectory,也不额外调用模型——舞台上的每一句文字都来自 Conversation 层已经组装好的 Chat 数据。

它解决的问题是:让「Agent 在干什么、产出了什么」一眼可见,同时不丢原始会话。所有叙事只读,卸载插件即恢复默认界面。

仓库当前版本 0.1.1,许可证 MIT,要求 DSH Desktop 0.2.1-rc.x(README 声明在 0.2.1-rc.5 上实测,包内 engines.dsh 为 >=0.2.1-rc.5 <0.3.0)。

核心功能

一个舞台,不是聊天列表。 视图本身即舞台:顶部场景标签,中间是放大的角色(带道具、光晕、徽标),底部是演出层,放漫画气泡、字幕和统一状态条。没有历史列表,完整原文回 Chat 看。

四个场景由真实会话状态驱动。 Idle(待机,角色待机偶尔一句台词)、Working(工作中,实时工具名 + 操作计数 + 计时)、Completion(完成,汇报卡)、Attention(需要你,请求卡)。切换条件来自会话真实状态,不是插件自己猜测。

完成汇报。 一轮结束画卡片,包含三块:该轮最后一条真实回复(Markdown 渲染,默认折叠,可展开、可复制)、真实统计(读取 / 搜索 / 运行 / 修改的工具分类计数与墙钟耗时,不解析也不转述 Agent 自述)、交付物明细——Delivered(present 送出的文件)、Edited files(成功的 write / edit / 可变 str_replace_editor,去重且失败不计)、Attachments(本轮真实图片引用)。present 附带的 description 显示在文件名下方一行;点文件行会在右侧栏打开,点缩略图开舞台内灯箱。

需要你处理。 请求卡显示真实类型(等待审批 / 等待你的回答)、工具 · 原因,提问类列出真实问题与选项。插件只渲染这些信息,操作仍走原生审批 UI 和输入区,插件不会替用户批准。

Codex Pet 逐帧角色。 导入一个 pet.json + spritesheet.webp,舞台上的角色变成逐帧精灵动画;没导入就看内置占位角色(src/art.js 的 SVG + CSS 动画),场景与气泡行为一致。

克制的边界。 工具调用不进叙事,只在状态条与道具上体现;角色台词是插件自带的原创文案,不写入会话日志;全程只读会话数据,不写会话、不注入消息、不额外请求 Host。动效遵循 prefers-reduced-motion。

安装与启用

先决条件:DSH Desktop 要到 0.2.1-rc.x,并且应用已初始化。安装后需要刷新一次页面,因为 Client 模块只在页面加载时读取。

方式 A,从 GitHub 安装(README 推荐)。插件页安装时粘贴:

github:lim1202/dsh-agent-theater

命令行等价写法:

dsh plugin --profile desktop add github:lim1202/dsh-agent-theater

方式 B,从发布包或本地目录装:

dsh plugin --profile desktop add https://github.com/lim1202/dsh-agent-theater/releases/download/v0.1.1/dsh-agent-theater-0.1.1.tgz

dsh plugin --profile desktop add /path/to/dsh-agent-theater

方式 C,加一个 Discover 索引源。DSH 0.2.1+ 的 Plugins → Discover → Index sources 可以读插件市场索引(JSON,格式 1),仓库自带一份:

https://cdn.jsdelivr.net/gh/lim1202/dsh-agent-theater@v0.1.1/index.json

备用地址(非 CDN,个别网络可能超出 DSH 给索引源的 15 秒时限):https://raw.githubusercontent.com/lim1202/dsh-agent-theater/v0.1.1/index.json。

装完三步:

1、刷新页面,会话上方视图切换里选 Theater。
2、想用 Codex Pet 就导入一个,不导入也能用。
3、不需要时在 Plugins 页面关掉该 bundle,立即回到普通 Chat;卸载用 dsh plugin --profile desktop remove dsh-agent-theater,再 rm -rf ~/.dsh/agent-theater 彻底清角色资源。

典型用法

导入 Pet。 点剧场工具条的「选择 Pet 资产」→ 原生文件夹选择 → 选包含 pet.json 的文件夹。资源会被复制到独立目录,源文件夹只读不动:

$DSH_HOME/agent-theater/            # 默认 ~/.dsh/agent-theater
├── config.json                     # {"active": "laffey-ii"}
└── pets/<id>/
    ├── pet.json                    # 导入时规范化后的清单
    └── spritesheet.webp            # 从源文件夹复制

pet.json 字段:id、displayName、description、spriteVersionNumber(只接受 2)、spritesheetPath(目录内相对路径,拒绝 .. 与绝对路径)。精灵图 ≤ 24MB,支持 webp/png/jpeg/avif,像素尺寸必须是帧网格整数倍。

帧网格。 按 192x208 一帧、8 列 × 11 行 = 1536x2288 解析,每行帧数由透明像素判定,从第 0 列连续排列。行映射以 laffey-ii v2 校准:第 0 行 7 帧 idle(呼吸、眨眼);第 4 行 5 帧 success(起跳、腾空、落地);第 5 行 8 帧 error;第 6 行 6 帧 waiting;第 7 行 6 帧 working;第 8 行 6 帧 thinking / research;第 1/2/3/9/10 行备用未使用。

工作时的舞台。 发送一句话,它显示在角色旁边的漫画气泡里,9 秒后淡出;Agent 正在输出的内容作为字幕铺在底部状态条上方。状态条会实时更新,例如 ● 执行中… · 运行 node --test · 3 个操作 · 00:42。一轮结束显示汇报卡,状态条变成 ● 已完成 · 2 个文件 · 1 张附件。过几秒不点也会收起,点 × 立刻收起,之后舞台回到待机,但底部仍保留本轮产出计数。

需要审批的时刻。 会话暂停等待审批或回答时,舞台切到 Attention:角色站在请求卡旁边,状态条提示 ● 等待你处理 · 在下方输入区处理。去原生输入区完成操作即可。

适用场景与注意

适合想让 agent 工作过程更直观的人:长时间跑构建、写多文件改动、反复交付产物的场景,用 Theater 能一眼看到这轮读了什么、改了什么、交了什么;需要盯着审批和等待状态时,也能减少来回切视图的次数。它对会话日志零侵入,适合不希望对话被改写或注入的人。

几个需要注意的点:

  • 插件以当前的 DSH 进程权限运行。安装前先读源码(index.js、client.js、cordis.patch.yml)和 LICENSE,确认没有超出预期的行为;它是第三方插件,与 DeepSeek 无关。
  • DSH 仍在 rc 阶段,slot / 服务签名可能变化;升级后若视图空白,把 console 里的 slot entry crashed in 'conversation.view' 贴上 issue。
  • 未导入 Pet 时是 SVG 占位角色,导入后才是逐帧精灵动画,不是 Live2D。附件只列图片引用,PDF、代码文件等非图片附件不进汇报卡。Markdown 是实用子集,不支持表格、图片、任务列表、内联 HTML,也不做语法高亮。
  • 动作按工具名映射(theaterPoseForTool),遇到新工具默认「搬砖」动作;精灵图首屏整张下载,靠 ETag 304 复用缓存,没有按行或分块加载。
  • 角色美术不随仓库分发,仓库自带的是占位角色;使用第三方角色素材前先自行确认授权。

结尾

Agent Theater 的价值在于把「会话」变成「可观看的一轮」:角色跟着真实工具事件动,交付物用汇报卡直接摆在台面上,原始 Chat 与 Trajectory 一行没动。它不调用额外模型、不改写会话,装不上或用不惯就卸载干净。目录页在 SkillHub 上搜 lim1202/dsh-agent-theater,源码与安装说明见 GitHub 仓库 https://github.com/lim1202/dsh-agent-theater。

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

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

小夜