Files
ycode/docs/source-select-2026-10-16.md

93 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 模型设置 Select 恢复与验收
2026-10-16:供应商、模型、推理强度三个 Select 已替换旧简化 body portal。恢复原 Select/Input/Checkbox/Tooltip 的有限纯定义、CSS、SVG;表单 CRUD、createRequest/onCreateHandled、保存/测试策略保持现有宿主实现。本报告只声明下面列出的组件状态;不声明整个模型设置页或 WorkBuddy 云端目录已完整 1:1。
## 原版来源与身份
WorkBuddy 5.8.2,REA 6.5.0-visual.3。安装包根 SHA-256 `035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918`。原版静态文件、图标、运行时窗口、输入和截图全部经 REA;没有直接原版 CDP/FS/evaluate。
| 证据 | 内容 |
| --- | --- |
| `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb` | 固定运行脚本,`.tmp/rea-runtime-scripts.json` |
| `ev_25f013c9fd2ad66153046eec06e94fb6128bfacc1e87e57aa90db6bc419075ec` | 精确选取 ModelsSettingsPanel JS/CSS |
| `ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94` | 固定 CSS 与 token 来源 |
| `ev_53e6d36c2409b0548cc9bccc36ecbf68cbdec2b37069f50a0d85da2855516b92` | REA 定向导出 `renderer/assets/kimi-DiLyRSiJ.svg` |
| `ev_7f4bada062e5643e7866e0dbe8a35f2ab5903421c94b5084ab710dbe77b3ab19` | 900×680 原供应商 dropdown 静态几何 |
| `ev_a6b221d6a364c9f2db118a9dde18b9a3bc4a7c051663a6a0ccafb99c33c76237` | 900×680 原模型 dropdown 静态几何 |
| `ev_62882f0ba55ecd91b735fe4af31a61363835f86138c4f5337058764a43c90001` | 原供应商 CUSTOM 查询,最终图为 `frame-000.png` |
| `ev_35a2e7ad47bdec37b656f994d095e5204d2269677c3bd426b5b3f19ac5986070` | 原供应商“腾讯”查询,最终图为 `frame-000.png` |
| `ev_54fe936186511f4cf8e8b4234589abd7354362d61975a7c77f701874d21c2ca6` | 原供应商无结果查询,最终图为 `frame-000.png` |
| `ev_ed745c60674e32c2ab72f9987e743eefdef172c88febd38aa8cd29cf3989a240` | 原清空查询恢复列表、minimax 模型查询;最终图分别 `frame-000/001.png` |
上述搜索采集使用 REA 新增的受限单行 text action。capture-css 顶层截图/layout 在 probe 前采集,因此搜索结果应读取 `probe.frames` 的图与 regions,不能误用顶层初始画面。原版添加窗口结束时已关闭,REA list 确认只剩原首页 target。关闭目标后的最终截图请求出现 protocol_error,故没有声称该次关闭截图成功;没有保存配置、测试上游或发送消息。
关键源 SHA-256:
- `src-DPDj7_qD.js`:`747e41d215375e1214c366213aea7e077d85421923029c61cbb6e9562be58de0`。
- `contexts-BMeWSUHk.js`:`5f35b7489b107e21ef452c8ee88a95265756f6fc444841eef869228bbc44768b`。
- `floating-ui.react-dom-BDD8Fyfd.js`:`94036e3ed41ddb907b010cedbdb628a57e26e0585e2a9be45c9cbecfdd6ec978`。
- `src-Bh3YZ35H.css`:`88dbdc1cd3f59d0e8b75824512a465a2be714bc7af481d790fe3a9484f85e01a`。
- `tokens-Df-i-zsO.css`:`13f2bf82c96e5167a7d7098e36950c6c22c475b3337dbb8bb29ad2fe79cde696`。
- `ModelsSettingsPanel-FfiX-Du7.css`:`cd80b01d04589227a3c2db5dbe67b6c83b019bef18d3dba68ae5486448651018`。
- Kimi SVG,129,220 B:`2615b35b9dc747f5a453ca300a2a7e8b39c1298c11f5249979768c018157e7b7`。
Tencent/OpenRouter/Ollama PNG 来自固定 contexts 脚本的 data URI;其 SHA、字节数、offset 和所有纯定义位置记录于 `.tmp/source-select-recovery/manifest.json`。恢复脚本逐项校验源身份,再写 UI 文件;不会初始化原 bundle。
## 文件和宿主适配
新 `src/renderer/src/components/source-select/`:
- `SourceSelect.tsx`:有类型的单选接口,display:contents scope;不引入定位盒。
- `RecoveredSelectCore.tsx`:原 Select、group/filter、OptionLabel、Input、Checkbox 等纯定义,保留激活延迟、条件 class、Enter/Space、搜索与清空规则。仅给触发按钮增加宿主 aria-label。
- `RecoveredSelectTooltip.tsx`:原 Tooltip、截断测量、延迟、arrow、hover/press guard、退出状态;React 19 ref 访问与 CSS scope portal 作宿主适配。
- `SourceSelectPopover.tsx`:原内联 absolute 策略、offset→flip→shift→size 顺序、焦点管理、150ms/减弱动效1ms退出状态;Escape 在捕获阶段消费,避免同时关闭表单。
- `SourceFloatingPlatform.ts`:保留原旧版裁切祖先判断,用宿主 platform 计算最终矩形。新版 DOM 库会持续排除静态祖先,造成模型框306px并伸入footer;源算法每层更新 lastStyle,保留 editor-body,使模型框216px。没有硬编码 popup 高度或给表单添加 position。
- `SourceSelectIcons.tsx`、`SourceProviderGlyphs.tsx`、`SourceProviderIcon.tsx`、`provider-assets/`:源 SVG 路径/变换、原 PNG/SVG 资产。
- `source-select-recovered.css`:原规则、顺序、media 条件与 token 依赖闭包,含 Tooltip 源码 style 引用的 `--wb-tooltip-z-index=10200`。
- `source-select.css`:只处理 scope/display:contents 和图标 flex。
只在 `ModelSettingsPanel.tsx` 接 imports、替换 local Select、三个 callsite、provider label/row icon、既存非候选 modelId 注入;删除 `model-settings.css` 对应 model-ui dropdown 覆盖。根新增入口 intent hooks 未覆盖。没有修改 App/main/preload/store/package。
`@floating-ui/react 0.27.20` 由主上下文安装并固定,是 YCode 宿主依赖;原包精确版本未知,不声称版本相同。原 CSS/纯组件源码与宿主定位适配的来源和责任区分明确。
## 验证结果
`scripts/verify-source-select.cjs` 在独立 userData 的真实 900×680 Electron 原生窗口、软件合成/SwiftShader 环境运行真组件,加载生产 tokens.css/app.css。原版 UI 从未由此脚本操作。
30项通过,包括精确 popup/trigger 几何、内联归属、4组 DOM、真实 vendor mark、大小写过滤、清空、No options、禁止搜索创建项、第一次 Escape 只关 popup、模型列表裁切、Enter/Space 选择、disabled tabIndex、body portal/flip、当前非候选模型仅注入一次、<=6候选不展示搜索、Tooltip/arrow/zIndex,以及自定义 Input 测试不保存→保存→编辑→删除回调。
| 同一900×680状态 | 原版/当前精确矩形 |
| --- | --- |
| provider trigger | `[154,136,592,32]` |
| provider popup | `[154,176,592,306]` |
| model popup | `[154,344,592,216]` |
| model list | `[163,393,580,166]` |
| CUSTOM唯一结果 popup | `[154,176,592,120]` |
| 无结果 popup | `[154,176,592,96]` |
同状态整块 popup RGB 像素比对,无 mask、无容差:
| 状态 | 像素数 | 不同像素 | 最大通道差 |
| --- | ---: | ---: | ---: |
| CUSTOM查询,含搜索框/文字/分组/原自定义SVG/列表/边框 | 71,040 | 0 | 0 |
| NO_SUCH_PROVIDER_1,无结果含搜索/文字/No options/边框 | 56,832 | 0 | 0 |
结果 `.tmp/source-select-native-20261016/report.json`(30/30)、`pixels.json`、原生PNG与 crop/diff。它是组件和有限状态像素验收;fixture CRUD 使用受控 callbacks,不冒充后端或 OMP 验收。真实 App 多窗口入口/持久化/OMP 由主上下文的 production product-flow 单独验收。
可复现:
```powershell
node scripts/rea/recover-select-reference.mjs
npm run typecheck
npx electron scripts/verify-source-select.cjs
C:/Users/Administrator/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe scripts/compare-source-select-pixels.py
```
恢复输出:25项定义来源记录、16项 SVG 来源记录、4个资源、3个 CSS SHA。typecheck 两项目通过。主上下文负责最后统一 production build;本任务没有并发改写 out。
## 差异与未验证
原 runtime 16 providers、Tencent默认15模型;当前静态 domestic13 providers、默认8模型。保留当前实际静态目录,不填造额外源服务数据;因此默认全列表的大面积文字/数据不能声称像素全等。custom provider 的自由输入仍是真 Input;Select 搜索不会创建不存在模型,已有非候选值按照源客户端规则注入。
暗色、完整 hover/focus组合、长标题 Tooltip 的原版运行时截图、不同窗口/滚动组合、逐帧退出动效尚未全面对比。相关规则与 Tooltip 纯定义已恢复,宿主关键状态已测;源码恢复或本次两状态像素全等不替代其余状态验收。Kimi完整源SVG已取得,不能再把图标未知写成剩余阻碍。