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

8.2 KiB
Raw Blame History

模型设置 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 单独验收。

可复现:

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已取得,不能再把图标未知写成剩余阻碍。