chore: establish YCode replication baseline and TODO
This commit is contained in:
commit
6dc59f89ba
1118 files changed
+196002
No files matched your search
@@ -0,0 +1,78 @@
|
||||
# 输入框已选专家标签:源码恢复(2026-10-16)
|
||||
|
||||
已新增独立 `SourceActiveExpert`,未编辑 App、ChatPane、ComposerControls、stores 或主进程。原版仅分析已保存 REA 脚本、CSS 与被动布局;本轮没有操作原版 UI。
|
||||
|
||||
## 证据与源码身份
|
||||
|
||||
WorkBuddy 5.8.2,REA 安装包基线 root SHA `035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918`。
|
||||
|
||||
| 来源 | Evidence / SHA |
|
||||
| --- | --- |
|
||||
| `.tmp/rea-runtime-scripts.json` | `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb` |
|
||||
| `src-DbE1_mgM.js` | `6c6ce63c93854783270e855572797d75e536e3b8d4548410e31fe9d147e1feb4` |
|
||||
| `src-CyXHA0IC.css` | `a5e26b537bb50323aefbf25abddad52e288dd3868598be8d255d70886fe77cfe` |
|
||||
| `src-CBaV_A3S.css`(颜色/主题变量) | `2090ed21045c8f8b0fc388d76424c8751bf18fcd065cbbd5d0ef485163a2e36c` |
|
||||
| 当前原版被动截图/布局 | `ev_7e9604adb87a3d21570eb7a371001e48b3d316ee0388a03a97e2cb564d03aff7`,`.tmp/rea-expert-usage-current-20261016/` |
|
||||
|
||||
恢复脚本在解析前验证脚本和 CSS SHA。生成的 `SourceActiveExpertManifest.json` 完整保留30个原函数的源码字符区间和 body SHA,以及输出 SHA/字节。源区间为 `[start,end)`,不是行号:
|
||||
|
||||
| 函数 | 原字符区间 |
|
||||
| --- | --- |
|
||||
| `ExpertChip` | `[1693365,1695005)` |
|
||||
| `ExpertAvatar` | `[1695006,1695726)` |
|
||||
| 可显示判断、准备中匹配、team头像解析 | `[1692572,1693249)` |
|
||||
| fallback seed 与确定性颜色 | `[1146532,1146927)` |
|
||||
| `ChipCloseIcon` | `[471321,471715)` |
|
||||
| `LoadingSpinnerIcon` | `[406658,407080)` |
|
||||
| `Tooltip$1` | `[377803,380607)` |
|
||||
| `TooltipLayer` | `[373215,375023)` |
|
||||
|
||||
初次找到的 `wb-status-chips-BkgUUbOl.js` 是另一套 `_1udom_` 实现。当前被动画面实际使用 `cr-*` 类,因此最终恢复上表 `src-DbE1_mgM.js` 的组件,没有混用旧组件的 avatar 或 tooltip 逻辑。
|
||||
|
||||
## 原版行为与宿主适配
|
||||
|
||||
- 标签优先显示 `profession.trim()`,其次为非 id 的 `name.trim()`。头像/名称尚未 hydrate 完整时沿用最近可展示的选择;显式 null 清空缓存。
|
||||
- 外层是 `role=status` 静态标签。**没有点击标签打开菜单的源码行为**;专家菜单仍由输入工具栏的 + 入口负责,故这里不添加 `onOpenPicker`。
|
||||
- hover/focus-within 时头像位置换成原16px ×图标。清除按钮 stopPropagation,乐观清空选择,再 await provider.onChange(null);拒绝时恢复。
|
||||
- 原 provider 的 selected-id effect 会 silent summon;`suppressAutoSummon` 可跳过。YCode 真实选择/召唤由根上下文负责,标签 adapter 对非 null silent 通知不再次激活,避免重复 runtime 初始化。
|
||||
- preparingExpertId 匹配 id 或 marketExpertId,原样显示 `aria-busy`、头像透明度与 spinner。坏图片回退到 profession/name/id seed 首字符及源8色确定性背景;team 可使用 assistantDisplayName/Profession/AvatarUrl。
|
||||
- compact 仅保留32px圆形标签并给职业 tooltip;普通模式文字最大140px,只有截断时显示完整 tooltip。恢复原 Tooltip、TooltipLayer、150ms transition、200ms hover delay、3px arrow、键盘 focus 判断和按压抑制 helpers。
|
||||
- `scopeKey` 是宿主额外边界,切换时重挂载缓存;旧清除失败不能覆盖新会话或新选择。`disabled` 是额外忙碌状态:禁用按钮并保留头像。原源码此标签没有完整 disabled 参数,这部分明确是 YCode host 适配。
|
||||
- React/JSX 与 `@floating-ui/react` 使用 YCode 单例/已pin宿主依赖;没有声明等同原版打包依赖版本。源码 JSX namespace 绑定替换、CSS选择器限定作用域、tooltip portal包裹作用域;原 CSS 声明值保留。主题增加 YCode `data-theme` 到原 light 规则的宿主映射。
|
||||
|
||||
## 接口与集成
|
||||
|
||||
```tsx
|
||||
import SourceActiveExpert from './capabilities/SourceActiveExpert'
|
||||
|
||||
<SourceActiveExpert
|
||||
expert={expert ? {
|
||||
id: expert.id,
|
||||
name: expert.name,
|
||||
profession: expert.profession,
|
||||
avatarUrl: expert.avatarUrl
|
||||
} : null}
|
||||
scopeKey={actualOwnerKey}
|
||||
disabled={busy}
|
||||
preparingExpertId={preparingExpertId}
|
||||
onRemove={async () => { await persistActualDeselection() }}
|
||||
/>
|
||||
```
|
||||
|
||||
`onRemove():void|Promise<void>` 必须执行真实清除;失败应 reject,不要先吞掉错误,组件才能按源回滚。父组件负责更新 controlled expert 与会话持久化。可选 `compact`。`ActiveExpert` 还支持 marketExpertId、expertType、assistantDisplayName、assistantProfession、assistantAvatarUrl、suppressAutoSummon。
|
||||
|
||||
## 文件与验证
|
||||
|
||||
新增模块:`SourceActiveExpert.tsx`、`SourceActiveExpertRuntime.tsx`、生成 `SourceActiveExpertRecovered.mjs/.d.mts`、`SourceActiveExpertSource.css`、`SourceActiveExpertManifest.json`。恢复脚本 `scripts/rea/recover-active-expert.mjs`,原生验证 `scripts/rea/test-active-expert-native.mjs`。
|
||||
|
||||
```powershell
|
||||
node scripts/rea/recover-active-expert.mjs --check
|
||||
node scripts/rea/test-active-expert-native.mjs
|
||||
npm run typecheck
|
||||
```
|
||||
|
||||
结果:恢复一致性 **30函数/3源通过**,typecheck通过;原生 Electron **38/38通过**,报告 `.tmp/active-expert-native-yS4h06/report.json`,截图 normal/hover/preparing/compact-tooltip。
|
||||
|
||||
固定原文“高级算法工程师”在同字体环境中:原 `[458.125,463.5,127,32]`,fixture `[100,100,127,32]`;位置由测试容器决定,尺寸一致。头像16×16、文字91×20、间隙4、左右padding8、13px/500/20px文字、圆角、颜色、transition等16项选定计算值与保存的REA布局完全相同。其余检查覆盖名称优先级、坏头像/team头像、准备中、长文本、紧凑模式/tooltip、真实 Enter 清除、失败恢复、异步切换选择和owner隔离。
|
||||
|
||||
本次 avatar 测试使用受控本地 fixture 图片;未将它当作原专家头像像素。原版 hover、preparing、tooltip 动态没有新增实时取证,只能确认其源实现已恢复并经本地执行。尚未验收整应用布局、原头像同状态像素、自然 Tab 遍历可达性和全状态动效;这些不能由编译/局部几何通过替代。
|
||||
Reference in new issue
Block a user