@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.
- package/CHANGELOG.md +37 -0
- package/README.md +2 -2
- package/docs/FIGMA_PIPELINE.md +12 -25
- package/docs/architecture.md +3 -5
- package/docs/features.md +8 -8
- package/install/_dev-only-files.mjs +0 -6
- package/install/claude.mjs +33 -15
- package/install/copilot.mjs +16 -14
- package/install/templates/copilot-instructions.md +3 -3
- package/package.json +1 -1
- package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
- package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
- package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
- package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
- package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
- package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
- package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
- package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
- package/pipeline/preferences-template.json +17 -1
- package/pipeline/rules/figma-pipeline.md +2 -2
- package/pipeline/schemas/prefs.schema.json +0 -34
- package/pipeline/scripts/README.md +1 -3
- package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/phase-banner.sh +2 -2
- package/pipeline/scripts/review-scope.mjs +94 -0
- package/pipeline/scripts/scan-agent-config.sh +2 -2
- package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
- package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
- package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
- package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
- package/pipeline/scripts/smoke-channels-flow.sh +5 -5
- package/pipeline/scripts/smoke-clarify.sh +1 -1
- package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
- package/pipeline/scripts/smoke-community-gates.sh +1 -1
- package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
- package/pipeline/scripts/smoke-cost-summary.sh +1 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
- package/pipeline/scripts/smoke-dev-critic.sh +1 -1
- package/pipeline/scripts/smoke-diff-explain.sh +1 -1
- package/pipeline/scripts/smoke-diff-risk.sh +1 -1
- package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
- package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
- package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
- package/pipeline/scripts/smoke-generate-issue.sh +8 -8
- package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
- package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
- package/pipeline/scripts/smoke-intent-guard.sh +1 -1
- package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
- package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
- package/pipeline/scripts/smoke-language-axis.sh +6 -6
- package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
- package/pipeline/scripts/smoke-model-fallback.sh +3 -3
- package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
- package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
- package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
- package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
- package/pipeline/scripts/smoke-plan-todos.sh +3 -3
- package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
- package/pipeline/scripts/smoke-prefs-language.sh +1 -1
- package/pipeline/scripts/smoke-progress-contract.sh +2 -2
- package/pipeline/scripts/smoke-push-retry.sh +1 -1
- package/pipeline/scripts/smoke-repo-map.sh +2 -2
- package/pipeline/scripts/smoke-shadow-git.sh +1 -1
- package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
- package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
- package/pipeline/scripts/smoke-test-gap.sh +1 -1
- package/pipeline/scripts/smoke-token-budget.sh +1 -1
- package/pipeline/scripts/smoke-token-preflight.sh +2 -2
- package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
- package/pipeline/scripts/smoke-triage-memory.sh +2 -2
- package/pipeline/scripts/smoke-update-check.sh +1 -1
- package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
- package/pipeline/scripts/smoke-validator-gates.sh +1 -1
- package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
- package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
- package/pipeline/scripts/smoke-work-summary.sh +1 -1
- package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
- package/pipeline/scripts/test-integrity-gate.mjs +83 -0
- package/pipeline/scripts/uninstall.mjs +2 -2
- package/pipeline/skills/.skill-manifest.json +40 -160
- package/pipeline/skills/.skills-index.json +3 -372
- package/pipeline/skills/shared/README.md +1 -1
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
- package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
- package/pipeline/skills/skills-index.md +2 -43
- package/pipeline/commands/multi-agent/refactor.md +0 -188
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
- package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
- package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
- package/pipeline/scripts/smoke-figma-sync.sh +0 -149
- package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
- package/pipeline/skills/figma-android/README.md +0 -38
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
- package/pipeline/skills/figma-common/README.md +0 -64
- package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
- package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
- package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
- package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
- package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
- package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
- package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
- /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
- /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# Sub-Component Graph Registry
|
|
2
|
-
|
|
3
|
-
Discovers which Figma components use other components as instances (sub-components).
|
|
4
|
-
Produces `Shared/Figma/sub-component-graph.json` via the Figma REST API.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Script
|
|
9
|
-
|
|
10
|
-
`.instructions/figma/figma-to-swiftui/scripts/figma-subcomponent-graph.py`
|
|
11
|
-
|
|
12
|
-
## Output
|
|
13
|
-
|
|
14
|
-
`{repos.common.path}/Shared/Figma/sub-component-graph.json`
|
|
15
|
-
|
|
16
|
-
## Usage
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# From repo root
|
|
20
|
-
python3 .instructions/figma/figma-to-swiftui/scripts/figma-subcomponent-graph.py
|
|
21
|
-
|
|
22
|
-
# Preview without API calls
|
|
23
|
-
python3 .instructions/figma/figma-to-swiftui/scripts/figma-subcomponent-graph.py --dry-run
|
|
24
|
-
|
|
25
|
-
# Skip Visual Assets (icons/flags - rarely have sub-components)
|
|
26
|
-
python3 .instructions/figma/figma-to-swiftui/scripts/figma-subcomponent-graph.py --skip-assets
|
|
27
|
-
|
|
28
|
-
# Verbose output
|
|
29
|
-
python3 .instructions/figma/figma-to-swiftui/scripts/figma-subcomponent-graph.py --verbose
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Prerequisites
|
|
33
|
-
|
|
34
|
-
- `FIGMA_ACCESS_TOKEN` in macOS Keychain
|
|
35
|
-
- `component-catalog.json` generated (run `FigmaRegistryUtility catalog` first)
|
|
36
|
-
|
|
37
|
-
## How It Works
|
|
38
|
-
|
|
39
|
-
1. Reads `component-catalog.json` for the full component list + Figma URLs
|
|
40
|
-
2. Groups components by Figma file key (3 files)
|
|
41
|
-
3. Batch-fetches node trees via `GET /v1/files/:key/nodes?ids=...` (25 nodes/request)
|
|
42
|
-
4. Walks each node subtree for `INSTANCE` children
|
|
43
|
-
5. Resolves `INSTANCE.componentId` → catalog component via:
|
|
44
|
-
- Response `components` map → `componentSetId` (variant → parent set)
|
|
45
|
-
- Direct nodeId match against catalog
|
|
46
|
-
- Fallback: sanitized name match against catalog
|
|
47
|
-
6. Computes reverse `usedBy` map
|
|
48
|
-
7. Writes `sub-component-graph.json`
|
|
49
|
-
|
|
50
|
-
## Registry Format
|
|
51
|
-
|
|
52
|
-
```json
|
|
53
|
-
{
|
|
54
|
-
"version": "1.0",
|
|
55
|
-
"generatedAt": "2026-02-25T...",
|
|
56
|
-
"source": "Figma REST API /files/:key/nodes",
|
|
57
|
-
"stats": {
|
|
58
|
-
"totalComponents": 2049,
|
|
59
|
-
"componentsWithSubComponents": 150,
|
|
60
|
-
"componentsUsedAsSub": 80,
|
|
61
|
-
"apiCalls": 82,
|
|
62
|
-
"errors": 0
|
|
63
|
-
},
|
|
64
|
-
"graph": {
|
|
65
|
-
"9047:386": {
|
|
66
|
-
"name": "AvatarMembership",
|
|
67
|
-
"subComponents": ["IconBrand", "LabelBadge"],
|
|
68
|
-
"usedBy": ["ProfileCard", "HeaderMenu"],
|
|
69
|
-
"unresolvedInstances": 3
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Fields
|
|
76
|
-
|
|
77
|
-
| Field | Description |
|
|
78
|
-
|-------|-------------|
|
|
79
|
-
| `subComponents` | Catalog component names used as INSTANCE children |
|
|
80
|
-
| `usedBy` | Catalog components that use this component (reverse map) |
|
|
81
|
-
| `unresolvedInstances` | Instance count that couldn't be mapped to catalog (internal/private layers) |
|
|
82
|
-
|
|
83
|
-
## Consumers
|
|
84
|
-
|
|
85
|
-
- `confluence-component-status.py` - reads graph to compute readiness (ready/blocked)
|
|
86
|
-
- Phase 3C (nested components) - can reference graph for dependency info
|
|
87
|
-
- Phase 4B (view implementation) - knows which sub-components to import
|
|
88
|
-
|
|
89
|
-
## When to Re-run
|
|
90
|
-
|
|
91
|
-
- After Figma design changes that add/remove component nesting
|
|
92
|
-
- After `FigmaRegistryUtility catalog` produces a new catalog
|
|
93
|
-
- One-time initial run is sufficient for current status page needs
|
package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# UITESTING IDENTIFIER NAMING
|
|
2
|
-
|
|
3
|
-
Naming rules for UIComponents testing identifiers.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Format
|
|
8
|
-
|
|
9
|
-
| Type | Key (PascalCase.Dot) | Value (snake_case) |
|
|
10
|
-
|------|-----|-------|
|
|
11
|
-
| Static | `<Component>.<Element>` | `<component>_<element>` |
|
|
12
|
-
| List Item | `<Component>.Item.<Element>` | `<component>_item_<element>_%@` |
|
|
13
|
-
| Variant | `<Component>.Item.<Variant>` | `<component>_item_<variant>_%@` |
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Rules
|
|
18
|
-
|
|
19
|
-
**Key:** PascalCase segments, dots as separators, max 5 levels
|
|
20
|
-
**Value:** All lowercase, underscores as separators, max 100 chars, `%@` for dynamic params
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Usage in Swift
|
|
25
|
-
|
|
26
|
-
```swift
|
|
27
|
-
import UITestingIdentifiers
|
|
28
|
-
|
|
29
|
-
// Static
|
|
30
|
-
.accessibilityIdentifier(UITestingIdentifierKey.Component.element.identifier)
|
|
31
|
-
|
|
32
|
-
// Dynamic (List)
|
|
33
|
-
.accessibilityIdentifier(UITestingIdentifierKey.Component.Item.label.with(index).identifier)
|
|
34
|
-
|
|
35
|
-
// Multiple Parameters
|
|
36
|
-
.accessibilityIdentifier(UITestingIdentifierKey.SeatMap.Seat.number.with(row, column).identifier)
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## Common Elements
|
|
42
|
-
|
|
43
|
-
| Element | Key Suffix | Description |
|
|
44
|
-
|---------|------------|-------------|
|
|
45
|
-
| Title | `.Title` | Main title text |
|
|
46
|
-
| Subtitle | `.Subtitle` | Secondary text |
|
|
47
|
-
| ActionButton | `.ActionButton` | Primary action |
|
|
48
|
-
| CloseButton | `.CloseButton` | Dismiss/close |
|
|
49
|
-
| Item | `.Item.<Element>` | List/grid items |
|
|
50
|
-
| Header | `.Header` | Section header |
|
|
51
|
-
| Footer | `.Footer` | Section footer |
|
|
52
|
-
| Image | `.Image` | Image element |
|
|
53
|
-
| Badge | `.Badge` | Badge/tag |
|
|
54
|
-
| Link | `.Link` | Text link |
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Context-Aware Identifiers
|
|
59
|
-
|
|
60
|
-
Identifiers cascade via `UIIdentifierContext` EnvironmentKey. Parent views append context segments; child components automatically get prefixed identifiers.
|
|
61
|
-
|
|
62
|
-
| Level | Modifier | Accumulates |
|
|
63
|
-
|-------|----------|-------------|
|
|
64
|
-
| Screen | `.identifierContext(.PassengerList.screen)` | `["passenger_list"]` |
|
|
65
|
-
| Section | `.identifierContext(.PassengerList.search)` | `["passenger_list", "search"]` |
|
|
66
|
-
| Component | `.accessibilityIdentifier(.TurkishButton.button)` | → `passenger_list_search_turkishbutton_button` |
|
|
67
|
-
|
|
68
|
-
Both type-safe and raw string accepted:
|
|
69
|
-
|
|
70
|
-
```swift
|
|
71
|
-
.identifierContext(.PassengerList.screen) // type-safe UITestingIdentifierKey (recommended)
|
|
72
|
-
.identifierContext("passenger_list") // raw string (fallback)
|
|
73
|
-
.testIdentifier(.TurkishButton.button) // alias for accessibilityIdentifier
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Context keys are regular UITestingIdentifierKey entries - add via the tool:
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
UITestingIdentifierTool add --key 'PassengerList.screen' --value 'passenger_list'
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Rules for Context Segments
|
|
83
|
-
|
|
84
|
-
- **snake_case** - same as identifier values
|
|
85
|
-
- **Prefer type-safe keys** - `.identifierContext(.PassengerList.screen)` over raw strings
|
|
86
|
-
- **Descriptive** - `passenger_list`, not `pl` or `screen1`
|
|
87
|
-
- **Stable** - don't use indices unless necessary (use `.with()` for dynamic)
|
|
88
|
-
- **No component name** - the component's own identifier already includes it
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Validation
|
|
93
|
-
|
|
94
|
-
1. Key follows PascalCase.Dot.Notation
|
|
95
|
-
2. Value is snake_case
|
|
96
|
-
3. Value length <= 100 characters
|
|
97
|
-
4. No spaces or special characters
|
|
98
|
-
5. Unique within component scope
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
# FIGMA TOOLS REFERENCE
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
## 1. MCP TOOLS
|
|
6
|
-
|
|
7
|
-
### 1.1 Tool Inventory
|
|
8
|
-
|
|
9
|
-
| Tool | Local | Remote | Purpose | Returns |
|
|
10
|
-
|------|-------|--------|---------|---------|
|
|
11
|
-
| `get_design_context` | yes | yes | Code generation from design node | Code + asset URLs |
|
|
12
|
-
| `get_variable_defs` | yes | yes | Resolved design tokens for node | `{"tokenName": "value"}` |
|
|
13
|
-
| `get_code_connect_map` | yes | yes | Component source mappings for node | `{"nodeId": {src, name}}` |
|
|
14
|
-
| `add_code_connect_map` | yes | yes | Register component mapping in Figma | Success / failure |
|
|
15
|
-
| `get_screenshot` | yes | yes | Visual PNG snapshot of node | PNG image |
|
|
16
|
-
| `get_metadata` | yes | yes | Layer hierarchy as XML | XML (IDs, types, positions) |
|
|
17
|
-
| `get_figjam` | yes | yes | FigJam board content extraction | FigJam data |
|
|
18
|
-
| `create_design_system_rules` | yes | yes | Generate design system rules prompt | Rules prompt text |
|
|
19
|
-
| `generate_diagram` | yes | yes | Create FigJam diagram from Mermaid | FigJam diagram URL |
|
|
20
|
-
| `get_code_connect_suggestions` | yes | yes | Auto-detect mapping candidates | Candidate list |
|
|
21
|
-
| `send_code_connect_mappings` | yes | yes | Batch confirm Code Connect mappings | Confirmation |
|
|
22
|
-
| `generate_figma_design` | no | yes | Push web page or UI to Figma file | Figma file URL |
|
|
23
|
-
| `whoami` | no | yes | Verify OAuth authentication | Authenticated user info |
|
|
24
|
-
|
|
25
|
-
**Local prefix:** `mcp__figma__` - **Remote prefix:** `mcp__figma-remote__`
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
### 1.2 Tool Calls - Local MCP
|
|
30
|
-
|
|
31
|
-
**Prefix:** `mcp__figma__`
|
|
32
|
-
**Endpoint:** `http://127.0.0.1:3845/mcp`
|
|
33
|
-
**Requirement:** Figma Desktop running + Dev Mode enabled (Shift+D)
|
|
34
|
-
**Note:** `nodeId` is optional on local - omit to use the currently selected node.
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
mcp__figma__get_design_context(nodeId?: "X:Y", dirForAssetWrites?: "/abs/path", forceCode?: true)
|
|
38
|
-
mcp__figma__get_variable_defs(nodeId?: "X:Y")
|
|
39
|
-
mcp__figma__get_code_connect_map(nodeId?: "X:Y")
|
|
40
|
-
mcp__figma__add_code_connect_map(nodeId?: "X:Y", source: "path/to/File.swift", componentName: "Name", label: "SwiftUI")
|
|
41
|
-
mcp__figma__get_screenshot(nodeId?: "X:Y")
|
|
42
|
-
mcp__figma__get_metadata(nodeId?: "X:Y")
|
|
43
|
-
mcp__figma__get_figjam(nodeId: "X:Y")
|
|
44
|
-
mcp__figma__create_design_system_rules()
|
|
45
|
-
mcp__figma__generate_diagram(name: "Title", mermaidSyntax: "graph LR ...")
|
|
46
|
-
mcp__figma__get_code_connect_suggestions(nodeId?: "X:Y")
|
|
47
|
-
mcp__figma__send_code_connect_mappings(nodeId: "X:Y", mappings: [...])
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
### 1.3 Tool Calls - Remote MCP
|
|
53
|
-
|
|
54
|
-
**Prefix:** `mcp__figma-remote__`
|
|
55
|
-
**Endpoint:** `https://mcp.figma.com/mcp`
|
|
56
|
-
**Requirement:** OAuth authentication
|
|
57
|
-
**Note:** `fileKey` + `nodeId` are REQUIRED on remote for all file-scoped tools.
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
mcp__figma-remote__get_design_context(fileKey: "abc", nodeId: "X:Y", forceCode?: true)
|
|
61
|
-
mcp__figma-remote__get_variable_defs(fileKey: "abc", nodeId: "X:Y")
|
|
62
|
-
mcp__figma-remote__get_code_connect_map(fileKey: "abc", nodeId: "X:Y")
|
|
63
|
-
mcp__figma-remote__add_code_connect_map(fileKey: "abc", nodeId: "X:Y", source: "path/to/File.swift", componentName: "Name", label: "SwiftUI")
|
|
64
|
-
mcp__figma-remote__get_screenshot(fileKey: "abc", nodeId: "X:Y")
|
|
65
|
-
mcp__figma-remote__get_metadata(fileKey: "abc", nodeId: "X:Y")
|
|
66
|
-
mcp__figma-remote__get_figjam(fileKey: "abc", nodeId: "X:Y")
|
|
67
|
-
mcp__figma-remote__create_design_system_rules()
|
|
68
|
-
mcp__figma-remote__generate_diagram(name: "Title", mermaidSyntax: "graph LR ...")
|
|
69
|
-
mcp__figma-remote__get_code_connect_suggestions(fileKey: "abc", nodeId: "X:Y")
|
|
70
|
-
mcp__figma-remote__send_code_connect_mappings(fileKey: "abc", nodeId: "X:Y", mappings: [...])
|
|
71
|
-
mcp__figma-remote__generate_figma_design(outputMode: "newFile", fileName: "Name")
|
|
72
|
-
mcp__figma-remote__whoami()
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
### 1.4 Parameters
|
|
78
|
-
|
|
79
|
-
| Parameter | Format | Example |
|
|
80
|
-
|-----------|--------|---------|
|
|
81
|
-
| `nodeId` | `"X:Y"` (colon) or `"X-Y"` (hyphen) | `"123:456"` |
|
|
82
|
-
| `fileKey` | Alphanumeric string from Figma URL | `"pqrs123abc"` |
|
|
83
|
-
| `dirForAssetWrites` | Absolute path to `.xcassets` dir | `"/Users/me/Project/Assets.xcassets"` |
|
|
84
|
-
| `forceCode` | Boolean | `true` |
|
|
85
|
-
| `componentName` | PascalCase string | `"ButtonPrimary"` |
|
|
86
|
-
| `source` | Relative or absolute file path | `"Sources/UIComponents/Button.swift"` |
|
|
87
|
-
| `label` | Framework label string | `"SwiftUI"` |
|
|
88
|
-
| `mermaidSyntax` | Mermaid.js diagram string | `"graph LR A --> B"` |
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
### 1.5 Fallback Strategy
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
LOCAL → fails? → REMOTE → fails? → STOP (report to user, do not retry)
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Prefer local for all active development. Use remote only when Figma Desktop is unavailable.
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
### 1.6 Return Formats
|
|
103
|
-
|
|
104
|
-
**get_design_context**
|
|
105
|
-
Returns generated code + asset URLs. If response is XML instead of code, the design node is too large - extract sublayer `nodeId` values from the XML and call again on each sublayer.
|
|
106
|
-
|
|
107
|
-
**get_variable_defs**
|
|
108
|
-
```json
|
|
109
|
-
{ "Spacing/Spacing8": "8", "Text/primary": "#1A1A1A", "Color/brand": "#E81932" }
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
**get_code_connect_map**
|
|
113
|
-
```json
|
|
114
|
-
{ "123:456": { "codeConnectSrc": "Sources/UIComponents/Button.swift", "codeConnectName": "Button" } }
|
|
115
|
-
```
|
|
116
|
-
Empty `{}` means no mapping registered for that node.
|
|
117
|
-
|
|
118
|
-
**get_metadata**
|
|
119
|
-
XML containing node IDs, layer types, names, positions, and sizes. Use to identify sublayer node IDs when `get_design_context` returns XML.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
### 1.7 Rate Limits (MCP Remote - effective November 2025)
|
|
124
|
-
|
|
125
|
-
| Plan | Per Minute | Per Day |
|
|
126
|
-
|------|-----------|---------|
|
|
127
|
-
| Viewer / Collaborator | - | 6 / month total |
|
|
128
|
-
| Dev / Full Pro | 15 | 200 |
|
|
129
|
-
| Dev / Full Org | 20 | 200 |
|
|
130
|
-
| Dev / Full Enterprise | 20 | 600 |
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## 2. DEVELOPER API
|
|
135
|
-
|
|
136
|
-
### 2.1 Base URL + Auth
|
|
137
|
-
|
|
138
|
-
```
|
|
139
|
-
Base: https://api.figma.com/v1
|
|
140
|
-
Header: X-Figma-Token: figd_your_token_here
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
**Retrieve token from macOS Keychain:**
|
|
144
|
-
```bash
|
|
145
|
-
export TOKEN=$("$HOME/.claude/lib/credential-store.sh" get \1)
|
|
146
|
-
curl -H "X-Figma-Token: $TOKEN" "https://api.figma.com/v1/..."
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
### 2.2 Key Endpoints
|
|
152
|
-
|
|
153
|
-
| Endpoint | Method | Description |
|
|
154
|
-
|----------|--------|-------------|
|
|
155
|
-
| `/files/:key` | GET | Full file document tree |
|
|
156
|
-
| `/files/:key/nodes?ids=X:Y` | GET | Specific nodes by ID |
|
|
157
|
-
| `/files/:key/images?ids=X:Y` | GET | Export node as image |
|
|
158
|
-
| `/files/:key/variables/local` | GET | Local variable definitions |
|
|
159
|
-
| `/files/:key/variables/published` | GET | Published variable library |
|
|
160
|
-
| `/files/:key/components` | GET | All components in file |
|
|
161
|
-
| `/files/:key/component_sets` | GET | All component sets in file |
|
|
162
|
-
| `/files/:key/styles` | GET | All styles in file |
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
### 2.3 Common Calls
|
|
167
|
-
|
|
168
|
-
**Get specific node:**
|
|
169
|
-
```bash
|
|
170
|
-
curl -H "X-Figma-Token: $TOKEN" \
|
|
171
|
-
"https://api.figma.com/v1/files/FILE_KEY/nodes?ids=123:456"
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
**Export image:**
|
|
175
|
-
```bash
|
|
176
|
-
curl -H "X-Figma-Token: $TOKEN" \
|
|
177
|
-
"https://api.figma.com/v1/images/FILE_KEY?ids=123:456&format=png&scale=2"
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
**Get local variables:**
|
|
181
|
-
```bash
|
|
182
|
-
curl -H "X-Figma-Token: $TOKEN" \
|
|
183
|
-
"https://api.figma.com/v1/files/FILE_KEY/variables/local"
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
### 2.4 OAuth Scopes
|
|
189
|
-
|
|
190
|
-
| Scope | Description |
|
|
191
|
-
|-------|-------------|
|
|
192
|
-
| `file_content:read` | Read file contents and layer data |
|
|
193
|
-
| `file_metadata:read` | Read file metadata |
|
|
194
|
-
| `file_variables:read` | Read variables and design tokens |
|
|
195
|
-
| `file_comments:read` | Read file comments |
|
|
196
|
-
| `code_connect:read` | Read Code Connect mappings |
|
|
197
|
-
| `code_connect:write` | Publish Code Connect mappings (required for `figma connect publish`) |
|
|
198
|
-
| `file_dev_resources:read` | Read dev resources |
|
|
199
|
-
| `projects:read` | Read team projects |
|
|
200
|
-
| `webhooks:write` | Manage webhooks |
|
|
201
|
-
|
|
202
|
-
**Deprecated:** `files:read` - replace with `file_content:read` + `file_metadata:read`.
|
|
203
|
-
**Note:** Personal Access Tokens (PATs) are capped at 90-day expiry.
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
### 2.5 Error Codes
|
|
208
|
-
|
|
209
|
-
| Status | Meaning | Action |
|
|
210
|
-
|--------|---------|--------|
|
|
211
|
-
| 200 | Success | - |
|
|
212
|
-
| 400 | Bad request | Check parameter format |
|
|
213
|
-
| 403 | Forbidden | Check token validity and scopes |
|
|
214
|
-
| 404 | Not found | Check fileKey and nodeId |
|
|
215
|
-
| 429 | Rate limited | Wait for `X-RateLimit-Reset` header timestamp |
|
|
216
|
-
| 500 | Server error | Retry after delay |
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## 3. QUICK REFERENCE
|
|
221
|
-
|
|
222
|
-
### 3.1 URL to IDs
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
URL format: https://figma.com/design/{fileKey}/{fileName}?node-id={int1}-{int2}
|
|
226
|
-
|
|
227
|
-
Example: https://figma.com/design/pqrs123/MyFile?node-id=123-456
|
|
228
|
-
fileKey: pqrs123
|
|
229
|
-
nodeId: 123:456 (convert hyphen → colon)
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
Branch URLs: use `branchKey` (not `fileKey`) when URL contains `/branch/:branchKey/`.
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
### 3.2 When to Use What
|
|
237
|
-
|
|
238
|
-
| Need | Use |
|
|
239
|
-
|------|-----|
|
|
240
|
-
| Inspect design during active dev | Local MCP |
|
|
241
|
-
| Register Code Connect mapping | Local MCP only |
|
|
242
|
-
| Get design tokens / variables | Local or Remote MCP (get_variable_defs) |
|
|
243
|
-
| Desktop not available | Remote MCP |
|
|
244
|
-
| CI/CD pipeline or automation | Remote MCP or REST API |
|
|
245
|
-
| Batch export images | REST API |
|
|
246
|
-
| Auth debugging | Remote MCP whoami |
|
|
247
|
-
| Design too large (XML response) | Drill into sublayer nodeIds |
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
### 3.3 Troubleshooting
|
|
252
|
-
|
|
253
|
-
| Symptom | Cause | Fix |
|
|
254
|
-
|---------|-------|-----|
|
|
255
|
-
| Connection refused (127.0.0.1:3845) | Figma Desktop not running | Open Figma Desktop, enable Dev Mode (Shift+D) |
|
|
256
|
-
| 403 Forbidden | Invalid or expired token / missing scope | Verify token; check scopes; run whoami |
|
|
257
|
-
| get_design_context returns XML | Node too large | Use get_metadata to find sublayer nodeIds, call on each |
|
|
258
|
-
| get_code_connect_map returns `{}` | Component not registered | Use add_code_connect_map via local MCP |
|
|
259
|
-
| 429 Too Many Requests | Rate limit hit | Wait for X-RateLimit-Reset timestamp |
|
|
260
|
-
| generate_figma_design unavailable | Local MCP limitation | Use remote MCP only for this tool |
|
|
261
|
-
| get_variable_defs returns empty | No variables bound to node | Try parent node or REST API `/files/:key/variables/local` |
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
# VIEWINSPECTOR REFERENCE
|
|
2
|
-
|
|
3
|
-
ViewInspector library for SwiftUI view hierarchy inspection and unit testing.
|
|
4
|
-
|
|
5
|
-
Package: `https://github.com/nalexn/ViewInspector`
|
|
6
|
-
Version: `0.10.3` (latest as of Sep 2025)
|
|
7
|
-
License: MIT
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## FRAMEWORK SUPPORT
|
|
12
|
-
|
|
13
|
-
| Framework | Supported | Notes |
|
|
14
|
-
|-----------|-----------|-------|
|
|
15
|
-
| XCTest | Yes | Full support, RECOMMENDED |
|
|
16
|
-
| Swift Testing | Warning | Known issues with @Test (GitHub #319) - use XCTest |
|
|
17
|
-
| Swift 6.0+ | Yes | Use `.implicitAnyView()` for implicit AnyView wrappers |
|
|
18
|
-
| iOS 17+ / iOS 26 | Yes | v0.10.3 fixes accessibilityIdentifier on iOS 26 |
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## SETUP
|
|
23
|
-
|
|
24
|
-
```swift
|
|
25
|
-
import ViewInspector
|
|
26
|
-
import XCTest
|
|
27
|
-
|
|
28
|
-
extension MyComponent: Inspectable { }
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## VIEW TRAVERSAL
|
|
34
|
-
|
|
35
|
-
```swift
|
|
36
|
-
// By type
|
|
37
|
-
try view.inspect().find(ViewType.Text.self)
|
|
38
|
-
try view.inspect().find(ViewType.Button.self)
|
|
39
|
-
|
|
40
|
-
// By content
|
|
41
|
-
try view.inspect().find(text: "Submit")
|
|
42
|
-
try view.inspect().find(button: "Submit")
|
|
43
|
-
|
|
44
|
-
// By accessibility identifier
|
|
45
|
-
try view.inspect().find(viewWithAccessibilityIdentifier: "submit_button")
|
|
46
|
-
|
|
47
|
-
// By index (Swift 6+: use .implicitAnyView())
|
|
48
|
-
try view.inspect().implicitAnyView().vStack().text(0)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## READING VALUES
|
|
54
|
-
|
|
55
|
-
```swift
|
|
56
|
-
// Text content
|
|
57
|
-
try text.string()
|
|
58
|
-
|
|
59
|
-
// Font / Color
|
|
60
|
-
try text.attributes().font()
|
|
61
|
-
try text.attributes().foregroundColor()
|
|
62
|
-
|
|
63
|
-
// Image name
|
|
64
|
-
try image.actualImage().name()
|
|
65
|
-
|
|
66
|
-
// Accessibility
|
|
67
|
-
try view.accessibilityLabel().string()
|
|
68
|
-
try view.accessibilityIdentifier()
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
|
-
## TRIGGERING ACTIONS
|
|
74
|
-
|
|
75
|
-
```swift
|
|
76
|
-
try button.tap()
|
|
77
|
-
try toggle.tap()
|
|
78
|
-
try textField.setInput("New Value")
|
|
79
|
-
try view.callOnTapGesture()
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## STATE TESTING
|
|
85
|
-
|
|
86
|
-
```swift
|
|
87
|
-
// @State
|
|
88
|
-
let view = Counter()
|
|
89
|
-
let button = try view.inspect().find(ViewType.Button.self)
|
|
90
|
-
XCTAssertEqual(try button.labelView().text().string(), "Count: 0")
|
|
91
|
-
try button.tap()
|
|
92
|
-
XCTAssertEqual(try button.labelView().text().string(), "Count: 1")
|
|
93
|
-
|
|
94
|
-
// @Binding
|
|
95
|
-
var value = false
|
|
96
|
-
let binding = Binding(get: { value }, set: { value = $0 })
|
|
97
|
-
let view = ToggleView(isOn: binding)
|
|
98
|
-
try view.inspect().find(ViewType.Toggle.self).tap()
|
|
99
|
-
XCTAssertTrue(value)
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
---
|
|
103
|
-
|
|
104
|
-
## FIGMA ARTIFACT CROSS-CHECK
|
|
105
|
-
|
|
106
|
-
```swift
|
|
107
|
-
func testMatchesFigmaArtifact() throws {
|
|
108
|
-
let artifact = try loadFigmaArtifact(named: "MyComponent")
|
|
109
|
-
let view = MyComponent()
|
|
110
|
-
|
|
111
|
-
for expectedText in artifact.texts {
|
|
112
|
-
XCTAssertNotNil(try view.inspect().find(text: expectedText))
|
|
113
|
-
}
|
|
114
|
-
for expectedId in artifact.accessibilityIdentifiers {
|
|
115
|
-
XCTAssertNotNil(try view.inspect().find(viewWithAccessibilityIdentifier: expectedId))
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## TEST FILE STRUCTURE
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
Source: Sources/<Module>/Components/<Path>/<Component>.swift
|
|
126
|
-
Test: Tests/<Module>Tests/ViewInspector/Components/<Path>/<Component>ViewInspectorTests.swift
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Full layout:
|
|
130
|
-
```
|
|
131
|
-
Tests/<Module>Tests/
|
|
132
|
-
├── ViewInspector/Components/<Path>/<Component>ViewInspectorTests.swift
|
|
133
|
-
├── Unit/Components/<Path>/<Component>Tests.swift
|
|
134
|
-
├── FigmaArtifacts/<Component>_figma_artifact.json
|
|
135
|
-
└── __Snapshots__/<Component>ViewInspectorTests/testDefaultState.1.png
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
## COMMON ISSUES
|
|
141
|
-
|
|
142
|
-
| Issue | Solution |
|
|
143
|
-
|-------|----------|
|
|
144
|
-
| `Type is not Inspectable` | Add `extension MyView: Inspectable { }` |
|
|
145
|
-
| `View not found` | Use `.implicitAnyView()` for Swift 6+ |
|
|
146
|
-
| `Cannot find in ForEach` | Use `.forEach().view(Type.self, index)` |
|
|
147
|
-
| `Async view not loaded` | Use `ViewHosting.host()` and wait |
|