@mmerterden/multi-agent-pipeline 8.6.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.
- package/CHANGELOG.md +2623 -0
- package/LICENSE +21 -0
- package/README.md +852 -0
- package/docs/FIGMA_PIPELINE.md +138 -0
- package/docs/GENERICITY-REVIEW.md +277 -0
- package/docs/STABILITY-FIX-PLAN.md +168 -0
- package/docs/adr/0001-three-model-triage.md +81 -0
- package/docs/adr/0002-instruction-driven-flag.md +62 -0
- package/docs/adr/0003-unified-shared-skills.md +55 -0
- package/docs/adr/0004-zero-dependency-philosophy.md +60 -0
- package/docs/adr/0005-lazy-phase-docs.md +68 -0
- package/docs/adr/0006-skills-core-external-split.md +52 -0
- package/docs/adr/0007-multi-tool-adapter-framework.md +110 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +98 -0
- package/docs/adr/README.md +33 -0
- package/docs/architecture.md +181 -0
- package/docs/best-practices.md +93 -0
- package/docs/features.md +274 -0
- package/docs/performance.md +116 -0
- package/docs/recovery-guide.md +479 -0
- package/index.js +76 -0
- package/install/_adapters.mjs +69 -0
- package/install/_common.mjs +150 -0
- package/install/_copilot-instructions.mjs +32 -0
- package/install/_dev-only-files.mjs +23 -0
- package/install/_platform-filter.mjs +132 -0
- package/install/_telemetry.mjs +79 -0
- package/install/claude.mjs +332 -0
- package/install/copilot.mjs +254 -0
- package/install/index.mjs +179 -0
- package/install/templates/copilot-instructions.md +319 -0
- package/install.js +24 -0
- package/package.json +78 -0
- package/pipeline/adapters/_base.mjs +288 -0
- package/pipeline/adapters/copilot-chat.mjs +158 -0
- package/pipeline/adapters/cursor.mjs +187 -0
- package/pipeline/agents/android-architect.md +42 -0
- package/pipeline/agents/backend-architect.md +43 -0
- package/pipeline/agents/code-reviewer.md +57 -0
- package/pipeline/agents/dev-critic.md +148 -0
- package/pipeline/agents/explorer.md +34 -0
- package/pipeline/agents/ios-architect.md +41 -0
- package/pipeline/agents/security-auditor.md +98 -0
- package/pipeline/agents/task-clarifier.md +113 -0
- package/pipeline/claude-md-template.md +55 -0
- package/pipeline/commands/archive-guard.md +45 -0
- package/pipeline/commands/deploy.md +54 -0
- package/pipeline/commands/figma-to-swiftui.md +295 -0
- package/pipeline/commands/multi-agent/_account-picker.md +90 -0
- package/pipeline/commands/multi-agent/_dev-context.md +111 -0
- package/pipeline/commands/multi-agent/_input-parser.md +43 -0
- package/pipeline/commands/multi-agent/_repo-picker.md +76 -0
- package/pipeline/commands/multi-agent/autopilot.md +116 -0
- package/pipeline/commands/multi-agent/channels.md +465 -0
- package/pipeline/commands/multi-agent/delete.md +66 -0
- package/pipeline/commands/multi-agent/dev-autopilot.md +120 -0
- package/pipeline/commands/multi-agent/dev-local-autopilot.md +110 -0
- package/pipeline/commands/multi-agent/dev-local.md +105 -0
- package/pipeline/commands/multi-agent/dev.md +246 -0
- package/pipeline/commands/multi-agent/diff-explain.md +68 -0
- package/pipeline/commands/multi-agent/help.md +422 -0
- package/pipeline/commands/multi-agent/issue.md +79 -0
- package/pipeline/commands/multi-agent/jira.md +132 -0
- package/pipeline/commands/multi-agent/kill.md +38 -0
- package/pipeline/commands/multi-agent/language.md +94 -0
- package/pipeline/commands/multi-agent/local-autopilot.md +139 -0
- package/pipeline/commands/multi-agent/local.md +117 -0
- package/pipeline/commands/multi-agent/log.md +25 -0
- package/pipeline/commands/multi-agent/manual-test.md +43 -0
- package/pipeline/commands/multi-agent/purge.md +39 -0
- package/pipeline/commands/multi-agent/refactor.md +188 -0
- package/pipeline/commands/multi-agent/refs/android-guide.md +250 -0
- package/pipeline/commands/multi-agent/refs/audit-guide.md +240 -0
- package/pipeline/commands/multi-agent/refs/backend-guide.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/confluence.md +153 -0
- package/pipeline/commands/multi-agent/refs/channels/issue-comment.md +141 -0
- package/pipeline/commands/multi-agent/refs/channels/jira.md +127 -0
- package/pipeline/commands/multi-agent/refs/channels/pr-review-actions.md +135 -0
- package/pipeline/commands/multi-agent/refs/channels/pr.md +139 -0
- package/pipeline/commands/multi-agent/refs/channels/wiki.md +66 -0
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +92 -0
- package/pipeline/commands/multi-agent/refs/cross-cli-contract.md +326 -0
- package/pipeline/commands/multi-agent/refs/frontend-guide.md +136 -0
- package/pipeline/commands/multi-agent/refs/issue-jira-triad.md +104 -0
- package/pipeline/commands/multi-agent/refs/keychain.md +80 -0
- package/pipeline/commands/multi-agent/refs/knowledge.md +112 -0
- package/pipeline/commands/multi-agent/refs/multi-repo-integration-build.md +207 -0
- package/pipeline/commands/multi-agent/refs/phases/log-format.md +89 -0
- package/pipeline/commands/multi-agent/refs/phases/modes.md +156 -0
- package/pipeline/commands/multi-agent/refs/phases/operations.md +91 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-0-init.md +481 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-1-analysis.md +264 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-2-planning.md +278 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-3-dev.md +364 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-4-review.md +378 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-5-test.md +129 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-6-commit.md +339 -0
- package/pipeline/commands/multi-agent/refs/phases/phase-7-report.md +361 -0
- package/pipeline/commands/multi-agent/refs/phases.md +187 -0
- package/pipeline/commands/multi-agent/refs/progress-contract.md +155 -0
- package/pipeline/commands/multi-agent/refs/rules.md +189 -0
- package/pipeline/commands/multi-agent/refs/swiftui-guide.md +254 -0
- package/pipeline/commands/multi-agent/refs/tracker-contract.md +256 -0
- package/pipeline/commands/multi-agent/refs/wiki-capture.md +109 -0
- package/pipeline/commands/multi-agent/resume.md +28 -0
- package/pipeline/commands/multi-agent/review.md +228 -0
- package/pipeline/commands/multi-agent/scan.md +74 -0
- package/pipeline/commands/multi-agent/search.md +97 -0
- package/pipeline/commands/multi-agent/setup.md +767 -0
- package/pipeline/commands/multi-agent/stack.md +48 -0
- package/pipeline/commands/multi-agent/status.md +38 -0
- package/pipeline/commands/multi-agent/sync.md +319 -0
- package/pipeline/commands/multi-agent/test.md +39 -0
- package/pipeline/commands/multi-agent/update.md +88 -0
- package/pipeline/commands/multi-agent.md +293 -0
- package/pipeline/commands/security-review.md +6 -0
- package/pipeline/commands/sim-test.md +256 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-1-analysis.json +25 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-2-plan.json +30 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-review.json +20 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/expected/phase-4-triage.json +15 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/01-ios-bugfix-darkmode/task.json +12 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-1-analysis.json +29 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-2-plan.json +43 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-review.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/expected/phase-4-triage.json +35 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/metadata.json +14 -0
- package/pipeline/eval/golden-tasks/02-android-feature-compose/task.json +12 -0
- package/pipeline/eval/golden-tasks/README.md +65 -0
- package/pipeline/eval/triage/01-empty-findings/expected.json +6 -0
- package/pipeline/eval/triage/01-empty-findings/input.json +5 -0
- package/pipeline/eval/triage/01-empty-findings/notes.md +7 -0
- package/pipeline/eval/triage/02-real-blocker/expected.json +15 -0
- package/pipeline/eval/triage/02-real-blocker/input.json +14 -0
- package/pipeline/eval/triage/02-real-blocker/notes.md +7 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/expected.json +18 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/input.json +14 -0
- package/pipeline/eval/triage/03-out-of-scope-defer/notes.md +10 -0
- package/pipeline/eval/triage/04-false-positive-reject/expected.json +18 -0
- package/pipeline/eval/triage/04-false-positive-reject/input.json +14 -0
- package/pipeline/eval/triage/04-false-positive-reject/notes.md +10 -0
- package/pipeline/eval/triage/05-mixed-classification/expected.json +43 -0
- package/pipeline/eval/triage/05-mixed-classification/input.json +38 -0
- package/pipeline/eval/triage/05-mixed-classification/notes.md +17 -0
- package/pipeline/eval/triage/06-severity-mismatch/expected.json +15 -0
- package/pipeline/eval/triage/06-severity-mismatch/input.json +14 -0
- package/pipeline/eval/triage/06-severity-mismatch/notes.md +9 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/expected.json +27 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/input.json +22 -0
- package/pipeline/eval/triage/07-duplicate-reviewers/notes.md +9 -0
- package/pipeline/eval/triage/08-style-misclassified/expected.json +18 -0
- package/pipeline/eval/triage/08-style-misclassified/input.json +14 -0
- package/pipeline/eval/triage/08-style-misclassified/notes.md +9 -0
- package/pipeline/eval/triage/09-cascading-finding/expected.json +23 -0
- package/pipeline/eval/triage/09-cascading-finding/input.json +22 -0
- package/pipeline/eval/triage/09-cascading-finding/notes.md +9 -0
- package/pipeline/eval/triage/10-deferred-crossref/expected.json +18 -0
- package/pipeline/eval/triage/10-deferred-crossref/input.json +14 -0
- package/pipeline/eval/triage/10-deferred-crossref/notes.md +9 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/expected.json +27 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/input.json +22 -0
- package/pipeline/eval/triage/11-vercel-token-leak-blocker/notes.md +14 -0
- package/pipeline/eval/triage/README.md +54 -0
- package/pipeline/lib/account-resolver.sh +204 -0
- package/pipeline/lib/channels-multi-repo.sh +218 -0
- package/pipeline/lib/context-link-extractor.sh +192 -0
- package/pipeline/lib/credential-store-resolver.sh +57 -0
- package/pipeline/lib/credential-store.sh +226 -0
- package/pipeline/lib/fetch-confluence.sh +358 -0
- package/pipeline/lib/fetch-crashlytics.sh +314 -0
- package/pipeline/lib/fetch-fortify.sh +321 -0
- package/pipeline/lib/fetch-swagger.sh +270 -0
- package/pipeline/lib/issue-fetcher.sh +333 -0
- package/pipeline/lib/multi-repo-pipeline.sh +252 -0
- package/pipeline/lib/plan-todos.sh +284 -0
- package/pipeline/lib/post-pr-review.sh +374 -0
- package/pipeline/lib/repo-cache.sh +231 -0
- package/pipeline/lib/review-watch.sh +244 -0
- package/pipeline/lib/shadow-git.sh +222 -0
- package/pipeline/lib/submodule-detector.sh +177 -0
- package/pipeline/lib/vercel-deploy.sh +170 -0
- package/pipeline/preferences-template.json +132 -0
- package/pipeline/rules/app-store-guidelines.md +59 -0
- package/pipeline/rules/code-review.md +27 -0
- package/pipeline/rules/code-style.md +37 -0
- package/pipeline/rules/debugging.md +24 -0
- package/pipeline/rules/figma-pipeline.md +190 -0
- package/pipeline/rules/git-conventions.md +29 -0
- package/pipeline/rules/kotlin-android.md +92 -0
- package/pipeline/rules/performance.md +23 -0
- package/pipeline/rules/security.md +39 -0
- package/pipeline/rules/swiftui-qa.md +32 -0
- package/pipeline/rules/tdd.md +25 -0
- package/pipeline/rules/testing.md +37 -0
- package/pipeline/schemas/agent-state.schema.json +273 -0
- package/pipeline/schemas/analysis-output.schema.json +59 -0
- package/pipeline/schemas/clarify-output.schema.json +74 -0
- package/pipeline/schemas/dev-critic-output.schema.json +104 -0
- package/pipeline/schemas/diff-risk.schema.json +78 -0
- package/pipeline/schemas/figma-project-config.schema.json +372 -0
- package/pipeline/schemas/migrations/README.md +73 -0
- package/pipeline/schemas/migrations/figma-config-1.0.0-to-2.0.0.mjs +112 -0
- package/pipeline/schemas/migrations/prefs-2.0.0-to-2.1.0.mjs +75 -0
- package/pipeline/schemas/migrations/prefs-2.1.0-to-2.2.0.mjs +64 -0
- package/pipeline/schemas/migrations/prefs-2.2.0-to-2.3.0.mjs +36 -0
- package/pipeline/schemas/migrations/state-2.0.0-to-2.1.0.mjs +34 -0
- package/pipeline/schemas/plan-todos.schema.json +62 -0
- package/pipeline/schemas/planning-output.schema.json +57 -0
- package/pipeline/schemas/prefs.schema.json +1137 -0
- package/pipeline/schemas/reviewer-output.schema.json +55 -0
- package/pipeline/schemas/test-gap.schema.json +64 -0
- package/pipeline/schemas/token-budget.json +17 -0
- package/pipeline/schemas/triage-corpus.schema.json +31 -0
- package/pipeline/schemas/triage-output.schema.json +115 -0
- package/pipeline/scripts/.last-figma-sync-plan.json +23 -0
- package/pipeline/scripts/README-figma-smokes.md +34 -0
- package/pipeline/scripts/README.md +104 -0
- package/pipeline/scripts/aggregate-metrics.mjs +310 -0
- package/pipeline/scripts/audit-log-rotate.sh +61 -0
- package/pipeline/scripts/audit-log.sh +69 -0
- package/pipeline/scripts/benchmark-phase-0.sh +128 -0
- package/pipeline/scripts/build-skills-index.mjs +139 -0
- package/pipeline/scripts/classify-plan-safety.mjs +177 -0
- package/pipeline/scripts/cost-table.json +27 -0
- package/pipeline/scripts/diff-explain.mjs +276 -0
- package/pipeline/scripts/diff-risk-score.mjs +328 -0
- package/pipeline/scripts/eval-golden-tasks-live.mjs +294 -0
- package/pipeline/scripts/eval-golden-tasks.mjs +223 -0
- package/pipeline/scripts/eval-triage.mjs +171 -0
- package/pipeline/scripts/figma-placeholder-map.json +191 -0
- package/pipeline/scripts/fixtures/diff-risk-android.diff +40 -0
- package/pipeline/scripts/fixtures/diff-risk-ios.diff +48 -0
- package/pipeline/scripts/fixtures/install-layout.tsv +16 -0
- package/pipeline/scripts/fixtures/test-gap-node.diff +30 -0
- package/pipeline/scripts/fixtures/test-gap-python.diff +32 -0
- package/pipeline/scripts/gen-mode-dispatch.mjs +170 -0
- package/pipeline/scripts/gen-skills-index.mjs +90 -0
- package/pipeline/scripts/github-ssh-setup.sh +103 -0
- package/pipeline/scripts/import-figma-skills.sh +253 -0
- package/pipeline/scripts/keychain-save.sh +74 -0
- package/pipeline/scripts/keychain.py +294 -0
- package/pipeline/scripts/log-metric.sh +98 -0
- package/pipeline/scripts/match-skills.mjs +167 -0
- package/pipeline/scripts/memory-load.sh +46 -0
- package/pipeline/scripts/memory-save.sh +76 -0
- package/pipeline/scripts/migrate-prefs.mjs +390 -0
- package/pipeline/scripts/migrate-state.mjs +215 -0
- package/pipeline/scripts/output-quality-check.sh +125 -0
- package/pipeline/scripts/phase-banner.sh +158 -0
- package/pipeline/scripts/phase-tracker.sh +548 -0
- package/pipeline/scripts/pre-commit-check.sh +69 -0
- package/pipeline/scripts/pre-push-check.sh +77 -0
- package/pipeline/scripts/render-agent-log-cost.sh +149 -0
- package/pipeline/scripts/render-cost-summary.sh +137 -0
- package/pipeline/scripts/render-work-summary.sh +195 -0
- package/pipeline/scripts/repo-map.mjs +367 -0
- package/pipeline/scripts/run-aggregator.mjs +298 -0
- package/pipeline/scripts/scan-skills.sh +332 -0
- package/pipeline/scripts/search-logs.sh +291 -0
- package/pipeline/scripts/sign-skills.sh +67 -0
- package/pipeline/scripts/smoke-adapters.sh +207 -0
- package/pipeline/scripts/smoke-add-detail.sh +137 -0
- package/pipeline/scripts/smoke-agent-log-cost.sh +183 -0
- package/pipeline/scripts/smoke-agent-model-routing.sh +87 -0
- package/pipeline/scripts/smoke-bitbucket-contract.sh +223 -0
- package/pipeline/scripts/smoke-channels-flow.sh +130 -0
- package/pipeline/scripts/smoke-ci-workflows.sh +88 -0
- package/pipeline/scripts/smoke-clarify.sh +148 -0
- package/pipeline/scripts/smoke-commands-skills-parity.sh +87 -0
- package/pipeline/scripts/smoke-compliance-skills.sh +119 -0
- package/pipeline/scripts/smoke-cost-summary.sh +139 -0
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +198 -0
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +128 -0
- package/pipeline/scripts/smoke-delete-flow.sh +151 -0
- package/pipeline/scripts/smoke-dev-critic.sh +144 -0
- package/pipeline/scripts/smoke-diff-explain.sh +128 -0
- package/pipeline/scripts/smoke-diff-risk.sh +161 -0
- package/pipeline/scripts/smoke-dynamic-skill-loading.sh +160 -0
- package/pipeline/scripts/smoke-eval-live.sh +136 -0
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +71 -0
- package/pipeline/scripts/smoke-figma-android-parity.sh +148 -0
- package/pipeline/scripts/smoke-figma-config-schema.sh +144 -0
- package/pipeline/scripts/smoke-figma-credential-store.sh +105 -0
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +177 -0
- package/pipeline/scripts/smoke-figma-dispatch.sh +123 -0
- package/pipeline/scripts/smoke-figma-skill-import.sh +174 -0
- package/pipeline/scripts/smoke-figma-sync.sh +149 -0
- package/pipeline/scripts/smoke-identity-isolation.sh +70 -0
- package/pipeline/scripts/smoke-install-layout.sh +241 -0
- package/pipeline/scripts/smoke-install-leak-gate.sh +125 -0
- package/pipeline/scripts/smoke-issue-comment-template.sh +86 -0
- package/pipeline/scripts/smoke-issue-jira-triad.sh +120 -0
- package/pipeline/scripts/smoke-keychain.sh +158 -0
- package/pipeline/scripts/smoke-language-axis.sh +109 -0
- package/pipeline/scripts/smoke-lib-scripts.sh +395 -0
- package/pipeline/scripts/smoke-migrate-state.sh +102 -0
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +158 -0
- package/pipeline/scripts/smoke-multi-repo-integration.sh +116 -0
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +61 -0
- package/pipeline/scripts/smoke-no-token-prompt.sh +69 -0
- package/pipeline/scripts/smoke-pat-audit.sh +107 -0
- package/pipeline/scripts/smoke-per-repo-memory.sh +156 -0
- package/pipeline/scripts/smoke-personal-data.sh +82 -0
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +170 -0
- package/pipeline/scripts/smoke-phase-6-multi.sh +79 -0
- package/pipeline/scripts/smoke-phase-banner.sh +101 -0
- package/pipeline/scripts/smoke-phase-tracker.sh +255 -0
- package/pipeline/scripts/smoke-phase0-bridge-contract.sh +241 -0
- package/pipeline/scripts/smoke-phase4-triage.sh +142 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +71 -0
- package/pipeline/scripts/smoke-plan-safety.sh +139 -0
- package/pipeline/scripts/smoke-plan-todos.sh +193 -0
- package/pipeline/scripts/smoke-pr-review-actions.sh +152 -0
- package/pipeline/scripts/smoke-pre-commit.sh +138 -0
- package/pipeline/scripts/smoke-pref-migration.sh +224 -0
- package/pipeline/scripts/smoke-prefs-language.sh +134 -0
- package/pipeline/scripts/smoke-progress-contract.sh +118 -0
- package/pipeline/scripts/smoke-push-retry.sh +75 -0
- package/pipeline/scripts/smoke-readme-counts.sh +120 -0
- package/pipeline/scripts/smoke-repo-map.sh +300 -0
- package/pipeline/scripts/smoke-review-watch.sh +134 -0
- package/pipeline/scripts/smoke-run-aggregator.sh +216 -0
- package/pipeline/scripts/smoke-schema-validation.sh +173 -0
- package/pipeline/scripts/smoke-search.sh +187 -0
- package/pipeline/scripts/smoke-shadow-git.sh +175 -0
- package/pipeline/scripts/smoke-skill-authoring.sh +142 -0
- package/pipeline/scripts/smoke-skill-language.sh +83 -0
- package/pipeline/scripts/smoke-skill-manifest.sh +138 -0
- package/pipeline/scripts/smoke-skill-scan.sh +198 -0
- package/pipeline/scripts/smoke-stack-swap.sh +132 -0
- package/pipeline/scripts/smoke-subagent-validators.sh +105 -0
- package/pipeline/scripts/smoke-sync-delegation.sh +74 -0
- package/pipeline/scripts/smoke-sync-parity.sh +92 -0
- package/pipeline/scripts/smoke-tasklist-ordering.sh +111 -0
- package/pipeline/scripts/smoke-telemetry.sh +147 -0
- package/pipeline/scripts/smoke-test-gap.sh +183 -0
- package/pipeline/scripts/smoke-token-budget.sh +67 -0
- package/pipeline/scripts/smoke-tracker-contract.sh +129 -0
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +65 -0
- package/pipeline/scripts/smoke-triage-memory.sh +174 -0
- package/pipeline/scripts/smoke-url-enrichment.sh +70 -0
- package/pipeline/scripts/smoke-validator-contradiction.sh +67 -0
- package/pipeline/scripts/smoke-vercel-deploy-redact.sh +129 -0
- package/pipeline/scripts/smoke-wiki-integration.sh +146 -0
- package/pipeline/scripts/smoke-work-summary.sh +163 -0
- package/pipeline/scripts/smoke-worktree-path-convention.sh +86 -0
- package/pipeline/scripts/smoke-write-state.sh +115 -0
- package/pipeline/scripts/stack-swap.sh +182 -0
- package/pipeline/scripts/sync-figma-source.sh +228 -0
- package/pipeline/scripts/sync-parity-check.sh +135 -0
- package/pipeline/scripts/test-gap-rules/android.json +25 -0
- package/pipeline/scripts/test-gap-rules/ios.json +29 -0
- package/pipeline/scripts/test-gap-rules/node.json +17 -0
- package/pipeline/scripts/test-gap-rules/python.json +19 -0
- package/pipeline/scripts/test-gap-scan.mjs +343 -0
- package/pipeline/scripts/token-budget-report.mjs +145 -0
- package/pipeline/scripts/triage-memory.mjs +258 -0
- package/pipeline/scripts/ui-tree-dumper.swift +122 -0
- package/pipeline/scripts/uninstall.mjs +331 -0
- package/pipeline/scripts/update-issue-progress.sh +146 -0
- package/pipeline/scripts/validate-analysis.mjs +132 -0
- package/pipeline/scripts/validate-diff-risk.mjs +117 -0
- package/pipeline/scripts/validate-planning.mjs +180 -0
- package/pipeline/scripts/validate-reviewer.mjs +131 -0
- package/pipeline/scripts/validate-schemas.mjs +88 -0
- package/pipeline/scripts/validate-test-gap.mjs +90 -0
- package/pipeline/scripts/validate-triage.mjs +175 -0
- package/pipeline/scripts/verify-skills.sh +126 -0
- package/pipeline/scripts/write-state.mjs +175 -0
- package/pipeline/skills/.skill-manifest.json +779 -0
- package/pipeline/skills/.skills-index.json +1771 -0
- package/pipeline/skills/figma-android/README.md +36 -0
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +62 -0
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +158 -0
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +120 -0
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +35 -0
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +124 -0
- package/pipeline/skills/figma-common/README.md +57 -0
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +277 -0
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +498 -0
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +283 -0
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +362 -0
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +206 -0
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +337 -0
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +211 -0
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +218 -0
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +246 -0
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +73 -0
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +316 -0
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +542 -0
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +745 -0
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +203 -0
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +1015 -0
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +331 -0
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +398 -0
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-review/SKILL.md +395 -0
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +514 -0
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +592 -0
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +129 -0
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +104 -0
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +274 -0
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +808 -0
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +633 -0
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +711 -0
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +233 -0
- package/pipeline/skills/figma-common/performance-start/SKILL.md +425 -0
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +706 -0
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +418 -0
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +67 -0
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +178 -0
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +184 -0
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +219 -0
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +401 -0
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +307 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +119 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +174 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +368 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +393 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +617 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +352 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +337 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +235 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +214 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +871 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +156 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +175 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +333 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +412 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +695 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +380 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +262 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +482 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +274 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +636 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +142 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +547 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +39 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +659 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +580 -0
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +51 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +129 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +64 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +531 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +155 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +196 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +57 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +89 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +227 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +157 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +90 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +116 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +153 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +130 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +218 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +182 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +185 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +609 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +261 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +184 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +188 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +768 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +191 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +420 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.json +94 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +336 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +391 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +292 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +1 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +93 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +299 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +343 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +206 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +149 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +281 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +332 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +98 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +195 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +1298 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +228 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +1089 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +141 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +106 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +162 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +105 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +179 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +260 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +86 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +321 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +1470 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +176 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +147 -0
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +629 -0
- package/pipeline/skills/shared/README.md +212 -0
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +315 -0
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +348 -0
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +944 -0
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +51 -0
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +300 -0
- package/pipeline/skills/shared/core/multi-agent-delete/SKILL.md +63 -0
- package/pipeline/skills/shared/core/multi-agent-dev/SKILL.md +64 -0
- package/pipeline/skills/shared/core/multi-agent-dev-autopilot/SKILL.md +56 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local/SKILL.md +36 -0
- package/pipeline/skills/shared/core/multi-agent-dev-local-autopilot/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +66 -0
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +292 -0
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +38 -0
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +87 -0
- package/pipeline/skills/shared/core/multi-agent-local/SKILL.md +37 -0
- package/pipeline/skills/shared/core/multi-agent-local-autopilot/SKILL.md +53 -0
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +28 -0
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +47 -0
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +42 -0
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +191 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +31 -0
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +61 -0
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +62 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +309 -0
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +55 -0
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +41 -0
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +184 -0
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +44 -0
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +34 -0
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +45 -0
- package/pipeline/skills/shared/external/agentflow/SKILL.md +199 -0
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +438 -0
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +584 -0
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +407 -0
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +153 -0
- package/pipeline/skills/shared/external/android-performance/SKILL.md +736 -0
- package/pipeline/skills/shared/external/android-security/SKILL.md +577 -0
- package/pipeline/skills/shared/external/android_ui_verification/SKILL.md +66 -0
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +85 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +910 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +436 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +489 -0
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +1076 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +75 -0
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +409 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +411 -0
- package/pipeline/skills/shared/external/app-store-review/references/code-signing.md +259 -0
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +90 -0
- package/pipeline/skills/shared/external/app-store-review/references/rejection-patterns.md +152 -0
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +118 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +500 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +425 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +344 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +508 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +285 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +60 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +496 -0
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +211 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +499 -0
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +390 -0
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +461 -0
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +425 -0
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +462 -0
- package/pipeline/skills/shared/external/clean-code/SKILL.md +94 -0
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +116 -0
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +492 -0
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +461 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +441 -0
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +436 -0
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +527 -0
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +425 -0
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +409 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +266 -0
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +491 -0
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +435 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +388 -0
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +405 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +495 -0
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +420 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +458 -0
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +765 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +467 -0
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +335 -0
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +422 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +387 -0
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +298 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +37 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +477 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +413 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +460 -0
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +541 -0
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +483 -0
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +326 -0
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +190 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +61 -0
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +348 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +552 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +498 -0
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +602 -0
- package/pipeline/skills/shared/external/help-skills/SKILL.md +166 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +95 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +82 -0
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +101 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +94 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +110 -0
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +99 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +81 -0
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +125 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +496 -0
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +455 -0
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +301 -0
- package/pipeline/skills/shared/external/humanizer/SKILL.md +118 -0
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +301 -0
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +140 -0
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +59 -0
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +217 -0
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +418 -0
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +627 -0
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +462 -0
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +441 -0
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +862 -0
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -0
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +563 -0
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +1116 -0
- package/pipeline/skills/shared/external/ios-security/SKILL.md +496 -0
- package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +174 -0
- package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +297 -0
- package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +354 -0
- package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +117 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +101 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +500 -0
- package/pipeline/skills/shared/external/live-activities/references/live-activity-patterns.md +868 -0
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +109 -0
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +110 -0
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +485 -0
- package/pipeline/skills/shared/external/mapkit-location/references/corelocation-patterns.md +730 -0
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +748 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +479 -0
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +64 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +395 -0
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +363 -0
- package/pipeline/skills/shared/external/natural-language/SKILL.md +412 -0
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +311 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +418 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +38 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +235 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +398 -0
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +254 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +387 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/paperkit-integration.md +376 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +302 -0
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +446 -0
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +435 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +501 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +701 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +774 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +869 -0
- package/pipeline/skills/shared/external/photos-camera-media/references/photospicker-patterns.md +597 -0
- package/pipeline/skills/shared/external/play-store-review/SKILL.md +350 -0
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +501 -0
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +677 -0
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +745 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +383 -0
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +290 -0
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +479 -0
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +480 -0
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +386 -0
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +506 -0
- package/pipeline/skills/shared/external/room-database/SKILL.md +564 -0
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +483 -0
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +544 -0
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +485 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +478 -0
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +58 -0
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +755 -0
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +895 -0
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +467 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +408 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +80 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-concurrency.md +233 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +187 -0
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +341 -0
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +113 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +124 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +155 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/async-streams.md +67 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bridging.md +52 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/bug-patterns.md +100 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +107 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/diagnostics.md +70 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/hotspots.md +47 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +129 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +224 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +101 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +218 -0
- package/pipeline/skills/shared/external/swift-concurrency-pro/references/unstructured.md +61 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +498 -0
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +505 -0
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +462 -0
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +504 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +97 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +252 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/core-rules.md +52 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/migrating-from-xctest.md +34 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +318 -0
- package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +254 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +334 -0
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +504 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +975 -0
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +675 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/class-inheritance.md +104 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/cloudkit.md +10 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/core-rules.md +20 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/indexing.md +27 -0
- package/pipeline/skills/shared/external/swiftdata-pro/references/predicates.md +73 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +503 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +821 -0
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +553 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +102 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +215 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +135 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +602 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +203 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +464 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +266 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/liquid-glass.md +416 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +394 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +318 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +357 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +303 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +403 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +293 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +363 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +417 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +389 -0
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +450 -0
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +425 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +336 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +97 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +69 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +99 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +147 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +98 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +262 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +207 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +177 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +169 -0
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +178 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +371 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +486 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +1097 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +780 -0
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +696 -0
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +487 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +33 -0
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +52 -0
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +114 -0
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +108 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/accessibility.md +13 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/api.md +39 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/data.md +43 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/design.md +31 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/hygiene.md +9 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/navigation.md +14 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/performance.md +46 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/swift.md +56 -0
- package/pipeline/skills/shared/external/swiftui-pro/references/views.md +35 -0
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +103 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +428 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +534 -0
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +948 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +210 -0
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +273 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +151 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +95 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +51 -0
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +111 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +309 -0
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +393 -0
- package/pipeline/skills/shared/external/tipkit/SKILL.md +494 -0
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +782 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +336 -0
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +475 -0
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +736 -0
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +738 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +371 -0
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +410 -0
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +567 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +373 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +345 -0
- package/pipeline/skills/shared/external/web-testing/SKILL.md +385 -0
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +497 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +871 -0
- package/pipeline/skills/skills-index.md +205 -0
|
@@ -0,0 +1,531 @@
|
|
|
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
|
+
CheckinBoardingPassPassengerInfo(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
|
+
CheckinBoardingPassQrInfoGroup(
|
|
318
|
+
terminalNumber: "1", gateNumber: "G23",
|
|
319
|
+
seatNumber: "24 A", boardingTime: "23:30",
|
|
320
|
+
qrCodeData: "BOARDING-PASS-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=$(security find-generic-password -a "$USER" -s "FIGMA_ACCESS_TOKEN" -w)
|
|
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.
|
|
@@ -0,0 +1,89 @@
|
|
|
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
|
+
```
|