antigravity-ide 4.2.1 → 4.3.3
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/.agent/.shared/{design-philosophy → core/design-philosophy}/README.md +12 -1
- package/.agent/.shared/{ai-master → technical/ai-master}/README.md +12 -1
- package/.agent/.shared/{api-standards → technical/api-standards}/README.md +12 -1
- package/.agent/.shared/{database-master → technical/database-master}/README.md +12 -2
- package/.agent/.shared/{seo-master → technical/seo-master}/README.md +12 -1
- package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/README.md +12 -1
- package/.agent/ARCHITECTURE.md +16 -10
- package/.agent/ARCHITECTURE.vi.md +8 -8
- package/{GEMINI.md → .agent/GEMINI.md} +4 -5
- package/.agent/RESOURCES.md +6 -1
- package/.agent/agents/backend-specialist.md +154 -19
- package/.agent/agents/browser-subagent.md +45 -0
- package/.agent/agents/cloud-architect.md +108 -189
- package/.agent/agents/debugger.md +83 -182
- package/.agent/agents/documentation-writer.md +125 -72
- package/.agent/agents/frontend-specialist.md +40 -7
- package/.agent/agents/game-developer.md +111 -116
- package/.agent/agents/mobile-developer.md +108 -321
- package/.agent/agents/orchestrator.md +106 -366
- package/.agent/agents/performance-optimizer.md +105 -136
- package/.agent/agents/project-planner.md +132 -39
- package/.agent/agents/quality-inspector.md +136 -32
- package/.agent/agents/security-auditor.md +138 -15
- package/.agent/agents/seo-specialist.md +118 -72
- package/.agent/agents/test-engineer.md +142 -11
- package/.agent/brain/task.md +16 -0
- package/.agent/rules/GEMINI.md +63 -31
- package/.agent/rules/code-quality.md +34 -3
- package/.agent/rules/frontend.md +3 -3
- package/.agent/rules/strict-protocol.md +44 -3
- package/.agent/rules/system-update.md +56 -3
- package/.agent/skills/agent-backend-patterns/SKILL.md +16 -3
- package/.agent/skills/ai-engineer/SKILL.md +29 -16
- package/.agent/skills/api-documenter/SKILL.md +4 -4
- package/.agent/skills/app-builder/SKILL.md +1 -1
- package/.agent/skills/app-builder/tech-stack.md +2 -2
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +39 -79
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +53 -75
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +56 -119
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +61 -94
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +56 -82
- package/.agent/skills/brand-guidelines-anthropic/LICENSE.txt +202 -0
- package/.agent/skills/brand-guidelines-anthropic/SKILL.md +26 -0
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/color-application.md +5 -0
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/colors.md +14 -0
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/font-management.md +6 -0
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/shape-and-accent-colors.md +7 -0
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/smart-font-application.md +6 -0
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/text-styling.md +6 -0
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/typography.md +7 -0
- package/.agent/skills/cloud-architect-master/SKILL.md +9 -4
- package/.agent/skills/cro-expert-kit/SKILL.md +9 -4
- package/.agent/skills/database-migration/SKILL.md +9 -3
- package/.agent/skills/deployment-engineer/SKILL.md +9 -3
- package/.agent/skills/frontend-design/ux-psychology.md +10 -585
- package/.agent/skills/full-stack-scaffold/SKILL.md +4 -4
- package/.agent/skills/game-development/2d-games/SKILL.md +4 -2
- package/.agent/skills/game-development/3d-games/SKILL.md +4 -2
- package/.agent/skills/game-development/SKILL.md +18 -149
- package/.agent/skills/game-development/game-art/SKILL.md +4 -2
- package/.agent/skills/game-development/game-audio/SKILL.md +4 -2
- package/.agent/skills/game-development/game-design/SKILL.md +4 -2
- package/.agent/skills/game-development/mobile-games/SKILL.md +4 -2
- package/.agent/skills/game-development/multiplayer/SKILL.md +4 -2
- package/.agent/skills/game-development/pc-games/SKILL.md +4 -2
- package/.agent/skills/game-development/vr-ar/SKILL.md +4 -2
- package/.agent/skills/game-development/web-games/SKILL.md +4 -2
- package/.agent/skills/geo-fundamentals/SKILL.md +9 -136
- package/.agent/skills/git-collaboration-master/SKILL.md +9 -4
- package/.agent/skills/i18n-localization/SKILL.md +10 -118
- package/.agent/skills/incident-responder/SKILL.md +9 -6
- package/.agent/skills/internal-comms-anthropic/LICENSE.txt +202 -0
- package/.agent/skills/internal-comms-anthropic/SKILL.md +33 -0
- package/.agent/skills/internal-comms-anthropic/examples/3p-updates.md +47 -0
- package/.agent/skills/internal-comms-anthropic/examples/company-newsletter.md +65 -0
- package/.agent/skills/internal-comms-anthropic/examples/faq-answers.md +30 -0
- package/.agent/skills/internal-comms-anthropic/examples/general-comms.md +16 -0
- package/.agent/skills/last30days/tests/__init__.py +1 -0
- package/.agent/skills/last30days/tests/test_cache.py +59 -0
- package/.agent/skills/last30days/tests/test_dates.py +114 -0
- package/.agent/skills/last30days/tests/test_dedupe.py +111 -0
- package/.agent/skills/last30days/tests/test_models.py +135 -0
- package/.agent/skills/last30days/tests/test_normalize.py +138 -0
- package/.agent/skills/last30days/tests/test_render.py +116 -0
- package/.agent/skills/last30days/tests/test_score.py +168 -0
- package/.agent/skills/legacy-modernizer/SKILL.md +9 -4
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +2 -14
- package/.agent/skills/loki-mode/.github/workflows/claude-code-review.yml +57 -0
- package/.agent/skills/loki-mode/.github/workflows/claude.yml +50 -0
- package/.agent/skills/loki-mode/.github/workflows/release.yml +128 -0
- package/.agent/skills/loki-mode/tests/run-all-tests.sh +78 -0
- package/.agent/skills/loki-mode/tests/test-agent-timeout.sh +348 -0
- package/.agent/skills/loki-mode/tests/test-bootstrap.sh +196 -0
- package/.agent/skills/loki-mode/tests/test-circuit-breaker.sh +389 -0
- package/.agent/skills/loki-mode/tests/test-state-recovery.sh +393 -0
- package/.agent/skills/loki-mode/tests/test-task-queue.sh +396 -0
- package/.agent/skills/loki-mode/tests/test-wrapper.sh +314 -0
- package/.agent/skills/mcp-builder/SKILL.md +21 -164
- package/.agent/skills/mobile-design/SKILL.md +21 -369
- package/.agent/skills/mobile-design/mobile-performance.md +1 -1
- package/.agent/skills/modern-web-architect/SKILL.md +12 -6
- package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +1 -1
- package/.agent/skills/penetration-tester-master/SKILL.md +9 -4
- package/.agent/skills/performance-engineer/SKILL.md +4 -5
- package/.agent/skills/production-code-audit/SKILL.md +6 -0
- package/.agent/skills/rust-pro/SKILL.md +0 -177
- package/.agent/skills/security-auditor/SKILL.md +35 -27
- package/.agent/skills/seo-expert-kit/SKILL.md +9 -4
- package/.agent/skills/shopify-development/scripts/tests/test_shopify_init.py +379 -0
- package/.agent/skills/tdd-master-workflow/SKILL.md +9 -3
- package/.agent/workflows/audit.md +30 -16
- package/.agent/workflows/brainstorm.md +33 -96
- package/.agent/workflows/create.md +37 -45
- package/.agent/workflows/debug.md +45 -84
- package/.agent/workflows/deploy.md +33 -158
- package/.agent/workflows/document.md +38 -15
- package/.agent/workflows/enhance.md +33 -48
- package/.agent/workflows/monitor.md +35 -14
- package/.agent/workflows/orchestrate.md +33 -218
- package/.agent/workflows/plan.md +39 -70
- package/.agent/workflows/security.md +35 -14
- package/.agent/workflows/seo.md +39 -16
- package/.agent/workflows/status.md +33 -72
- package/.agent/workflows/test.md +30 -127
- package/.agent/workflows/ui-ux-pro-max.md +24 -283
- package/LICENSE +22 -8
- package/README.md +105 -72
- package/README.vi.md +93 -110
- package/cli/create.js +275 -413
- package/cli/index.js +36 -24
- package/cli/lib/auto-update.js +14 -21
- package/cli/logic/product-skills.js +58 -0
- package/cli/logic/skill-definitions.js +0 -39
- package/cli/prompts.js +151 -145
- package/cli/skills/browser-subagent-core/SKILL.md +22 -0
- package/cli/tools/browser.js +75 -0
- package/cli/ui/dashboard.js +48 -0
- package/docs/AGENTS_GUIDE.vi.md +39 -45
- package/docs/CONTRIBUTING.vi.md +12 -3
- package/docs/{GEMINI_GUIDE.md → GEMINI_USAGE.md} +6 -6
- package/docs/GLOSSARY.vi.md +49 -30
- package/docs/HOW_ANTIGRAVITY_THINKS.vi.md +1 -1
- package/docs/OPERATIONAL_FLOW.vi.md +15 -0
- package/docs/{PUBLISHING.md → PUBLISHING_GUIDE.md} +31 -3
- package/docs/RULES_GUIDE.vi.md +67 -31
- package/docs/SHARED_LIBRARY_GUIDE.vi.md +18 -22
- package/docs/SKILLS_GUIDE.vi.md +119 -32
- package/docs/TROUBLESHOOTING.vi.md +10 -2
- package/docs/WORKFLOW_GUIDE.vi.md +57 -9
- package/package.json +32 -8
- package/setup.js +147 -114
- package/.agent/.shared/compliance/README.md +0 -19
- package/.agent/.shared/design-system/README.md +0 -18
- package/.agent/.shared/domain-blueprints/README.md +0 -18
- package/.agent/.shared/dx-toolkit/README.md +0 -19
- package/.agent/.shared/i18n-master/README.md +0 -18
- package/.agent/.shared/infra-blueprints/README.md +0 -18
- package/.agent/.shared/metrics/README.md +0 -17
- package/.agent/.shared/resilience-patterns/README.md +0 -19
- package/.agent/.shared/security-armor/README.md +0 -25
- package/.agent/.shared/testing-master/README.md +0 -20
- package/.agent/.shared/vitals-templates/README.md +0 -18
- package/.agent/agents/accessibility-expert.md +0 -22
- package/.agent/agents/api-architect.md +0 -22
- package/.agent/agents/backend-specialist.eco.md +0 -19
- package/.agent/agents/backend-specialist.instant.md +0 -19
- package/.agent/agents/codebase-expert.md +0 -23
- package/.agent/agents/compliance-expert.md +0 -22
- package/.agent/agents/data-scientist.md +0 -22
- package/.agent/agents/debugger.eco.md +0 -20
- package/.agent/agents/debugger.instant.md +0 -20
- package/.agent/agents/deep-thinker.ultra.md +0 -23
- package/.agent/agents/devex-optimizer.md +0 -22
- package/.agent/agents/devops-architect.md +0 -22
- package/.agent/agents/frontend-specialist.eco.md +0 -19
- package/.agent/agents/frontend-specialist.instant.md +0 -19
- package/.agent/agents/growth-engineer.md +0 -22
- package/.agent/agents/i18n-specialist.md +0 -21
- package/.agent/agents/legacy-modernizer.md +0 -22
- package/.agent/agents/microservices-specialist.md +0 -22
- package/.agent/agents/motion-designer.md +0 -22
- package/.agent/agents/orchestrator.creative.md +0 -28
- package/.agent/agents/orchestrator.eco.md +0 -29
- package/.agent/agents/orchestrator.instant.md +0 -29
- package/.agent/agents/orchestrator.ultra.md +0 -28
- package/.agent/agents/performance-benchmarker.md +0 -22
- package/.agent/agents/project-planner.eco.md +0 -19
- package/.agent/agents/project-planner.instant.md +0 -19
- package/.agent/agents/security-pentester.md +0 -22
- package/.agent/agents/serverless-expert.md +0 -22
- package/.agent/fastcode_index.json +0 -1038
- package/.agent/mcp_config.json +0 -24
- package/.agent/rules/GEMINI.eco.md +0 -37
- package/.agent/rules/GEMINI.instant.md +0 -37
- package/.agent/rules/api-spec.md +0 -28
- package/.agent/rules/database.md +0 -24
- package/.agent/rules/devops.md +0 -23
- package/.agent/rules/growth-strategy.md +0 -22
- package/.agent/rules/logging-monitoring.md +0 -22
- package/.agent/rules/quality-assurance.md +0 -22
- package/.agent/rules/system-reasoning.md +0 -20
- package/.agent/rules/ui-design.md +0 -23
- package/.agent/rules/ux-patterns.md +0 -23
- package/.agent/scripts/auto_preview.py +0 -148
- package/.agent/scripts/checklist.py +0 -252
- package/.agent/scripts/session_manager.py +0 -120
- package/.agent/scripts/simulation_install.js +0 -59
- package/.agent/scripts/sync_to_global.py +0 -78
- package/.agent/scripts/translate_workflows.py +0 -53
- package/.agent/scripts/verify_all.py +0 -327
- package/.agent/scripts/verify_shared_modules.js +0 -126
- package/.agent/skills/fastcode-search/SKILL.md +0 -46
- package/.agent/skills/fastcode-search/fastcode_config.example.json +0 -17
- package/.agent/skills/frontend-trends-2026/SKILL.md +0 -78
- package/.agent/skills/frontend-trends-2026/formulas/BentoGrid.tsx +0 -42
- package/.agent/skills/frontend-trends-2026/formulas/LiquidCard.tsx +0 -32
- package/.agent/skills/frontend-trends-2026/formulas/NeoButton.tsx +0 -27
- package/.agent/workflows/deep-security-audit.md +0 -9
- package/.agent/workflows/growth-max.md +0 -9
- package/.agent/workflows/performance-max.md +0 -9
- package/.editorconfig +0 -21
- package/.gitattributes +0 -7
- package/CHANGELOG.md +0 -32
- package/ERRORS.md +0 -67
- package/action.yml +0 -32
- package/antigravity-ide-logo.png +0 -0
- package/antigravity-ide-logo.svg +0 -24
- package/assets/skills-bundle.json +0 -1
- package/cli/manifest.js +0 -524
- package/cli/skills/fastcode.js +0 -181
- package/docs/AGENT_FLOW.md +0 -608
- package/docs/CONTRIBUTING.md +0 -46
- package/docs/COPYRIGHT.md +0 -57
- package/docs/DEPLOYMENT.md +0 -77
- package/docs/GLOSSARY.md +0 -109
- package/docs/MASTER_GUIDE.md +0 -103
- package/docs/OPERATIONAL_FLOW.md +0 -147
- package/docs/PLAN-upgrade-core-architecture.md +0 -71
- package/docs/SKILLS.md +0 -610
- package/docs/TROUBLESHOOTING.md +0 -43
- package/jest.config.js +0 -8
- package/scripts/bump.js +0 -93
- package/scripts/bundle-skills.js +0 -59
- package/scripts/internal/automation/auto-release.js +0 -177
- package/scripts/internal/fractalize-skills.js +0 -89
- package/scripts/internal/generate-skill-definitions.js +0 -134
- package/scripts/internal/internal/update-docs.js +0 -115
- package/scripts/internal/refactor-skill-content.js +0 -127
- package/scripts/internal/rename-skills.js +0 -96
- package/scripts/internal/sync-skills.js +0 -112
- package/scripts/internal/update-frontmatter-names.js +0 -99
- package/scripts/internal/verification/audit-dna.js +0 -56
- package/scripts/internal/verification/audit-skills.js +0 -65
- package/web/src/app/docs/guide/examples/brainstorm/page.mdx +0 -91
- package/web/src/app/docs/guide/examples/create/page.mdx +0 -84
- package/web/src/app/docs/guide/examples/debugging/page.mdx +0 -83
- package/web/src/app/docs/guide/examples/deployment/page.mdx +0 -93
- package/web/src/app/docs/guide/examples/new-feature/page.mdx +0 -102
- package/web/src/app/docs/guide/examples/orchestration/page.mdx +0 -99
- package/web/src/app/docs/guide/examples/plan/page.mdx +0 -76
- package/web/src/app/docs/guide/examples/preview/page.mdx +0 -77
- package/web/src/app/docs/guide/examples/status/page.mdx +0 -78
- package/web/src/app/docs/guide/examples/test/page.mdx +0 -80
- package/web/src/app/docs/guide/examples/ui-design/page.mdx +0 -90
- package/web/src/components/mdx/Callout.tsx +0 -60
- package/web/src/components/mdx/FeatureGrid.tsx +0 -38
- package/web/src/components/mdx/ProTips.tsx +0 -29
- package/web/src/components/mdx/StepList.tsx +0 -33
- package/web/src/components/mdx/Terminal.tsx +0 -58
- package/web/src/components/mdx/index.ts +0 -5
- package/web/src/mdx-components.tsx +0 -98
- /package/.agent/.shared/{design-philosophy → core/design-philosophy}/MANIFESTO.md +0 -0
- /package/.agent/.shared/{design-philosophy → core/design-philosophy}/checklists/tactile_audit.md +0 -0
- /package/.agent/.shared/{design-philosophy → core/design-philosophy}/checklists/visual_audit.md +0 -0
- /package/.agent/.shared/{design-philosophy → core/design-philosophy}/presets/linear_glow.json +0 -0
- /package/.agent/.shared/{dx-toolkit → core/dx-toolkit}/checklists/code_review.md +0 -0
- /package/.agent/.shared/{dx-toolkit → core/dx-toolkit}/presets/vscode_settings.json +0 -0
- /package/.agent/.shared/{metrics → core/metrics}/benchmarks.json +0 -0
- /package/.agent/.shared/{vitals-templates → core/vitals-templates}/audit_report.md +0 -0
- /package/.agent/.shared/{vitals-templates → core/vitals-templates}/plan_prd.md +0 -0
- /package/.agent/.shared/{ai-master → technical/ai-master}/best_patterns.md +0 -0
- /package/.agent/.shared/{ai-master → technical/ai-master}/checklists/prompt_audit.md +0 -0
- /package/.agent/.shared/{ai-master → technical/ai-master}/presets/model_configs.json +0 -0
- /package/.agent/.shared/{api-standards → technical/api-standards}/data +0 -0
- /package/.agent/.shared/{api-standards → technical/api-standards}/endpoints_naming.md +0 -0
- /package/.agent/.shared/{api-standards → technical/api-standards}/error_codes.csv +0 -0
- /package/.agent/.shared/{api-standards → technical/api-standards}/pagination_sorting.md +0 -0
- /package/.agent/.shared/{api-standards → technical/api-standards}/response_format.json +0 -0
- /package/.agent/.shared/{database-master → technical/database-master}/schemas/auth_rbac.sql +0 -0
- /package/.agent/.shared/{database-master → technical/database-master}/schemas/cms.sql +0 -0
- /package/.agent/.shared/{database-master → technical/database-master}/schemas/ecommerce.sql +0 -0
- /package/.agent/.shared/{design-system → technical/design-system}/brand_presets.json +0 -0
- /package/.agent/.shared/{design-system → technical/design-system}/micro_interactions.md +0 -0
- /package/.agent/.shared/{i18n-master → technical/i18n-master}/vi_tech_dictionary.csv +0 -0
- /package/.agent/.shared/{i18n-master → technical/i18n-master}/workflows.json +0 -0
- /package/.agent/.shared/{resilience-patterns → technical/resilience-patterns}/checklists/chaos_engineering.md +0 -0
- /package/.agent/.shared/{resilience-patterns → technical/resilience-patterns}/presets/circuit_breaker.json +0 -0
- /package/.agent/.shared/{security-armor → technical/security-armor}/checklists/vuln_scan.md +0 -0
- /package/.agent/.shared/{security-armor → technical/security-armor}/hardening.md +0 -0
- /package/.agent/.shared/{security-armor → technical/security-armor}/presets/helmet_config.json +0 -0
- /package/.agent/.shared/{seo-master → technical/seo-master}/checklists/technical_seo.md +0 -0
- /package/.agent/.shared/{seo-master → technical/seo-master}/presets/json_ld_schema.json +0 -0
- /package/.agent/.shared/{testing-master → technical/testing-master}/checklists/pre_release.md +0 -0
- /package/.agent/.shared/{testing-master → technical/testing-master}/scenarios.md +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/colors.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/icons.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/landing.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/products.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/react-performance.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/flutter.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/html-tailwind.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/jetpack-compose.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/nextjs.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/nuxt-ui.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/nuxtjs.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/react-native.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/react.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/shadcn.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/svelte.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/swiftui.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/stacks/vue.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/ux-guidelines.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/data/web-interface.csv +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/scripts/__pycache__/core.cpython-313.pyc +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/scripts/core.py +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/scripts/design_system.py +0 -0
- /package/.agent/.shared/{ui-ux-pro-max → technical/ui-ux-pro-max}/scripts/search.py +0 -0
- /package/.agent/.shared/{compliance → verticals/compliance}/legal_templates.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/edtech.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/fintech.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/fnb_restaurant.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/freelance_marketplace.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/healthcare.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/hospitality_tourism.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/logistics.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/marketing_automation.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/personal_branding.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/real_estate.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/retail_ecommerce.md +0 -0
- /package/.agent/.shared/{domain-blueprints → verticals/domain-blueprints}/standard-pro-agents.md +0 -0
- /package/.agent/.shared/{infra-blueprints → verticals/infra-blueprints}/deployment_specs.md +0 -0
- /package/.agent/skills/ai-engineer/{resources → sub-skills}/ai_infra_stack.md +0 -0
- /package/.agent/skills/cloud-architect-master/{resources → sub-skills}/cost_optimization_checklist.md +0 -0
- /package/.agent/skills/cro-expert-kit/{resources → sub-skills}/psychological_triggers.md +0 -0
- /package/.agent/skills/database-migration/{resources → sub-skills}/zero_downtime_strategy.md +0 -0
- /package/.agent/skills/deployment-engineer/{resources → sub-skills}/k8s_best_practices.md +0 -0
- /package/.agent/skills/git-collaboration-master/{resources → sub-skills}/pr_template.md +0 -0
- /package/.agent/skills/incident-responder/{resources → sub-skills}/incident_severity_levels.md +0 -0
- /package/.agent/skills/legacy-modernizer/{resources → sub-skills}/strangler_fig_pattern.md +0 -0
- /package/.agent/skills/penetration-tester-master/{resources → sub-skills}/owasp_top_10_2025.md +0 -0
- /package/.agent/skills/production-code-audit/{resources → sub-skills}/solid_principles_cheat_sheet.md +0 -0
- /package/.agent/skills/seo-expert-kit/{resources → sub-skills}/technical_seo_checklist.md +0 -0
- /package/.agent/skills/tdd-master-workflow/{resources → sub-skills}/unit_test_naming_convention.md +0 -0
- /package/.agent/{.shared → skills}/ui-ux-pro-max/data/charts.csv +0 -0
- /package/.agent/{.shared → skills}/ui-ux-pro-max/data/prompts.csv +0 -0
- /package/.agent/{.shared → skills}/ui-ux-pro-max/data/styles.csv +0 -0
- /package/.agent/{.shared → skills}/ui-ux-pro-max/data/typography.csv +0 -0
- /package/.agent/{.shared → skills}/ui-ux-pro-max/data/ui-reasoning.csv +0 -0
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @script update-docs.js
|
|
3
|
-
* @version 4.2.0
|
|
4
|
-
* @layer internal
|
|
5
|
-
* @protocol unified-protocol-v1
|
|
6
|
-
* @description Tự động cập nhật số liệu thống kê trong các file tài liệu hướng dẫn.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const path = require('path');
|
|
11
|
-
|
|
12
|
-
// Đường dẫn các file cần cập nhật
|
|
13
|
-
const DOCS_FILES = {
|
|
14
|
-
README_VI: 'README.vi.md',
|
|
15
|
-
README_EN: 'README.md',
|
|
16
|
-
SKILLS_GUIDE: 'docs/SKILLS_GUIDE.vi.md',
|
|
17
|
-
RULES_GUIDE: 'docs/RULES_GUIDE.vi.md',
|
|
18
|
-
WORKFLOW_GUIDE: 'docs/WORKFLOW_GUIDE.vi.md'
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// Đếm số lượng Skills
|
|
22
|
-
function countSkills() {
|
|
23
|
-
const skillsDir = path.join(process.cwd(), '.agent', 'skills');
|
|
24
|
-
if (!fs.existsSync(skillsDir)) return 0;
|
|
25
|
-
|
|
26
|
-
try {
|
|
27
|
-
const items = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
28
|
-
return items.filter(item => item.isDirectory()).length;
|
|
29
|
-
} catch (err) {
|
|
30
|
-
logError(err, "Failed to read skills directory");
|
|
31
|
-
return 0;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Đếm số lượng Workflows
|
|
36
|
-
function countWorkflows() {
|
|
37
|
-
const workflowsDir = path.join(process.cwd(), '.agent', 'workflows');
|
|
38
|
-
if (!fs.existsSync(workflowsDir)) return 0;
|
|
39
|
-
|
|
40
|
-
const items = fs.readdirSync(workflowsDir);
|
|
41
|
-
return items.filter(item => item.endsWith('.md')).length;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Đếm số lượng Rules
|
|
45
|
-
function countRules() {
|
|
46
|
-
const rulesDir = path.join(process.cwd(), '.agent', 'rules');
|
|
47
|
-
if (!fs.existsSync(rulesDir)) return 0;
|
|
48
|
-
|
|
49
|
-
const items = fs.readdirSync(rulesDir);
|
|
50
|
-
return items.filter(item => item.endsWith('.md')).length;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Cập nhật số liệu trong README
|
|
54
|
-
function updateCounts() {
|
|
55
|
-
const skills = countSkills();
|
|
56
|
-
const workflows = countWorkflows();
|
|
57
|
-
const rules = countRules();
|
|
58
|
-
|
|
59
|
-
console.log('📊 Current Statistics:');
|
|
60
|
-
console.log(` Skills: ${skills}`);
|
|
61
|
-
console.log(` Workflows: ${workflows}`);
|
|
62
|
-
console.log(` Rules: ${rules}`);
|
|
63
|
-
|
|
64
|
-
return { skills, workflows, rules };
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Main function
|
|
68
|
-
async function main() {
|
|
69
|
-
console.log('🚀 Auto-Update Documentation System\n');
|
|
70
|
-
|
|
71
|
-
const stats = updateCounts();
|
|
72
|
-
|
|
73
|
-
console.log('\n✅ Statistics collected successfully!');
|
|
74
|
-
console.log('💡 Tip: Use this data to update README.md and other docs manually for now.');
|
|
75
|
-
console.log(' Future versions will support automatic text replacement.');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function logError(error, context) {
|
|
79
|
-
const errorLogPath = path.join(process.cwd(), 'ERRORS.md');
|
|
80
|
-
const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 16);
|
|
81
|
-
const entry = `
|
|
82
|
-
## [${timestamp}] - Update-Docs Script Failure
|
|
83
|
-
|
|
84
|
-
- **Type**: Runtime
|
|
85
|
-
- **Severity**: Low
|
|
86
|
-
- **File**: \`.agent/scripts/internal/update-docs.js\`
|
|
87
|
-
- **Agent**: Senior Documentation Engine
|
|
88
|
-
- **Root Cause**: ${context}
|
|
89
|
-
- **Error Message**:
|
|
90
|
-
\`\`\`
|
|
91
|
-
${error.message || error}
|
|
92
|
-
\`\`\`
|
|
93
|
-
- **Fix Applied**: N/A
|
|
94
|
-
- **Prevention**: Ensure file system permissions are correct
|
|
95
|
-
- **Status**: Investigating
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
`;
|
|
99
|
-
fs.appendFileSync(errorLogPath, entry);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Run if called directly
|
|
103
|
-
if (require.main === module) {
|
|
104
|
-
try {
|
|
105
|
-
main().catch(err => {
|
|
106
|
-
logError(err, "Async main execution failed");
|
|
107
|
-
console.error(err);
|
|
108
|
-
});
|
|
109
|
-
} catch (err) {
|
|
110
|
-
logError(err, "Sync main execution failed");
|
|
111
|
-
console.error(err);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
module.exports = { countSkills, countWorkflows, countRules, updateCounts };
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
|
|
4
|
-
const SKILL_NAME = process.argv[2] || '3d-web-experience';
|
|
5
|
-
const SKILLS_DIR = 'd:\\Github\\antigravity-ide\\.agent\\skills';
|
|
6
|
-
const SKILL_DIR = path.join(SKILLS_DIR, SKILL_NAME);
|
|
7
|
-
const SKILL_FILE = path.join(SKILL_DIR, 'SKILL.md');
|
|
8
|
-
const SUB_SKILLS_DIR = path.join(SKILL_DIR, 'sub-skills');
|
|
9
|
-
|
|
10
|
-
function slugify(text) {
|
|
11
|
-
return text.toString().toLowerCase()
|
|
12
|
-
.replace(/\s+/g, '-') // Replace spaces with -
|
|
13
|
-
.replace(/[^\w\-]+/g, '') // Remove all non-word chars
|
|
14
|
-
.replace(/\-\-+/g, '-') // Replace multiple - with single -
|
|
15
|
-
.replace(/^-+/, '') // Trim - from start of text
|
|
16
|
-
.replace(/-+$/, ''); // Trim - from end of text
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// Main Execution for ALL skills
|
|
20
|
-
function main() {
|
|
21
|
-
const allSkills = fs.readdirSync(SKILLS_DIR, { withFileTypes: true })
|
|
22
|
-
.filter(dirent => dirent.isDirectory())
|
|
23
|
-
.map(dirent => dirent.name);
|
|
24
|
-
|
|
25
|
-
console.log(`🚀 Starting Batch Refactor for ${allSkills.length} skills...`);
|
|
26
|
-
|
|
27
|
-
let count = 0;
|
|
28
|
-
allSkills.forEach(skillName => {
|
|
29
|
-
// PROTECTED SKILLS - DO NOT TOUCH
|
|
30
|
-
if (skillName === 'security-auditor') return;
|
|
31
|
-
|
|
32
|
-
// Check if already fractalized deeply?
|
|
33
|
-
// Heuristic: If SKILL.md is small (< 500 bytes) and sub-skills has many files, maybe skip?
|
|
34
|
-
// But for now, let's force run to ensure safety.
|
|
35
|
-
// WAIT: If we run this twice on `3d-web-experience`, it might re-extract the links?
|
|
36
|
-
// content.split(/^### /gm) -> The links are `### 1. [Title]...`
|
|
37
|
-
// So it will extract the link line as a new file content!
|
|
38
|
-
// BAD. We need to detect if it's already a link list.
|
|
39
|
-
|
|
40
|
-
if (isAlreadyLinked(skillName)) {
|
|
41
|
-
console.log(`⏩ Skipping ${skillName} (Already fractalized)`);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
processSkill(skillName);
|
|
46
|
-
count++;
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
console.log(`✅ Completed. Refactored ${count} skills.`);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function isAlreadyLinked(skillName) {
|
|
53
|
-
const skillFile = path.join(SKILLS_DIR, skillName, 'SKILL.md');
|
|
54
|
-
if (!fs.existsSync(skillFile)) return false;
|
|
55
|
-
const content = fs.readFileSync(skillFile, 'utf-8');
|
|
56
|
-
// If it has the Fractal header and mostly just links...
|
|
57
|
-
// Simple check: does it have "Knowledge Modules (Fractal Skills)"?
|
|
58
|
-
return content.includes('Knowledge Modules (Fractal Skills)');
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function processSkill(skillName) {
|
|
62
|
-
const skillDir = path.join(SKILLS_DIR, skillName);
|
|
63
|
-
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
64
|
-
const subSkillsDir = path.join(skillDir, 'sub-skills');
|
|
65
|
-
|
|
66
|
-
if (!fs.existsSync(skillFile)) return;
|
|
67
|
-
|
|
68
|
-
const content = fs.readFileSync(skillFile, 'utf-8');
|
|
69
|
-
if (!content.includes('### ')) {
|
|
70
|
-
// No headers to split
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const sections = content.split(/^### /gm);
|
|
75
|
-
if (sections.length < 2) return;
|
|
76
|
-
|
|
77
|
-
if (!fs.existsSync(subSkillsDir)) {
|
|
78
|
-
fs.mkdirSync(subSkillsDir, { recursive: true });
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// 1. Master Content (Header)
|
|
82
|
-
let masterContent = sections[0];
|
|
83
|
-
let modulesList = [];
|
|
84
|
-
|
|
85
|
-
// 2. Extract Sections
|
|
86
|
-
for (let i = 1; i < sections.length; i++) {
|
|
87
|
-
const rawSection = sections[i];
|
|
88
|
-
const firstLineEnd = rawSection.indexOf('\n');
|
|
89
|
-
let title = rawSection.substring(0, firstLineEnd).trim();
|
|
90
|
-
let body = rawSection.substring(firstLineEnd).trim();
|
|
91
|
-
|
|
92
|
-
// Clean Title (remote [links] etc)
|
|
93
|
-
title = title.replace(/\[|\]/g, '');
|
|
94
|
-
|
|
95
|
-
if (!title) continue;
|
|
96
|
-
|
|
97
|
-
const fileName = slugify(title) + '.md';
|
|
98
|
-
const filePath = path.join(subSkillsDir, fileName);
|
|
99
|
-
|
|
100
|
-
// Only write if file doesn't exist (PREVENT OVERWRITE of moved resources)
|
|
101
|
-
if (!fs.existsSync(filePath)) {
|
|
102
|
-
const fileContent = `# ${title}\n\n${body}`;
|
|
103
|
-
fs.writeFileSync(filePath, fileContent);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
modulesList.push({ title, fileName });
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// 3. Update SKILL.md
|
|
110
|
-
// Header + Links
|
|
111
|
-
let newMasterContent = masterContent.trim() + '\n\n';
|
|
112
|
-
newMasterContent += '## 🧠 Knowledge Modules (Fractal Skills)\n\n';
|
|
113
|
-
|
|
114
|
-
modulesList.forEach((mod, idx) => {
|
|
115
|
-
newMasterContent += `### ${idx + 1}. [${mod.title}](./sub-skills/${mod.fileName})\n`;
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
// Add Version tag if missing
|
|
119
|
-
if (!newMasterContent.includes('version:')) {
|
|
120
|
-
newMasterContent = newMasterContent.replace('---', `---\nversion: 4.1.0-fractal`);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
fs.writeFileSync(skillFile, newMasterContent);
|
|
124
|
-
console.log(`fractalized: ${skillName}`);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
main();
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
|
|
4
|
-
const SKILLS_DIR = 'd:\\Github\\antigravity-ide\\.agent\\skills';
|
|
5
|
-
|
|
6
|
-
function main() {
|
|
7
|
-
const allSkills = fs.readdirSync(SKILLS_DIR, { withFileTypes: true })
|
|
8
|
-
.filter(dirent => dirent.isDirectory())
|
|
9
|
-
.map(dirent => dirent.name);
|
|
10
|
-
|
|
11
|
-
console.log(`🚀 Starting Rename Process...`);
|
|
12
|
-
|
|
13
|
-
allSkills.forEach(oldName => {
|
|
14
|
-
let newName = oldName;
|
|
15
|
-
|
|
16
|
-
// Rename Logic
|
|
17
|
-
if (oldName.startsWith('cc-skill-')) {
|
|
18
|
-
newName = oldName.replace('cc-skill-', 'agent-');
|
|
19
|
-
} else if (oldName.startsWith('cc-')) {
|
|
20
|
-
newName = oldName.replace('cc-', 'agent-');
|
|
21
|
-
} else if (oldName.includes('claude')) {
|
|
22
|
-
newName = oldName.replace('claude', 'agent');
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (newName !== oldName) {
|
|
26
|
-
const oldPath = path.join(SKILLS_DIR, oldName);
|
|
27
|
-
const newPath = path.join(SKILLS_DIR, newName);
|
|
28
|
-
|
|
29
|
-
// 1. Rename Directory
|
|
30
|
-
try {
|
|
31
|
-
if (fs.existsSync(newPath)) {
|
|
32
|
-
console.warn(`⚠️ Target ${newName} already exists. Skipping rename of ${oldName}`);
|
|
33
|
-
} else {
|
|
34
|
-
fs.renameSync(oldPath, newPath);
|
|
35
|
-
console.log(`RENAME: ${oldName} -> ${newName}`);
|
|
36
|
-
|
|
37
|
-
// 2. Update Content (SKILL.md and sub-skills)
|
|
38
|
-
updateContent(newPath);
|
|
39
|
-
}
|
|
40
|
-
} catch (e) {
|
|
41
|
-
console.error(`❌ Error renaming ${oldName}:`, e.message);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
console.log('✅ Done.');
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function updateContent(skillDir) {
|
|
50
|
-
const files = getAllFiles(skillDir);
|
|
51
|
-
|
|
52
|
-
files.forEach(file => {
|
|
53
|
-
if (!file.endsWith('.md')) return;
|
|
54
|
-
|
|
55
|
-
let content = fs.readFileSync(file, 'utf-8');
|
|
56
|
-
let updated = false;
|
|
57
|
-
|
|
58
|
-
// Replace "Claude" with "Agent" (Case insensitive mostly, but let's be careful)
|
|
59
|
-
// We want to avoid changing URLs if possible, but simple string replacement is safer for branding.
|
|
60
|
-
|
|
61
|
-
if (content.includes('Claude')) {
|
|
62
|
-
content = content.replace(/Claude/g, 'Agent');
|
|
63
|
-
updated = true;
|
|
64
|
-
}
|
|
65
|
-
if (content.includes('claude')) {
|
|
66
|
-
content = content.replace(/claude/g, 'agent');
|
|
67
|
-
updated = true;
|
|
68
|
-
}
|
|
69
|
-
// Also update the 'name:' field in frontmatter if strictly necessary to match folder?
|
|
70
|
-
// Yes, usually SKILL.md has `name: xxx`
|
|
71
|
-
// We generally shouldn't parse frontmatter with regex purely but a simple replace is okay here.
|
|
72
|
-
|
|
73
|
-
if (updated) {
|
|
74
|
-
fs.writeFileSync(file, content);
|
|
75
|
-
console.log(` 📝 Updated content in ${path.basename(file)}`);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function getAllFiles(dirPath, arrayOfFiles) {
|
|
81
|
-
files = fs.readdirSync(dirPath);
|
|
82
|
-
|
|
83
|
-
arrayOfFiles = arrayOfFiles || [];
|
|
84
|
-
|
|
85
|
-
files.forEach(function(file) {
|
|
86
|
-
if (fs.statSync(dirPath + "/" + file).isDirectory()) {
|
|
87
|
-
arrayOfFiles = getAllFiles(dirPath + "/" + file, arrayOfFiles);
|
|
88
|
-
} else {
|
|
89
|
-
arrayOfFiles.push(path.join(dirPath, "/", file));
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
return arrayOfFiles;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
main();
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
|
|
4
|
-
// Configuration
|
|
5
|
-
const SOURCE_DIR = 'd:\\Github\\antigravity-awesome-skills\\skills';
|
|
6
|
-
const DEST_DIR = 'd:\\Github\\antigravity-ide\\.agent\\skills';
|
|
7
|
-
const CATALOG_FILE = 'd:\\Github\\antigravity-awesome-skills\\CATALOG.md';
|
|
8
|
-
const SKILLS_MD_FILE = 'd:\\Github\\antigravity-ide\\SKILLS.md';
|
|
9
|
-
|
|
10
|
-
// Stats
|
|
11
|
-
let stats = {
|
|
12
|
-
new: 0,
|
|
13
|
-
skipped: 0,
|
|
14
|
-
updated: 0,
|
|
15
|
-
errors: 0
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
function main() {
|
|
19
|
-
console.log('🚀 Starting Massive Skill Sync...');
|
|
20
|
-
|
|
21
|
-
if (!fs.existsSync(SOURCE_DIR)) {
|
|
22
|
-
console.error(`❌ Source directory not found: ${SOURCE_DIR}`);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// 1. Get List of Skills
|
|
27
|
-
const sourceSkills = fs.readdirSync(SOURCE_DIR, { withFileTypes: true })
|
|
28
|
-
.filter(dirent => dirent.isDirectory())
|
|
29
|
-
.map(dirent => dirent.name);
|
|
30
|
-
|
|
31
|
-
console.log(`📦 Found ${sourceSkills.length} skills in source.`);
|
|
32
|
-
|
|
33
|
-
// 2. Sync Loop
|
|
34
|
-
sourceSkills.forEach(skillName => {
|
|
35
|
-
const srcPath = path.join(SOURCE_DIR, skillName);
|
|
36
|
-
const destPath = path.join(DEST_DIR, skillName);
|
|
37
|
-
|
|
38
|
-
if (fs.existsSync(destPath)) {
|
|
39
|
-
// SKIP existing to protect customizations (Safety First)
|
|
40
|
-
// console.log(`⏭️ Skipping existing: ${skillName}`);
|
|
41
|
-
stats.skipped++;
|
|
42
|
-
} else {
|
|
43
|
-
try {
|
|
44
|
-
// COPY New
|
|
45
|
-
fs.cpSync(srcPath, destPath, { recursive: true });
|
|
46
|
-
console.log(`✅ Imported: ${skillName}`);
|
|
47
|
-
stats.new++;
|
|
48
|
-
} catch (err) {
|
|
49
|
-
console.error(`❌ Failed to copy ${skillName}:`, err.message);
|
|
50
|
-
stats.errors++;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// 3. Generate Report
|
|
56
|
-
console.log('\n--- SYNC REPORT ---');
|
|
57
|
-
console.log(`🆕 New Skills: ${stats.new}`);
|
|
58
|
-
console.log(`⏭️ Skipped: ${stats.skipped}`);
|
|
59
|
-
console.log(`❌ Errors: ${stats.errors}`);
|
|
60
|
-
|
|
61
|
-
// 4. Update SKILLS.md from CATALOG
|
|
62
|
-
updateSkillsMd();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function updateSkillsMd() {
|
|
66
|
-
console.log('\n📝 Updating SKILLS.md...');
|
|
67
|
-
|
|
68
|
-
if (!fs.existsSync(CATALOG_FILE)) {
|
|
69
|
-
console.warn('⚠️ Catalog file not found, skipping SKILLS.md update.');
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
try {
|
|
74
|
-
const catalogContent = fs.readFileSync(CATALOG_FILE, 'utf-8');
|
|
75
|
-
|
|
76
|
-
// Simple header replacement or append strategy?
|
|
77
|
-
// Since the structure might be different, let's create a NEW section for "Community Skills"
|
|
78
|
-
// OR replace the content if we are confident.
|
|
79
|
-
|
|
80
|
-
// Current Strategy: Read all skills from CATALOG and format them into Antigravity MD format
|
|
81
|
-
// But CATALOG format is: | Skill | Description | Tags | Triggers |
|
|
82
|
-
// SKILLS.md format matches this table structure usually.
|
|
83
|
-
|
|
84
|
-
// Let's backup old SKILLS.md
|
|
85
|
-
fs.copyFileSync(SKILLS_MD_FILE, SKILLS_MD_FILE + '.bak');
|
|
86
|
-
|
|
87
|
-
// Create new content
|
|
88
|
-
const header = `# AntiGravity Master Skills
|
|
89
|
-
|
|
90
|
-
> **Total Skills**: ${stats.new + stats.skipped}
|
|
91
|
-
> **Generated**: ${new Date().toISOString()}
|
|
92
|
-
|
|
93
|
-
This is the complete list of available skills in the system.
|
|
94
|
-
|
|
95
|
-
`;
|
|
96
|
-
|
|
97
|
-
// We can just append the CATALOG content essentially, maybe stripping some headers
|
|
98
|
-
// The CATALOG.md from awesome-skills seems to be well formatted.
|
|
99
|
-
// Let's use it as the base but prefix with our header.
|
|
100
|
-
|
|
101
|
-
// Let's just Read CATALOG and write to SKILLS.md (Overwriting old manual list)
|
|
102
|
-
// This assumes CATALOG.md is better source of truth now.
|
|
103
|
-
|
|
104
|
-
fs.writeFileSync(SKILLS_MD_FILE, header + catalogContent);
|
|
105
|
-
console.log('✅ SKILLS.md updated using CATALOG.md source.');
|
|
106
|
-
|
|
107
|
-
} catch (err) {
|
|
108
|
-
console.error('❌ Failed to update SKILLS.md:', err.message);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
main();
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
|
|
4
|
-
const SKILLS_DIR = 'd:\\Github\\antigravity-ide\\.agent\\skills';
|
|
5
|
-
const SKILLS_CATALOG = 'd:\\Github\\antigravity-ide\\SKILLS.md';
|
|
6
|
-
|
|
7
|
-
function main() {
|
|
8
|
-
const skills = fs.readdirSync(SKILLS_DIR, { withFileTypes: true })
|
|
9
|
-
.filter(dirent => dirent.isDirectory())
|
|
10
|
-
.map(dirent => dirent.name);
|
|
11
|
-
|
|
12
|
-
console.log(`🚀 Auditing ${skills.length} skills for consistency...`);
|
|
13
|
-
|
|
14
|
-
let fixes = 0;
|
|
15
|
-
|
|
16
|
-
// 1. Fix Frontmatter Name vs Folder Name
|
|
17
|
-
skills.forEach(skillName => {
|
|
18
|
-
const skillFile = path.join(SKILLS_DIR, skillName, 'SKILL.md');
|
|
19
|
-
if (!fs.existsSync(skillFile)) return;
|
|
20
|
-
|
|
21
|
-
let content = fs.readFileSync(skillFile, 'utf-8');
|
|
22
|
-
|
|
23
|
-
// Regex to find "name: old-name"
|
|
24
|
-
const nameMatch = content.match(/^name:\s+(.*)$/m);
|
|
25
|
-
if (nameMatch) {
|
|
26
|
-
const currentName = nameMatch[1].trim();
|
|
27
|
-
if (currentName !== skillName && skillName.startsWith('agent-')) {
|
|
28
|
-
// Mismatch found in a renamed skill
|
|
29
|
-
console.log(`🔧 Fixing mismatch: ${currentName} -> ${skillName}`);
|
|
30
|
-
content = content.replace(/^name:\s+.*$/m, `name: ${skillName}`);
|
|
31
|
-
|
|
32
|
-
// Also update H1 title if it matches old name
|
|
33
|
-
content = content.replace(new RegExp(`# ${currentName}`, 'g'), `# ${skillName}`);
|
|
34
|
-
|
|
35
|
-
fs.writeFileSync(skillFile, content);
|
|
36
|
-
fixes++;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
console.log(`✅ Fixed ${fixes} frontmatter mismatches.`);
|
|
42
|
-
|
|
43
|
-
// 2. Fix Links in SKILLS.md
|
|
44
|
-
console.log('\n📝 Rebuilding SKILLS.md Index...');
|
|
45
|
-
updateSkillsCatalog(skills);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function updateSkillsCatalog(skillsList) {
|
|
49
|
-
if (!fs.existsSync(SKILLS_CATALOG)) {
|
|
50
|
-
console.warn('⚠️ SKILLS.md not found.');
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
let catalog = fs.readFileSync(SKILLS_CATALOG, 'utf-8');
|
|
55
|
-
|
|
56
|
-
// We need to replace links like `[cc-skill-xxx]` with `[agent-xxx]`
|
|
57
|
-
// Ideally, we should regenerate the table, but that removes descriptions.
|
|
58
|
-
// Better: smart replace based on the actual renames we did.
|
|
59
|
-
// Or simpler: Iterate all current skills, and if they are missing from catalog but their "old versions" are there, update them.
|
|
60
|
-
|
|
61
|
-
let catalogUpdates = 0;
|
|
62
|
-
|
|
63
|
-
// Heuristic: Identify broken links or outdated names
|
|
64
|
-
// For every `agent-x`, look if `cc-skill-x` or `claude-x` exists in catalog
|
|
65
|
-
skillsList.forEach(newSkill => {
|
|
66
|
-
if (!newSkill.startsWith('agent-')) return;
|
|
67
|
-
|
|
68
|
-
let oldNamePattern = '';
|
|
69
|
-
if (newSkill.includes('code-guide')) oldNamePattern = 'claude-code-guide';
|
|
70
|
-
else if (newSkill.includes('d3js')) oldNamePattern = 'claude-d3js-skill';
|
|
71
|
-
else oldNamePattern = newSkill.replace('agent-', 'cc-skill-'); // Try cc-skill- first
|
|
72
|
-
|
|
73
|
-
if (catalog.includes(oldNamePattern)) {
|
|
74
|
-
// Replace all occurrences of oldName with newSkill
|
|
75
|
-
const regex = new RegExp(oldNamePattern, 'g');
|
|
76
|
-
catalog = catalog.replace(regex, newSkill);
|
|
77
|
-
console.log(` 🔗 Updated catalog link: ${oldNamePattern} -> ${newSkill}`);
|
|
78
|
-
catalogUpdates++;
|
|
79
|
-
} else {
|
|
80
|
-
// Try just 'cc-'
|
|
81
|
-
const oldNamePattern2 = newSkill.replace('agent-', 'cc-');
|
|
82
|
-
if (catalog.includes(oldNamePattern2)) {
|
|
83
|
-
const regex = new RegExp(oldNamePattern2, 'g');
|
|
84
|
-
catalog = catalog.replace(regex, newSkill);
|
|
85
|
-
console.log(` 🔗 Updated catalog link: ${oldNamePattern2} -> ${newSkill}`);
|
|
86
|
-
catalogUpdates++;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
if (catalogUpdates > 0) {
|
|
92
|
-
fs.writeFileSync(SKILLS_CATALOG, catalog);
|
|
93
|
-
console.log(`✅ Updated ${catalogUpdates} links in SKILLS.md`);
|
|
94
|
-
} else {
|
|
95
|
-
console.log('✨ SKILLS.md is up to date.');
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
main();
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @script audit-dna.js
|
|
3
|
-
* @version 4.2.0
|
|
4
|
-
* @layer verification
|
|
5
|
-
* @protocol unified-protocol-v1
|
|
6
|
-
* @description Quét và kiểm tra tính hợp lệ của metadata trong kho DNA (.shared).
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const path = require('path');
|
|
11
|
-
|
|
12
|
-
const DNA_PATH = path.join(__dirname, '..', '..', '.shared');
|
|
13
|
-
const REQUIRED_FIELDS = ['module', 'version', 'layer'];
|
|
14
|
-
|
|
15
|
-
function auditFile(filePath) {
|
|
16
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
17
|
-
const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
18
|
-
|
|
19
|
-
if (!frontmatterMatch) {
|
|
20
|
-
console.error(`[FAIL] No metadata found in: ${filePath}`);
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const metadataStr = frontmatterMatch[1];
|
|
25
|
-
const metadata = {};
|
|
26
|
-
metadataStr.split('\n').forEach(line => {
|
|
27
|
-
const [key, ...value] = line.split(':');
|
|
28
|
-
if (key && value) {
|
|
29
|
-
metadata[key.trim()] = value.join(':').trim();
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const missing = REQUIRED_FIELDS.filter(f => !metadata[f]);
|
|
34
|
-
if (missing.length > 0) {
|
|
35
|
-
console.error(`[FAIL] Missing fields (${missing.join(', ')}) in: ${filePath}`);
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
console.log(`[PASS] ${metadata.module} (v${metadata.version}) - ${metadata.layer}`);
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function walkDir(dir) {
|
|
44
|
-
const files = fs.readdirSync(dir);
|
|
45
|
-
files.forEach(file => {
|
|
46
|
-
const fullPath = path.join(dir, file);
|
|
47
|
-
if (fs.statSync(fullPath).isDirectory()) {
|
|
48
|
-
walkDir(fullPath);
|
|
49
|
-
} else if (file === 'README.md') {
|
|
50
|
-
auditFile(fullPath);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
console.log('--- DNA Metadata Audit ---');
|
|
56
|
-
walkDir(DNA_PATH);
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @script audit-skills.js
|
|
3
|
-
* @version 4.2.0
|
|
4
|
-
* @layer verification
|
|
5
|
-
* @protocol unified-protocol-v1
|
|
6
|
-
* @description Quét và kiểm tra tính hợp lệ của metadata trong kho Skills (.agent/skills).
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const path = require('path');
|
|
11
|
-
|
|
12
|
-
const SKILLS_PATH = path.join(__dirname, '..', '..', 'skills');
|
|
13
|
-
const REQUIRED_FIELDS = ['name', 'description', 'category', 'version'];
|
|
14
|
-
|
|
15
|
-
function auditSkill(filePath) {
|
|
16
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
17
|
-
const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
18
|
-
|
|
19
|
-
if (!frontmatterMatch) {
|
|
20
|
-
console.error(`[FAIL] No metadata found in: ${filePath}`);
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const metadataStr = frontmatterMatch[1];
|
|
25
|
-
const metadata = {};
|
|
26
|
-
metadataStr.split('\n').forEach(line => {
|
|
27
|
-
const [key, ...value] = line.split(':');
|
|
28
|
-
if (key && value && value.length > 0) {
|
|
29
|
-
metadata[key.trim()] = value.join(':').trim();
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const missing = REQUIRED_FIELDS.filter(f => !metadata[f]);
|
|
34
|
-
if (missing.length > 0) {
|
|
35
|
-
console.error(`[FAIL] Missing fields (${missing.join(', ')}) in: ${filePath}`);
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
console.log(`[PASS] ${metadata.name} (v${metadata.version}) - Category: ${metadata.category}`);
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function walkDir(dir) {
|
|
44
|
-
if (!fs.existsSync(dir)) {
|
|
45
|
-
console.error(`[ERROR] Directory not found: ${dir}`);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const items = fs.readdirSync(dir, { withFileTypes: true });
|
|
50
|
-
items.forEach(item => {
|
|
51
|
-
const fullPath = path.join(dir, item.name);
|
|
52
|
-
if (item.isDirectory()) {
|
|
53
|
-
const skillMdPath = path.join(fullPath, 'SKILL.md');
|
|
54
|
-
if (fs.existsSync(skillMdPath)) {
|
|
55
|
-
auditSkill(skillMdPath);
|
|
56
|
-
} else {
|
|
57
|
-
// Recursively search if no SKILL.md found directly (for nested structures if any)
|
|
58
|
-
walkDir(fullPath);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
console.log('--- Agent Skills Metadata Audit ---');
|
|
65
|
-
walkDir(SKILLS_PATH);
|