@mmerterden/multi-agent-pipeline 20.2.1 → 20.3.1

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 (622) hide show
  1. package/CHANGELOG.md +919 -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 +617 -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/usage-endpoint.mjs +33 -0
  148. package/pipeline/lib/user-facing.mjs +82 -0
  149. package/pipeline/lib/user-facing.sh +58 -0
  150. package/pipeline/multi-agent-refs/_dev-context.md +1 -1
  151. package/pipeline/multi-agent-refs/analysis/evidence.md +4 -0
  152. package/pipeline/multi-agent-refs/analysis/locked.md +2 -2
  153. package/pipeline/multi-agent-refs/analysis/render.md +4 -3
  154. package/pipeline/multi-agent-refs/analysis/resolve.md +3 -1
  155. package/pipeline/multi-agent-refs/analysis/synthesis.md +4 -5
  156. package/pipeline/multi-agent-refs/analysis-template.md +10 -17
  157. package/pipeline/multi-agent-refs/channels/jira.md +1 -1
  158. package/pipeline/multi-agent-refs/component-dispatch.md +3 -3
  159. package/pipeline/multi-agent-refs/conventions-defaults.md +32 -32
  160. package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -17
  161. package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +37 -9
  162. package/pipeline/multi-agent-refs/features/autopilot-operations.md +277 -0
  163. package/pipeline/multi-agent-refs/features/constitution.md +196 -0
  164. package/pipeline/multi-agent-refs/features/doctor.md +6 -3
  165. package/pipeline/multi-agent-refs/features/external-context-injection.md +6 -1
  166. package/pipeline/multi-agent-refs/features/jira-context.md +1 -1
  167. package/pipeline/multi-agent-refs/features/maturity-followup.md +43 -23
  168. package/pipeline/multi-agent-refs/features/model-fallback.md +9 -0
  169. package/pipeline/multi-agent-refs/features/phone-api.md +306 -0
  170. package/pipeline/multi-agent-refs/features/plan-critic.md +159 -0
  171. package/pipeline/multi-agent-refs/features/research.md +150 -0
  172. package/pipeline/multi-agent-refs/features/review-decision.md +185 -0
  173. package/pipeline/multi-agent-refs/features/scaffold.md +160 -0
  174. package/pipeline/multi-agent-refs/features/security-audit.md +6 -2
  175. package/pipeline/multi-agent-refs/features/skill-conformance.md +4 -1
  176. package/pipeline/multi-agent-refs/features/stack-adapters.md +116 -0
  177. package/pipeline/multi-agent-refs/features/unattended-gates.md +316 -0
  178. package/pipeline/multi-agent-refs/features/unattended-security.md +731 -0
  179. package/pipeline/multi-agent-refs/features/url-enrichment.md +2 -2
  180. package/pipeline/multi-agent-refs/features/usage-reporting.md +127 -35
  181. package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
  182. package/pipeline/multi-agent-refs/features/visual-evidence.md +7 -7
  183. package/pipeline/multi-agent-refs/keychain.md +6 -11
  184. package/pipeline/multi-agent-refs/payload-contracts.md +2 -2
  185. package/pipeline/multi-agent-refs/phases/log-format.md +2 -3
  186. package/pipeline/multi-agent-refs/phases/modes.md +10 -12
  187. package/pipeline/multi-agent-refs/phases/operations.md +11 -5
  188. package/pipeline/multi-agent-refs/phases/phase-0-init.md +73 -81
  189. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +22 -22
  190. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +42 -66
  191. package/pipeline/multi-agent-refs/phases/phase-3-review.md +45 -79
  192. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +28 -38
  193. package/pipeline/multi-agent-refs/phases/phase-5-report.md +27 -25
  194. package/pipeline/multi-agent-refs/phases.md +1 -1
  195. package/pipeline/multi-agent-refs/picker-contract.md +1 -1
  196. package/pipeline/multi-agent-refs/progress-contract.md +13 -16
  197. package/pipeline/multi-agent-refs/readiness-review.md +1 -1
  198. package/pipeline/multi-agent-refs/research/engine.md +91 -0
  199. package/pipeline/multi-agent-refs/rules.md +6 -4
  200. package/pipeline/multi-agent-refs/setup/repo-discovery.md +2 -2
  201. package/pipeline/multi-agent-refs/tracker-contract.md +2 -2
  202. package/pipeline/multi-agent-refs/unattended-contract.md +68 -16
  203. package/pipeline/rules/figma-pipeline.md +12 -12
  204. package/pipeline/schemas/agent-state.schema.json +480 -18
  205. package/pipeline/schemas/analysis-spec.schema.json +4 -4
  206. package/pipeline/schemas/answer-request.schema.json +24 -0
  207. package/pipeline/schemas/answer-result.schema.json +28 -0
  208. package/pipeline/schemas/autopilot-config.schema.json +111 -13
  209. package/pipeline/schemas/command-parameters.schema.json +99 -0
  210. package/pipeline/schemas/constitution.schema.json +56 -0
  211. package/pipeline/schemas/contract-error.schema.json +52 -0
  212. package/pipeline/schemas/design-check-config.schema.json +5 -1
  213. package/pipeline/schemas/issues.schema.json +61 -0
  214. package/pipeline/schemas/launch-plan.schema.json +46 -0
  215. package/pipeline/schemas/launch-request.schema.json +45 -0
  216. package/pipeline/schemas/launch.json +61 -0
  217. package/pipeline/schemas/launch.schema.json +84 -0
  218. package/pipeline/schemas/phases.json +2 -2
  219. package/pipeline/schemas/phases.schema.json +68 -0
  220. package/pipeline/schemas/phone-devices.schema.json +61 -0
  221. package/pipeline/schemas/phone-signed-request.schema.json +67 -0
  222. package/pipeline/schemas/plan-critique.schema.json +99 -0
  223. package/pipeline/schemas/plan-todos.schema.json +7 -7
  224. package/pipeline/schemas/planning-output.schema.json +5 -0
  225. package/pipeline/schemas/pr-request.schema.json +46 -0
  226. package/pipeline/schemas/prefs.schema.json +79 -8
  227. package/pipeline/schemas/research-output.schema.json +118 -0
  228. package/pipeline/schemas/review-file-exclusions.schema.json +25 -0
  229. package/pipeline/schemas/reviewer-output.schema.json +40 -4
  230. package/pipeline/schemas/run-questions.json +392 -0
  231. package/pipeline/schemas/run-questions.schema.json +118 -0
  232. package/pipeline/schemas/runs-index.schema.json +189 -0
  233. package/pipeline/schemas/scaffold-manifest.schema.json +43 -0
  234. package/pipeline/schemas/secret-patterns.schema.json +28 -0
  235. package/pipeline/schemas/stack-adapters.json +527 -0
  236. package/pipeline/schemas/stack-adapters.schema.json +184 -0
  237. package/pipeline/schemas/token-budget.json +1 -1
  238. package/pipeline/schemas/token-budget.schema.json +26 -0
  239. package/pipeline/schemas/triage-output.schema.json +64 -3
  240. package/pipeline/schemas/unattended-policy.json +139 -0
  241. package/pipeline/schemas/unattended-policy.schema.json +73 -0
  242. package/pipeline/schemas/unattended-profile.json +248 -0
  243. package/pipeline/schemas/unattended-profile.schema.json +198 -0
  244. package/pipeline/schemas/worktrees.schema.json +51 -0
  245. package/pipeline/scripts/README.md +1 -0
  246. package/pipeline/scripts/_autopilot-config.mjs +130 -0
  247. package/pipeline/scripts/_autopilot-ops.mjs +567 -0
  248. package/pipeline/scripts/_autopilot-outcomes.mjs +174 -0
  249. package/pipeline/scripts/_command-contract.mjs +384 -0
  250. package/pipeline/scripts/_cost.mjs +40 -0
  251. package/pipeline/scripts/_notices.mjs +160 -0
  252. package/pipeline/scripts/_phone-auth.mjs +485 -0
  253. package/pipeline/scripts/_pre-existing.mjs +294 -0
  254. package/pipeline/scripts/_redact.mjs +77 -0
  255. package/pipeline/scripts/_run-paths.mjs +4 -2
  256. package/pipeline/scripts/_stack-adapter.mjs +678 -0
  257. package/pipeline/scripts/_stack-routing.mjs +1 -1
  258. package/pipeline/scripts/agent-guard.py +348 -37
  259. package/pipeline/scripts/agent-guard.sh +41 -13
  260. package/pipeline/scripts/analysis-story-tree.mjs +79 -3
  261. package/pipeline/scripts/answer-question.mjs +181 -0
  262. package/pipeline/scripts/audit-log-rotate.sh +1 -4
  263. package/pipeline/scripts/audit-log.sh +4 -4
  264. package/pipeline/scripts/autopilot-arming.mjs +389 -21
  265. package/pipeline/scripts/autopilot-awake.mjs +255 -0
  266. package/pipeline/scripts/autopilot-intake.mjs +137 -36
  267. package/pipeline/scripts/autopilot-menubar.swift +156 -44
  268. package/pipeline/scripts/autopilot-publish.mjs +1625 -0
  269. package/pipeline/scripts/autopilot-runner.mjs +1678 -222
  270. package/pipeline/scripts/autopilot-status.sh +198 -33
  271. package/pipeline/scripts/build-lock.sh +120 -0
  272. package/pipeline/scripts/build-references.mjs +4 -1
  273. package/pipeline/scripts/build-stack-plugins.mjs +59 -22
  274. package/pipeline/scripts/capture-flush.sh +1 -1
  275. package/pipeline/scripts/capture-resume.sh +13 -9
  276. package/pipeline/scripts/check-derived-drift.mjs +52 -11
  277. package/pipeline/scripts/commands.mjs +88 -0
  278. package/pipeline/scripts/constitution.mjs +362 -0
  279. package/pipeline/scripts/contract-server.mjs +776 -0
  280. package/pipeline/scripts/cost-analyze.mjs +89 -39
  281. package/pipeline/scripts/diff-explain.mjs +12 -1
  282. package/pipeline/scripts/doctor.mjs +77 -28
  283. package/pipeline/scripts/evidence-gate.mjs +192 -12
  284. package/pipeline/scripts/feedback-send.mjs +4 -2
  285. package/pipeline/scripts/gate-ledger.mjs +449 -0
  286. package/pipeline/scripts/gc-abandoned.sh +132 -13
  287. package/pipeline/scripts/gen-facts.mjs +31 -15
  288. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  289. package/pipeline/scripts/github-ssh-setup.sh +140 -29
  290. package/pipeline/scripts/graph-mermaid.mjs +4 -1
  291. package/pipeline/scripts/issues.mjs +236 -0
  292. package/pipeline/scripts/jira-attach.sh +6 -2
  293. package/pipeline/scripts/jira-search.sh +4 -3
  294. package/pipeline/scripts/keychain-save.sh +125 -24
  295. package/pipeline/scripts/keychain.py +63 -93
  296. package/pipeline/scripts/launch-request.mjs +747 -0
  297. package/pipeline/scripts/localize-commands.mjs +4 -10
  298. package/pipeline/scripts/log-metric.sh +6 -5
  299. package/pipeline/scripts/maturity-followup.mjs +13 -4
  300. package/pipeline/scripts/memory-save.sh +25 -0
  301. package/pipeline/scripts/migrate-prefs.mjs +4 -3
  302. package/pipeline/scripts/open-questions-gate.mjs +276 -0
  303. package/pipeline/scripts/phase-tracker.sh +41 -27
  304. package/pipeline/scripts/phase0-exit-gate.mjs +22 -4
  305. package/pipeline/scripts/phone-devices.mjs +224 -0
  306. package/pipeline/scripts/plan-coverage-gate.mjs +200 -66
  307. package/pipeline/scripts/plan-critique-gate.mjs +591 -0
  308. package/pipeline/scripts/pr-request.mjs +188 -0
  309. package/pipeline/scripts/pre-commit-check.sh +115 -4
  310. package/pipeline/scripts/probe-evidence-capability.sh +44 -5
  311. package/pipeline/scripts/record-phase.mjs +71 -0
  312. package/pipeline/scripts/render-agent-log-cost.sh +17 -2
  313. package/pipeline/scripts/render-cost-summary.sh +1 -1
  314. package/pipeline/scripts/render-work-summary.sh +1 -1
  315. package/pipeline/scripts/require-supported-version.sh +4 -1
  316. package/pipeline/scripts/research-gate.mjs +704 -0
  317. package/pipeline/scripts/review-decision-gate.mjs +403 -0
  318. package/pipeline/scripts/routine-registry.mjs +5 -2
  319. package/pipeline/scripts/runs-index.mjs +135 -27
  320. package/pipeline/scripts/scaffold-gate.mjs +393 -0
  321. package/pipeline/scripts/skill-conformance.mjs +25 -8
  322. package/pipeline/scripts/skill-siblings.mjs +2 -1
  323. package/pipeline/scripts/smoke-cross-cli-behavior.sh +32 -6
  324. package/pipeline/scripts/smoke-schema-validation.sh +6 -2
  325. package/pipeline/scripts/spec-consistency-gate.mjs +469 -0
  326. package/pipeline/scripts/symbol-existence-gate.mjs +450 -0
  327. package/pipeline/scripts/test-gap-scan.mjs +40 -2
  328. package/pipeline/scripts/test-integrity-gate.mjs +20 -4
  329. package/pipeline/scripts/test-strength.mjs +484 -0
  330. package/pipeline/scripts/test-summary.mjs +651 -0
  331. package/pipeline/scripts/triage-memory.mjs +49 -9
  332. package/pipeline/scripts/unattended_policy.py +2786 -0
  333. package/pipeline/scripts/uninstall.mjs +10 -10
  334. package/pipeline/scripts/update-issue-progress.sh +1 -1
  335. package/pipeline/scripts/usage-identity.mjs +288 -0
  336. package/pipeline/scripts/usage-register.mjs +187 -67
  337. package/pipeline/scripts/usage-report.mjs +232 -67
  338. package/pipeline/scripts/validate-complaint-doc.mjs +28 -10
  339. package/pipeline/scripts/validate-planning.mjs +6 -0
  340. package/pipeline/scripts/verify-citations.mjs +151 -38
  341. package/pipeline/scripts/verify.mjs +58 -18
  342. package/pipeline/scripts/worktree-prepare.sh +126 -0
  343. package/pipeline/scripts/worktrees.mjs +124 -0
  344. package/pipeline/scripts/write-state.mjs +48 -17
  345. package/pipeline/skills/.skill-manifest.json +222 -226
  346. package/pipeline/skills/.skills-index.json +77 -88
  347. package/pipeline/skills/shared/README.md +44 -45
  348. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +3 -2
  349. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +3 -2
  350. package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -9
  351. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -5
  352. package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +11 -3
  353. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +2 -1
  354. package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -3
  355. package/pipeline/skills/shared/core/multi-agent-autopilot-off/SKILL.md +32 -6
  356. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +66 -8
  357. package/pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md +27 -9
  358. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -1
  359. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +7 -4
  360. package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +3 -2
  361. package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +2 -1
  362. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +7 -5
  363. package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +2 -1
  364. package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +3 -2
  365. package/pipeline/skills/shared/core/multi-agent-feedback/SKILL.md +2 -1
  366. package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +2 -1
  367. package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +2 -1
  368. package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +2 -1
  369. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -1
  370. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -1
  371. package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +3 -2
  372. package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +2 -1
  373. package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +7 -4
  374. package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -1
  375. package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +2 -1
  376. package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +2 -1
  377. package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -1
  378. package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +2 -1
  379. package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +2 -1
  380. package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +2 -1
  381. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +2 -1
  382. package/pipeline/skills/shared/core/multi-agent-research/SKILL.md +35 -0
  383. package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +7 -3
  384. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +7 -5
  385. package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +2 -1
  386. package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +3 -2
  387. package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +2 -1
  388. package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +2 -1
  389. package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +2 -1
  390. package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +2 -1
  391. package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +2 -1
  392. package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +3 -2
  393. package/pipeline/skills/shared/core/multi-agent-scaffold/SKILL.md +30 -0
  394. package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +2 -1
  395. package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +4 -3
  396. package/pipeline/skills/shared/core/multi-agent-security-review/SKILL.md +2 -1
  397. package/pipeline/skills/shared/core/multi-agent-serve/SKILL.md +60 -0
  398. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +8 -8
  399. package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +2 -1
  400. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +7 -8
  401. package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -1
  402. package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +2 -1
  403. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +10 -10
  404. package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -1
  405. package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +2 -1
  406. package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +2 -1
  407. package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +2 -1
  408. package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +2 -1
  409. package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -1
  410. package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +3 -2
  411. package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +2 -1
  412. package/pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md +46 -0
  413. package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +9 -3
  414. package/pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md +54 -0
  415. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +9 -11
  416. package/pipeline/skills/shared/external/NOTICE-vibeship-spawner-skills.md +203 -0
  417. package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +10 -3
  418. package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +131 -25
  419. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -3
  420. package/pipeline/skills/shared/external/alarmkit/SKILL.md +2 -1
  421. package/pipeline/skills/shared/external/android-architecture/SKILL.md +85 -76
  422. package/pipeline/skills/shared/external/android-build-quality-gates/SKILL.md +51 -3
  423. package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +9 -0
  424. package/pipeline/skills/shared/external/android-datastore/SKILL.md +4 -3
  425. package/pipeline/skills/shared/external/android-design-tokens-codegen/SKILL.md +4 -3
  426. package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +106 -181
  427. package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +147 -0
  428. package/pipeline/skills/shared/external/android-mvi-viewmodel/SKILL.md +45 -4
  429. package/pipeline/skills/shared/external/android-performance/SKILL.md +27 -2
  430. package/pipeline/skills/shared/external/android-performance/references/patterns.md +37 -37
  431. package/pipeline/skills/shared/external/api-patterns/SKILL.md +111 -67
  432. package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +128 -0
  433. package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +136 -186
  434. package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +140 -0
  435. package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +207 -0
  436. package/pipeline/skills/shared/external/api-security-best-practices/references/operations.md +66 -0
  437. package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +175 -0
  438. package/pipeline/skills/shared/external/app-clips/SKILL.md +2 -0
  439. package/pipeline/skills/shared/external/app-intents/SKILL.md +2 -0
  440. package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +4 -3
  441. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +2 -0
  442. package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -0
  443. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +2 -0
  444. package/pipeline/skills/shared/external/architecture/SKILL.md +106 -39
  445. package/pipeline/skills/shared/external/architecture/references/adr-and-review.md +76 -0
  446. package/pipeline/skills/shared/external/authentication/SKILL.md +2 -0
  447. package/pipeline/skills/shared/external/avkit/SKILL.md +2 -0
  448. package/pipeline/skills/shared/external/background-processing/SKILL.md +2 -1
  449. package/pipeline/skills/shared/external/backlog/SKILL.md +3 -2
  450. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +2 -0
  451. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +1 -1
  452. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +3 -2
  453. package/pipeline/skills/shared/external/clean-code/SKILL.md +192 -90
  454. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +2 -1
  455. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +1 -1
  456. package/pipeline/skills/shared/external/compose-components/SKILL.md +4 -4
  457. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +22 -22
  458. package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +10 -10
  459. package/pipeline/skills/shared/external/compose-testing/SKILL.md +13 -6
  460. package/pipeline/skills/shared/external/compose-testing/references/patterns.md +59 -59
  461. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +2 -0
  462. package/pipeline/skills/shared/external/context-compression/SKILL.md +118 -250
  463. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +2 -0
  464. package/pipeline/skills/shared/external/core-data/SKILL.md +2 -0
  465. package/pipeline/skills/shared/external/core-motion/SKILL.md +2 -0
  466. package/pipeline/skills/shared/external/core-nfc/SKILL.md +2 -0
  467. package/pipeline/skills/shared/external/coreml/SKILL.md +2 -1
  468. package/pipeline/skills/shared/external/council/SKILL.md +2 -1
  469. package/pipeline/skills/shared/external/cryptokit/SKILL.md +2 -0
  470. package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
  471. package/pipeline/skills/shared/external/database-patterns/SKILL.md +3 -2
  472. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +2 -0
  473. package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +130 -20
  474. package/pipeline/skills/shared/external/debugging-strategies/references/hard-cases.md +54 -0
  475. package/pipeline/skills/shared/external/device-integrity/SKILL.md +2 -0
  476. package/pipeline/skills/shared/external/docker-expert/SKILL.md +137 -381
  477. package/pipeline/skills/shared/external/docker-expert/references/patterns.md +98 -0
  478. package/pipeline/skills/shared/external/energykit/SKILL.md +2 -1
  479. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +3 -1
  480. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +2 -2
  481. package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +116 -185
  482. package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +235 -0
  483. package/pipeline/skills/shared/external/fastapi-pro/references/testing-and-deployment.md +69 -0
  484. package/pipeline/skills/shared/external/firebase/SKILL.md +4 -3
  485. package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +151 -293
  486. package/pipeline/skills/shared/external/github-actions-templates/references/patterns.md +96 -0
  487. package/pipeline/skills/shared/external/healthkit/SKILL.md +2 -0
  488. package/pipeline/skills/shared/external/hig-components-content/SKILL.md +69 -72
  489. package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +111 -0
  490. package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +77 -86
  491. package/pipeline/skills/shared/external/hig-components-layout/references/containers.md +98 -0
  492. package/pipeline/skills/shared/external/hig-components-status/SKILL.md +150 -78
  493. package/pipeline/skills/shared/external/hig-components-system/SKILL.md +76 -97
  494. package/pipeline/skills/shared/external/hig-components-system/references/surfaces.md +98 -0
  495. package/pipeline/skills/shared/external/hig-foundations/SKILL.md +48 -76
  496. package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +132 -0
  497. package/pipeline/skills/shared/external/hig-inputs/SKILL.md +147 -106
  498. package/pipeline/skills/shared/external/hig-patterns/SKILL.md +61 -77
  499. package/pipeline/skills/shared/external/hig-patterns/references/patterns.md +92 -0
  500. package/pipeline/skills/shared/external/hig-platforms/SKILL.md +147 -77
  501. package/pipeline/skills/shared/external/hig-technologies/SKILL.md +61 -121
  502. package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +108 -0
  503. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +2 -0
  504. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +1 -1
  505. package/pipeline/skills/shared/external/html-semantic/SKILL.md +3 -2
  506. package/pipeline/skills/shared/external/humanizer/SKILL.md +2 -1
  507. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +2 -0
  508. package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +2 -1
  509. package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +14 -2
  510. package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
  511. package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +4 -3
  512. package/pipeline/skills/shared/external/ios-localization/SKILL.md +8 -6
  513. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +2 -2
  514. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +11 -11
  515. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +2 -1
  516. package/pipeline/skills/shared/external/ios-networking/SKILL.md +2 -0
  517. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +2 -0
  518. package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +102 -193
  519. package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +103 -0
  520. package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -2
  521. package/pipeline/skills/shared/external/live-activities/evals/evals.json +2 -2
  522. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +7 -9
  523. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +3 -3
  524. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +2 -2
  525. package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +4 -3
  526. package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +5 -3
  527. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +2 -0
  528. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +1 -1
  529. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +2 -0
  530. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +1 -1
  531. package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +149 -46
  532. package/pipeline/skills/shared/external/monorepo-architect/references/patterns.md +70 -0
  533. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +2 -0
  534. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +1 -1
  535. package/pipeline/skills/shared/external/natural-language/SKILL.md +2 -0
  536. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +3 -2
  537. package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +91 -21
  538. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +247 -0
  539. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/testing-and-frameworks.md +57 -0
  540. package/pipeline/skills/shared/external/observability-engineer/SKILL.md +155 -232
  541. package/pipeline/skills/shared/external/observability-engineer/references/patterns.md +75 -0
  542. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +2 -0
  543. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +2 -2
  544. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +18 -18
  545. package/pipeline/skills/shared/external/pdfkit/SKILL.md +2 -1
  546. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +2 -0
  547. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +1 -1
  548. package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -0
  549. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +2 -1
  550. package/pipeline/skills/shared/external/push-notifications/SKILL.md +2 -0
  551. package/pipeline/skills/shared/external/python-patterns/SKILL.md +3 -2
  552. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +3 -2
  553. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +2 -2
  554. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +1 -1
  555. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +3 -2
  556. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +7 -7
  557. package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +69 -69
  558. package/pipeline/skills/shared/external/room-database/references/patterns.md +126 -126
  559. package/pipeline/skills/shared/external/search-first/SKILL.md +2 -1
  560. package/pipeline/skills/shared/external/security-review/SKILL.md +4 -3
  561. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +2 -2
  562. package/pipeline/skills/shared/external/signal-community/SKILL.md +1 -1
  563. package/pipeline/skills/shared/external/skill-creator/SKILL.md +2 -1
  564. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +2 -1
  565. package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +2 -0
  566. package/pipeline/skills/shared/external/storekit/SKILL.md +2 -0
  567. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +2 -0
  568. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +2 -1
  569. package/pipeline/skills/shared/external/swift-charts/SKILL.md +2 -1
  570. package/pipeline/skills/shared/external/swift-codable/SKILL.md +2 -0
  571. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +3 -1
  572. package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +5 -4
  573. package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -1
  574. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +2 -0
  575. package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -1
  576. package/pipeline/skills/shared/external/swift-security/SKILL.md +2 -1
  577. package/pipeline/skills/shared/external/swift-testing/SKILL.md +2 -0
  578. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -1
  579. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +10 -0
  580. package/pipeline/skills/shared/external/swiftdata/SKILL.md +2 -0
  581. package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -1
  582. package/pipeline/skills/shared/external/swiftlint/SKILL.md +2 -0
  583. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +2 -0
  584. package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +3 -1
  585. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +2 -0
  586. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +2 -0
  587. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +2 -0
  588. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +2 -0
  589. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +3 -1
  590. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +3 -1
  591. package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +5 -4
  592. package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -1
  593. package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +5 -4
  594. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +2 -0
  595. package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +4 -3
  596. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +2 -0
  597. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
  598. package/pipeline/skills/shared/external/testing-backend/SKILL.md +3 -2
  599. package/pipeline/skills/shared/external/tipkit/SKILL.md +2 -0
  600. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +3 -2
  601. package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -0
  602. package/pipeline/skills/shared/external/vue-composition/SKILL.md +3 -2
  603. package/pipeline/skills/shared/external/weatherkit/SKILL.md +2 -0
  604. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +3 -2
  605. package/pipeline/skills/shared/external/web-performance/SKILL.md +3 -2
  606. package/pipeline/skills/shared/external/web-testing/SKILL.md +3 -2
  607. package/pipeline/skills/shared/external/widgetkit/SKILL.md +2 -0
  608. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +1 -1
  609. package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +2 -0
  610. package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +2 -0
  611. package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +2 -0
  612. package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +2 -0
  613. package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +2 -0
  614. package/pipeline/skills/skills-index.md +40 -41
  615. package/docs/token-budget-history.md +0 -24
  616. package/pipeline/skills/shared/external/agentflow/SKILL.md +0 -199
  617. package/pipeline/skills/shared/external/android-ui-verification/SKILL.md +0 -66
  618. package/pipeline/skills/shared/external/api-security-best-practices/references/auth.md +0 -299
  619. package/pipeline/skills/shared/external/api-security-best-practices/references/input-validation.md +0 -255
  620. package/pipeline/skills/shared/external/api-security-best-practices/references/rate-limiting.md +0 -167
  621. package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +0 -116
  622. package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -216
