@mmerterden/multi-agent-pipeline 11.1.0 → 11.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 (342) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +2 -2
  3. package/docs/FIGMA_PIPELINE.md +12 -25
  4. package/docs/architecture.md +3 -5
  5. package/docs/features.md +8 -8
  6. package/install/_common.mjs +9 -1
  7. package/install/_dev-only-files.mjs +0 -6
  8. package/install/claude.mjs +45 -18
  9. package/install/copilot.mjs +16 -14
  10. package/install/templates/copilot-instructions.md +3 -3
  11. package/package.json +1 -1
  12. package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
  13. package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
  14. package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
  15. package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
  16. package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
  17. package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
  18. package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
  19. package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
  20. package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
  21. package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
  22. package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
  23. package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
  24. package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
  25. package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
  26. package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
  27. package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
  28. package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
  29. package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
  30. package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
  31. package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
  32. package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
  33. package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
  34. package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
  35. package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
  36. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
  37. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
  38. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
  39. package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
  40. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
  41. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
  42. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
  43. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
  44. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
  45. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
  46. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
  47. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
  48. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
  49. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
  50. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
  51. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
  52. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
  53. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
  54. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
  55. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
  56. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
  57. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
  58. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
  59. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
  60. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
  61. package/pipeline/preferences-template.json +17 -1
  62. package/pipeline/rules/figma-pipeline.md +2 -2
  63. package/pipeline/schemas/prefs.schema.json +0 -34
  64. package/pipeline/scripts/README.md +1 -3
  65. package/pipeline/scripts/build-stack-plugins.mjs +1 -1
  66. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  67. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  68. package/pipeline/scripts/phase-banner.sh +2 -2
  69. package/pipeline/scripts/review-scope.mjs +94 -0
  70. package/pipeline/scripts/scan-agent-config.sh +2 -2
  71. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  72. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  73. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  74. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  75. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  76. package/pipeline/scripts/smoke-clarify.sh +1 -1
  77. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  78. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  79. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  80. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  81. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  82. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  83. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  84. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  85. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  86. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  87. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  88. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  89. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  90. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  91. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  92. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  93. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  94. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  95. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  96. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  97. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  98. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  99. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  100. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  101. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  102. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  103. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  104. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  105. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  106. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  107. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  108. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  109. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  110. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  111. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  112. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  113. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  114. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  115. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  116. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  117. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  118. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  119. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  120. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  121. package/pipeline/scripts/smoke-update-check.sh +1 -1
  122. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  123. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  124. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  125. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  126. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  127. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  128. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  129. package/pipeline/scripts/uninstall.mjs +2 -2
  130. package/pipeline/skills/.skill-manifest.json +40 -160
  131. package/pipeline/skills/.skills-index.json +21 -372
  132. package/pipeline/skills/shared/README.md +1 -1
  133. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  134. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  135. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  136. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  137. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  138. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  139. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  140. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  141. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  142. package/pipeline/skills/shared/external/backlog/BACKLOG.md +32 -0
  143. package/pipeline/skills/shared/external/backlog/SKILL.md +49 -0
  144. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  145. package/pipeline/skills/shared/external/skill-creator/SKILL.md +48 -0
  146. package/pipeline/skills/shared/external/skill-creator/audit.md +59 -0
  147. package/pipeline/skills/shared/external/skill-creator/checklist.md +32 -0
  148. package/pipeline/skills/shared/external/skill-creator/examples.md +65 -0
  149. package/pipeline/skills/shared/external/skill-creator/label-check.md +43 -0
  150. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +83 -0
  151. package/pipeline/skills/shared/external/skill-creator/template.md +67 -0
  152. package/pipeline/skills/skills-index.md +4 -43
  153. package/pipeline/commands/multi-agent/refactor.md +0 -188
  154. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  155. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  156. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  157. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  158. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  159. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  160. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  161. package/pipeline/skills/figma-android/README.md +0 -38
  162. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  163. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  164. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  165. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  166. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  167. package/pipeline/skills/figma-common/README.md +0 -64
  168. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  169. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  170. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  171. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  172. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  173. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  174. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  175. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  176. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  177. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  178. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  179. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  180. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  181. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  182. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  183. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  184. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  185. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  186. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  187. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  188. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  189. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  190. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  191. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  192. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  193. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  194. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  195. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  196. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  197. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  198. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  199. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  200. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  201. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  202. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  203. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  204. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  205. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  206. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  207. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  208. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  209. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  210. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  232. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  233. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  234. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  235. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  236. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  237. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  238. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  239. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  240. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  241. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  242. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  253. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  254. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  255. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  256. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  257. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  258. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  259. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  260. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  261. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  262. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  263. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  294. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  295. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  296. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  297. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  298. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  299. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  300. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  301. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  302. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  303. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  304. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  305. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  310. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  311. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  312. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  313. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  314. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  315. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  316. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  317. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  318. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  319. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  320. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  321. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  331. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  332. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  333. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  334. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  335. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  336. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  337. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  338. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  339. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  340. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  341. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  342. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
