@mmerterden/multi-agent-pipeline 20.2.0 → 20.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (621) hide show
  1. package/CHANGELOG.md +923 -1
  2. package/README.md +104 -81
  3. package/README.tr.md +103 -62
  4. package/docs/FIGMA_PIPELINE.md +35 -35
  5. package/docs/adr/0006-skills-core-external-split.md +1 -1
  6. package/docs/adr/0007-multi-tool-adapter-framework.md +6 -0
  7. package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +7 -0
  8. package/docs/architecture.md +50 -14
  9. package/docs/best-practices.md +1 -1
  10. package/docs/ecosystem.md +56 -32
  11. package/docs/facts.json +10 -10
  12. package/docs/features.md +97 -5
  13. package/docs/recovery-guide.md +7 -14
  14. package/docs/server-readiness.md +31 -24
  15. package/index.js +1 -1
  16. package/install/_common.mjs +3 -5
  17. package/install/_platform-filter.mjs +23 -1
  18. package/install/_unattended-profile.mjs +321 -75
  19. package/install/claude.mjs +51 -10
  20. package/install/codex.mjs +2 -0
  21. package/install/copilot.mjs +2 -0
  22. package/install/index.mjs +30 -17
  23. package/install/templates/claude-hooks.json +16 -5
  24. package/install/templates/copilot-instructions.md +1 -1
  25. package/install/templates/multi-agent-autopilot-awake.plist.template +48 -0
  26. package/install/templates/multi-agent-autopilot.plist.template +12 -5
  27. package/install/unattended-profile-legacy.json +80 -0
  28. package/manifest.json +616 -483
  29. package/package.json +8 -3
  30. package/pipeline/agents/code-reviewer.md +10 -0
  31. package/pipeline/agents/plan-critic.md +98 -0
  32. package/pipeline/agents/security-auditor.md +10 -0
  33. package/pipeline/agents/task-clarifier.md +10 -0
  34. package/pipeline/commands/multi-agent/SKILL.md +2 -2
  35. package/pipeline/commands/multi-agent/analysis/SKILL.md +6 -2
  36. package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +12 -1
  37. package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +4 -0
  38. package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
  39. package/pipeline/commands/multi-agent/autopilot-off/SKILL.md +36 -6
  40. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +77 -12
  41. package/pipeline/commands/multi-agent/autopilot-status/SKILL.md +29 -8
  42. package/pipeline/commands/multi-agent/build-optimize/SKILL.md +4 -0
  43. package/pipeline/commands/multi-agent/channels/SKILL.md +9 -9
  44. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +5 -1
  45. package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -0
  46. package/pipeline/commands/multi-agent/design-check/SKILL.md +16 -11
  47. package/pipeline/commands/multi-agent/diff-explain/SKILL.md +4 -0
  48. package/pipeline/commands/multi-agent/doctor/SKILL.md +4 -0
  49. package/pipeline/commands/multi-agent/feedback/SKILL.md +5 -1
  50. package/pipeline/commands/multi-agent/forget/SKILL.md +4 -0
  51. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +4 -0
  52. package/pipeline/commands/multi-agent/graph/SKILL.md +4 -0
  53. package/pipeline/commands/multi-agent/help/SKILL.md +37 -39
  54. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +4 -0
  55. package/pipeline/commands/multi-agent/issue/SKILL.md +7 -1
  56. package/pipeline/commands/multi-agent/jira/SKILL.md +7 -1
  57. package/pipeline/commands/multi-agent/kill/SKILL.md +9 -3
  58. package/pipeline/commands/multi-agent/language/SKILL.md +4 -0
  59. package/pipeline/commands/multi-agent/log/SKILL.md +4 -0
  60. package/pipeline/commands/multi-agent/manual-test/SKILL.md +5 -0
  61. package/pipeline/commands/multi-agent/model/SKILL.md +4 -0
  62. package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -0
  63. package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +4 -0
  64. package/pipeline/commands/multi-agent/purge/SKILL.md +4 -0
  65. package/pipeline/commands/multi-agent/refactor/SKILL.md +5 -0
  66. package/pipeline/commands/multi-agent/research/SKILL.md +49 -0
  67. package/pipeline/commands/multi-agent/resume/SKILL.md +29 -6
  68. package/pipeline/commands/multi-agent/review/SKILL.md +28 -9
  69. package/pipeline/commands/multi-agent/review-analysis/SKILL.md +5 -1
  70. package/pipeline/commands/multi-agent/review-issue/SKILL.md +4 -0
  71. package/pipeline/commands/multi-agent/review-jira/SKILL.md +4 -0
  72. package/pipeline/commands/multi-agent/route-off/SKILL.md +4 -0
  73. package/pipeline/commands/multi-agent/route-on/SKILL.md +4 -0
  74. package/pipeline/commands/multi-agent/route-status/SKILL.md +4 -0
  75. package/pipeline/commands/multi-agent/routines/SKILL.md +4 -0
  76. package/pipeline/commands/multi-agent/save/SKILL.md +6 -2
  77. package/pipeline/commands/multi-agent/scaffold/SKILL.md +47 -0
  78. package/pipeline/commands/multi-agent/scan/SKILL.md +4 -0
  79. package/pipeline/commands/multi-agent/search/SKILL.md +12 -8
  80. package/pipeline/commands/multi-agent/security-review/SKILL.md +4 -0
  81. package/pipeline/commands/multi-agent/serve/SKILL.md +62 -0
  82. package/pipeline/commands/multi-agent/setup/SKILL.md +27 -36
  83. package/pipeline/commands/multi-agent/stack/SKILL.md +4 -0
  84. package/pipeline/commands/multi-agent/status/SKILL.md +10 -9
  85. package/pipeline/commands/multi-agent/steer/SKILL.md +5 -1
  86. package/pipeline/commands/multi-agent/store-ready/SKILL.md +4 -0
  87. package/pipeline/commands/multi-agent/sync/SKILL.md +13 -13
  88. package/pipeline/commands/multi-agent/test/SKILL.md +4 -0
  89. package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +4 -0
  90. package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +4 -0
  91. package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +4 -0
  92. package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +5 -1
  93. package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +4 -0
  94. package/pipeline/commands/multi-agent/uninstall/SKILL.md +5 -1
  95. package/pipeline/commands/multi-agent/update/SKILL.md +4 -0
  96. package/pipeline/contract/CHANGELOG.md +74 -0
  97. package/pipeline/contract/README.md +126 -0
  98. package/pipeline/contract/build.mjs +427 -0
  99. package/pipeline/contract/fixtures/answer-result.json +11 -0
  100. package/pipeline/contract/fixtures/error-invalid-request.json +8 -0
  101. package/pipeline/contract/fixtures/error-unauthorized.json +5 -0
  102. package/pipeline/contract/fixtures/error-unsigned.json +5 -0
  103. package/pipeline/contract/fixtures/issues-empty.json +18 -0
  104. package/pipeline/contract/fixtures/launch-plan.json +31 -0
  105. package/pipeline/contract/fixtures/runs-awaiting-question.json +70 -0
  106. package/pipeline/contract/fixtures/runs-empty.json +6 -0
  107. package/pipeline/contract/fixtures/runs-failed.json +84 -0
  108. package/pipeline/contract/fixtures/runs-old-schema.json +70 -0
  109. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +101 -0
  110. package/pipeline/contract/fixtures/runs-pr-opened.json +106 -0
  111. package/pipeline/contract/fixtures/runs-running.json +84 -0
  112. package/pipeline/contract/fixtures/worktrees-empty.json +4 -0
  113. package/pipeline/contract/frozen/toolbox.json +107 -0
  114. package/pipeline/contract/manifest.json +263 -0
  115. package/pipeline/contract/types/index.d.ts +343 -0
  116. package/pipeline/lib/_jira-auth.sh +6 -2
  117. package/pipeline/lib/account-resolver.sh +1 -1
  118. package/pipeline/lib/autopilot-state.sh +19 -0
  119. package/pipeline/lib/context-link-extractor.sh +12 -5
  120. package/pipeline/lib/credential-inventory.sh +12 -5
  121. package/pipeline/lib/credential-store.sh +116 -185
  122. package/pipeline/lib/fetch-confluence.sh +44 -3
  123. package/pipeline/lib/fetch-document.sh +3 -4
  124. package/pipeline/lib/fetch-fortify.sh +1 -1
  125. package/pipeline/lib/figma-mcp-refresh.sh +2 -2
  126. package/pipeline/lib/figma-token.sh +5 -1
  127. package/pipeline/lib/issue-fetcher.sh +233 -16
  128. package/pipeline/lib/json-file-lock.mjs +172 -0
  129. package/pipeline/lib/model-dispatch.sh +21 -12
  130. package/pipeline/lib/model-rung.sh +6 -1
  131. package/pipeline/lib/multi-repo-pipeline.sh +1 -1
  132. package/pipeline/lib/outbound-gate.mjs +46 -16
  133. package/pipeline/lib/parse-complaints.sh +14 -7
  134. package/pipeline/lib/plan-todos.sh +3 -3
  135. package/pipeline/lib/post-pr-review.sh +9 -9
  136. package/pipeline/lib/pr-request-location.mjs +85 -0
  137. package/pipeline/lib/regular-file.mjs +153 -0
  138. package/pipeline/lib/repo-hygiene.sh +17 -0
  139. package/pipeline/lib/route-state.sh +5 -1
  140. package/pipeline/lib/run-paths.sh +3 -2
  141. package/pipeline/lib/stack-detect.sh +19 -1
  142. package/pipeline/lib/unattended-profile-check.mjs +178 -0
  143. package/pipeline/lib/unattended-settings-location.mjs +28 -0
  144. package/pipeline/lib/unattended.mjs +76 -0
  145. package/pipeline/lib/unattended.sh +32 -0
  146. package/pipeline/lib/untrusted.mjs +76 -0
  147. package/pipeline/lib/user-facing.mjs +82 -0
  148. package/pipeline/lib/user-facing.sh +58 -0
  149. package/pipeline/multi-agent-refs/_dev-context.md +1 -1
  150. package/pipeline/multi-agent-refs/analysis/evidence.md +4 -0
  151. package/pipeline/multi-agent-refs/analysis/locked.md +2 -2
  152. package/pipeline/multi-agent-refs/analysis/render.md +4 -3
  153. package/pipeline/multi-agent-refs/analysis/resolve.md +3 -1
  154. package/pipeline/multi-agent-refs/analysis/synthesis.md +4 -5
  155. package/pipeline/multi-agent-refs/analysis-template.md +10 -17
  156. package/pipeline/multi-agent-refs/channels/jira.md +1 -1
  157. package/pipeline/multi-agent-refs/component-dispatch.md +3 -3
  158. package/pipeline/multi-agent-refs/conventions-defaults.md +32 -32
  159. package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -17
  160. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +37 -9
  161. package/pipeline/multi-agent-refs/features/autopilot-operations.md +277 -0
  162. package/pipeline/multi-agent-refs/features/constitution.md +196 -0
  163. package/pipeline/multi-agent-refs/features/doctor.md +6 -3
  164. package/pipeline/multi-agent-refs/features/external-context-injection.md +6 -1
  165. package/pipeline/multi-agent-refs/features/jira-context.md +1 -1
  166. package/pipeline/multi-agent-refs/features/maturity-followup.md +43 -23
  167. package/pipeline/multi-agent-refs/features/model-fallback.md +9 -0
  168. package/pipeline/multi-agent-refs/features/phone-api.md +306 -0
  169. package/pipeline/multi-agent-refs/features/plan-critic.md +159 -0
  170. package/pipeline/multi-agent-refs/features/research.md +150 -0
  171. package/pipeline/multi-agent-refs/features/review-decision.md +185 -0
  172. package/pipeline/multi-agent-refs/features/scaffold.md +160 -0
  173. package/pipeline/multi-agent-refs/features/security-audit.md +6 -2
  174. package/pipeline/multi-agent-refs/features/skill-conformance.md +4 -1
  175. package/pipeline/multi-agent-refs/features/stack-adapters.md +116 -0
  176. package/pipeline/multi-agent-refs/features/unattended-gates.md +316 -0
  177. package/pipeline/multi-agent-refs/features/unattended-security.md +731 -0
  178. package/pipeline/multi-agent-refs/features/url-enrichment.md +2 -2
  179. package/pipeline/multi-agent-refs/features/usage-reporting.md +127 -31
  180. package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
  181. package/pipeline/multi-agent-refs/features/visual-evidence.md +7 -7
  182. package/pipeline/multi-agent-refs/keychain.md +6 -11
  183. package/pipeline/multi-agent-refs/payload-contracts.md +2 -2
  184. package/pipeline/multi-agent-refs/phases/log-format.md +2 -3
  185. package/pipeline/multi-agent-refs/phases/modes.md +10 -12
  186. package/pipeline/multi-agent-refs/phases/operations.md +11 -5
  187. package/pipeline/multi-agent-refs/phases/phase-0-init.md +73 -81
  188. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +22 -22
  189. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +42 -66
  190. package/pipeline/multi-agent-refs/phases/phase-3-review.md +45 -79
  191. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +28 -38
  192. package/pipeline/multi-agent-refs/phases/phase-5-report.md +27 -25
  193. package/pipeline/multi-agent-refs/phases.md +1 -1
  194. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  195. package/pipeline/multi-agent-refs/progress-contract.md +13 -16
  196. package/pipeline/multi-agent-refs/readiness-review.md +1 -1
  197. package/pipeline/multi-agent-refs/research/engine.md +91 -0
  198. package/pipeline/multi-agent-refs/rules.md +6 -4
  199. package/pipeline/multi-agent-refs/setup/repo-discovery.md +2 -2
  200. package/pipeline/multi-agent-refs/tracker-contract.md +2 -2
  201. package/pipeline/multi-agent-refs/unattended-contract.md +68 -16
  202. package/pipeline/rules/figma-pipeline.md +12 -12
  203. package/pipeline/schemas/agent-state.schema.json +480 -18
  204. package/pipeline/schemas/analysis-spec.schema.json +4 -4
  205. package/pipeline/schemas/answer-request.schema.json +24 -0
  206. package/pipeline/schemas/answer-result.schema.json +28 -0
  207. package/pipeline/schemas/autopilot-config.schema.json +111 -13
  208. package/pipeline/schemas/command-parameters.schema.json +99 -0
  209. package/pipeline/schemas/constitution.schema.json +56 -0
  210. package/pipeline/schemas/contract-error.schema.json +52 -0
  211. package/pipeline/schemas/design-check-config.schema.json +5 -1
  212. package/pipeline/schemas/issues.schema.json +61 -0
  213. package/pipeline/schemas/launch-plan.schema.json +46 -0
  214. package/pipeline/schemas/launch-request.schema.json +45 -0
  215. package/pipeline/schemas/launch.json +61 -0
  216. package/pipeline/schemas/launch.schema.json +84 -0
  217. package/pipeline/schemas/phases.json +2 -2
  218. package/pipeline/schemas/phases.schema.json +68 -0
  219. package/pipeline/schemas/phone-devices.schema.json +61 -0
  220. package/pipeline/schemas/phone-signed-request.schema.json +67 -0
  221. package/pipeline/schemas/plan-critique.schema.json +99 -0
  222. package/pipeline/schemas/plan-todos.schema.json +7 -7
  223. package/pipeline/schemas/planning-output.schema.json +5 -0
  224. package/pipeline/schemas/pr-request.schema.json +46 -0
  225. package/pipeline/schemas/prefs.schema.json +82 -7
  226. package/pipeline/schemas/research-output.schema.json +118 -0
  227. package/pipeline/schemas/review-file-exclusions.schema.json +25 -0
  228. package/pipeline/schemas/reviewer-output.schema.json +40 -4
  229. package/pipeline/schemas/run-questions.json +392 -0
  230. package/pipeline/schemas/run-questions.schema.json +118 -0
  231. package/pipeline/schemas/runs-index.schema.json +189 -0
  232. package/pipeline/schemas/scaffold-manifest.schema.json +43 -0
  233. package/pipeline/schemas/secret-patterns.schema.json +28 -0
  234. package/pipeline/schemas/stack-adapters.json +527 -0
  235. package/pipeline/schemas/stack-adapters.schema.json +184 -0
  236. package/pipeline/schemas/token-budget.json +1 -1
  237. package/pipeline/schemas/token-budget.schema.json +26 -0
  238. package/pipeline/schemas/triage-output.schema.json +64 -3
  239. package/pipeline/schemas/unattended-policy.json +139 -0
  240. package/pipeline/schemas/unattended-policy.schema.json +73 -0
  241. package/pipeline/schemas/unattended-profile.json +248 -0
  242. package/pipeline/schemas/unattended-profile.schema.json +198 -0
  243. package/pipeline/schemas/worktrees.schema.json +51 -0
  244. package/pipeline/scripts/README.md +1 -0
  245. package/pipeline/scripts/_autopilot-config.mjs +130 -0
  246. package/pipeline/scripts/_autopilot-ops.mjs +567 -0
  247. package/pipeline/scripts/_autopilot-outcomes.mjs +174 -0
  248. package/pipeline/scripts/_command-contract.mjs +384 -0
  249. package/pipeline/scripts/_cost.mjs +40 -0
  250. package/pipeline/scripts/_notices.mjs +160 -0
  251. package/pipeline/scripts/_phone-auth.mjs +485 -0
  252. package/pipeline/scripts/_pre-existing.mjs +294 -0
  253. package/pipeline/scripts/_redact.mjs +77 -0
  254. package/pipeline/scripts/_run-paths.mjs +4 -2
  255. package/pipeline/scripts/_stack-adapter.mjs +678 -0
  256. package/pipeline/scripts/_stack-routing.mjs +1 -1
  257. package/pipeline/scripts/agent-guard.py +348 -37
  258. package/pipeline/scripts/agent-guard.sh +41 -13
  259. package/pipeline/scripts/analysis-story-tree.mjs +79 -3
  260. package/pipeline/scripts/answer-question.mjs +181 -0
  261. package/pipeline/scripts/audit-log-rotate.sh +1 -4
  262. package/pipeline/scripts/audit-log.sh +4 -4
  263. package/pipeline/scripts/autopilot-arming.mjs +389 -21
  264. package/pipeline/scripts/autopilot-awake.mjs +255 -0
  265. package/pipeline/scripts/autopilot-intake.mjs +137 -36
  266. package/pipeline/scripts/autopilot-menubar.swift +156 -44
  267. package/pipeline/scripts/autopilot-publish.mjs +1625 -0
  268. package/pipeline/scripts/autopilot-runner.mjs +1678 -222
  269. package/pipeline/scripts/autopilot-status.sh +198 -33
  270. package/pipeline/scripts/build-lock.sh +120 -0
  271. package/pipeline/scripts/build-references.mjs +4 -1
  272. package/pipeline/scripts/build-stack-plugins.mjs +59 -22
  273. package/pipeline/scripts/capture-flush.sh +1 -1
  274. package/pipeline/scripts/capture-resume.sh +13 -9
  275. package/pipeline/scripts/check-derived-drift.mjs +52 -11
  276. package/pipeline/scripts/commands.mjs +88 -0
  277. package/pipeline/scripts/constitution.mjs +362 -0
  278. package/pipeline/scripts/contract-server.mjs +776 -0
  279. package/pipeline/scripts/cost-analyze.mjs +89 -39
  280. package/pipeline/scripts/diff-explain.mjs +12 -1
  281. package/pipeline/scripts/doctor.mjs +77 -28
  282. package/pipeline/scripts/evidence-gate.mjs +192 -12
  283. package/pipeline/scripts/feedback-send.mjs +4 -2
  284. package/pipeline/scripts/gate-ledger.mjs +449 -0
  285. package/pipeline/scripts/gc-abandoned.sh +132 -13
  286. package/pipeline/scripts/gen-facts.mjs +31 -15
  287. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  288. package/pipeline/scripts/github-ssh-setup.sh +140 -29
  289. package/pipeline/scripts/graph-mermaid.mjs +4 -1
  290. package/pipeline/scripts/issues.mjs +236 -0
  291. package/pipeline/scripts/jira-attach.sh +6 -2
  292. package/pipeline/scripts/jira-search.sh +4 -3
  293. package/pipeline/scripts/keychain-save.sh +125 -24
  294. package/pipeline/scripts/keychain.py +63 -93
  295. package/pipeline/scripts/launch-request.mjs +747 -0
  296. package/pipeline/scripts/localize-commands.mjs +4 -10
  297. package/pipeline/scripts/log-metric.sh +6 -5
  298. package/pipeline/scripts/maturity-followup.mjs +13 -4
  299. package/pipeline/scripts/memory-save.sh +25 -0
  300. package/pipeline/scripts/migrate-prefs.mjs +4 -3
  301. package/pipeline/scripts/open-questions-gate.mjs +276 -0
  302. package/pipeline/scripts/phase-tracker.sh +41 -27
  303. package/pipeline/scripts/phase0-exit-gate.mjs +22 -4
  304. package/pipeline/scripts/phone-devices.mjs +224 -0
  305. package/pipeline/scripts/plan-coverage-gate.mjs +200 -66
  306. package/pipeline/scripts/plan-critique-gate.mjs +591 -0
  307. package/pipeline/scripts/pr-request.mjs +188 -0
  308. package/pipeline/scripts/pre-commit-check.sh +115 -4
  309. package/pipeline/scripts/probe-evidence-capability.sh +44 -5
  310. package/pipeline/scripts/record-phase.mjs +71 -0
  311. package/pipeline/scripts/render-agent-log-cost.sh +17 -2
  312. package/pipeline/scripts/render-cost-summary.sh +1 -1
  313. package/pipeline/scripts/render-work-summary.sh +1 -1
  314. package/pipeline/scripts/require-supported-version.sh +4 -1
  315. package/pipeline/scripts/research-gate.mjs +704 -0
  316. package/pipeline/scripts/review-decision-gate.mjs +403 -0
  317. package/pipeline/scripts/routine-registry.mjs +5 -2
  318. package/pipeline/scripts/runs-index.mjs +135 -27
  319. package/pipeline/scripts/scaffold-gate.mjs +393 -0
  320. package/pipeline/scripts/skill-conformance.mjs +25 -8
  321. package/pipeline/scripts/skill-siblings.mjs +2 -1
  322. package/pipeline/scripts/smoke-cross-cli-behavior.sh +32 -6
  323. package/pipeline/scripts/smoke-schema-validation.sh +6 -2
  324. package/pipeline/scripts/spec-consistency-gate.mjs +469 -0
  325. package/pipeline/scripts/symbol-existence-gate.mjs +450 -0
  326. package/pipeline/scripts/test-gap-scan.mjs +40 -2
  327. package/pipeline/scripts/test-integrity-gate.mjs +20 -4
  328. package/pipeline/scripts/test-strength.mjs +484 -0
  329. package/pipeline/scripts/test-summary.mjs +651 -0
  330. package/pipeline/scripts/triage-memory.mjs +49 -9
  331. package/pipeline/scripts/unattended_policy.py +2786 -0
  332. package/pipeline/scripts/uninstall.mjs +10 -10
  333. package/pipeline/scripts/update-issue-progress.sh +1 -1
  334. package/pipeline/scripts/usage-identity.mjs +288 -0
  335. package/pipeline/scripts/usage-register.mjs +185 -63
  336. package/pipeline/scripts/usage-report.mjs +230 -66
  337. package/pipeline/scripts/validate-complaint-doc.mjs +28 -10
  338. package/pipeline/scripts/validate-planning.mjs +6 -0
  339. package/pipeline/scripts/verify-citations.mjs +151 -38
  340. package/pipeline/scripts/verify.mjs +58 -18
  341. package/pipeline/scripts/worktree-prepare.sh +126 -0
  342. package/pipeline/scripts/worktrees.mjs +124 -0
  343. package/pipeline/scripts/write-state.mjs +48 -17
  344. package/pipeline/skills/.skill-manifest.json +222 -226
  345. package/pipeline/skills/.skills-index.json +77 -88
  346. package/pipeline/skills/shared/README.md +44 -45
  347. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +3 -2
  348. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +3 -2
  349. package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -9
  350. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -5
  351. package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +11 -3
  352. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +2 -1
  353. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -3
  354. package/pipeline/skills/shared/core/multi-agent-autopilot-off/SKILL.md +32 -6
  355. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +66 -8
  356. package/pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md +27 -9
  357. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -1
  358. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +7 -4
  359. package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +3 -2
  360. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +2 -1
  361. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +7 -5
  362. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +2 -1
  363. package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +3 -2
  364. package/pipeline/skills/shared/core/multi-agent-feedback/SKILL.md +2 -1
  365. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +2 -1
  366. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +2 -1
  367. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +2 -1
  368. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -1
  369. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -1
  370. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +3 -2
  371. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +2 -1
  372. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +7 -4
  373. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -1
  374. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +2 -1
  375. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +2 -1
  376. package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -1
  377. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +2 -1
  378. package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +2 -1
  379. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +2 -1
  380. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +2 -1
  381. package/pipeline/skills/shared/core/multi-agent-research/SKILL.md +35 -0
  382. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +7 -3
  383. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +7 -5
  384. package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +2 -1
  385. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +3 -2
  386. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +2 -1
  387. package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +2 -1
  388. package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +2 -1
  389. package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +2 -1
  390. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +2 -1
  391. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +3 -2
  392. package/pipeline/skills/shared/core/multi-agent-scaffold/SKILL.md +30 -0
  393. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +2 -1
  394. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +4 -3
  395. package/pipeline/skills/shared/core/multi-agent-security-review/SKILL.md +2 -1
  396. package/pipeline/skills/shared/core/multi-agent-serve/SKILL.md +60 -0
  397. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +8 -8
  398. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +2 -1
  399. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +7 -8
  400. package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -1
  401. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +2 -1
  402. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +10 -10
  403. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -1
  404. package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +2 -1
  405. package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +2 -1
  406. package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +2 -1
  407. package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +2 -1
  408. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -1
  409. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +3 -2
  410. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +2 -1
  411. package/pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md +46 -0
  412. package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +9 -3
  413. package/pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md +54 -0
  414. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +9 -11
  415. package/pipeline/skills/shared/external/NOTICE-vibeship-spawner-skills.md +203 -0
  416. package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +10 -3
  417. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +131 -25
  418. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -3
  419. package/pipeline/skills/shared/external/alarmkit/SKILL.md +2 -1
  420. package/pipeline/skills/shared/external/android-architecture/SKILL.md +85 -76
  421. package/pipeline/skills/shared/external/android-build-quality-gates/SKILL.md +51 -3
  422. package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +9 -0
  423. package/pipeline/skills/shared/external/android-datastore/SKILL.md +4 -3
  424. package/pipeline/skills/shared/external/android-design-tokens-codegen/SKILL.md +4 -3
  425. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +106 -181
  426. package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +147 -0
  427. package/pipeline/skills/shared/external/android-mvi-viewmodel/SKILL.md +45 -4
  428. package/pipeline/skills/shared/external/android-performance/SKILL.md +27 -2
  429. package/pipeline/skills/shared/external/android-performance/references/patterns.md +37 -37
  430. package/pipeline/skills/shared/external/api-patterns/SKILL.md +111 -67
  431. package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +128 -0
  432. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +136 -186
  433. package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +140 -0
  434. package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +207 -0
  435. package/pipeline/skills/shared/external/api-security-best-practices/references/operations.md +66 -0
  436. package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +175 -0
  437. package/pipeline/skills/shared/external/app-clips/SKILL.md +2 -0
  438. package/pipeline/skills/shared/external/app-intents/SKILL.md +2 -0
  439. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +4 -3
  440. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +2 -0
  441. package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -0
  442. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +2 -0
  443. package/pipeline/skills/shared/external/architecture/SKILL.md +106 -39
  444. package/pipeline/skills/shared/external/architecture/references/adr-and-review.md +76 -0
  445. package/pipeline/skills/shared/external/authentication/SKILL.md +2 -0
  446. package/pipeline/skills/shared/external/avkit/SKILL.md +2 -0
  447. package/pipeline/skills/shared/external/background-processing/SKILL.md +2 -1
  448. package/pipeline/skills/shared/external/backlog/SKILL.md +3 -2
  449. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +2 -0
  450. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +1 -1
  451. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +3 -2
  452. package/pipeline/skills/shared/external/clean-code/SKILL.md +192 -90
  453. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +2 -1
  454. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +1 -1
  455. package/pipeline/skills/shared/external/compose-components/SKILL.md +4 -4
  456. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +22 -22
  457. package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +10 -10
  458. package/pipeline/skills/shared/external/compose-testing/SKILL.md +13 -6
  459. package/pipeline/skills/shared/external/compose-testing/references/patterns.md +59 -59
  460. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +2 -0
  461. package/pipeline/skills/shared/external/context-compression/SKILL.md +118 -250
  462. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +2 -0
  463. package/pipeline/skills/shared/external/core-data/SKILL.md +2 -0
  464. package/pipeline/skills/shared/external/core-motion/SKILL.md +2 -0
  465. package/pipeline/skills/shared/external/core-nfc/SKILL.md +2 -0
  466. package/pipeline/skills/shared/external/coreml/SKILL.md +2 -1
  467. package/pipeline/skills/shared/external/council/SKILL.md +2 -1
  468. package/pipeline/skills/shared/external/cryptokit/SKILL.md +2 -0
  469. package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
  470. package/pipeline/skills/shared/external/database-patterns/SKILL.md +3 -2
  471. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +2 -0
  472. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +130 -20
  473. package/pipeline/skills/shared/external/debugging-strategies/references/hard-cases.md +54 -0
  474. package/pipeline/skills/shared/external/device-integrity/SKILL.md +2 -0
  475. package/pipeline/skills/shared/external/docker-expert/SKILL.md +137 -381
  476. package/pipeline/skills/shared/external/docker-expert/references/patterns.md +98 -0
  477. package/pipeline/skills/shared/external/energykit/SKILL.md +2 -1
  478. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +3 -1
  479. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +2 -2
  480. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +116 -185
  481. package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +235 -0
  482. package/pipeline/skills/shared/external/fastapi-pro/references/testing-and-deployment.md +69 -0
  483. package/pipeline/skills/shared/external/firebase/SKILL.md +4 -3
  484. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +151 -293
  485. package/pipeline/skills/shared/external/github-actions-templates/references/patterns.md +96 -0
  486. package/pipeline/skills/shared/external/healthkit/SKILL.md +2 -0
  487. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +69 -72
  488. package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +111 -0
  489. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +77 -86
  490. package/pipeline/skills/shared/external/hig-components-layout/references/containers.md +98 -0
  491. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +150 -78
  492. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +76 -97
  493. package/pipeline/skills/shared/external/hig-components-system/references/surfaces.md +98 -0
  494. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +48 -76
  495. package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +132 -0
  496. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +147 -106
  497. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +61 -77
  498. package/pipeline/skills/shared/external/hig-patterns/references/patterns.md +92 -0
  499. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +147 -77
  500. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +61 -121
  501. package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +108 -0
  502. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +2 -0
  503. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +1 -1
  504. package/pipeline/skills/shared/external/html-semantic/SKILL.md +3 -2
  505. package/pipeline/skills/shared/external/humanizer/SKILL.md +2 -1
  506. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +2 -0
  507. package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +2 -1
  508. package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +14 -2
  509. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
  510. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +4 -3
  511. package/pipeline/skills/shared/external/ios-localization/SKILL.md +8 -6
  512. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +2 -2
  513. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +11 -11
  514. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +2 -1
  515. package/pipeline/skills/shared/external/ios-networking/SKILL.md +2 -0
  516. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +2 -0
  517. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +102 -193
  518. package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +103 -0
  519. package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -2
  520. package/pipeline/skills/shared/external/live-activities/evals/evals.json +2 -2
  521. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +7 -9
  522. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +3 -3
  523. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +2 -2
  524. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +4 -3
  525. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +5 -3
  526. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +2 -0
  527. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +1 -1
  528. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +2 -0
  529. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +1 -1
  530. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +149 -46
  531. package/pipeline/skills/shared/external/monorepo-architect/references/patterns.md +70 -0
  532. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +2 -0
  533. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +1 -1
  534. package/pipeline/skills/shared/external/natural-language/SKILL.md +2 -0
  535. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +3 -2
  536. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +91 -21
  537. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +247 -0
  538. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/testing-and-frameworks.md +57 -0
  539. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +155 -232
  540. package/pipeline/skills/shared/external/observability-engineer/references/patterns.md +75 -0
  541. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +2 -0
  542. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +2 -2
  543. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +18 -18
  544. package/pipeline/skills/shared/external/pdfkit/SKILL.md +2 -1
  545. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +2 -0
  546. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +1 -1
  547. package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -0
  548. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +2 -1
  549. package/pipeline/skills/shared/external/push-notifications/SKILL.md +2 -0
  550. package/pipeline/skills/shared/external/python-patterns/SKILL.md +3 -2
  551. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +3 -2
  552. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +2 -2
  553. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +1 -1
  554. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +3 -2
  555. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +7 -7
  556. package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +69 -69
  557. package/pipeline/skills/shared/external/room-database/references/patterns.md +126 -126
  558. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -1
  559. package/pipeline/skills/shared/external/security-review/SKILL.md +4 -3
  560. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +2 -2
  561. package/pipeline/skills/shared/external/signal-community/SKILL.md +1 -1
  562. package/pipeline/skills/shared/external/skill-creator/SKILL.md +2 -1
  563. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +2 -1
  564. package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +2 -0
  565. package/pipeline/skills/shared/external/storekit/SKILL.md +2 -0
  566. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +2 -0
  567. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +2 -1
  568. package/pipeline/skills/shared/external/swift-charts/SKILL.md +2 -1
  569. package/pipeline/skills/shared/external/swift-codable/SKILL.md +2 -0
  570. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +3 -1
  571. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +5 -4
  572. package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -1
  573. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +2 -0
  574. package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -1
  575. package/pipeline/skills/shared/external/swift-security/SKILL.md +2 -1
  576. package/pipeline/skills/shared/external/swift-testing/SKILL.md +2 -0
  577. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -1
  578. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +10 -0
  579. package/pipeline/skills/shared/external/swiftdata/SKILL.md +2 -0
  580. package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -1
  581. package/pipeline/skills/shared/external/swiftlint/SKILL.md +2 -0
  582. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +2 -0
  583. package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +3 -1
  584. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +2 -0
  585. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +2 -0
  586. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +2 -0
  587. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +2 -0
  588. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +3 -1
  589. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +3 -1
  590. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +5 -4
  591. package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -1
  592. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +5 -4
  593. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +2 -0
  594. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +4 -3
  595. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +2 -0
  596. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
  597. package/pipeline/skills/shared/external/testing-backend/SKILL.md +3 -2
  598. package/pipeline/skills/shared/external/tipkit/SKILL.md +2 -0
  599. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +3 -2
  600. package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -0
  601. package/pipeline/skills/shared/external/vue-composition/SKILL.md +3 -2
  602. package/pipeline/skills/shared/external/weatherkit/SKILL.md +2 -0
  603. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +3 -2
  604. package/pipeline/skills/shared/external/web-performance/SKILL.md +3 -2
  605. package/pipeline/skills/shared/external/web-testing/SKILL.md +3 -2
  606. package/pipeline/skills/shared/external/widgetkit/SKILL.md +2 -0
  607. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +1 -1
  608. package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +2 -0
  609. package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +2 -0
  610. package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +2 -0
  611. package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +2 -0
  612. package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +2 -0
  613. package/pipeline/skills/skills-index.md +40 -41
  614. package/docs/token-budget-history.md +0 -24
  615. package/pipeline/skills/shared/external/agentflow/SKILL.md +0 -199
  616. package/pipeline/skills/shared/external/android-ui-verification/SKILL.md +0 -66
  617. package/pipeline/skills/shared/external/api-security-best-practices/references/auth.md +0 -299
  618. package/pipeline/skills/shared/external/api-security-best-practices/references/input-validation.md +0 -255
  619. package/pipeline/skills/shared/external/api-security-best-practices/references/rate-limiting.md +0 -167
  620. package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +0 -116
  621. package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -216
