@mmerterden/multi-agent-pipeline 11.2.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 (331) hide show
  1. package/CHANGELOG.md +37 -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 +33 -15
  8. package/install/copilot.mjs +16 -14
  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/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
  33. package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
  34. package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
  35. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
  36. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
  37. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
  38. package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
  39. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
  40. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
  41. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
  42. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
  43. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
  44. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
  45. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
  46. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
  47. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
  48. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
  49. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
  50. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
  51. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
  52. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
  53. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
  54. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
  55. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
  56. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
  57. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
  58. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
  59. package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
  60. package/pipeline/preferences-template.json +17 -1
  61. package/pipeline/rules/figma-pipeline.md +2 -2
  62. package/pipeline/schemas/prefs.schema.json +0 -34
  63. package/pipeline/scripts/README.md +1 -3
  64. package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
  65. package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
  66. package/pipeline/scripts/phase-banner.sh +2 -2
  67. package/pipeline/scripts/review-scope.mjs +94 -0
  68. package/pipeline/scripts/scan-agent-config.sh +2 -2
  69. package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
  70. package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
  71. package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
  72. package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
  73. package/pipeline/scripts/smoke-channels-flow.sh +5 -5
  74. package/pipeline/scripts/smoke-clarify.sh +1 -1
  75. package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
  76. package/pipeline/scripts/smoke-community-gates.sh +1 -1
  77. package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
  78. package/pipeline/scripts/smoke-cost-summary.sh +1 -1
  79. package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
  80. package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
  81. package/pipeline/scripts/smoke-dev-critic.sh +1 -1
  82. package/pipeline/scripts/smoke-diff-explain.sh +1 -1
  83. package/pipeline/scripts/smoke-diff-risk.sh +1 -1
  84. package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
  85. package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
  86. package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
  87. package/pipeline/scripts/smoke-generate-issue.sh +8 -8
  88. package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
  89. package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
  90. package/pipeline/scripts/smoke-intent-guard.sh +1 -1
  91. package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
  92. package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
  93. package/pipeline/scripts/smoke-language-axis.sh +6 -6
  94. package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
  95. package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
  96. package/pipeline/scripts/smoke-model-fallback.sh +3 -3
  97. package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
  98. package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
  99. package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
  100. package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
  101. package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
  102. package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
  103. package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
  104. package/pipeline/scripts/smoke-plan-todos.sh +3 -3
  105. package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
  106. package/pipeline/scripts/smoke-prefs-language.sh +1 -1
  107. package/pipeline/scripts/smoke-progress-contract.sh +2 -2
  108. package/pipeline/scripts/smoke-push-retry.sh +1 -1
  109. package/pipeline/scripts/smoke-repo-map.sh +2 -2
  110. package/pipeline/scripts/smoke-shadow-git.sh +1 -1
  111. package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
  112. package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
  113. package/pipeline/scripts/smoke-test-gap.sh +1 -1
  114. package/pipeline/scripts/smoke-token-budget.sh +1 -1
  115. package/pipeline/scripts/smoke-token-preflight.sh +2 -2
  116. package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
  117. package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
  118. package/pipeline/scripts/smoke-triage-memory.sh +2 -2
  119. package/pipeline/scripts/smoke-update-check.sh +1 -1
  120. package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
  121. package/pipeline/scripts/smoke-validator-gates.sh +1 -1
  122. package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
  123. package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
  124. package/pipeline/scripts/smoke-work-summary.sh +1 -1
  125. package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
  126. package/pipeline/scripts/test-integrity-gate.mjs +83 -0
  127. package/pipeline/scripts/uninstall.mjs +2 -2
  128. package/pipeline/skills/.skill-manifest.json +40 -160
  129. package/pipeline/skills/.skills-index.json +3 -372
  130. package/pipeline/skills/shared/README.md +1 -1
  131. package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
  132. package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
  133. package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
  134. package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
  135. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  136. package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
  137. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
  138. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
  139. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
  140. package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
  141. package/pipeline/skills/skills-index.md +2 -43
  142. package/pipeline/commands/multi-agent/refactor.md +0 -188
  143. package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
  144. package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
  145. package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
  146. package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
  147. package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
  148. package/pipeline/scripts/smoke-figma-sync.sh +0 -149
  149. package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
  150. package/pipeline/skills/figma-android/README.md +0 -38
  151. package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
  152. package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
  153. package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
  154. package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
  155. package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
  156. package/pipeline/skills/figma-common/README.md +0 -64
  157. package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
  158. package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
  159. package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
  160. package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
  161. package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
  162. package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
  163. package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
  164. package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
  165. package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
  166. package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
  167. package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
  168. package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
  169. package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
  170. package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
  171. package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
  172. package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
  173. package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
  174. package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
  175. package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
  176. package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
  177. package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
  178. package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
  179. package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
  180. package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
  181. package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
  182. package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
  183. package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
  184. package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
  185. package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
  186. package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
  187. package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
  188. package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
  189. package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
  190. package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
  191. package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
  192. package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
  193. package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
  194. package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
  195. package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
  196. package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
  197. package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
  198. package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
  199. package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
  200. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
  201. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
  202. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
  203. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
  204. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
  205. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
  206. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
  207. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
  208. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
  209. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
  210. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
  211. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
  212. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
  213. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
  214. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
  215. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
  216. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
  217. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
  218. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
  219. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
  220. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
  221. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
  222. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
  223. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
  224. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
  225. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
  226. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
  227. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
  228. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
  229. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
  230. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
  231. package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
  232. package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
  233. package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
  234. package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
  235. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
  236. package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
  237. package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
  238. package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
  239. package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
  240. package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
  241. package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
  242. package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
  243. package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
  244. package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
  245. package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
  246. package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
  247. package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
  248. package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
  249. package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
  250. package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
  251. package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
  252. package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
  253. package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
  254. package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
  255. package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
  256. package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
  257. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
  258. package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
  259. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
  260. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
  261. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
  262. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
  263. package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
  264. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
  265. package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
  266. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
  267. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
  268. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
  269. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
  270. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
  271. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
  272. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
  273. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
  274. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
  275. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
  276. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
  277. package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
  278. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
  279. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
  280. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
  281. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
  282. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
  283. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
  284. package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
  285. package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
  286. package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
  287. package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
  288. package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
  289. package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
  290. package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
  291. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
  292. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
  293. package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
  294. /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
  295. /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
  296. /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
  297. /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
  298. /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
  299. /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
  300. /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
  301. /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
  302. /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
  303. /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
  304. /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
  305. /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
  306. /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
  307. /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
  308. /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
  309. /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
  310. /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
  311. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
  312. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
  313. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
  314. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
  315. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
  316. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
  317. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
  318. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
  319. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
  320. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
  321. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
  322. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
  323. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
  324. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
  325. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
  326. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
  327. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
  328. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
  329. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
  330. /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
  331. /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
- ```