Files
ycode/docs/assessment-experts-2026-10-16.md

157 lines
24 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.
# WorkBuddy 专家:源码评估与实现拆分(2026-10-16)
本轮仅评估,未改生产、未安装或启用专家、未向原版发送消息。所有原版输入均为 REA 已保存记录,补采安装包文本使用 REA public `export-selected-artifact-text` 并固定 ASAR SHA。未使用历史 CDP 文档作证。
**结论:专家页面及选择菜单有足够源码可做严格恢复;真正的专家能力涉及插件包、会话绑定、依赖连接和对话驱动创建,当前证据不足以把它缩成一张 prompt CRUD 表。** 创建/编辑入口在原版注入 `expert-manager` 技能及提示词并返回首页;本地 daemon 的包处理与实际 agent 执行仍需补证。云端商店、分享、购买及同步有独立服务依赖。
## 证据与身份
目标版本 **WorkBuddy 5.8.2**,根 ASAR SHA-256:
`035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918`。
版本依据:REA `ev_2caae424199a38371af743ef9111db835504c2dae54c1f02e1f9e5511032cc6b` 中 `package.json`,SHA `a295ae602e936abda5ae45f7a5c21fc481014989d2cf369182d3ce5d9dd400c2`,`name=@genie/workbuddy-desktop`、`version=5.8.2`、`main=main/index.js`。
下表缩写用于后文逐项定位。JS/CSS offset 为 **UTF-16 字符索引、end exclusive**,不是字节偏移。全文 SHA 以 UTF-8 计算;函数/赋值源体另有 SHA,见 `.tmp/experts-source-audit.json`。表中所有源码事实均属于此固定版本;静态代码存在不等于分支已执行。
| 引用 | 文件 | 全文 SHA-256 | REA Evidence |
| --- | --- | --- | --- |
| C | `renderer/assets/contexts-BMeWSUHk.js` | `5f35b7489b107e21ef452c8ee88a95265756f6fc444841eef869228bbc44768b` | R |
| P | `renderer/assets/workbuddy-provider-DkH2YFYM.js` | `b588e875c469978f216beec86bdf4b6c33a31c0266f9bf996881b8dbf37b5dc7` | R |
| W | `renderer/assets/wb-CocRQn4C.js` | `d9ddb5d5464f2d863659a01493b58220bb5a0e270c22b16f405cfaeab2a7a972` | R |
| I | `renderer/assets/wb-input-add-B045GnIg.js` | `7842fa4321d5351bf6c822bbd0253e0d6d6e68cc9cfae3f2470b3d493c23daf4` | R |
| M | `renderer/assets/main-content-core-Dlaq72qt.js` | `998ada4969d1bf7af8d2dace15c0bc2a3ca5bf0ee9cf941823d85a66d6967991` | R |
| S | `renderer/assets/services-Dzvfe5BC.js` | `fb5344ad7a525593e4fde494997539a148a0ea7233dd09ede96ab206b178fc57` | R |
| T | `renderer/assets/runtime-B7PLES2V.js` | `b944fdfed0d52ca4c588833f94f50f878169a9244c05ed186abfa4eb37957911` | R |
| U | `renderer/assets/expert-url-entry-coordinator-DDSbvr4R.js` | `34788957ae698799b6863d2d183c3a7d22b4dd08d4fc646ace656d766e86455f` | R |
| B | `renderer/assets/expert-install-intent-buffer-EAdFw3P1.js` | `bda5eca334cc2a713b1bab0fe8119a21000b104d834deb11647641050814b8ae` | R |
| CSS | `renderer/assets/contexts-BkjwYSZT.css` | `50cbd673f7f35fc7f966bdddc6c9f5677fdfe944cb904888d214619fca259380` | `ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94` |
| MAIN | `main/index.js` | `6cc9d3079aca910b7c14c37a0a3b6f6af03f2b319d5625625926dbf5ad61aec8` | `ev_3de1f34ca809cd2e4f98dfac960b1913db75e43cd88957d3e4f82b3b16f47fbf` |
R = `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb`,保存于 `.tmp/rea-runtime-scripts.json`,本轮 **339/339** 正文 SHA 匹配。Root 新采 `.tmp/rea-expert-runtime-scripts-20261016.json`,Evidence `ev_e91787b1d4dea651582c6cf12827775b9068b0ee8b80c68ba08d4c1d87d94e90`,**329/329** 正文 SHA 匹配;以上相关同名模块 SHA 未变。
补采 MAIN 与其已引用 `main/host.js`、`main/workbuddy-packaged-runtime.js`、`main/bridge.js`、`main/workbuddy-paths.js`,使用 public REA root pin。四个补充文件 Evidence `ev_4b2ecb341891999360045418cacfa9a51cd7bd4185d370f6766dc4cb4713b653`;每项 SHA 及长度保存在 audit 的 `supplementary`。本轮没有声称搜索完整 daemon/CLI 文件树。
## 1. 页面、列表与详情
| 源码观察 | 精确依据 | 实施含义 / 尚未验证 |
| --- | --- | --- |
| `ExpertCenter` 管理 center / 我的专家子页、搜索、专家/专家团、builtin/enterprise 来源、reco/popular/newest 排序、详情选择;窄布局条件 `0 < screenWidth < 980` | C `ExpertCenter` `[3876908,3886115)`;源体 SHA `aa152a80d85870f456cad1c9d53383696a637c597ded7128ce9bd55458312f67` | 可恢复同一页面状态机;980 临界值尚无本轮窄屏原版验收 |
| 页面依赖布局配置与 feature flags;布局 tabs 从 expert/expert_group/enterprise_expert 映射,并按 position 排序去重 | C `resolveExpertPageLayoutTabs` `[3568360,3568681)`、`useExpertPageLayout` `[3567807,3568197)` | 不能把当前账号看到的 tabs/分类/推广数据写死成全量规格 |
| 列表卡可展示头像、职业、描述、标签、作者/版本/使用量、付费/购买状态、云同步徽标;支持 selectable、disabled、footer、额外内容等 props | C `ExpertCard$1` `[3531248,3540077)`,SHA `a5fc885e829f97854a6cbbf6b0cfbcab21e6f2c7cd0f2581b5f911b662f019e3`;纯字段辅助函数 `[3525615,3527802)` | 可恢复 DOM/图标/CSS;购买规则与遥测通过明确 host adapter,不能伪称已有支付 |
| 详情提供头像/角色、简介、标签、metadata、快捷提示词、相关案例、团队成员与召唤动作 | C `ExpertDetailContent` `[3826056,3833750)`,SHA `6edf5d32b8ecba712593611f13ea8d763d9659551d2db060d8dab2fb7428eb56`;`ExpertDetailMetadata` `[3821706,3823592)` | 原 props:`{expert,resolveAvatarUrl,onClose,onSummon,onCaseClick,onRefreshExperts}`;详情与召唤/购买控制需拆开适配 |
| 我的专家分专家/专家团;过滤、空态、编辑/删除、逐个/批量云上传、下载及云端删除 | C `CreatedExpertsPanel` `[3845690,3851495)`,SHA `73d81b6f1c3205fa1b8c67639fa821af60f0b29d236be4d2260406a75f579e47`;`CreatedExpertCard` `[3836312,3843963)` | “我的专家”包含本地与云状态;不是另一个固定 marketplace 列表 |
| 搜索当前 locale 的 name/displayName/profession/description/displayDescription,忽略大小写,含空格关键字也尝试去空格 | C `filterExpertsByKeyword` `[3527461,3527802)` 及相邻纯函数;I `useExpertSearch` `[38275,39285)` | 页面本地过滤与 picker 的跨目录搜索不同,不宜共用一个简化 includes 全部替代 |
Root 已保存原版专家首页真实画面和计算布局:
`.tmp/rea-expert-entry-static-20261016/{workbuddy.png,layout.json}`,Evidence
`ev_20de2f04c99b1c27bc39b61f5e2f5a430c3c7029b09afb76b363652eb4fadc89`。
PNG SHA `e49ce30072a11898f3114b73dd3b941fe93fc0da46eee6fb15cb765635c5591a` 已核验;视口 **1336×901**。这里只读取该 REA 记录,没有本子任务新操作原版。
已观察几何:node783 `.expert-center-page` 为 `[284.28125,30,1051.703125,871]`;node786 topbar 高64;node826 起推广卡264×202、间隔16,DOM 实际有10张,首屏可见区域涉及前4张,不能把“4张可见”当总数;node1115/1147起常规卡宽319.234375、高156,三列、横距16。此截图只是一个账号/浅色/宽度/数据态,尚不证明暗色、hover、详情、我的专家、错误/加载、长文本或全响应式像素一致。
对应可直接恢复的 CSS:CSS offset811600 `.\_page_1yu3o_7` 定义 gutter24、主题背景/文字与布局;733774 `.\_card_1hdcm_2`;735217 `.\_centerCard_1hdcm_60` 定义中心卡156px;765443 list row/tabs/sort;730341 分类横向拖动滚动条;722717 我的专家空态。须保留上下文主题 token、keyframes、媒体条件、module class mapping;抽出几条颜色/字号不足以验收 1:1。
## 2. 数据模型(观察到的 renderer 契约,不冒称持久化 schema)
| 层 | 已观察字段 / 枚举 | 源码依据 |
| --- | --- | --- |
| 商店原始条目 → 专家展示数据 | marketExpertId/sourceId/categoryId,name/displayName/profession/description 多语言,avatar,plugin/version/downloadUrl,defaultInitPrompt/quickPrompts/tags,expertType,useCount/author/developer,members/leader,visibility/source/namespace,payMode/payDetail,createdAt/updatedAt/isCloud/isInCloud | W `mapMarketItemToExpertInfo` `[108592,110484)`,SHA `30fecc1b1838880639efd68cf31f494ac14691d6ce5e2ab4eb104bc4b1edbc0b` |
| picker / 输入区选择项 | id/name/profession/avatarUrl,defaultInitPrompt,pluginName/updatedAt,expertType=`agent|skill|plugin|team`,source=`builtin|enterprise|custom`,marketplace,agentName,categoryId/industryId,leader/members,downloadUrl/marketExpertId/quickPrompts,expertRootDir/isCustomExpert,summonedAt | I `normalizeExpertToMenuItem` `[32274,34201)`,SHA `3a3ec6541714621e238d3cbbc376834ee0790abf104696c70521548a37e88a98` |
| 运行时已激活选择 | 还含 prompt、localPath、pluginRegisteredName、summonTimestamp/reliability、assistantDisplayName/assistantProfession/assistantAvatarUrl、teamMembers | P `hydrateSelectedExpertForRuntime` `[431496,433326)`;`resolveCustomExpertRootDir` `[39581,39733)` 仅接受自定义来源 |
| 可持久化运行时身份字符串 | `expert-v2:` + JSON `{v:2,kind:'expert',expertId,marketExpertId?,pluginRegisteredName?,agentName?,source?}`;source 仅 builtin/enterprise/custom;官方 market ID 检查 `^ex_[A-Za-z0-9-]+$` | C `[847880,850063)`,`createExpertRuntimeIdentity` `[848557,849001)`;prefix850082 |
| 会话助理显示快照 | source=expert,name/profession/avatarUrl/expertId/expertType/isCloud/resolution/identityKey/identityVariant | C `buildExpertAssistantDisplaySnapshot` `[3906431,3907161)` |
| 云同步展示状态 | presence 可为 local_only/cloud_only/both/local_ahead/cloud_ahead;cloudStatus checking/ready 等;cloudUid/cloud/syncReason/invalidLocal 参与 UI 与传输判定 | C 云徽标3523524附近、`CreatedExpertsPanel`3845690、`ensureExpertReadyForTransport` `[3955051,3956226)` |
注意:W 把远端 `source:'custom'` 条目映射为 **enterprise**,不能直接等同“本机自建专家”。本机判断采用 `marketplace:'my-experts'` 或 `isCustomExpert:true`(C847880、P39489)。包内部 plugin manifest、AGENT/prompt 文件格式、索引路径、同名覆盖/版本升级细则及实际持久化迁移,本轮尚未取得 handler,仍未知。
## 3. 创建、编辑、发现新专家
**观察**:C `[926000,927450)` 定义 `expert-manager`、默认创建提示、编辑指定 ID 提示和创建专家团提示。`buildCreateExpertModeBlocks` `[3863507,3863752)` 返回 skill block 加 text block;`useMyExperts` `[3863923,3867901)` 的 create/edit 均 `navigation.goHome()` 后发布输入草稿。C880431附近的公开 `wb.experts.create` 也是 session.prepare `{skill:{name:'expert-manager',displayText:'创建专家'},editExpert?:{id}}`。
**观察**:M `useExpertCreationDetector` `[32571,37974)` 检测 `createdBySession`,维护按会话的 created experts 索引,刷新专家预览并切右侧 expert 视图,然后调用 `custom.clearSessionMarker`;`custom` 列表/插件文件变化订阅由 P580293之后转交 daemon watch-path 与 file-change API。
**推断 / 边界**:原版设计是对话驱动写入/更新专家包,再通过发现事件反映到 UI;可真实复现入口与草稿,却不能仅把“创建成功”Toast 或一个自建 prompt JSON 当作已复刻创建流程。`expert-manager` 技能正文、写包工具、session marker 格式与 agent 执行方式是本地创建下一步所需证据。当前未安装/运行该技能,没有验证它实际生成哪些文件。
## 4. 导入、安装、分享与深链
| 已观察流程 | 源码定位 | 仍依赖 / 未验证 |
| --- | --- | --- |
| 分享导入先取 share detail 首个 inode,再 verifyShare 得到访问资料,构建下载 URL;调用 `experts.import.fromUrl({downloadUrl,expertName,overwrite,securityCheck:true})` | S `useExpertImportConfirm` `[12813,16585)`,SHA `15d186da0713d48a70d47034625c3a0b17ffac75ec44fd25bd4e3a9b515ffed0` | 分享/鉴权是服务依赖,本轮未发下载请求 |
| 处理 duplicate_expert:若非当前用户拥有,记入我的专家;若拥有,要求覆盖确认,再重试安装 | 同上;S19207之后 checked-path 安装分支 | “重复即覆盖”不是原版流程;覆盖实际磁盘语义待 handler |
| security_check_blocked 返回 preCheck/selectedPath/md5/scanResult;轮询扫描,非高风险自动继续、跳过及风险确认有专门 modal;本地 checked-path 走 `fromPath({zipPath,expertName,overwrite})` | S12813/19207;P625748之后 `installExpertFromUrl/Path` | 有安全服务 appKey/扫描结果依赖;本地 scanner 与包路径校验实现尚未恢复 |
| URL `expertId` 只消费一次并从地址栏删掉;get专家存在则 summon;不存在而 resolver 有提示词则回首页填草稿 | U `consumeExpertIdFromUrl` `[508,882)`、`ExpertUrlEntryCoordinator` `[953,1885)` | `__wbExpertPromptResolver` 是 host 注册的全局 holder,不等于专家 API 文本全部内置 |
| 安装意图需要 expertName/shareCode,保存一个 pending intent;订阅时消费并向监听器交付 | B `setPendingExpertInstallIntent` `[145,345)` / `subscribePendingExpertInstallIntent` `[345,522)`,函数 SHA见 audit | 可以原体恢复缓冲逻辑;不代表导入已经成功 |
## 5. 选择与发送消息绑定
| 源码事实 | 精确依据 | YCode 需要真实连接的部分 |
| --- | --- | --- |
| 本地选择会 `experts.summon`,传 expertId/sessionId/source/locale/marketExpertId/updatedAt/applicationId;有竞态代次、重复请求复用、500ms提示及失败回滚;云 transport 走不同分支 | C `useExpertSummon` `[3951518,3954856)`,SHA `e891982347cd938912d18ae4dc3614251180a87359f39658d28c5beedb52f610` | 会话和草稿选择作用域必须隔离;不能只改变 chip 文本 |
| summon 激活结果可含 expertType/agentName/localPath/pluginRegisteredName;无 legacy prompt 时尝试激活插件;既无 prompt 也无激活信息会报不可用 | P `getExpert` `[609114,610423)`、`activateExpertPlugin` `[618015,618502)`、`hydrateSelectedExpertForRuntime` `[431496,433326)` | 本地插件执行/启停需要能力适配;OMP 当前可用不证明其与原插件机制等价 |
| bind会话设置 expertId 及 locale/marketplace/marketExpertId/expertType/source/runtimeIdentity/assistantDisplay,且模式改为 craft;返回原会话保留既有输入并抑制默认提示 | C `bindExpertToConversation` `[3907799,3908569)`、`returnExpertToConversation` `[3908569,3909521)` | SessionConfig 持久化、历史恢复、助理头像/身份快照都需接入 |
| 发送前保存 recent;cached prompt 排除等于 defaultInitPrompt 的值;无指令时重试插件激活,仍不可用清除无效绑定;最终 `_meta['codebuddy.ai']` 含 expertId、可选 expert prompt、`tags:['expert:…']`、assistantDisplay | M `[225000,229900)` | 默认开场提示不是专家系统指令;不应直接把输入模板当专家 prompt |
| 会话切换插件单独请求 disablePluginName/enablePluginName/agentName/sourcePluginId,可携内部 model 请求 headers;选择更新串行并同步 launch config;失败回滚 | P `setSelectedExpertForSessionInternal` `[612975,614938)`、`switchExpertPluginForSession` `[618762,619301)` | 原插件启停与用户模型 headers 的桥接需另证,不能复制 WorkBuddy 私有请求信息 |
| 专家声明 dependencies;requirements API可返回 connector/MCP,分别连接、修复、token字段、授权打开外部页与等待状态 | C `connectExpertDependency` `[3934992,3936890)`、`useExpertDependencyGate` `[3938212,3946396)` | 不能把 dependencybar 接成功 mock;本轮未连接任何服务 |
以上发送 metadata 是原版 renderer 构造事实,**不是已验证服务器如何消费该 metadata**。原版团队专家/子代理编排也未由此证明;团队成员展示可恢复,执行调度另列未知。
## 6. 本地与云、host API
**本地与云的选择并非只有 `isCloud` 一个布尔值。** C `createExpertApi` `[3560992,3562607)` 可选 default 或 cloud-in-local scope;picker 根据 transport 选择 `wb.experts` / `wb.cloud.experts`(C3957662)。本地使用 cloud_only 专家先下载;云会话使用 local_only 专家先上传,conflict_local_wins 要求覆盖确认;checking 中取消;源纯函数 `ensureExpertReadyForTransport` `[3955051,3956226)` 可恢复,实际 upload/download 是外部宿主接口。
本机 custom.list 是本地专家入口,启用云同步时可能改 cloudSync.list,NOT_SUPPORTED/NOT_READY 可回退(C `useLocalExperts` `[3862148,3863357)`)。云上传处理 confirmation_required/preflight_blocked/quota_blocked、批量 succeeded/failed/skipped;删除本机专家与删除 cloudUid 是不同动作(C3863923)。商店发布资料、推广布局、企业可见性、付费权益、分享和云同步都可能受账号/产品配置影响。
T8991起定义 expert IPC,T29132附近绑定 invoke;P 转给 `getDaemonClientFeature`。已证实 renderer/daemon 契约:
| 类别 | 通道 / 接口 |
| --- | --- |
| 目录 | `expert:init/getCategories/getExperts/getFeaturedScenes/getExpert/getAgentTemplates/getUseRequirements/refresh`,`expert:loadStateChanged` |
| 激活 | `expert:activatePlugin/deactivatePlugin/getActivePlugins/switchPluginForSession` |
| 包与导入 | `expert:exportZip/importFromUrl/installFromPath/previewFromUrl/preCheckShare/queryShareSecurityScan` |
| 本地自建 | `expert:scanCustomExperts/getCustomExpert/deleteCustomExpert/addUserExperts/clearCustomExpertSessionMarker`;`localExpertsGetWatchPath/localExpertsGetPluginJsonPath` |
| 历史 | `expert-history:getRecent/add/remove/clear` |
| 同步 | `expert:cloudSyncList/cloudSyncCheckUploadQuota/cloudSyncUpload/cloudSyncUploadMany/cloudSyncDownload/cloudSyncDeleteCloud` |
具体参数已在前文函数定位可读。新增审计输出保留 import binding graph,便于下一轮从确切 exported symbol 接口恢复;本轮不假造 TS 原类型或 IPC handler 实现。
MAIN 静态入口与已引用补采文件没有提供上述 expert handler 定义;这是**所查文件范围的负结果**,不是说安装包不含实现。下一步应由 REA 包清单/模块图定位 daemon 注册点和 expert-manager bundled skill,定向补 exact paths;不得猜路径后自行读原包,或用直接 CDP/手写提取器替代 REA。
## 7. 可复用源码与真实依赖边界
| 恢复单元 | 可直接恢复的原体 | 必须明确替换的宿主依赖 |
| --- | --- | --- |
| 纯数据/展示 | `normalizeExpertToMenuItem`、去重、locale字段选择、title/version/useCount/tags/search、runtimeIdentity生成读取、云传输分支判定 | URL/avatar resolver、locale 与 feature输入;这些纯函数不需要 WorkBuddy 云服务才能测试 |
| 基础页面 | ExpertCenterContainer、card/avatar、category/source/sort tabs、searchbar、empty/skeleton、CreatedExpertsPanel、detail/quickprompt;同名 CSS module maps 与 SVG | React/JSX singleton、原按钮/tooltip/dialog/scroll primitives、主题/字号、i18n、account/产品flag;不能直接加载7.5MB contexts而把其全局 app/provider 初始化也执行 |
| 有状态 hooks | useLocalExperts、useMyExperts、useExpertDirectory、useExpertPinState、useExpertSummon、useExpertTransfer、创建检测、URL/buffer协调 | YCode registry/session/navigation/events、atomic本地持久化、真实列表/安装/执行结果;toast/telemetry应显式适配 |
| 导入/依赖 | 可恢复导入/覆盖/安全确认 modal 与状态机,dependencybar UI | ZIP读写/路径约束、下载/安全扫描、文件监控、MCP授权与连接;服务可用性要明确表达 |
| 云商业功能 | 已有源码可说明 upload/download/share/pay/quota 展示和请求契约 | 云后端与账号/权益,不在本轮恢复或替换;不能用本地假成功冒充 |
真实已见模块依赖是同包 `react-z__Ncn__.js`、`jsx-runtime-DM1VED__.js`、`rolldown-runtime-BJCASTsb.js`、contexts、module-host-context、provider/adapter/runtime,以及 CSS token/图片资源。没有本轮证据支持为“专家”安装一个新的第三方专家 SDK;也没有确证原 React npm semver或本地插件/skill包的 schema/version。依赖表记录实际 module path,不猜 npm 版本。
## 8. YCode 实施建议(候选拆分,主上下文决定架构)
YCode 当前 `src/renderer/src/mock.ts:90` 的 experts 为 `implemented:false`,`Sidebar.tsx` 只有导航图标;共享词典含部分专家文案不等于页面/宿主已实现。`src/main`/`src/shared` 本轮搜索未见专家 CRUD 主进程接口。以下按可验收模块拆分,避免先铺一套无法执行的空壳。
1. **固定页面证据及纯源恢复**:恢复卡片、tabs、分类、排序、详情/我的专家空态与 CSS/图标。验收同视口/主题/字体、搜索/长名/加载/错误、980临界和hover;商店数据暂作为明确的 REA 离线fixture,不能标真实已安装。Root 正在独立补我的专家和详情只读样本。
2. **本地包模型与 registry**:先补 daemon/skill证据,确定 manifest、prompt/agents/skills/connector依赖、用户索引、createdBySession、ZIP安全和覆盖语义,再实现 YCode 自有 host + focused真实临时目录测试。普通prompt型专家、plugin/agent/skill/team要按真实能力区分。
3. **选择、会话与发送**:接 draft/会话 expert selection、recents/pins、runtime identity、assistantDisplay、craft模式与默认prompt草稿;接真实指令加载/能力校验、切换清理、重启恢复。实际 OMP 请求/工具行为验证后才能宣称可使用专家。
4. **对话创建/编辑闭环**:恢复expert-manager入口和草稿,接本地真实管理工具/能力,发现marker和filechange后打开专家预览;以真实磁盘产物、编辑更新、取消/失败/重启验收,不能以点击入口代替完成。
5. **导入导出与依赖**:真实ZIP/路径/重复安装/错误/取消/清理,再接MCP依赖授权;根据所恢复实现表达安全检查的真实能力。
6. **云功能单独验收**:目录服务、同步/配额/分享/付费与账号后端另接;用户此前云端与子代理暂后要求下,不妨碍本地页面和可真实工作的本地子集先做,但全功能1:1仍保留在差距表。
## 9. 未知与所需新证据
- **本地 daemon handler / expert-manager技能 / 包schema**:REA模块清单与精确导出路径;优先 expertScanCustomExperts、expertActivatePlugin、expertInstallFromPath、expertSwitchPluginForSession、exportZip注册函数以及 bundled expert-manager 的 SKILL.md/工具依赖。当前 renderer 可知参数,无法代替磁盘及执行语义。
- **实际创建/编辑/安装闭环**:后续得到明确测试授权再做受控原版 REA scenario;本轮只读,没有修改原版。需要原始产物manifest、变化事件、取消/错误/覆盖的执行证据;不能单凭静态入口断言创建工具已可移植。
- **详情/我的专家/暗色/窄屏/hover等视觉态**:Root 的后续 REA采样;当前仅首页宽屏浅色静态样本。动态市场图片/列表排序不是包内固定CSS的替代品。
- **云端语义与服务替代**:哪些资源属于内置可离线、企业权限、市场manifest、账号云同步、扫描、付费、分享;本轮没有访问这些服务。私有后端源码不因客户端请求契约存在而被恢复。
- **专家团执行/子代理等价**:显示 members/leader 和expertType已证,运行调度及各模型工具兼容未验。不可把多头像/UI字段当实际协同完成。
## 验证与交接
新增 `scripts/audit-experts-source.mjs` 只读已导出的 REA JSON;所有读取正文先校验 SHA,选中模块用 Babel AST 记录函数/赋值的范围、源体 SHA及 imports,不执行原应用。默认生成 `.tmp/experts-source-audit.json`,输出有界文件摘要;`node scripts/audit-experts-source.mjs contexts-BMe getCustomExpert` 可查有界源码片段。
本轮 `node scripts/audit-experts-source.mjs` **PASS**:339旧脚本、329当前脚本、5个 publicREA补采文本、专家CSS和首页PNG均身份匹配。`node --check scripts/audit-experts-source.mjs` **PASS**。未修改 production,无需 build/产品测试;没有把静态审计当运行验收。
本轮文件:本评估、独立audit脚本;`.tmp/experts-{audit-inventory,source-audit}.json`、`.tmp/rea-experts-{main,host}-evidence.json`。Root 新采runtime/首页是Root证据,本子任务只读。后续实现须由主上下文决定架构与执行顺序。