Repository navigation
Releases
dsh-mixer v1.6.1 · 调音台里三类打开入口的修复
修掉调音台里三类"点了没反应 / 报错"的打开入口,都是在真实宿主里复现、修好、再复验过的。
安装
dsh plugin --profile web add github:dtdths/dsh-mixer#v1.6.1装完重启 DSH 并硬刷新(插件 bundle 的 rev 按文件 mtime 算,刷页面不够)。
验证过的 DSH runtime:0.2.1-rc.2(checkout 687f282)。
修了什么
1. 输入框里的 @ 引用:点了没反应
在调音台某一格的输入框里点一个 @文件名 小标签,什么都不会发生 —— 控制台里是一条未捕获的
sidebarRight: no session surface is mounted。原因:这个标签是编辑器(Lexical)的 decorator,激活走编辑器命令,
而宿主这条链路上没有 try/catch,所以既不弹窗也不打开。
现在:点它 → 离开调音台、落到那一格的会话 → 由宿主自己打开那个文件。
2. 已发送消息里的 @ 引用:切了视图但文件没开
同一个出口、不同的短板:重放给宿主的"假事件"太薄,宿主激活守卫要读 event.detail 与
event.currentTarget,于是每次都抛 Cannot read properties of undefined (reading 'ownerDocument'),
而错误在异步链里被吞掉 —— 表现就是"切过去了、文件没打开、也没有任何提示"。
现在:补成 detail: 0 + currentTarget,正常打开。
3. 交付物卡片的预览按钮:同样的报错
agent 用 present 工具产出的交付物卡片,点缩略图位置的预览按钮会弹「无法打开文件」。它和消息里的文件链接
是同一个出口,只是没在接管白名单里。现在已纳入。(卡片右边的「用 Xcode 打开 / 更多打开方式」不受影响。)
4. 补记:三种等待态全部真机验过
approval 之外,plan-review(计划待审)与 question(等待回答)这轮也在真实宿主里跑通:卡片渲染在对应那一格、
通道亮灯、顶栏计数正确、在格内点完即清空、人留在调音台。
验证
npm run check= 110 用例 + 冷启动守卫PASS。- 真机复验(沙箱宿主 + 无头 Chrome 跑真实模型回合):三类入口都能"离开 → 落到该格 → 文件真的打开";
反向确认点视图标签 / 审批卡 / 卡片上的"用 Xcode 打开"都不会被误接管。 - 顺带写进 Gotchas:每多一种"宿主渲染的打开入口"(消息链接 / 工具行 /
@chip / 输入框 chip / 交付物卡片),
都要显式加进白名单,否则症状都一样。
规格:docs/spec.md §7.4 / §6.25 / §6.29–31,
决策:ADR-0004。
dsh-mixer v1.6.0 · 退出跟随当前通道 + 调音台内文件链接
安装
dsh plugin --profile web add github:dtdths/dsh-mixer#v1.6.0然后重启 DSH 并硬刷新(插件 bundle 的 rev 按文件 mtime 算,刷页面不够)。
验证过的 DSH runtime:0.2.1-rc.2(checkout 687f282)。
本版做了什么
1. 「常规视图」落到你正在用的那一格
以前在调音台里点「常规视图」,落点是"进调音台之前在屏的会话"——跟着你走了一圈,回来还是原地。现在它会落到你正在用的那个通道的会话上。
- 「当前通道」= 你明确动过的那一格:点它、用
Cmd/Ctrl+Alt+1..9跳过去、或在它里面新建/发消息。宿主给每格输入框都会自动聚焦,所以"有焦点"不算数。 - 进来后什么都没碰就退出 → 落点不变(和以前一样),不会偷偷换掉你的主会话。
- 点左侧会话行退出 → 仍然落到那一行的会话,不受影响。
2. 顺手修掉:主会话是空白时退不出调音台
如果进调音台前的主会话还没说过话(空白会话),以前点「常规视图」会被面板的"抢回"逻辑立刻弹回调音台——而新建出来的通道恰好都是空白会话,于是"刚开一个新会话就去看别的通道"反而退不出去。本版加了一个只认用户主动离开的闩,退出就是退出;宿主自己的"新建会话"路径行为不变(新建仍然是加一格,不是离开)。
3. 调音台里点文件链接:现在真的能看文件了
以前在调音台的通道里点消息 / 工具行里的文件链接,必弹「无法打开文件 sidebarRight: no session surface is mounted」——因为宿主右栏只在"没有面板占主列"时才认在屏会话。
宿主限制不能改,所以插件把这一下整体挪到常规视图里完成:点链接 → 落到那一格对应的会话 → 由宿主自己打开文件(右栏直接展开)。
- 失效方向是安全的:万一套不到宿主那个点击处理器,就放行原点击——你看到的仍是带「重试」的原对话框,绝不会"点了没反应"。
- 输入框里正在编辑的
@引用不接管(那里只有文件名,且会动到光标)。 - 代价:调音台不再保持——通道、solo、已移出、顺序都在,再进一次即可(每格滚动位置会回到顶部)。
验证
npm run check= 108 用例 + 冷启动守卫PASS(新增 11 条,均先红后绿)。- 真机复验(沙箱宿主 + 无头 Chrome 跑真实模型回合):退出落点正确;点通道里的文件链接后落到该格、右栏自动展开并打开该文件、无对话框;点通道内的视图标签不会误离调音台。
- 真机这轮还抓到一个首版 bug:宿主的
openFile是 async,失败以 rejected promise 回来,首版只调一次等于吞掉失败(切过去了但文件没打开)。已改为有界跨帧重试并补了用例。
规格与决策:docs/spec.md §5.1 / §7.4 / §9.0k,ADR-0004。
dsh-mixer v1.5.2 · 退出调音台后文件链接恢复正常
修掉一个「回到常规视图后,点文件链接必弹错」的退出路径 bug。一行改动,附回归用例。
安装 / 升级
只装 Client half(Host half 为空)。装前 / 装后请把原型包 dsh-mixer-spike 从 profile 卸掉 —— 它与正式版抢同一个 main key。
dsh plugin --profile web add github:dtdths/dsh-mixer#v1.5.2装完硬刷新页面(冷启动)。
- 从 v1.5.1 及更早升级:重新跑上面这行(git 装法是快照,不会自动更新)。
- 开发迭代仍用仓库目录的
link:安装(改代码刷新即生效)。 - 不想用命令行:
plugin_manager → install_bundle,target 传上面那个github:spec 也行。
这一版改了什么
Bug 修复:退出调音台后,常规视图里的文件链接必弹错
- 现象:进一次调音台 → 点「常规视图」回到会话 → 点消息 / 工具行里的文件链接,弹
「无法打开文件 ·sidebarRight: no session surface is mounted」,点「重试」还是同一个错。
点一下左侧会话行或刷新页面才恢复。 - 根因:「常规视图」按钮调的是
selectPanel('conversation')—— 那是main槽里的保留键。
宿主右栏(ui-sidebar-right)只在 没有面板 占主列(activePanelId === null)时才命名
「在屏会话」;选保留键会让这个值非空,右栏就始终不知道当前会话是哪个,文件链接无处可开。 - 修复:退出改调
ctx.layout.selectPanel(null)—— 与宿主自己的「点左侧会话行退出」同一条路径。
tests/interaction.test.mjs新增一条用例钉住这个参数(改回保留键即红)。
仍然是宿主限制(不是本插件的 bug)
- 在调音台视图内点文件链接仍会报同一个
sidebarRight: no session surface is mounted:
面板占住主列时宿主右栏本就不路由,插件也没有拦截宿主链接点击的钩子,要改宿主才能根治。
临时办法:回到常规视图再点。
验证
npm run check= 97/97 用例 + 冷启动守卫 PASS。- 验证过的 DSH runtime:
0.2.1-rc.2(checkout687f282)。真机复验:- 进调音台 → 「常规视图」→ 右栏立刻恢复命名(seat 可见、tabs 回来),无需点任何行;
- 随后点同一文件链接直接打开右栏,无对话框;
- 退出后点另一个会话行:主列停在那一个,无回弹;
- 从调音台直接切「插件」页:不会跳回会话;
- 双通道 / solo / 退出 solo 回归正常,console 0 报错。
已知边界(与上一版相同)
- 侧栏收起后仍留 56px 轨道(宿主没有归零选项,spec §7.1)。
- 新建通道后各格滚动位置回顶(ADR-0003 的重挂代价)。
- solo 与「移出」不持久化,刷新即回到并排;通道集合与每格宽度是持久化的。
细节写在 docs/spec.md §7.4 与 §11。
dsh-mixer v1.5.1 · 空板新建修复 + README 改版
修了一个真实 bug,顺手把 README 整篇重做 —— 从「能装吗、怎么用」开始讲,而不是从实现讲。
安装 / 升级
只装 Client half(Host half 为空)。装前 / 装后请把原型包 dsh-mixer-spike 从 profile 卸掉 —— 它与正式版抢同一个 main key。
dsh plugin --profile web add github:dtdths/dsh-mixer#v1.5.1装完硬刷新页面(冷启动)。
- 从 v1.5.0 及更早升级:重新跑上面这行(git 装法是快照,不会自动更新)。
- 开发迭代仍用仓库目录的
link:安装(改代码刷新即生效)。 - 不想用命令行:
plugin_manager → install_bundle,target 传上面那个github:spec 也行。
这一版改了什么
Bug 修复
- 空板上点「+会话」会把其它看得见的通道挤掉。根因:
acceptNewChannel拿“持久化的板”当插入基准,而空板上那份持久化状态可能是空数组,于是新会话按第 0 位插入后,其它可见通道被当成不在板上清掉。修法:改用visibleRef(看得见的板)当基准。回归用例先红后绿验证过(interaction的「空板上新建通道保留可见通道」)。 - 触发条件很具体但很常见:调音台里只剩/没有通道时,从
会话浮层的行内+会话新建。
文档
- README 整篇重做:开头说清「这是什么」,主推一行安装命令,补上五步上手指南与快捷键表;把逐版本改动清单从 README 里挪回 Releases 与
docs/spec.md §11。 - 新增真实宿主截图(
docs/assets/):主图三格同框 —— 空对话 / 等待审批 / 执行中,是真实模型回合跑出来之后用 CDP 截的,不是设计稿。所有工作区与会话均为虚构演示数据;出处、宿主版本、复现步骤写在docs/assets/PROVENANCE.md。 - 格内审批卡的端到端实测记录(
docs/spec.md§6.25):「审批卡出现在那一格里 → 点允许一次 → 卡片消失、composer 回来、继续执行、顶栏计数归零」。 - 侧栏折叠的一处观察记为非 bug(只在自动化路径里出现,日常使用遇不到)。
验证
npm run check= 96/96 用例 + 冷启动守卫 PASS。- 验证过的 DSH runtime:
0.2.1-rc.2(checkout687f282)。README 的三张截图就是在这个宿主上驱动本包截取的;格内审批卡实测通过。
已知边界(不是 bug)
- 侧栏折叠后仍留 56px 轨道(宿主没有归零选项,接管侧栏会丢设置入口,
docs/spec.md§7.1)。 - 新建通道后各格滚动位置回顶(ADR-0003 里记的重挂代价)。
- solo 与「移出」不持久化,刷新即回到并排;通道集合与每格宽度是持久化的。
完整实现状态、验收判据与决策记录见 docs/spec.md §11。
dsh-mixer v1.5.0 · 架构重构 + 光标落末尾
一次纯架构重构(行为不变)+ 一处体验修正:跳转通道后光标停在草稿末尾。
安装 / 升级
只装 Client half(Host half 为空)。装前/装后请把原型包 dsh-mixer-spike 从 profile 卸掉 —— 它与正式版抢同一个 main key。
plugin_manager → install_bundle
target = "github:dtdths/dsh-mixer#v1.5.0"
装完硬刷新页面(冷启动)。
- 从 v1.0.0–v1.4.0 升级:重新装上面这行(git 装法是快照,不会自动更新)。
- 开发迭代仍用仓库目录的
link:安装(改代码刷新即生效)。
这一版改了什么
体验修正
- 跳转后光标落在草稿末尾:
Cmd/Ctrl+Alt+1..9、Cmd/Ctrl+Alt+][,以及新建/交接后,光标停在输入框里已有文字的末尾而不是开头 —— 跳过去是接着写。plain 输入框与宿主的富文本 composer 两种形态都处理了。
架构重构(行为不变,可放心升级)
| 收成的 module | 之前的样子 |
|---|---|
成员账本 createChannelLedger |
「哪些会话还在板上、哪些宽度该丢」拆在两个 effect + 三个豁免集合 + 六个写入点,两个豁免句柄逐字重复 |
宿主调用 runner createHostCalls |
「点了不能没反应」的五种结局被手抄三遍(新建 / 归档 / 撤销归档) |
插件作用域视图状态 createViewState |
6 个握手对象(18 成员、11 个 prop)+ 一份 React 镜像 + ref 缓存 |
通道 DOM adapter createChannelDom |
「光标在哪个通道 / 按 id 找通道 / 聚焦它」手写三处,拖拽虚影又重推一遍 |
单一 host fixture tests/host-face.mjs |
宿主被建模三次(真 Cordis / 假 ctx / 契约断言),加一条服务边要改三处 |
面板接口的 prop 从 25 降到 16(握手类 11 → 2);用例 90 → 95(每个 module 各一条 seam 用例钉住规则 + 一条「注入名单与 fixture 一致」的哨兵)。重构的决策与「明确没做」的三件事写在 docs/spec.md §9.0j。
验证
npm run check= 95/95 用例 + 冷启动守卫 PASS。- 真实宿主(DSH
0.2.1-alpha.1,checkout5badb15)浏览器复验通过:归档 → 顶栏撤销 → 通道回原位/回宽度;solo 进入/切换/退出后宽度不变;快捷键跳转与光标位置。
已知边界(不是 bug)
- solo 是视图状态,刷新回到并排(有意不持久化);撤销归档是 6 秒窗口。
Cmd+Option+←/→是 macOS 媒体键,不可用(用方括号)。- 拖拽虚影是 HTML5 静态图(长对话不含正文,给骨架);
会话浮层只做本地标题过滤。
文档
docs/spec.md— §9.0j(本轮重构的五个候选、判据与边界)、§5.6 / §6.24(光标落末尾)、§11(缝表与用例数)docs/plugin-gotchas.md— 冷启动、键位校验、DOM 钩子这些踩过的坑
dsh-mixer v1.4.0 · solo
solo:一键只看一个通道,其余压成 64px 窄条 —— 但一个都不拿走,任务照跑、该亮灯还亮灯。
安装 / 升级
只装 Client half(Host half 为空)。装前/装后请把原型包 dsh-mixer-spike 从 profile 卸掉 —— 它与正式版抢同一个 main key。
plugin_manager → install_bundle
target = "github:dtdths/dsh-mixer#v1.4.0"
装完硬刷新页面(冷启动)。本版新增一条快捷键命令与一条服务使用面,升级后请硬刷新,别只靠热重载。
- 从 v1.0.0–v1.3.0 升级:重新装上面这行(git 装法是快照,不会自动更新)。
- 开发迭代仍用仓库目录的
link:安装。
这一版改了什么
- solo:被 solo 的通道占满,其余压成 64px 窄条。窄条保留状态点(等待=琥珀 / 执行中=转圈 / 子代理=第二个点 / 已完成=绿点)、被截断的标题和悬停 tooltip;点窄条就切过去。
- 三处进出:通道头部
solo/退出按钮、顶栏solo:<标题> 退出、快捷键Cmd/Ctrl+Alt+S(作用于光标所在通道)。不用 Esc 退出 —— 在会话里 Esc 是「停止当前回合」。 - 与主通道一眼可分:窄条是凹陷表面 + 1px 分界线 + 主色标题(浅色主题下也看得出来),悬停时左缘亮起强调色。
- 不破坏你的布局:solo 期间不写宽度权重、暂停分界线拖拽与头部重排,退出后各通道相对宽度原样回来。
- 自动退出:被 solo 的通道被归档或被列表剪掉 → 立刻回到并排。
- 不持久化:solo 只属于"这一次坐着",刷新回普通并排(与「移出」同族)。
- 顺带:
solo与mute的语义在CONTEXT.md里早已分开 —— solo 是视觉聚焦,mute(尚未实现)保留给"通道还在、只是不打扰"。
验证
npm run check= 90/90 用例 + 冷启动守卫 PASS(含 12 条快捷键在冷启动时全部注册成功、每条默认键位过宿主自己的bindingIssue)。- 真实宿主(DSH
0.2.1-alpha.1,checkout5badb15)浏览器实测:进入/切换/退出、宽度复原、归档后自动退出、刷新回并排,均正常。
已知边界(不是 bug)
- solo 是视图状态,不改变任何会话的运行;被压成窄条的通道仍会执行、仍会亮灯。
- 刷新页面会回到并排(有意不持久化)。
- 快捷键只在调音台是当前面板时生效;
Cmd+Option+←/→是 macOS 媒体键,不可用(用Cmd/Ctrl+Alt+][)。 - 拖拽虚影是 HTML5 静态图(长对话不含正文);
会话浮层只做本地标题过滤。
文档
docs/spec.md— §5.7(solo 的形态、进出、分界与"为什么不用 Esc")、§5.6(快捷键)、§6.23、§9.0iCONTEXT.md— solo / 移出 / mute 的术语边界
dsh-mixer v1.3.0 · 通道间跳转快捷键
通道间跳转快捷键:Cmd/Ctrl+Alt+数字 直达某个通道,Cmd/Ctrl+Alt+] [ 前后翻。
安装 / 升级
只装 Client half(Host half 为空)。装前/装后请把原型包 dsh-mixer-spike 从 profile 卸掉 —— 它与正式版抢同一个 main key。
plugin_manager → install_bundle
target = "github:dtdths/dsh-mixer#v1.3.0"
装完硬刷新页面(冷启动)。本版新增一条 Cordis 服务边(shortcuts),升级后必须硬刷新,别用热重载。
- 从 v1.0.0 / v1.1.0 / v1.2.0 升级:重新装上面这行(git 装法是快照,不会自动更新)。
- 开发迭代仍用仓库目录的
link:安装(改代码刷新即生效)。
这一版改了什么
- 11 条跳转命令:
mixer.channel.1…mixer.channel.9(跳到第 N 个通道,焦点直接落到它的输入框,屏幕外的通道会先滚进视野)、mixer.channel.next/mixer.channel.prev(从当前光标所在通道出发,首尾环绕)。 - 默认键位:
Cmd/Ctrl+Alt+1..9、Cmd/Ctrl+Alt+]/Cmd/Ctrl+Alt+[。 - 走宿主快捷键服务(
ctx.shortcuts.register),因此:命令出现在 DSH 的快捷键设置里、可以自己改键、由宿主负责与输入框/其它插件的冲突仲裁。 - 不打扰:光标在通道输入框里也能按(不用先点空白);调音台没打开时不吞键;通道不够时给一句提示而不是静默。
- 两条平台层坑(本版内修掉,都写在文档里):
Ctrl+Alt+方向键在 Desktop Linux 被宿主判为系统保留键 → 默认键位校验抛错 → 整页启动失败(曾真实发生)。Cmd+Option+←/→在 macOS 是系统媒体键,OS 在页面之前收走按键(实测会切歌)。所以next/prev全平台统一用方括号。
验证
npm run check= 87/87 用例 + 冷启动守卫 PASS。- 新增宿主侧真检查:直接跑 checkout 里宿主自己的
bindingIssue/isWebBindingAllowed/overlappingBindings,逐个 profile 校验插件的每条默认键位;外加一条「OS 级键位」守卫(任何primary+alt+方向键默认值直接判红)。 - 真实宿主(DSH
0.2.1-alpha.1,checkout5badb15)浏览器实测:数字键与方括号跳转均正常,冷启动无Failed to load plugins。
已知边界(不是 bug)
- 快捷键只在调音台是当前面板时生效(其它面板下命令
pass,不消费按键)。 - 想用方向键只能自己改键,但 macOS 上
Cmd+Option+←/→会被系统抢走 —— 改了也不会生效。 - 撤销归档仍是 6 秒窗口;拖拽虚影是 HTML5 静态图(长对话不含正文);
会话浮层只做本地标题过滤。
文档
docs/spec.md— §5.6(快捷键规则、键位与两条平台层冲突)、§6.22(验收)、§9.0h(本轮决策)docs/plugin-gotchas.md§7 — 宿主会校验你没在跑的平台的默认键位;OS 级快捷键宿主规则看不到
dsh-mixer v1.2.0 · 归档可撤销
归档可撤销了:误点归档不再是一条单行道。
安装 / 升级
只装 Client half(Host half 为空)。装前/装后请把原型包 dsh-mixer-spike 从 profile 卸掉 —— 它与正式版抢同一个 main key。
plugin_manager → install_bundle
target = "github:dtdths/dsh-mixer#v1.2.0"
装完硬刷新页面(冷启动),浏览器验收清单见仓库 docs/spec.md §6。
- 从 v1.0.0 / v1.1.0 升级:重新装上面这行(git 装法是快照,不会自动更新)。
- 开发迭代仍用仓库目录的
link:安装(改代码刷新即生效)。
这一版改了什么
- 归档后 6 秒内可撤销:归档成功(含「停止并归档」)后顶栏出现
已归档「标题」撤销,与侧边栏归档 toast 同一个 6 秒窗口、同一个服务动作(uiWorkspace.unarchiveSession)。 - 撤销是完整回滚:会话回到原工作区,通道回到原位置并恢复原宽度权重(之前被
×移出的仍然保持移出);同一时刻只保留一条撤销,新的归档替换旧的。 - 失败一定有出口:宿主拒绝 / 抛错 / 没提供
unarchiveSession,一律进顶栏提示,不会出现"点了没反应的撤销"。 - 宿主
archivedSessionIds快照有滞后,新增「刚撤销」豁免,避免通道刚放回就被 §4.1 的自动移除再剪一次。
验证
npm run check= 82/82 用例 + 冷启动守卫 PASS(新增 4 例:回原位/回宽度、拒绝提示、缺方法提示、只保留最新一条;外加宿主契约锚点钉住unarchiveSession服务面与 6000ms hold)。- 真实宿主(DSH
0.2.1-alpha.1,checkout5badb15)浏览器实测通过:归档 → 撤销 → 通道回原位与宽度;6 秒后 chip 自动消失。
已知边界(不是 bug)
- 撤销是一次性的 6 秒窗口;超时后要恢复只能去侧边栏「取消归档」,且通道需重新勾选。
- 抢回面板后每格滚动位置回顶;故意点空白会话的侧栏行离开调音台会被带回来。
- 拖拽虚影是 HTML5 静态图:长对话不含正文(给骨架),不跟手、不能加动效。
completionUnread绿点在本插件里不会被「看过」清除;会话浮层只做本地标题过滤。
文档
docs/spec.md— §4.1(第三道剪枝护栏)、§5.2(撤销条)、§6.21(验收项)、§9.0g(本轮决策)、§11(用例与常量)- issue #12 — 这条增强的来源与关闭记录
dsh-mixer v1.1.0 · 浮层交互改版
会话 浮层的一轮交互改版:新建入口挪进每个工作区行,行与按钮的 hover 态都能看清了。
安装 / 升级
只装 Client half(Host half 为空)。装前/装后请把原型包 dsh-mixer-spike 从 profile 卸掉 —— 它与正式版抢同一个 main key。
plugin_manager → install_bundle
target = "github:dtdths/dsh-mixer#v1.1.0"
装完硬刷新页面(冷启动),浏览器验收清单见仓库 docs/spec.md §6。
- 从 v1.0.0 升级:重新装上面这行(git 装法是快照,不会自动更新)。
- 开发迭代仍用仓库目录的
link:安装(改代码刷新即生效)。
这一版改了什么
- 新建会话挪进左列每个工作区行:把指针停在工作区行上,行尾出现
+会话,点击就在这个工作区新建(空白会话复用 →sessions.create→ 插到第 0 位 → 光标交接,路径与之前完全一致)。右列底部的「+ 在此新建会话」移除。 - 「新建落点」概念退休:左列不再有选中态与标签,点行只剩「右列滚到该工作区的会话」。之前的底部按钮 + 落点就是为了回答"建到哪",现在每行自己回答。
- 左列行 hover 态:改用宿主的交互 token,浅色主题下也看得见(旧实现用的
bg-layer-1在浅色主题里是纯白,等于没画)。 - 行内动作按钮三态:
+会话/归档/停止并归档平常态用button-elevated-fill,hover 态用 accent wash(更深/更亮一档),键盘聚焦有focus-visible焦点环 —— 按钮 hover 与行 hover 不再糊在一起。 - 会话行的 hover 底色同批换成同一个交互 token。
验证
npm run check= 78/78 用例 + 冷启动守卫 PASS(语法、纯函数缝、真 React 静态渲染、jsdom 真事件交互、真 store 引擎持久化、宿主契约漂移哨兵、冷启动)。- 真实宿主(DSH
0.2.1-alpha.1,checkout5badb15)上逐项验收通过(新建落点、hover 两态、按钮三态)。
已知边界(不是 bug)
- 抢回面板后每格滚动位置回顶。
- 故意点一个空白会话的侧栏行离开调音台时,会被判据带回调音台。
- 拖拽虚影是 HTML5 静态图:长对话不含正文(给骨架),不跟手、不能加动效。
completionUnread绿点在本插件里不会被「看过」清除,要等该会话下一轮跑起来才灭。- 钉住视图不写会话记忆;
会话浮层只做本地标题过滤(全文搜索留二期)。
文档
docs/spec.md— 设计、验收判据与实现状态;本轮决策见 §9.0f、§11docs/plugin-gotchas.md— DSH 客户端插件的坑与证据CONTEXT.md、docs/adr/— 术语与三条不可随手改的决策
dsh-mixer v1.0.0 · 调音台视图
调音台视图:一屏横向并列多个独立会话,每格一个通道(自己的对话记录与输入框),哪个通道在等你一眼可见。
安装
只装 Client half(Host half 为空)。装前/装后请把原型包 dsh-mixer-spike 从 profile 卸掉 —— 它和正式版会抢同一个 main key。
plugin_manager → install_bundle
target = "github:dtdths/dsh-mixer#v1.0.0"
装完硬刷新页面(冷启动),浏览器验收清单见仓库 docs/spec.md §6。
离线/内网可改用 npm pack 出的 dsh-mixer-1.0.0.tgz 安装;开发迭代则用仓库目录 link:(改代码刷新即生效)。详见 README「安装」。
这一版有什么
- 入口:会话头「打开目录」左侧的「调音台」按钮,或 composer 里敲
/mixer。 - 每格一个通道:官方 composer + 完整对话记录,草稿互不干扰;宽度可拖,且记住每格相对宽比。
- 状态与左侧会话行逐档对齐:等待(琥珀竖条)/ 执行中(转圈)/ 子代理运行中(并列第二个点)/ 已完成未读(绿点);空闲不画点(唯一有意偏差)。
- 顶栏:
会话两栏浮层(左列定「新建落点」、右列本地标题搜索 + 勾选增删 + 行尾归档 + 正在执行先问一次)、等待汇总、已移出通道一键放回、回到常规视图。 - 新建不离开调音台:插件自己
sessions.create+ retain;宿主两个入口(轨道新建按钮 /Cmd·Ctrl+Alt+N)按窄条件抢回面板;新会话置顶并接好光标。 - 拖动排序:整通道尺寸的虚影 + 其它通道实时让出同宽空槽;空会话的虚影保留 hero 与输入框,长对话给骨架(HTML5 静态拖影不含正文)。
- 空会话:与常规视图同相(宿主 hero 相位),并在几何中心之上再抬 24px(
HERO_LIFT_PX = 48)。
验证
npm run check= 79/79 用例 + 冷启动守卫 PASS:语法、纯函数缝、真 React 静态渲染、jsdom 真事件交互、真 store 引擎持久化、宿主契约漂移哨兵、冷启动。- 真实宿主(DSH
0.2.1-alpha.1,checkout5badb15)上按docs/spec.md§6 逐条验收通过,含四轮浏览器往返的虚影修复。
已知边界(不是 bug)
- 抢回面板后每格滚动位置回顶。
- 故意点一个空白会话的侧栏行离开调音台时,判据分辨不出,会被带回调音台。
- 拖拽虚影是 HTML5 静态图:长对话不含正文(给骨架),不跟手、不能加动效。
completionUnread绿点在本插件里不会被「看过」清除,要等该会话下一轮跑起来才灭。- 钉住视图不写会话记忆;
会话浮层只做本地标题过滤(全文搜索留二期)。
文档
docs/spec.md— 设计、验收判据与实现状态(§11)docs/plugin-gotchas.md— DSH 客户端插件的坑与证据CONTEXT.md、docs/adr/— 术语与三条不可随手改的决策