Files
ycode/docs/协作/B02-需求.md
T

8.9 KiB
Raw Blame History

B02:推荐技能的已安装样式与重复入口

日期:2026-10-21(Asia/Shanghai)。状态:待开发。用户新增需求,不改变 B01 的范围、交付或验收结论。

用户要求:“专家技能连接器这块的技能,已经安装的在推荐中的样式也不对,还保留有添加的按钮,参考一下 WorkBuddy。还有下方也不应该有查看已安装技能,这个要移除掉。”

1. 已确认问题与复现

接收时 gitea/master 为 ddd677bae3c43a5514eb40f7a1d9749fdf389115。独立窗口使用既有固定代码 51531dcae8d8ade85db9e203bc8c0f712805b2ae,对应推荐技能组件、样式、CardFrame 与测试从该提交到接收版本无改动。

Windows Electron 加载真实 CapabilityCenter、推荐技能组件和 CSS,使用受控 IPC、临时 userData 与模拟安装结果,不下载网络包或改用户技能。安装后关闭详情,推荐列表实测:

data-recommendation-state = current
卡片 class = sm-card,没有 sm-card--installed
添加按钮仍存在,disabled=true,按钮中仍有 Plus SVG
原动作槽位没有 sm-use-btn
卡片下方另有“去使用”文字动作
列表底部存在“查看已安装技能”按钮
renderer errors = []

所以不是“完全没有识别到已安装”,而是识别成功后,卡片仍渲染添加动作与未安装壳。不能把仅禁用加号当作完成样式修复。

源码定位:

  • src/renderer/src/capabilities/RecommendedSkills.tsx:259:Card 没有传 installed 身份;actions 无条件创建 .sm-add-btn 和 PlusIcon,current 状态只影响 disabled。
  • RecommendedSkills.tsx:263:独立 footer 按钮“查看已安装技能”。
  • RecommendedSkills.tsx:247:目录不可用分支也有同名入口,需与正常列表的移除要求一并检查,不要留下另一处无依据的底部重复入口。
  • src/renderer/src/capabilities/SkillsPage.tsx:103:推荐页当前的 installed 导航 callback;顶部已有“已安装(n)”入口,应保留这一条正常导航。
  • scripts/test-recommended-skills-ui.mjs:232:旧测试要求 .sm-add-btn.disabled === true;:241 附近依赖 footer 按钮进入已安装。这两处把当前错误设计写进了测试,需同步修正。

证据:实测状态、推荐列表截图、只读窗口探针。

2. WorkBuddy 依据与未验证边界

可复用的已有 REA 恢复记录:

  • src/renderer/src/capabilities/skills-source-manifest.json 标注 WorkBuddy 5.8.2,原包 SHA-256 035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918。
  • Evidence:JavaScript ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb,技能市场相关 ev_e8faf60b3d22b99ede302f2d0efdfb3145f53f59789d4a345f5892dc13a589a4,CSS ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94。
  • 该恢复链在项目中已有 CardFrame.installed/sm-card--installed、UseSkillIcon 与 .sm-use-btn。已恢复 CSS 的使用动作是 24×24px、默认透明背景、16px SVG;与未安装 .sm-add-btn 的 24×24px 灰底、12px SVG 不同。
  • 技能详情安装与使用链路修正 第原版边界部分记录:历史原版 ActionRow 随安装状态切换安装/使用,成功提示带使用动作。不要把“+保留但禁用”当作原版已安装设计。

本次当前版本并未完整核验:

  • 本轮仅通过 REA 静态读取当前安装包,没有用直接 CDP、手写提取器、computer-use 或其他通道绕过。
  • 当前 ASAR SHA-256 为 026a1d0805a2366d06390cef52e157a7277543cdd27dd308e6b1acb47ffffdc1,版本号未读取确认,不能继续写成 5.8.2/5.8.3。
  • REA 父 Evidence ev_ef70f1417c069be6bf352efcb858244efaae444f71f1f9893ed2fb579ed88849,摘要 Evidence ev_4d76ad1b9f386f97343307067ee2f5b5b91d2189366ab1cbe3890954db4634a6。本次选择的源文件是 renderer/assets/src-DbE1_mgM.js,不是当前完整技能市场组件;存在完整性矛盾、未选文件和语义覆盖上限,不据此对当前技能市场样式作结论。
  • REA 整包提取又因缺失声明的 Darwin companion cli/node_modules/koffi/build/koffi/darwin_arm64/koffi.node 失败。没有绕过改用其他提取器,也没有启动 WorkBuddy 去安装测试技能。
  • 完整摘要记录、REA 提取限制 已提交。父 Evidence 的大型 bundle 仅保留于验收端临时证据,不把其路径当作跨机交接的唯一依据。

