157 lines
24 KiB
Markdown
157 lines
24 KiB
Markdown
# 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证据,本子任务只读。后续实现须由主上下文决定架构与执行顺序。
|