22 KiB
WorkBuddy 技能部分评估与拆解
2026-10-16,仅评估。技能是“市场发现→详情→本地/云端安装管理→输入引用→会话内实际加载/执行”的完整链路,不能用一组静态卡片代替。客户端的 DOM/CSS/SVG、列表状态和大量纯 helper 已有可恢复源码;本地安装器、扫描判定、运行内核和云目录/付费权益还有独立宿主及服务依赖。没有依据把全部技能功能宣称为已完成或已证明可完整等价。
本次只新增审查脚本、评估文档和 .tmp 报告;没有改生产、操作原版 runtime、导入/安装/启用/购买技能。原版新增静态采集只使用 REA 根哈希固定的选中文件导出。原版 UI 截图由主上下文通过 REA 采集,本任务只读其已保存结果。历史 CDP 结论不纳入已验证结论。
源身份与可复现材料
原版 WorkBuddy 5.8.2,安装包根 SHA-256:035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918。
| 简称 | REA 来源 | 观察范围 |
|---|---|---|
| R | ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb,.tmp/rea-runtime-scripts.json |
339个导出脚本,逐项先验证正文 SHA 再解析,不执行模块初始化 |
| S | ev_e8faf60b3d22b99ede302f2d0efdfb3145f53f59789d4a345f5892dc13a589a4,.tmp/rea-skills-market-selected-20261016.json |
精确选取 renderer/assets/skills-market-Cwf-NvXV.js 与 skills-market-d_hn_qWB.css;未读未选中文件内容 |
| L | ev_e91787b1d4dea651582c6cf12827775b9068b0ee8b80c68ba08d4c1d87d94e90,.tmp/rea-expert-runtime-scripts-20261016.json |
主上下文后续329个加载脚本;全部校验,市场 JS 与 S 的 SHA 相同,证实实际已加载 |
| C | ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94,.tmp/rea-css-recovered/manifest.json |
已保存的组件 CSS/token 来源;本任务复验选用文件 SHA |
| V | ev_c827c8dc7dee0c67c7870f6bf8417b87ec7b4d90d507ecc5dc592b5878579f10,.tmp/rea-market-skills-20261016/frame-000.png |
主上下文原生1336×901技能市场默认画面;已加载内容与当前账号状态,不代表固定目录 |
| VI | ev_9d8628a28fed60291e628cebaec55537bfb8274d4b6c8f746bffadcbc277d3fb,.tmp/rea-installed-skills-static-20261016/workbuddy.png |
稳定已安装列表:5个市场来源条目、套件badge、开关、搜索与批量管理 |
| VA | ev_ddef9315aaf0ff534cf02573212e205ba70e5b69dfc1b3dcf555b430920faf22,.tmp/rea-add-skill-options-20261016/frame-000.png |
添加技能菜单:查找技能/上传技能/创建技能;仅打开菜单并关闭 |
V 中可见共享“专家/技能/连接器”顶部导航、搜索技能、已安装(5)、添加技能、三张精选卡、推荐/SkillHub/套件、横向分类和三列列表。卡片名称、图标、推荐位、使用/安装数属于该账号/时刻的数据。workbuddy.png/顶层layout是 probe 前状态;本次切换后的市场证据使用 frame-000.png,不把两个时点混用。
VI确认已安装页的“来自市场(5)”和混合套件条目;不能把UI计数反推为5个独立SKILL.md目录,源码计数确实合并skills与plugins。V及VA的动作steps全部completed、各自画面帧有效,但neutral-pointer cleanup cancelled使整体probe为failed,故只标部分动作证据,不标全场景成功。VI是稳定static采集,未请求probe。未触发find/upload/create,也未选择或扫描任何文件;导入dialog尚未runtime取证。审查脚本复核以上三张PNG的REA artifact SHA。
重要发现:skills-panel-CvMlV3m8.js 94,896 B 大部分实际是 Connector/MCP;SkillsPanel offset 93769 仅101字符,返回 Suspense,并懒加载真正的 skills-market-Cwf-NvXV.js。只复用这个名字对应文件会遗漏技能市场主体。S 补齐了真实主体,L 随后证实它已加载。
| 文件别名 | 文件 | SHA-256 |
|---|---|---|
| P | skills-panel-CvMlV3m8.js |
b30c43c11ec476db639d6be58065d927411845487d34b0ea8e839d1c6eb7a238 |
| M | skills-market-Cwf-NvXV.js,148,298 B |
f1434cadabf5ed3762f00fc2a356bc7418b0b4aab27db62dc9fbbe5add6f6dfb |
| D | standalone-skill-detail-modal-Bi5X8CZ4.js |
ee7de2a7123f94110aa01258d3d6b3fcc3ce48f2ec5fd8f91cb3367c817a0f01 |
| X | contexts-BMeWSUHk.js |
5f35b7489b107e21ef452c8ee88a95265756f6fc444841eef869228bbc44768b |
| H | workbuddy-provider-DkH2YFYM.js |
b588e875c469978f216beec86bdf4b6c33a31c0266f9bf996881b8dbf37b5dc7 |
| I | installed-skills-entitlement-CcKsu3c9.js |
760a0b3d0678c3560cfdb03472f4bc30908ca89c8abf2adc001fa301c718129f |
| G | paid-skill-registry-ClOa9K12.js |
6aefb8bcabe5a79aba236b882e0440bc10736c83ef368ce5aea8f483cb7e94af |
| F | paid-goods-gate-D3Mx0eHl.js |
a727b1748c192f51c89f3bc394eb3ac87d0dfa647409871e99e0711e558680da |
| B | wb-input-add-B045GnIg.js |
7842fa4321d5351bf6c822bbd0253e0d6d6e68cc9cfae3f2470b3d493c23daf4 |
| N | local-skills-memory-Bb3Kqaxi.js |
5ba6d1b837ef191d8bbef0f4bf21f2ac56b442e101656f0c1e881794a3d6afb8 |
| Q | skill-scan-result-dialog-CWSA6ZCh.js |
4a91c1d114d143d4267ba9b283397ba5445905d65c9dea8a8de065de5eee87dd |
CSS:M配套 skills-market-d_hn_qWB.css 51,694 B,SHA 935d55effde68d03b2fbc2529ec94b19a6cd7210d9bc79febd6d115b115f60b6;详情CSS 7967df52bacb7594f934b32d8d5fb24854dbc8c47d0217d4677c7d7da0655f49;扫描dialog CSS 0e657f3b531d73590ca9a5d0bd026f8b31f9fecaac7a59bf79bd737c4195fc77。不应误把 P 的连接器样式当成市场主样式。
执行 node scripts/audit-skills-reference.mjs。输出 .tmp/skills-audit-20261016/report.json、格式化的市场/详情模块、有限 helper/class/宿主方法。报告保留 source、SHA、import/export边、函数与class方法 offset。下文 offset 是原始导出字符串的字符位置,不是格式化文件行号或二进制地址。
客户端状态与可恢复范围
| 部分 | 已查证行为与状态 | 源锚点 |
|---|---|---|
| 入口和路由 | 共享市场导航;Market/Installed/SkillDetail/PluginDetail;详情返回原列表视图;initialLevel1Tab=installed intent;visible/active生命周期、bootstrap skeleton/error/retry |
M SkillsMarketRouteShell143580、SkillsMarketContent145021;X MarketUIService3797944 |
| 市场发现 | 精选/推荐集合、SkillHub、Knot、企业集合、Plugins;分类横滚、更多分类、排序、分页/无限滚动、回顶部;部分源按账号/企业/产品feature显示 | M DiscoverSection71985、CollectionPanel45127、SkillhubCategories38872;X MarketLayoutService3746274、MarketBuiltinService3665734、SkillhubService3788762、KnotService3735308 |
| 全源搜索 | 输入200ms debounce,后续300ms调度;按集合/source并行检索,generation丢弃过期结果;pending/fulfilled/rejected、partialFail、失败banner、空结果、loadMore、hideInstalled;多词搜索部分源另试去空格查询并去重 | X SearchService3772106(search3772496、fetchAll3773749);M SearchResults138322 |
| 卡片 | 名称/描述/remote头像或fallback、使用/下载/星数、API Key/云/来源标记、安装/已安装/升级/加载/禁用、试用/更多菜单;不同source/插件卡片有不同动作 | M CardFrame/MarketSkillCard/MySkillCard(完整offset见报告);D各纯SVG定义、resolve* helpers |
| 我的已安装 | 本地及cloud-only合并、插件分组;中文/英文描述搜索;按置顶/启用/安装时间排序,用户操作中稳定顺序;批量启用/禁用/卸载、失败项、计数、更新提示;启用数>80的可关闭提示;分页每次增加100项 | M InstalledSection126083、InstalledList114407、useBatchActions79059、usePinnedInstalled90446;X InstalledSkillsService3719062 |
| 详情 | 本地/远程身份与来源归一,描述展开、markdown说明、语言切换与翻译提示、详情内搜索高亮/命中导航、示例、相关案例、开发者/版本/来源/计数/标签、安装/更新/试用、模型调用开关、更多菜单 | D useSkillDetail8265、useSkillDetailOverview59966、OverviewSection65624、ActionRow84719、SkillDetailModal101233;X DetailService3682486 |
| 本地导入 | 文件夹、zip、拖放;SKILL.md/frontmatter元数据、错误/上传/等待/风险/失败/取消、自动安装非高风险选项;Desktop dialog和浏览器文件流是不同分支 | X useDesktopSkillPick4394604、usePersonalSkillImport4395325、PersonalSkillImportModal4393454、useSkillUpload4362230;M SkillImportModal141312 |
| 安装与更新 | 市场源install/update不同;optimistic开关失败回滚;批量操作部分失败;用户修改过的技能更新前确认覆盖;新装立即upsert并延迟reconcile,toggle后2秒抑制旧列表覆盖;无法只改checkbox就视为完成 | X InstalledSkillsService.toggleSkill3723087、uninstall3725366、runUpdateSkill3730356、batchUpdate3731577;D runUpdateIfAllowed51856、useSkillDetailActions51972 |
| 云同步 | 本地/云/两端presence、cloud UID/version/syncState;上传preflight/配额/覆盖确认、下载确保本地路径、批量进度/失败重试;卸载区分删本地和可选删云端,付费/内置资源有约束 | M useCloudDownload、useCloudUpload、useInstalledCloudSync;D runSkillUninstallWithCloud73220、checkUploadQuotaBeforeUpload79878;X getSkillCloudAction2307304 |
| 扫描 | 预检查与异步查询;pending/safe/risk/black/suspicious、timeout/error/unavailable;风险tags、fileAnalysis、virusName;黑名单/高风险策略;已安装后发现高风险可提示卸载/保留 | X buildSecurityScanDialogProps2335743、AsyncSecurityScanService2329330;Q SingleScanResultDialog及SkillScanResultDialog |
| 授权/付费 | requires_api_key是能力标记;商品购买权限按账号/enterprise/type gate;monthly/permanent、未购/已购/过期、购买后安装、续费、退款、退款次数限制;不是单一“已付费”布尔 | D resolveRequiresApiKey5067、useSkillPaidState7712、ActionRow84719、SkillPaidDetailChip93591;I mapMarketSkillPayToPricing3272;F shouldRequestSkillPayAssets215 |
| 输入选择/调用 | +菜单技能列表、搜索/置顶/最近、local/cloud与cwd/Buddy/account scope,运行可用性/购买状态过滤;slash命令合并个人/项目技能与已有命令;选择产生结构化引用,试用可创建新任务或回传office输入 | B SkillRow57379;X useCommand4181840、assembleSkillCommandItems4179893、useWbSkillProvider4480437;D useTrySkill50768 |
DOM/CSS/SVG和纯归一函数可直接恢复为有限源码模块。UI hooks中的业务策略可保留并换成YCode真实宿主接口;不能直接初始化整个原 bundle,其DI、账号、telemetry、facade、navigation、transport会绑定原产品。卡片远程头像/markdown/使用数/榜单由目录数据提供,不能用假数据填补服务缺失后称1:1。
详情的 requires_api_key 只证实显示标记;本次未查证存在通用的“所有技能API Key配置表单/秘密注入协议”。不能把原模型provider的密钥界面直接挪过来当技能授权实现。商品license、组织可见性、执行所需第三方credential、模型调用开关要分别建模。
数据、宿主接口和运行链
flowchart LR
Market[市场与详情] --> Catalog[目录与商品权益 facade]
Import[本地导入] --> Check[宿主预检查与扫描]
Check --> Install[真实安装与文件管理]
Install --> Installed[已安装 store 与刷新事件]
Installed --> Picker[输入技能与 slash provider]
Picker --> Link[skill URI 与结构化元信息]
Link --> Session[会话 transport 与可用命令]
Session --> Kernel[实际加载技能的运行内核]
Kernel --> Render[Skill 工具与结果渲染]
Catalog --> Market
Catalog --> Installed
主要数据身份需要保留 name/displayName/description及多语言、filePath/ref、skillId/slug/canonicalName/cloudUid、source/marketplaceSource/assetType、version/local/cloudVersion、installedAt、userModified、disable/disableModelInvocation/userInvocable、marketInstall presence、icon、requires_api_key、风险结果和付费pricing。不能用name作为所有跨源/跨空间主键:原版有strong identity匹配、来源过滤、cloud-only placeholder、别名和唯一名称fallback。
- 个人技能 facade:H offset8654的methodMap明确映射
list→skillList、toggle→skillToggle、batchToggle→skillBatchToggle、delete→skillDelete、getContent→skillContent、importFromPath→skillImport、installByPath→skillInstallByPath、installFromUrl→skillInstallFromUrl、querySecurityScan→skillQueryScanResult、exportZip→skillExportZip,另有Buddy技能桶ensure/remove/prune/meta/update。调用参数包含source、folderPath/filePath、cwd/global、excludePluginSkills、securityCheck/appKey/securityVerdict、overrideKeys。不是 renderer 直接读写目录。 - 市场 facade:H
createSkillsMarketplaceProxyoffset10086,分 builtin/skillhub/knot/local/marketInstallConfig,各自list/install/categories/detail/search/installedMetas;builtin还有getByIds/getLayout/backfill,knot有tags,marketInstallConfig有ensureLocal/setEnabled/batchSetEnabled/uninstall。企业技能另一个facade。调用点有模板/集合/类别、page/pageSize、enterpriseId、needPayAssets等真实条件。 - 详情读取:X
DetailService.loadMarkdown3683897按source调用personal getContent或市场detail/content;读取取消与选中项竞态有独立处理。HgetBuiltinSkillRoot458143、readBuiltinSkillFile458531调用daemon的明确能力并缓存。renderer导出不能证明底层安装器怎样解析所有辅助文件或执行脚本。 - 扫描来源:
skillQueryScanResult是真宿主判定。X异步扫描按md5去重;初始5秒,×1.5退避最多15秒,总等待120秒,连续fatal unavailable到3次归error;关闭/移除task取消timer。产品配置提供skillSecurityAppKey,另有high-risk install policy读取和变更订阅。实现UI、缓存、轮询可以源码恢复;真实病毒/安全结论依赖对应扫描服务,绝不能把本地“未发现问题”假装成原扫描结果。 - 权益来源:I
fetchEntitlementViews4582向/v2/operation-platform/market/skill/get-by-ids,按100个skill IDs分块;pay_detail归一金额分→元,monthly/permanent、latestPaidAt、expiry/refundable/orderId。market-skills-cache:installed-entitlement与registry/version更新触发可见性刷新。D购买/续费跳/open-pay/skill?assetId=...,支付成功回调后install或刷新,退款后联动registry;这里只恢复客户状态,不能制造有效商品权益。 - 已安装缓存和隔离:X
SkillsInstalledStore2318706有scope、query、version/ifVersion、TTL默认5分钟、hydrate、inflight复用、invalidate期间拒绝旧写、监听和持久化最多5个query。useWbSkillProvider的scope含transport、user/enterprise、cwd、Buddy application/scene/resourceSnapshot。置顶由user storage串行写并迁移legacy key;最近项还有跨Buddy快照/文件路径验证。N local memory开关使用CODEBUDDY_LOCAL_SKILLS_MEMORY_ENABLED,默认true并广播变更;此键本身不能证明完整技能学习算法。 - 手动调用不等于模型自动调用:X
isUserInvocableSkill2305518与isSkillModelInvocationDisabled3716422分开;toggle显示的是disableModelInvocation,并保留disable:false。复刻时不能简单从输入列表删掉所有被关闭自动调用的技能。 - 引用和实际加载:X
buildSkillBlock1667403产生skill://<skillId或name>resource_link,附 type/mentionType=skill、displayText、skillId、可选autoAttached。parseSkillBlock4345867;Genie分支skillBlockToGenieMarker4346116有专有<supplementary>--intergration ...</supplementary>,不是所有transport通用文本。HgetAvailableCommands508810合并产品配置命令、插件命令、workspace projectCommandsList,并使项目同名命令覆盖。XwaitForLocalSkillRuntimeReady4525570在下载后按session/cwd查询真实命令,200ms开始、倍增最多1秒、默认超时10秒,响应aborted/timeout;只有下载成功不等于会话加载成功。 - 工具结果与内核边界:X
SkillToolAdapter5311343、SkillRenderer5311825把真实Skill工具调用展示为技能加载;这是渲染器,不是加载器。实际prompt拼接、SKILL.md/辅助文件读取、权限/脚本执行、内核reload和沙箱行为在daemon/agent一侧,本次renderer证据尚不足以证明全部实现。YCode的 OMP 内核选择需实测是否支持同等显式技能输入、项目/用户优先级、热更新、禁用和工具事件,不能凭模型回复“用了技能”验收。
与YCode当前基线的差距
只读搜索 src:已有技能相关源词典、输入placeholder/context usage标签、历史 Skill→use_skill alias;未发现生产技能目录管理facade、安装/扫描/权益服务或技能市场组件。现有自定义模型、workspace、聊天和通用工具并不自动补齐这些能力。OMP可能有独立原生技能机制,需要核对实际已有RPC/CLI能力,而不是由这些UI词条推断已经接入。
推荐由主上下文按以下九个有界包推进;这是建议顺序,不是在本次评估中修改架构或默认授权安装。
| 包 | 边界与交付 | 验收条件/前置 |
|---|---|---|
| S0 领域与宿主契约 | 独立shared skill domain、main registry/service、preload/API、renderer adapter;身份/source/presence/调用开关/扫描/权益明确区分 | 用自有fixture验证schema、cwd/用户/空间隔离、状态不串;主上下文确定OMP加载能力与存储根 |
| S1 市场与已安装UI外壳 | 有限恢复M的顶部、分类、网格/卡片、骨架、错误/空态、installed和批量UI;保持共享专家/技能/连接器导航 | 固定REA同viewport/state的DOM属性、字体、几何、SVG与截图;真实数据adapter unavailable必须如实error/empty |
| S2 详情 | 恢复D的header/overview/搜索/语言/示例/metrics/菜单/开关与路由返回;复用已有markdown渲染和SourceSelect/Popover等源组件 | 本地和多source详情;长文、搜索命中、loading/race、Esc返回;无源动作不得伪成功 |
| S3 本地导入和管理 | 真实文件夹/zip/SKILL.md元数据、冲突/更新/用户修改确认、启停/删除/export、原子提交/失败回滚;不要与渲染器直接FS耦合 | 独立userData和自有目录fixture;取消无安装、失败无残留、重启保留、跨空间隔离、真实文件读回;具体路径/zip规则先补daemon证据 |
| S4 输入与slash | +技能picker、搜索、置顶/最近、按账户/transport/cwd过滤、结构化skill block、手动与自动调用分离 | 选择引用真正进入发送上下文;切换任务/空间不串;键盘、source过滤、recent排序与实体缺失状态均实测 |
| S5 内核执行 | 对接OMP实际技能发现/显式加载/热更新与工具事件;fallback如需有独立可信实现,不能只拼提示词 | 用自有无副作用SKILL.md和受控模型验证其内容/辅助文件确实参与、只有允许的workspace、启停生效、取消、真实Skill事件及结果;与原运行链另对标 |
| S6 扫描和安装策略 | 恢复原扫描UI/state/轮询/风险地图;接真实扫描backend和策略(如无等价backend,明确 unavailable) | safe/risk/black/suspicious/pending/error/timeout、取消与后台通知;不允许mock结论冒充产品扫描 |
| S7 远程目录、升级与云同步 | 真实目录provider接口,collection/search/detail/install版本关系、企业过滤、cloud-only下载、上传配额/覆盖/失败重试/可选云删除 | 服务授权/资源可用后以真实受控资源验证;禁止硬编码原账号目录或静态下载数冒充在线目录 |
| S8 付费/授权与全状态验收 | 商品/权益真实adapter、已购/过期/续费/退款UI和可见性;最终整链same-state像素/动效回归 | 原商品服务不可复刻为本地假购买;先用明确测试权益验证UI,再在授权可用服务上验流程;完整对标之后才能宣称整个技能部分1:1 |
S1/S2可在S0最小只读接口确定后先推进;S3与S5是真正“技能能用”的本地闭环。S6/S7/S8不是因为本次不安装/购买就从最终目标删掉,而是证据、服务和后续操作范围独立。
具体未知与需补的REA证据
- 原版全部状态像素:目前有V市场、VI稳定installed及VA部分有效的add dropdown帧;仍需import dialog、详情、不同tab/分类/搜索/空错态、窄窗/暗色与动效。静态源码可分析未出现分支,不能把它写为已实际交互验收。
- installer/daemon实现:精确安装根、优先级、zip路径规范/链接/大小限制、原子覆盖、manifest/辅助文件、watcher/reload。需要后续REA定位daemon/主进程对应实现或授权自有测试技能的行为取证;本次不直接读取原技能文件夹或执行安装来补结论。
- 扫描等价性:appKey/服务器判定、病毒引擎/命中与认证、离线/组织策略;客户端poll源码不能还原服务判定。
- 云目录/组织/商品:真实各source API response/schema/签名下载URL、动态tab、visibility、账户权益、license、支付/退款。客户端facade明确但成功服务未被本任务调用验证。
- 模型调用/内核:显式技能block在各transport转换、daemon技能tool的加载内容、被禁用后的手动使用、不同session版本同步;原helper等待runtime-ready和实际WorkBuddyAdapter命令合并之间的完整能力链尚需进一步确认。
- 资源:纯功能SVG可从模块恢复;目录头像、示例图/视频和README内资源需经REA显式资源取证,不能绕过REA直接下载或假造。
查证与交接
node scripts/audit-skills-reference.mjs PASS:R339脚本全SHA、S根身份及两个选中文件SHA、L329加载脚本全SHA、选用CSS SHA、V/VI/VA三张PNG SHA一致;实际市场JS在S/L一致。解析不执行原脚本,生成有限函数/class/host method与完整M/D可读审查副本。V/VA整体failed已保留在报告中,没有改成passed。没有生产变更,故不为这次评估运行生产build或声称技能业务测试通过。
产物:本文件、scripts/audit-skills-reference.mjs、.tmp/skills-audit-20261016/report.json、.tmp/rea-skills-market-selected-20261016.json。下一步由主上下文选择有界实施包,并保持“源码已恢复、真实宿主已接、真实功能已验、同状态像素已验”四种结论分别记录。