@@ -19,14 +19,115 @@ set -uo pipefail
19
19
  # miras kalır ve bazı sistemlerde `ps e` ile görünür; borudan okumak onu
20
20
  # yalnız bu sürecin belleğinde tutar. Aynı sebeple argv'ye de hiç değmez.
21
21
 
22
+ # Every line a person reads resolves through the table below, so this script
23
+ # answers to the same language preference the rest of the pipeline answers to.
24
+ #
25
+ # The resolver is located the same way the credential store is located further
26
+ # down - the file is checked for before it is sourced, because a `.` of a path
27
+ # that is not there takes the shell with it and the later candidates are never
28
+ # reached.
29
+ for _ma_uf in \
30
+ "$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)/user-facing.sh" \
31
+ "$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../lib" 2>/dev/null && pwd)/user-facing.sh" \
32
+ "$HOME/.claude/lib/user-facing.sh" \
33
+ "$HOME/.copilot/lib/user-facing.sh" \
34
+ "$HOME/.codex/lib/user-facing.sh"; do
35
+ [ -f "$_ma_uf" ] || continue
36
+ # shellcheck source=/dev/null
37
+ . "$_ma_uf" 2>/dev/null || true
38
+ if command -v ma_output_lang >/dev/null 2>&1; then break; fi
39
+ done
40
+ unset _ma_uf
41
+ if ! command -v ma_output_lang >/dev/null 2>&1; then
42
+ echo "Error: user-facing.sh not found. Install: npx @mmerterden/multi-agent-pipeline install" >&2
43
+ exit 1
44
+ fi
45
+ OUT_LANG=$(ma_output_lang)
46
+
47
+ # One table, both languages on the same line, so a wording change cannot land
48
+ # on one of them. English is the default and the fallback.
49
+ msg() { # $1 = key, $2.. = printf arguments
50
+ local key="$1" en tr fmt
51
+ shift
52
+ case "$key" in
53
+ usage)
54
+ en='Usage: %s <service-name> (interactive)\n %s <service-name> --stdin (token from a pipe)\n %s <service-name> --json <path> (token from a JSON file)'
55
+ tr='Kullanım: %s <service-adı> (interaktif)\n %s <service-adı> --stdin (token borudan)\n %s <service-adı> --json <yol> (JSON dosyadan)' ;;
56
+ no-mode-unattended)
57
+ en='Error: MULTI_AGENT_UNATTENDED=1 and no mode was given.'
58
+ tr='Hata: MULTI_AGENT_UNATTENDED=1 ve mod verilmedi.' ;;
59
+ no-mode-headless)
60
+ en='Error: there is no terminal and no mode was given.'
61
+ tr='Hata: terminal yok ve mod verilmedi.' ;;
62
+ file-missing)
63
+ en='Error: file not found: %s'
64
+ tr='Hata: Dosya bulunamadı: %s' ;;
65
+ stdin-empty)
66
+ en='Error: stdin is empty.'
67
+ tr='Hata: stdin boş.' ;;
68
+ json-needs-path)
69
+ en='Error: --json wants a file path.'
70
+ tr='Hata: --json bir dosya yolu ister.' ;;
71
+ file-unreadable)
72
+ en='Error: the file could not be read.'
73
+ tr='Hata: Dosya okunamadı.' ;;
74
+ kind-question)
75
+ en='What kind of secret are you saving?'
76
+ tr='Ne tür bir secret kaydedeceksin?' ;;
77
+ kind-token)
78
+ en=' 1) Personal Access Token / API Key'
79
+ tr=' 1) Personal Access Token / API Key' ;;
80
+ kind-json)
81
+ en=' 2) JSON file (service account and the like)'
82
+ tr=' 2) JSON dosyası (service account vb.)' ;;
83
+ ask-kind)
84
+ en='Choice (1/2): '
85
+ tr='Seçim (1/2): ' ;;
86
+ ask-token)
87
+ en='Paste the token (it is typed hidden): '
88
+ tr="Token'ı yapıştır (gizli yazılır): " ;;
89
+ token-empty)
90
+ en='Error: the token cannot be empty.'
91
+ tr='Hata: Token boş olamaz.' ;;
92
+ ask-json-path)
93
+ en='Enter the JSON file path: '
94
+ tr='JSON dosya yolunu gir: ' ;;
95
+ json-stored-verbatim)
96
+ en='The JSON will be stored as it is.'
97
+ tr='JSON olduğu gibi saklanacak.' ;;
98
+ invalid-choice)
99
+ en='Invalid choice.'
100
+ tr='Geçersiz seçim.' ;;
101
+ unknown-mode)
102
+ en='Error: unknown mode: %s'
103
+ tr='Hata: bilinmeyen mod: %s' ;;
104
+ no-credential-store)
105
+ en='Error: credential-store not found. Install: npx @mmerterden/multi-agent-pipeline install'
106
+ tr='Hata: credential-store bulunamadi. Kurulum: npx @mmerterden/multi-agent-pipeline install' ;;
107
+ saved)
108
+ en='Saved: %s (platform: %s)'
109
+ tr='Kaydedildi: %s (platform: %s)' ;;
110
+ read-it-back)
111
+ en='To read it back:'
112
+ tr='Okumak icin:' ;;
113
+ save-failed)
114
+ en='Error: could not save.'
115
+ tr='Hata: Kaydedilemedi.' ;;
116
+ *)
117
+ printf 'keychain-save: no message for %s\n' "$key" >&2
118
+ return 1 ;;
119
+ esac
120
+ [ "$OUT_LANG" = tr ] && fmt="$tr" || fmt="$en"
121
+ # shellcheck disable=SC2059
122
+ printf "$fmt\n" "$@"
123
+ }
124
+
22
125
  SERVICE_NAME="${1:-}"
