@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,92 +1,92 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scans the entire Figma file for nodes tagged with dsb_* pluginData
|
|
3
|
-
* and returns a complete state map for session recovery.
|
|
4
|
-
*
|
|
5
|
-
* Use this at the start of every new session, after context truncation,
|
|
6
|
-
* or when resuming an interrupted build.
|
|
7
|
-
*
|
|
8
|
-
* @param {string} runId - The run ID to filter by (optional — if omitted, returns ALL dsb-tagged nodes)
|
|
9
|
-
* @returns {{ runId: string, taggedNodes: Object<string, {nodeId: string, type: string, name: string, phase: string}>, variableCollections: Array, variables: Array, styles: Array }}
|
|
10
|
-
*/
|
|
11
|
-
async function rehydrateState(runId) {
|
|
12
|
-
const taggedNodes = {}
|
|
13
|
-
const variableCollections = []
|
|
14
|
-
const variables = []
|
|
15
|
-
const styles = []
|
|
16
|
-
|
|
17
|
-
// Scan all pages for dsb-tagged scene nodes
|
|
18
|
-
for (const page of figma.root.children) {
|
|
19
|
-
await figma.setCurrentPageAsync(page)
|
|
20
|
-
|
|
21
|
-
// Check the page itself
|
|
22
|
-
const pageRunId = page.getPluginData('dsb_run_id')
|
|
23
|
-
const pageKey = page.getPluginData('dsb_key')
|
|
24
|
-
if (pageKey && (!runId || pageRunId === runId)) {
|
|
25
|
-
taggedNodes[pageKey] = {
|
|
26
|
-
nodeId: page.id,
|
|
27
|
-
type: page.type,
|
|
28
|
-
name: page.name,
|
|
29
|
-
phase: page.getPluginData('dsb_phase') || 'unknown',
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Scan all descendants
|
|
34
|
-
page.findAll((node) => {
|
|
35
|
-
const nodeRunId = node.getPluginData('dsb_run_id')
|
|
36
|
-
const nodeKey = node.getPluginData('dsb_key')
|
|
37
|
-
if (nodeKey && (!runId || nodeRunId === runId)) {
|
|
38
|
-
taggedNodes[nodeKey] = {
|
|
39
|
-
nodeId: node.id,
|
|
40
|
-
type: node.type,
|
|
41
|
-
name: node.name,
|
|
42
|
-
phase: node.getPluginData('dsb_phase') || 'unknown',
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return false // don't collect, just scan
|
|
46
|
-
})
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Inventory variable collections (variables don't support pluginData — use name-based lookup)
|
|
50
|
-
const collections = figma.variables.getLocalVariableCollections()
|
|
51
|
-
for (const coll of collections) {
|
|
52
|
-
variableCollections.push({
|
|
53
|
-
id: coll.id,
|
|
54
|
-
name: coll.name,
|
|
55
|
-
modes: coll.modes.map((m) => ({ modeId: m.modeId, name: m.name })),
|
|
56
|
-
variableCount: coll.variableIds.length,
|
|
57
|
-
})
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Inventory variables (name + collection for idempotency key)
|
|
61
|
-
const allVars = figma.variables.getLocalVariables()
|
|
62
|
-
for (const v of allVars) {
|
|
63
|
-
variables.push({
|
|
64
|
-
id: v.id,
|
|
65
|
-
name: v.name,
|
|
66
|
-
collectionId: v.variableCollectionId,
|
|
67
|
-
resolvedType: v.resolvedType,
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Inventory styles
|
|
72
|
-
for (const s of figma.getLocalTextStyles()) {
|
|
73
|
-
styles.push({ id: s.id, name: s.name, type: 'TEXT' })
|
|
74
|
-
}
|
|
75
|
-
for (const s of figma.getLocalEffectStyles()) {
|
|
76
|
-
styles.push({ id: s.id, name: s.name, type: 'EFFECT' })
|
|
77
|
-
}
|
|
78
|
-
for (const s of figma.getLocalPaintStyles()) {
|
|
79
|
-
styles.push({ id: s.id, name: s.name, type: 'PAINT' })
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return {
|
|
83
|
-
runId: runId || 'all',
|
|
84
|
-
taggedNodes,
|
|
85
|
-
taggedNodeCount: Object.keys(taggedNodes).length,
|
|
86
|
-
variableCollections,
|
|
87
|
-
variableCount: variables.length,
|
|
88
|
-
variables,
|
|
89
|
-
styleCount: styles.length,
|
|
90
|
-
styles,
|
|
91
|
-
}
|
|
92
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Scans the entire Figma file for nodes tagged with dsb_* pluginData
|
|
3
|
+
* and returns a complete state map for session recovery.
|
|
4
|
+
*
|
|
5
|
+
* Use this at the start of every new session, after context truncation,
|
|
6
|
+
* or when resuming an interrupted build.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} runId - The run ID to filter by (optional — if omitted, returns ALL dsb-tagged nodes)
|
|
9
|
+
* @returns {{ runId: string, taggedNodes: Object<string, {nodeId: string, type: string, name: string, phase: string}>, variableCollections: Array, variables: Array, styles: Array }}
|
|
10
|
+
*/
|
|
11
|
+
async function rehydrateState(runId) {
|
|
12
|
+
const taggedNodes = {}
|
|
13
|
+
const variableCollections = []
|
|
14
|
+
const variables = []
|
|
15
|
+
const styles = []
|
|
16
|
+
|
|
17
|
+
// Scan all pages for dsb-tagged scene nodes
|
|
18
|
+
for (const page of figma.root.children) {
|
|
19
|
+
await figma.setCurrentPageAsync(page)
|
|
20
|
+
|
|
21
|
+
// Check the page itself
|
|
22
|
+
const pageRunId = page.getPluginData('dsb_run_id')
|
|
23
|
+
const pageKey = page.getPluginData('dsb_key')
|
|
24
|
+
if (pageKey && (!runId || pageRunId === runId)) {
|
|
25
|
+
taggedNodes[pageKey] = {
|
|
26
|
+
nodeId: page.id,
|
|
27
|
+
type: page.type,
|
|
28
|
+
name: page.name,
|
|
29
|
+
phase: page.getPluginData('dsb_phase') || 'unknown',
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Scan all descendants
|
|
34
|
+
page.findAll((node) => {
|
|
35
|
+
const nodeRunId = node.getPluginData('dsb_run_id')
|
|
36
|
+
const nodeKey = node.getPluginData('dsb_key')
|
|
37
|
+
if (nodeKey && (!runId || nodeRunId === runId)) {
|
|
38
|
+
taggedNodes[nodeKey] = {
|
|
39
|
+
nodeId: node.id,
|
|
40
|
+
type: node.type,
|
|
41
|
+
name: node.name,
|
|
42
|
+
phase: node.getPluginData('dsb_phase') || 'unknown',
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return false // don't collect, just scan
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Inventory variable collections (variables don't support pluginData — use name-based lookup)
|
|
50
|
+
const collections = figma.variables.getLocalVariableCollections()
|
|
51
|
+
for (const coll of collections) {
|
|
52
|
+
variableCollections.push({
|
|
53
|
+
id: coll.id,
|
|
54
|
+
name: coll.name,
|
|
55
|
+
modes: coll.modes.map((m) => ({ modeId: m.modeId, name: m.name })),
|
|
56
|
+
variableCount: coll.variableIds.length,
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Inventory variables (name + collection for idempotency key)
|
|
61
|
+
const allVars = figma.variables.getLocalVariables()
|
|
62
|
+
for (const v of allVars) {
|
|
63
|
+
variables.push({
|
|
64
|
+
id: v.id,
|
|
65
|
+
name: v.name,
|
|
66
|
+
collectionId: v.variableCollectionId,
|
|
67
|
+
resolvedType: v.resolvedType,
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Inventory styles
|
|
72
|
+
for (const s of figma.getLocalTextStyles()) {
|
|
73
|
+
styles.push({ id: s.id, name: s.name, type: 'TEXT' })
|
|
74
|
+
}
|
|
75
|
+
for (const s of figma.getLocalEffectStyles()) {
|
|
76
|
+
styles.push({ id: s.id, name: s.name, type: 'EFFECT' })
|
|
77
|
+
}
|
|
78
|
+
for (const s of figma.getLocalPaintStyles()) {
|
|
79
|
+
styles.push({ id: s.id, name: s.name, type: 'PAINT' })
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
runId: runId || 'all',
|
|
84
|
+
taggedNodes,
|
|
85
|
+
taggedNodeCount: Object.keys(taggedNodes).length,
|
|
86
|
+
variableCollections,
|
|
87
|
+
variableCount: variables.length,
|
|
88
|
+
variables,
|
|
89
|
+
styleCount: styles.length,
|
|
90
|
+
styles,
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* validateCreation
|
|
3
|
-
*
|
|
4
|
-
* Verifies that a set of nodes exist and match expected structural properties.
|
|
5
|
-
* Designed to run immediately after a creation script to catch partial failures
|
|
6
|
-
* before proceeding to the next build phase.
|
|
7
|
-
*
|
|
8
|
-
* Each check specifies a node ID and any combination of expected properties.
|
|
9
|
-
* A check passes when all specified expectations are met; it fails (with a
|
|
10
|
-
* reason string) as soon as any expectation is violated.
|
|
11
|
-
*
|
|
12
|
-
* @param {Array<{
|
|
13
|
-
* nodeId: string,
|
|
14
|
-
* expectedChildCount?: number,
|
|
15
|
-
* expectedName?: string,
|
|
16
|
-
* expectedType?: NodeType
|
|
17
|
-
* }>} checks
|
|
18
|
-
* - `nodeId`: The Figma node ID to look up via figma.getNodeById.
|
|
19
|
-
* - `expectedChildCount`: If set, the node must have exactly this many direct children.
|
|
20
|
-
* Applies to any node with a `children` property (frames, component sets, etc.).
|
|
21
|
-
* - `expectedName`: If set, the node's `.name` must exactly match this string.
|
|
22
|
-
* - `expectedType`: If set, the node's `.type` must exactly match this string.
|
|
23
|
-
* @returns {{
|
|
24
|
-
* passed: string[],
|
|
25
|
-
* failed: Array<{nodeId: string, reason: string}>
|
|
26
|
-
* }}
|
|
27
|
-
* `passed`: Array of nodeIds that passed all checks.
|
|
28
|
-
* `failed`: Array of objects with the nodeId and a human-readable reason string.
|
|
29
|
-
*/
|
|
30
|
-
function validateCreation(checks) {
|
|
31
|
-
const passed = []
|
|
32
|
-
const failed = []
|
|
33
|
-
|
|
34
|
-
for (const check of checks) {
|
|
35
|
-
const node = figma.getNodeById(check.nodeId)
|
|
36
|
-
|
|
37
|
-
// Node must exist
|
|
38
|
-
if (!node) {
|
|
39
|
-
failed.push({
|
|
40
|
-
nodeId: check.nodeId,
|
|
41
|
-
reason: `Node not found. It may not have been created, or was deleted.`,
|
|
42
|
-
})
|
|
43
|
-
continue
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const reasons = []
|
|
47
|
-
|
|
48
|
-
// Type check
|
|
49
|
-
if (check.expectedType !== undefined && node.type !== check.expectedType) {
|
|
50
|
-
reasons.push(`type is "${node.type}", expected "${check.expectedType}"`)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Name check
|
|
54
|
-
if (check.expectedName !== undefined && node.name !== check.expectedName) {
|
|
55
|
-
reasons.push(`name is "${node.name}", expected "${check.expectedName}"`)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Child count check
|
|
59
|
-
if (check.expectedChildCount !== undefined) {
|
|
60
|
-
if (!('children' in node)) {
|
|
61
|
-
reasons.push(
|
|
62
|
-
`node type "${node.type}" does not have children, but expectedChildCount=${check.expectedChildCount} was specified`,
|
|
63
|
-
)
|
|
64
|
-
} else {
|
|
65
|
-
const actualCount = node.children.length
|
|
66
|
-
if (actualCount !== check.expectedChildCount) {
|
|
67
|
-
reasons.push(`has ${actualCount} children, expected ${check.expectedChildCount}`)
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (reasons.length > 0) {
|
|
73
|
-
failed.push({
|
|
74
|
-
nodeId: check.nodeId,
|
|
75
|
-
reason: reasons.join('; '),
|
|
76
|
-
})
|
|
77
|
-
} else {
|
|
78
|
-
passed.push(check.nodeId)
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return { passed, failed }
|
|
83
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* validateCreation
|
|
3
|
+
*
|
|
4
|
+
* Verifies that a set of nodes exist and match expected structural properties.
|
|
5
|
+
* Designed to run immediately after a creation script to catch partial failures
|
|
6
|
+
* before proceeding to the next build phase.
|
|
7
|
+
*
|
|
8
|
+
* Each check specifies a node ID and any combination of expected properties.
|
|
9
|
+
* A check passes when all specified expectations are met; it fails (with a
|
|
10
|
+
* reason string) as soon as any expectation is violated.
|
|
11
|
+
*
|
|
12
|
+
* @param {Array<{
|
|
13
|
+
* nodeId: string,
|
|
14
|
+
* expectedChildCount?: number,
|
|
15
|
+
* expectedName?: string,
|
|
16
|
+
* expectedType?: NodeType
|
|
17
|
+
* }>} checks
|
|
18
|
+
* - `nodeId`: The Figma node ID to look up via figma.getNodeById.
|
|
19
|
+
* - `expectedChildCount`: If set, the node must have exactly this many direct children.
|
|
20
|
+
* Applies to any node with a `children` property (frames, component sets, etc.).
|
|
21
|
+
* - `expectedName`: If set, the node's `.name` must exactly match this string.
|
|
22
|
+
* - `expectedType`: If set, the node's `.type` must exactly match this string.
|
|
23
|
+
* @returns {{
|
|
24
|
+
* passed: string[],
|
|
25
|
+
* failed: Array<{nodeId: string, reason: string}>
|
|
26
|
+
* }}
|
|
27
|
+
* `passed`: Array of nodeIds that passed all checks.
|
|
28
|
+
* `failed`: Array of objects with the nodeId and a human-readable reason string.
|
|
29
|
+
*/
|
|
30
|
+
function validateCreation(checks) {
|
|
31
|
+
const passed = []
|
|
32
|
+
const failed = []
|
|
33
|
+
|
|
34
|
+
for (const check of checks) {
|
|
35
|
+
const node = figma.getNodeById(check.nodeId)
|
|
36
|
+
|
|
37
|
+
// Node must exist
|
|
38
|
+
if (!node) {
|
|
39
|
+
failed.push({
|
|
40
|
+
nodeId: check.nodeId,
|
|
41
|
+
reason: `Node not found. It may not have been created, or was deleted.`,
|
|
42
|
+
})
|
|
43
|
+
continue
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const reasons = []
|
|
47
|
+
|
|
48
|
+
// Type check
|
|
49
|
+
if (check.expectedType !== undefined && node.type !== check.expectedType) {
|
|
50
|
+
reasons.push(`type is "${node.type}", expected "${check.expectedType}"`)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Name check
|
|
54
|
+
if (check.expectedName !== undefined && node.name !== check.expectedName) {
|
|
55
|
+
reasons.push(`name is "${node.name}", expected "${check.expectedName}"`)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Child count check
|
|
59
|
+
if (check.expectedChildCount !== undefined) {
|
|
60
|
+
if (!('children' in node)) {
|
|
61
|
+
reasons.push(
|
|
62
|
+
`node type "${node.type}" does not have children, but expectedChildCount=${check.expectedChildCount} was specified`,
|
|
63
|
+
)
|
|
64
|
+
} else {
|
|
65
|
+
const actualCount = node.children.length
|
|
66
|
+
if (actualCount !== check.expectedChildCount) {
|
|
67
|
+
reasons.push(`has ${actualCount} children, expected ${check.expectedChildCount}`)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (reasons.length > 0) {
|
|
73
|
+
failed.push({
|
|
74
|
+
nodeId: check.nodeId,
|
|
75
|
+
reason: reasons.join('; '),
|
|
76
|
+
})
|
|
77
|
+
} else {
|
|
78
|
+
passed.push(check.nodeId)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return { passed, failed }
|
|
83
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Use of these Figma skills and related files ("Materials") is governed by the Figma Developer Terms (available at https://www.figma.com/legal/developer-terms/). By accessing, downloading, or using these Materials — including through automated systems or AI agents — you agree to the Figma Developer Terms.
|
|
1
|
+
Use of these Figma skills and related files ("Materials") is governed by the Figma Developer Terms (available at https://www.figma.com/legal/developer-terms/). By accessing, downloading, or using these Materials — including through automated systems or AI agents — you agree to the Figma Developer Terms.
|
|
2
2
|
These Materials are currently offered as a Beta feature. Figma may modify, suspend, or discontinue them at any time without notice.
|