@@ -1,129 +0,0 @@
1
- ---
2
- name: figma-skip
3
- description: Marks a Figma component as skipped in the component registry and updates the Confluence status dashboard.
4
- user-invocable: true
5
- argument-hint: <figma-url> [--reason <reason>]
6
- allowed-tools: Bash, Read, Write, Edit, AskUserQuestion
7
- status: wip-v5
8
- sourced-from: upstream/figma-skip
9
- ---
10
-
11
- # /figma-skip - Mark Component as Skipped
12
-
13
- ## Parse Arguments
14
-
15
- `$ARGUMENTS` must contain a Figma URL. Optional `--reason` flag for skip reason.
16
-
17
- ```
18
- /figma-skip https://www.figma.com/design/{fileKey}/{fileName}?node-id={nodeId}
19
- /figma-skip https://www.figma.com/design/{fileKey}/{fileName}?node-id={nodeId} --reason "Cursor component, not needed on mobile"
20
- ```
21
-
22
- ### URL Parsing
23
-
24
- Extract from Figma URL:
25
- ```
26
- https://www.figma.com/design/{fileKey}/{fileName}?node-id={nodeId}
27
- ```
28
- Convert `-` to `:` in node-id (e.g., `3-9045` → `3:9045`).
29
- Derive filename: `{nodeId with : replaced by -}.json` (e.g., `3-9045.json`).
30
-
31
- ---
32
-
33
- ## Workflow
34
-
35
- ### STEP 1 - Resolve Component Name
36
-
37
- ```bash
38
- COMMON_PATH="${REPO_ROOT}/{repos.common.path}"
39
- cd "${COMMON_PATH}" && .build/debug/FigmaRegistryUtility lookup --node-id '{nodeId}'
40
- ```
41
-
42
- Extract `suggestedComponentName` from the output.
43
-
44
- If the registry file already exists at `Shared/Figma/Components/{nodeId}.json`:
45
- - Read it. If `"skip": true` already set → inform user "Already skipped" and exit.
46
- - If not skipped → ask user if they want to mark it as skipped (it may have implementation data).
47
-
48
- ### STEP 2 - Create/Update Registry Entry
49
-
50
- Write `Shared/Figma/Components/{nodeId}.json`:
51
-
52
- ```json
53
- {
54
- "nodeId": "{nodeId}",
55
- "componentName": {
56
- "ios": "{componentName}",
57
- "android": "{componentName}"
58
- },
59
- "skip": true,
60
- "codeConnect": {
61
- "ios": false,
62
- "android": false
63
- },
64
- "confluence": {
65
- "page": null,
66
- "ios": null,
67
- "android": null
68
- },
69
- "fileKey": "{fileKey}",
70
- "lastUpdated": "{YYYY-MM-DD}",
71
- "updatedBy": "ios",
72
- "testingIdentifiers": [],
73
- "localizationKeys": [],
74
- "accessibilityKeys": [],
75
- "analyticsEvents": []
76
- }
77
- ```
78
-
79
- ### STEP 3 - Regenerate Catalog
80
-
81
- ```bash
82
- cd "${COMMON_PATH}"
83
- .build/debug/FigmaRegistryUtility catalog
84
- ```
85
-
86
- ### STEP 4 - Update Confluence Status Dashboard
87
-
88
- ```bash
89
- python3 "${REPO_ROOT}/.instructions/figma/figma-to-swiftui/scripts/confluence-component-status.py"
90
- ```
91
-
92
- This updates the global Component Implementation Status dashboard on Confluence.
93
- Requires VPN. If VPN unavailable, inform user and skip.
94
-
95
- ### STEP 5 - Summary
96
-
97
- ```
98
- ## Skip Summary
99
-
100
- | Field | Value |
101
- |-------|-------|
102
- | Component | {componentName} |
103
- | Node ID | {nodeId} |
104
- | File Key | {fileKey} |
105
- | Registry | Shared/Figma/Components/{nodeId}.json |
106
- | Status | Skipped |
107
- | Reason | {reason or "Not specified"} |
108
- | Confluence | Updated / Skipped (no VPN) |
109
- ```
110
-
111
- ---
112
-
113
- ## Batch Mode
114
-
115
- Multiple URLs can be passed space-separated:
116
-
117
- ```
118
- /figma-skip https://...?node-id=3-9045 https://...?node-id=14-893 --reason "Cursor components"
119
- ```
120
-
121
- Process each URL sequentially. Run catalog regeneration and Confluence update once at the end (not per component).
122
-
123
- ---
124
-
125
- ## Error Handling
126
-
127
- - **FigmaRegistryUtility not built**: Run `swift build --product FigmaRegistryUtility` first.
128
- - **Node ID not found in registry**: Create new entry (the lookup may return a suggested name even for unknown nodes).
129
- - **VPN unavailable**: Skip Confluence update, inform user.
@@ -1,105 +0,0 @@
1
- ---
2
- name: figma-ui-patterns
3
- description: "Index of reusable SwiftUI UI-pattern guides (carousels, scroll tricks, animations, shaped views like scallops, pagers, parallax, gestures). Complementary to figma-to-swiftui and to vibe-coding: when a component needs a known UI pattern, pull the matching sub-guide from this skill instead of re-deriving the technique."
4
- user-invocable: true
5
- allowed-tools: Read, Glob, Grep
6
- status: wip-v5
7
- sourced-from: upstream/figma-ui-patterns
8
- ---
9
-
10
- # /figma-ui-patterns - UI Pattern Index
11
-
12
- ## Purpose
13
-
14
- Reusable SwiftUI UI-pattern guides, indexed in one place. Each pattern lives in its own sub-markdown under `patterns/` with a self-contained recipe - API shape, SwiftUI techniques, gotchas, and a minimal reference snippet.
15
-
16
- This skill is **complementary**, not gating:
17
- - During **spec-driven** work (figma-to-swiftui pipeline): phases reference patterns by slug when the architecture calls for one.
18
- - During **vibe coding**: invoke `/figma-ui-patterns` to browse the index, then open the matching sub-guide directly.
19
-
20
- ## Layout
21
-
22
- ```
23
- .instructions/figma/figma-ui-patterns/
24
- ├── SKILL.md ← this file (index + conventions)
25
- └── patterns/
26
- ├── carousel-pager.md ← e.g., paged horizontal carousel
27
- ├── scallop-view.md ← e.g., concave-notch shape
28
- ├── parallax-scroll.md
29
- ├── sticky-header.md
30
- ├── scroll-driven-animation.md
31
- └── <new-pattern>.md
32
- ```
33
-
34
- Each sub-guide is a single markdown file. No deeper nesting - flat under `patterns/`.
35
-
36
- ## How to Use
37
-
38
- ### As a reader (implementation time)
39
-
40
- 1. Run `/figma-ui-patterns` to see the index below.
41
- 2. Open `patterns/<slug>.md` for the pattern you need.
42
- 3. Follow the recipe. Sub-guides are self-contained - you should not need to hop between them.
43
-
44
- ### As an author (adding a new pattern)
45
-
46
- 1. Pick a slug: `kebab-case`, descriptive, noun-phrase (`carousel-pager`, `scallop-view`, not `how-to-carousel`).
47
- 2. Create `patterns/<slug>.md` using the template below.
48
- 3. Add a row to the **Index** section of this file.
49
- 4. Keep the guide under ~200 lines. If it grows beyond that, the pattern is probably two patterns - split it.
50
-
51
- ## Sub-guide Template
52
-
53
- Every `patterns/<slug>.md` MUST include these sections, in this order:
54
-
55
- ```markdown
56
- # <Human-Readable Pattern Name>
57
-
58
- ## When to Use
59
- One paragraph. What visual/behavioral signal in the Figma design means "this is the pattern." What it is NOT (to avoid false positives).
60
-
61
- ## Minimal API
62
- The smallest SwiftUI surface that implements this pattern. Signature + modifier chain, no business logic.
63
-
64
- ## Technique
65
- Step-by-step SwiftUI recipe. Which primitives (ScrollView, GeometryReader, TimelineView, matchedGeometryEffect, Canvas, Shape, etc.), in what composition, with what state.
66
-
67
- ## Gotchas
68
- Numbered list. Common mistakes, platform quirks (iOS version gates, accessibility regressions, performance cliffs).
69
-
70
- ## Reference Snippet
71
- One complete, compilable SwiftUI snippet - under 60 lines. Should run as-is in an Xcode preview.
72
-
73
- ## Related Patterns
74
- Bullet list of other slugs in this skill (or in `figma-price-integration`, `coreui-forms`, etc.) that commonly co-occur or contrast with this one.
75
- ```
76
-
77
- ## Authoring Rules
78
-
79
- 1. **Self-contained.** A reader opening one sub-guide should implement the pattern without hopping.
80
- 2. **SwiftUI-first.** Prefer pure SwiftUI techniques. Drop to UIViewRepresentable only when SwiftUI cannot express the behavior - and say so in Gotchas.
81
- 3. **Design-token aware.** Use project tokens (`.Text.textPrimary`, `.bodyRegular`, etc.) in snippets, not raw colors/fonts. Keeps examples on-brand.
82
- 4. **No component specifics.** A pattern is generic. If your recipe references `FlightCard` or `TripSummary`, you're writing a component guide, not a pattern guide - move it to the component's wiki instead.
83
- 5. **Validate names before committing.** For the pattern's human-readable title, run `/intent-idempotency-check` if the name isn't already obvious - UI pattern names are easy to get wrong.
84
-
85
- ## Integration with figma-to-swiftui
86
-
87
- - **Phase 3D (pattern detection):** when a scroll/motion/shape signal is detected, Phase 3D names the pattern by slug and cites `.instructions/figma/figma-ui-patterns/patterns/<slug>.md` for the implementation recipe.
88
- - **Phase 4B (view):** the view implementer reads the sub-guide, copies the Technique + Reference Snippet, and adapts to the component's Configuration.
89
- - **Phase 5 (testing):** snapshot + interaction tests should cover the pattern's key visual states; the sub-guide's Gotchas list is the checklist.
90
-
91
- ## Index
92
-
93
- <!-- When adding a pattern, append a row here. Keep alphabetical by slug. -->
94
-
95
- | Slug | Pattern | Status |
96
- |------|---------|--------|
97
- | `animated-gradient-border` | Snake/halo gradient stroke crawling the perimeter (promo/featured/premium cards) - angular-gradient stroke + animatable progress, corner-radius match, Reduce-Motion gate. Native-SwiftUI recipe; uses a project modifier if one ships. | Ready |
98
- | `carousel-banner` | Auto-advancing paged banner - single item visible, swipe/tap paging, `CarouselGroup` indicator, configurable interval + loop + pause-on-interaction. | Ready |
99
- | `scalloped-vstack` | Scalloped VStack (boarding-pass silhouette) - vertical card with semicircular edge cuts + dashed perforation line between segments. `CoreUI.ScallopedVStack`. | Ready |
100
-
101
- ## Anti-patterns
102
-
103
- - **Dumping ground.** This is not a place for "here's a snippet I wrote once." A pattern appears here only if it is **reusable across ≥2 real components**.
104
- - **Pattern-by-component.** If every component gets its own pattern file, the index stops being useful. Generalize first.
105
- - **Stale snippets.** If a sub-guide's snippet no longer compiles on the project's current Swift/SwiftUI version, fix or remove it - don't leave a broken recipe.
@@ -1,116 +0,0 @@
1
- # Animated Gradient Border (Snake / Halo Border)
2
-
3
- ## When to Use
4
-
5
- A component's frame has a stroked border whose color fades around the perimeter as if a **snake / halo of gradient light crawls around the edge** — continuous, looping, usually 2–4pt wide, with a radius matching the host's corner radius. Figma signals: promo banners, premium/featured cards, upsell surfaces, "lit up" states of otherwise calm cards; a spec named "animated / glowing / gradient border" or an endless-loop prototype on the stroke.
6
-
7
- **Not** this pattern when:
8
- - The border is a single, *static* color → `.stroke(...)` / `.overlay(RoundedRectangle().stroke(...))` directly.
9
- - The gradient is **on the fill**, not the stroke → that's an angular/linear gradient background.
10
- - It's a **state-transition** pulse (red on error) → `.animation(...)` with color interpolation, not a crawling gradient.
11
- - The stroke is **dashed/dotted** → different `StrokeStyle`; this pattern draws a solid stroke.
12
-
13
- ## Minimal API
14
-
15
- If the project already ships a gradient-border modifier (some design systems do — check `reference/ui` / the repo), use it and do NOT re-implement the math. Otherwise use this generic modifier shape:
16
-
17
- ```swift
18
- view
19
- .background(fill)
20
- .clipShape(RoundedRectangle(cornerRadius: radius))
21
- .animatedGradientBorder(
22
- colors: [start.opacity(0.6), middle, end.opacity(0.6)], // faded → solid → faded
23
- lineWidth: 2,
24
- cornerRadius: radius, // MUST match the host corner radius
25
- isAnimated: !reduceMotion,
26
- duration: 3.0
27
- )
28
- ```
29
-
30
- **Parameter intent:** 3 colors read best (faded→solid→faded); `lineWidth` 1–3pt from tokens; `cornerRadius` must equal the host's; `isAnimated:false` renders a static stroke; `duration` 1.5 urgent / 3 calm / 5+ ambient.
31
-
32
- ## Technique
33
-
34
- A self-contained native-SwiftUI recipe (no external package):
35
-
36
- 1. **Overlay, don't replace.** Draw the stroke in an `.overlay` of a `RoundedRectangle` so the host keeps its own background/fill.
37
- 2. **Angular gradient stroked along the shape.** `RoundedRectangle(cornerRadius:).stroke(AngularGradient(...), lineWidth:)`. The angular gradient's rotation is driven by an animated angle so the bright spot travels the perimeter.
38
- 3. **Animatable progress 0→1 drives the gradient's `angle`.** Animate the `AngularGradient(angle:)` on a **static** shape — `.degrees(360 * progress)` — so only the bright band travels. Do NOT `.rotationEffect` the stroked shape (that spins the whole rounded-rect). Start in `.onAppear` with `withAnimation(.linear(duration:).repeatForever(autoreverses:false)) { progress = 1 }`.
39
- 4. **Halo shape** = the gradient stop distribution (a bright band with faded shoulders); keep the fade symmetric for the "snake" read.
40
- 5. **Static shortcut.** `isAnimated == false` → render the same stroke frozen (or a single-color stroke).
41
-
42
- ## Gotchas
43
-
44
- 1. **Corner-radius mismatch is the #1 bug** — the host `cornerRadius` and the border `cornerRadius` must be equal, or the stroke floats off the rounded path.
45
- 2. **Apply the border after `.background`/`.clipShape`** so it overlays the current bounds and clips to the rounded shape.
46
- 3. **Reduce Motion:** read `@Environment(\.accessibilityReduceMotion)` at the call site and pass `isAnimated: !reduceMotion`. A perpetually animating border must respect it.
47
- 4. **Perf on long lists:** a forever-repeating animation per row costs frames and never pauses off-screen. Measure with Instruments before shipping it on `LazyVStack`/`List` rows.
48
- 5. **`onAppear` restarts on every reappear** — don't rely on animation state surviving a re-mount.
49
- 6. **`lineWidth` ≥ `cornerRadius`** produces blobby corners; keep `lineWidth < cornerRadius` for clean corners.
50
- 7. **Use semantic tokens, not raw hex**, so the border follows light/dark + theme (`reference/ui` + figma-config token patterns).
51
-
52
- ## Reference Snippet
53
-
54
- Drop-in preview — pure SwiftUI, no external dependency:
55
-
56
- ```swift
57
- import SwiftUI
58
-
59
- struct AnimatedGradientBorder: ViewModifier {
60
- var colors: [Color]
61
- var lineWidth: CGFloat = 2
62
- var cornerRadius: CGFloat = 12
63
- var isAnimated: Bool = true
64
- var duration: Double = 3.0
65
- @State private var progress: CGFloat = 0
66
-
67
- func body(content: Content) -> some View {
68
- // Animate the AngularGradient's `angle` on a STATIC shape — the bright
69
- // band sweeps the perimeter. (Do NOT rotationEffect the shape: that spins
70
- // the whole rounded-rect, corners and all.)
71
- content.overlay(
72
- RoundedRectangle(cornerRadius: cornerRadius)
73
- .stroke(
74
- AngularGradient(
75
- gradient: Gradient(colors: colors + [colors.first ?? .clear]),
76
- center: .center,
77
- angle: .degrees(isAnimated ? 360 * Double(progress) : 0)
78
- ),
79
- lineWidth: lineWidth
80
- )
81
- )
82
- .onAppear {
83
- guard isAnimated else { return }
84
- withAnimation(.linear(duration: duration).repeatForever(autoreverses: false)) {
85
- progress = 1
86
- }
87
- }
88
- }
89
- }
90
-
91
- extension View {
92
- func animatedGradientBorder(colors: [Color], lineWidth: CGFloat = 2,
93
- cornerRadius: CGFloat = 12, isAnimated: Bool = true,
94
- duration: Double = 3.0) -> some View {
95
- modifier(AnimatedGradientBorder(colors: colors, lineWidth: lineWidth,
96
- cornerRadius: cornerRadius, isAnimated: isAnimated,
97
- duration: duration))
98
- }
99
- }
100
-
101
- #Preview {
102
- Text("Featured")
103
- .padding(16)
104
- .frame(maxWidth: .infinity, alignment: .leading)
105
- .background(Color(.systemBackground))
106
- .clipShape(RoundedRectangle(cornerRadius: 12))
107
- .animatedGradientBorder(colors: [.blue.opacity(0.6), .blue, .blue.opacity(0.6)],
108
- cornerRadius: 12)
109
- .padding()
110
- }
111
- ```
112
-
113
- ## Related Patterns
114
-
115
- - `carousel-banner` — promo banners often pair an auto-advancing pager with this border on the active card.
116
- - Price callouts — premium-price surfaces sit inside a card wearing this border; compose it at the card level, not on the price view (see `reference/ui` / `figma-price-integration`).
@@ -1,274 +0,0 @@
1
- ---
2
- name: figma-utility
3
- description: "On-demand Figma data utility. Fetch screenshots, metadata, properties, tokens, design context, Code Connect mappings, node data, component lists, styles, file summaries, and auth status from Figma via REST API and MCP."
4
- user-invocable: true
5
- argument-hint: screenshot <url> [--output path] | metadata <url> | properties <url> | tokens <url> | context <url> | code-connect <url> | node <url> | components <url> | styles <url> | file <url> | whoami | reset-branches
6
- allowed-tools: Bash, Read, Write, Glob, Grep, AskUserQuestion
7
- status: wip-v5
8
- sourced-from: upstream/figma-utility
9
- ---
10
-
11
- # /figma-utility - On-Demand Figma Data Utility
12
-
13
- ## Purpose
14
-
15
- Standalone utility for querying Figma data on demand. Exposes Figma REST API and MCP capabilities as simple sub-commands. Does **not** modify any project files or affect other skills.
16
-
17
- This is a **read-only data tool** - it fetches and displays Figma data. It does NOT implement, commit, or modify code.
18
-
19
- ## Parameters
20
-
21
- | Parameter | Required | Description |
22
- |-----------|----------|-------------|
23
- | Sub-command | Yes | One of: `screenshot`, `metadata`, `properties`, `tokens`, `context`, `code-connect`, `node`, `components`, `styles`, `file`, `whoami`, `reset-branches` |
24
- | Figma URL | Yes (except `whoami`) | `https://www.figma.com/design/{fileKey}/...?node-id={nodeId}` |
25
- | `--output` | No | Save output to a file path |
26
- | `--scale` | No | Screenshot scale 1-4 (default: 2) |
27
- | `--depth` | No | Depth limit for `node` and `file` commands |
28
-
29
- ```
30
- /figma-utility screenshot https://www.figma.com/design/abc123/?node-id=123-456
31
- /figma-utility screenshot https://www.figma.com/design/abc123/?node-id=123-456 --output /tmp/shot.png
32
- /figma-utility metadata https://www.figma.com/design/abc123/?node-id=123-456
33
- /figma-utility properties https://www.figma.com/design/abc123/?node-id=123-456
34
- /figma-utility tokens https://www.figma.com/design/abc123/?node-id=123-456
35
- /figma-utility context https://www.figma.com/design/abc123/?node-id=123-456
36
- /figma-utility code-connect https://www.figma.com/design/abc123/?node-id=123-456
37
- /figma-utility node https://www.figma.com/design/abc123/?node-id=123-456 --depth 2
38
- /figma-utility components https://www.figma.com/design/abc123/
39
- /figma-utility styles https://www.figma.com/design/abc123/
40
- /figma-utility file https://www.figma.com/design/abc123/ --depth 1
41
- /figma-utility whoami
42
- ```
43
-
44
- ---
45
-
46
- ## Parse Arguments
47
-
48
- 1. Extract the **sub-command** (first argument after `/figma-utility`).
49
- 2. Extract the **Figma URL** (if provided).
50
- 3. Extract any **flags**: `--output <path>`, `--scale <N>`, `--depth <N>`.
51
-
52
- ### URL Parsing
53
-
54
- ```
55
- https://www.figma.com/design/{fileKey}/{fileName}?node-id={nodeId}
56
- ```
57
- Convert `-` to `:` in node-id (e.g., `123-456` -> `123:456`).
58
-
59
- ---
60
-
61
- ## Constants
62
-
63
- ```bash
64
- REPO_ROOT="$(git rev-parse --show-toplevel)"
65
- SCRIPT="${REPO_ROOT}/.instructions/figma/figma-utility/scripts/figma-utility.py"
66
- ```
67
-
68
- ---
69
-
70
- ## Sub-Command Reference
71
-
72
- ### screenshot
73
- Get a PNG screenshot of a Figma node.
74
- - **Source:** REST API (primary) -> MCP (fallback)
75
- - **Requires:** fileKey + nodeId
76
- - **Options:** `--output <path>`, `--scale 1|2|3|4`
77
-
78
- ### metadata
79
- Get layer hierarchy as XML for a node.
80
- - **Source:** MCP only (`get_metadata`)
81
- - **Requires:** fileKey + nodeId
82
- - **Options:** `--output <path>`
83
-
84
- ### properties
85
- Get component properties, variant axes, types, and defaults.
86
- - **Source:** REST API (`/files/{key}/nodes?ids={nodeId}`)
87
- - **Requires:** fileKey + nodeId
88
- - **Options:** `--output <path>`
89
-
90
- ### tokens
91
- Get design tokens / variable definitions for a node.
92
- - **Source:** MCP (primary, `get_variable_defs`) -> REST API fallback
93
- - **Requires:** fileKey + nodeId
94
- - **Options:** `--output <path>`
95
-
96
- ### context
97
- Get design context (generated reference code) for a node.
98
- - **Source:** MCP only (`get_design_context`)
99
- - **Requires:** fileKey + nodeId
100
- - **Options:** `--output <path>`
101
-
102
- ### code-connect
103
- Get Code Connect source mappings for a node.
104
- - **Source:** MCP only (`get_code_connect_map`)
105
- - **Requires:** fileKey + nodeId
106
- - **Options:** `--output <path>`
107
-
108
- ### node
109
- Get raw node data from Figma REST API.
110
- - **Source:** REST API (`/files/{key}/nodes?ids={nodeId}`)
111
- - **Requires:** fileKey + nodeId
112
- - **Options:** `--output <path>`, `--depth <N>`
113
-
114
- ### components
115
- List all components in a Figma file.
116
- - **Source:** REST API (`/files/{key}/components`)
117
- - **Requires:** fileKey only (nodeId not needed)
118
- - **Options:** `--output <path>`
119
-
120
- ### styles
121
- Get all styles in a Figma file.
122
- - **Source:** REST API (`/files/{key}/styles`)
123
- - **Requires:** fileKey only (nodeId not needed)
124
- - **Options:** `--output <path>`
125
-
126
- ### file
127
- Get file summary: pages, last modified, version.
128
- - **Source:** REST API (`/files/{key}`)
129
- - **Requires:** fileKey only (nodeId not needed)
130
- - **Options:** `--output <path>` (saves full tree), `--depth <N>`
131
-
132
- ### whoami
133
- Check MCP authentication status.
134
- - **Source:** MCP (`whoami` on remote, connection check on local)
135
- - **Requires:** Nothing
136
-
137
- ### reset-branches
138
- Reset all repo branches (main + submodules) to their remote defaults. Discards local changes.
139
- - **Source:** Git
140
- - **Requires:** Nothing
141
- - **Options:** None
142
-
143
- **IMPORTANT - run as a single Bash call.** `REPO_ROOT` must be resolved once before any `cd` into submodules; if split into separate Bash calls, `git rev-parse --show-toplevel` inside a submodule returns the submodule root, not the main repo.
144
-
145
- ```bash
146
- REPO_ROOT="$(git rev-parse --show-toplevel)" && \
147
- cd "${REPO_ROOT}" && git checkout develop && git fetch origin && git reset --hard origin/develop && \
148
- cd "${REPO_ROOT}/{repos.common.path}" && \
149
- (git stash -u 2>/dev/null || true) && git checkout iteration/develop && git fetch origin && git reset --hard origin/iteration/develop && \
150
- cd "${REPO_ROOT}/{repos.components.path}" && \
151
- (git stash -u 2>/dev/null || true) && git checkout iteration/develop && git fetch origin && git reset --hard origin/iteration/develop
152
- ```
153
-
154
- **Output Format:**
155
- ```
156
- Branches reset to remote:
157
- figma: develop → origin/develop ({sha})
158
- common: iteration/develop → origin/iteration/develop ({sha})
159
- uicomponents: iteration/develop → origin/iteration/develop ({sha})
160
- ```
161
-
162
- ---
163
-
164
- ## Execution
165
-
166
- Run the Python script. Build the command from parsed arguments:
167
-
168
- ```bash
169
- python3 "${SCRIPT}" <sub-command> \
170
- --url "<figma-url>" \
171
- [--output "<path>"] \
172
- [--scale <N>] \
173
- [--depth <N>]
174
- ```
175
-
176
- ### Examples
177
-
178
- ```bash
179
- # Screenshot with output
180
- python3 "${SCRIPT}" screenshot --url "https://www.figma.com/design/abc/File?node-id=123-456" --output /tmp/screenshot.png
181
-
182
- # Metadata to stdout
183
- python3 "${SCRIPT}" metadata --url "https://www.figma.com/design/abc/File?node-id=123-456"
184
-
185
- # Properties saved to file
186
- python3 "${SCRIPT}" properties --url "https://www.figma.com/design/abc/File?node-id=123-456" --output /tmp/props.json
187
-
188
- # File summary with depth limit
189
- python3 "${SCRIPT}" file --url "https://www.figma.com/design/abc/File" --depth 1
190
-
191
- # Auth check
192
- python3 "${SCRIPT}" whoami
193
- ```
194
-
195
- ---
196
-
197
- ## Output Formatting
198
-
199
- After the script runs:
200
-
201
- 1. **JSON output:** Pretty-print the key fields to the user in a readable format.
202
- 2. **XML output** (metadata): Show it as a code block.
203
- 3. **Large output** (context, node): Summarize key points, suggest `--output` if not used.
204
- 4. **Errors:** Show the error message and hint clearly.
205
-
206
- ### Screenshot Output Format
207
- ```
208
- Screenshot captured for node {nodeId}
209
- Source: {rest-api | mcp-local | mcp-remote}
210
- Saved: {output_path} (if --output used)
211
- URL: {url} (if REST API, no --output)
212
- ```
213
-
214
- ### Properties Output Format
215
- ```
216
- Component: {name} ({type})
217
- Variants: {variantCount}
218
- Properties ({propertyCount}):
219
- - {propName}: {type} = {defaultValue} [options: ...]
220
- - ...
221
- ```
222
-
223
- ---
224
-
225
- ## Data Source Matrix
226
-
227
- | Command | REST API | MCP Local | MCP Remote |
228
- |---------|----------|-----------|------------|
229
- | screenshot | primary | fallback | fallback |
230
- | metadata | - | primary | fallback |
231
- | properties | primary | - | - |
232
- | tokens | fallback | primary | fallback |
233
- | context | - | primary | fallback |
234
- | code-connect | - | primary | fallback |
235
- | node | primary | - | - |
236
- | components | primary | - | - |
237
- | styles | primary | - | - |
238
- | file | primary | - | - |
239
- | whoami | - | connection check | whoami call |
240
-
241
- ---
242
-
243
- ## Token Resolution
244
-
245
- Tokens are resolved automatically by the script:
246
-
247
- 1. **REST API token:** `--figma-token` CLI arg > macOS Keychain `FIGMA_ACCESS_TOKEN`
248
- 2. **MCP token:** `--mcp-token` CLI arg > Keychain `FIGMA_MCP_TOKEN` > Claude Code credentials
249
-
250
- If no tokens are found, the script reports what's missing and suggests running `/figma-setup`.
251
-
252
- ---
253
-
254
- ## Error Handling
255
-
256
- | Error | Action |
257
- |-------|--------|
258
- | No Figma URL provided | Ask user for URL |
259
- | Invalid sub-command | Show available commands |
260
- | MCP unavailable (for MCP-only commands) | Report error, suggest Figma Desktop or remote token |
261
- | REST API 403 | Report token issue, suggest /figma-setup |
262
- | REST API 404 | Report file/node not found |
263
- | No tokens found | Suggest /figma-setup |
264
-
265
- ---
266
-
267
- ## Independence
268
-
269
- This skill is **completely independent** from other Figma skills. It:
270
- - Has its own script (`figma-utility.py`) - no shared imports
271
- - Does not read or write implementation artifacts
272
- - Does not modify the component registry
273
- - Does not create branches or commits (except `reset-branches` which resets to remote)
274
- - Can be used alongside any other skill without conflict