23
126
  MODE="${2:-}"
24
127
  MODE_ARG="${3:-}"
25
128
 
26
129
  usage() {
27
- echo "Kullanım: $0 <service-adı> (interaktif)"
28
- echo " $0 <service-adı> --stdin (token borudan)"
29
- echo " $0 <service-adı> --json <yol> (JSON dosyadan)"
130
+ msg usage "$0" "$0" "$0"
30
131
  }
31
132
 
32
133
  if [ -z "$SERVICE_NAME" ]; then
@@ -40,9 +141,9 @@ if [ -z "$MODE" ] && { [ ! -t 0 ] || [ "${MULTI_AGENT_UNATTENDED:-}" = "1" ]; };
40
141
  # Sebebi doğru söyle. "terminal yok" derken terminalin VAR olması,
41
142
  # okuyanı kendi kurulumunu yanlış yerde aramaya gönderir.
42
143
  if [ "${MULTI_AGENT_UNATTENDED:-}" = "1" ]; then
43
- echo "Hata: MULTI_AGENT_UNATTENDED=1 ve mod verilmedi." >&2
144
+ msg no-mode-unattended >&2
44
145
  else
45
- echo "Hata: terminal yok ve mod verilmedi." >&2
146
+ msg no-mode-headless >&2
46
147
  fi