开发可依据已有恢复组件和用户明确要求先修确认问题;当前原版推荐卡是否另有状态图标、精确操作位置及复杂安装态细节,须后续通过 REA 补同状态证据,未拿到不能宣称完整 1:1。

3. 开发任务与验收标准

YC-005 / P2:推荐卡片切换真实已安装状态

允许边界:RecommendedSkills.tsx、SkillsPage.tsx、推荐局部 CSS/既有卡片适配、相关 UI 回归。原版恢复组件本体、共享卡片与技能身份模型如需变更,由开发主对话统一审查;不重写安装下载后端或扩展市场服务。

  • AC5.1:同推荐身份、同来源版本的 current 安装项,卡片不再渲染添加 Plus 按钮,不仅是禁用或透明隐藏;使用与已安装语义一致的卡片状态和动作。辅助技术标签也不能继续叫“安装某技能”。
  • AC5.2:按既有 REA 恢复记录实现原版的已安装/使用展示,核对布局、图标槽位、字体、默认/hover/focus 与浅深色;不要把文字“已安装”加在角落就认定完成。
  • AC5.3:未安装项仍可添加并显示真实安装进度;安装成功后自动切换,关闭/重开页面及外部安装/卸载通知后状态同步,不要求重启。
  • AC5.4:禁用、不可调用、损坏、同名本地、版本不同、本地修改、工作区技能等状态仍明确区分。不要只按同名或当前标签把不同来源/scope 误认为同一个已安装技能;保留已有保护工作区和本地修改的规则。
  • AC5.5:版本不同/本地修改等确有替换需求时,用清楚的更新/替换动作及既有确认流程,不伪装成首次添加,也不直接覆盖。正常 current 状态不发重复安装请求。
  • AC5.6:使用动作保留既有进入新任务草稿、不自动发送的语义;禁用技能先启用及失败反馈保持。原动作槽位与卡片下方不要同时留下无依据的重复使用按钮;按原版证据确定位置。

YC-006 / P2:移除底部“查看已安装技能”

  • AC6.1:正常推荐列表底部不再渲染 .yc-skill-recommendation-footer 及“查看已安装技能”按钮,清理只服务于该入口的空白、样式和 props;不能只是 CSS 隐藏。
  • AC6.2:保留顶部“已安装(n)”导航及真实计数,进入已安装、返回推荐、搜索与目录刷新仍正常。
  • AC6.3:复核目录不可用/空状态中的重复同名入口;保持清楚的错误与恢复方式,使用现有顶部导航,不为删除正常 footer 而留下另一个底部重复入口。未使用的 callback 清理要核对所有分支与调用方。
  • AC6.4:测试通过顶部现有入口进入已安装,新增断言 footer 不存在;不允许为旧测试便利保留用户明确要求移除的按钮。

4. 验证与交付

  • 必跑 npm run test:recommended-skills:ui、相关能力输入/技能管理回归,以及 npm run build。源码/class 检查不能替代实际已安装推荐卡的计算样式、截图与交互。
  • 受控 Electron fixture 覆盖未安装→安装→current、禁用/损坏、不同来源与版本、本地修改、卸载/重装及目录错误;不得使用用户真实技能或为验样式安装 WorkBuddy 技能。
  • 对已有 UI 脚本中的“禁用 Plus 即通过”和 footer 导航断言改成真实目标,保留安装确认、进度、取消、重复请求、外部通知、使用草稿等有效回归。
  • Windows 浅/深、窄窗下记录相同状态的 DOM、计算样式和截图;同版本 WorkBuddy 对照尚缺则明确“未验证”,不将本地恢复样式称为像素通过。
  • 本次复现探针在固定受测检出运行:独立安装依赖后,将 Git 中的 skills-installed-probe.mjs 复制为 .tmp/b01-acceptance/skills-installed-probe.mjs 再执行。该路径用于其自身 Electron 子进程启动;脚本只用受控宿主,不真实安装。
  • 创建 docs/协作/B02-交付-01.md 接单、记录完整代码 SHA、逐项 AC、命令及证据。不要预填验收通过;不把此项混入 B01/YC-001 的修复完成声明。

本次只发布新需求和证据,未修改产品代码。文档推送成功后窗口交回开发端,用户可将 B02 与 B01 的后续安排一并交给开发对话。