@mmerterden/multi-agent-pipeline 11.2.0 → 11.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 (335) hide show
  1. package/CHANGELOG.md +68 -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/_dev-only-files.mjs +0 -6
  7. package/install/claude.mjs +39 -17
  8. package/install/copilot.mjs +22 -16
  9. package/install/templates/copilot-instructions.md +3 -3
  10. package/package.json +1 -1
  11. package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
  12. package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
  13. package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
  14. package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
  15. package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
  16. package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
  17. package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
  18. package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
  19. package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
  20. package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
  21. package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
  22. package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
  23. package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
  24. package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
  25. package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
  26. package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
  27. package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
  28. package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
  29. package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
  30. package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
  31. package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
  32. package/pipeline/lib/credential-store.sh +8 -4
  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-skills-index.mjs +3 -6
  66. package/pipeline/scripts/eval-mine-corpus.mjs +187 -0
  67. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  68. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  69. package/pipeline/scripts/lint-skills.mjs +26 -1
  70. package/pipeline/scripts/phase-banner.sh +2 -2
  71. package/pipeline/scripts/review-scope.mjs +94 -0
  72. package/pipeline/scripts/scan-agent-config.sh +2 -2
  73. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  74. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  75. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  76. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  77. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  78. package/pipeline/scripts/smoke-clarify.sh +1 -1
  79. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  80. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  81. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  82. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  83. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  84. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  85. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  86. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  87. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  88. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  89. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  90. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  91. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  92. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  93. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  94. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  95. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  96. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  97. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  98. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  99. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  100. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  101. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  102. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  103. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  104. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  105. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  106. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  107. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  108. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  109. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  110. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  111. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  112. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  113. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  114. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  115. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  116. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  117. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  118. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  119. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  120. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  121. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  122. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  123. package/pipeline/scripts/smoke-update-check.sh +1 -1
  124. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  125. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  126. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  127. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  128. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  129. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  130. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  131. package/pipeline/scripts/uninstall.mjs +17 -6
  132. package/pipeline/skills/.skill-manifest.json +40 -160
  133. package/pipeline/skills/.skills-index.json +3 -373
  134. package/pipeline/skills/shared/README.md +1 -1
  135. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  136. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  137. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  138. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  139. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  140. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  141. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  142. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  143. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  144. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  145. package/pipeline/skills/skills-index.md +3 -44
  146. package/pipeline/commands/multi-agent/refactor.md +0 -188
  147. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  148. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  149. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  150. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  151. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  152. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  153. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  154. package/pipeline/skills/figma-android/README.md +0 -38
  155. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  156. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  157. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  158. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  159. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  160. package/pipeline/skills/figma-common/README.md +0 -64
  161. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  162. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  163. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  164. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  165. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  166. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  167. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  168. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  169. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  170. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  171. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  172. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  173. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  174. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  175. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  176. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  177. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  178. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  179. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  180. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  181. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  182. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  183. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  184. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  185. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  186. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  187. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  188. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  189. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  190. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  191. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  192. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  193. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  194. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  195. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  196. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  197. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  198. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  199. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  200. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  201. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  202. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  203. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  204. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  205. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  206. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  207. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  208. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  209. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  210. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  232. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  233. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  234. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  235. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  236. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  237. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  238. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  239. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  240. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  241. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  242. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  253. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  254. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  255. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  256. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  257. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  258. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  259. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  260. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  261. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  262. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  263. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  294. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  295. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  296. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  297. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  298. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  299. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  300. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  301. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  302. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  303. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  304. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  305. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  310. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  311. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  312. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  313. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  314. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  315. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  316. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  317. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  318. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  319. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  320. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  321. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  331. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  332. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  333. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  334. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  335. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