47
148
  usage >&2
48
149
  exit 1
@@ -56,7 +157,7 @@ read_json_file() {
56
157
  # Tilde (~) expand
57
158
  path="${path/#\~/$HOME}"
58
159
  if [ ! -f "$path" ]; then
59
- echo "Hata: Dosya bulunamadı: $path" >&2
160
+ msg file-missing "$path" >&2
60
161
  return 1
61
162
  fi
62
163
  # JSON olduğu gibi saklanır. Kimlik deposu çok satırlı değeri
@@ -71,56 +172,56 @@ case "$MODE" in
71
172
  # JSON'unun geri kalanını sessizce atar.
72
173
  SECRET=$(cat)
73
174
  if [ -z "$SECRET" ]; then
74
- echo "Hata: stdin boş." >&2
175
+ msg stdin-empty >&2
75
176
  exit 1
76
177
  fi
77
178
  ;;
78
179
  --json)
79
180
  if [ -z "$MODE_ARG" ]; then
80
- echo "Hata: --json bir dosya yolu ister." >&2
181
+ msg json-needs-path >&2
81
182
  usage >&2
82
183
  exit 1
83
184
  fi
84
185
  SECRET=$(read_json_file "$MODE_ARG") || exit 1
85
186
  if [ -z "$SECRET" ]; then