@@ -15,6 +15,120 @@
15
15
 
16
16
  set -euo pipefail
17
17
 
18
+ # Every line a person reads resolves through the table below, so this script
19
+ # answers to the same language preference the rest of the pipeline answers to.
20
+ #
21
+ # The file is checked for before it is sourced, because a `.` of a path that is
22
+ # not there takes the shell with it and the later candidates are never reached.
23
+ for _ma_uf in \
24
+ "$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)/user-facing.sh" \
25
+ "$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../lib" 2>/dev/null && pwd)/user-facing.sh" \
26
+ "$HOME/.claude/lib/user-facing.sh" \
27
+ "$HOME/.copilot/lib/user-facing.sh" \
28
+ "$HOME/.codex/lib/user-facing.sh"; do
29
+ [ -f "$_ma_uf" ] || continue
30
+ # shellcheck source=/dev/null
31
+ . "$_ma_uf" 2>/dev/null || true
32
+ if command -v ma_output_lang >/dev/null 2>&1; then break; fi
33
+ done
34
+ unset _ma_uf
35
+ if ! command -v ma_output_lang >/dev/null 2>&1; then
36
+ echo "Error: user-facing.sh not found. Install: npx @mmerterden/multi-agent-pipeline install" >&2
37
+ exit 1
38
+ fi
39
+ OUT_LANG=$(ma_output_lang)
40
+
41
+ # One table, both languages on the same line, so a wording change cannot land
42
+ # on one of them. English is the default and the fallback.
43
+ #
44
+ # The overwrite and test prompts keep asking for `e` or `h` in either language:
45
+ # the same two letters answer SSH_SETUP_OVERWRITE and SSH_SETUP_TEST, and the
46
+ # comparisons below read them.
47
+ msg() { # $1 = key, $2.. = printf arguments
48
+ local key="$1" en tr fmt
49
+ shift
50
+ case "$key" in
51
+ title)
52
+ en='=== GitHub SSH Key Setup ==='
53
+ tr='=== GitHub SSH Key Kurulumu ===' ;;
54
+ ask-email)
55
+ en='Enter your GitHub email address: '
56
+ tr='GitHub e-posta adresinizi girin: ' ;;
57
+ email-empty)
58
+ en='Error: the email address cannot be empty.'
59
+ tr='Hata: E-posta adresi boş olamaz.' ;;
60
+ email-missing-unattended)
61
+ en='Error: MULTI_AGENT_UNATTENDED=1 and SSH_SETUP_EMAIL is not set.'
62
+ tr='Hata: MULTI_AGENT_UNATTENDED=1 ve SSH_SETUP_EMAIL tanımlı değil.' ;;
63
+ email-missing-headless)
64
+ en='Error: there is no terminal and SSH_SETUP_EMAIL is not set.'
65
+ tr='Hata: terminal yok ve SSH_SETUP_EMAIL tanımlı değil.' ;;
66
+ headless-hint)
67
+ en=' To run it headless: SSH_SETUP_EMAIL=you@example.com %s'
68
+ tr=' Başsız çalıştırmak için: SSH_SETUP_EMAIL=you@example.com %s' ;;
69
+ key-exists)
70
+ en='Warning: %s already exists.'
71
+ tr='Uyari: %s zaten mevcut.' ;;
72
+ ask-overwrite)
73
+ en='Overwrite it? (e = yes / h = no): '
74
+ tr='Üzerine yazmak istiyor musunuz? (e/h): ' ;;
75
+ cancelled)
76
+ en='Cancelled.'
77
+ tr='İşlem iptal edildi.' ;;
78
+ generating)
79
+ en='Generating the SSH key...'
80
+ tr='SSH key oluşturuluyor...' ;;
81
+ generated)
82
+ en='The SSH key was created.'
83
+ tr='SSH key başarıyla oluşturuldu!' ;;
84
+ config-updated)
85
+ en='SSH config updated.'
86
+ tr='SSH config güncellendi.' ;;
87
+ agent-add-failed)
88
+ en='[Warning: the key could not be added to ssh-agent - by hand: ssh-add %s]'
89
+ tr="[Uyari: anahtar ssh-agent'a eklenemedi - elle: ssh-add %s]" ;;
90
+ public-key-heading)
91
+ en=' Your public key (this is what goes into GitHub):'
92
+ tr=" Public key'iniz (aşağıdaki GitHub'a eklenecek):" ;;
93
+ clipboard-ok)
94
+ en='[Copied to the clipboard.]'
95
+ tr='[Otomatik olarak panoya kopyalandı!]' ;;
96
+ clipboard-none)
97
+ en='[Could not copy to the clipboard - copy the key above by hand]'
98
+ tr='[Panoya kopyalanamadı - yukarıdaki anahtarı manuel kopyalayın]' ;;
99
+ next-steps)
100
+ en='=== Next Steps ==='
101
+ tr='=== Sonraki Adımlar ===' ;;
102
+ next-step-1)
103
+ en='1. Go to https://github.com/settings/ssh/new'
104
+ tr='1. https://github.com/settings/ssh/new adresine gidin' ;;
105
+ next-step-2)
106
+ en="2. Give it a name in the 'Title' field (e.g. MacBook)"
107
+ tr="2. 'Title' alanına bir isim verin (ör: MacBook)" ;;
108
+ next-step-3)
109
+ en="3. Paste the copied key into the 'Key' field (Cmd+V)"
110
+ tr="3. 'Key' alanına kopyalanan key'i yapıştırın (Cmd+V)" ;;
111
+ next-step-4)
112
+ en="4. Click the 'Add SSH key' button"
113
+ tr="4. 'Add SSH key' butonuna tıklayın" ;;
114
+ ask-test)
115
+ en='Test the connection now that the key is on GitHub? (e = yes / h = no): '
116
+ tr="Key'i GitHub'a ekledikten sonra test etmek ister misiniz? (e/h): " ;;
117
+ testing)
118
+ en='Testing the GitHub connection...'
119
+ tr='GitHub bağlantısı test ediliyor...' ;;
120
+ finished)
121
+ en='Done.'
122
+ tr='Tamamlandı!' ;;
123
+ *)
124
+ printf 'github-ssh-setup: no message for %s\n' "$key" >&2
125
+ return 1 ;;
126
+ esac
127
+ [ "$OUT_LANG" = tr ] && fmt="$tr" || fmt="$en"
128
+ # shellcheck disable=SC2059
129
+ printf "$fmt\n" "$@"
130
+ }
131
+
18
132
  # Soruyu sor, ama yalnız soracak birisi varsa. Terminal yoksa env'deki cevabı
