@fprad0/skill-master-mcp 0.0.11 → 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 -83
- package/README.md +472 -443
- package/VERSION.md +9 -9
- package/bin/lib/bootstrap-global-core.mjs +34 -0
- package/bin/lib/client-config.mjs +293 -268
- package/bin/lib/doctor-core.mjs +202 -0
- package/bin/lib/menu-core.mjs +1629 -1154
- package/bin/lib/operation-result.mjs +59 -0
- package/bin/lib/register-clients-core.mjs +247 -0
- package/bin/lib/skill-installation.mjs +215 -0
- 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 -181
- package/bin/skill-master-eval-activation.mjs +32 -32
- package/bin/skill-master-install-global-skills.mjs +59 -97
- package/bin/skill-master-install-project-skills.mjs +97 -0
- package/bin/skill-master-menu.mjs +406 -320
- package/bin/skill-master-register-clients.mjs +232 -98
- 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 -255
- 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 -0
- package/docs/operations/assets/menu-frame-compact.html +76 -0
- package/docs/operations/assets/menu-frame-compact.png +0 -0
- package/docs/operations/assets/menu-frame-large.html +84 -0
- package/docs/operations/assets/menu-frame-large.png +0 -0
- package/docs/operations/assets/menu-frame-running.html +80 -0
- package/docs/operations/assets/menu-frame-running.png +0 -0
- package/docs/operations/cross-platform-auth-transfer/ANALISE_COMPATIBILIDADE_MCP_2026-06-28.md +140 -0
- package/docs/operations/cross-platform-auth-transfer/README_TRANSFERENCIA.md +85 -0
- package/docs/operations/reborn-menu-cyberpunk-transfer/ANALISE_MENU_REBORN_CYBERPUNK_2026-06-28.md +174 -0
- package/docs/operations/reborn-menu-cyberpunk-transfer/HANDOFF_IMPLEMENTACAO_REBORN_CYBERPUNK_2026-06-28.md +119 -0
- package/docs/operations/reborn-menu-cyberpunk-transfer/ORDEM_DE_EXECUCAO_MENU_REBORN_CYBERPUNK.md +134 -0
- package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA.md +84 -0
- package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA_REBORN_PACKAGE.md +56 -0
- package/docs/operations/reborn-menu-cyberpunk-transfer/references/cyan-hud-frame-sheet.jpg +0 -0
- package/docs/operations/reborn-menu-cyberpunk-transfer/references/cyberpunk-pattern-sheet.jpg +0 -0
- package/docs/operations/reborn-menu-cyberpunk-transfer/references/fluid-workflow-windows.gif +0 -0
- 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 -0
- package/docs/prompt-tasks/PROMPT_TASK_002_AUTO_UPDATE_LAUNCHER.md +6 -0
- package/docs/prompt-tasks/PROMPT_TASK_003_REMOTE_MANIFEST_AND_RELEASES.md +6 -0
- package/docs/prompt-tasks/PROMPT_TASK_004_MULTI_USER_DISTRIBUTION.md +6 -0
- package/docs/prompt-tasks/PROMPT_TASK_005_SECURITY_AND_QUALITY_GATE.md +6 -0
- package/docs/prompt-tasks/PROMPT_TASK_006_MASTER_ACIONAMENTO_APRENDIZADO.md +83 -0
- package/docs/prompt-tasks/PROMPT_TASK_007_PERSONA_ORQUESTRADORA.md +88 -0
- package/docs/prompt-tasks/PROMPT_TASK_008_PROMPT_ROUTER_MODOS_ATIVACAO.md +156 -0
- package/docs/prompt-tasks/PROMPT_TASK_009_PIPELINE_APRENDIZADO_SUCESSO.md +105 -0
- package/docs/prompt-tasks/PROMPT_TASK_010_EVALS_GOVERNANCA_ATIVACAO.md +119 -0
- package/docs/prompt-tasks/PROMPT_TASK_011_MENU_NOTIFICACOES_NOTION.md +120 -0
- package/docs/prompt-tasks/PROMPT_TASK_012_MENU_CYBERPUNK_PIXEL_FRAME.md +123 -0
- package/docs/prompt-tasks/PROMPT_TASK_013_MENU_FLUID_DNA_ANIMATION.md +114 -0
- package/docs/prompt-tasks/PROMPT_TASK_014_MENU_FUNCTIONAL_PARITY_QA.md +157 -0
- package/docs/prompt-tasks/PROMPT_TASK_015_TRANSFER_RELEASE_HANDOFF.md +127 -0
- package/docs/prompt-tasks/PROMPT_TASK_016_CROSS_PLATFORM_MCP_AUTH_REGISTRATION.md +107 -0
- package/docs/prompt-tasks/PROMPT_TASK_018_NPM_PUBLISH_2FA_SETUP.md +80 -0
- package/docs/prompt-tasks/PROMPT_TASK_019_TOKEN_ECONOMY_GLOBAL_SKILLS.md +56 -0
- package/docs/prompt-tasks/PROMPT_TASK_MASTER_EXECUTOR.md +6 -0
- 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 -0
- package/docs/skill-candidates/v0.0.12/css-senior-master-engineering/SKILL.md +32 -0
- package/docs/skill-candidates/v0.0.12/go-senior-master-engineering/SKILL.md +32 -0
- package/docs/skill-candidates/v0.0.12/html-senior-master-engineering/SKILL.md +32 -0
- package/docs/skill-candidates/v0.0.12/javascript-senior-master-engineering/SKILL.md +32 -0
- package/docs/skill-candidates/v0.0.12/json-senior-master-engineering/SKILL.md +32 -0
- 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 -0
- package/docs/skill-candidates/v0.0.12/react-senior-master-engineering/SKILL.md +32 -0
- package/docs/skill-candidates/v0.0.12/ruby-senior-master-engineering/SKILL.md +32 -0
- package/docs/skill-candidates/v0.0.12/senior-master-code-optimizer/SKILL.md +48 -0
- package/docs/skill-candidates/v0.0.12/sql-senior-master-engineering/SKILL.md +31 -0
- 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 -0
- 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 -17
- 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 -78
- package/scripts/configure-private-registry.mjs +208 -208
- package/scripts/lib/private-registry.mjs +97 -97
- package/scripts/render-menu-evidence.mjs +130 -0
- package/scripts/verify-menu-actions.mjs +117 -115
- package/sources.json +11 -11
package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createSemanticTokens.js
CHANGED
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* createSemanticTokens
|
|
3
|
-
*
|
|
4
|
-
* Creates a batch of Figma variables in the given collection, one per entry in
|
|
5
|
-
* `tokenMap`. Supports raw values, variable alias references, code syntax, and
|
|
6
|
-
* scopes. Returns a map of token name → Variable for use in subsequent steps.
|
|
7
|
-
*
|
|
8
|
-
* @param {VariableCollection} collection - The target variable collection.
|
|
9
|
-
* @param {Record<string, string>} modeIds - Map of {modeName: modeId} from createVariableCollection.
|
|
10
|
-
* @param {Array<{
|
|
11
|
-
* name: string,
|
|
12
|
-
* type: 'COLOR' | 'FLOAT' | 'STRING' | 'BOOLEAN',
|
|
13
|
-
* values: Record<string, string | number | boolean | {type: 'VARIABLE_ALIAS', id: string}>,
|
|
14
|
-
* scopes?: VariableScope[],
|
|
15
|
-
* codeSyntax?: {WEB?: string, ANDROID?: string, iOS?: string}
|
|
16
|
-
* }>} tokenMap - Ordered list of token definitions.
|
|
17
|
-
* - `name`: Variable name using slash hierarchy (e.g. "color/bg/primary").
|
|
18
|
-
* - `type`: Figma variable type.
|
|
19
|
-
* - `values`: Map of {modeName: value}. Values can be raw (hex string for COLOR,
|
|
20
|
-
* number for FLOAT) or alias objects {type: 'VARIABLE_ALIAS', id: variableId}.
|
|
21
|
-
* For COLOR, raw values are accepted as hex strings ("#rrggbb" or "#rrggbbaa")
|
|
22
|
-
* and converted to {r, g, b, a} automatically.
|
|
23
|
-
* - `scopes`: Array of VariableScope strings. Omit to use [] (hidden/primitive).
|
|
24
|
-
* - `codeSyntax`: Platform code syntax strings. Omit to skip.
|
|
25
|
-
* @param {string} [runId] - Optional dsb_run_id to tag every variable.
|
|
26
|
-
* @returns {Promise<{variables: Record<string, Variable>}>}
|
|
27
|
-
* `variables` maps each token name to its created Variable object.
|
|
28
|
-
*/
|
|
29
|
-
async function createSemanticTokens(collection, modeIds, tokenMap, runId) {
|
|
30
|
-
const variables = {}
|
|
31
|
-
|
|
32
|
-
for (const token of tokenMap) {
|
|
33
|
-
// Create the variable
|
|
34
|
-
const variable = figma.variables.createVariable(token.name, collection, token.type)
|
|
35
|
-
|
|
36
|
-
// Tag for cleanup
|
|
37
|
-
variable.setPluginData('dsb_key', `variable/${token.name}`)
|
|
38
|
-
if (runId) {
|
|
39
|
-
variable.setPluginData('dsb_run_id', runId)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Set values for each mode
|
|
43
|
-
for (const [modeName, rawValue] of Object.entries(token.values)) {
|
|
44
|
-
const modeId = modeIds[modeName]
|
|
45
|
-
if (!modeId) {
|
|
46
|
-
throw new Error(
|
|
47
|
-
`createSemanticTokens: mode "${modeName}" not found in modeIds for token "${token.name}". ` +
|
|
48
|
-
`Available modes: ${Object.keys(modeIds).join(', ')}`,
|
|
49
|
-
)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
let value = rawValue
|
|
53
|
-
|
|
54
|
-
// Convert hex strings to Figma RGBA for COLOR type
|
|
55
|
-
if (token.type === 'COLOR' && typeof rawValue === 'string' && rawValue.startsWith('#')) {
|
|
56
|
-
value = hexToFigmaColor(rawValue)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
variable.setValueForMode(modeId, value)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Set scopes (default: empty array = hidden from property pickers / primitives)
|
|
63
|
-
variable.scopes = token.scopes || []
|
|
64
|
-
|
|
65
|
-
// Set code syntax per platform
|
|
66
|
-
if (token.codeSyntax) {
|
|
67
|
-
if (token.codeSyntax.WEB) {
|
|
68
|
-
variable.setVariableCodeSyntax('WEB', token.codeSyntax.WEB)
|
|
69
|
-
}
|
|
70
|
-
if (token.codeSyntax.ANDROID) {
|
|
71
|
-
variable.setVariableCodeSyntax('ANDROID', token.codeSyntax.ANDROID)
|
|
72
|
-
}
|
|
73
|
-
if (token.codeSyntax.iOS) {
|
|
74
|
-
variable.setVariableCodeSyntax('iOS', token.codeSyntax.iOS)
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
variables[token.name] = variable
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return { variables }
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Converts a hex color string to a Figma RGBA object.
|
|
86
|
-
* Supports "#rgb", "#rrggbb", and "#rrggbbaa".
|
|
87
|
-
*
|
|
88
|
-
* @param {string} hex
|
|
89
|
-
* @returns {{ r: number, g: number, b: number, a: number }}
|
|
90
|
-
*/
|
|
91
|
-
function hexToFigmaColor(hex) {
|
|
92
|
-
let h = hex.replace('#', '')
|
|
93
|
-
|
|
94
|
-
// Expand shorthand #rgb → #rrggbb
|
|
95
|
-
if (h.length === 3) {
|
|
96
|
-
h = h
|
|
97
|
-
.split('')
|
|
98
|
-
.map((c) => c + c)
|
|
99
|
-
.join('')
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const r = parseInt(h.substring(0, 2), 16) / 255
|
|
103
|
-
const g = parseInt(h.substring(2, 4), 16) / 255
|
|
104
|
-
const b = parseInt(h.substring(4, 6), 16) / 255
|
|
105
|
-
const a = h.length === 8 ? parseInt(h.substring(6, 8), 16) / 255 : 1
|
|
106
|
-
|
|
107
|
-
return { r, g, b, a }
|
|
108
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* createSemanticTokens
|
|
3
|
+
*
|
|
4
|
+
* Creates a batch of Figma variables in the given collection, one per entry in
|
|
5
|
+
* `tokenMap`. Supports raw values, variable alias references, code syntax, and
|
|
6
|
+
* scopes. Returns a map of token name → Variable for use in subsequent steps.
|
|
7
|
+
*
|
|
8
|
+
* @param {VariableCollection} collection - The target variable collection.
|
|
9
|
+
* @param {Record<string, string>} modeIds - Map of {modeName: modeId} from createVariableCollection.
|
|
10
|
+
* @param {Array<{
|
|
11
|
+
* name: string,
|
|
12
|
+
* type: 'COLOR' | 'FLOAT' | 'STRING' | 'BOOLEAN',
|
|
13
|
+
* values: Record<string, string | number | boolean | {type: 'VARIABLE_ALIAS', id: string}>,
|
|
14
|
+
* scopes?: VariableScope[],
|
|
15
|
+
* codeSyntax?: {WEB?: string, ANDROID?: string, iOS?: string}
|
|
16
|
+
* }>} tokenMap - Ordered list of token definitions.
|
|
17
|
+
* - `name`: Variable name using slash hierarchy (e.g. "color/bg/primary").
|
|
18
|
+
* - `type`: Figma variable type.
|
|
19
|
+
* - `values`: Map of {modeName: value}. Values can be raw (hex string for COLOR,
|
|
20
|
+
* number for FLOAT) or alias objects {type: 'VARIABLE_ALIAS', id: variableId}.
|
|
21
|
+
* For COLOR, raw values are accepted as hex strings ("#rrggbb" or "#rrggbbaa")
|
|
22
|
+
* and converted to {r, g, b, a} automatically.
|
|
23
|
+
* - `scopes`: Array of VariableScope strings. Omit to use [] (hidden/primitive).
|
|
24
|
+
* - `codeSyntax`: Platform code syntax strings. Omit to skip.
|
|
25
|
+
* @param {string} [runId] - Optional dsb_run_id to tag every variable.
|
|
26
|
+
* @returns {Promise<{variables: Record<string, Variable>}>}
|
|
27
|
+
* `variables` maps each token name to its created Variable object.
|
|
28
|
+
*/
|
|
29
|
+
async function createSemanticTokens(collection, modeIds, tokenMap, runId) {
|
|
30
|
+
const variables = {}
|
|
31
|
+
|
|
32
|
+
for (const token of tokenMap) {
|
|
33
|
+
// Create the variable
|
|
34
|
+
const variable = figma.variables.createVariable(token.name, collection, token.type)
|
|
35
|
+
|
|
36
|
+
// Tag for cleanup
|
|
37
|
+
variable.setPluginData('dsb_key', `variable/${token.name}`)
|
|
38
|
+
if (runId) {
|
|
39
|
+
variable.setPluginData('dsb_run_id', runId)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Set values for each mode
|
|
43
|
+
for (const [modeName, rawValue] of Object.entries(token.values)) {
|
|
44
|
+
const modeId = modeIds[modeName]
|
|
45
|
+
if (!modeId) {
|
|
46
|
+
throw new Error(
|
|
47
|
+
`createSemanticTokens: mode "${modeName}" not found in modeIds for token "${token.name}". ` +
|
|
48
|
+
`Available modes: ${Object.keys(modeIds).join(', ')}`,
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let value = rawValue
|
|
53
|
+
|
|
54
|
+
// Convert hex strings to Figma RGBA for COLOR type
|
|
55
|
+
if (token.type === 'COLOR' && typeof rawValue === 'string' && rawValue.startsWith('#')) {
|
|
56
|
+
value = hexToFigmaColor(rawValue)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
variable.setValueForMode(modeId, value)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Set scopes (default: empty array = hidden from property pickers / primitives)
|
|
63
|
+
variable.scopes = token.scopes || []
|
|
64
|
+
|
|
65
|
+
// Set code syntax per platform
|
|
66
|
+
if (token.codeSyntax) {
|
|
67
|
+
if (token.codeSyntax.WEB) {
|
|
68
|
+
variable.setVariableCodeSyntax('WEB', token.codeSyntax.WEB)
|
|
69
|
+
}
|
|
70
|
+
if (token.codeSyntax.ANDROID) {
|
|
71
|
+
variable.setVariableCodeSyntax('ANDROID', token.codeSyntax.ANDROID)
|
|
72
|
+
}
|
|
73
|
+
if (token.codeSyntax.iOS) {
|
|
74
|
+
variable.setVariableCodeSyntax('iOS', token.codeSyntax.iOS)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
variables[token.name] = variable
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return { variables }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Converts a hex color string to a Figma RGBA object.
|
|
86
|
+
* Supports "#rgb", "#rrggbb", and "#rrggbbaa".
|
|
87
|
+
*
|
|
88
|
+
* @param {string} hex
|
|
89
|
+
* @returns {{ r: number, g: number, b: number, a: number }}
|
|
90
|
+
*/
|
|
91
|
+
function hexToFigmaColor(hex) {
|
|
92
|
+
let h = hex.replace('#', '')
|
|
93
|
+
|
|
94
|
+
// Expand shorthand #rgb → #rrggbb
|
|
95
|
+
if (h.length === 3) {
|
|
96
|
+
h = h
|
|
97
|
+
.split('')
|
|
98
|
+
.map((c) => c + c)
|
|
99
|
+
.join('')
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const r = parseInt(h.substring(0, 2), 16) / 255
|
|
103
|
+
const g = parseInt(h.substring(2, 4), 16) / 255
|
|
104
|
+
const b = parseInt(h.substring(4, 6), 16) / 255
|
|
105
|
+
const a = h.length === 8 ? parseInt(h.substring(6, 8), 16) / 255 : 1
|
|
106
|
+
|
|
107
|
+
return { r, g, b, a }
|
|
108
|
+
}
|
package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createVariableCollection.js
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* createVariableCollection
|
|
3
|
-
*
|
|
4
|
-
* Creates a new Figma variable collection with the specified name and modes.
|
|
5
|
-
* If `modeNames` has more than one entry, the first mode is renamed from
|
|
6
|
-
* Figma's default "Mode 1" to the first name, and additional modes are added.
|
|
7
|
-
*
|
|
8
|
-
* Every created collection is tagged with `dsb_key` plugin data so it can be
|
|
9
|
-
* found and cleaned up idempotently by `cleanupOrphans`.
|
|
10
|
-
*
|
|
11
|
-
* @param {string} name - The display name of the collection (e.g. "Color", "Spacing").
|
|
12
|
-
* @param {string[]} modeNames - Ordered list of mode names (e.g. ["Light", "Dark"] or ["Value"]).
|
|
13
|
-
* @param {string} [runId] - Optional dsb_run_id to tag for cleanup.
|
|
14
|
-
* @returns {Promise<{
|
|
15
|
-
* collection: VariableCollection,
|
|
16
|
-
* modeIds: Record<string, string>
|
|
17
|
-
* }>}
|
|
18
|
-
* `modeIds` maps each mode name to its modeId string.
|
|
19
|
-
*/
|
|
20
|
-
async function createVariableCollection(name, modeNames, runId) {
|
|
21
|
-
if (!modeNames || modeNames.length === 0) {
|
|
22
|
-
throw new Error('createVariableCollection: modeNames must have at least one entry.')
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Create the collection — Figma always creates it with one mode named "Mode 1".
|
|
26
|
-
const collection = figma.variables.createVariableCollection(name)
|
|
27
|
-
|
|
28
|
-
// Tag for idempotent cleanup
|
|
29
|
-
collection.setPluginData('dsb_key', `collection/${name}`)
|
|
30
|
-
if (runId) {
|
|
31
|
-
collection.setPluginData('dsb_run_id', runId)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// modeIds accumulator
|
|
35
|
-
const modeIds = {}
|
|
36
|
-
|
|
37
|
-
// Rename the default first mode
|
|
38
|
-
const defaultMode = collection.modes[0]
|
|
39
|
-
collection.renameMode(defaultMode.modeId, modeNames[0])
|
|
40
|
-
modeIds[modeNames[0]] = defaultMode.modeId
|
|
41
|
-
|
|
42
|
-
// Add additional modes
|
|
43
|
-
for (let i = 1; i < modeNames.length; i++) {
|
|
44
|
-
const newModeId = collection.addMode(modeNames[i])
|
|
45
|
-
modeIds[modeNames[i]] = newModeId
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return { collection, modeIds }
|
|
49
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* createVariableCollection
|
|
3
|
+
*
|
|
4
|
+
* Creates a new Figma variable collection with the specified name and modes.
|
|
5
|
+
* If `modeNames` has more than one entry, the first mode is renamed from
|
|
6
|
+
* Figma's default "Mode 1" to the first name, and additional modes are added.
|
|
7
|
+
*
|
|
8
|
+
* Every created collection is tagged with `dsb_key` plugin data so it can be
|
|
9
|
+
* found and cleaned up idempotently by `cleanupOrphans`.
|
|
10
|
+
*
|
|
11
|
+
* @param {string} name - The display name of the collection (e.g. "Color", "Spacing").
|
|
12
|
+
* @param {string[]} modeNames - Ordered list of mode names (e.g. ["Light", "Dark"] or ["Value"]).
|
|
13
|
+
* @param {string} [runId] - Optional dsb_run_id to tag for cleanup.
|
|
14
|
+
* @returns {Promise<{
|
|
15
|
+
* collection: VariableCollection,
|
|
16
|
+
* modeIds: Record<string, string>
|
|
17
|
+
* }>}
|
|
18
|
+
* `modeIds` maps each mode name to its modeId string.
|
|
19
|
+
*/
|
|
20
|
+
async function createVariableCollection(name, modeNames, runId) {
|
|
21
|
+
if (!modeNames || modeNames.length === 0) {
|
|
22
|
+
throw new Error('createVariableCollection: modeNames must have at least one entry.')
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Create the collection — Figma always creates it with one mode named "Mode 1".
|
|
26
|
+
const collection = figma.variables.createVariableCollection(name)
|
|
27
|
+
|
|
28
|
+
// Tag for idempotent cleanup
|
|
29
|
+
collection.setPluginData('dsb_key', `collection/${name}`)
|
|
30
|
+
if (runId) {
|
|
31
|
+
collection.setPluginData('dsb_run_id', runId)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// modeIds accumulator
|
|
35
|
+
const modeIds = {}
|
|
36
|
+
|
|
37
|
+
// Rename the default first mode
|
|
38
|
+
const defaultMode = collection.modes[0]
|
|
39
|
+
collection.renameMode(defaultMode.modeId, modeNames[0])
|
|
40
|
+
modeIds[modeNames[0]] = defaultMode.modeId
|
|
41
|
+
|
|
42
|
+
// Add additional modes
|
|
43
|
+
for (let i = 1; i < modeNames.length; i++) {
|
|
44
|
+
const newModeId = collection.addMode(modeNames[i])
|
|
45
|
+
modeIds[modeNames[i]] = newModeId
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return { collection, modeIds }
|
|
49
|
+
}
|
package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/inspectFileStructure.js
CHANGED
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* inspectFileStructure
|
|
3
|
-
*
|
|
4
|
-
* Reads the current Figma file and returns a structural inventory:
|
|
5
|
-
* all pages (with child counts), all local variable collections (with mode
|
|
6
|
-
* names and variable counts), all component sets, all local text styles,
|
|
7
|
-
* and all local effect styles.
|
|
8
|
-
*
|
|
9
|
-
* This is a read-only discovery function — it never creates or mutates nodes.
|
|
10
|
-
* Run it at the start of Phase 0 to understand what already exists before
|
|
11
|
-
* planning any creation work.
|
|
12
|
-
*
|
|
13
|
-
* @returns {Promise<{
|
|
14
|
-
* pages: Array<{id: string, name: string, childCount: number}>,
|
|
15
|
-
* variableCollections: Array<{
|
|
16
|
-
* id: string,
|
|
17
|
-
* name: string,
|
|
18
|
-
* modes: Array<{modeId: string, name: string}>,
|
|
19
|
-
* variableCount: number,
|
|
20
|
-
* variableNames: string[]
|
|
21
|
-
* }>,
|
|
22
|
-
* componentSets: Array<{id: string, name: string, variantCount: number, pageId: string, pageName: string}>,
|
|
23
|
-
* textStyles: Array<{id: string, name: string, fontFamily: string, fontStyle: string, fontSize: number}>,
|
|
24
|
-
* effectStyles: Array<{id: string, name: string, effectCount: number}>
|
|
25
|
-
* }>}
|
|
26
|
-
*/
|
|
27
|
-
async function inspectFileStructure() {
|
|
28
|
-
const result = {
|
|
29
|
-
pages: [],
|
|
30
|
-
variableCollections: [],
|
|
31
|
-
componentSets: [],
|
|
32
|
-
textStyles: [],
|
|
33
|
-
effectStyles: [],
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// --- Pages ---
|
|
37
|
-
for (const page of figma.root.children) {
|
|
38
|
-
result.pages.push({
|
|
39
|
-
id: page.id,
|
|
40
|
-
name: page.name,
|
|
41
|
-
childCount: page.children.length,
|
|
42
|
-
})
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// --- Variable collections ---
|
|
46
|
-
const collections = figma.variables.getLocalVariableCollections()
|
|
47
|
-
for (const coll of collections) {
|
|
48
|
-
const variableNames = coll.variableIds
|
|
49
|
-
.map((id) => figma.variables.getVariableById(id))
|
|
50
|
-
.filter(Boolean)
|
|
51
|
-
.map((v) => v.name)
|
|
52
|
-
|
|
53
|
-
result.variableCollections.push({
|
|
54
|
-
id: coll.id,
|
|
55
|
-
name: coll.name,
|
|
56
|
-
modes: coll.modes.map((m) => ({ modeId: m.modeId, name: m.name })),
|
|
57
|
-
variableCount: coll.variableIds.length,
|
|
58
|
-
variableNames,
|
|
59
|
-
})
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// --- Component sets (and standalone components) ---
|
|
63
|
-
// We need to load all pages to inspect components across the whole file.
|
|
64
|
-
const originalPage = figma.currentPage
|
|
65
|
-
|
|
66
|
-
for (const page of figma.root.children) {
|
|
67
|
-
await figma.setCurrentPageAsync(page)
|
|
68
|
-
|
|
69
|
-
const componentSetsOnPage = page.findAllWithCriteria({ types: ['COMPONENT_SET'] })
|
|
70
|
-
for (const cs of componentSetsOnPage) {
|
|
71
|
-
result.componentSets.push({
|
|
72
|
-
id: cs.id,
|
|
73
|
-
name: cs.name,
|
|
74
|
-
variantCount: cs.children.length,
|
|
75
|
-
pageId: page.id,
|
|
76
|
-
pageName: page.name,
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Also capture standalone components (not inside a component set)
|
|
81
|
-
const standaloneComponents = page
|
|
82
|
-
.findAllWithCriteria({ types: ['COMPONENT'] })
|
|
83
|
-
.filter((c) => c.parent && c.parent.type !== 'COMPONENT_SET')
|
|
84
|
-
for (const comp of standaloneComponents) {
|
|
85
|
-
result.componentSets.push({
|
|
86
|
-
id: comp.id,
|
|
87
|
-
name: comp.name,
|
|
88
|
-
variantCount: 1,
|
|
89
|
-
pageId: page.id,
|
|
90
|
-
pageName: page.name,
|
|
91
|
-
})
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// Restore original page
|
|
96
|
-
await figma.setCurrentPageAsync(originalPage)
|
|
97
|
-
|
|
98
|
-
// --- Text styles ---
|
|
99
|
-
const textStyles = figma.getLocalTextStyles()
|
|
100
|
-
for (const ts of textStyles) {
|
|
101
|
-
result.textStyles.push({
|
|
102
|
-
id: ts.id,
|
|
103
|
-
name: ts.name,
|
|
104
|
-
fontFamily: ts.fontName.family,
|
|
105
|
-
fontStyle: ts.fontName.style,
|
|
106
|
-
fontSize: ts.fontSize,
|
|
107
|
-
})
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// --- Effect styles ---
|
|
111
|
-
const effectStyles = figma.getLocalEffectStyles()
|
|
112
|
-
for (const es of effectStyles) {
|
|
113
|
-
result.effectStyles.push({
|
|
114
|
-
id: es.id,
|
|
115
|
-
name: es.name,
|
|
116
|
-
effectCount: es.effects.length,
|
|
117
|
-
})
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return result
|
|
121
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* inspectFileStructure
|
|
3
|
+
*
|
|
4
|
+
* Reads the current Figma file and returns a structural inventory:
|
|
5
|
+
* all pages (with child counts), all local variable collections (with mode
|
|
6
|
+
* names and variable counts), all component sets, all local text styles,
|
|
7
|
+
* and all local effect styles.
|
|
8
|
+
*
|
|
9
|
+
* This is a read-only discovery function — it never creates or mutates nodes.
|
|
10
|
+
* Run it at the start of Phase 0 to understand what already exists before
|
|
11
|
+
* planning any creation work.
|
|
12
|
+
*
|
|
13
|
+
* @returns {Promise<{
|
|
14
|
+
* pages: Array<{id: string, name: string, childCount: number}>,
|
|
15
|
+
* variableCollections: Array<{
|
|
16
|
+
* id: string,
|
|
17
|
+
* name: string,
|
|
18
|
+
* modes: Array<{modeId: string, name: string}>,
|
|
19
|
+
* variableCount: number,
|
|
20
|
+
* variableNames: string[]
|
|
21
|
+
* }>,
|
|
22
|
+
* componentSets: Array<{id: string, name: string, variantCount: number, pageId: string, pageName: string}>,
|
|
23
|
+
* textStyles: Array<{id: string, name: string, fontFamily: string, fontStyle: string, fontSize: number}>,
|
|
24
|
+
* effectStyles: Array<{id: string, name: string, effectCount: number}>
|
|
25
|
+
* }>}
|
|
26
|
+
*/
|
|
27
|
+
async function inspectFileStructure() {
|
|
28
|
+
const result = {
|
|
29
|
+
pages: [],
|
|
30
|
+
variableCollections: [],
|
|
31
|
+
componentSets: [],
|
|
32
|
+
textStyles: [],
|
|
33
|
+
effectStyles: [],
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// --- Pages ---
|
|
37
|
+
for (const page of figma.root.children) {
|
|
38
|
+
result.pages.push({
|
|
39
|
+
id: page.id,
|
|
40
|
+
name: page.name,
|
|
41
|
+
childCount: page.children.length,
|
|
42
|
+
})
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// --- Variable collections ---
|
|
46
|
+
const collections = figma.variables.getLocalVariableCollections()
|
|
47
|
+
for (const coll of collections) {
|
|
48
|
+
const variableNames = coll.variableIds
|
|
49
|
+
.map((id) => figma.variables.getVariableById(id))
|
|
50
|
+
.filter(Boolean)
|
|
51
|
+
.map((v) => v.name)
|
|
52
|
+
|
|
53
|
+
result.variableCollections.push({
|
|
54
|
+
id: coll.id,
|
|
55
|
+
name: coll.name,
|
|
56
|
+
modes: coll.modes.map((m) => ({ modeId: m.modeId, name: m.name })),
|
|
57
|
+
variableCount: coll.variableIds.length,
|
|
58
|
+
variableNames,
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// --- Component sets (and standalone components) ---
|
|
63
|
+
// We need to load all pages to inspect components across the whole file.
|
|
64
|
+
const originalPage = figma.currentPage
|
|
65
|
+
|
|
66
|
+
for (const page of figma.root.children) {
|
|
67
|
+
await figma.setCurrentPageAsync(page)
|
|
68
|
+
|
|
69
|
+
const componentSetsOnPage = page.findAllWithCriteria({ types: ['COMPONENT_SET'] })
|
|
70
|
+
for (const cs of componentSetsOnPage) {
|
|
71
|
+
result.componentSets.push({
|
|
72
|
+
id: cs.id,
|
|
73
|
+
name: cs.name,
|
|
74
|
+
variantCount: cs.children.length,
|
|
75
|
+
pageId: page.id,
|
|
76
|
+
pageName: page.name,
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Also capture standalone components (not inside a component set)
|
|
81
|
+
const standaloneComponents = page
|
|
82
|
+
.findAllWithCriteria({ types: ['COMPONENT'] })
|
|
83
|
+
.filter((c) => c.parent && c.parent.type !== 'COMPONENT_SET')
|
|
84
|
+
for (const comp of standaloneComponents) {
|
|
85
|
+
result.componentSets.push({
|
|
86
|
+
id: comp.id,
|
|
87
|
+
name: comp.name,
|
|
88
|
+
variantCount: 1,
|
|
89
|
+
pageId: page.id,
|
|
90
|
+
pageName: page.name,
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Restore original page
|
|
96
|
+
await figma.setCurrentPageAsync(originalPage)
|
|
97
|
+
|
|
98
|
+
// --- Text styles ---
|
|
99
|
+
const textStyles = figma.getLocalTextStyles()
|
|
100
|
+
for (const ts of textStyles) {
|
|
101
|
+
result.textStyles.push({
|
|
102
|
+
id: ts.id,
|
|
103
|
+
name: ts.name,
|
|
104
|
+
fontFamily: ts.fontName.family,
|
|
105
|
+
fontStyle: ts.fontName.style,
|
|
106
|
+
fontSize: ts.fontSize,
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// --- Effect styles ---
|
|
111
|
+
const effectStyles = figma.getLocalEffectStyles()
|
|
112
|
+
for (const es of effectStyles) {
|
|
113
|
+
result.effectStyles.push({
|
|
114
|
+
id: es.id,
|
|
115
|
+
name: es.name,
|
|
116
|
+
effectCount: es.effects.length,
|
|
117
|
+
})
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return result
|
|
121
|
+
}
|