86
- echo "Hata: Dosya okunamadı." >&2
187
+ msg file-unreadable >&2
87
188
  exit 1
88
189
  fi
89
190
  ;;
90
191
  "")
91
- echo "Ne tür bir secret kaydedeceksin?"
92
- echo " 1) Personal Access Token / API Key"
93
- echo " 2) JSON dosyası (service account vb.)"
192
+ msg kind-question
193
+ msg kind-token
194
+ msg kind-json
94
195
  # EOF (Ctrl-D) bir cevaptır: korumasız `read` onu boş bir seçime
95
196
  # çevirip aşağıdaki "Geçersiz seçim"e düşürür, ki doğru sonuç.
96
- read -rp "Seçim (1/2): " CHOICE || CHOICE=""
197
+ read -rp "$(msg ask-kind)" CHOICE || CHOICE=""
97
198
 
98
199
  case "$CHOICE" in
99
200
  1)
100
- read -rsp "Token'ı yapıştır (gizli yazılır): " SECRET || SECRET=""
201
+ read -rsp "$(msg ask-token)" SECRET || SECRET=""
101
202
  echo ""
102
203
  if [ -z "$SECRET" ]; then
103
- echo "Hata: Token boş olamaz."
204
+ msg token-empty
104
205
  exit 1
105
206
  fi
