@mmerterden/multi-agent-pipeline 11.1.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -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/_common.mjs +9 -1
- package/install/_dev-only-files.mjs +0 -6
- package/install/claude.mjs +45 -18
- 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/build-stack-plugins.mjs +1 -1
- 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 +21 -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/backlog/BACKLOG.md +32 -0
- package/pipeline/skills/shared/external/backlog/SKILL.md +49 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +48 -0
- package/pipeline/skills/shared/external/skill-creator/audit.md +59 -0
- package/pipeline/skills/shared/external/skill-creator/checklist.md +32 -0
- package/pipeline/skills/shared/external/skill-creator/examples.md +65 -0
- package/pipeline/skills/shared/external/skill-creator/label-check.md +43 -0
- package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +83 -0
- package/pipeline/skills/shared/external/skill-creator/template.md +67 -0
- package/pipeline/skills/skills-index.md +4 -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,514 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: figma-setup
|
|
3
|
-
description: One-time environment setup for Figma-to-SwiftUI workflow. Verifies MCP connectivity, API credentials, Code Connect CLI, and FigmaRegistryUtility.
|
|
4
|
-
user-invocable: true
|
|
5
|
-
argument-hint: [run | status | reset | retrieve-token | save-token]
|
|
6
|
-
allowed-tools: Bash, Read, Write, AskUserQuestion
|
|
7
|
-
status: wip-v5
|
|
8
|
-
sourced-from: upstream/figma-setup
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# /figma-setup - Environment Setup
|
|
12
|
-
|
|
13
|
-
One-time environment setup for the Figma-to-SwiftUI workflow. Run before your first `/figma` invocation, or when `/figma` reports missing prerequisites.
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Parse Input
|
|
18
|
-
|
|
19
|
-
| Argument | Action |
|
|
20
|
-
|----------|--------|
|
|
21
|
-
| `run` (default) | Execute full setup checks |
|
|
22
|
-
| `status` | Read and display marker file |
|
|
23
|
-
| `reset` | Delete marker file, re-run all checks |
|
|
24
|
-
| `retrieve-token` | Retrieve remote MCP OAuth token (see Token Management below) |
|
|
25
|
-
| `save-token` | Save a remote MCP OAuth token to keychain (see Token Management below) |
|
|
26
|
-
|
|
27
|
-
**Marker file:** `{repos.packagesContainer}/{repos.artifactsRepo}/ImplementationArtifacts/Figma/.setup-verified.json`
|
|
28
|
-
|
|
29
|
-
For `status`: read and display the marker file. If it doesn't exist, tell the user to run `/figma-setup run`.
|
|
30
|
-
For `reset`: delete the marker file, then execute `run`.
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Checks
|
|
35
|
-
|
|
36
|
-
Execute each check in order. For each:
|
|
37
|
-
1. Run the check command
|
|
38
|
-
2. PASS → record result, move to next
|
|
39
|
-
3. FAIL → guide user through fix, re-check
|
|
40
|
-
4. User says "skip" → record as `skipped`, move to next
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
### CHECK 1: Git User
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
git config user.name
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
**PASS:** Non-empty output → store as `gitUser`.
|
|
51
|
-
|
|
52
|
-
**FAIL:** Ask user for their name, then:
|
|
53
|
-
```bash
|
|
54
|
-
git config user.name "<NAME>"
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
### CHECK 2: Figma Local MCP
|
|
60
|
-
|
|
61
|
-
Test connectivity by calling the local MCP tool:
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
mcp__figma__get_metadata(nodeId: "0:1")
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**PASS:** Returns data → local MCP is connected.
|
|
68
|
-
|
|
69
|
-
**FAIL:** Tell the user:
|
|
70
|
-
|
|
71
|
-
> To enable Figma Local MCP:
|
|
72
|
-
> 1. Open **Figma Desktop** (download from https://www.figma.com/downloads/)
|
|
73
|
-
> 2. Open any design file
|
|
74
|
-
> 3. Press **Shift+D** to enable Dev Mode
|
|
75
|
-
> 4. MCP server starts automatically on `http://127.0.0.1:3845/mcp`
|
|
76
|
-
|
|
77
|
-
Ask: "Confirm when Figma Desktop is running with Dev Mode enabled, or say 'skip'."
|
|
78
|
-
|
|
79
|
-
Re-check after confirmation. Record `skipped` if user skips.
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
### CHECK 3: Figma Remote MCP
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
mcp__figma-remote__whoami()
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
**PASS:** Returns authenticated user info.
|
|
90
|
-
|
|
91
|
-
**FAIL:** Tell the user:
|
|
92
|
-
|
|
93
|
-
> To enable Figma Remote MCP:
|
|
94
|
-
> 1. Your editor should prompt OAuth authentication via browser
|
|
95
|
-
> 2. Complete the consent flow in the browser
|
|
96
|
-
> 3. Return here and confirm
|
|
97
|
-
|
|
98
|
-
Ask: "Confirm when OAuth is complete, or say 'skip'."
|
|
99
|
-
|
|
100
|
-
Re-check after confirmation. Record `skipped` if user skips.
|
|
101
|
-
|
|
102
|
-
**CRITICAL:** At least one of CHECK 2 or CHECK 3 must pass. If BOTH are skipped → HALT:
|
|
103
|
-
```
|
|
104
|
-
At least one Figma MCP connection (local or remote) is required. Cannot proceed.
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
### CHECK 3b: MCP OAuth Token for Scripts (FIGMA_MCP_TOKEN)
|
|
110
|
-
|
|
111
|
-
Scripts like `remote-mcp-fetch.py` need the MCP OAuth token to call remote MCP outside of chat context. This check extracts it from Claude Code credentials and saves it to keychain.
|
|
112
|
-
|
|
113
|
-
**Only run if CHECK 3 passed.** If CHECK 3 was skipped, skip this too.
|
|
114
|
-
|
|
115
|
-
#### 3b-a. Check if token already exists and works
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
TOKEN=$("$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null) && [ -n "$TOKEN" ] && echo "TOKEN_EXISTS" || echo "TOKEN_MISSING"
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
If TOKEN_EXISTS, verify it works:
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
TOKEN=$("$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null) && curl -s -o /dev/null -w "%{http_code}" -X POST "https://mcp.figma.com/mcp" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -H "Authorization: Bearer $TOKEN" -d '{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{},"clientInfo":{"name":"setup-check","version":"1.0.0"},"protocolVersion":"2025-03-26"},"id":1}'
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
- `200` → PASS, token is valid
|
|
128
|
-
- `401` → token expired or invalid, proceed to 3b-b
|
|
129
|
-
- Other → network issue, retry
|
|
130
|
-
|
|
131
|
-
#### 3b-b. Extract from Claude Code credentials
|
|
132
|
-
|
|
133
|
-
Claude Code stores MCP OAuth tokens in macOS Keychain under `Claude Code-credentials`. Extract the `figma-remote` access token:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
python3 -c "
|
|
137
|
-
import subprocess, os, re, json
|
|
138
|
-
raw = subprocess.check_output(['security', 'find-generic-password', '-s', 'Claude Code-credentials', '-a', os.environ['USER'], '-w'], stderr=subprocess.DEVNULL).decode()
|
|
139
|
-
match = re.search(r'\"figma-remote\|[^\"]+\":\{[^}]*\"accessToken\":\"([^\"]+)\"', raw)
|
|
140
|
-
if match:
|
|
141
|
-
print(match.group(1))
|
|
142
|
-
else:
|
|
143
|
-
print('EXTRACT_FAILED')
|
|
144
|
-
"
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
- If output starts with `figu_` → valid OAuth token
|
|
148
|
-
- If `EXTRACT_FAILED` → Claude Code has no figma-remote credentials
|
|
149
|
-
|
|
150
|
-
#### 3b-c. If extraction succeeded - save to keychain
|
|
151
|
-
|
|
152
|
-
```bash
|
|
153
|
-
TOKEN="<extracted_token>" && "$HOME/.claude/lib/credential-store.sh" set \1 \"\2\" >/dev/null 2>&1 && echo "MCP_TOKEN_STORED" || echo "MCP_TOKEN_STORE_FAILED"
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
**IMPORTANT:** Do NOT echo the token in chat. Capture the python3 output into a variable directly:
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
MCP_TOKEN=$(python3 -c "
|
|
160
|
-
import subprocess, os, re
|
|
161
|
-
raw = subprocess.check_output(['security', 'find-generic-password', '-s', 'Claude Code-credentials', '-a', os.environ['USER'], '-w'], stderr=subprocess.DEVNULL).decode()
|
|
162
|
-
match = re.search(r'\"figma-remote\|[^\\\"]+\":\{[^}]*\"accessToken\":\"([^\\\"]+)\"', raw)
|
|
163
|
-
print(match.group(1) if match else '')
|
|
164
|
-
" 2>/dev/null) && [ -n "$MCP_TOKEN" ] && "$HOME/.claude/lib/credential-store.sh" set \1 \"\2\" >/dev/null 2>&1 && echo "MCP_TOKEN_STORED" || echo "MCP_TOKEN_STORE_FAILED"
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
Then verify (repeat 3b-a verification curl).
|
|
168
|
-
|
|
169
|
-
#### 3b-d. If extraction failed
|
|
170
|
-
|
|
171
|
-
Tell the user:
|
|
172
|
-
|
|
173
|
-
> Could not extract MCP OAuth token from Claude Code credentials.
|
|
174
|
-
> This means `figma-remote` MCP has not completed OAuth yet.
|
|
175
|
-
> 1. Ensure CHECK 3 passed (remote MCP whoami works)
|
|
176
|
-
> 2. Re-run `/figma-setup` after completing remote MCP OAuth
|
|
177
|
-
|
|
178
|
-
Record as `skipped`. Scripts will fall back to extracting at runtime (slower but functional).
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
### CHECK 4: Figma API Token (Secure Clipboard Flow)
|
|
183
|
-
|
|
184
|
-
**IMPORTANT: The token must NEVER appear in chat. Use the clipboard flow below.**
|
|
185
|
-
|
|
186
|
-
#### 4a. Check if token already exists
|
|
187
|
-
|
|
188
|
-
```bash
|
|
189
|
-
"$HOME/.claude/lib/credential-store.sh" get \1 >/dev/null 2>&1 && echo "TOKEN_EXISTS" || echo "TOKEN_MISSING"
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
#### 4b. If TOKEN_EXISTS - verify it works
|
|
193
|
-
|
|
194
|
-
```bash
|
|
195
|
-
curl -s -o /dev/null -w "%{http_code}" -H "X-Figma-Token: $("$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null)" "https://api.figma.com/v1/me"
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
- `200` → PASS, token is valid
|
|
199
|
-
- `403` → token expired or revoked, proceed to 4c
|
|
200
|
-
- Other → network issue, retry
|
|
201
|
-
|
|
202
|
-
#### 4c. If TOKEN_MISSING or expired - secure setup
|
|
203
|
-
|
|
204
|
-
Tell the user:
|
|
205
|
-
|
|
206
|
-
> 1. Go to **https://www.figma.com/developers/api#access-tokens**
|
|
207
|
-
> 2. Click **"Get personal access token"**
|
|
208
|
-
> 3. Set expiry (note: PATs are capped at 90 days max)
|
|
209
|
-
> 4. **Copy the token to your clipboard** (Cmd+C)
|
|
210
|
-
> 5. **Do NOT paste the token in this chat**
|
|
211
|
-
> 6. Come back here and confirm
|
|
212
|
-
|
|
213
|
-
Ask: "Confirm when the token is copied to your clipboard."
|
|
214
|
-
|
|
215
|
-
After user confirms, run this SINGLE command:
|
|
216
|
-
|
|
217
|
-
```bash
|
|
218
|
-
"$HOME/.claude/lib/credential-store.sh" set \1 \"\2\" >/dev/null 2>&1 && echo "TOKEN_STORED" || echo "TOKEN_STORE_FAILED"
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
Then immediately clear clipboard:
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
pbcopy < /dev/null && echo "CLIPBOARD_CLEARED"
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
Then verify (repeat 4b). If still failing → HALT.
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
### CHECK 5: Figma API User
|
|
232
|
-
|
|
233
|
-
```bash
|
|
234
|
-
"$HOME/.claude/lib/credential-store.sh" get \1 >/dev/null 2>&1 && echo "USER_EXISTS" || echo "USER_MISSING"
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
**If USER_MISSING:**
|
|
238
|
-
|
|
239
|
-
Ask: "What is your Figma account email address?"
|
|
240
|
-
|
|
241
|
-
After user provides email:
|
|
242
|
-
|
|
243
|
-
```bash
|
|
244
|
-
"$HOME/.claude/lib/credential-store.sh" set \1 \"\2\" >/dev/null 2>&1 && echo "USER_STORED" || echo "USER_STORE_FAILED"
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
### CHECK 6: Code Connect CLI
|
|
250
|
-
|
|
251
|
-
```bash
|
|
252
|
-
npx @figma/code-connect@latest --version 2>/dev/null
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
**PASS:** Returns version number (e.g., `1.4.1`).
|
|
256
|
-
|
|
257
|
-
**FAIL:** Node.js/npm is required. Tell the user:
|
|
258
|
-
|
|
259
|
-
> Code Connect CLI requires Node.js. Install options:
|
|
260
|
-
> - Download from https://nodejs.org/ (LTS recommended)
|
|
261
|
-
> - Or: `brew install node`
|
|
262
|
-
>
|
|
263
|
-
> Code Connect uses `npx` - no global install needed.
|
|
264
|
-
|
|
265
|
-
Ask: "Confirm when Node.js is installed, or say 'skip'."
|
|
266
|
-
|
|
267
|
-
Record `skipped` if user skips. Code Connect is only needed for Phase 6.
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
### CHECK 7: FigmaRegistryUtility
|
|
272
|
-
|
|
273
|
-
```bash
|
|
274
|
-
CONFIG_PATH="{repos.packagesContainer}/{project.slug}-common" && swift run --package-path "$CONFIG_PATH" FigmaRegistryUtility --help >/dev/null 2>&1 && echo "REGISTRY_OK" || echo "REGISTRY_BUILD_NEEDED"
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
**If REGISTRY_BUILD_NEEDED:**
|
|
278
|
-
|
|
279
|
-
```bash
|
|
280
|
-
CONFIG_PATH="{repos.packagesContainer}/{project.slug}-common" && swift build --package-path "$CONFIG_PATH" --product FigmaRegistryUtility 2>&1 | tail -5
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
If build succeeds → re-check. If build fails → HALT with the build error output.
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
### CHECK 8: GitHub CLI (`gh`)
|
|
288
|
-
|
|
289
|
-
```bash
|
|
290
|
-
gh --version 2>/dev/null
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
**PASS:** Returns version (e.g., `gh version 2.x.x`).
|
|
294
|
-
|
|
295
|
-
**FAIL:** Tell the user:
|
|
296
|
-
|
|
297
|
-
> GitHub CLI is required for issue management, Projects V2, and PR workflows.
|
|
298
|
-
> Install: `brew install gh`
|
|
299
|
-
|
|
300
|
-
Ask: "Confirm when installed, or say 'skip'."
|
|
301
|
-
|
|
302
|
-
#### 8b. Authentication
|
|
303
|
-
|
|
304
|
-
```bash
|
|
305
|
-
gh auth status 2>&1
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
**PASS:** Shows logged in account.
|
|
309
|
-
|
|
310
|
-
**FAIL:** Tell the user:
|
|
311
|
-
|
|
312
|
-
> Run `gh auth login` and complete the browser flow.
|
|
313
|
-
> Required scopes: `repo`, `read:org`, `project`
|
|
314
|
-
|
|
315
|
-
Ask: "Confirm when authenticated."
|
|
316
|
-
|
|
317
|
-
#### 8c. Project scope
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
gh api graphql -f query='{ viewer { login } }' 2>&1
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
If `INSUFFICIENT_SCOPES` error mentioning `project`:
|
|
324
|
-
|
|
325
|
-
> Your token needs the `project` scope. Run:
|
|
326
|
-
> `gh auth refresh -s project -h github.com`
|
|
327
|
-
|
|
328
|
-
---
|
|
329
|
-
|
|
330
|
-
### CHECK 9: Jira Token
|
|
331
|
-
|
|
332
|
-
```bash
|
|
333
|
-
"$HOME/.claude/lib/credential-store.sh" get \1 >/dev/null 2>&1 && echo "TOKEN_EXISTS" || echo "TOKEN_MISSING"
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
#### 9a. If TOKEN_EXISTS - verify
|
|
337
|
-
|
|
338
|
-
```bash
|
|
339
|
-
curl -s -o /dev/null -w "%{http_code}" "{jira.baseUrl}/rest/api/2/myself" \
|
|
340
|
-
-H "Authorization: Bearer $("$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null)"
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
- `200` → PASS
|
|
344
|
-
- `401/403` → token expired, proceed to 9b
|
|
345
|
-
- Connection error → VPN not connected, record as `skipped (no VPN)`
|
|
346
|
-
|
|
347
|
-
#### 9b. If TOKEN_MISSING or expired
|
|
348
|
-
|
|
349
|
-
Tell the user:
|
|
350
|
-
|
|
351
|
-
> Jira token is needed for `/figma-issue` Jira integration.
|
|
352
|
-
> 1. Go to **{jira.baseUrl}/secure/ViewProfile.jspa** → **Personal Access Tokens**
|
|
353
|
-
> 2. Create a token
|
|
354
|
-
> 3. **Copy to clipboard** (Cmd+C)
|
|
355
|
-
> 4. **Do NOT paste in chat**
|
|
356
|
-
|
|
357
|
-
Ask: "Confirm when token is copied to clipboard."
|
|
358
|
-
|
|
359
|
-
```bash
|
|
360
|
-
"$HOME/.claude/lib/credential-store.sh" set \1 \"\2\" >/dev/null 2>&1 && echo "TOKEN_STORED" || echo "TOKEN_STORE_FAILED"
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
Clear clipboard:
|
|
364
|
-
```bash
|
|
365
|
-
pbcopy < /dev/null && echo "CLIPBOARD_CLEARED"
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
Verify (repeat 9a). If VPN not connected, accept as `pass (stored, not verified)`.
|
|
369
|
-
|
|
370
|
-
---
|
|
371
|
-
|
|
372
|
-
### CHECK 10: Confluence Token
|
|
373
|
-
|
|
374
|
-
```bash
|
|
375
|
-
"$HOME/.claude/lib/credential-store.sh" get \1 >/dev/null 2>&1 && echo "TOKEN_EXISTS" || echo "TOKEN_MISSING"
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
Same flow as CHECK 9 but for Confluence:
|
|
379
|
-
- Verify: `curl -s -o /dev/null -w "%{http_code}" "{confluence.baseUrl}/rest/api/content?limit=1" -H "Authorization: Bearer ..."`
|
|
380
|
-
- If missing: guide user to create PAT at `{confluence.baseUrl}`
|
|
381
|
-
- Clipboard flow, same as Jira
|
|
382
|
-
- VPN required - if not connected, record as `skipped (no VPN)`
|
|
383
|
-
|
|
384
|
-
---
|
|
385
|
-
|
|
386
|
-
## Write Marker File
|
|
387
|
-
|
|
388
|
-
After all checks complete, create `{repos.packagesContainer}/{repos.artifactsRepo}/ImplementationArtifacts/Figma/.setup-verified.json`:
|
|
389
|
-
|
|
390
|
-
```json
|
|
391
|
-
{
|
|
392
|
-
"verified": "<ISO_TIMESTAMP>",
|
|
393
|
-
"checks": {
|
|
394
|
-
"git_user": { "status": "pass", "value": "<NAME>" },
|
|
395
|
-
"figma_local_mcp": { "status": "pass|skipped" },
|
|
396
|
-
"figma_remote_mcp": { "status": "pass|skipped" },
|
|
397
|
-
"figma_mcp_token": { "status": "pass|skipped", "note": "FIGMA_MCP_TOKEN in keychain for script access" },
|
|
398
|
-
"figma_api_token": { "status": "pass|skipped" },
|
|
399
|
-
"figma_api_user": { "status": "pass|skipped" },
|
|
400
|
-
"code_connect_cli": { "status": "pass|skipped", "version": "<VERSION>" },
|
|
401
|
-
"registry_utility": { "status": "pass" },
|
|
402
|
-
"github_cli": { "status": "pass|skipped", "scopes": "repo,read:org,project" },
|
|
403
|
-
"jira_token": { "status": "pass|skipped" },
|
|
404
|
-
"confluence_token": { "status": "pass|skipped" }
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
---
|
|
410
|
-
|
|
411
|
-
## Token Management
|
|
412
|
-
|
|
413
|
-
### `retrieve-token` - Retrieve Remote MCP OAuth Token
|
|
414
|
-
|
|
415
|
-
Looks up the Figma remote MCP OAuth token (`figu_` prefix) and prints it for the user.
|
|
416
|
-
|
|
417
|
-
**Resolution order:**
|
|
418
|
-
|
|
419
|
-
1. **Keychain `FIGMA_MCP_TOKEN`** - the dedicated keychain entry saved by `save-token` or CHECK 3b.
|
|
420
|
-
|
|
421
|
-
```bash
|
|
422
|
-
"$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
2. **Claude Code credentials** - if not in dedicated keychain, extract from Claude Code's credential store.
|
|
426
|
-
|
|
427
|
-
```bash
|
|
428
|
-
python3 -c "
|
|
429
|
-
import subprocess, os, re
|
|
430
|
-
raw = subprocess.check_output(
|
|
431
|
-
['security', 'find-generic-password', '-s', 'Claude Code-credentials',
|
|
432
|
-
'-a', os.environ['USER'], '-w'],
|
|
433
|
-
stderr=subprocess.DEVNULL
|
|
434
|
-
).decode()
|
|
435
|
-
match = re.search(r'\"figma-remote\|[^\"]+\":\{[^}]*\"accessToken\":\"([^\"]+)\"', raw)
|
|
436
|
-
print(match.group(1) if match else 'NOT_FOUND')
|
|
437
|
-
"
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
**Output:**
|
|
441
|
-
- If found → print the token to the user
|
|
442
|
-
- If `NOT_FOUND` → tell the user:
|
|
443
|
-
> No remote MCP token found. Ensure `figma-remote` MCP has completed OAuth (CHECK 3), or use `/figma-setup save-token` to store one manually.
|
|
444
|
-
|
|
445
|
-
---
|
|
446
|
-
|
|
447
|
-
### `save-token` - Save Remote MCP OAuth Token to Keychain
|
|
448
|
-
|
|
449
|
-
Saves a provided token (or extracts from Claude Code credentials) to the dedicated `FIGMA_MCP_TOKEN` keychain entry so scripts can use it.
|
|
450
|
-
|
|
451
|
-
**Flow:**
|
|
452
|
-
|
|
453
|
-
1. Ask the user:
|
|
454
|
-
|
|
455
|
-
> Do you want to:
|
|
456
|
-
> a) **Auto-extract** from Claude Code credentials (recommended)
|
|
457
|
-
> b) **Paste** a token manually (copy to clipboard first)
|
|
458
|
-
|
|
459
|
-
2a. **Auto-extract:**
|
|
460
|
-
|
|
461
|
-
```bash
|
|
462
|
-
MCP_TOKEN=$(python3 -c "
|
|
463
|
-
import subprocess, os, re
|
|
464
|
-
raw = subprocess.check_output(
|
|
465
|
-
['security', 'find-generic-password', '-s', 'Claude Code-credentials',
|
|
466
|
-
'-a', os.environ['USER'], '-w'],
|
|
467
|
-
stderr=subprocess.DEVNULL
|
|
468
|
-
).decode()
|
|
469
|
-
match = re.search(r'\"figma-remote\|[^\\\"]+\":\{[^}]*\"accessToken\":\"([^\\\"]+)\"', raw)
|
|
470
|
-
print(match.group(1) if match else '')
|
|
471
|
-
" 2>/dev/null)
|
|
472
|
-
```
|
|
473
|
-
|
|
474
|
-
If empty → tell user Claude Code has no figma-remote credentials, suggest completing OAuth first.
|
|
475
|
-
|
|
476
|
-
2b. **Paste from clipboard:**
|
|
477
|
-
|
|
478
|
-
```bash
|
|
479
|
-
MCP_TOKEN=$(pbpaste)
|
|
480
|
-
```
|
|
481
|
-
|
|
482
|
-
Then clear clipboard: `pbcopy < /dev/null`
|
|
483
|
-
|
|
484
|
-
3. **Save to keychain:**
|
|
485
|
-
|
|
486
|
-
```bash
|
|
487
|
-
"$HOME/.claude/lib/credential-store.sh" delete \1 >/dev/null 2>&1
|
|
488
|
-
"$HOME/.claude/lib/credential-store.sh" set \1 \"\2\" >/dev/null 2>&1 && echo "TOKEN_SAVED" || echo "TOKEN_SAVE_FAILED"
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
4. **Verify** the saved token works:
|
|
492
|
-
|
|
493
|
-
```bash
|
|
494
|
-
TOKEN=$("$HOME/.claude/lib/credential-store.sh" get \1 2>/dev/null) && curl -s -o /dev/null -w "%{http_code}" -X POST "https://mcp.figma.com/mcp" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -H "Authorization: Bearer $TOKEN" -d '{"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{},"clientInfo":{"name":"setup-check","version":"1.0.0"},"protocolVersion":"2025-03-26"},"id":1}'
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
- `200` → print "Token saved and verified."
|
|
498
|
-
- `401` → print "Token saved but verification failed (expired or invalid)."
|
|
499
|
-
|
|
500
|
-
**IMPORTANT:** Do NOT echo the raw token during the save flow. Only show it during `retrieve-token`.
|
|
501
|
-
|
|
502
|
-
---
|
|
503
|
-
|
|
504
|
-
## Output
|
|
505
|
-
|
|
506
|
-
```
|
|
507
|
-
SETUP COMPLETE
|
|
508
|
-
|
|
509
|
-
Checks passed: [list]
|
|
510
|
-
Checks skipped: [list]
|
|
511
|
-
Marker: {repos.packagesContainer}/{repos.artifactsRepo}/ImplementationArtifacts/Figma/.setup-verified.json
|
|
512
|
-
|
|
513
|
-
Your environment is ready for /figma.
|
|
514
|
-
```
|