antigravity-ide 4.2.0 → 4.2.1
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/{technical/ai-master → ai-master}/README.md +1 -12
- package/.agent/.shared/{technical/api-standards → api-standards}/README.md +1 -12
- package/.agent/.shared/compliance/README.md +19 -0
- package/.agent/.shared/{technical/database-master → database-master}/README.md +2 -12
- package/.agent/.shared/{core/design-philosophy → design-philosophy}/README.md +1 -12
- package/.agent/.shared/design-system/README.md +18 -0
- package/.agent/.shared/domain-blueprints/README.md +18 -0
- package/.agent/.shared/dx-toolkit/README.md +19 -0
- package/.agent/.shared/i18n-master/README.md +18 -0
- package/.agent/.shared/infra-blueprints/README.md +18 -0
- package/.agent/.shared/metrics/README.md +17 -0
- package/.agent/.shared/resilience-patterns/README.md +19 -0
- package/.agent/.shared/security-armor/README.md +25 -0
- package/.agent/.shared/{technical/seo-master → seo-master}/README.md +1 -12
- package/.agent/.shared/testing-master/README.md +20 -0
- package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/README.md +1 -12
- package/.agent/.shared/vitals-templates/README.md +18 -0
- package/.agent/ARCHITECTURE.md +7 -10
- package/.agent/ARCHITECTURE.vi.md +8 -8
- package/.agent/RESOURCES.md +1 -0
- package/.agent/agents/accessibility-expert.md +22 -0
- package/.agent/agents/api-architect.md +22 -0
- package/.agent/agents/backend-specialist.eco.md +19 -0
- package/.agent/agents/backend-specialist.instant.md +19 -0
- package/.agent/agents/backend-specialist.md +19 -154
- package/.agent/agents/cloud-architect.md +189 -108
- package/.agent/agents/codebase-expert.md +23 -0
- package/.agent/agents/compliance-expert.md +22 -0
- package/.agent/agents/data-scientist.md +22 -0
- package/.agent/agents/debugger.eco.md +20 -0
- package/.agent/agents/debugger.instant.md +20 -0
- package/.agent/agents/debugger.md +182 -83
- package/.agent/agents/deep-thinker.ultra.md +23 -0
- package/.agent/agents/devex-optimizer.md +22 -0
- package/.agent/agents/devops-architect.md +22 -0
- package/.agent/agents/documentation-writer.md +72 -125
- package/.agent/agents/frontend-specialist.eco.md +19 -0
- package/.agent/agents/frontend-specialist.instant.md +19 -0
- package/.agent/agents/frontend-specialist.md +7 -40
- package/.agent/agents/game-developer.md +116 -111
- package/.agent/agents/growth-engineer.md +22 -0
- package/.agent/agents/i18n-specialist.md +21 -0
- package/.agent/agents/legacy-modernizer.md +22 -0
- package/.agent/agents/microservices-specialist.md +22 -0
- package/.agent/agents/mobile-developer.md +321 -108
- package/.agent/agents/motion-designer.md +22 -0
- package/.agent/agents/orchestrator.creative.md +28 -0
- package/.agent/agents/orchestrator.eco.md +29 -0
- package/.agent/agents/orchestrator.instant.md +29 -0
- package/.agent/agents/orchestrator.md +366 -106
- package/.agent/agents/orchestrator.ultra.md +28 -0
- package/.agent/agents/performance-benchmarker.md +22 -0
- package/.agent/agents/performance-optimizer.md +136 -105
- package/.agent/agents/project-planner.eco.md +19 -0
- package/.agent/agents/project-planner.instant.md +19 -0
- package/.agent/agents/project-planner.md +39 -132
- package/.agent/agents/quality-inspector.md +32 -136
- package/.agent/agents/security-auditor.md +15 -138
- package/.agent/agents/security-pentester.md +22 -0
- package/.agent/agents/seo-specialist.md +72 -118
- package/.agent/agents/serverless-expert.md +22 -0
- package/.agent/agents/test-engineer.md +11 -142
- package/.agent/fastcode_index.json +1038 -0
- package/.agent/mcp_config.json +24 -0
- package/.agent/rules/GEMINI.eco.md +37 -0
- package/.agent/rules/GEMINI.instant.md +37 -0
- package/.agent/rules/GEMINI.md +31 -62
- package/.agent/rules/api-spec.md +28 -0
- package/.agent/rules/code-quality.md +3 -34
- package/.agent/rules/database.md +24 -0
- package/.agent/rules/devops.md +23 -0
- package/.agent/rules/frontend.md +3 -3
- package/.agent/rules/growth-strategy.md +22 -0
- package/.agent/rules/logging-monitoring.md +22 -0
- package/.agent/rules/quality-assurance.md +22 -0
- package/.agent/rules/strict-protocol.md +3 -44
- package/.agent/rules/system-reasoning.md +20 -0
- package/.agent/rules/system-update.md +3 -56
- package/.agent/rules/ui-design.md +23 -0
- package/.agent/rules/ux-patterns.md +23 -0
- package/.agent/scripts/auto_preview.py +148 -0
- package/.agent/scripts/checklist.py +252 -0
- package/.agent/scripts/session_manager.py +120 -0
- package/.agent/scripts/simulation_install.js +59 -0
- package/.agent/scripts/sync_to_global.py +78 -0
- package/.agent/scripts/translate_workflows.py +53 -0
- package/.agent/scripts/verify_all.py +327 -0
- package/.agent/scripts/verify_shared_modules.js +126 -0
- package/.agent/skills/agent-backend-patterns/SKILL.md +6 -13
- package/.agent/skills/ai-engineer/SKILL.md +16 -29
- 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 +79 -39
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +75 -53
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +119 -56
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +94 -61
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +82 -56
- package/.agent/skills/cloud-architect-master/SKILL.md +4 -9
- package/.agent/skills/cro-expert-kit/SKILL.md +4 -9
- package/.agent/skills/database-migration/SKILL.md +3 -9
- package/.agent/skills/deployment-engineer/SKILL.md +3 -9
- package/.agent/skills/fastcode-search/SKILL.md +46 -0
- package/.agent/skills/fastcode-search/fastcode_config.example.json +17 -0
- package/.agent/skills/frontend-design/ux-psychology.md +585 -10
- package/.agent/skills/frontend-trends-2026/SKILL.md +78 -0
- package/.agent/skills/frontend-trends-2026/formulas/BentoGrid.tsx +42 -0
- package/.agent/skills/frontend-trends-2026/formulas/LiquidCard.tsx +32 -0
- package/.agent/skills/frontend-trends-2026/formulas/NeoButton.tsx +27 -0
- package/.agent/skills/full-stack-scaffold/SKILL.md +4 -4
- package/.agent/skills/game-development/2d-games/SKILL.md +2 -4
- package/.agent/skills/game-development/3d-games/SKILL.md +2 -4
- package/.agent/skills/game-development/SKILL.md +149 -18
- package/.agent/skills/game-development/game-art/SKILL.md +2 -4
- package/.agent/skills/game-development/game-audio/SKILL.md +2 -4
- package/.agent/skills/game-development/game-design/SKILL.md +2 -4
- package/.agent/skills/game-development/mobile-games/SKILL.md +2 -4
- package/.agent/skills/game-development/multiplayer/SKILL.md +2 -4
- package/.agent/skills/game-development/pc-games/SKILL.md +2 -4
- package/.agent/skills/game-development/vr-ar/SKILL.md +2 -4
- package/.agent/skills/game-development/web-games/SKILL.md +2 -4
- package/.agent/skills/geo-fundamentals/SKILL.md +136 -9
- package/.agent/skills/git-collaboration-master/SKILL.md +4 -9
- package/.agent/skills/i18n-localization/SKILL.md +118 -10
- package/.agent/skills/incident-responder/SKILL.md +6 -9
- package/.agent/skills/legacy-modernizer/SKILL.md +4 -9
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +14 -2
- package/.agent/skills/mcp-builder/SKILL.md +164 -21
- package/.agent/skills/mobile-design/SKILL.md +369 -21
- package/.agent/skills/mobile-design/mobile-performance.md +1 -1
- package/.agent/skills/modern-web-architect/SKILL.md +6 -12
- package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +1 -1
- package/.agent/skills/penetration-tester-master/SKILL.md +4 -9
- package/.agent/skills/performance-engineer/SKILL.md +5 -4
- package/.agent/skills/production-code-audit/SKILL.md +0 -6
- package/.agent/skills/rust-pro/SKILL.md +177 -0
- package/.agent/skills/security-auditor/SKILL.md +27 -35
- package/.agent/skills/seo-expert-kit/SKILL.md +4 -9
- package/.agent/skills/tdd-master-workflow/SKILL.md +3 -9
- package/.agent/workflows/audit.md +16 -30
- package/.agent/workflows/brainstorm.md +96 -33
- package/.agent/workflows/create.md +45 -37
- package/.agent/workflows/debug.md +84 -45
- package/.agent/workflows/deep-security-audit.md +9 -0
- package/.agent/workflows/deploy.md +158 -33
- package/.agent/workflows/document.md +15 -38
- package/.agent/workflows/enhance.md +48 -33
- package/.agent/workflows/growth-max.md +9 -0
- package/.agent/workflows/monitor.md +14 -35
- package/.agent/workflows/orchestrate.md +218 -31
- package/.agent/workflows/performance-max.md +9 -0
- package/.agent/workflows/plan.md +70 -39
- package/.agent/workflows/security.md +14 -35
- package/.agent/workflows/seo.md +16 -39
- package/.agent/workflows/status.md +72 -33
- package/.agent/workflows/test.md +127 -30
- package/.agent/workflows/ui-ux-pro-max.md +283 -24
- package/.editorconfig +21 -0
- package/.gitattributes +7 -0
- package/CHANGELOG.md +32 -0
- package/ERRORS.md +67 -0
- package/{.agent/GEMINI.md → GEMINI.md} +5 -4
- package/LICENSE +8 -22
- package/README.md +72 -102
- package/README.vi.md +110 -90
- package/action.yml +32 -0
- package/antigravity-ide-logo.png +0 -0
- package/antigravity-ide-logo.svg +24 -0
- package/assets/skills-bundle.json +1 -0
- package/cli/create.js +413 -275
- package/cli/index.js +24 -28
- package/cli/lib/auto-update.js +21 -14
- package/cli/logic/skill-definitions.js +39 -0
- package/cli/manifest.js +524 -0
- package/cli/prompts.js +145 -151
- package/cli/skills/fastcode.js +181 -0
- package/docs/AGENTS_GUIDE.vi.md +45 -38
- package/docs/AGENT_FLOW.md +608 -0
- package/docs/CONTRIBUTING.md +46 -0
- package/docs/CONTRIBUTING.vi.md +3 -12
- package/docs/COPYRIGHT.md +57 -0
- package/docs/DEPLOYMENT.md +77 -0
- package/docs/{GEMINI_USAGE.md → GEMINI_GUIDE.md} +6 -6
- package/docs/GLOSSARY.md +109 -0
- package/docs/GLOSSARY.vi.md +30 -49
- package/docs/HOW_ANTIGRAVITY_THINKS.vi.md +1 -1
- package/docs/MASTER_GUIDE.md +103 -0
- package/docs/OPERATIONAL_FLOW.md +147 -0
- package/docs/OPERATIONAL_FLOW.vi.md +0 -15
- package/docs/PLAN-upgrade-core-architecture.md +71 -0
- package/docs/{PUBLISHING_GUIDE.md → PUBLISHING.md} +3 -31
- package/docs/RULES_GUIDE.vi.md +31 -67
- package/docs/SHARED_LIBRARY_GUIDE.vi.md +22 -18
- package/docs/SKILLS.md +610 -0
- package/docs/SKILLS_GUIDE.vi.md +32 -118
- package/docs/TROUBLESHOOTING.md +43 -0
- package/docs/TROUBLESHOOTING.vi.md +2 -10
- package/docs/WORKFLOW_GUIDE.vi.md +9 -57
- package/jest.config.js +8 -0
- package/package.json +8 -31
- package/scripts/bump.js +93 -0
- package/scripts/bundle-skills.js +59 -0
- package/scripts/internal/automation/auto-release.js +177 -0
- package/scripts/internal/fractalize-skills.js +89 -0
- package/scripts/internal/generate-skill-definitions.js +134 -0
- package/scripts/internal/internal/update-docs.js +115 -0
- package/scripts/internal/refactor-skill-content.js +127 -0
- package/scripts/internal/rename-skills.js +96 -0
- package/scripts/internal/sync-skills.js +112 -0
- package/scripts/internal/update-frontmatter-names.js +99 -0
- package/scripts/internal/verification/audit-dna.js +56 -0
- package/scripts/internal/verification/audit-skills.js +65 -0
- package/setup.js +114 -147
- package/web/src/app/docs/guide/examples/brainstorm/page.mdx +91 -0
- package/web/src/app/docs/guide/examples/create/page.mdx +84 -0
- package/web/src/app/docs/guide/examples/debugging/page.mdx +83 -0
- package/web/src/app/docs/guide/examples/deployment/page.mdx +93 -0
- package/web/src/app/docs/guide/examples/new-feature/page.mdx +102 -0
- package/web/src/app/docs/guide/examples/orchestration/page.mdx +99 -0
- package/web/src/app/docs/guide/examples/plan/page.mdx +76 -0
- package/web/src/app/docs/guide/examples/preview/page.mdx +77 -0
- package/web/src/app/docs/guide/examples/status/page.mdx +78 -0
- package/web/src/app/docs/guide/examples/test/page.mdx +80 -0
- package/web/src/app/docs/guide/examples/ui-design/page.mdx +90 -0
- package/web/src/components/mdx/Callout.tsx +60 -0
- package/web/src/components/mdx/FeatureGrid.tsx +38 -0
- package/web/src/components/mdx/ProTips.tsx +29 -0
- package/web/src/components/mdx/StepList.tsx +33 -0
- package/web/src/components/mdx/Terminal.tsx +58 -0
- package/web/src/components/mdx/index.ts +5 -0
- package/web/src/mdx-components.tsx +98 -0
- package/.agent/skills/brand-guidelines-anthropic/LICENSE.txt +0 -202
- package/.agent/skills/brand-guidelines-anthropic/SKILL.md +0 -26
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/color-application.md +0 -5
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/colors.md +0 -14
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/font-management.md +0 -6
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/shape-and-accent-colors.md +0 -7
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/smart-font-application.md +0 -6
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/text-styling.md +0 -6
- package/.agent/skills/brand-guidelines-anthropic/sub-skills/typography.md +0 -7
- package/.agent/skills/internal-comms-anthropic/LICENSE.txt +0 -202
- package/.agent/skills/internal-comms-anthropic/SKILL.md +0 -33
- package/.agent/skills/internal-comms-anthropic/examples/3p-updates.md +0 -47
- package/.agent/skills/internal-comms-anthropic/examples/company-newsletter.md +0 -65
- package/.agent/skills/internal-comms-anthropic/examples/faq-answers.md +0 -30
- package/.agent/skills/internal-comms-anthropic/examples/general-comms.md +0 -16
- package/.agent/skills/last30days/tests/__init__.py +0 -1
- package/.agent/skills/last30days/tests/test_cache.py +0 -59
- package/.agent/skills/last30days/tests/test_dates.py +0 -114
- package/.agent/skills/last30days/tests/test_dedupe.py +0 -111
- package/.agent/skills/last30days/tests/test_models.py +0 -135
- package/.agent/skills/last30days/tests/test_normalize.py +0 -138
- package/.agent/skills/last30days/tests/test_render.py +0 -116
- package/.agent/skills/last30days/tests/test_score.py +0 -168
- package/.agent/skills/loki-mode/.github/workflows/claude-code-review.yml +0 -57
- package/.agent/skills/loki-mode/.github/workflows/claude.yml +0 -50
- package/.agent/skills/loki-mode/.github/workflows/release.yml +0 -128
- package/.agent/skills/loki-mode/tests/run-all-tests.sh +0 -78
- package/.agent/skills/loki-mode/tests/test-agent-timeout.sh +0 -348
- package/.agent/skills/loki-mode/tests/test-bootstrap.sh +0 -196
- package/.agent/skills/loki-mode/tests/test-circuit-breaker.sh +0 -389
- package/.agent/skills/loki-mode/tests/test-state-recovery.sh +0 -393
- package/.agent/skills/loki-mode/tests/test-task-queue.sh +0 -396
- package/.agent/skills/loki-mode/tests/test-wrapper.sh +0 -314
- package/.agent/skills/shopify-development/scripts/tests/test_shopify_init.py +0 -379
- package/cli/logic/product-skills.js +0 -58
- /package/.agent/.shared/{technical/ai-master → ai-master}/best_patterns.md +0 -0
- /package/.agent/.shared/{technical/ai-master → ai-master}/checklists/prompt_audit.md +0 -0
- /package/.agent/.shared/{technical/ai-master → ai-master}/presets/model_configs.json +0 -0
- /package/.agent/.shared/{technical/api-standards → api-standards}/data +0 -0
- /package/.agent/.shared/{technical/api-standards → api-standards}/endpoints_naming.md +0 -0
- /package/.agent/.shared/{technical/api-standards → api-standards}/error_codes.csv +0 -0
- /package/.agent/.shared/{technical/api-standards → api-standards}/pagination_sorting.md +0 -0
- /package/.agent/.shared/{technical/api-standards → api-standards}/response_format.json +0 -0
- /package/.agent/.shared/{verticals/compliance → compliance}/legal_templates.md +0 -0
- /package/.agent/.shared/{technical/database-master → database-master}/schemas/auth_rbac.sql +0 -0
- /package/.agent/.shared/{technical/database-master → database-master}/schemas/cms.sql +0 -0
- /package/.agent/.shared/{technical/database-master → database-master}/schemas/ecommerce.sql +0 -0
- /package/.agent/.shared/{core/design-philosophy → design-philosophy}/MANIFESTO.md +0 -0
- /package/.agent/.shared/{core/design-philosophy → design-philosophy}/checklists/tactile_audit.md +0 -0
- /package/.agent/.shared/{core/design-philosophy → design-philosophy}/checklists/visual_audit.md +0 -0
- /package/.agent/.shared/{core/design-philosophy → design-philosophy}/presets/linear_glow.json +0 -0
- /package/.agent/.shared/{technical/design-system → design-system}/brand_presets.json +0 -0
- /package/.agent/.shared/{technical/design-system → design-system}/micro_interactions.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/edtech.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/fintech.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/fnb_restaurant.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/freelance_marketplace.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/healthcare.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/hospitality_tourism.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/logistics.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/marketing_automation.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/personal_branding.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/real_estate.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/retail_ecommerce.md +0 -0
- /package/.agent/.shared/{verticals/domain-blueprints → domain-blueprints}/standard-pro-agents.md +0 -0
- /package/.agent/.shared/{core/dx-toolkit → dx-toolkit}/checklists/code_review.md +0 -0
- /package/.agent/.shared/{core/dx-toolkit → dx-toolkit}/presets/vscode_settings.json +0 -0
- /package/.agent/.shared/{technical/i18n-master → i18n-master}/vi_tech_dictionary.csv +0 -0
- /package/.agent/.shared/{technical/i18n-master → i18n-master}/workflows.json +0 -0
- /package/.agent/.shared/{verticals/infra-blueprints → infra-blueprints}/deployment_specs.md +0 -0
- /package/.agent/.shared/{core/metrics → metrics}/benchmarks.json +0 -0
- /package/.agent/.shared/{technical/resilience-patterns → resilience-patterns}/checklists/chaos_engineering.md +0 -0
- /package/.agent/.shared/{technical/resilience-patterns → resilience-patterns}/presets/circuit_breaker.json +0 -0
- /package/.agent/.shared/{technical/security-armor → security-armor}/checklists/vuln_scan.md +0 -0
- /package/.agent/.shared/{technical/security-armor → security-armor}/hardening.md +0 -0
- /package/.agent/.shared/{technical/security-armor → security-armor}/presets/helmet_config.json +0 -0
- /package/.agent/.shared/{technical/seo-master → seo-master}/checklists/technical_seo.md +0 -0
- /package/.agent/.shared/{technical/seo-master → seo-master}/presets/json_ld_schema.json +0 -0
- /package/.agent/.shared/{technical/testing-master → testing-master}/checklists/pre_release.md +0 -0
- /package/.agent/.shared/{technical/testing-master → testing-master}/scenarios.md +0 -0
- /package/.agent/{skills → .shared}/ui-ux-pro-max/data/charts.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/colors.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/icons.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/landing.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/products.csv +0 -0
- /package/.agent/{skills → .shared}/ui-ux-pro-max/data/prompts.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/react-performance.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/flutter.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/html-tailwind.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/jetpack-compose.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/nextjs.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/nuxt-ui.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/nuxtjs.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/react-native.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/react.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/shadcn.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/svelte.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/swiftui.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/stacks/vue.csv +0 -0
- /package/.agent/{skills → .shared}/ui-ux-pro-max/data/styles.csv +0 -0
- /package/.agent/{skills → .shared}/ui-ux-pro-max/data/typography.csv +0 -0
- /package/.agent/{skills → .shared}/ui-ux-pro-max/data/ui-reasoning.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/ux-guidelines.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/data/web-interface.csv +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/scripts/__pycache__/core.cpython-313.pyc +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/scripts/__pycache__/design_system.cpython-313.pyc +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/scripts/core.py +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/scripts/design_system.py +0 -0
- /package/.agent/.shared/{technical/ui-ux-pro-max → ui-ux-pro-max}/scripts/search.py +0 -0
- /package/.agent/.shared/{core/vitals-templates → vitals-templates}/audit_report.md +0 -0
- /package/.agent/.shared/{core/vitals-templates → vitals-templates}/plan_prd.md +0 -0
- /package/.agent/skills/ai-engineer/{sub-skills → resources}/ai_infra_stack.md +0 -0
- /package/.agent/skills/cloud-architect-master/{sub-skills → resources}/cost_optimization_checklist.md +0 -0
- /package/.agent/skills/cro-expert-kit/{sub-skills → resources}/psychological_triggers.md +0 -0
- /package/.agent/skills/database-migration/{sub-skills → resources}/zero_downtime_strategy.md +0 -0
- /package/.agent/skills/deployment-engineer/{sub-skills → resources}/k8s_best_practices.md +0 -0
- /package/.agent/skills/git-collaboration-master/{sub-skills → resources}/pr_template.md +0 -0
- /package/.agent/skills/incident-responder/{sub-skills → resources}/incident_severity_levels.md +0 -0
- /package/.agent/skills/legacy-modernizer/{sub-skills → resources}/strangler_fig_pattern.md +0 -0
- /package/.agent/skills/penetration-tester-master/{sub-skills → resources}/owasp_top_10_2025.md +0 -0
- /package/.agent/skills/production-code-audit/{sub-skills → resources}/solid_principles_cheat_sheet.md +0 -0
- /package/.agent/skills/seo-expert-kit/{sub-skills → resources}/technical_seo_checklist.md +0 -0
- /package/.agent/skills/tdd-master-workflow/{sub-skills → resources}/unit_test_naming_convention.md +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @script auto-release.js
|
|
3
|
+
* @version 4.2.0
|
|
4
|
+
* @layer automation
|
|
5
|
+
* @protocol unified-protocol-v1
|
|
6
|
+
* @description Tự động cập nhật version và số liệu thống kê trên toàn bộ dự án.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
const path = require('path');
|
|
11
|
+
const { execSync } = require('child_process');
|
|
12
|
+
|
|
13
|
+
function logError(error, context) {
|
|
14
|
+
const errorLogPath = path.join(process.cwd(), 'ERRORS.md');
|
|
15
|
+
const timestamp = new Date().toISOString().replace('T', ' ').substring(0, 16);
|
|
16
|
+
const entry = `
|
|
17
|
+
## [${timestamp}] - Auto-Release Script Failure
|
|
18
|
+
|
|
19
|
+
- **Type**: Runtime
|
|
20
|
+
- **Severity**: High
|
|
21
|
+
- **File**: \`.agent/scripts/automation/auto-release.js\`
|
|
22
|
+
- **Agent**: Senior Automation Engine
|
|
23
|
+
- **Root Cause**: ${context}
|
|
24
|
+
- **Error Message**:
|
|
25
|
+
\`\`\`
|
|
26
|
+
${error.message || error}
|
|
27
|
+
\`\`\`
|
|
28
|
+
- **Fix Applied**: N/A - Diagnostic logged
|
|
29
|
+
- **Prevention**: Check project state and Git permissions
|
|
30
|
+
- **Status**: Investigating
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
`;
|
|
34
|
+
fs.appendFileSync(errorLogPath, entry);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// 1. Cấu hình các file cần cập nhật Version
|
|
38
|
+
const VERSION_FILES = [
|
|
39
|
+
{
|
|
40
|
+
path: 'package.json',
|
|
41
|
+
regex: /"version": "\d+\.\d+\.\d+"/g,
|
|
42
|
+
template: (ver) => `"version": "${ver}"`
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
path: 'VERSION',
|
|
46
|
+
regex: /\d+\.\d+\.\d+/g,
|
|
47
|
+
template: (ver) => `${ver}`
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
path: 'MASTER_GUIDE.md',
|
|
51
|
+
regex: /\*\*Version\*\*: \d+\.\d+\.\d+/g,
|
|
52
|
+
template: (ver) => `**Version**: ${ver}`
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
path: 'README.md',
|
|
56
|
+
regex: /antigravity-ide@\d+\.\d+\.\d+/g, // Update npx command example if generic
|
|
57
|
+
template: (ver) => `antigravity-ide@${ver}`
|
|
58
|
+
}
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
// 2. Cấu hình các file cần cập nhật Số liệu (Stats)
|
|
62
|
+
const STATS_FILES = [
|
|
63
|
+
'README.md',
|
|
64
|
+
'README.vi.md',
|
|
65
|
+
'GEMINI_GUIDE.md',
|
|
66
|
+
'SKILLS.md'
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
// Helper: Đếm số lượng trong thư mục
|
|
70
|
+
function countItems(dirPath, filterFn) {
|
|
71
|
+
const fullPath = path.join(process.cwd(), '.agent', dirPath);
|
|
72
|
+
if (!fs.existsSync(fullPath)) return 0;
|
|
73
|
+
return fs.readdirSync(fullPath, { withFileTypes: true })
|
|
74
|
+
.filter(filterFn).length;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Logic chính
|
|
78
|
+
function main() {
|
|
79
|
+
const newVersion = process.argv[2];
|
|
80
|
+
|
|
81
|
+
if (!newVersion) {
|
|
82
|
+
console.error("❌ Error: Vui lòng cung cấp version mới. Ví dụ: node .agent/scripts/auto-release.js 4.0.4");
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
console.log(`🚀 Starting Release Process for v${newVersion}...\n`);
|
|
87
|
+
|
|
88
|
+
// --- A. Cập nhật Version ---
|
|
89
|
+
console.log("1️⃣ Updating Version Numbers...");
|
|
90
|
+
let updatedFiles = 0;
|
|
91
|
+
|
|
92
|
+
VERSION_FILES.forEach(config => {
|
|
93
|
+
const filePath = path.join(process.cwd(), config.path);
|
|
94
|
+
if (fs.existsSync(filePath)) {
|
|
95
|
+
let content = fs.readFileSync(filePath, 'utf8');
|
|
96
|
+
if (config.regex.test(content)) {
|
|
97
|
+
const newContent = content.replace(config.regex, config.template(newVersion));
|
|
98
|
+
fs.writeFileSync(filePath, newContent);
|
|
99
|
+
console.log(` ✅ Updated ${config.path}`);
|
|
100
|
+
updatedFiles++;
|
|
101
|
+
} else {
|
|
102
|
+
console.log(` ⚠️ Current version pattern not found in ${config.path} (Skipped)`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// --- B. Cập nhật Thống kê Real-time ---
|
|
108
|
+
console.log("\n2️⃣ Updating Live Statistics...");
|
|
109
|
+
|
|
110
|
+
const stats = {
|
|
111
|
+
skills: countItems('skills', item => item.isDirectory()), // Folder là skill
|
|
112
|
+
workflows: countItems('workflows', item => item.isFile() && item.name.endsWith('.md')),
|
|
113
|
+
rules: countItems('rules', item => item.isFile() && item.name.endsWith('.md')),
|
|
114
|
+
agents: countItems('agents', item => item.isFile() && item.name.endsWith('.md'))
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
console.log(` 📊 Detected: ${stats.skills} Skills | ${stats.agents} Agents | ${stats.workflows} Workflows | ${stats.rules} Rules`);
|
|
118
|
+
|
|
119
|
+
STATS_FILES.forEach(fileName => {
|
|
120
|
+
const filePath = path.join(process.cwd(), fileName);
|
|
121
|
+
if (fs.existsSync(filePath)) {
|
|
122
|
+
let content = fs.readFileSync(filePath, 'utf8');
|
|
123
|
+
|
|
124
|
+
// Regex thay thế số lượng (VD: **26** Skills -> **27** Skills)
|
|
125
|
+
// Pattern: | **XX** [Text] |
|
|
126
|
+
|
|
127
|
+
// Update Skills
|
|
128
|
+
content = content.replace(/\|\s*\*\*\d+\*\*\s*(Master Skills|Bộ Kỹ năng|Skills)/g,
|
|
129
|
+
`| **${stats.skills}** $1`);
|
|
130
|
+
|
|
131
|
+
// Update Workflows
|
|
132
|
+
content = content.replace(/\|\s*\*\*\d+\*\*\s*(Workflows|Quy trình|Quy trình \(Workflows\))/g,
|
|
133
|
+
`| **${stats.workflows}** $1`);
|
|
134
|
+
|
|
135
|
+
// Update Agents
|
|
136
|
+
content = content.replace(/\|\s*\*\*\d+\*\*\s*(Specialist Agents|Agent Chuyên gia)/g,
|
|
137
|
+
`| **${stats.agents}** $1`);
|
|
138
|
+
|
|
139
|
+
// Update GEMINI_GUIDE total skills text
|
|
140
|
+
content = content.replace(/Total: \d+ Master Skills/g, `Total: ${stats.skills} Master Skills`);
|
|
141
|
+
content = content.replace(/\*\*All \d+ Master Skills/g, `**All ${stats.skills} Master Skills`);
|
|
142
|
+
|
|
143
|
+
fs.writeFileSync(filePath, content);
|
|
144
|
+
console.log(` ✅ Synced stats to ${fileName}`);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// --- C. Rà soát tính năng mới (Gợi ý Changelog) ---
|
|
149
|
+
console.log("\n3️⃣ Scanning for Recent Changes (Git)...");
|
|
150
|
+
try {
|
|
151
|
+
// Lấy danh sách file mới thêm trong 24h qua (hoặc chưa commit)
|
|
152
|
+
const gitStatus = execSync('git status --short').toString();
|
|
153
|
+
const newFiles = gitStatus.split('\n')
|
|
154
|
+
.filter(line => line.startsWith('A') || line.startsWith('??'))
|
|
155
|
+
.map(line => line.substring(3)); // Bỏ prefix trạng thái
|
|
156
|
+
|
|
157
|
+
const newFeatures = newFiles.filter(f => f.includes('.agent/skills') || f.includes('.agent/workflows') || f.includes('.agent/rules'));
|
|
158
|
+
|
|
159
|
+
if (newFeatures.length > 0) {
|
|
160
|
+
console.log(" ✨ New features detected (Add these to CHANGELOG.md):");
|
|
161
|
+
newFeatures.forEach(f => console.log(` - ${f}`));
|
|
162
|
+
} else {
|
|
163
|
+
console.log(" ℹ️ No new feature files detected via Git status.");
|
|
164
|
+
}
|
|
165
|
+
} catch (e) {
|
|
166
|
+
console.log(" ⚠️ Could not run git check (optional step).");
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
console.log("\n✅ Auto-Release Complete! Please verify changes and commit.");
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
main();
|
|
174
|
+
} catch (err) {
|
|
175
|
+
console.error("❌ Critical Script Error:", err.message);
|
|
176
|
+
logError(err, "General script failure during main execution loop");
|
|
177
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const SKILLS_DIR = 'd:\\Github\\antigravity-ide\\.agent\\skills';
|
|
5
|
+
|
|
6
|
+
function fractalizeSkill(skillName) {
|
|
7
|
+
const skillDir = path.join(SKILLS_DIR, skillName);
|
|
8
|
+
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
9
|
+
|
|
10
|
+
if (!fs.existsSync(skillFile)) {
|
|
11
|
+
console.warn(`⚠️ SKILL.md not found for ${skillName}, skipping.`);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const content = fs.readFileSync(skillFile, 'utf-8');
|
|
16
|
+
|
|
17
|
+
// Regex to extract Sections that look like Sub-skills
|
|
18
|
+
// This is heuristically complex.
|
|
19
|
+
// For now, simpler strategy:
|
|
20
|
+
// 1. Create `sub-skills` folder.
|
|
21
|
+
// 2. Identify H3 headers (### Title) as potential sub-skills.
|
|
22
|
+
// 3. Split content and create files.
|
|
23
|
+
// 4. Rewrite SKILL.md to link to them.
|
|
24
|
+
|
|
25
|
+
// BUT: Doing this blindly for 500 skills is DANGEROUS and LOW QUALITY.
|
|
26
|
+
// Better Strategy for now (Safe Fractalization):
|
|
27
|
+
// 1. Just create the `sub-skills` directory structure if missing.
|
|
28
|
+
// 2. If `resources` folder exists and has .md files, MOVE them to `sub-skills`.
|
|
29
|
+
// 3. Update SKILL.md frontmatter to include `version: x.x.x-fractal`.
|
|
30
|
+
|
|
31
|
+
const subSkillsDir = path.join(skillDir, 'sub-skills');
|
|
32
|
+
if (!fs.existsSync(subSkillsDir)) {
|
|
33
|
+
fs.mkdirSync(subSkillsDir);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Move Resources to Sub-skills
|
|
37
|
+
const resourcesDir = path.join(skillDir, 'resources');
|
|
38
|
+
if (fs.existsSync(resourcesDir)) {
|
|
39
|
+
const files = fs.readdirSync(resourcesDir);
|
|
40
|
+
files.forEach(file => {
|
|
41
|
+
if (file.endsWith('.md')) {
|
|
42
|
+
const src = path.join(resourcesDir, file);
|
|
43
|
+
const dest = path.join(subSkillsDir, file);
|
|
44
|
+
fs.renameSync(src, dest);
|
|
45
|
+
console.log(`📦 Moved ${file} from resources to sub-skills for ${skillName}`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
// Clean up if empty
|
|
49
|
+
if (fs.readdirSync(resourcesDir).length === 0) {
|
|
50
|
+
fs.rmdirSync(resourcesDir);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Update Frontmatter
|
|
55
|
+
let newContent = content;
|
|
56
|
+
if (!content.includes('version:')) {
|
|
57
|
+
newContent = content.replace('---', `---\nversion: 4.1.0-fractal`);
|
|
58
|
+
} else if (!content.includes('-fractal')) {
|
|
59
|
+
newContent = content.replace(/version: (.*)/, `version: 4.1.0-fractal`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (fs.existsSync(subSkillsDir) && fs.readdirSync(subSkillsDir).length > 0) {
|
|
63
|
+
// Append "Knowledge Modules" section if there are sub-skills and it's missing
|
|
64
|
+
if (!newContent.includes('Knowledge Modules')) {
|
|
65
|
+
newContent += '\n\n## 🧠 Knowledge Modules (Fractal Skills)\n\n';
|
|
66
|
+
const subFiles = fs.readdirSync(subSkillsDir);
|
|
67
|
+
subFiles.forEach((file, index) => {
|
|
68
|
+
newContent += `### ${index + 1}. [${file.replace('.md', '')}](./sub-skills/${file})\n`;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
fs.writeFileSync(skillFile, newContent);
|
|
74
|
+
console.log(`✅ Fractalized: ${skillName}`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function main() {
|
|
78
|
+
const skills = fs.readdirSync(SKILLS_DIR, { withFileTypes: true })
|
|
79
|
+
.filter(dirent => dirent.isDirectory())
|
|
80
|
+
.map(dirent => dirent.name);
|
|
81
|
+
|
|
82
|
+
skills.forEach(skill => {
|
|
83
|
+
// Skip if already correct
|
|
84
|
+
if (skill === 'security-auditor') return;
|
|
85
|
+
fractalizeSkill(skill);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
main();
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const skillsDir = path.join(__dirname, '..', '..', '.agent', 'skills');
|
|
5
|
+
const outputFile = path.join(__dirname, '..', '..', 'cli', 'logic', 'skill-definitions.js');
|
|
6
|
+
|
|
7
|
+
// 1. Get all skill names
|
|
8
|
+
const allSkills = fs.readdirSync(skillsDir).filter(f => fs.statSync(path.join(skillsDir, f)).isDirectory());
|
|
9
|
+
|
|
10
|
+
// 2. Define Category Keywords (Priority Order matters for overlapping terms)
|
|
11
|
+
const categoryKeywords = {
|
|
12
|
+
security: ['security', 'pentest', 'hack', 'malware', 'vulnerability', 'auth', 'compliance', 'red-team', 'forensics', 'exploit', 'owasp', 'scanning', 'threat', 'ssh', 'ssl', 'encryption', 'pci', 'gdpr', 'stride'],
|
|
13
|
+
ai: ['ai-', 'llm', 'agent', 'langgraph', 'langchain', 'prompt', 'rag', 'vector', 'embedding', 'model', 'autogen', 'crewai', 'machine-learning', 'ml-', 'deep-learning', 'vision', 'voice', 'chatbot', 'gpt', 'claude', 'gemini', 'context'],
|
|
14
|
+
mobile: ['mobile', 'android', 'ios', 'flutter', 'react-native', 'expo', 'swift', 'kotlin', 'app-store'],
|
|
15
|
+
devops: ['devops', 'docker', 'kubernetes', 'k8s', 'terraform', 'aws', 'azure', 'gcp', 'cloud', 'ci/cd', 'pipeline', 'deploy', 'server', 'linux', 'bash', 'shell', 'monitor', 'observability', 'infra', 'terminal', 'powershell', 'bazel', 'turborepo', 'nx', 'git', 'ansible', 'helm', 'prometheus', 'grafana'],
|
|
16
|
+
testing: ['test', 'tdd', 'playwright', 'cypress', 'selenium', 'puppeteer', 'jest', 'vitest', 'e2e', 'qa', 'quality', 'debugging', 'debugger'],
|
|
17
|
+
uiux: ['ui', 'ux', 'design', 'css', 'tailwind', 'animation', 'style', 'theme', 'accessibility', 'wcag', 'canvas', 'svg', 'd3', 'icon', 'color', 'font', 'layout', 'responsive', 'frontend'],
|
|
18
|
+
growth: ['seo', 'analytics', 'marketing', 'growth', 'copy', 'content', 'social', 'email', 'conversion', 'cro', 'pricing', 'sales', 'business', 'startup', 'product', 'advertising', 'ads'],
|
|
19
|
+
webdev: ['web', 'react', 'next', 'vue', 'angular', 'svelte', 'html', 'javascript', 'typescript', 'node', 'express', 'nestjs', 'api', 'graphql', 'rest', 'backend', 'full-stack', 'frontend', 'wasm', 'pwa', 'remix', 'shopify', 'wordpress', 'django', 'flask', 'fastapi', 'php', 'ruby', 'rails', 'go-', 'rust', 'java', 'c-', 'cpp'],
|
|
20
|
+
research: ['research', 'analysis', 'strategy', 'brainstorm', 'plan', 'document', 'architecture', 'diagram', 'uml', 'c4', 'review', 'audit'],
|
|
21
|
+
// Maker matches everything else useful for building
|
|
22
|
+
maker: ['tool', 'automation', 'productivity', 'notion', 'obsidian', 'workflow', 'script', 'bot', 'scraper', 'data', 'excel', 'csv', 'pdf', 'video', 'image', 'audio', 'file', 'mcp']
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const categorizedSkills = {
|
|
26
|
+
webdev: [],
|
|
27
|
+
mobile: [],
|
|
28
|
+
ai: [],
|
|
29
|
+
research: [],
|
|
30
|
+
uiux: [],
|
|
31
|
+
devops: [],
|
|
32
|
+
security: [],
|
|
33
|
+
growth: [],
|
|
34
|
+
maker: [],
|
|
35
|
+
testing: []
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const assignedSkills = new Set();
|
|
39
|
+
|
|
40
|
+
// 3. Auto-Categorize
|
|
41
|
+
allSkills.forEach(skill => {
|
|
42
|
+
let assigned = false;
|
|
43
|
+
const lowerName = skill.toLowerCase();
|
|
44
|
+
|
|
45
|
+
// Check specific categories first
|
|
46
|
+
for (const [cat, keywords] of Object.entries(categoryKeywords)) {
|
|
47
|
+
if (keywords.some(k => lowerName.includes(k))) {
|
|
48
|
+
categorizedSkills[cat].push(skill);
|
|
49
|
+
assignedSkills.add(skill);
|
|
50
|
+
assigned = true;
|
|
51
|
+
break; // Assign to first matching category (priority based on order in object)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Fallback logic
|
|
56
|
+
if (!assigned) {
|
|
57
|
+
// If not assigned, put in 'maker' as general tools
|
|
58
|
+
categorizedSkills.maker.push(skill);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// 4. Generate File Content
|
|
63
|
+
const fileContent = `/**
|
|
64
|
+
* Centralized definition of all Agent Skills and their categories.
|
|
65
|
+
* Auto-generated by .agent/scripts/generate-skill-definitions.js
|
|
66
|
+
* Total Skills: ${allSkills.length}
|
|
67
|
+
*/
|
|
68
|
+
|
|
69
|
+
const skillCategories = {
|
|
70
|
+
webdev: {
|
|
71
|
+
name: 'Web High-Performance (Vercel & Antfu Grade)',
|
|
72
|
+
skills: ${JSON.stringify(categorizedSkills.webdev, null, 2).replace(/"/g, "'")}
|
|
73
|
+
},
|
|
74
|
+
mobile: {
|
|
75
|
+
name: 'Mobile Development (iOS, Android, Cross-Platform)',
|
|
76
|
+
skills: ${JSON.stringify(categorizedSkills.mobile, null, 2).replace(/"/g, "'")}
|
|
77
|
+
},
|
|
78
|
+
ai: {
|
|
79
|
+
name: 'Advanced AI & Research (AutoGen & LangGraph)',
|
|
80
|
+
skills: ${JSON.stringify(categorizedSkills.ai, null, 2).replace(/"/g, "'")}
|
|
81
|
+
},
|
|
82
|
+
research: {
|
|
83
|
+
name: 'Strategic Research & Wisdom (Fabric Patterns)',
|
|
84
|
+
skills: ${JSON.stringify(categorizedSkills.research, null, 2).replace(/"/g, "'")}
|
|
85
|
+
},
|
|
86
|
+
uiux: {
|
|
87
|
+
name: 'UI/UX Pro Max (NextLevel Aesthetics)',
|
|
88
|
+
skills: ${JSON.stringify(categorizedSkills.uiux, null, 2).replace(/"/g, "'")}
|
|
89
|
+
},
|
|
90
|
+
devops: {
|
|
91
|
+
name: 'DevOps & Cloud (Enterprise Grade)',
|
|
92
|
+
skills: ${JSON.stringify(categorizedSkills.devops, null, 2).replace(/"/g, "'")}
|
|
93
|
+
},
|
|
94
|
+
security: {
|
|
95
|
+
name: 'Security & Compliance (Fintech Standards)',
|
|
96
|
+
skills: ${JSON.stringify(categorizedSkills.security, null, 2).replace(/"/g, "'")}
|
|
97
|
+
},
|
|
98
|
+
growth: {
|
|
99
|
+
name: 'Growth & Business Intelligence',
|
|
100
|
+
skills: ${JSON.stringify(categorizedSkills.growth, null, 2).replace(/"/g, "'")}
|
|
101
|
+
},
|
|
102
|
+
maker: {
|
|
103
|
+
name: 'Maker & Indie Hacking (Sickn33) ',
|
|
104
|
+
skills: ${JSON.stringify(categorizedSkills.maker, null, 2).replace(/"/g, "'")}
|
|
105
|
+
},
|
|
106
|
+
testing: {
|
|
107
|
+
name: 'Professional QA & Testing',
|
|
108
|
+
skills: ${JSON.stringify(categorizedSkills.testing, null, 2).replace(/"/g, "'")}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
function getSkillsForCategories(categories) {
|
|
113
|
+
const skills = [];
|
|
114
|
+
categories.forEach(category => {
|
|
115
|
+
if (skillCategories[category]) {
|
|
116
|
+
skills.push(...skillCategories[category].skills);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
return skills;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
module.exports = {
|
|
123
|
+
skillCategories,
|
|
124
|
+
getSkillsForCategories
|
|
125
|
+
};
|
|
126
|
+
`;
|
|
127
|
+
|
|
128
|
+
// 5. Write File
|
|
129
|
+
fs.writeFileSync(outputFile, fileContent);
|
|
130
|
+
console.log(`Successfully generated skill definitions for ${allSkills.length} skills.`);
|
|
131
|
+
console.log('Breakdown:');
|
|
132
|
+
Object.keys(categorizedSkills).forEach(cat => {
|
|
133
|
+
console.log(` - ${cat}: ${categorizedSkills[cat].length}`);
|
|
134
|
+
});
|
|
@@ -0,0 +1,115 @@
|
|
|
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 };
|
|
@@ -0,0 +1,127 @@
|
|
|
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();
|