106
207
  ;;
107
208
  2)
108
- read -rp "JSON dosya yolunu gir: " JSON_PATH || JSON_PATH=""
209
+ read -rp "$(msg ask-json-path)" JSON_PATH || JSON_PATH=""
109
210
  SECRET=$(read_json_file "$JSON_PATH") || exit 1
110
211
  if [ -z "$SECRET" ]; then
111
- echo "Hata: Dosya okunamadı."
212
+ msg file-unreadable
112
213
  exit 1
113
214
  fi
114
- echo "JSON olduğu gibi saklanacak."
215
+ msg json-stored-verbatim
115
216
  ;;
116
217
  *)
117
- echo "Geçersiz seçim."
218
+ msg invalid-choice
118
219
  exit 1
119
220
  ;;
120
221
  esac
121
222
  ;;
122
223
  *)
123
- echo "Hata: bilinmeyen mod: $MODE" >&2
224
+ msg unknown-mode "$MODE" >&2
124
225
  usage >&2
125
226
  exit 1
126
227
  ;;
@@ -150,7 +251,7 @@ for _cred_resolver in \
150
251
  done
151
252
  unset _cred_resolver
152
253
  if [ -z "${CRED_STORE:-}" ]; then
153
- echo "Hata: credential-store bulunamadi. Kurulum: npx @mmerterden/multi-agent-pipeline install"
254
+ msg no-credential-store
154
255
  exit 1
