Skip to content

Releases

dsh-mixer v1.6.1 · 调音台里三类打开入口的修复

Choose a tag to compare

@dtdths dtdths released this 28 Oct 13:41

修掉调音台里三类"点了没反应 / 报错"的打开入口,都是在真实宿主里复现、修好、再复验过的。

安装

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 · 退出跟随当前通道 + 调音台内文件链接

Choose a tag to compare

@dtdths dtdths released this 28 Oct 11:23

安装

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 · 退出调音台后文件链接恢复正常

Choose a tag to compare

@dtdths dtdths released this 23 Oct 07:17

修掉一个「回到常规视图后,点文件链接必弹错」的退出路径 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(checkout 687f282)。真机复验:
    • 进调音台 → 「常规视图」→ 右栏立刻恢复命名(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 改版

Choose a tag to compare

@dtdths dtdths released this 21 Oct 13:34

修了一个真实 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(checkout 687f282)。README 的三张截图就是在这个宿主上驱动本包截取的;格内审批卡实测通过。

已知边界(不是 bug)

  • 侧栏折叠后仍留 56px 轨道(宿主没有归零选项,接管侧栏会丢设置入口,docs/spec.md §7.1)。
  • 新建通道后各格滚动位置回顶(ADR-0003 里记的重挂代价)。
  • solo 与「移出」不持久化,刷新即回到并排;通道集合与每格宽度是持久化的。

完整实现状态、验收判据与决策记录见 docs/spec.md §11。

dsh-mixer v1.5.0 · 架构重构 + 光标落末尾

Choose a tag to compare

@dtdths dtdths released this 21 Oct 02:35

一次纯架构重构(行为不变)+ 一处体验修正:跳转通道后光标停在草稿末尾。

安装 / 升级

只装 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,checkout 5badb15)浏览器复验通过:归档 → 顶栏撤销 → 通道回原位/回宽度;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

Choose a tag to compare

@dtdths dtdths released this 20 Oct 12:51

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,checkout 5badb15)浏览器实测:进入/切换/退出、宽度复原、归档后自动退出、刷新回并排,均正常。

已知边界(不是 bug)

  • solo 是视图状态,不改变任何会话的运行;被压成窄条的通道仍会执行、仍会亮灯。
  • 刷新页面会回到并排(有意不持久化)。
  • 快捷键只在调音台是当前面板时生效;Cmd+Option+←/→ 是 macOS 媒体键,不可用(用 Cmd/Ctrl+Alt+] [)。
  • 拖拽虚影是 HTML5 静态图(长对话不含正文);会话 浮层只做本地标题过滤。

文档

  • docs/spec.md — §5.7(solo 的形态、进出、分界与"为什么不用 Esc")、§5.6(快捷键)、§6.23、§9.0i
  • CONTEXT.md — solo / 移出 / mute 的术语边界

dsh-mixer v1.3.0 · 通道间跳转快捷键

Choose a tag to compare

@dtdths dtdths released this 20 Oct 12:30

通道间跳转快捷键: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,checkout 5badb15)浏览器实测:数字键与方括号跳转均正常,冷启动无 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 · 归档可撤销

Choose a tag to compare

@dtdths dtdths released this 20 Oct 09:13

归档可撤销了:误点归档不再是一条单行道。

安装 / 升级

只装 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,checkout 5badb15)浏览器实测通过:归档 → 撤销 → 通道回原位与宽度;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 · 浮层交互改版

Choose a tag to compare

@dtdths dtdths released this 20 Oct 08:12

会话 浮层的一轮交互改版:新建入口挪进每个工作区行,行与按钮的 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,checkout 5badb15)上逐项验收通过(新建落点、hover 两态、按钮三态)。

已知边界(不是 bug)

  • 抢回面板后每格滚动位置回顶。
  • 故意点一个空白会话的侧栏行离开调音台时,会被判据带回调音台。
  • 拖拽虚影是 HTML5 静态图:长对话不含正文(给骨架),不跟手、不能加动效。
  • completionUnread 绿点在本插件里不会被「看过」清除,要等该会话下一轮跑起来才灭。
  • 钉住视图不写会话记忆;会话 浮层只做本地标题过滤(全文搜索留二期)。

文档

  • docs/spec.md — 设计、验收判据与实现状态;本轮决策见 §9.0f、§11
  • docs/plugin-gotchas.md — DSH 客户端插件的坑与证据
  • CONTEXT.md、docs/adr/ — 术语与三条不可随手改的决策

dsh-mixer v1.0.0 · 调音台视图

Choose a tag to compare

@dtdths dtdths released this 20 Oct 04:10

调音台视图:一屏横向并列多个独立会话,每格一个通道(自己的对话记录与输入框),哪个通道在等你一眼可见。

安装

只装 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,checkout 5badb15)上按 docs/spec.md §6 逐条验收通过,含四轮浏览器往返的虚影修复。

已知边界(不是 bug)

  • 抢回面板后每格滚动位置回顶。
  • 故意点一个空白会话的侧栏行离开调音台时,判据分辨不出,会被带回调音台。
  • 拖拽虚影是 HTML5 静态图:长对话不含正文(给骨架),不跟手、不能加动效。
  • completionUnread 绿点在本插件里不会被「看过」清除,要等该会话下一轮跑起来才灭。
  • 钉住视图不写会话记忆;会话 浮层只做本地标题过滤(全文搜索留二期)。

文档

  • docs/spec.md — 设计、验收判据与实现状态(§11)
  • docs/plugin-gotchas.md — DSH 客户端插件的坑与证据
  • CONTEXT.md、docs/adr/ — 术语与三条不可随手改的决策