docs(B02): deliver installed skill card changes and bounded test evidence

This commit is contained in:
Codex committed 2026-10-21 13:57:29 +09:00
1 parent 14a1354c95
commit 0fbc1616e5
4 files changed
+393

No files matched your search

+60
View File
@@ -0,0 +1,60 @@
# B02 交付 01:推荐技能安装状态与重复入口
日期:2026-10-21(Asia/Shanghai)。状态:**源码已实现,离线自测通过,Windows UI 待验收**。
- 接单基线:`9f1e583e233d176868a54b66a4a14ff3d19efb60`。
- **受测代码 SHA:`14a1354c95a2081fb32e36917a1b05873b2a662b`**。
- 需求:[B02-需求](B02-需求.md),YC-005 / YC-006;不改变 B01 的范围或验收结论。
- 修改 RecommendedSkills、SkillsPage、推荐局部 CSS 和测试;不改恢复源码、身份模型、下载/安装后端、权限或真实用户技能。
## 逐项实现与边界
| AC | 实现与验证 |
| --- | --- |
| AC5.1 | current 卡片传入 installed,使用原动作槽 `.sm-use-btn` / `UseSkillIcon`;不渲染 Plus 或添加按钮,不再保留卡片下方重复使用动作。DOM 已验证 |
| AC5.2 | 复用已有 REA 恢复卡片/图标与 24×24 槽、16×16 SVG;局部适配浅深 hover/focus/disabled。实际浏览器计算样式/截图未通过执行,不能宣称像素一致 |
| AC5.3 | 保留进度与宿主更新通知;安装后切 current,重开、外部安装/卸载更新已有 state。新 React DOM 夹具验证 |
| AC5.4 | 身份比对保持原逻辑,仍区分禁用、仅模型调用、损坏、同名本地、版本/来源不同、本地修改、workspace。不同来源且损坏仍是同名冲突/替换,不伪装成已安装推荐 |
| AC5.5 | 卡片与详情改为更新/替换/修复明确动作,保留已有来源和覆盖确认;补 current 防护,外部安装完成后旧确认也不发重复安装。后端确认、覆盖与工作区保护未放宽 |
| AC5.6 | 使用保持既有 draft callback,不自动发送;禁用先启用,失败不进入草稿;不可调用 current 禁用使用按钮且不恢复安装按钮。成功 toast 的使用动作保留(已有证据),卡片下方重复动作移除 |
| AC6.1 | 删除 footer DOM、专用 CSS 与 `onViewInstalled` prop,不是 CSS 隐藏 |
| AC6.2 | 保留顶部已安装导航及计数,进入/返回/重开 DOM 验证;原已安装搜索逻辑未修改,不声称新增推荐搜索功能 |
| AC6.3 | 推荐错误/空目录移除重复入口,新增重试加载;SkillHub/套件不可用分支改为提示使用顶部入口,不留重复按钮 |
| AC6.4 | 旧 UI 脚本改用顶部导航,断言 footer 不存在及 current 使用槽;保留安装确认/进度/取消/外部事件/旧帧等回归 |
现有 source manifest 的 WorkBuddy 5.8.2 与 REA Evidence 范围沿用需求文档;本轮未新取原版证据,不将当前未确认版本或不完整 REA 提取当作新样式结论。
## 实测结果
[完整离线证据](evidence/B02-delivery-01/verification.txt)、[45 项 DOM 报告](evidence/B02-delivery-01/dom-report.json)、[原生环境失败](evidence/B02-delivery-01/native-ui-blocked.txt)。Linux x64,Node 24.19.0、npm 11.9.0、jsdom 30.1.3;复用已安装依赖,无新增依赖或锁文件变化。
- `npm run build`:退出 0,包含类型检查与三端构建。
- `YCODE_TEST_DOM_MODULE=<已安装jsdom路径> npm run test:recommended-skills:dom`:退出 0,45 项真实 React DOM/受控宿主断言通过。
- `npm run test:recommended-skills`:退出 0,受控后端检查通过;真实发布包夹具不存在,相关 real-package 项明确跳过,不能因脚本随后通用 PASS 行误报真实包验证通过。
- `npm run test:composer-capabilities`、设置 DOM 环境后的 `npm run test:alignment`:均退出 0;SDK 部分为受控/mock,不启动真实 CLI/模型。
- `node scripts/test-recommended-skills-dom.mjs --build-only`:退出 0,仅编译夹具,不验证浏览器。
- `npm run test:recommended-skills:ui`:**退出 1**,DBus socket 权限与无 X server/DISPLAY 导致 Electron 初始化失败,未进入 renderer;没有绕过限制。脚本去掉原有禁 sandbox 参数,并新增 current 默认/hover/focus、浅深色计算样式及截图采集,须在可用环境重新执行。
- `check:tokens`:退出 1,仍为相同 6 个既存失败文件;recommended-flow 裸 px 22→21、skills-host 46→45,无新增漂移,不刷新 baseline。
- 独立复审完成:14 项身份矩阵、45 项 DOM、语法/diff 检查通过,无生产代码阻塞发现。
本轮没有调用模型、网络下载技能、访问用户真实技能或原版应用。Windows、窄窗、实际 computed style、像素和完整真实应用安装/使用端到端结果仍未验证;离线 45 项不等于这些验证通过。
## 验收入口
在固定代码 SHA 的独立检出按协作流程安装并构建;任何完整应用启动必须使用全新隔离 `YCODE_USER_DATA_DIR`,不要复用正式数据。受控 UI 脚本自建临时 userData 和 mock IPC,不下载真实技能。
```powershell
npm ci --legacy-peer-deps
npm run build
npm install --prefix .tmp/b02-dom --ignore-scripts --no-audit --no-fund jsdom@30.1.3
$env:YCODE_TEST_DOM_MODULE = Join-Path $PWD '.tmp/b02-dom/node_modules/jsdom'
npm run test:recommended-skills:dom
npm run test:recommended-skills
npm run test:composer-capabilities
npm run test:alignment
npm run test:recommended-skills:ui
```
重点复核安装前后动作槽、已安装卡壳、浅深/hover/focus/窄窗、禁用启用失败、版本/来源/本地修改区分、确认取消/重复点击、外部卸载/重装、目录错误重试,以及顶部导航计数和底部重复入口不存在。完整宿主草稿不自动发送须继续保持。
本交付记录可能在源码之后单独提交。只有远端 SHA 核对成功后才算 Git 交接完成;交付完成后推送窗口交回验收端,不预填验收通过。
@@ -0,0 +1,70 @@
{
"result": "PASS",
"checks": [
"uninstalled uses add slot",
"normal footer removed from DOM",
"current uses installed CardFrame",
"current removes Plus/add DOM",
"current use occupies status slot exactly once",
"use invokes one draft callback without installation",
"use does not open install detail",
"top nav count reflects installed list",
"reopen retains current state",
"enable failure prevents draft invocation",
"disabled skill enabled before callback",
"non-invocable current cannot use or reinstall",
"outdated installed identity distinction",
"outdated not represented as first add",
"outdated requires explicit confirmation",
"modified installed identity distinction",
"modified not represented as first add",
"modified requires explicit confirmation",
"broken installed identity distinction",
"broken not represented as first add",
"broken requires explicit confirmation",
"same-name local installed identity distinction",
"same-name local not represented as first add",
"same-name local requires explicit confirmation",
"broken same-name local installed identity distinction",
"broken same-name local not represented as first add",
"broken same-name local requires explicit confirmation",
"different source installed identity distinction",
"different source not represented as first add",
"different source requires explicit confirmation",
"workspace is not treated as managed current",
"external current while confirming prevents duplicate installation",
"first install confirms provenance and scripts",
"duplicate confirmation issues only one request",
"real host progress rendered",
"install success automatically switches action DOM",
"external uninstall restores add",
"external install blocks new add",
"external terminal progress clears block",
"unavailable has no duplicate installed entry",
"catalog retry recovers in place",
"empty catalog has no footer",
"SkillHub has only top installed navigation",
"套件 has only top installed navigation",
"no uncaught renderer errors"
],
"calls": [
[
"enable",
"user:rec"
],
[
"enable",
"user:rec"
],
[
"install",
"archify",
{
"operationId": "ea0ad528-74c3-4dfe-83a3-e3b848527616",
"overwrite": false
}
]
],
"errors": [],
"limits": "Real React in offline jsdom; callback boundary tested, not production composer dispatch. No native Chromium, computed layout, screenshot, theme/hover/focus pixels, model SDK, actual install or network."
}
@@ -0,0 +1,19 @@
Transcribed tool output (not a fresh run; no retry).
Tool exec chunk_id: 19846a
Command: npm run test:recommended-skills:ui
Working directory: /workspace/scratch/0aaa9774aecc/single-package-staging/ycode
Observed exit code: 1
The launcher sandbox-disabling flags had been removed before this invocation.
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:recommended-skills:ui
> node scripts/test-recommended-skills-ui.mjs
[28:1021/135441.068080:ERROR:dbus/bus.cc:408] Failed to connect to the bus: Failed to open socket: Operation not permitted
(node:28) [UNDICI-EHPA] Warning: EnvHttpProxyAgent is experimental, expect them to change at any time.
(Use `electron --trace-warnings ...` to show where the warning was created)
[28:1021/135441.222925:ERROR:ui/ozone/platform/x11/ozone_platform_x11.cc:250] Missing X server or $DISPLAY
[28:1021/135441.222954:ERROR:ui/aura/env.cc:257] The platform failed to initialize. Exiting.
Boundary: Electron failed before renderer assertions. No native UI pass, screenshots, computed-style verification, Windows theme/narrow/focus parity, or original-app 1:1 result is established by this command. No sandbox bypass or alternate native launch was attempted. Later native-script assertions were syntax-checked only.
@@ -0,0 +1,244 @@
B02 offline delivery evidence
Code: 14a1354c95a2081fb32e36917a1b05873b2a662b
Base: 9f1e583e233d176868a54b66a4a14ff3d19efb60
Linux x64; Node24.19.0/npm11.9.0/jsdom30.1.3. No real model/SDK, original app, or real skill download.
Native UI did not start; do not interpret DOM/build-only as layout evidence.
Backend real-package fixture was SKIPPED despite its following generic PASS phase label.
Independent review: 14 identity cases and 45 DOM checks passed; no blocking finding.
===== skills-dom-final.txt: exit 0 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:recommended-skills:dom
> node scripts/test-recommended-skills-dom.mjs
{"result":"PASS","checks":45,"output":"/workspace/scratch/0aaa9774aecc/single-package-staging/ycode/.tmp/recommended-skills-dom-H0MqNz"}
===== backend.txt: exit 0 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:recommended-skills
> esbuild scripts/recommended-skills-backend-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/recommended-skills-backend-regression.mjs --log-level=warning && node .tmp/recommended-skills-backend-regression.mjs
{"result":"PASS","checks":50,"phase":"archive"}
{"result":"SKIP","phase":"real-package","reason":"published package not present in .tmp"}
{"result":"PASS","checks":60,"phase":"real-package"}
===== composer.txt: exit 0 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:composer-capabilities
> node scripts/run-composer-capabilities-regression.mjs
prompt-queue-regression: cap, payload, order, isolation, delivery, stop, recovery and unknown checks passed
{
"result": "PASS",
"checks": [
{
"name": "parallel same-instance enqueues preserve exactly 19 items",
"pass": true
},
{
"name": "duplicate take is serialized to one winner",
"pass": true
},
{
"name": "delivering item is immutable and notify does not duplicate delivery",
"pass": true
},
{
"name": "clear removes a non-delivering session queue and is idempotent",
"pass": true
},
{
"name": "first enqueue after an empty queue was paused resumes a new run without unpausing existing work",
"pass": true
},
{
"name": "incoming payload is validated before host side effects and persistence",
"pass": true
},
{
"name": "host-rebuilt capability labels are validated before persistence",
"pass": true
},
{
"name": "two queue instances cannot overwrite one another",
"pass": true
},
{
"name": "corrupt queue cannot redirect or duplicate item identity",
"pass": true
},
{
"name": "invalid revision, status and payload permission are rejected",
"pass": true
},
{
"name": "post-delivery removal failure becomes paused unknown instead of stuck delivering",
"pass": true
},
{
"name": "stale owner nonce is recovered without trusting a reused PID",
"pass": true
},
{
"name": "stale and expired lock files are reclaimed",
"pass": true
},
{
"name": "live foreign lock times out with an explicit error",
"pass": true
},
{
"name": "blocked notify does not create a state revision",
"pass": true
},
{
"name": "host resolver applies dispatch-time permission downgrade without mutating stored payload",
"pass": true
}
]
}
input-composition-regression: precedence, takeover, queue preservation, task placement, toolbar and escape rules passed
{"result":"PASS","checks":30}
{
"result": "PASS",
"tests": [
"serial model writes + frozen active turn",
"send failure retry",
"late result/event session isolation",
"draft settings during first session creation",
"nextRequestSettings whitelist"
]
}
context-usage-regression: latest, previous, active-run, summary identity and failure cases passed
{"result":"PASS","checks":36,"directory":"/workspace/scratch/0aaa9774aecc/single-package-staging/ycode/.tmp/claude-capabilities-CFQh8h"}
npm notice
npm notice New major version of npm available! 11.9.0 -> 12.2.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0
npm notice To update run: npm install -g npm@12.2.0
npm notice
===== alignment.txt: exit 0 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:alignment
> node scripts/run-alignment-regression.mjs
PASS model alignment: fresh/legacy migration, new/edit/default/delete/reload, valid selection (offline host fixtures)
PASS model settings: deferred owner switch, rename mapping, addition selection, empty deletion, immutable history
PASS session factory: first-send preference, mode preservation, invalid permission rejection (isolated ports)
{"historyMessages":10000,"bytes":747781,"parseMs":3.0333960000000104,"storeHydrationMs":0.13541899999999885,"note":"Node parsing/store benchmark only, not browser rendering or Windows IPC performance"}
session-composer-alignment: loading/cache/retry/races/model/permissions/modes/SSR passed
alignment-conversation: local groups, original expanded order, question projection and truthful status passed
A01 native MessageBubble identity aliases, immutable inputs and ordinary raw output passed
A01 imported native card, linked dedup and unknown-position compatibility passed
question-answer-shell: structural and recovered CSS contracts passed
question-answer-shell: DOM hierarchy, controls linkage, click, Enter, Space and inert contracts passed
Runtime progress, session-grant scope and approval lifecycle regressions passed
Permission intercept static rendering passed; interactive keyboard/focus remains UI acceptance
Claude host approval policy unit checks passed (no SDK process/application/matching verification)
Mock SDK replay lifecycle passed: fail closed, retry, session isolation, independent mode guard
task popconfirm DOM regression: 34 checks passed (jsdom, not pixel validation)
question-interaction: 24 DOM behavioral checks passed
question-identity: 30 A01 DOM checks passed (not Electron/pixel/SDK acceptance)
completed-fold-nested: real question/tool/thinking/local-summary remount, event, keyboard and identity contracts passed
completed-fold-native-identity: real reducer done correction, native IDs, insertion/reorder, repeated outer toggles, message isolation and legacy fallback passed
Permission intercept DOM: 14 checks passed (not pixel/SDK verification)
{"checks":37,"passed":true,"scope":"Isolated React DOM and CSS contracts; no native keyboard/layout/pixel acceptance"}
npm notice
npm notice New major version of npm available! 11.9.0 -> 12.2.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0
npm notice To update run: npm install -g npm@12.2.0
npm notice
===== build.txt: exit 0 =====
Successful full build tail (command includes typecheck):
out/renderer/assets/chunk-DU6HZSFF-BPbiNeHj.js 271.07 kB
out/renderer/assets/architectureDiagram-5GKGNRK7-o5LZFHEn.js 318.23 kB
out/renderer/assets/katex-Y9ra-ykP.js 497.35 kB
out/renderer/assets/texmath-Bkeg3ZLn.js 594.25 kB
out/renderer/assets/wasm-CVjZL0jK-2Bi6p3c3.js 622.62 kB
out/renderer/assets/cpp-9jHBA231-CtHklR8a.js 626.73 kB
out/renderer/assets/app-BYh1ERuc.js 675.57 kB
out/renderer/assets/emacs-lisp-DjtOxg4j-CUUa7aOE.js 780.06 kB
out/renderer/assets/cytoscape.esm-bVGYt-iW.js 869.69 kB
out/renderer/assets/ArtifactPierreDiff-D5xhRc5y.js 1,119.58 kB
out/renderer/assets/chunk-FOHPRMQF-BCllzKJD.js 1,154.18 kB
out/renderer/assets/index-K0c2JUwW.js 3,761.37 kB
out/renderer/assets/editor.api2-dPwET-7w-BYIQ9bT3.js 4,889.23 kB
✓ built in 1.94s
npm notice
npm notice New major version of npm available! 11.9.0 -> 12.2.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0
npm notice To update run: npm install -g npm@12.2.0
npm notice
===== fixture-build.txt: exit 0 =====
{"result":"BUILD_ONLY","output":"/workspace/scratch/0aaa9774aecc/single-package-staging/ycode/.tmp/recommended-skills-dom-Ka7Yeh","limits":"Compiled real React/CSS only; no UI execution or visual verification."}
===== tokens-before.txt: exit 1 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 check:tokens
> node scripts/check-design-tokens.mjs
设计 token 漂移检查(静态)
扫描:src/renderer/src 共 367 个文件(用时 46 ms)
baseline:scripts/design-token-baseline.json(334 个文件)
门禁分类:adapter 8 | core 6 | local 279(合计 293 个文件)
合计:裸 hex=611 裸 px=2682 !important=6 --wb-* 定义=525 var(--yc-*) 使用=1642 var(--wb-*) 使用=1201
非门禁分类:vendor 2 | recovered 22 | source 47 | tokenSource 3(合计 74 个文件,仅记录不阻塞)
合计:裸 hex=10642 裸 px=13642 !important=920 --wb-* 定义=17966 var(--yc-*) 使用=77 var(--wb-*) 使用=19638
非门禁相对 baseline:文件 +0;裸 hex +78 裸 px +64 !important +0 --wb-* 定义 +0 var(--yc-*) 使用 +22 var(--wb-*) 使用 -120
结果:失败,共 6 项:
[新增门禁文件] src/renderer/src/capabilities/recommended-flow.css(local):裸 px=22
[新增门禁文件] src/renderer/src/capabilities/skill-detail-shell.css(local):裸 px=21
[回归] src/renderer/src/capabilities/skills-host.css(local):裸 px 25 → 46(+21)
[新增门禁文件] src/renderer/src/workbuddy/composer/capability-picker.css(local):裸 hex=26,裸 px=48
[回归] src/renderer/src/workbuddy/composer/composer.css(local):裸 hex 23 → 38(+15);裸 px 83 → 139(+56)
[新增门禁文件] src/renderer/src/workbuddy/composer/prompt-queue.css(local):裸 hex=8,裸 px=35
提示:确认变更符合预期后运行 `node scripts/check-design-tokens.mjs --update-baseline` 刷新 baseline;
否则请改用 --yc-* token、复用现有值,或去掉重复的 --wb-* 定义。
提示(不失败,仅记录):3 个门禁文件 token 使用数上升:
src/renderer/src/capabilities/skills-host.css(local):var(--wb-*) 使用 12 → 19(+7)
src/renderer/src/workbuddy/composer/composer.css(local):var(--yc-*) 使用 35 → 47(+12);var(--wb-*) 使用 0 → 1(+1)
src/renderer/src/workbuddy/conversation/conversation.css(local):var(--yc-*) 使用 0 → 4(+4)
提示(不失败):baseline 中 8 个文件已不存在:src/renderer/src/components/ReportedRunUsage.tsx;src/renderer/src/workbuddy/subagents/SourceMemberIcon.tsx;src/renderer/src/workbuddy/subagents/SubagentCollaboration.tsx;src/renderer/src/workbuddy/subagents/SubagentDetailPanel.tsx;src/renderer/src/workbuddy/subagents/adapters.css;src/renderer/src/workbuddy/subagents/member-view.ts;src/renderer/src/workbuddy/subagents/source.css;src/renderer/src/workbuddy/subagents/theme.css
提示:新增门禁文件 36 个且无受控计数(允许):src/renderer/src/capabilities/CapabilityMaintenance.tsx(local);src/renderer/src/capabilities/RecommendedSkills.tsx(local);src/renderer/src/capabilities/SkillAvatar.tsx(local);src/renderer/src/capabilities/SkillDetailShell.tsx(local);src/renderer/src/capabilities/SkillModalPortal.tsx(local);src/renderer/src/capabilities/skill-modal-focus.ts(local);src/renderer/src/components/SessionLoading.tsx(local);src/renderer/src/components/TaskPopconfirm.tsx(local);src/renderer/src/components/session-loading.css(local);src/renderer/src/components/task-popconfirm.css(local);src/renderer/src/components/updates/UpdateSidebarCard.tsx(local);src/renderer/src/components/updates/update-ui-model.ts(local);src/renderer/src/components/updates/update-ui-store.ts(local);src/renderer/src/components/updates/updates-ui.css(local);src/renderer/src/ui/Button.tsx(local);src/renderer/src/ui/IconButton.tsx(local);src/renderer/src/ui/Input.tsx(local);src/renderer/src/ui/Popover.tsx(local);src/renderer/src/ui/Select.tsx(local);src/renderer/src/ui/Switch.tsx(local);…(还有 16 项,详见 --json)
===== tokens-after.txt: exit 1 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 check:tokens
> node scripts/check-design-tokens.mjs
设计 token 漂移检查(静态)
扫描:src/renderer/src 共 367 个文件(用时 46 ms)
baseline:scripts/design-token-baseline.json(334 个文件)
门禁分类:adapter 8 | core 6 | local 279(合计 293 个文件)
合计:裸 hex=611 裸 px=2680 !important=6 --wb-* 定义=525 var(--yc-*) 使用=1650 var(--wb-*) 使用=1209
非门禁分类:vendor 2 | recovered 22 | source 47 | tokenSource 3(合计 74 个文件,仅记录不阻塞)
合计:裸 hex=10642 裸 px=13642 !important=920 --wb-* 定义=17966 var(--yc-*) 使用=77 var(--wb-*) 使用=19638
非门禁相对 baseline:文件 +0;裸 hex +78 裸 px +64 !important +0 --wb-* 定义 +0 var(--yc-*) 使用 +22 var(--wb-*) 使用 -120
结果:失败,共 6 项:
[新增门禁文件] src/renderer/src/capabilities/recommended-flow.css(local):裸 px=21
[新增门禁文件] src/renderer/src/capabilities/skill-detail-shell.css(local):裸 px=21
[回归] src/renderer/src/capabilities/skills-host.css(local):裸 px 25 → 45(+20)
[新增门禁文件] src/renderer/src/workbuddy/composer/capability-picker.css(local):裸 hex=26,裸 px=48
[回归] src/renderer/src/workbuddy/composer/composer.css(local):裸 hex 23 → 38(+15);裸 px 83 → 139(+56)
[新增门禁文件] src/renderer/src/workbuddy/composer/prompt-queue.css(local):裸 hex=8,裸 px=35
提示:确认变更符合预期后运行 `node scripts/check-design-tokens.mjs --update-baseline` 刷新 baseline;
否则请改用 --yc-* token、复用现有值,或去掉重复的 --wb-* 定义。
提示(不失败,仅记录):3 个门禁文件 token 使用数上升:
src/renderer/src/capabilities/skills-host.css(local):var(--wb-*) 使用 12 → 19(+7)
src/renderer/src/workbuddy/composer/composer.css(local):var(--yc-*) 使用 35 → 47(+12);var(--wb-*) 使用 0 → 1(+1)
src/renderer/src/workbuddy/conversation/conversation.css(local):var(--yc-*) 使用 0 → 4(+4)
提示(不失败):baseline 中 8 个文件已不存在:src/renderer/src/components/ReportedRunUsage.tsx;src/renderer/src/workbuddy/subagents/SourceMemberIcon.tsx;src/renderer/src/workbuddy/subagents/SubagentCollaboration.tsx;src/renderer/src/workbuddy/subagents/SubagentDetailPanel.tsx;src/renderer/src/workbuddy/subagents/adapters.css;src/renderer/src/workbuddy/subagents/member-view.ts;src/renderer/src/workbuddy/subagents/source.css;src/renderer/src/workbuddy/subagents/theme.css
提示:新增门禁文件 36 个且无受控计数(允许):src/renderer/src/capabilities/CapabilityMaintenance.tsx(local);src/renderer/src/capabilities/RecommendedSkills.tsx(local);src/renderer/src/capabilities/SkillAvatar.tsx(local);src/renderer/src/capabilities/SkillDetailShell.tsx(local);src/renderer/src/capabilities/SkillModalPortal.tsx(local);src/renderer/src/capabilities/skill-modal-focus.ts(local);src/renderer/src/components/SessionLoading.tsx(local);src/renderer/src/components/TaskPopconfirm.tsx(local);src/renderer/src/components/session-loading.css(local);src/renderer/src/components/task-popconfirm.css(local);src/renderer/src/components/updates/UpdateSidebarCard.tsx(local);src/renderer/src/components/updates/update-ui-model.ts(local);src/renderer/src/components/updates/update-ui-store.ts(local);src/renderer/src/components/updates/updates-ui.css(local);src/renderer/src/ui/Button.tsx(local);src/renderer/src/ui/IconButton.tsx(local);src/renderer/src/ui/Input.tsx(local);src/renderer/src/ui/Popover.tsx(local);src/renderer/src/ui/Select.tsx(local);src/renderer/src/ui/Switch.tsx(local);…(还有 16 项,详见 --json)