155
256
  fi
156
257
  CRED="$CRED_STORE"
@@ -158,11 +259,11 @@ CRED="$CRED_STORE"
158
259
  "$CRED" delete "$SERVICE_NAME" >/dev/null 2>&1 || true
159
260
  # Secret goes through stdin ("set <key> -") so it never appears on argv.
160
261
  if printf '%s' "$SECRET" | "$CRED" set "$SERVICE_NAME" -; then
161
- echo "Kaydedildi: $SERVICE_NAME (platform: $("$CRED" platform))"
262
+ msg saved "$SERVICE_NAME" "$("$CRED" platform)"
162
263
  echo ""
163
- echo "Okumak icin:"
264
+ msg read-it-back
164
265
  echo " $CRED get \"$SERVICE_NAME\""
165
266
  else
166
- echo "Hata: Kaydedilemedi."
267
+ msg save-failed
167
268
  exit 1
168
269
  fi
@@ -5,7 +5,7 @@ keychain.py - deterministic Keychain helper, Python counterpart to credential-
5
5
  Purpose
6
6
  -------
7
7
  The pipeline reads Keychain tokens from many places (Phase 0 setup, Phase 1
8
- Jira fetch, Phase 6 push retry, channels, ...). Shell `security` calls work
8
+ Jira fetch, Phase 4 push retry, channels, ...). Shell `security` calls work
9
9
  fine but make error handling and structured output painful. This module is
10
10
  the single deterministic Python entry point for those operations.
11
11
 
@@ -26,7 +26,7 @@ list_labels(filter_substring=None) -> list[str]
26
26
 
27
27
  doctor() -> dict
28
28
  Probe backend availability. Returns
29
- {"platform": "macos|linux|unknown", "backend_ok": bool, "remediation": str|None}
29
+ {"platform": "macos|unknown", "backend_ok": bool, "remediation": str|None}
30
30
 
31
31
  CLI
32
32
  ---
@@ -40,18 +40,17 @@ Exit codes
40
40
  ----------
41
41
  0 success
42
42
  1 item missing (get) / does not exist (delete)
43
- 2 backend unavailable (no `security` on macOS, no `secret-tool` on Linux)
43
+ 2 backend unavailable (no `security`, or not macOS)
44
44
  3 usage error
45
45
  4 unexpected backend error (stderr captured to stdout for diagnostics)
46
46
 
47
47
  Behaviour
48
48
  ---------
49
- - macOS: shells out to /usr/bin/security, parsing structured output.
50
- - Linux: shells out to secret-tool (libsecret).
51
- - Windows / unknown platforms: backend unavailable; `doctor` prints remediation.
49
+ - Shells out to /usr/bin/security, parsing structured output. macOS only
50
+ (ADR-0012): on any other host the backend is unavailable and `doctor` says so.
52
51
  - Never logs the secret value. `set` accepts the value via argv (CLI) or via
53
52
  stdin when the value is exactly `-` (preferred for scripts to avoid shell
54
- history leak). On macOS the write goes through `security -i` with the
53
+ history leak). The write goes through `security -i` with the
55
54
  command on stdin, so the value never appears on a child process argv.
56
55
  - get returns the raw value to stdout with no trailing newline manipulation
57
56
  beyond stripping the OS-level final \\n that `security -w` appends.
@@ -75,8 +74,6 @@ def _platform() -> str:
75
74
  s = platform.system()
76
75
  if s == "Darwin":
77
76
  return "macos"
78
- if s == "Linux":
79
- return "linux"
80
77
  return "unknown"
81
78
 
82
79
 
@@ -84,6 +81,14 @@ def _account_default(explicit: Optional[str] = None) -> str:
84
81
  return explicit or os.environ.get("USER") or os.environ.get("LOGNAME") or "user"
85
82
 
86
83
 
84
+ def _keychain() -> list[str]:
85
+ """The keychain file every call is scoped to, when CREDENTIAL_STORE_KEYCHAIN
86
+ names one; otherwise the user's search list. Tests point it at a throwaway
87
+ keychain so they never write to the login keychain."""
88
+ path = os.environ.get("CREDENTIAL_STORE_KEYCHAIN", "")
89
+ return [path] if path else []
90
+
91
+
87
92
  def _run(argv: list[str], input_value: Optional[bytes] = None) -> tuple[int, bytes, bytes]:
88
93
  """Run a subprocess; return (rc, stdout_bytes, stderr_bytes). Never raises on non-zero."""
89
94
  proc = subprocess.run(
@@ -105,17 +110,10 @@ def doctor() -> dict:
105
110
  "backend_ok": ok,
106
111
  "remediation": None if ok else "macOS Keychain CLI missing - /usr/bin/security should ship with macOS; reinstall Command Line Tools.",
107
112
  }
108
- if pf == "linux":
109
- ok = shutil.which("secret-tool") is not None
110
- return {
111
- "platform": pf,
112
- "backend_ok": ok,
113
- "remediation": None if ok else "Install libsecret-tools: `sudo apt install libsecret-tools` or `sudo dnf install libsecret`.",
114
- }
115
113
  return {
116
114
  "platform": pf,
117
115
  "backend_ok": False,
118
- "remediation": "Unsupported platform; the pipeline only ships Keychain support for macOS and libsecret for Linux. Use environment variables on Windows.",
116
+ "remediation": "macOS only, see ADR-0012.",
119
117
  }
120
118
 
121
119
 
@@ -180,7 +178,7 @@ def _macos_find(args: list[str]) -> Optional[str]:
180
178
  A value whose trailing newline is meaningful is not something this store has
181
179
  ever been able to return.