19
133
  # kullan; o da yoksa boş dön ve kararı çağırana bırak.
20
134
  ask() {
@@ -38,22 +152,22 @@ ask() {
38
152
  printf -v "$__var" '%s' "$reply"
39
153
  }
40
154
 
41
- echo "=== GitHub SSH Key Kurulumu ==="
155
+ msg title
42
156
  echo ""
43
157
 
44
158
  # E-posta adresi al
45
- ask "GitHub e-posta adresinizi girin: " "${SSH_SETUP_EMAIL:-}" EMAIL
159
+ ask "$(msg ask-email)" "${SSH_SETUP_EMAIL:-}" EMAIL
46
160
 
47
161
  if [ -z "$EMAIL" ]; then
48
162
  if [ -t 0 ] && [ "${MULTI_AGENT_UNATTENDED:-}" != "1" ]; then
49
- echo "Hata: E-posta adresi boş olamaz."
163
+ msg email-empty
50
164
  else
51
165
  if [ "${MULTI_AGENT_UNATTENDED:-}" = "1" ]; then
52
- echo "Hata: MULTI_AGENT_UNATTENDED=1 ve SSH_SETUP_EMAIL tanımlı değil." >&2
166
+ msg email-missing-unattended >&2
53
167
  else
54
- echo "Hata: terminal yok ve SSH_SETUP_EMAIL tanımlı değil." >&2
168
+ msg email-missing-headless >&2
55
169
  fi
56
- echo " Başsız çalıştırmak için: SSH_SETUP_EMAIL=you@example.com $0" >&2
170
+ msg headless-hint "$0" >&2
57
171
  fi
58
172
  exit 1
59
173
  fi
@@ -69,19 +183,19 @@ chmod 700 "$HOME/.ssh"
69
183
  # Mevcut key kontrolü
70
184
  if [ -f "$KEY_PATH" ]; then
71
185
  echo ""
72
- echo "Uyari: $KEY_PATH zaten mevcut."
186
+ msg key-exists "$KEY_PATH"
73
187
  # Varsayılan HAYIR. Başsız bir koşuda cevapsız kalan bir "üzerine yazayım
74
188
  # mı" sorusunun güvenli tarafı, var olan anahtarı korumaktır.
75
- ask "Üzerine yazmak istiyor musunuz? (e/h): " "${SSH_SETUP_OVERWRITE:-}" OVERWRITE
189
+ ask "$(msg ask-overwrite)" "${SSH_SETUP_OVERWRITE:-}" OVERWRITE
76
190
  if [ "$OVERWRITE" != "e" ]; then
77
- echo "İşlem iptal edildi."
191
+ msg cancelled
78
192
  exit 0
79
193
  fi
80
194
  fi
81
195
 
82
196
  # SSH key oluştur (Ed25519 - modern ve güvenli)
83
197
  echo ""
84
- echo "SSH key oluşturuluyor..."
198
+ msg generating
85
199
  # ssh-keygen var olan bir dosyayı görünce KENDİ "Overwrite (y/n)?" sorusunu
86
200
  # sorar - yani yukarıdaki onayı geçtikten sonra başsız koşu ikinci bir
87
201
  # soruda asılır. Onay zaten alındı; dosyayı önce kaldır.
@@ -89,13 +203,13 @@ rm -f "$KEY_PATH" "${KEY_PATH}.pub"
89
203
  ssh-keygen -t ed25519 -C "$EMAIL" -f "$KEY_PATH" -N "" -q
90
204
 
91
205
  echo ""
92
- echo "SSH key başarıyla oluşturuldu!"
206
+ msg generated
93
207
 
94
208
  # SSH agent'a ekle
95
209
  eval "$(ssh-agent -s)" > /dev/null 2>&1
96
210
 
97
- # SSH config ayarla (UseKeychain yalnızca macOS'ta geçerli bir seçenek;
98
- # Linux'ta ssh bilinmeyen seçenek diye config'i reddeder)
211
+ # SSH config ayarla (UseKeychain Apple'ın ssh'ına özgü bir seçenek; onu tanımayan
212
+ # bir ssh config'i bilinmeyen seçenek diye reddeder)
99
213
  SSH_CONFIG="$HOME/.ssh/config"
100
214
  USE_KEYCHAIN_LINE=""
101
215
  if [ "$(uname -s 2>/dev/null)" = "Darwin" ]; then
@@ -112,7 +226,7 @@ Host github.com
112
226
  ${USE_KEYCHAIN_LINE}
113
227
  EOF
114
228
  chmod 600 "$SSH_CONFIG"
115
- echo "SSH config güncellendi."
229
+ msg config-updated
116
230
  fi
117
231
 
118
232
  # Key'i agent'a ekle (macOS Keychain ile)
@@ -121,12 +235,12 @@ fi
121
235
  # göstermemek demek.
122
236
  ssh-add --apple-use-keychain "$KEY_PATH" 2>/dev/null \
123
237
  || ssh-add "$KEY_PATH" 2>/dev/null \
124
- || echo "[Uyari: anahtar ssh-agent'a eklenemedi - elle: ssh-add $KEY_PATH]"
238
+ || msg agent-add-failed "$KEY_PATH"
125
239
 
126
240
  # Public key'i göster ve kopyala
127
241
  echo ""
128
242
  echo "================================================"
129
- echo " Public key'iniz (aşağıdaki GitHub'a eklenecek):"
243
+ msg public-key-heading
130
244
  echo "================================================"
131
245
  echo ""
132
246
  cat "${KEY_PATH}.pub"
@@ -135,31 +249,28 @@ echo ""
135
249
  # Panoya kopyala
136
250
  if command -v pbcopy >/dev/null 2>&1; then
137
251
  pbcopy < "${KEY_PATH}.pub"
138
- echo "[Otomatik olarak panoya kopyalandı!]"
139
- elif command -v xclip >/dev/null 2>&1; then
140
- xclip -selection clipboard < "${KEY_PATH}.pub"
141
- echo "[Otomatik olarak panoya kopyalandı! (xclip)]"
252
+ msg clipboard-ok
142
253
  else
143
- echo "[Panoya kopyalanamadı - yukarıdaki anahtarı manuel kopyalayın]"
254
+ msg clipboard-none
144
255
  fi
145
256
 
146
257
  echo ""
147
- echo "=== Sonraki Adımlar ==="
148
- echo "1. https://github.com/settings/ssh/new adresine gidin"
149
- echo "2. 'Title' alanına bir isim verin (ör: MacBook)"
150
- echo "3. 'Key' alanına kopyalanan key'i yapıştırın (Cmd+V)"
151
- echo "4. 'Add SSH key' butonuna tıklayın"
258
+ msg next-steps
259
+ msg next-step-1
260
+ msg next-step-2
261
+ msg next-step-3
262
+ msg next-step-4
152
263
  echo ""
153
264
 
154
265
  # GitHub'a key eklendikten sonra test
155
- ask "Key'i GitHub'a ekledikten sonra test etmek ister misiniz? (e/h): " "${SSH_SETUP_TEST:-}" TEST
266
+ ask "$(msg ask-test)" "${SSH_SETUP_TEST:-}" TEST
156
267
  if [ "$TEST" = "e" ]; then
157
268
  echo ""
158
- echo "GitHub bağlantısı test ediliyor..."
269
+ msg testing
159
270
  # Bilinmeyen host anahtarı üçüncü bir interaktif soru demek; başsız
160
271
  # koşuda orada asılırdı.
161
272
  ssh -o StrictHostKeyChecking=accept-new -T git@github.com 2>&1 || true
162
273
  fi
163
274
 
164
275
  echo ""
165
- echo "Tamamlandı!"
276
+ msg finished
@@ -43,6 +43,7 @@ import { loadGraph, defaultGraphPath } from "./graph-query.mjs";
43
43
  import { findByName, affected } from "./graph-affected.mjs";
44
44
  import { runMain } from "../lib/fatal.mjs";
45
45
  import { invokedDirectly } from "../lib/invoked-directly.mjs";
46
+ import { hostCommand } from "../lib/user-facing.mjs";
46
47
 
47
48
  const DEFAULT_MAX_NODES = 25;
48
49
 
@@ -187,7 +188,9 @@ function main() {
187
188
  // Not an error to shout about: a repo with no graph yet simply has no
188
189
  // diagram, and the caller records the reason instead of drawing nothing and
189
190
  // calling it empty.
190
- console.error(`graph-mermaid: no code graph at ${graphPath} - run /multi-agent:graph first`);
191
+ console.error(
192
+ `graph-mermaid: no code graph at ${graphPath} - run ${hostCommand("graph", import.meta.dirname)} first`,
193
+ );
191
194
  process.exit(1);
192
195
  }
193
196
 
@@ -0,0 +1,236 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @file issues.mjs - the open items assigned to you, from Jira and GitHub,
4
+ * in one shape a picker or a client can render.
5
+ *
6
+ * `/multi-agent:jira` and `/multi-agent:issue` build this list in prose, one
7
+ * model call at a time. This is the deterministic producer of the same list:
8
+ *
9
+ * Jira jira-search.sh with the JQL the jira command uses
10
+ * (assignee=currentUser() AND resolution = EMPTY AND status not in
11
+ * (Done,Closed,Cancelled)), optionally narrowed by --project
12
+ * GitHub gh search issues --assignee=@me --state=open
13
+ *
14
+ * Every item is {key, summary, status, type, priority, source}. Nothing else
15
+ * from either API is copied through: no `self`, no `url`, no host, no avatar,
16
+ * no reporter. A summary is free text, so URLs, e-mail addresses and home
17
+ * paths inside it are replaced with a marker before it is printed.
18
+ *
19
+ * A source that fails does not fail the list. It is reported in `sources[]`
20
+ * with a fixed reason code - `not-onboarded`, `unavailable` or `failed` - and
21
+ * never with the tool's stderr, which can name a host.
22
+ *
23
+ * Nothing in the output is machine-specific, so `--redact` changes nothing;
24
+ * it is accepted so every contract output takes the same flag.
25
+ *
26
+ * Seams for tests: MA_JIRA_SEARCH (path to a jira-search.sh stand-in) and
27
+ * MA_GH_BIN (a gh stand-in).
28
+ *
29
+ * Usage:
30
+ * node issues.mjs --json [--redact] [--source jira|github|all] [--project KEY]... [--max N]
31
+ *
32
+ * Exit: 0 printed (including a source that failed), 2 usage error.
33
+ *
34
+ * @module pipeline/scripts/issues
35
+ */
36
+
37
+ import { spawnSync } from "node:child_process";
38
+ import { fileURLToPath } from "node:url";
39
+ import { scrub } from "./_redact.mjs";
40
+ import { runMain } from "../lib/fatal.mjs";
41
+ import { invokedDirectly } from "../lib/invoked-directly.mjs";
42
+
43
+ export { scrub };
44
+ export const CONTRACT_VERSION = "1.0.0";
45
+ const TIMEOUT_MS = 60000;
46
+
47
+ export const BASE_JQL =
48
+ "assignee=currentUser() AND resolution = EMPTY AND status not in (Done,Closed,Cancelled)";
49
+
50
+ /** Same precedence the jira command sorts by. */
51
+ const PRIORITY_RANK = {
52
+ blocker: 100,
53
+ critical: 90,
54
+ highest: 90,
55
+ high: 80,
56
+ medium: 50,
57
+ low: 30,
58
+ lowest: 10,
59
+ };
60
+ const STATUS_RANK = { "in progress": 3, "in review": 2, "to do": 1 };
61
+
62
+ export function jqlFor(projects = []) {
63
+ const keys = projects.filter((k) => /^[A-Z][A-Z0-9_]*$/.test(k));
64
+ return keys.length ? `${BASE_JQL} AND project in (${keys.join(",")})` : BASE_JQL;
65
+ }
66
+
67
+ /** Jira's search JSON to items. Throws on a body that is not a search result. */
68
+ export function jiraItems(json) {
69
+ if (!json || !Array.isArray(json.issues)) throw new Error("not a search result");
70
+ return json.issues
71
+ .filter((i) => i && typeof i.key === "string")
72
+ .map((i) => {
73
+ const f = i.fields ?? {};
74
+ return {
75
+ key: i.key,
76
+ summary: scrub(f.summary),
77
+ status: f.status?.name ?? null,
78
+ type: f.issuetype?.name ?? null,
79
+ priority: f.priority?.name ?? null,
80
+ source: "jira",
81
+ created: f.created ?? null,
82
+ };
83
+ });
84
+ }
85
+
86
+ /** `gh search issues --json` to items. */
87
+ export function githubItems(json) {
88
+ if (!Array.isArray(json)) throw new Error("not a search result");
89
+ return json
90
+ .filter((i) => i && Number.isInteger(i.number) && i.repository?.nameWithOwner)
91
+ .map((i) => {
92
+ const labels = (i.labels ?? []).map((l) => String(l?.name ?? "").toLowerCase());
93
+ return {
94
+ key: `${i.repository.nameWithOwner}#${i.number}`,
95
+ summary: scrub(i.title),
96
+ status: i.state ? String(i.state).toLowerCase() : "open",
97
+ type: labels.includes("bug") ? "bug" : "issue",
98
+ priority: null,
99
+ source: "github",
100
+ created: i.createdAt ?? null,
101
+ };
102
+ });
103
+ }
104
+
105
+ /** Priority first, then status, then newest - the jira command's order, for both sources. */
106
+ export function sortItems(items) {
107
+ const p = (i) => PRIORITY_RANK[String(i.priority ?? "").toLowerCase()] ?? 0;
108
+ const s = (i) => STATUS_RANK[String(i.status ?? "").toLowerCase()] ?? 0;
109
+ const c = (i) => Date.parse(i.created ?? "") || 0;
110
+ return [...items].sort((a, b) => p(b) - p(a) || s(b) - s(a) || c(b) - c(a));
111
+ }
112
+
113
+ function run(bin, args, env) {
114
+ return spawnSync(bin, args, { encoding: "utf8", timeout: TIMEOUT_MS, env });
115
+ }
116
+
117
+ export function fetchJira({ projects = [], max = 50, env = process.env } = {}) {
118
+ const script = env.MA_JIRA_SEARCH || fileURLToPath(new URL("./jira-search.sh", import.meta.url));
119
+ const r = run(
120
+ "bash",
121
+ [
122
+ script,
123
+ "--jql",
124
+ jqlFor(projects),
125
+ "--fields",
126
+ "key,summary,status,issuetype,priority,created",
127
+ "--max",
128
+ String(max),
129
+ ],
130
+ env,
131
+ );
132
+ if (r.error) return { ok: false, reason: "unavailable", items: [] };
133
+ if (r.status !== 0) {
134
+ const reason = /not onboarded|no preferences file/.test(r.stderr || "")
135
+ ? "not-onboarded"
136
+ : "failed";
137
+ return { ok: false, reason, items: [] };
138
+ }
139
+ try {
140
+ return { ok: true, items: jiraItems(JSON.parse(r.stdout)) };
141
+ } catch {
142
+ return { ok: false, reason: "failed", items: [] };
143
+ }
144
+ }
145
+
146
+ export function fetchGithub({ max = 50, env = process.env } = {}) {
147
+ const gh = env.MA_GH_BIN || "gh";
148
+ const r = run(
149
+ gh,
150
+ [
151
+ "search",
152
+ "issues",
153
+ "--assignee=@me",
154
+ "--state=open",
155
+ "--json",
156
+ "number,title,repository,labels,state,createdAt",
157
+ "--limit",
158
+ String(max),
159
+ ],
160
+ env,
161
+ );
162
+ if (r.error) return { ok: false, reason: "unavailable", items: [] };
163
+ if (r.status !== 0) return { ok: false, reason: "failed", items: [] };
164
+ try {
165
+ return { ok: true, items: githubItems(JSON.parse(r.stdout)) };
166
+ } catch {
167
+ return { ok: false, reason: "failed", items: [] };
168
+ }
169
+ }
170
+
171
+ /** The whole answer, as printed. */
172
+ export function collect({ source = "all", projects = [], max = 50, env = process.env } = {}) {
173
+ const sources = [];
174
+ let items = [];
175
+ const wanted = source === "all" ? ["jira", "github"] : [source];
176
+ for (const name of wanted) {
177
+ const res = name === "jira" ? fetchJira({ projects, max, env }) : fetchGithub({ max, env });
178
+ sources.push(
179
+ res.ok
180
+ ? { source: name, ok: true, count: res.items.length }
181
+ : { source: name, ok: false, count: 0, reason: res.reason },
182
+ );
183
+ items = items.concat(res.items);
184
+ }
185
+ return {
186
+ contractVersion: CONTRACT_VERSION,
187
+ items: sortItems(items).map(({ created: _created, ...rest }) => rest),
188
+ sources,
189
+ };
190
+ }
191
+
192
+ function main(argv) {
193
+ let json = false;
194
+ let source = "all";
195
+ let max = 50;
196
+ const projects = [];
197
+ for (let i = 0; i < argv.length; i++) {
198
+ const a = argv[i];
199
+ if (a === "--json") json = true;
200
+ else if (a === "--redact") continue;
201
+ else if (a === "--source") source = argv[++i];
202
+ else if (a === "--project") projects.push(argv[++i]);
203
+ else if (a === "--max") max = Number(argv[++i]);
204
+ else {
205
+ process.stderr.write(`issues: unknown argument ${a}\n`);
206
+ return 2;
207
+ }
208
+ }
209
+ if (!["jira", "github", "all"].includes(source)) {
210
+ process.stderr.write("issues: --source is jira, github or all\n");
211
+ return 2;
212
+ }
213
+ if (!Number.isInteger(max) || max < 1 || max > 200) {
214
+ process.stderr.write("issues: --max is a whole number from 1 to 200\n");
215
+ return 2;
216
+ }
217
+ const out = collect({ source, projects, max });
218
+ if (json) process.stdout.write(JSON.stringify(out, null, 2) + "\n");
219
+ else {
220
+ for (const i of out.items) {
221
+ process.stdout.write(
222
+ `[${i.priority ?? " - "}] ${i.key} - ${i.summary} (${i.status ?? "-"})\n`,
223
+ );
224
+ }
225
+ for (const s of out.sources.filter((x) => !x.ok)) {
226
+ process.stdout.write(`${s.source}: ${s.reason}\n`);
227
+ }
228
+ }
229
+ return 0;
230
+ }
231
+
232
+ if (invokedDirectly(import.meta.url)) {
233
+ runMain("issues", () => {
234
+ process.exitCode = main(process.argv.slice(2));
235
+ });
236
+ }
@@ -32,6 +32,10 @@ shift 2>/dev/null || true
32
32
 
33
33
  PREFS="$HOME/.claude/multi-agent-preferences.json"
34
34
 
35
+ _MA_JA_HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
36
+ # shellcheck source=/dev/null
37
+ if [ -f "$_MA_JA_HERE/../lib/user-facing.sh" ]; then . "$_MA_JA_HERE/../lib/user-facing.sh"; else . "$HOME/.claude/lib/user-facing.sh"; fi
38
+
35
39
  if [ -z "${JIRA_BASE:-}" ]; then
36
40
  JIRA_BASE=$(node -e '
37
41
  const fs=require("fs");
@@ -48,10 +52,10 @@ if [ -z "${JIRA_TOKEN:-}" ]; then
48
52
  try{const g=(JSON.parse(fs.readFileSync(process.argv[1],"utf8")).global||{});
49
53
  process.stdout.write((g.keychainMapping||{}).jira||"")}catch{process.stdout.write("")}
50
54
  ' "$PREFS" 2>/dev/null)
51
- [ -n "$KEY" ] || { echo "jira-attach: keychainMapping.jira is not set - onboard it via /multi-agent:setup" >&2; exit 2; }
55
+ [ -n "$KEY" ] || { echo "jira-attach: keychainMapping.jira is not set - onboard it via $(ma_command setup)" >&2; exit 2; }
52
56
  JIRA_TOKEN=$(bash "$HOME/.claude/lib/credential-store.sh" get "$KEY" 2>/dev/null)
53
57
  fi
54
- [ -n "${JIRA_TOKEN:-}" ] || { echo "jira-attach: no Jira token - onboard it via /multi-agent:setup" >&2; exit 2; }
58
+ [ -n "${JIRA_TOKEN:-}" ] || { echo "jira-attach: no Jira token - onboard it via $(ma_command setup)" >&2; exit 2; }
55
59
 
56
60
  RC=0
57
61
  for f in "$@"; do
@@ -5,7 +5,8 @@
5
5
  # A thin front door onto `jira_search` in lib/issue-fetcher.sh, which owns the
6
6
  # credential resolution, the host lookup and the rule that a token never reaches
7
7
  # argv. This file adds exactly two things that function does not do for itself:
8
- # it resolves the account from preferences, and it URL-encodes the JQL.
8
+ # it resolves the account from preferences, and it URL-encodes the query
9
+ # parameters (the JQL, the field list and the result cap).
9
10
  #
10
11
  # The encoding is not a detail. A JQL carrying a quoted label, a space or an
11
12
  # `=` reaches the server mangled otherwise, and the failure is a 400 that reads
@@ -66,5 +67,5 @@ command -v jira_search >/dev/null 2>&1 || {
66
67
  exit 1
67
68
  }
68
69
 
69
- ENCODED=$(printf '%s' "$JQL" | python3 -c 'import sys,urllib.parse; print(urllib.parse.quote(sys.stdin.read()))')
70
- jira_search "$ENCODED" "$FIELDS" "$MAXR"
70
+ urlq() { printf '%s' "$1" | python3 -c 'import sys,urllib.parse; print(urllib.parse.quote(sys.stdin.read(), safe=sys.argv[1]))' "$2"; }
71
+ jira_search "$(urlq "$JQL" /)" "$(urlq "$FIELDS" ,)" "$(urlq "$MAXR" "")"