dsh-codinput 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
2
2
 
3
3
  本项目遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 与 [语义化版本](https://semver.org/lang/zh-CN/)。
4
4
 
5
+ ## [0.3.6] — 2026-10-28
6
+
7
+ 模型座让位(issue #4):`conversation.input.model` 单值座上的第三方遮蔽者恢复显示;出厂 ModelSelect 不镜像,继续由自绘模型芯片代表。
8
+
9
+ ### 新增
10
+
11
+ - **`conversation.input.model` 单值座让位镜像**(`ModelSlot`):以 priority 遮蔽宿主模型座的插件(reasoning-slider / dsh-effort-dial 一类)注册会成功、条目确实是单值座赢家,但官方 InputBar 被遮蔽后该座唯一的 `renderSlot` 调用点随之消失——「不报错、永不上屏」(issue #4)。接管工具行现于官方同位(`.dci-standard-controls` 内、`input.right` 之后)镜像该座赢家,并把官方 `InputControlOwnerProps` 的 owner prop `locked` 原样下发。有第三方遮蔽者时让位并隐藏自绘模型芯片(同座只留一个控件,与官方单值座语义一致);无遮蔽者时保持既有自绘芯片(普通/悬浮/侧栏三形态同享)。
12
+ - **单值座「第三方遮蔽者」判据**(`isShadowingOccupant`):宿主动态包守卫对非 chain 槽位的 register **强制**分配页内遮蔽秩(`options.priority` 为唯一负数)、fiber 名取 `dyn/<pluginId>`;出厂占用者(client-ui-model-selection 的 ModelSelect)不带 priority(≡0)。只镜像前者——镜像出厂条目会与自绘芯片重复成两个模型选择器。
13
+ - **让位失败降级**:条目 `inject(sessionId)` 是宿主 fiber 上下文里的闭包,插件侧调用会丢 ctx 绑定,依赖宿主服务面的 inject 会抛错(实测 dsh-model-accordion 0.2.1 的 `directoryFor` 抛 `cannot get property "remote.session" without inject`)。`entryInjectFailed` 预检 + 条目边界 `fallback` 让单值座在「inject 不可复现 / 组件崩溃」时回退自绘芯片,而不是留空或连坐输入面。
14
+
15
+ ### 说明
16
+
17
+ - **已实测**(真实 web 宿主 `0.2.0-rc.2`,本地 link 安装本仓库构建产物,Chromium 自动化探针):reasoning-slider 0.0.7 与 dsh-effort-dial 0.1.0 均在官方模型座原位显示(`.dci-standard-controls` 内 `input.right` 座位之后)、自绘芯片隐藏、弹层可打开并读出真实模型/推理档位;卸载插件后自绘芯片原样恢复;同屏右座(dsh-prompt-enhancer)无回归;`__dshCodinputErrs` 为空、无控制台报错。
18
+ - **降级实测**:dsh-model-accordion 0.2.1(带 inject 面)在模型座降级回自绘芯片——座位不空、无控制台报错,仅 `__dshCodinputErrs` 记一条 `slot.inject` 诊断(其 inject 依赖宿主 ctx,插件侧不可复现)。
19
+ - **机制覆盖未逐一实测**:悬浮 / 侧栏两形态与普通形态共用同一 Toolbar(座位自动同享);`locked` 置灰只在会话拒绝交互时可见(官方语义 `removed || inert || !live`,Codinput 下发自身 `inert`,含 blocked,口径略严一档)。
20
+ - **边界**:第三方若自行给该座补声明 children 会与宿主已声明冲突(宿主 `already declared`),镜像层不做;多个插件同时遮蔽同一单值座属槽位竞争,由宿主 fail-loud。
21
+
22
+ [0.3.6]: https://github.com/Witherwithwinter/DSH-Codinput/compare/v0.3.5...v0.3.6
23
+
5
24
  ## [0.3.5] — 2026-10-23
6
25
 
7
26
  第三方输入座位补齐(issue #1 之左座):`conversation.input.left` 条目恢复显示;v0.3.4 的右座实现泛化为「座位镜像」层。
package/README.md CHANGED
@@ -134,6 +134,7 @@ Codinput 不自带配色:全部颜色取自宿主的 `--dsw-*` 设计 token(
134
134
  - `/` `@` 的候选内容来自宿主目录(技能 / 命令 / 文件 / 会话);宿主不提供时为空,插件侧无法补。
135
135
  - **没有语法高亮**、**没有 Esc 功能**——产品决策(输入面板不是代码阅读器)。
136
136
  - **Codinput 标签存在期间主输入整体隐藏**(唯一输入入口约定,浏览同栏其他标签也不恢复);官方 stats dock 与上下文小圈都渲染在官方输入框内部,因此随之消失、由本插件的复刻数据行接管。
137
+ - **第三方子座位的镜像边界**:左右座(list)与模型座(single)已镜像;`input.attachments` / `overlay` / `dock` 生态暂无租客,留扩展位。模型座上**带 `inject` 面且依赖宿主 ctx 服务**的插件(如 dsh-model-accordion)在插件侧无法复现其 inject 绑定,会降级回自绘模型芯片(不空、不崩,`__dshCodinputErrs` 记一条 `slot.inject` 诊断);纯 UI 替换类(reasoning-slider、dsh-effort-dial)已实测可正常显示与交互。
137
138
  - 同一 pane 复制出第二个「Codinput」标签时,第二个面板只出提示、不渲染第二个编辑面(输入入口唯一)。
138
139
  - 悬浮模式的手势只保留「拖回底部输入区 = 普通」;「拖入右侧栏 = 侧栏模式」已按产品决策舍弃。
139
140
  - 页面重载后,若侧栏布局恢复了 Codinput 标签但尚未被点开过,主输入会先出现——dockkit 对重载恢复的标签是惰性挂载,点一次标签即恢复侧栏承载。
@@ -156,6 +157,9 @@ npm run typecheck
156
157
  ### 改代码前值得先知道的宿主事实
157
158
 
158
159
  - **接管点**:`conversation.composer.bar`(single 槽位,`priority:-1` 遮蔽官方条目)。卸载条目即官方输入框原样恢复。
160
+ - **遮蔽 ≠ 渲染**:官方 InputBar 条目在自己的条身体内声明并渲染 `conversation.input.*` 子座位(`left` / `right` / `model` / `activity` / `permission` / `plan` / …)。Codinput 遮蔽 bar 条目后,这些座位**声明还在、第三方注册照常成功、条目还是赢家**,但没有任何 `renderSlot` 会读它们——表现是「插件装了、不报错、永不上屏」。解法是在自绘工具行的**对应位置**按官方语义复刻合成(`InputLeftSlot` / `InputRightSlot` 走 list 座,`ModelSlot` 走 single 座)。
161
+ - **单值座让位判据**:宿主动态包守卫对非 chain 槽位的第三方 register **强制**分配页内遮蔽秩(`options.priority` 为唯一负数)并给 fiber 名打 `dyn/` 前缀;出厂占用者(如 client-ui-model-selection 的 ModelSelect)不带 priority(≡0)。`ModelSlot` 只镜像「第三方遮蔽者」,出厂占位继续由自绘模型芯片代表。
162
+ - **第三方 inject 的 ctx 边界**:条目的 `inject(sessionId)` 必须在宿主 fiber 上下文里调用;插件侧直接调会丢条目所属插件的 ctx 绑定,依赖 `ctx.*` 服务面的 inject 会抛 `without inject`(实测 dsh-model-accordion 的 `directoryFor`)。单值座据此走 `entryInjectFailed` 预检,失败即降级回自绘芯片。
159
163
  - **唯一输入入口**:侧栏标签 body **挂载即承载**(不是按可见性——收起侧栏是 CSS 隐藏 + translate,body 仍挂载),主条目据此渲染 `null`;形态由 `承载 ? 'side' : prefs.mode` 派生,构造上不可能并存。承载声明挂在 body 生命周期上,因此标签定义必须 `keepMounted: true`:dockkit 默认会把非激活标签的 body 卸载,一旦切到同栏其他标签声明就消失、主输入回来(官方浏览器标签同款开关;注意重载后恢复的标签要**激活过一次** body 才挂载)。
160
164
  - **撤销历史**:三态切换会重挂载编辑器,故按会话暂存 `EditorState`(`take/putEditorSnapshot`);扩展回调走模块级 hooks 槽,避免复用旧 state 时调到已卸载实例的 props。
161
165
  - **官方侧灌入**(pick/claim/提交清空)用 `externalAnnotation` + `Transaction.addToHistory.of(false)`:不进撤销栈,撤销只记用户自己敲的内容。
package/TESTING.md CHANGED
@@ -53,6 +53,9 @@
53
53
  ## 4. 工具行控件
54
54
 
55
55
  - [ ] 模型下拉:显示当前模型与推理等级,切换后宿主 `/model` 一致
56
+ - [ ] **第三方模型座插件让位**:`dsh plugin --profile web add reasoning-slider`(或 dsh-effort-dial)后重载 → 模型座原位显示该插件的「模型 + 推理档位」触发器、**自绘模型芯片消失**;点开弹层能列出模型分组/档位;卸载插件重载 → 自绘芯片原样回来(issue #4 的修复路径)
57
+ - [ ] **模型座让位失败降级**:装 dsh-model-accordion(其 inject 依赖宿主 ctx,插件侧不可复现)→ 座位**降级回自绘芯片**(不留空、不崩输入面),`__dshCodinputErrs` 有且仅有一条 `slot.inject` 诊断,`__dshCodinputShell` 无 failed 项
58
+ - [ ] **模型座 locked**:会话不可交互(审批等待 / 权限拒绝等 `inert` 态)时,第三方模型座控件按自身 `locked` 语义置灰(不消费 `locked` 的插件不置灰属其契约)
56
59
  - [ ] 权限下拉:三预设 + glyph;选「完全权限」弹确认模态(勾选后才能启用)
57
60
  - [ ] 附件:slash「添加 · 文件」(接管期间**照常可用**——接管面绑定 shell filePicker)、**粘贴图片** / **拖文件进卡片**(拖入时有描边提示)都能入草稿并出现芯片;移除附件正常;工具行**无**附件按钮
58
61
  - [ ] **图片预览**:点图片缩略图 → 原图预览层(全屏遮罩+大图+右上关闭钮),Esc/背板按下/关闭钮三种方式可关,关闭后焦点还原到缩略图