182
180
  """
183
- rc, _, err = _run(["/usr/bin/security", "find-generic-password", *args, "-g"])
181
+ rc, _, err = _run(["/usr/bin/security", "find-generic-password", *args, "-g", *_keychain()])
184
182
  if rc != 0:
185
183
  return None
186
184
  value = _decode_security_password(err)
@@ -192,63 +190,45 @@ def get(label: str, account: Optional[str] = None) -> Optional[str]:
192
190
  - User's manually-added tokens (e.g. ${USER}_Vercel_Access_Token) use -l (label).
193
191
  - credential-store.sh-managed items use -s (service).
194
192
  The helper finds either."""
195
- pf = _ensure_backend()
193
+ _ensure_backend()
196
194
  acct = _account_default(account)
197
- if pf == "macos":
198
- for args in (
199
- ["-a", acct, "-l", label],
200
- ["-a", acct, "-s", label],
201
- # account-agnostic last resort - some entries were written without -a
202
- ["-l", label],
203
- ["-s", label],
204
- ):
205
- value = _macos_find(args)
206
- if value is not None:
207
- return value
208
- return None
209
- # linux / secret-tool - store under both `label` and `service` schema attrs
210
- rc, out, _ = _run(["secret-tool", "lookup", "label", label, "account", acct])
211
- if rc == 0:
212
- return out.decode("utf-8", errors="replace").rstrip("\n")
213
- rc, out, _ = _run(["secret-tool", "lookup", "service", label])
214
- if rc == 0:
215
- return out.decode("utf-8", errors="replace").rstrip("\n")
195
+ for args in (
196
+ ["-a", acct, "-l", label],
197
+ ["-a", acct, "-s", label],
198
+ # account-agnostic last resort - some entries were written without -a
199
+ ["-l", label],
200
+ ["-s", label],
201
+ ):
202
+ value = _macos_find(args)
203
+ if value is not None:
204
+ return value
216
205
  return None
217
206
 
218
207
 
219
208
  def set_(label: str, value: str, account: Optional[str] = None) -> None:
220
209
  """Write the entry with both -l (label) and -s (service) set to the same id, so
221
210
  both lookup conventions succeed. -U overwrites if the item already exists."""
222
- pf = _ensure_backend()
211
+ _ensure_backend()
223
212
  acct = _account_default(account)
224
- if pf == "macos":
225
- # `security -i` reads the add command from stdin, so the secret never
226
- # lands on the security argv (visible to ps). Backslashes and double
227
- # quotes are escaped for security's interactive tokenizer.
228
- def quote(text: str) -> str:
229
- return text.replace("\\", "\\\\").replace('"', '\\"')
230
-
231
- # The secret goes in as `-X <hex>`, not `-w "<text>"`. `security -i`
232
- # tokenizes ONE command per line, so a newline inside the value ends the
233
- # command and the remainder is read as further commands - which is how a
234
- # service-account JSON turned into "security: unknown command" instead of
235
- # a stored credential. Hex is single-line by construction and byte-exact,
236
- # and it stays on stdin, so the argv exposure this branch exists to avoid
237
- # is still avoided.
238
- command = (
239
- f'add-generic-password -U -a "{quote(acct)}" -l "{quote(label)}" '
240
- f'-s "{quote(label)}" -X {value.encode("utf-8").hex()}\n'
241
- )
242
- rc, _, err = _run(["/usr/bin/security", "-i"], input_value=command.encode("utf-8"))
243
- if rc != 0:
244
- sys.stderr.write(err.decode("utf-8", errors="replace"))
245
- sys.exit(4)
246
- return
247
- # linux / secret-tool - store reads the secret from stdin; tag both schema attrs
248
- rc, _, err = _run(
249
- ["secret-tool", "store", "--label", label, "label", label, "service", label, "account", acct],
250
- input_value=value.encode("utf-8"),
213
+ # `security -i` reads the add command from stdin, so the secret never
214
+ # lands on the security argv (visible to ps). Backslashes and double
215
+ # quotes are escaped for security's interactive tokenizer.
216
+ def quote(text: str) -> str:
217
+ return text.replace("\\", "\\\\").replace('"', '\\"')
218
+
219
+ # The secret goes in as `-X <hex>`, not `-w "<text>"`. `security -i`
220
+ # tokenizes ONE command per line, so a newline inside the value ends the
221
+ # command and the remainder is read as further commands - which is how a
222
+ # service-account JSON turned into "security: unknown command" instead of
223
+ # a stored credential. Hex is single-line by construction and byte-exact,
224
+ # and it stays on stdin, so the argv exposure this branch exists to avoid
225
+ # is still avoided.
226
+ target = "".join(f' "{quote(k)}"' for k in _keychain())
227
+ command = (
228
+ f'add-generic-password -U -a "{quote(acct)}" -l "{quote(label)}" '
229
+ f'-s "{quote(label)}" -X {value.encode("utf-8").hex()}{target}\n'
251
230
  )
231
+ rc, _, err = _run(["/usr/bin/security", "-i"], input_value=command.encode("utf-8"))
252
232
  if rc != 0:
253
233
  sys.stderr.write(err.decode("utf-8", errors="replace"))
254
234
  sys.exit(4)
@@ -256,40 +236,30 @@ def set_(label: str, value: str, account: Optional[str] = None) -> None:
256
236
 
257
237
  def delete(label: str, account: Optional[str] = None) -> bool:
258
238
  """Delete by either convention. Returns True if any matching item was removed."""
259
- pf = _ensure_backend()
239
+ _ensure_backend()
260
240
  acct = _account_default(account)
261
- if pf == "macos":
262
- deleted = False
263
- for flag in ("-l", "-s"):
264
- while True:
265
- rc, _, _ = _run(["/usr/bin/security", "delete-generic-password", "-a", acct, flag, label])
266
- if rc != 0:
267
- break
268
- deleted = True
269
- for flag in ("-l", "-s"):
270
- while True:
271
- rc, _, _ = _run(["/usr/bin/security", "delete-generic-password", flag, label])
272
- if rc != 0:
273
- break
274
- deleted = True
275
- return deleted
276
241
  deleted = False
277
- rc, _, _ = _run(["secret-tool", "clear", "label", label, "account", acct])
278
- if rc == 0:
279
- deleted = True
280
- rc, _, _ = _run(["secret-tool", "clear", "service", label])
281
- if rc == 0:
282
- deleted = True
242
+ for flag in ("-l", "-s"):
243
+ while True:
244
+ rc, _, _ = _run(
245
+ ["/usr/bin/security", "delete-generic-password", "-a", acct, flag, label, *_keychain()]
246
+ )
247
+ if rc != 0:
248
+ break
249
+ deleted = True
250
+ for flag in ("-l", "-s"):
251
+ while True:
252
+ rc, _, _ = _run(["/usr/bin/security", "delete-generic-password", flag, label, *_keychain()])
253
+ if rc != 0:
254
+ break
255
+ deleted = True
283
256
  return deleted
284
257
 
285
258
 
286
259
  def list_labels(filter_substring: Optional[str] = None) -> list[str]:
287
- pf = _ensure_backend()
288
- if pf != "macos":
289
- # secret-tool has no native list; we can't enumerate all entries portably.
290
- return []
260
+ _ensure_backend()
291
261
  # `security dump-keychain` prints every item; we extract the 0x00000007 (label) attr.
292
- rc, out, _ = _run(["/usr/bin/security", "dump-keychain"])
262
+ rc, out, _ = _run(["/usr/bin/security", "dump-keychain", *_keychain()])
293
263
  if rc != 0:
294
264
  return []
295
265
  labels: list[str] = []