@@ -1,531 +0,0 @@
1
- # CODE CONNECT REFERENCE (SwiftUI)
2
-
3
- ## 1. SETUP
4
-
5
- ### 1.1 Prerequisites
6
- - Swift 6.0+ (Xcode 16.0+)
7
- - Node.js 18+
8
- - Figma Access Token with scopes: file_content:read, code_connect:write
9
- - PATs capped at 90-day expiry
10
-
11
- ### 1.2 CLI Installation
12
- Two options:
13
- - Global: `npm install --global @figma/code-connect@latest` then `figma connect <cmd>`
14
- - No-install (npx): `npx @figma/code-connect@latest connect <cmd>` - recommended for CI/CD and machines without global install
15
- - Local dependency: if `@figma/code-connect` is a package dependency, just use `npx figma connect <cmd>` from the package root
16
-
17
- Current installed version: 1.3.12 (latest available: 1.4.1)
18
-
19
- ### 1.3 SPM Dependency
20
- ```swift
21
- .package(url: "https://github.com/figma/code-connect", from: "1.2.0")
22
- ```
23
- Product: "Figma" library - provides property wrappers only. CLI is npm-based, NOT from SPM.
24
-
25
- ### 1.4 Configuration (figma.config.json)
26
- ```json
27
- {
28
- "codeConnect": {
29
- "parser": "swift",
30
- "include": ["Sources/**/*.figma.swift"],
31
- "exclude": ["Tests/**", ".build/**"],
32
- "swiftPackagePath": "./Package.swift",
33
- "sourcePackagesPath": "/path/to/DerivedData/SourcePackages"
34
- }
35
- }
36
- ```
37
- Note: sourcePackagesPath added in 1.3.5, optional. language field added in 1.3.13.
38
-
39
- ### 1.5 Multi-Package Setup
40
- When `.figma.swift` files live in a package that doesn't directly depend on the Figma SDK:
41
- 1. Point `swiftPackagePath` to the package that HAS the Figma dependency:
42
- ```json
43
- { "swiftPackagePath": "../ExternalPackages/Package.swift" }
44
- ```
45
- 2. Add `exclude: ["CodeConnect"]` to the target in `Package.swift` so `.figma.swift` files don't break compilation (the target doesn't import Figma):
46
- ```swift
47
- .target(name: "UIAssets", path: "iOS/Sources/UIAssets", exclude: ["CodeConnect"])
48
- ```
49
- 3. Set `include` to match the CodeConnect directory:
50
- ```json
51
- { "include": ["iOS/Sources/UIAssets/CodeConnect/**/*.figma.swift"] }
52
- ```
53
-
54
- ## 2. FILE FORMAT
55
-
56
- ### 2.1 Naming
57
- | Item | Format |
58
- |------|--------|
59
- | File | `<ComponentName>.figma.swift` |
60
- | Struct | `<ComponentName>FigmaConnect` |
61
-
62
- ### 2.2 Location
63
- ```
64
- Component/
65
- ├── Component.swift
66
- ├── Component.figma.swift
67
- └── FIGMA.md
68
- ```
69
-
70
- ### 2.3 Template - Static (No Figma Properties)
71
- ```swift
72
- import Figma
73
- import SwiftUI
74
-
75
- struct ComponentNameFigmaConnect: FigmaConnect {
76
- let component = ComponentName.self
77
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
78
-
79
- var body: some View {
80
- ComponentName(title: "Static Title", isEnabled: true)
81
- }
82
- }
83
- ```
84
-
85
- ### 2.4 Template - Mapped Properties
86
- ```swift
87
- import Figma
88
- import SwiftUI
89
-
90
- struct ComponentNameFigmaConnect: FigmaConnect {
91
- let component = ComponentName.self
92
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
93
-
94
- @FigmaString("Label")
95
- var label: String = "Default"
96
-
97
- @FigmaEnum("Size", mapping: [
98
- "Small": ComponentSize.small,
99
- "Medium": ComponentSize.medium,
100
- "Large": ComponentSize.large
101
- ])
102
- var size: ComponentSize = .medium
103
-
104
- @FigmaBoolean("Disabled", hideDefault: true)
105
- var disabled: Bool = false
106
-
107
- var body: some View {
108
- ComponentName(label: label)
109
- .size(size)
110
- .disabled(disabled)
111
- }
112
- }
113
- ```
114
-
115
- ### 2.5 Template - Multi-Variant (string enum)
116
- ```swift
117
- struct PrimaryButtonFigmaConnect: FigmaConnect {
118
- let component = Button.self
119
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
120
- let variant = ["Type": "Primary"]
121
- var body: some View { Button("Label", style: .primary) }
122
- }
123
-
124
- struct SecondaryButtonFigmaConnect: FigmaConnect {
125
- let component = Button.self
126
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
127
- let variant = ["Type": "Secondary"]
128
- var body: some View { Button("Label", style: .secondary) }
129
- }
130
- ```
131
-
132
- ### 2.6 Template - Multi-Variant (boolean gate)
133
- Use a computed `var variant` property when matching on a boolean toggle (e.g., "Label" on/off):
134
- ```swift
135
- // Default struct (Label = true, the default)
136
- struct LabelBadgeFigmaConnect: FigmaConnect {
137
- let component = LabelBadge.self
138
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
139
- // no variant → matches when Label is true (default)
140
- var body: some View { LabelBadge { config in config.text(text) } }
141
- }
142
-
143
- // Icon-only struct (Label = false)
144
- struct LabelBadgeIconOnlyFigmaConnect: FigmaConnect {
145
- let component = LabelBadge.self
146
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
147
- var variant: [String: Any]? { ["Label": false] }
148
- var body: some View { LabelBadge { config in config.leftIcon(leftIcon) } }
149
- }
150
- ```
151
- Figma shows the most specific matching struct. When "Label" is toggled off, the icon-only struct renders.
152
-
153
- ### 2.7 Template - Icon/Symbol (no component)
154
- For simple icon nodes without component properties - no `let component`, no property wrappers:
155
- ```swift
156
- struct PlusCircleFillIconConnect: FigmaConnect {
157
- let figmaNodeUrl = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
158
- var body: some View { Image.plusCircleFill }
159
- }
160
- ```
161
- Used for bulk icon Code Connect. See `generate_icons.py` in the configuration package for batch generation.
162
-
163
- ## 3. PROPERTY WRAPPERS
164
-
165
- | Wrapper | Figma Type | Swift Type | Example |
166
- |---------|-----------|------------|---------|
167
- | `@FigmaString("Name")` | TEXT | String | `@FigmaString("Label") var label: String = "Default"` |
168
- | `@FigmaEnum("Name", mapping: [...])` | VARIANT | Enum | `@FigmaEnum("Size", mapping: ["S": .small]) var size` |
169
- | `@FigmaBoolean("Name")` | BOOLEAN | Bool / Any | `@FigmaBoolean("Disabled") var disabled: Bool = false` |
170
- | `@FigmaInstance("Name")` | INSTANCE_SWAP | View | `@FigmaInstance("Icon") var icon: AnyView?` |
171
- | `@FigmaChildren(layers: [...])` | Nested | [View] | `@FigmaChildren(layers: ["Row"]) var children` |
172
-
173
- ### hideDefault
174
- Omits parameter from code snippet when at default value:
175
- `@FigmaBoolean("Disabled", hideDefault: true) var disabled: Bool = false`
176
-
177
- ### @FigmaBoolean with mapping
178
- Maps boolean to non-Bool types (e.g., optional Image). Use when a boolean toggle controls presence of a non-boolean value:
179
- ```swift
180
- @FigmaBoolean("Left Icon", mapping: [true: Image(systemName: "plus.circle"), false: nil], hideDefault: true)
181
- var leftIcon: Image? = nil
182
- ```
183
- When `hideDefault: true` and value is `nil` (default), the `.leftIcon(...)` line is omitted from the snippet entirely.
184
-
185
- **IMPORTANT - hideDefault default value trap:** When using `hideDefault: true` with a mapping, the **default value** determines which mapped result gets hidden. Set the default to the value you want HIDDEN (typically `nil` for optionals):
186
-
187
- ```swift
188
- // CORRECT - default=nil: Text=true shows .initials("BT"), Text=false hides it
189
- @FigmaBoolean("Text", mapping: [true: "BT", false: nil], hideDefault: true)
190
- var initials: String? = nil
191
-
192
- // WRONG - default="BT": Text=true HIDES .initials("BT"), Text=false shows .initials(nil)
193
- @FigmaBoolean("Text", mapping: [true: "BT", false: nil], hideDefault: true)
194
- var initials: String? = "BT" // ← "BT" matches default, so it's hidden!
195
- ```
196
-
197
- ### @FigmaEnum - prefer implicit shorthand
198
- Use `.success` instead of `LabelBadgeConfiguration.LabelBadgeState.success` in mappings. The parser captures the expression as-is via `trimmedDescription`, so shorter values produce cleaner snippets:
199
- ```swift
200
- // GOOD - clean snippet output
201
- @FigmaEnum("State", mapping: ["Success": .success, "Warning": .warning])
202
-
203
- // BAD - verbose snippet output
204
- @FigmaEnum("State", mapping: ["Success": LabelBadgeConfiguration.LabelBadgeState.success])
205
- ```
206
-
207
- ### @FigmaInstance
208
- Maps instance-swap properties to render the swapped component's Code Connect inline:
209
- ```swift
210
- @FigmaInstance("Icon")
211
- var icon: IconComponent
212
-
213
- var body: some View {
214
- MyComponent()
215
- .icon(icon)
216
- }
217
- ```
218
- When a designer swaps the icon instance in Figma, Dev Mode renders that specific icon's Code Connect snippet inline.
219
-
220
- **Limitations:**
221
- - Does NOT support `hideDefault`. The line always renders in the snippet, even when the instance swap is hidden (boolean off), resulting in empty content like `.leftIcon()`.
222
- - Workaround: use `@FigmaBoolean` with `mapping:` instead when the instance swap is controlled by a boolean toggle.
223
- - Useful when the instance swap is always visible and you want the swapped component's Code Connect to render inline.
224
-
225
- ### figmaApply
226
- Conditionally applies view modifiers based on a boolean condition. In Dev Mode, Figma only shows the branch that matches the current property value - keeping snippets clean.
227
-
228
- **Basic - show modifier only when true:**
229
- ```swift
230
- @FigmaBoolean("Disabled", hideDefault: true)
231
- var disabled: Bool = false
232
-
233
- var body: some View {
234
- MyComponent()
235
- .figmaApply(disabled) { $0.opacity(0.5) }
236
- }
237
- ```
238
- When `Disabled = false` (default + hideDefault), nothing renders. When `Disabled = true`, snippet shows `.opacity(0.5)`.
239
-
240
- **With elseApply - different modifiers per branch:**
241
- ```swift
242
- @FigmaEnum("Type", mapping: ["Primary": true, "Secondary": false])
243
- var isPrimary: Bool = false
244
-
245
- var body: some View {
246
- MyComponent()
247
- .figmaApply(isPrimary) {
248
- $0.tint(.blue)
249
- } elseApply: {
250
- $0.backgroundColor(.clear)
251
- }
252
- }
253
- ```
254
- `elseApply` is optional - omit it to show nothing when condition is false.
255
-
256
- **With @FigmaBoolean + chain modifier (project pattern):**
257
- ```swift
258
- @FigmaBoolean("M&S Member", hideDefault: true)
259
- var showMember: Bool = false
260
-
261
- @FigmaString("Member Text")
262
- var memberText: String = "CLASSIC"
263
-
264
- var body: some View {
265
- TicketPassengerInfo(passengerName: passengerName, colorVariant: colorVariant)
266
- .figmaApply(showMember) { $0.membershipInfo(.init(memberId: "TK 12345678", memberClass: memberText)) }
267
- }
268
- ```
269
- Combines `hideDefault` boolean with a chain modifier that passes a nested configuration. When `M&S Member = false`, the `.membershipInfo(...)` line is hidden entirely in Dev Mode.
270
-
271
- **Multiple figmaApply - TYPE ERASURE WARNING:**
272
-
273
- `figmaApply` returns `some View`, NOT `Self`. This means chaining multiple `figmaApply` calls causes the second call's closure `$0` to be `some View` instead of the concrete view type - resulting in a compile error when calling component-specific modifiers inside the closure.
274
-
275
- ```swift
276
- // ❌ COMPILE ERROR - second $0 is `some View`, not `MyComponent`
277
- var body: some View {
278
- MyComponent(title: title)
279
- .figmaApply(showIcon) { $0.leftIcon(icon) } // returns some View
280
- .figmaApply(showBadge) { $0.badge(badgeCount) } // $0 is some View - .badge() not found
281
- }
282
- ```
283
-
284
- **The parser supports multiple chained `figmaApply` calls** (it uses a multi-pass while loop to replace each one independently). The limitation is purely a Swift type-checker issue at compile time.
285
-
286
- **Workaround - direct modifiers first, single figmaApply last:**
287
-
288
- Apply concrete-type modifiers (chain modifiers from Configuration) directly, then place `figmaApply` as the LAST call in the chain since it erases the type:
289
-
290
- ```swift
291
- // ✅ CORRECT - direct modifier preserves type, figmaApply goes last
292
- @FigmaBoolean("Show Badge", hideDefault: true)
293
- var showBadge: Bool = false
294
-
295
- @FigmaBoolean("Disabled", hideDefault: true)
296
- var isDisabled: Bool = false
297
-
298
- var body: some View {
299
- MyComponent(title: title)
300
- .showBadge(showBadge) // direct modifier, type preserved
301
- .figmaApply(isDisabled) { $0.opacity(0.5) } // figmaApply last, returns some View - OK
302
- }
303
- ```
304
-
305
- **Multiple booleans - use direct modifiers + single figmaApply:**
306
-
307
- When a component has multiple boolean properties, prefer direct modifiers for Bool-to-Bool mappings and reserve `figmaApply` for conditional complex expressions (optional Strings, nested configs):
308
-
309
- ```swift
310
- @FigmaBoolean("Whith Baby", hideDefault: true)
311
- var whithBaby: Bool = false
312
-
313
- @FigmaBoolean("+1 Boarding", hideDefault: true)
314
- var showBoardingDate: Bool = false
315
-
316
- var body: some View {
317
- TicketQrInfoGroup(
318
- terminalNumber: "1", gateNumber: "G23",
319
- seatNumber: "24 A", boardingTime: "23:30",
320
- qrCodeData: "TICKET-QR-DATA"
321
- )
322
- .whithBaby(whithBaby) // Bool → Bool, direct modifier
323
- .figmaApply(showBoardingDate) { $0.boardingDate("13 Eyl") } // Bool → optional String, figmaApply last
324
- }
325
- ```
326
-
327
- **If you MUST use multiple figmaApply (e.g., both need elseApply or complex expressions):**
328
-
329
- The parser handles it fine - it's only the Swift compiler that objects. Use the comment-out-after-publish pattern:
330
-
331
- 1. Write the `.figma.swift` with multiple `figmaApply` calls
332
- 2. Comment out the file content temporarily for `figma connect publish` (parser reads the file directly, not via Xcode build)
333
- 3. Actually: the parser reads `.figma.swift` files via SwiftSyntax, NOT through Xcode compilation. So publish works regardless of build errors.
334
- 4. After publish, comment out the body or the entire struct to prevent Xcode build failures:
335
-
336
- ```swift
337
- // Published to Figma Dev Mode - commented to avoid type erasure build error
338
- // struct MyComponentFigmaConnect: FigmaConnect {
339
- // ...
340
- // var body: some View {
341
- // MyComponent(title: title)
342
- // .figmaApply(showIcon) { $0.leftIcon(icon) }
343
- // .figmaApply(showBadge) { $0.badge(badgeCount) }
344
- // }
345
- // }
346
- ```
347
-
348
- **Preference order for multiple boolean properties:**
349
- 1. **Direct modifier** (`.whithBaby(whithBaby)`) - cleanest, no type erasure
350
- 2. **@FigmaBoolean with mapping** (`mapping: [true: "value", false: nil]`) - for Bool → optional type
351
- 3. **Single figmaApply last** - for complex conditional expressions
352
- 4. **Multiple figmaApply + comment after publish** - last resort when multiple complex conditionals needed
353
-
354
- **When to use figmaApply vs direct parameter:**
355
- - **Direct parameter**: Property maps 1:1 to init/modifier argument (e.g., `@FigmaEnum → colorStyle:`)
356
- - **Direct modifier with @FigmaBoolean**: Bool property maps 1:1 to Bool modifier parameter
357
- - **figmaApply**: Boolean controls presence/absence of a non-boolean modifier or configuration block
358
- - **figmaApply + elseApply**: Boolean switches between two different modifier expressions
359
-
360
- ### @FigmaChildren
361
- Renders nested child instances that aren't bound to an instance-swap prop. Takes layer names as parameters (the Figma layer name, not the component name):
362
- ```swift
363
- @FigmaChildren(layers: ["Header", "Row"])
364
- var contents: AnyView?
365
-
366
- var body: some View {
367
- MyList {
368
- contents
369
- }
370
- }
371
- ```
372
- Use when the component uses slot-based composition in Figma (e.g., a list with repeating row children).
373
-
374
- **Wildcard matching** - match any or partial layer names:
375
- ```swift
376
- @FigmaChildren(layers: ["*"]) // all children
377
- var allItems: AnyView?
378
-
379
- @FigmaChildren(layers: ["Icon*"]) // partial match - "IconLeft", "IconRight", etc.
380
- var icons: AnyView?
381
-
382
- @FigmaChildren(layers: ["Tab 1", "Tab 2", "Tab 3"]) // multiple specific layers
383
- var tabs: AnyView?
384
- ```
385
- Layer name matching is **case sensitive**. The nested instance must have its own separate Code Connect file.
386
-
387
- **Slots** - composable sub-areas within component instances where designers can place freeform content. Code Connect does NOT traverse slot children to generate code - it only renders a reference to the slot itself. Use `@FigmaChildren` to capture slot content.
388
-
389
- ## 3.5 ADVANCED PATTERNS
390
-
391
- ### Variant restrictions - multiple structs per component
392
- When a single Figma component maps to different Swift types based on variant, create multiple `FigmaConnect` structs pointing to the same node. Figma shows the most specific match:
393
- ```swift
394
- // Matches when Type = "Primary"
395
- struct PrimaryButtonConnect: FigmaConnect {
396
- let component = PrimaryButton.self
397
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
398
- let variant = ["Type": "Primary"]
399
- var body: some View { PrimaryButton(label: label) }
400
- }
401
-
402
- // Matches when Type = "Danger" AND Disabled = false
403
- struct DangerButtonConnect: FigmaConnect {
404
- let component = DangerButton.self
405
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
406
- let variant = ["Type": "Danger", "Disabled": false]
407
- var body: some View { DangerButton(label: label) }
408
- }
409
- ```
410
- More specific variant dictionaries take priority. Combine multiple variant properties for fine-grained matching.
411
-
412
- ### Computed variant - boolean gate for separate structs
413
- Use a computed `var variant` property for dynamic matching (e.g., boolean toggles):
414
- ```swift
415
- struct IconOnlyBadgeConnect: FigmaConnect {
416
- let component = LabelBadge.self
417
- let figmaNodeUrl: String = "https://figma.com/design/FILE_KEY/?node-id=X-Y"
418
- var variant: [String: Any]? { ["Label": false] }
419
- var body: some View { LabelBadge { config in config.leftIcon(icon) } }
420
- }
421
- ```
422
-
423
- ### @FigmaBoolean with custom mapping - non-Bool types
424
- Map boolean toggles to any Swift type, not just Bool. Useful for optional views:
425
- ```swift
426
- // Boolean controls icon presence - maps to optional Image
427
- @FigmaBoolean("Has Icon", mapping: [true: Image(systemName: "star.fill"), false: nil], hideDefault: true)
428
- var icon: Image? = nil
429
-
430
- // Boolean controls text presence - maps to optional String
431
- @FigmaBoolean("Show Label", mapping: [true: "Default Label", false: nil], hideDefault: true)
432
- var label: String? = nil
433
-
434
- var body: some View {
435
- MyComponent()
436
- .icon(icon)
437
- .label(label)
438
- }
439
- ```
440
- When `Has Icon = false` (default + hideDefault), `.icon(...)` is omitted from snippet entirely.
441
-
442
- ### @FigmaEnum - map to Bool for figmaApply
443
- Convert an enum variant to a boolean condition for use with `figmaApply`:
444
- ```swift
445
- @FigmaEnum("State", mapping: ["Disabled": true, "Default": false, "Hover": false, "Active": false])
446
- var isDisabled: Bool = false
447
-
448
- var body: some View {
449
- MyComponent()
450
- .figmaApply(isDisabled) { $0.disabled(true).opacity(0.5) }
451
- }
452
- ```
453
-
454
- ### Preview as documentation
455
- Code Connect structs work as Xcode previews, eliminating redundant preview code:
456
- ```swift
457
- #Preview {
458
- ComponentNameFigmaConnect()
459
- }
460
- ```
461
- This renders the exact same configuration shown in Figma Dev Mode, keeping code and design in sync.
462
-
463
- ## 4. CLI COMMANDS
464
-
465
- | Command | Purpose |
466
- |---------|---------|
467
- | `figma connect create "FIGMA_URL"` | Generate .figma.swift from Figma node URL |
468
- | `figma connect parse` | Validate Code Connect files locally |
469
- | `figma connect publish` | Publish to Figma (makes visible in Dev Mode) |
470
- | `figma connect publish --dry-run` | Preview what would be published |
471
- | `figma connect unpublish --label="SwiftUI"` | Remove published connections (--label REQUIRED since 1.3.6) |
472
-
473
- Auth: set `FIGMA_ACCESS_TOKEN` env var, or use `--token=YOUR_TOKEN` flag.
474
-
475
- Keychain retrieve:
476
- ```bash
477
- export FIGMA_ACCESS_TOKEN=$("$HOME/.claude/lib/credential-store.sh" get \1)
478
- ```
479
-
480
- All commands work with npx: `npx @figma/code-connect@latest connect <command>`
481
-
482
- ## 5. MCP vs CLI
483
-
484
- MCP tools do simple path mappings. CLI does rich property-mapped snippets.
485
-
486
- | Capability | MCP | CLI |
487
- |-----------|-----|-----|
488
- | Map Figma node → code file path | Yes (add_code_connect_map) | Not needed |
489
- | Auto-detect unmapped components | Yes (get_code_connect_suggestions) | No |
490
- | Generate .figma.swift with prop mappings | No | Yes (figma connect create) |
491
- | Publish dynamic snippets to Dev Mode | No | Yes (figma connect publish) |
492
- | Property mapping (@FigmaEnum etc.) | No | Yes |
493
- | Swift syntax parsing | No | Yes |
494
-
495
- **Use MCP** for AI agent context (which Swift file = which Figma node).
496
- **Use CLI** for real Code Connect with dynamic Dev Mode snippets.
497
-
498
- ## 6. PARSER BEHAVIOR
499
-
500
- The CLI parser uses SwiftSyntax AST analysis. Key behaviors that affect what developers see in Dev Mode:
501
-
502
- | Element | Behavior |
503
- |---------|----------|
504
- | `//` comments in body | **Stripped** - never appear in snippet |
505
- | `import` statements beyond Figma/SwiftUI | **Stripped** - `imports: []` always empty |
506
- | View modifiers (`.renderingMode(.template)`) | **Preserved** - captured via `trimmedDescription` |
507
- | Property wrapper expressions | **Preserved** - any expression works (e.g., `Image(systemName: "x")`) |
508
- | `let component = X.self` | **Optional** - only needed for component-level Code Connect |
509
-
510
- Do NOT rely on comments or extra imports to communicate with developers in snippets. Use view modifiers or static values in body instead.
511
-
512
- ## 7. ERROR REFERENCE
513
-
514
- | Error | Cause | Fix |
515
- |-------|-------|-----|
516
- | `Swift tools version X but installed is Y` | Wrong Swift | Update Xcode |
517
- | `SyntaxError: Unexpected end of JSON` | Swift version mismatch | Check Swift version |
518
- | `Property "X" does not exist` | Figma prop not found | Remove wrapper, use static value |
519
- | `Couldn't find a Figma access token` | Token not set | Set FIGMA_ACCESS_TOKEN |
520
- | `401 Unauthorized` | Invalid token | Regenerate with correct scopes |
521
- | `Could not find component at node` | Wrong nodeId | Use colon format, verify node |
522
- | `No Code Connect files found` | Wrong include | Check figma.config.json |
523
- | `no such module 'Figma'` | Not resolved | Run swift package resolve |
524
-
525
- ## 8. VERIFICATION
526
-
527
- After publish, verify via MCP:
528
- ```
529
- mcp__figma-remote__get_code_connect_map(fileKey: "KEY", nodeId: "X:Y")
530
- ```
531
- Returns mapping if published. Allow 1-2 min propagation delay.
@@ -1,89 +0,0 @@
1
- # CONFLUENCE API REFERENCE
2
-
3
- ---
4
-
5
- ## Authentication
6
-
7
- | Platform | Method | Header |
8
- |----------|--------|--------|
9
- | Cloud (*.atlassian.net) | Basic Auth | `Authorization: Basic base64(username:token)` |
10
- | Data Center/Server | Bearer Token (PAT) | `Authorization: Bearer <token>` |
11
-
12
- ---
13
-
14
- ## Endpoints
15
-
16
- ### Find Page
17
- ```
18
- GET /rest/api/content?spaceKey={SPACE}&title={TITLE}&expand=version
19
- ```
20
- Returns: `{ "results": [{ "id": "123456", "title": "...", "version": { "number": 5 } }] }`
21
-
22
- ### Create Page
23
- ```
24
- POST /rest/api/content
25
- Content-Type: application/json
26
- ```
27
- Body: `{ "type": "page", "title": "...", "space": { "key": "SPACE_KEY" }, "body": { "wiki": { "value": "h1. Content", "representation": "wiki" } } }`
28
-
29
- ### Update Page
30
- ```
31
- PUT /rest/api/content/{pageId}
32
- Content-Type: application/json
33
- ```
34
- Body: Same as create + `"id": "123456"` + `"version": { "number": N+1 }`
35
-
36
- ### Upload Attachment
37
- ```
38
- POST /rest/api/content/{pageId}/child/attachment
39
- Content-Type: multipart/form-data
40
- X-Atlassian-Token: nocheck
41
- ```
42
-
43
- ### List Attachments
44
- ```
45
- GET /rest/api/content/{pageId}/child/attachment
46
- ```
47
-
48
- ### Delete Attachment
49
- ```
50
- DELETE /rest/api/content/{attachmentId}
51
- ```
52
-
53
- ---
54
-
55
- ## Content Formats
56
-
57
- | Format | Use Case |
58
- |--------|----------|
59
- | `wiki` | Wiki markup (simpler, recommended) |
60
- | `storage` | XHTML storage format (complex) |
61
-
62
- ---
63
-
64
- ## Wiki Markup Quick Reference
65
-
66
- | Markdown | Wiki Markup |
67
- |----------|-------------|
68
- | `# H1` | `h1. H1` |
69
- | `## H2` | `h2. H2` |
70
- | `**bold**` | `*bold*` |
71
- | `- item` | `* item` |
72
- | `---` | `----` |
73
- | `\|a\|b\|` (header) | `\|\|a\|\|b\|\|` |
74
- | `\|a\|b\|` (row) | `\|a\|b\|` |
75
- | `[text](url)` | `[text\|url]` |
76
- | image | `!image.png!` |
77
- | attachment link | `[^filename.csv]` |
78
-
79
- ---
80
-
81
- ## Macros
82
-
83
- ```
84
- {toc} - Table of contents
85
- {panel:title=Title}content{panel} - Panel box
86
- {code:language=swift}code{code} - Code block
87
- {note}text{note} - Note callout
88
- {warning}text{warning} - Warning callout
89
- ```