From 221e955c6bee2cb1e25837e5b9e96f09e18f0091 Mon Sep 17 00:00:00 2001 From: Menghuan1918 Date: Sun, 20 Sep 2026 10:28:05 +0800 Subject: [PATCH] fix(sidechat): keep the rc line's reconnect label via a documented shim 0.1.6-alpha.2 removed ConnectionIndicator's reconnectLabel, but the peer range (^0.1.5-rc.1) still covers the rc line, where the prop is REQUIRED and renders the retry button's hover/focus action text. Widening the component type once keeps both lines correct: rc renders the label, alpha.2 ignores the extra key. The shim carries a comment naming the condition for deleting it. --- .../2026-09-17-dsh-0.1.6-alpha.2-adaptation.md | 5 +++-- src/client/SideChatView.tsx | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/docs/plans/2026-09-17-dsh-0.1.6-alpha.2-adaptation.md b/docs/plans/2026-09-17-dsh-0.1.6-alpha.2-adaptation.md index f88abcb..820ef8c 100644 --- a/docs/plans/2026-09-17-dsh-0.1.6-alpha.2-adaptation.md +++ b/docs/plans/2026-09-17-dsh-0.1.6-alpha.2-adaptation.md @@ -16,7 +16,7 @@ |---|---|---|---| | 1 | **移除** `IconSendOutline16`(该版本唯一被移除的图标;新增 7 个) | `SideChatView` 编译失败 | 换成 `IconSendOutline14`(编译器建议的继任者) | | 2 | `TerminalBlockLabels` **新增必需字段 `noExitCode: string`**(语义:命令结束时拿不到退出码——被未知信号终止或从未启动) | 标签对象类型不符 | 补 `noExitCode` 并新增词条 `sideChatBlockNoExitCode`(20 份词典同步) | -| 3 | `ConnectionIndicator` **移除 `reconnectLabel`**(停用态文案本身已命名重连动作) | 传了不存在的 prop | 删掉该 prop;`sideChatConnReconnect` 词条保留(20 份词典已存在,删除是 20 文件噪声,留待上游回归或后续清理) | +| 3 | `ConnectionIndicator` **移除 `reconnectLabel`**(停用态文案本身已命名重连动作) | 传了不存在的 prop | **跨线兼容 shim**:rc 线里该 prop 是必需且是重连按钮的 hover/焦点动作文案,peer 范围仍覆盖 rc,因此把组件类型加宽一次(`ConnectionIndicatorCompat`)并继续传该 prop——rc 渲染它、alpha.2 忽略多余键(`src/client/SideChatView.tsx` 有注释说明何时删掉这个 shim) | | 4 | `Menu` / `Modal`:**仅文档 + 键盘语义细化**(Tab 在列表内 settle、Escape 归属、菜单打开时 Escape 先给菜单) | 无类型破坏 | 不改代码;e2e/harness 覆盖既有交互 | | 5 | `index.d.ts` 新增导出:`Checkbox`、`isDarwinDesktop`、`MarkdownDelegateProvider`/`MarkdownDelegate`/`MarkdownExternalLinkHandler`、`UserTextReferences`;模块新增 `SiteGlyph` | 纯增量 | 不使用,不改代码 | | 6 | `dsh-tools` 在本线**不再 peer `dsh-code-runtime`** | 旧 hoist 失去理由,且上游从未发布该包 alpha.2 | **从 devDependencies 删除 `dsh-code-runtime`**(保留会造出「22 个 alpha.2 + 1 个 rc.2」的混合树) | @@ -51,4 +51,5 @@ peer 范围、`dsh.client.inject`、chunk externals 白名单、`SIDEBAR_SERVICE - **不改 peer 下限**(用户确认):`^0.1.5-rc.1` 继续容纳 rc.1/rc.2 用户;本适配对他们是无感的。 - **不改 README 的版本徽章与安装策略文案**:它们描述的是**已发布**的 v0.19.1("已在 0.1.5-rc.2 上验证"),把分支上的 alpha.2 验证写进去会让已发布版声称未做过的验证。发版时(若该分支进入某个 alpha 版本)再一并更新。 -- **不清理 `sideChatConnReconnect`**:上游移除的是 prop 而非该文案的其它用途可能回归,删它要动 20 份词典;留待上游确认。 +- **不清理 `sideChatConnReconnect`**:跨线 shim 仍在用它(rc 线必需),删它要动 20 份词典且会让 rc 用户少文案。 +- **源码编译需要 alpha.2 的类型**:标签对象里 `noExitCode` 在 rc 线类型上不存在(多余属性会被 TS 拒绝),所以本分支的 `pnpm typecheck` 以 alpha.2 为准;运行时两线都安全(多余键被忽略)。 diff --git a/src/client/SideChatView.tsx b/src/client/SideChatView.tsx index 91464b7..1f06bde 100644 --- a/src/client/SideChatView.tsx +++ b/src/client/SideChatView.tsx @@ -73,6 +73,21 @@ import { api } from './api.ts' import { usePolling } from './use-polling.ts' import { t } from './locales.ts' import type { SessionScope } from './api.ts' +import type { ComponentProps, ComponentType } from 'react' + +/** + * Cross-line compatibility shim for `ConnectionIndicator`. + * + * 0.1.6-alpha.2 REMOVED the `reconnectLabel` prop (the outage label already + * names the action), while the 0.1.5-rc line still REQUIRES it as the retry + * button's hover/focus action text. The plugin's peer range covers both, so + * the component type is widened once here and the prop is always passed: rc + * renders it, alpha.2 ignores the extra key. Delete this shim (and the prop) + * when the peer floor moves past the rc line. + */ +const ConnectionIndicatorCompat = ConnectionIndicator as unknown as ComponentType< + ComponentProps & { reconnectLabel?: string } +> import type { SidebarTab } from './state.ts' import css from './SideChatView.module.css' @@ -753,9 +768,10 @@ export function SideChatView(props: { {connectionState !== undefined && connectionState !== 'connected' && ( -