@fprad0/skill-master-mcp 0.0.12 → 1.0.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 +96 -90
- package/README.md +472 -472
- package/VERSION.md +9 -9
- package/bin/lib/bootstrap-global-core.mjs +34 -0
- package/bin/lib/client-config.mjs +293 -293
- package/bin/lib/doctor-core.mjs +202 -0
- package/bin/lib/menu-core.mjs +1629 -1522
- package/bin/lib/operation-result.mjs +59 -0
- package/bin/lib/register-clients-core.mjs +247 -0
- package/bin/lib/skill-installation.mjs +215 -215
- package/bin/lib/update-cli-core.mjs +117 -0
- package/bin/skill-master-activation.mjs +163 -163
- package/bin/skill-master-bootstrap-global.mjs +61 -49
- package/bin/skill-master-configure-private-registry.mjs +3 -3
- package/bin/skill-master-doctor.mjs +239 -228
- package/bin/skill-master-eval-activation.mjs +32 -32
- package/bin/skill-master-install-global-skills.mjs +59 -59
- package/bin/skill-master-install-project-skills.mjs +97 -97
- package/bin/skill-master-menu.mjs +406 -405
- package/bin/skill-master-register-clients.mjs +232 -153
- package/bin/skill-master-success-skills.mjs +307 -307
- package/bin/skill-master-update.mjs +121 -72
- package/bin/skill-master.mjs +3 -3
- package/dist/activation.d.ts.map +1 -1
- package/dist/activation.js +12 -0
- package/dist/activation.js.map +1 -1
- package/dist/prompt-router.d.ts.map +1 -1
- package/dist/prompt-router.js +19 -0
- package/dist/prompt-router.js.map +1 -1
- package/dist/recommender.d.ts.map +1 -1
- package/dist/recommender.js +4 -1
- package/dist/recommender.js.map +1 -1
- package/docs/architecture/APRENDIZADO_DE_IMPLEMENTACOES_BEM_SUCEDIDAS.md +125 -125
- package/docs/architecture/ARQUITETURA_AUTO_UPDATE.md +9 -9
- package/docs/architecture/PLANO_MASTER_ACIONAMENTO_AUTOMATICO_E_APRENDIZADO.md +341 -341
- package/docs/architecture/REDE_SEGURA_DE_SKILLS.md +148 -148
- package/docs/operations/GUIA_MULTI_COMPUTADOR.md +262 -262
- package/docs/operations/GUIA_NPM_PRIVADO.md +294 -294
- package/docs/operations/GUIA_NPM_PUBLICO.md +147 -147
- package/docs/operations/MENU_VISUAL_EVIDENCE_2026-06-28.md +66 -66
- package/docs/operations/assets/menu-frame-compact.html +75 -75
- package/docs/operations/assets/menu-frame-large.html +83 -83
- package/docs/operations/assets/menu-frame-running.html +79 -79
- package/docs/operations/cross-platform-auth-transfer/ANALISE_COMPATIBILIDADE_MCP_2026-06-28.md +140 -140
- package/docs/operations/cross-platform-auth-transfer/README_TRANSFERENCIA.md +85 -85
- package/docs/operations/reborn-menu-cyberpunk-transfer/ANALISE_MENU_REBORN_CYBERPUNK_2026-06-28.md +174 -174
- package/docs/operations/reborn-menu-cyberpunk-transfer/HANDOFF_IMPLEMENTACAO_REBORN_CYBERPUNK_2026-06-28.md +119 -119
- package/docs/operations/reborn-menu-cyberpunk-transfer/ORDEM_DE_EXECUCAO_MENU_REBORN_CYBERPUNK.md +134 -134
- package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA.md +84 -84
- package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA_REBORN_PACKAGE.md +56 -56
- package/docs/operations/token-economy-transfer/ANALISE_AVANCADA_ECONOMIA_TOKENS_2026-06-30.md +141 -0
- package/docs/operations/token-economy-transfer/PLANO_DEV_SENIOR_MASTER_TOKEN_ECONOMY_2026-06-30.md +171 -0
- package/docs/operations/token-economy-transfer/README_TRANSFERENCIA_TOKEN_ECONOMY.md +31 -0
- package/docs/planning/MENU_RUNTIME_CORRECTION_PLAN_2026-06-30.md +551 -0
- package/docs/planning/V0_0_9_APROVACAO_CRITICA_MENSAGENS_DE_VENDA.md +85 -85
- package/docs/planning/V0_0_9_FONTES_E_CRITERIOS_DE_AUTORIDADE.md +139 -139
- package/docs/planning/V0_0_9_MATRIZ_SKILLS_MULTIDISCIPLINARES.md +105 -105
- package/docs/planning/V0_0_9_POLITICA_MORAL_CATOLICA_PARA_IA.md +181 -181
- package/docs/planning/V0_0_9_PROMPTS_EXECUCAO.md +59 -59
- package/docs/planning/V0_0_9_ROADMAP_DISCERNIMENTO_E_CONHECIMENTO_AMPLO.md +181 -181
- package/docs/prompt-tasks/PROMPT_TASK_001_BOOTSTRAP_SKILL_MASTER_MCP.md +6 -6
- package/docs/prompt-tasks/PROMPT_TASK_002_AUTO_UPDATE_LAUNCHER.md +6 -6
- package/docs/prompt-tasks/PROMPT_TASK_003_REMOTE_MANIFEST_AND_RELEASES.md +6 -6
- package/docs/prompt-tasks/PROMPT_TASK_004_MULTI_USER_DISTRIBUTION.md +6 -6
- package/docs/prompt-tasks/PROMPT_TASK_005_SECURITY_AND_QUALITY_GATE.md +6 -6
- package/docs/prompt-tasks/PROMPT_TASK_006_MASTER_ACIONAMENTO_APRENDIZADO.md +83 -83
- package/docs/prompt-tasks/PROMPT_TASK_007_PERSONA_ORQUESTRADORA.md +88 -88
- package/docs/prompt-tasks/PROMPT_TASK_008_PROMPT_ROUTER_MODOS_ATIVACAO.md +156 -156
- package/docs/prompt-tasks/PROMPT_TASK_009_PIPELINE_APRENDIZADO_SUCESSO.md +105 -105
- package/docs/prompt-tasks/PROMPT_TASK_010_EVALS_GOVERNANCA_ATIVACAO.md +119 -119
- package/docs/prompt-tasks/PROMPT_TASK_011_MENU_NOTIFICACOES_NOTION.md +120 -120
- package/docs/prompt-tasks/PROMPT_TASK_012_MENU_CYBERPUNK_PIXEL_FRAME.md +123 -123
- package/docs/prompt-tasks/PROMPT_TASK_013_MENU_FLUID_DNA_ANIMATION.md +114 -114
- package/docs/prompt-tasks/PROMPT_TASK_014_MENU_FUNCTIONAL_PARITY_QA.md +157 -157
- package/docs/prompt-tasks/PROMPT_TASK_015_TRANSFER_RELEASE_HANDOFF.md +127 -127
- package/docs/prompt-tasks/PROMPT_TASK_016_CROSS_PLATFORM_MCP_AUTH_REGISTRATION.md +107 -107
- package/docs/prompt-tasks/PROMPT_TASK_018_NPM_PUBLISH_2FA_SETUP.md +80 -80
- package/docs/prompt-tasks/PROMPT_TASK_019_TOKEN_ECONOMY_GLOBAL_SKILLS.md +56 -0
- package/docs/prompt-tasks/PROMPT_TASK_MASTER_EXECUTOR.md +6 -6
- package/docs/skill-candidates/v0.0.10/cli-creator/LICENSE.txt +201 -201
- package/docs/skill-candidates/v0.0.10/cli-creator/SKILL.md +160 -160
- package/docs/skill-candidates/v0.0.10/cli-creator/agents/openai.yaml +4 -4
- package/docs/skill-candidates/v0.0.10/cli-creator/references/agent-cli-patterns.md +154 -154
- package/docs/skill-candidates/v0.0.10/developer-workstation-ops/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.10/figma/LICENSE.txt +1 -1
- package/docs/skill-candidates/v0.0.10/figma/SKILL.md +42 -42
- package/docs/skill-candidates/v0.0.10/figma/agents/openai.yaml +14 -14
- package/docs/skill-candidates/v0.0.10/figma/assets/figma-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/figma/assets/icon.svg +28 -28
- package/docs/skill-candidates/v0.0.10/figma/references/figma-mcp-config.md +35 -35
- package/docs/skill-candidates/v0.0.10/figma/references/figma-tools-and-prompts.md +34 -34
- package/docs/skill-candidates/v0.0.10/figma-code-connect-components/LICENSE.TXT +1 -1
- package/docs/skill-candidates/v0.0.10/figma-code-connect-components/SKILL.md +349 -349
- package/docs/skill-candidates/v0.0.10/figma-code-connect-components/agents/openai.yaml +14 -14
- package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/figma-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/icon.svg +28 -28
- package/docs/skill-candidates/v0.0.10/figma-code-connect-components/references/mapping-checklist.md +7 -7
- package/docs/skill-candidates/v0.0.10/figma-code-connect-components/scripts/normalize_node_id.py +25 -25
- package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/LICENSE.TXT +1 -1
- package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/SKILL.md +537 -537
- package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/agents/openai.yaml +14 -14
- package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/figma-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/icon.svg +28 -28
- package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/references/rule-template.md +15 -15
- package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -9
- package/docs/skill-candidates/v0.0.10/figma-generate-design/LICENSE.TXT +1 -1
- package/docs/skill-candidates/v0.0.10/figma-generate-design/SKILL.md +341 -341
- package/docs/skill-candidates/v0.0.10/figma-generate-design/agents/openai.yaml +14 -14
- package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/figma-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/icon.svg +28 -28
- package/docs/skill-candidates/v0.0.10/figma-generate-design/maintainers.yml +1 -1
- package/docs/skill-candidates/v0.0.10/figma-generate-library/LICENSE.TXT +1 -1
- package/docs/skill-candidates/v0.0.10/figma-generate-library/SKILL.md +314 -314
- package/docs/skill-candidates/v0.0.10/figma-generate-library/agents/openai.yaml +14 -14
- package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/figma-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/icon.svg +28 -28
- package/docs/skill-candidates/v0.0.10/figma-generate-library/maintainers.yml +3 -3
- package/docs/skill-candidates/v0.0.10/figma-generate-library/references/code-connect-setup.md +260 -260
- package/docs/skill-candidates/v0.0.10/figma-generate-library/references/component-creation.md +1014 -1014
- package/docs/skill-candidates/v0.0.10/figma-generate-library/references/discovery-phase.md +518 -518
- package/docs/skill-candidates/v0.0.10/figma-generate-library/references/documentation-creation.md +834 -834
- package/docs/skill-candidates/v0.0.10/figma-generate-library/references/error-recovery.md +540 -540
- package/docs/skill-candidates/v0.0.10/figma-generate-library/references/naming-conventions.md +527 -527
- package/docs/skill-candidates/v0.0.10/figma-generate-library/references/token-creation.md +962 -962
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/bindVariablesToComponent.js +110 -110
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/cleanupOrphans.js +127 -127
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createComponentWithVariants.js +148 -148
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createDocumentationPage.js +139 -139
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createSemanticTokens.js +108 -108
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createVariableCollection.js +49 -49
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/inspectFileStructure.js +121 -121
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/rehydrateState.js +92 -92
- package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/validateCreation.js +83 -83
- package/docs/skill-candidates/v0.0.10/figma-implement-design/LICENSE.txt +1 -1
- package/docs/skill-candidates/v0.0.10/figma-implement-design/SKILL.md +258 -258
- package/docs/skill-candidates/v0.0.10/figma-implement-design/agents/openai.yaml +14 -14
- package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/figma-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/icon.svg +28 -28
- package/docs/skill-candidates/v0.0.10/figma-use/LICENSE.TXT +1 -1
- package/docs/skill-candidates/v0.0.10/figma-use/SKILL.md +233 -233
- package/docs/skill-candidates/v0.0.10/figma-use/agents/openai.yaml +14 -14
- package/docs/skill-candidates/v0.0.10/figma-use/assets/figma-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/figma-use/assets/icon.svg +28 -28
- package/docs/skill-candidates/v0.0.10/figma-use/maintainers.yml +1 -1
- package/docs/skill-candidates/v0.0.10/figma-use/references/api-reference.md +301 -301
- package/docs/skill-candidates/v0.0.10/figma-use/references/common-patterns.md +512 -512
- package/docs/skill-candidates/v0.0.10/figma-use/references/component-patterns.md +488 -488
- package/docs/skill-candidates/v0.0.10/figma-use/references/effect-style-patterns.md +123 -123
- package/docs/skill-candidates/v0.0.10/figma-use/references/gotchas.md +599 -599
- package/docs/skill-candidates/v0.0.10/figma-use/references/maintainers.yml +12 -12
- package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-patterns.md +513 -513
- package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.d.ts +11293 -11293
- package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.index.md +441 -441
- package/docs/skill-candidates/v0.0.10/figma-use/references/text-style-patterns.md +203 -203
- package/docs/skill-candidates/v0.0.10/figma-use/references/validation-and-recovery.md +109 -109
- package/docs/skill-candidates/v0.0.10/figma-use/references/variable-patterns.md +354 -354
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/maintainers.yml +9 -9
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--creating.md +17 -17
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--using.md +17 -17
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components.md +50 -50
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-effect-styles.md +52 -52
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-text-styles.md +90 -90
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--creating.md +13 -13
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--using.md +13 -13
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables.md +64 -64
- package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds.md +41 -41
- package/docs/skill-candidates/v0.0.10/frontend-design/LICENSE.txt +177 -177
- package/docs/skill-candidates/v0.0.10/frontend-design/SKILL.md +55 -55
- package/docs/skill-candidates/v0.0.10/frontend-ui-ux-systems/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.10/github/SKILL.md +74 -74
- package/docs/skill-candidates/v0.0.10/github/agents/openai.yaml +6 -6
- package/docs/skill-candidates/v0.0.10/github/assets/github-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/image-graphic-design-rendering/SKILL.md +28 -28
- package/docs/skill-candidates/v0.0.10/language-quality-pt-en-fr-it-ru/SKILL.md +28 -28
- package/docs/skill-candidates/v0.0.10/math-physics-reasoning/SKILL.md +28 -28
- package/docs/skill-candidates/v0.0.10/mcp-builder/LICENSE.txt +201 -201
- package/docs/skill-candidates/v0.0.10/mcp-builder/SKILL.md +236 -236
- package/docs/skill-candidates/v0.0.10/mcp-builder/reference/evaluation.md +601 -601
- package/docs/skill-candidates/v0.0.10/mcp-builder/reference/mcp_best_practices.md +249 -249
- package/docs/skill-candidates/v0.0.10/mcp-builder/reference/node_mcp_server.md +969 -969
- package/docs/skill-candidates/v0.0.10/mcp-builder/reference/python_mcp_server.md +718 -718
- package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/connections.py +151 -151
- package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/evaluation.py +373 -373
- package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/example_evaluation.xml +22 -22
- package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/requirements.txt +2 -2
- package/docs/skill-candidates/v0.0.10/mcp-client-readiness/SKILL.md +31 -31
- package/docs/skill-candidates/v0.0.10/openai-docs/LICENSE.txt +201 -201
- package/docs/skill-candidates/v0.0.10/openai-docs/SKILL.md +161 -161
- package/docs/skill-candidates/v0.0.10/openai-docs/agents/openai.yaml +14 -14
- package/docs/skill-candidates/v0.0.10/openai-docs/assets/openai-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/openai-docs/references/latest-model.md +37 -37
- package/docs/skill-candidates/v0.0.10/openai-docs/references/prompting-guide.md +244 -244
- package/docs/skill-candidates/v0.0.10/openai-docs/references/upgrade-guide.md +181 -181
- package/docs/skill-candidates/v0.0.10/openai-docs/scripts/fetch-codex-manual.mjs +598 -598
- package/docs/skill-candidates/v0.0.10/openai-docs/scripts/resolve-latest-model-info.js +147 -147
- package/docs/skill-candidates/v0.0.10/playwright/NOTICE.txt +14 -14
- package/docs/skill-candidates/v0.0.10/playwright/SKILL.md +147 -147
- package/docs/skill-candidates/v0.0.10/playwright/agents/openai.yaml +6 -6
- package/docs/skill-candidates/v0.0.10/playwright/assets/playwright-small.svg +3 -3
- package/docs/skill-candidates/v0.0.10/playwright/references/cli.md +116 -116
- package/docs/skill-candidates/v0.0.10/playwright/references/workflows.md +95 -95
- package/docs/skill-candidates/v0.0.10/playwright/scripts/playwright_cli.sh +25 -25
- package/docs/skill-candidates/v0.0.10/polyglot-backend-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.10/screenshot/LICENSE.txt +201 -201
- package/docs/skill-candidates/v0.0.10/screenshot/SKILL.md +267 -267
- package/docs/skill-candidates/v0.0.10/screenshot/agents/openai.yaml +6 -6
- package/docs/skill-candidates/v0.0.10/screenshot/assets/screenshot-small.svg +5 -5
- package/docs/skill-candidates/v0.0.10/screenshot/scripts/ensure_macos_permissions.sh +54 -54
- package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_display_info.swift +22 -22
- package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_permissions.swift +40 -40
- package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_window_info.swift +126 -126
- package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.ps1 +163 -163
- package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.py +585 -585
- package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/SKILL.md +62 -62
- package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/agents/openai.yaml +4 -4
- package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/activation-policy.md +77 -77
- package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/human-approval-policy.md +83 -83
- package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/persona-dev-senior-master.md +46 -46
- package/docs/skill-candidates/v0.0.10/terminal-menu-operations/SKILL.md +30 -30
- package/docs/skill-candidates/v0.0.10/terminal-pixel-art-tui/SKILL.md +43 -43
- package/docs/skill-candidates/v0.0.10/webapp-testing/LICENSE.txt +201 -201
- package/docs/skill-candidates/v0.0.10/webapp-testing/SKILL.md +95 -95
- package/docs/skill-candidates/v0.0.10/webapp-testing/examples/console_logging.py +34 -34
- package/docs/skill-candidates/v0.0.10/webapp-testing/examples/element_discovery.py +39 -39
- package/docs/skill-candidates/v0.0.10/webapp-testing/examples/static_html_automation.py +32 -32
- package/docs/skill-candidates/v0.0.10/webapp-testing/scripts/with_server.py +105 -105
- package/docs/skill-candidates/v0.0.10/winui-app/LICENSE.txt +201 -201
- package/docs/skill-candidates/v0.0.10/winui-app/SKILL.md +94 -94
- package/docs/skill-candidates/v0.0.10/winui-app/agents/openai.yaml +5 -5
- package/docs/skill-candidates/v0.0.10/winui-app/config.yaml +50 -50
- package/docs/skill-candidates/v0.0.10/winui-app/references/_sections.md +96 -96
- package/docs/skill-candidates/v0.0.10/winui-app/references/accessibility-input-and-localization.md +51 -51
- package/docs/skill-candidates/v0.0.10/winui-app/references/build-run-and-launch-verification.md +72 -72
- package/docs/skill-candidates/v0.0.10/winui-app/references/community-toolkit-controls-and-helpers.md +57 -57
- package/docs/skill-candidates/v0.0.10/winui-app/references/controls-layout-and-adaptive-ui.md +84 -84
- package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-environment-audit-and-remediation.md +82 -82
- package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-setup-and-project-selection.md +67 -67
- package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-template-first-recovery.md +62 -62
- package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-winui-app-structure.md +62 -62
- package/docs/skill-candidates/v0.0.10/winui-app/references/motion-animations-and-polish.md +45 -45
- package/docs/skill-candidates/v0.0.10/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -46
- package/docs/skill-candidates/v0.0.10/winui-app/references/sample-source-map.md +37 -37
- package/docs/skill-candidates/v0.0.10/winui-app/references/shell-navigation-and-windowing.md +67 -67
- package/docs/skill-candidates/v0.0.10/winui-app/references/styling-theming-materials-and-icons.md +71 -71
- package/docs/skill-candidates/v0.0.10/winui-app/references/testing-debugging-and-review-checklists.md +77 -77
- package/docs/skill-candidates/v0.0.10/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -52
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/SKILL.md +398 -398
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/common-patterns.md +330 -330
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/complete-examples.md +871 -871
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/component-patterns.md +501 -501
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/data-fetching.md +766 -766
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/file-organization.md +501 -501
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/loading-and-error-states.md +500 -500
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/performance.md +405 -405
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/routing-guide.md +363 -363
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/styling-guide.md +427 -427
- package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/typescript-standards.md +417 -417
- package/docs/skill-candidates/v0.0.11/git-version-control-ops/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/go-engineering/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/java-engineering/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/javascript-engineering/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/json-contract-design/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/multi-client-mcp-ops/SKILL.md +36 -36
- package/docs/skill-candidates/v0.0.11/nextjs/SKILL.md +745 -745
- package/docs/skill-candidates/v0.0.11/nextjs/agents/openai.yaml +3 -3
- package/docs/skill-candidates/v0.0.11/nextjs/references/app-router-files.md +94 -94
- package/docs/skill-candidates/v0.0.11/python-engineering/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/ruby-engineering/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/senior-fullstack/SKILL.md +209 -209
- package/docs/skill-candidates/v0.0.11/senior-fullstack/references/architecture_patterns.md +103 -103
- package/docs/skill-candidates/v0.0.11/senior-fullstack/references/development_workflows.md +103 -103
- package/docs/skill-candidates/v0.0.11/senior-fullstack/references/tech_stack_guide.md +103 -103
- package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/code_quality_analyzer.py +114 -114
- package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/fullstack_scaffolder.py +114 -114
- package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/project_scaffolder.py +114 -114
- package/docs/skill-candidates/v0.0.11/shadcn/SKILL.md +573 -573
- package/docs/skill-candidates/v0.0.11/shadcn/agents/openai.yaml +3 -3
- package/docs/skill-candidates/v0.0.11/sql-postgresql-engineering/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/terminal-shell-ops/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/typescript-expert/SKILL.md +429 -429
- package/docs/skill-candidates/v0.0.11/typescript-expert/references/tsconfig-strict.json +91 -91
- package/docs/skill-candidates/v0.0.11/typescript-expert/references/typescript-cheatsheet.md +383 -383
- package/docs/skill-candidates/v0.0.11/typescript-expert/references/utility-types.ts +335 -335
- package/docs/skill-candidates/v0.0.11/typescript-expert/scripts/ts_diagnostic.py +203 -203
- package/docs/skill-candidates/v0.0.11/ui-component-primitives/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/web-mobile-design-systems/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.11/windows-linux-platform-ops/SKILL.md +34 -34
- package/docs/skill-candidates/v0.0.12/context-compression-handoff/SKILL.md +47 -0
- package/docs/skill-candidates/v0.0.12/csharp-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/css-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/go-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/html-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/javascript-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/json-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/prompt-budget-gate/SKILL.md +46 -0
- package/docs/skill-candidates/v0.0.12/python-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/react-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/ruby-senior-master-engineering/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.12/senior-master-code-optimizer/SKILL.md +48 -48
- package/docs/skill-candidates/v0.0.12/sql-senior-master-engineering/SKILL.md +31 -31
- package/docs/skill-candidates/v0.0.12/token-economy-orchestrator/SKILL.md +38 -0
- package/docs/skill-candidates/v0.0.12/typescript-senior-master-engineering/SKILL.md +35 -35
- package/docs/skill-candidates/v0.0.9/ai-ethics-human-dignity/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.9/broad-domain-router/SKILL.md +41 -41
- package/docs/skill-candidates/v0.0.9/catholic-moral-discernment/SKILL.md +31 -31
- package/docs/skill-candidates/v0.0.9/engineering-systems-master/SKILL.md +31 -31
- package/docs/skill-candidates/v0.0.9/language-quality-pt-en-fr/SKILL.md +28 -28
- package/docs/skill-candidates/v0.0.9/math-science-reasoning/SKILL.md +29 -29
- package/docs/skill-candidates/v0.0.9/philosophy-sociology-discernment/SKILL.md +28 -28
- package/docs/skill-candidates/v0.0.9/professional-boundary-triage/SKILL.md +40 -40
- package/docs/skill-candidates/v0.0.9/release-ethics-gate/SKILL.md +32 -32
- package/docs/skill-candidates/v0.0.9/source-authority-reviewer/SKILL.md +31 -31
- package/examples/client-configs/claude-code.commands.md +21 -21
- package/examples/client-configs/claude-code.project.mcp.json +18 -18
- package/examples/client-configs/claude-desktop.macos.json +18 -18
- package/examples/client-configs/claude-desktop.windows.json +20 -20
- package/examples/client-configs/codex.windows.toml +11 -11
- package/examples/client-configs/gemini-code-assist.intellij.mcp.json +18 -18
- package/examples/client-configs/gemini.linux.settings.json +21 -21
- package/examples/client-configs/gemini.windows.settings.json +23 -23
- package/examples/client-configs/generic-stdio.json +16 -16
- package/manifests/channels/beta.json +26 -26
- package/manifests/channels/stable.json +27 -27
- package/network/approved-skills.json +54 -54
- package/network/unapproved-skill-candidates.json +110 -110
- package/package.json +87 -86
- package/scripts/configure-private-registry.mjs +208 -208
- package/scripts/lib/private-registry.mjs +97 -97
- package/scripts/render-menu-evidence.mjs +130 -130
- package/scripts/verify-menu-actions.mjs +117 -117
- package/sources.json +11 -11
|
@@ -1,301 +1,301 @@
|
|
|
1
|
-
# Figma Plugin API Reference
|
|
2
|
-
|
|
3
|
-
> Part of the [use_figma skill](../SKILL.md). What works and what doesn't in the `use_figma` environment.
|
|
4
|
-
|
|
5
|
-
## Contents
|
|
6
|
-
|
|
7
|
-
- Node Creation
|
|
8
|
-
- Grouping and Boolean Operations
|
|
9
|
-
- Library Imports
|
|
10
|
-
- Variables API
|
|
11
|
-
- Core Properties
|
|
12
|
-
- Node Manipulation
|
|
13
|
-
- Descriptions and Documentation Links
|
|
14
|
-
- SVG and Images
|
|
15
|
-
- Utilities and Plugin Lifecycle
|
|
16
|
-
- Node Traversal
|
|
17
|
-
- Unsupported APIs
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
## Node Creation (Design Mode)
|
|
21
|
-
|
|
22
|
-
```js
|
|
23
|
-
figma.createRectangle()
|
|
24
|
-
figma.createFrame()
|
|
25
|
-
figma.createComponent() // Creates a ComponentNode
|
|
26
|
-
figma.createText()
|
|
27
|
-
figma.createEllipse()
|
|
28
|
-
figma.createStar()
|
|
29
|
-
figma.createLine()
|
|
30
|
-
figma.createVector()
|
|
31
|
-
figma.createPolygon()
|
|
32
|
-
figma.createBooleanOperation()
|
|
33
|
-
figma.createSlice()
|
|
34
|
-
figma.createPage() // Page node can be created, but child persistence is limited in headless mode
|
|
35
|
-
figma.createSection()
|
|
36
|
-
figma.createTextPath()
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Grouping & Boolean Operations
|
|
40
|
-
|
|
41
|
-
```js
|
|
42
|
-
figma.group(nodes, parent, index?) // Group nodes
|
|
43
|
-
figma.flatten(nodes, parent?, index?) // Flatten to vector
|
|
44
|
-
figma.union(nodes, parent?, index?) // Boolean union
|
|
45
|
-
figma.subtract(nodes, parent?, index?) // Boolean subtract
|
|
46
|
-
figma.intersect(nodes, parent?, index?) // Boolean intersect
|
|
47
|
-
figma.exclude(nodes, parent?, index?) // Boolean exclude
|
|
48
|
-
figma.combineAsVariants(components, parent?) // Combine ComponentNodes into ComponentSet (Design/Sites only)
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Library Component Import
|
|
52
|
-
|
|
53
|
-
These methods import components from **team libraries** (not the same file you're working in). For components in the current file, use `use_figma` with `figma.getNodeByIdAsync()` or `findOne()`/`findAll()` to locate them directly.
|
|
54
|
-
|
|
55
|
-
```js
|
|
56
|
-
// Import a published component from a team library by key
|
|
57
|
-
const comp = await figma.importComponentByKeyAsync("COMPONENT_KEY")
|
|
58
|
-
const instance = comp.createInstance()
|
|
59
|
-
|
|
60
|
-
// Import a published component set from a team library by key
|
|
61
|
-
const compSet = await figma.importComponentSetByKeyAsync("COMPONENT_SET_KEY")
|
|
62
|
-
const variant =
|
|
63
|
-
compSet.children.find((c) => c.type === "COMPONENT" && c.name.includes("size=md")) ||
|
|
64
|
-
compSet.defaultVariant
|
|
65
|
-
const variantInstance = variant.createInstance()
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Library Style Import (Team Libraries)
|
|
69
|
-
|
|
70
|
-
These methods import styles from **team libraries** (not the same file). For styles in the current file, use `figma.getLocalPaintStyles()`, `figma.getLocalTextStyles()`, etc.
|
|
71
|
-
|
|
72
|
-
```js
|
|
73
|
-
// Import a published style from a team library by key
|
|
74
|
-
const style = await figma.importStyleByKeyAsync("STYLE_KEY")
|
|
75
|
-
|
|
76
|
-
// Apply the imported style to a node
|
|
77
|
-
await node.setFillStyleIdAsync(style.id) // for PaintStyle as fill
|
|
78
|
-
await node.setStrokeStyleIdAsync(style.id) // for PaintStyle as stroke
|
|
79
|
-
await node.setTextStyleIdAsync(style.id) // for TextStyle
|
|
80
|
-
await node.setEffectStyleIdAsync(style.id) // for EffectStyle
|
|
81
|
-
await node.setGridStyleIdAsync(style.id) // for GridStyle
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Library Variable Import (Team Libraries)
|
|
85
|
-
|
|
86
|
-
This imports variables from **team libraries** (not the same file). For variables in the current file, use `figma.variables.getLocalVariables()` or `figma.variables.getVariableById()`.
|
|
87
|
-
|
|
88
|
-
```js
|
|
89
|
-
// Import a published variable from a team library by key
|
|
90
|
-
const variable = await figma.variables.importVariableByKeyAsync("VARIABLE_KEY")
|
|
91
|
-
|
|
92
|
-
// Bind the imported variable to node properties
|
|
93
|
-
node.setBoundVariable("width", variable) // FLOAT variable
|
|
94
|
-
|
|
95
|
-
// Bind to fills/strokes (COLOR variable) — returns a NEW paint, must capture it
|
|
96
|
-
const newPaint = figma.variables.setBoundVariableForPaint(paintCopy, "color", variable)
|
|
97
|
-
node.fills = [newPaint]
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## Variables API
|
|
101
|
-
|
|
102
|
-
```js
|
|
103
|
-
// Collections
|
|
104
|
-
const collection = figma.variables.createVariableCollection("Name")
|
|
105
|
-
collection.name // Get/set name
|
|
106
|
-
collection.modes // Array of {modeId, name} — starts with 1 mode
|
|
107
|
-
collection.addMode("Dark") // Returns new modeId string
|
|
108
|
-
collection.renameMode(modeId, "Light")
|
|
109
|
-
|
|
110
|
-
// Variables
|
|
111
|
-
const variable = figma.variables.createVariable("name", collection, "COLOR")
|
|
112
|
-
// ^ object or ID string
|
|
113
|
-
// resolvedType: "COLOR" | "FLOAT" | "STRING" | "BOOLEAN"
|
|
114
|
-
variable.setValueForMode(modeId, value)
|
|
115
|
-
|
|
116
|
-
// Scopes — controls where variable appears in property pickers
|
|
117
|
-
variable.scopes = ["FRAME_FILL", "SHAPE_FILL"] // only fill pickers
|
|
118
|
-
variable.scopes = ["TEXT_FILL"] // only text color picker
|
|
119
|
-
variable.scopes = ["STROKE_COLOR"] // only stroke picker
|
|
120
|
-
variable.scopes = [] // hidden from all pickers (use for primitives)
|
|
121
|
-
// All valid scope values:
|
|
122
|
-
// ALL_SCOPES, TEXT_CONTENT, CORNER_RADIUS, WIDTH_HEIGHT, GAP,
|
|
123
|
-
// ALL_FILLS, FRAME_FILL, SHAPE_FILL, TEXT_FILL,
|
|
124
|
-
// STROKE_COLOR, STROKE_FLOAT, EFFECT_FLOAT, EFFECT_COLOR,
|
|
125
|
-
// OPACITY, FONT_FAMILY, FONT_STYLE, FONT_WEIGHT, FONT_SIZE,
|
|
126
|
-
// LINE_HEIGHT, LETTER_SPACING, PARAGRAPH_SPACING, PARAGRAPH_INDENT
|
|
127
|
-
|
|
128
|
-
// Querying
|
|
129
|
-
figma.variables.getVariableById(id)
|
|
130
|
-
figma.variables.getLocalVariables(resolvedType?)
|
|
131
|
-
figma.variables.getVariableCollectionById(id)
|
|
132
|
-
figma.variables.getLocalVariableCollections()
|
|
133
|
-
|
|
134
|
-
// Binding variables to paints (COLOR variables)
|
|
135
|
-
const newPaint = figma.variables.setBoundVariableForPaint(paintCopy, "color", variable)
|
|
136
|
-
// ⚠️ Returns a NEW paint — must capture return value!
|
|
137
|
-
node.fills = [newPaint]
|
|
138
|
-
|
|
139
|
-
// Binding variables to effects (COLOR/FLOAT variables)
|
|
140
|
-
const newEffect = figma.variables.setBoundVariableForEffect(effectCopy, field, variable)
|
|
141
|
-
// field for shadows: "color" (COLOR), "radius" | "spread" | "offsetX" | "offsetY" (FLOAT)
|
|
142
|
-
// field for blurs: "radius" (FLOAT)
|
|
143
|
-
// ⚠️ Returns a NEW effect — must capture return value!
|
|
144
|
-
node.effects = [newEffect]
|
|
145
|
-
|
|
146
|
-
// Binding variables to layout grids (FLOAT variables)
|
|
147
|
-
const newGrid = figma.variables.setBoundVariableForLayoutGrid(gridCopy, field, variable)
|
|
148
|
-
// field: "sectionSize" | "offset" | "count" | "gutterSize"
|
|
149
|
-
// ⚠️ Returns a NEW layout grid — must capture return value!
|
|
150
|
-
node.layoutGrids = [newGrid]
|
|
151
|
-
|
|
152
|
-
// Binding variables to node properties (FLOAT/STRING/BOOLEAN)
|
|
153
|
-
// Layout & sizing (FLOAT):
|
|
154
|
-
node.setBoundVariable("width", variable)
|
|
155
|
-
node.setBoundVariable("height", variable)
|
|
156
|
-
node.setBoundVariable("minWidth", variable)
|
|
157
|
-
node.setBoundVariable("maxWidth", variable)
|
|
158
|
-
node.setBoundVariable("minHeight", variable)
|
|
159
|
-
node.setBoundVariable("maxHeight", variable)
|
|
160
|
-
node.setBoundVariable("paddingLeft", variable)
|
|
161
|
-
node.setBoundVariable("paddingRight", variable)
|
|
162
|
-
node.setBoundVariable("paddingTop", variable)
|
|
163
|
-
node.setBoundVariable("paddingBottom", variable)
|
|
164
|
-
node.setBoundVariable("itemSpacing", variable)
|
|
165
|
-
node.setBoundVariable("counterAxisSpacing", variable)
|
|
166
|
-
// Corner radii (FLOAT) — use individual corners, NOT cornerRadius:
|
|
167
|
-
node.setBoundVariable("topLeftRadius", variable)
|
|
168
|
-
node.setBoundVariable("topRightRadius", variable)
|
|
169
|
-
node.setBoundVariable("bottomLeftRadius", variable)
|
|
170
|
-
node.setBoundVariable("bottomRightRadius", variable)
|
|
171
|
-
// Other (FLOAT):
|
|
172
|
-
node.setBoundVariable("opacity", variable)
|
|
173
|
-
node.setBoundVariable("strokeWeight", variable)
|
|
174
|
-
// ⚠️ fontSize, fontWeight, lineHeight are NOT bindable via setBoundVariable
|
|
175
|
-
// — set these directly as values on text nodes
|
|
176
|
-
|
|
177
|
-
// Aliases
|
|
178
|
-
figma.variables.createVariableAlias(variable)
|
|
179
|
-
|
|
180
|
-
// Explicit modes — CRITICAL for variant components
|
|
181
|
-
node.setExplicitVariableModeForCollection(collectionId, modeId)
|
|
182
|
-
// Without this, all nodes use the default (first) mode of the collection
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
## Core Properties
|
|
186
|
-
|
|
187
|
-
```js
|
|
188
|
-
figma.root // DocumentNode
|
|
189
|
-
figma.currentPage // Current page (read-only in use_figma; sync setter throws)
|
|
190
|
-
figma.setCurrentPageAsync(page) // Switch page and load its content (MUST await)
|
|
191
|
-
figma.fileKey // File key string
|
|
192
|
-
figma.mixed // Mixed sentinel value
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
## Node Manipulation
|
|
196
|
-
|
|
197
|
-
```js
|
|
198
|
-
// Fills & Strokes (read-only arrays — must clone)
|
|
199
|
-
node.fills = [{ type: 'SOLID', color: { r: 1, g: 0, b: 0 } }]
|
|
200
|
-
node.strokes = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }]
|
|
201
|
-
node.strokeWeight = 1
|
|
202
|
-
node.strokeAlign = 'INSIDE' // 'INSIDE' | 'CENTER' | 'OUTSIDE'
|
|
203
|
-
|
|
204
|
-
// Effects
|
|
205
|
-
node.effects = [{ type: 'DROP_SHADOW', color: {r:0,g:0,b:0,a:0.25}, offset:{x:0,y:4}, radius:4, visible:true }]
|
|
206
|
-
|
|
207
|
-
// Layout
|
|
208
|
-
node.layoutMode = 'HORIZONTAL' // 'NONE' | 'HORIZONTAL' | 'VERTICAL'
|
|
209
|
-
node.primaryAxisAlignItems = 'CENTER' // 'MIN' | 'CENTER' | 'MAX' | 'SPACE_BETWEEN'
|
|
210
|
-
node.counterAxisAlignItems = 'CENTER' // 'MIN' | 'CENTER' | 'MAX' | 'BASELINE'
|
|
211
|
-
node.paddingLeft = 8
|
|
212
|
-
node.paddingRight = 8
|
|
213
|
-
node.paddingTop = 4
|
|
214
|
-
node.paddingBottom = 4
|
|
215
|
-
node.itemSpacing = 4
|
|
216
|
-
node.layoutSizingHorizontal = 'HUG' // 'FIXED' | 'HUG' | 'FILL'
|
|
217
|
-
node.layoutSizingVertical = 'HUG' // 'FIXED' | 'HUG' | 'FILL'
|
|
218
|
-
|
|
219
|
-
// Sizing
|
|
220
|
-
node.resize(width, height) // ⚠️ Resets sizing modes to FIXED
|
|
221
|
-
node.resizeWithoutConstraints(width, height) // Doesn't affect constraints
|
|
222
|
-
|
|
223
|
-
// Corner radius
|
|
224
|
-
node.cornerRadius = 8
|
|
225
|
-
|
|
226
|
-
// Visibility & Opacity
|
|
227
|
-
node.visible = true
|
|
228
|
-
node.opacity = 0.5
|
|
229
|
-
|
|
230
|
-
// Naming & Hierarchy
|
|
231
|
-
node.name = "My Node"
|
|
232
|
-
parent.appendChild(child)
|
|
233
|
-
parent.insertChild(index, child)
|
|
234
|
-
node.remove()
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Descriptions & Documentation Links
|
|
238
|
-
|
|
239
|
-
```js
|
|
240
|
-
// Description — plain text, shown in Figma's component panel
|
|
241
|
-
node.description = "A short summary of this component's purpose and usage."
|
|
242
|
-
|
|
243
|
-
// Documentation links — array of {uri, label} shown as clickable links
|
|
244
|
-
componentSet.documentationLinks = [
|
|
245
|
-
{ uri: "https://example.com/docs", label: "Component Docs" }
|
|
246
|
-
]
|
|
247
|
-
// ⚠️ uri MUST be a valid URL (https://...) — relative paths will throw
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
## SVG Import
|
|
251
|
-
|
|
252
|
-
```js
|
|
253
|
-
const svgNode = figma.createNodeFromSvg('<svg>...</svg>')
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
## Images
|
|
257
|
-
|
|
258
|
-
```js
|
|
259
|
-
const image = figma.createImage(uint8Array)
|
|
260
|
-
node.fills = [{ type: 'IMAGE', scaleMode: 'FILL', imageHash: image.hash }]
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
## Utilities
|
|
264
|
-
|
|
265
|
-
```js
|
|
266
|
-
figma.base64Encode(uint8Array) // Uint8Array → base64 string
|
|
267
|
-
figma.base64Decode(base64String) // base64 string → Uint8Array
|
|
268
|
-
figma.createComponentFromNode(node) // Convert existing node to component (Design/Sites only)
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
## Plugin Lifecycle
|
|
272
|
-
|
|
273
|
-
```js
|
|
274
|
-
figma.closePlugin("message") // Close and return a message to the agent (success)
|
|
275
|
-
figma.closePluginWithFailure("error msg") // Close with error — ALWAYS use in catch blocks
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
## Node Traversal
|
|
279
|
-
|
|
280
|
-
```js
|
|
281
|
-
node.findAll(pred?) // Find all descendants matching predicate
|
|
282
|
-
node.findOne(pred?) // Find first descendant matching predicate
|
|
283
|
-
node.findChildren(pred?) // Find direct children matching predicate
|
|
284
|
-
node.findChild(pred?) // Find first direct child matching predicate
|
|
285
|
-
node.children // Direct children array
|
|
286
|
-
node.parent // Parent node
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
---
|
|
290
|
-
|
|
291
|
-
## What Does NOT Work
|
|
292
|
-
|
|
293
|
-
| API | Status |
|
|
294
|
-
|-----|--------|
|
|
295
|
-
| `figma.notify()` | **Throws "not implemented"** — most common mistake |
|
|
296
|
-
| `figma.showUI()` | No-op (silently ignored) |
|
|
297
|
-
| `figma.openExternal()` | No-op (silently ignored) |
|
|
298
|
-
| `figma.listAvailableFontsAsync()` | Not implemented |
|
|
299
|
-
| `figma.loadAllPagesAsync()` | Not implemented |
|
|
300
|
-
| `figma.variables.extendLibraryCollectionByKeyAsync()` | Not implemented |
|
|
301
|
-
| `figma.teamLibrary.*` | Not implemented (requires LiveGraph) |
|
|
1
|
+
# Figma Plugin API Reference
|
|
2
|
+
|
|
3
|
+
> Part of the [use_figma skill](../SKILL.md). What works and what doesn't in the `use_figma` environment.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- Node Creation
|
|
8
|
+
- Grouping and Boolean Operations
|
|
9
|
+
- Library Imports
|
|
10
|
+
- Variables API
|
|
11
|
+
- Core Properties
|
|
12
|
+
- Node Manipulation
|
|
13
|
+
- Descriptions and Documentation Links
|
|
14
|
+
- SVG and Images
|
|
15
|
+
- Utilities and Plugin Lifecycle
|
|
16
|
+
- Node Traversal
|
|
17
|
+
- Unsupported APIs
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## Node Creation (Design Mode)
|
|
21
|
+
|
|
22
|
+
```js
|
|
23
|
+
figma.createRectangle()
|
|
24
|
+
figma.createFrame()
|
|
25
|
+
figma.createComponent() // Creates a ComponentNode
|
|
26
|
+
figma.createText()
|
|
27
|
+
figma.createEllipse()
|
|
28
|
+
figma.createStar()
|
|
29
|
+
figma.createLine()
|
|
30
|
+
figma.createVector()
|
|
31
|
+
figma.createPolygon()
|
|
32
|
+
figma.createBooleanOperation()
|
|
33
|
+
figma.createSlice()
|
|
34
|
+
figma.createPage() // Page node can be created, but child persistence is limited in headless mode
|
|
35
|
+
figma.createSection()
|
|
36
|
+
figma.createTextPath()
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Grouping & Boolean Operations
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
figma.group(nodes, parent, index?) // Group nodes
|
|
43
|
+
figma.flatten(nodes, parent?, index?) // Flatten to vector
|
|
44
|
+
figma.union(nodes, parent?, index?) // Boolean union
|
|
45
|
+
figma.subtract(nodes, parent?, index?) // Boolean subtract
|
|
46
|
+
figma.intersect(nodes, parent?, index?) // Boolean intersect
|
|
47
|
+
figma.exclude(nodes, parent?, index?) // Boolean exclude
|
|
48
|
+
figma.combineAsVariants(components, parent?) // Combine ComponentNodes into ComponentSet (Design/Sites only)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Library Component Import
|
|
52
|
+
|
|
53
|
+
These methods import components from **team libraries** (not the same file you're working in). For components in the current file, use `use_figma` with `figma.getNodeByIdAsync()` or `findOne()`/`findAll()` to locate them directly.
|
|
54
|
+
|
|
55
|
+
```js
|
|
56
|
+
// Import a published component from a team library by key
|
|
57
|
+
const comp = await figma.importComponentByKeyAsync("COMPONENT_KEY")
|
|
58
|
+
const instance = comp.createInstance()
|
|
59
|
+
|
|
60
|
+
// Import a published component set from a team library by key
|
|
61
|
+
const compSet = await figma.importComponentSetByKeyAsync("COMPONENT_SET_KEY")
|
|
62
|
+
const variant =
|
|
63
|
+
compSet.children.find((c) => c.type === "COMPONENT" && c.name.includes("size=md")) ||
|
|
64
|
+
compSet.defaultVariant
|
|
65
|
+
const variantInstance = variant.createInstance()
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Library Style Import (Team Libraries)
|
|
69
|
+
|
|
70
|
+
These methods import styles from **team libraries** (not the same file). For styles in the current file, use `figma.getLocalPaintStyles()`, `figma.getLocalTextStyles()`, etc.
|
|
71
|
+
|
|
72
|
+
```js
|
|
73
|
+
// Import a published style from a team library by key
|
|
74
|
+
const style = await figma.importStyleByKeyAsync("STYLE_KEY")
|
|
75
|
+
|
|
76
|
+
// Apply the imported style to a node
|
|
77
|
+
await node.setFillStyleIdAsync(style.id) // for PaintStyle as fill
|
|
78
|
+
await node.setStrokeStyleIdAsync(style.id) // for PaintStyle as stroke
|
|
79
|
+
await node.setTextStyleIdAsync(style.id) // for TextStyle
|
|
80
|
+
await node.setEffectStyleIdAsync(style.id) // for EffectStyle
|
|
81
|
+
await node.setGridStyleIdAsync(style.id) // for GridStyle
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Library Variable Import (Team Libraries)
|
|
85
|
+
|
|
86
|
+
This imports variables from **team libraries** (not the same file). For variables in the current file, use `figma.variables.getLocalVariables()` or `figma.variables.getVariableById()`.
|
|
87
|
+
|
|
88
|
+
```js
|
|
89
|
+
// Import a published variable from a team library by key
|
|
90
|
+
const variable = await figma.variables.importVariableByKeyAsync("VARIABLE_KEY")
|
|
91
|
+
|
|
92
|
+
// Bind the imported variable to node properties
|
|
93
|
+
node.setBoundVariable("width", variable) // FLOAT variable
|
|
94
|
+
|
|
95
|
+
// Bind to fills/strokes (COLOR variable) — returns a NEW paint, must capture it
|
|
96
|
+
const newPaint = figma.variables.setBoundVariableForPaint(paintCopy, "color", variable)
|
|
97
|
+
node.fills = [newPaint]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Variables API
|
|
101
|
+
|
|
102
|
+
```js
|
|
103
|
+
// Collections
|
|
104
|
+
const collection = figma.variables.createVariableCollection("Name")
|
|
105
|
+
collection.name // Get/set name
|
|
106
|
+
collection.modes // Array of {modeId, name} — starts with 1 mode
|
|
107
|
+
collection.addMode("Dark") // Returns new modeId string
|
|
108
|
+
collection.renameMode(modeId, "Light")
|
|
109
|
+
|
|
110
|
+
// Variables
|
|
111
|
+
const variable = figma.variables.createVariable("name", collection, "COLOR")
|
|
112
|
+
// ^ object or ID string
|
|
113
|
+
// resolvedType: "COLOR" | "FLOAT" | "STRING" | "BOOLEAN"
|
|
114
|
+
variable.setValueForMode(modeId, value)
|
|
115
|
+
|
|
116
|
+
// Scopes — controls where variable appears in property pickers
|
|
117
|
+
variable.scopes = ["FRAME_FILL", "SHAPE_FILL"] // only fill pickers
|
|
118
|
+
variable.scopes = ["TEXT_FILL"] // only text color picker
|
|
119
|
+
variable.scopes = ["STROKE_COLOR"] // only stroke picker
|
|
120
|
+
variable.scopes = [] // hidden from all pickers (use for primitives)
|
|
121
|
+
// All valid scope values:
|
|
122
|
+
// ALL_SCOPES, TEXT_CONTENT, CORNER_RADIUS, WIDTH_HEIGHT, GAP,
|
|
123
|
+
// ALL_FILLS, FRAME_FILL, SHAPE_FILL, TEXT_FILL,
|
|
124
|
+
// STROKE_COLOR, STROKE_FLOAT, EFFECT_FLOAT, EFFECT_COLOR,
|
|
125
|
+
// OPACITY, FONT_FAMILY, FONT_STYLE, FONT_WEIGHT, FONT_SIZE,
|
|
126
|
+
// LINE_HEIGHT, LETTER_SPACING, PARAGRAPH_SPACING, PARAGRAPH_INDENT
|
|
127
|
+
|
|
128
|
+
// Querying
|
|
129
|
+
figma.variables.getVariableById(id)
|
|
130
|
+
figma.variables.getLocalVariables(resolvedType?)
|
|
131
|
+
figma.variables.getVariableCollectionById(id)
|
|
132
|
+
figma.variables.getLocalVariableCollections()
|
|
133
|
+
|
|
134
|
+
// Binding variables to paints (COLOR variables)
|
|
135
|
+
const newPaint = figma.variables.setBoundVariableForPaint(paintCopy, "color", variable)
|
|
136
|
+
// ⚠️ Returns a NEW paint — must capture return value!
|
|
137
|
+
node.fills = [newPaint]
|
|
138
|
+
|
|
139
|
+
// Binding variables to effects (COLOR/FLOAT variables)
|
|
140
|
+
const newEffect = figma.variables.setBoundVariableForEffect(effectCopy, field, variable)
|
|
141
|
+
// field for shadows: "color" (COLOR), "radius" | "spread" | "offsetX" | "offsetY" (FLOAT)
|
|
142
|
+
// field for blurs: "radius" (FLOAT)
|
|
143
|
+
// ⚠️ Returns a NEW effect — must capture return value!
|
|
144
|
+
node.effects = [newEffect]
|
|
145
|
+
|
|
146
|
+
// Binding variables to layout grids (FLOAT variables)
|
|
147
|
+
const newGrid = figma.variables.setBoundVariableForLayoutGrid(gridCopy, field, variable)
|
|
148
|
+
// field: "sectionSize" | "offset" | "count" | "gutterSize"
|
|
149
|
+
// ⚠️ Returns a NEW layout grid — must capture return value!
|
|
150
|
+
node.layoutGrids = [newGrid]
|
|
151
|
+
|
|
152
|
+
// Binding variables to node properties (FLOAT/STRING/BOOLEAN)
|
|
153
|
+
// Layout & sizing (FLOAT):
|
|
154
|
+
node.setBoundVariable("width", variable)
|
|
155
|
+
node.setBoundVariable("height", variable)
|
|
156
|
+
node.setBoundVariable("minWidth", variable)
|
|
157
|
+
node.setBoundVariable("maxWidth", variable)
|
|
158
|
+
node.setBoundVariable("minHeight", variable)
|
|
159
|
+
node.setBoundVariable("maxHeight", variable)
|
|
160
|
+
node.setBoundVariable("paddingLeft", variable)
|
|
161
|
+
node.setBoundVariable("paddingRight", variable)
|
|
162
|
+
node.setBoundVariable("paddingTop", variable)
|
|
163
|
+
node.setBoundVariable("paddingBottom", variable)
|
|
164
|
+
node.setBoundVariable("itemSpacing", variable)
|
|
165
|
+
node.setBoundVariable("counterAxisSpacing", variable)
|
|
166
|
+
// Corner radii (FLOAT) — use individual corners, NOT cornerRadius:
|
|
167
|
+
node.setBoundVariable("topLeftRadius", variable)
|
|
168
|
+
node.setBoundVariable("topRightRadius", variable)
|
|
169
|
+
node.setBoundVariable("bottomLeftRadius", variable)
|
|
170
|
+
node.setBoundVariable("bottomRightRadius", variable)
|
|
171
|
+
// Other (FLOAT):
|
|
172
|
+
node.setBoundVariable("opacity", variable)
|
|
173
|
+
node.setBoundVariable("strokeWeight", variable)
|
|
174
|
+
// ⚠️ fontSize, fontWeight, lineHeight are NOT bindable via setBoundVariable
|
|
175
|
+
// — set these directly as values on text nodes
|
|
176
|
+
|
|
177
|
+
// Aliases
|
|
178
|
+
figma.variables.createVariableAlias(variable)
|
|
179
|
+
|
|
180
|
+
// Explicit modes — CRITICAL for variant components
|
|
181
|
+
node.setExplicitVariableModeForCollection(collectionId, modeId)
|
|
182
|
+
// Without this, all nodes use the default (first) mode of the collection
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Core Properties
|
|
186
|
+
|
|
187
|
+
```js
|
|
188
|
+
figma.root // DocumentNode
|
|
189
|
+
figma.currentPage // Current page (read-only in use_figma; sync setter throws)
|
|
190
|
+
figma.setCurrentPageAsync(page) // Switch page and load its content (MUST await)
|
|
191
|
+
figma.fileKey // File key string
|
|
192
|
+
figma.mixed // Mixed sentinel value
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Node Manipulation
|
|
196
|
+
|
|
197
|
+
```js
|
|
198
|
+
// Fills & Strokes (read-only arrays — must clone)
|
|
199
|
+
node.fills = [{ type: 'SOLID', color: { r: 1, g: 0, b: 0 } }]
|
|
200
|
+
node.strokes = [{ type: 'SOLID', color: { r: 0, g: 0, b: 0 } }]
|
|
201
|
+
node.strokeWeight = 1
|
|
202
|
+
node.strokeAlign = 'INSIDE' // 'INSIDE' | 'CENTER' | 'OUTSIDE'
|
|
203
|
+
|
|
204
|
+
// Effects
|
|
205
|
+
node.effects = [{ type: 'DROP_SHADOW', color: {r:0,g:0,b:0,a:0.25}, offset:{x:0,y:4}, radius:4, visible:true }]
|
|
206
|
+
|
|
207
|
+
// Layout
|
|
208
|
+
node.layoutMode = 'HORIZONTAL' // 'NONE' | 'HORIZONTAL' | 'VERTICAL'
|
|
209
|
+
node.primaryAxisAlignItems = 'CENTER' // 'MIN' | 'CENTER' | 'MAX' | 'SPACE_BETWEEN'
|
|
210
|
+
node.counterAxisAlignItems = 'CENTER' // 'MIN' | 'CENTER' | 'MAX' | 'BASELINE'
|
|
211
|
+
node.paddingLeft = 8
|
|
212
|
+
node.paddingRight = 8
|
|
213
|
+
node.paddingTop = 4
|
|
214
|
+
node.paddingBottom = 4
|
|
215
|
+
node.itemSpacing = 4
|
|
216
|
+
node.layoutSizingHorizontal = 'HUG' // 'FIXED' | 'HUG' | 'FILL'
|
|
217
|
+
node.layoutSizingVertical = 'HUG' // 'FIXED' | 'HUG' | 'FILL'
|
|
218
|
+
|
|
219
|
+
// Sizing
|
|
220
|
+
node.resize(width, height) // ⚠️ Resets sizing modes to FIXED
|
|
221
|
+
node.resizeWithoutConstraints(width, height) // Doesn't affect constraints
|
|
222
|
+
|
|
223
|
+
// Corner radius
|
|
224
|
+
node.cornerRadius = 8
|
|
225
|
+
|
|
226
|
+
// Visibility & Opacity
|
|
227
|
+
node.visible = true
|
|
228
|
+
node.opacity = 0.5
|
|
229
|
+
|
|
230
|
+
// Naming & Hierarchy
|
|
231
|
+
node.name = "My Node"
|
|
232
|
+
parent.appendChild(child)
|
|
233
|
+
parent.insertChild(index, child)
|
|
234
|
+
node.remove()
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Descriptions & Documentation Links
|
|
238
|
+
|
|
239
|
+
```js
|
|
240
|
+
// Description — plain text, shown in Figma's component panel
|
|
241
|
+
node.description = "A short summary of this component's purpose and usage."
|
|
242
|
+
|
|
243
|
+
// Documentation links — array of {uri, label} shown as clickable links
|
|
244
|
+
componentSet.documentationLinks = [
|
|
245
|
+
{ uri: "https://example.com/docs", label: "Component Docs" }
|
|
246
|
+
]
|
|
247
|
+
// ⚠️ uri MUST be a valid URL (https://...) — relative paths will throw
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## SVG Import
|
|
251
|
+
|
|
252
|
+
```js
|
|
253
|
+
const svgNode = figma.createNodeFromSvg('<svg>...</svg>')
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Images
|
|
257
|
+
|
|
258
|
+
```js
|
|
259
|
+
const image = figma.createImage(uint8Array)
|
|
260
|
+
node.fills = [{ type: 'IMAGE', scaleMode: 'FILL', imageHash: image.hash }]
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## Utilities
|
|
264
|
+
|
|
265
|
+
```js
|
|
266
|
+
figma.base64Encode(uint8Array) // Uint8Array → base64 string
|
|
267
|
+
figma.base64Decode(base64String) // base64 string → Uint8Array
|
|
268
|
+
figma.createComponentFromNode(node) // Convert existing node to component (Design/Sites only)
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Plugin Lifecycle
|
|
272
|
+
|
|
273
|
+
```js
|
|
274
|
+
figma.closePlugin("message") // Close and return a message to the agent (success)
|
|
275
|
+
figma.closePluginWithFailure("error msg") // Close with error — ALWAYS use in catch blocks
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## Node Traversal
|
|
279
|
+
|
|
280
|
+
```js
|
|
281
|
+
node.findAll(pred?) // Find all descendants matching predicate
|
|
282
|
+
node.findOne(pred?) // Find first descendant matching predicate
|
|
283
|
+
node.findChildren(pred?) // Find direct children matching predicate
|
|
284
|
+
node.findChild(pred?) // Find first direct child matching predicate
|
|
285
|
+
node.children // Direct children array
|
|
286
|
+
node.parent // Parent node
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## What Does NOT Work
|
|
292
|
+
|
|
293
|
+
| API | Status |
|
|
294
|
+
|-----|--------|
|
|
295
|
+
| `figma.notify()` | **Throws "not implemented"** — most common mistake |
|
|
296
|
+
| `figma.showUI()` | No-op (silently ignored) |
|
|
297
|
+
| `figma.openExternal()` | No-op (silently ignored) |
|
|
298
|
+
| `figma.listAvailableFontsAsync()` | Not implemented |
|
|
299
|
+
| `figma.loadAllPagesAsync()` | Not implemented |
|
|
300
|
+
| `figma.variables.extendLibraryCollectionByKeyAsync()` | Not implemented |
|
|
301
|
+
| `figma.teamLibrary.*` | Not implemented (requires LiveGraph) |
|