dsh-transcript-view-dock
Verified@jinngoo/dsh-transcript-view-dock · v0.1.2 · MIT · Web UI
DSH Web UI 插件:把「设置 → 通用设置 → 工作步骤展示」搬到输入框下方的 dock 最左侧,一个紧凑按钮 + 下拉菜单即可随时切换四档展示,不必再翻进设置。Pins the Work details switcher under the composer so the four display modes are one click away.
Install
dsh plugin add @jinngoo/dsh-transcript-view-dock Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Readme
@jinngoo/dsh-transcript-view-dock
DSH Web UI 插件:把「设置 → 通用设置 → 工作步骤展示」搬到输入框下方那行 dock 的最左侧—— 一个紧凑按钮显示当前档位,点开就是同样的四档(简洁 / 标准 / 详细 / 完全展开),随时切换, 不必再翻进设置里点两层。 Pins the Work details switcher under the composer so Compact / Standard / Detailed / Verbose are one click away.

截图:暗色主题,dock 最左侧
≡ 详细 ⌃展开后的样子(简洁 / 标准 / 详细 / 完全展开,当前档位打勾)。
它做什么
- 在
conversation.composer.dock(输入框卡片下方那行,「内容宽度」滑杆所在的那一行)注册一个条目,order: -1,因此排在activity/usage徽标和宽度滑杆之前——就是这一行的最左侧。 - 按钮形如
≡ 详细 ▾(14px 步骤图标 + 当前档位 + 下拉箭头):点开向上弹出菜单,菜单里是四档 + 主题名/说明, 当前档位打勾(role="menuitemradio"+aria-checked)。「工作步骤展示」这个完整名称在aria-label与悬停title里,所以按钮不必占宽度显示整句。 - 外观对齐宿主自己的 dock 条目规范(
ui-chat的耗时/用量胶囊、ui-conversation的上下文计量): 透明底、--dsw-alias-label-tertiary、悬停才出--dsw-alias-interactive-bg-hover、--dsw-radius-sm、--dsh-content-font-size-secondary字号、等宽数字;弹层用宿主 popover 皮肤 (--dsw-specific-menu兜底 overlay +--dsw-elevation-prominent+--dsw-radius-lg)。 - 点选即写 Host 设置
ui-chat.transcriptView,会话里的显示立刻变化(Chat 读的是同一个 Host 设置段)。 - 设置页原来的那一行保持不动:本插件只是给同一个偏好加了随身入口,没有搬走或隐藏它。
安装
已发布到 npm:
dsh plugin --profile <profile> add @jinngoo/dsh-transcript-view-dock
或在 DSH 会话里用 plugin_manager:
action: install_bundle
target: @jinngoo/dsh-transcript-view-dock@latest
装完刷新页面(新的 Client 包需要重新加载 Web 资产)。卸载:
dsh plugin --profile <profile> remove @jinngoo/dsh-transcript-view-dock
本地开发安装
克隆后从工作区目录安装(link: 安装直接跑工作区的代码,改完刷新页面即可):
git clone [email protected]:Jinngoo/dsh-transcript-view-dock.git
dsh plugin --profile <profile> add <克隆目录的绝对路径>
机制(为什么这么写)
值走 ui-chat 的 Host 设置段,不另存一份
ctx.configForms.get('ui-chat') 是 Client 侧公共 Service,按命名空间共享同一个 ConfigForm
实例。所以本控件和设置页那一行:
- 共用一个写队列与同一套 revision 栅栏(
ConfigForm.mutate内部串行 + 最新 revision), 两边同时改不会互相覆盖; - 宿主拒绝写入时会由同一个实例自动回读,本控件跟着回退;
- 外部改动(设置页、onboarding 写同一段)会通过
subscribe到达本控件,按钮上的档位自动跟随。
取值规则与 ui-chat 的 TranscriptViewPolicy 对齐:
| 保存值 | 显示 |
|---|---|
compact / standard / detailed / verbose |
原样 |
normal、expanded(旧世代) |
读作 detailed,且不再写回 |
| 缺失 / 认不出来 | Web 默认 detailed;桌面默认 standard('dshDesktop' in globalThis) |
只在 Host 真的服务 ui-chat 时出现
注册走 ctx.configForms.whileServed(['ui-chat'], …):命名空间没有被服务(例如换了组合、ui-chat 被禁用)
时本控件不会挂出来——没有可写的地方,就不该有一个点了没反应的按钮。
只读与失败
- 「设置」文档不可写(
ConfigFormSnapshot.writable === false)时按钮disabled,title说明原因。 - 点选先做一次乐观更新,
form.set()返回false(宿主拒绝)或 reject(传输失败)时回退到宿主现值。
不碰宿主 DOM / 样式
按钮、菜单、图标都是自带元素,颜色只用 --dsw-alias-* / --dsw-elevation-* 主题 token;
不读宿主选择器,宿主改版最多掉样式,不会崩渲染。
边界与取舍
- 只常驻会话内:
conversation.composer.dock只在有会话的 composer 里渲染,落地页(Hero)没有这一行, 所以在「新会话」页面上看不到它——那里的设置页入口照旧可用。 - 菜单向上弹出,会盖住一点输入框卡片;这是 popover 的正常行为。
- 宿主若把
ui-chat的字段名transcriptView改掉,本插件会读不到值并回落到默认档, 写入也会被宿主 schema 拒绝(不会崩);改client.js顶部的SETTINGS_FIELD即可。 - 旧值
normal/expanded只做读映射,不写回;界面不会提供这两个档位。
验证
已做(0.1.0):
plugin_manager install_bundle→application: applied,无warnings。- 安装后当前已连接页面里立即出现该登记项(无需重启 Host):
conversation.composer.dock的 occupants =transcript-view(order:-1)、activity(0)、usage(1)、conversation-width(10),active: true。 tests/client-render.check.mjs:用真实client.js+ 真 React 做 SSR 与状态机检查,29 项全部通过—— 模块 id、槽位/id/order、默认渲染(图标 +详细、aria-label/title完整语义、菜单收起)、 点选写入ui-chat.transcriptView、外部改动跟随、旧值映射、拒绝/失败回退、不可写时 disabled。- 未做:视觉与真实点击的浏览器截图验证(本会话没有浏览器控制),需要人眼确认一次。
变更记录
0.1.1
- 外观改为与宿主 dock 条目同一套规范(
ui-chat的StatsPills.module.css/ui-conversation的ContextMeter.module.css):透明底、label-tertiary、悬停才出interactive-bg-hover、--dsw-radius-sm、--dsh-content-font-size-secondary字号、行高calc(20px + delta)、tabular-nums。 - 按钮结构收敛为「图标 + 当前值 + 箭头」:新增 14px 步骤图标,去掉可见的「步骤展示」文字
(完整名称进
aria-label/title);弹层皮肤对齐宿主 popover(--dsw-specific-menu兜底 overlay、--dsw-menu-backdrop-filter、--dsw-elevation-prominent、--dsw-radius-lg),菜单项圆角改--dsw-radius-sm。 - 未改:设置读写路径(
ui-chat.transcriptView共享ConfigForm)、旧值映射、失败回退、 只在ui-chat被服务时挂出、order: -1的位置。
0.1.0
- 首个版本:dock 最左侧的「工作步骤展示」快捷切换(紧凑按钮 + 四档菜单),读写
ui-chat.transcriptView。