99 lines
8.1 KiB
Markdown
99 lines
8.1 KiB
Markdown
# 已创建专家:源码恢复与宿主边界
|
||
|
||
日期:2026-10-16。原版版本:WorkBuddy 5.8.2。
|
||
|
||
本次只恢复组件文件、局部样式、恢复工具与本文;没有修改 App、ExpertsPage、CapabilityCenter、IPC、主进程或共享数据模型。生产页面与真实专家注册表由主上下文接入。生产代码没有填充专家样例,没有模拟安装、删除或召唤成功。
|
||
|
||
## 证据身份与观察范围
|
||
|
||
原版读取全部来自已保存 REA 结果,没有原版运行时操作,没有直接读取安装包。
|
||
|
||
- 安装包 root pin:`035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918`。
|
||
- JavaScript:`.tmp/rea-runtime-scripts.json`,Evidence `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb`。
|
||
- CSS:`.tmp/rea-css-recovered/manifest.json`,Evidence `ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94`。
|
||
- 空态 SVG:Evidence `ev_e5515aa84117724605f73439d065222c2e23b6ab8226be5d03f1ee0c7b387a9b`,原路径 `renderer/assets/empty-created-expert-BOI6XYXm.svg`;本地 `assets/empty-created-expert.svg`,SHA256 `157f07ef40d6cdf5f3aed362509861151fbdde0a8a9c89c98c26de6f35f664b7`。
|
||
|
||
恢复工具先核验全文 SHA,再用 AST 选择组件和纯函数。没有执行原模块初始化。
|
||
|
||
| 模块 | SHA256 |
|
||
| --- | --- |
|
||
| contexts-BMeWSUHk.js | `5f35b7489b107e21ef452c8ee88a95265756f6fc444841eef869228bbc44768b` |
|
||
| src-DPDj7_qD.js | `747e41d215375e1214c366213aea7e077d85421923029c61cbb6e9562be58de0` |
|
||
| src-0FGg1seX.js | `f2c6dbae949041b4e2bb456e8a23ae2837f2d7893ac24bf471485f77c7b15178` |
|
||
| contexts-BkjwYSZT.css | `50cbd673f7f35fc7f966bdddc6c9f5677fdfe944cb904888d214619fca259380` |
|
||
| src-Bh3YZ35H.css | `88dbdc1cd3f59d0e8b75824512a465a2be714bc7af481d790fe3a9484f85e01a` |
|
||
| src-CBaV_A3S.css | `2090ed21045c8f8b0fc388d76424c8751bf18fcd065cbbd5d0ef485163a2e36c` |
|
||
|
||
以下 offset 为 UTF-16,下界包含、上界不包含。完整 25 个函数体、273 个 CSS 记录及原始/适配 SHA 在 `assets/created-expert-source-manifest.json`。
|
||
|
||
| 原函数 | 模块与范围 | 函数体 SHA256 |
|
||
| --- | --- | --- |
|
||
| CreatedExpertCard | contexts `[3836312,3843963)` | `ecbaba2a34fe1e6afdb608845bf52e3d1e58518c17f8f7108d4ef43b865d3128` |
|
||
| CreatedExpertsPanel | contexts `[3845690,3851495)` | `73d81b6f1c3205fa1b8c67639fa821af60f0b29d236be4d2260406a75f579e47` |
|
||
| CreatedExpertDeleteDialog | contexts `[3605118,3606196)` | `8043033f6a107e1fbdb950df72dae9c28675ea6123262e977ea89eb948657ad4` |
|
||
| Dropdown | src-DPD `[824745,827584)` | `2d96b1bb76d33a59f1e8ecfe040bd40fc05255b9c4ff1831ab33a0f00cc8cbc1` |
|
||
| DropdownMenuList | src-DPD `[791722,795284)` | `bea2f5ed3c5c42cb6dd9599dfc6027bf2a29b5fa18526b6b18cb63d7a0c84a1e` |
|
||
| ConfirmDialog | src-0FG `[551341,554641)` | `25a5264f2a876512ef2d0a6217dbdceeb6246ed03d225795f5875af0b980d421` |
|
||
| Ku(cb Button) | src-0FG `[137355,138067)` | `a6bac5d42f03b0f4756d879228a2e24c35a7221fd6c6af8da7d9e7b1a94a656e` |
|
||
|
||
CreatedExpertsPanel 只有一个源码文字变更:静态 SVG 地址改成本地同 SHA SVG。原/适配函数体哈希分别记录。原卡片复用此前恢复的 ExpertCard;源图标还原了原 createIcon/bn 的 16px 默认尺寸,而非只复制 SVG path。
|
||
|
||
## 可接接口
|
||
|
||
`assets/created-expert-source.mjs` 具名导出:
|
||
|
||
```ts
|
||
CreatedExpertSourceProvider({ host?, children? })
|
||
CreatedExpertCard({ expert, onUse, onDelete?, onEdit?,
|
||
isMenuOpen?, onToggleMenu?, highlightKeyword? })
|
||
CreatedExpertsPanel({ createdExperts, activeTab, onTabChange,
|
||
onUse, onDelete?, onEdit?, searchKeyword?, toolbarExtra? })
|
||
```
|
||
|
||
`activeTab` 是 `expert | team`。Panel 保留原组件单一打开菜单 ID;独立 Card 必须由宿主维护 `isMenuOpen/onToggleMenu`。
|
||
|
||
- `onUse(id, initPrompt?)`:调用真实会话启动;预览的原 `onSummon(id, unused?, initPrompt?)` 保留参数位置。
|
||
- `onEdit(expert)`:把原专家对象交回对话驱动编辑入口。
|
||
- `onDelete(id)`:返回 `false` 或 reject 都保持原删除框。reject 只显示通用失败提示;等待中禁用确认、屏蔽关闭。返回 `true/void` 才按原组件成功分支关闭。
|
||
- `host.openPath(rootDir)`:必须由受控 IPC 实现。返回非空错误字符串或 reject 会显示原打开失败文案;组件不接触 fs。
|
||
- `host.resolveAssetUrl(value)`:可选本地头像解析器。默认只允许 image data/blob/file/ycode 协议,不自动请求 HTTP 头像。
|
||
- `host.renderPreview({expert,onClose,onSummon})`:宿主真实包详情。组件隔离 React 事件传播,避免关闭按钮冒泡到源 article 后重新打开。未提供时仅显示本地标题和描述,不能代替完整 TeamDetail。
|
||
- `host.notify(message,type)`、`host.locale: zh | en`:局部消息和原归档文案。
|
||
|
||
需要外层能力中心的源 token/主题样式。Provider 创建一次绑定,后续 host 对象更新只更新 ref,避免每次渲染重新挂载卡片/丢失弹窗状态。React、JSX 与 ReactDOM 均来自 YCode singleton。
|
||
|
||
卡片使用原字段:`id/name/displayName/profession/description/displayDescription/expertType/expertRootDir/avatar/version/updatedAt/tags/useCount`。`name` 是本地包字符串;displayName/profession/description 支持原 zh/en 文案结构。字段含义、包来源和激活由真实注册表负责。
|
||
|
||
## 宿主适配与未恢复内容
|
||
|
||
云开关 `ic/oc` 明确关闭;公开 facade 不接收 share/cloud callbacks。原服务 hooks 不执行、未导出。源卡片中保留的云分支不可由公开接口触发;不可把这部分声明为已实现。
|
||
|
||
原 Dropdown、菜单列表、文字、确认框、按钮、图标函数体保持。Popover 是本地宿主:使用已有 Floating UI 定位、4px offset、flip/shift、门户、外点关闭、Escape/方向键。仅验收当前本地平面菜单;没有宣称完整原 Popover、子菜单、tooltip 和动效逐帧等价。Tooltip 当前使用原文字的 native title。
|
||
|
||
cb 组件原依赖全局主题变量。本次恢复 src-CBa 原 cb token 声明并局部映射浅/深主题,向 ConfirmDialog 传宿主实际主题。缺少原 IDE 动态变量的错误前景/背景,通过明确适配桥接到已恢复 WB error/danger token。桥接不是原运行时颜色比对结论。
|
||
|
||
源 geometry 有条件:本地没有 useCount 时,ExpertCard 使用 centerCardWithoutMetadata,高度 auto;本次 128px。市场含 usage 卡片的固定 156px 不适用于此状态。CreatedExpertsPanel 文本 tabs 自身 24px;带 32px toolbarExtra 时整个 toolbar 自然 32px。
|
||
|
||
## 验证
|
||
|
||
```powershell
|
||
node scripts/rea/recover-created-experts.mjs --check --native-qa
|
||
npx tsc --noEmit -p tsconfig.web.json
|
||
node scripts/rea/recover-capability-center.mjs --check
|
||
```
|
||
|
||
恢复与旧能力中心源码审计通过;web TypeScript 通过。最终独立原生验证 **34/34 PASS**,报告 `.tmp/created-expert-source-H0svkz/report.json`。`--native-qa` 自带可重复的隔离 fixture:创建自身 `.tmp/created-expert-source-*` 目录与三份测试 manifest,生产 React bundle、真实 Electron 窗口,不假造 IPC、不发送消息、不使用用户目录、不操作原版。
|
||
|
||
最终报告目录见命令输出,`report.json` 含原生断言、geometry、renderer error/HTTP 列表,六张 PNG 保存卡片、菜单、浅/深删除框、空态与 480px 窄页。覆盖:原菜单四项与 16px 图标、24px more、32px item、4px anchor gap、单一菜单、Escape、编辑/目录/召唤参数、预览关闭不重开、删除 false/reject/pending/success、搜索与 team 分类、host 更新不卸载、明暗主题、窄屏长标题和 0 外部 HTTP/renderer error。
|
||
|
||
独立 fixture 通过不等于完整生产 App 流程通过,也不是原版全状态像素验收。真实注册表、对话驱动创建/编辑、删除/召唤及完整原版截图比较由主上下文继续验收。
|
||
|
||
## 文件
|
||
|
||
- `src/renderer/src/capabilities/assets/created-expert-source.mjs`
|
||
- `src/renderer/src/capabilities/assets/created-expert-source.d.mts`
|
||
- `src/renderer/src/capabilities/assets/created-expert-source-manifest.json`
|
||
- `src/renderer/src/capabilities/created-expert-source.css`
|
||
- `scripts/rea/recover-created-experts.mjs`
|
||
- 本文与 `.tmp` 隔离验收报告。
|