@ruaruababa/vibe-kit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CATALOG.md +317 -0
- package/README.md +121 -0
- package/aliases.json +65 -0
- package/bin/vibe.js +2 -0
- package/bundles.json +265 -0
- package/catalog.json +1560 -0
- package/dist/antigravity-skills/bin/cli.js +438 -0
- package/dist/antigravity-skills/lib/skill-utils.js +158 -0
- package/dist/antigravity-skills/scripts/build-catalog.js +305 -0
- package/dist/antigravity-skills/scripts/normalize-frontmatter.js +144 -0
- package/dist/antigravity-skills/scripts/validate-skills.js +230 -0
- package/dist/bin/vibe.js +2 -0
- package/dist/dist/src/cli/index.js +26 -0
- package/dist/lib/skill-utils.js +158 -0
- package/dist/scripts/build-catalog.js +50 -0
- package/dist/scripts/normalize-frontmatter.js +144 -0
- package/dist/scripts/validate-skills.js +56 -0
- package/dist/src/cli/index.js +146 -0
- package/dist/src/types/index.js +13 -0
- package/dist/src/utils/fs.js +1 -0
- package/package.json +43 -0
- package/skills/accessibility-compliance-accessibility-audit/SKILL.md +42 -0
- package/skills/accessibility-compliance-accessibility-audit/resources/implementation-playbook.md +502 -0
- package/skills/agent-orchestration-improve-agent/SKILL.md +349 -0
- package/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
- package/skills/agent-orchestrator/SKILL.md +24 -0
- package/skills/ai-engineer/SKILL.md +171 -0
- package/skills/airflow-dag-patterns/SKILL.md +41 -0
- package/skills/airflow-dag-patterns/resources/implementation-playbook.md +509 -0
- package/skills/angular-migration/SKILL.md +428 -0
- package/skills/anti-reversing-techniques/SKILL.md +42 -0
- package/skills/anti-reversing-techniques/resources/implementation-playbook.md +539 -0
- package/skills/api-design-principles/SKILL.md +37 -0
- package/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/skills/api-documenter/SKILL.md +184 -0
- package/skills/api-testing-observability-api-mock/SKILL.md +46 -0
- package/skills/api-testing-observability-api-mock/resources/implementation-playbook.md +1327 -0
- package/skills/application-performance-performance-optimization/SKILL.md +154 -0
- package/skills/architect-review/SKILL.md +174 -0
- package/skills/architecture-decision-records/SKILL.md +441 -0
- package/skills/architecture-patterns/SKILL.md +37 -0
- package/skills/architecture-patterns/resources/implementation-playbook.md +479 -0
- package/skills/arm-cortex-expert/SKILL.md +306 -0
- package/skills/async-python-patterns/SKILL.md +39 -0
- package/skills/async-python-patterns/resources/implementation-playbook.md +678 -0
- package/skills/attack-tree-construction/SKILL.md +38 -0
- package/skills/attack-tree-construction/resources/implementation-playbook.md +671 -0
- package/skills/auth-implementation-patterns/SKILL.md +39 -0
- package/skills/auth-implementation-patterns/resources/implementation-playbook.md +618 -0
- package/skills/backend-architect/SKILL.md +333 -0
- package/skills/backend-development-feature-development/SKILL.md +180 -0
- package/skills/backend-security-coder/SKILL.md +156 -0
- package/skills/backtesting-frameworks/SKILL.md +39 -0
- package/skills/backtesting-frameworks/resources/implementation-playbook.md +647 -0
- package/skills/bash-defensive-patterns/SKILL.md +43 -0
- package/skills/bash-defensive-patterns/resources/implementation-playbook.md +517 -0
- package/skills/bash-pro/SKILL.md +310 -0
- package/skills/bats-testing-patterns/SKILL.md +34 -0
- package/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
- package/skills/bazel-build-optimization/SKILL.md +397 -0
- package/skills/billing-automation/SKILL.md +42 -0
- package/skills/billing-automation/resources/implementation-playbook.md +544 -0
- package/skills/binary-analysis-patterns/SKILL.md +450 -0
- package/skills/blockchain-developer/SKILL.md +208 -0
- package/skills/business-analyst/SKILL.md +182 -0
- package/skills/c-pro/SKILL.md +56 -0
- package/skills/c4-architecture-c4-architecture/SKILL.md +389 -0
- package/skills/c4-code/SKILL.md +244 -0
- package/skills/c4-component/SKILL.md +153 -0
- package/skills/c4-container/SKILL.md +171 -0
- package/skills/c4-context/SKILL.md +150 -0
- package/skills/changelog-automation/SKILL.md +38 -0
- package/skills/changelog-automation/resources/implementation-playbook.md +538 -0
- package/skills/cicd-automation-workflow-automate/SKILL.md +51 -0
- package/skills/cicd-automation-workflow-automate/resources/implementation-playbook.md +1333 -0
- package/skills/clean-markdown/SKILL.md +23 -0
- package/skills/cloud-architect/SKILL.md +135 -0
- package/skills/code-documentation-code-explain/SKILL.md +46 -0
- package/skills/code-documentation-code-explain/resources/implementation-playbook.md +802 -0
- package/skills/code-documentation-doc-generate/SKILL.md +48 -0
- package/skills/code-documentation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/code-refactoring-context-restore/SKILL.md +179 -0
- package/skills/code-refactoring-refactor-clean/SKILL.md +51 -0
- package/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/code-refactoring-tech-debt/SKILL.md +386 -0
- package/skills/code-review-ai-ai-review/SKILL.md +450 -0
- package/skills/code-review-excellence/SKILL.md +40 -0
- package/skills/code-review-excellence/resources/implementation-playbook.md +515 -0
- package/skills/code-reviewer/SKILL.md +178 -0
- package/skills/codebase-cleanup-deps-audit/SKILL.md +51 -0
- package/skills/codebase-cleanup-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/codebase-cleanup-refactor-clean/SKILL.md +51 -0
- package/skills/codebase-cleanup-refactor-clean/resources/implementation-playbook.md +879 -0
- package/skills/codebase-cleanup-tech-debt/SKILL.md +386 -0
- package/skills/competitive-landscape/SKILL.md +34 -0
- package/skills/competitive-landscape/resources/implementation-playbook.md +494 -0
- package/skills/comprehensive-review-full-review/SKILL.md +146 -0
- package/skills/comprehensive-review-pr-enhance/SKILL.md +46 -0
- package/skills/comprehensive-review-pr-enhance/resources/implementation-playbook.md +691 -0
- package/skills/conductor-implement/SKILL.md +388 -0
- package/skills/conductor-manage/SKILL.md +39 -0
- package/skills/conductor-manage/resources/implementation-playbook.md +1120 -0
- package/skills/conductor-new-track/SKILL.md +433 -0
- package/skills/conductor-revert/SKILL.md +372 -0
- package/skills/conductor-setup/SKILL.md +426 -0
- package/skills/conductor-status/SKILL.md +338 -0
- package/skills/conductor-validator/SKILL.md +62 -0
- package/skills/content-marketer/SKILL.md +170 -0
- package/skills/context-driven-development/SKILL.md +400 -0
- package/skills/context-management-context-restore/SKILL.md +179 -0
- package/skills/context-management-context-save/SKILL.md +177 -0
- package/skills/context-manager/SKILL.md +185 -0
- package/skills/cost-optimization/SKILL.md +286 -0
- package/skills/cpp-pro/SKILL.md +59 -0
- package/skills/cqrs-implementation/SKILL.md +35 -0
- package/skills/cqrs-implementation/resources/implementation-playbook.md +540 -0
- package/skills/csharp-pro/SKILL.md +59 -0
- package/skills/customer-support/SKILL.md +170 -0
- package/skills/data-engineer/SKILL.md +224 -0
- package/skills/data-engineering-data-driven-feature/SKILL.md +182 -0
- package/skills/data-engineering-data-pipeline/SKILL.md +201 -0
- package/skills/data-quality-frameworks/SKILL.md +40 -0
- package/skills/data-quality-frameworks/resources/implementation-playbook.md +573 -0
- package/skills/data-scientist/SKILL.md +199 -0
- package/skills/data-storytelling/SKILL.md +465 -0
- package/skills/database-admin/SKILL.md +165 -0
- package/skills/database-architect/SKILL.md +268 -0
- package/skills/database-cloud-optimization-cost-optimize/SKILL.md +44 -0
- package/skills/database-cloud-optimization-cost-optimize/resources/implementation-playbook.md +1441 -0
- package/skills/database-migration/SKILL.md +436 -0
- package/skills/database-migrations-migration-observability/SKILL.md +420 -0
- package/skills/database-migrations-sql-migrations/SKILL.md +53 -0
- package/skills/database-migrations-sql-migrations/resources/implementation-playbook.md +499 -0
- package/skills/database-optimizer/SKILL.md +167 -0
- package/skills/dbt-transformation-patterns/SKILL.md +34 -0
- package/skills/dbt-transformation-patterns/resources/implementation-playbook.md +547 -0
- package/skills/debugger/SKILL.md +49 -0
- package/skills/debugging-strategies/SKILL.md +34 -0
- package/skills/debugging-strategies/resources/implementation-playbook.md +511 -0
- package/skills/debugging-toolkit-smart-debug/SKILL.md +197 -0
- package/skills/defi-protocol-templates/SKILL.md +466 -0
- package/skills/dependency-management-deps-audit/SKILL.md +44 -0
- package/skills/dependency-management-deps-audit/resources/implementation-playbook.md +766 -0
- package/skills/dependency-upgrade/SKILL.md +421 -0
- package/skills/deployment-engineer/SKILL.md +170 -0
- package/skills/deployment-pipeline-design/SKILL.md +371 -0
- package/skills/deployment-validation-config-validate/SKILL.md +496 -0
- package/skills/devops-troubleshooter/SKILL.md +161 -0
- package/skills/distributed-debugging-debug-trace/SKILL.md +44 -0
- package/skills/distributed-debugging-debug-trace/resources/implementation-playbook.md +1307 -0
- package/skills/distributed-tracing/SKILL.md +450 -0
- package/skills/django-pro/SKILL.md +180 -0
- package/skills/docs-architect/SKILL.md +98 -0
- package/skills/documentation-generation-doc-generate/SKILL.md +48 -0
- package/skills/documentation-generation-doc-generate/resources/implementation-playbook.md +640 -0
- package/skills/dotnet-architect/SKILL.md +197 -0
- package/skills/dotnet-backend-patterns/SKILL.md +37 -0
- package/skills/dotnet-backend-patterns/assets/repository-template.cs +523 -0
- package/skills/dotnet-backend-patterns/assets/service-template.cs +336 -0
- package/skills/dotnet-backend-patterns/references/dapper-patterns.md +544 -0
- package/skills/dotnet-backend-patterns/references/ef-core-best-practices.md +355 -0
- package/skills/dotnet-backend-patterns/resources/implementation-playbook.md +799 -0
- package/skills/dummy-skill/SKILL.md +5 -0
- package/skills/dx-optimizer/SKILL.md +83 -0
- package/skills/e2e-testing-patterns/SKILL.md +41 -0
- package/skills/e2e-testing-patterns/resources/implementation-playbook.md +531 -0
- package/skills/elixir-pro/SKILL.md +59 -0
- package/skills/embedding-strategies/SKILL.md +491 -0
- package/skills/employment-contract-templates/SKILL.md +39 -0
- package/skills/employment-contract-templates/resources/implementation-playbook.md +493 -0
- package/skills/error-debugging-error-analysis/SKILL.md +47 -0
- package/skills/error-debugging-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-debugging-error-trace/SKILL.md +43 -0
- package/skills/error-debugging-error-trace/resources/implementation-playbook.md +1361 -0
- package/skills/error-debugging-multi-agent-review/SKILL.md +216 -0
- package/skills/error-detective/SKILL.md +53 -0
- package/skills/error-diagnostics-error-analysis/SKILL.md +47 -0
- package/skills/error-diagnostics-error-analysis/resources/implementation-playbook.md +1143 -0
- package/skills/error-diagnostics-error-trace/SKILL.md +48 -0
- package/skills/error-diagnostics-error-trace/resources/implementation-playbook.md +1371 -0
- package/skills/error-diagnostics-smart-debug/SKILL.md +197 -0
- package/skills/error-handling-patterns/SKILL.md +35 -0
- package/skills/error-handling-patterns/resources/implementation-playbook.md +635 -0
- package/skills/event-sourcing-architect/SKILL.md +58 -0
- package/skills/event-store-design/SKILL.md +449 -0
- package/skills/fastapi-pro/SKILL.md +192 -0
- package/skills/fastapi-templates/SKILL.md +32 -0
- package/skills/fastapi-templates/resources/implementation-playbook.md +566 -0
- package/skills/final-test/SKILL.md +5 -0
- package/skills/firmware-analyst/SKILL.md +320 -0
- package/skills/flutter-expert/SKILL.md +200 -0
- package/skills/framework-migration-code-migrate/SKILL.md +48 -0
- package/skills/framework-migration-code-migrate/resources/implementation-playbook.md +1052 -0
- package/skills/framework-migration-deps-upgrade/SKILL.md +48 -0
- package/skills/framework-migration-deps-upgrade/resources/implementation-playbook.md +755 -0
- package/skills/framework-migration-legacy-modernize/SKILL.md +132 -0
- package/skills/frontend-developer/SKILL.md +171 -0
- package/skills/frontend-mobile-development-component-scaffold/SKILL.md +403 -0
- package/skills/frontend-mobile-security-xss-scan/SKILL.md +322 -0
- package/skills/frontend-security-coder/SKILL.md +170 -0
- package/skills/full-stack-orchestration-full-stack-feature/SKILL.md +135 -0
- package/skills/gdpr-data-handling/SKILL.md +33 -0
- package/skills/gdpr-data-handling/resources/implementation-playbook.md +615 -0
- package/skills/git-advanced-workflows/SKILL.md +412 -0
- package/skills/git-pr-workflows-git-workflow/SKILL.md +140 -0
- package/skills/git-pr-workflows-onboard/SKILL.md +416 -0
- package/skills/git-pr-workflows-pr-enhance/SKILL.md +48 -0
- package/skills/git-pr-workflows-pr-enhance/resources/implementation-playbook.md +701 -0
- package/skills/github-actions-templates/SKILL.md +345 -0
- package/skills/gitlab-ci-patterns/SKILL.md +283 -0
- package/skills/gitops-workflow/SKILL.md +303 -0
- package/skills/gitops-workflow/references/argocd-setup.md +134 -0
- package/skills/gitops-workflow/references/sync-policies.md +131 -0
- package/skills/go-concurrency-patterns/SKILL.md +33 -0
- package/skills/go-concurrency-patterns/resources/implementation-playbook.md +654 -0
- package/skills/godot-gdscript-patterns/SKILL.md +33 -0
- package/skills/godot-gdscript-patterns/resources/implementation-playbook.md +804 -0
- package/skills/golang-pro/SKILL.md +179 -0
- package/skills/grafana-dashboards/SKILL.md +381 -0
- package/skills/graphql-architect/SKILL.md +182 -0
- package/skills/haskell-pro/SKILL.md +56 -0
- package/skills/helm-chart-scaffolding/SKILL.md +34 -0
- package/skills/helm-chart-scaffolding/assets/Chart.yaml.template +42 -0
- package/skills/helm-chart-scaffolding/assets/values.yaml.template +185 -0
- package/skills/helm-chart-scaffolding/references/chart-structure.md +500 -0
- package/skills/helm-chart-scaffolding/resources/implementation-playbook.md +543 -0
- package/skills/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
- package/skills/hr-pro/SKILL.md +126 -0
- package/skills/hybrid-cloud-architect/SKILL.md +168 -0
- package/skills/hybrid-cloud-networking/SKILL.md +238 -0
- package/skills/hybrid-search-implementation/SKILL.md +32 -0
- package/skills/hybrid-search-implementation/resources/implementation-playbook.md +567 -0
- package/skills/incident-responder/SKILL.md +213 -0
- package/skills/incident-response-incident-response/SKILL.md +168 -0
- package/skills/incident-response-smart-fix/SKILL.md +29 -0
- package/skills/incident-response-smart-fix/resources/implementation-playbook.md +838 -0
- package/skills/incident-runbook-templates/SKILL.md +395 -0
- package/skills/ios-developer/SKILL.md +219 -0
- package/skills/istio-traffic-management/SKILL.md +337 -0
- package/skills/java-pro/SKILL.md +177 -0
- package/skills/javascript-pro/SKILL.md +57 -0
- package/skills/javascript-testing-patterns/SKILL.md +35 -0
- package/skills/javascript-testing-patterns/resources/implementation-playbook.md +1024 -0
- package/skills/javascript-typescript-typescript-scaffold/SKILL.md +361 -0
- package/skills/julia-pro/SKILL.md +209 -0
- package/skills/k8s-manifest-generator/SKILL.md +35 -0
- package/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/skills/k8s-manifest-generator/references/deployment-spec.md +753 -0
- package/skills/k8s-manifest-generator/references/service-spec.md +724 -0
- package/skills/k8s-manifest-generator/resources/implementation-playbook.md +510 -0
- package/skills/k8s-security-policies/SKILL.md +346 -0
- package/skills/k8s-security-policies/assets/network-policy-template.yaml +177 -0
- package/skills/k8s-security-policies/references/rbac-patterns.md +187 -0
- package/skills/kpi-dashboard-design/SKILL.md +440 -0
- package/skills/kubernetes-architect/SKILL.md +170 -0
- package/skills/langchain-architecture/SKILL.md +350 -0
- package/skills/legacy-modernizer/SKILL.md +53 -0
- package/skills/legal-advisor/SKILL.md +70 -0
- package/skills/linkerd-patterns/SKILL.md +321 -0
- package/skills/llm-application-dev-ai-assistant/SKILL.md +35 -0
- package/skills/llm-application-dev-ai-assistant/resources/implementation-playbook.md +1236 -0
- package/skills/llm-application-dev-langchain-agent/SKILL.md +246 -0
- package/skills/llm-application-dev-prompt-optimize/SKILL.md +37 -0
- package/skills/llm-application-dev-prompt-optimize/resources/implementation-playbook.md +591 -0
- package/skills/llm-evaluation/SKILL.md +483 -0
- package/skills/machine-learning-ops-ml-pipeline/SKILL.md +314 -0
- package/skills/malware-analyst/SKILL.md +247 -0
- package/skills/market-sizing-analysis/SKILL.md +425 -0
- package/skills/market-sizing-analysis/examples/saas-market-sizing.md +349 -0
- package/skills/market-sizing-analysis/references/data-sources.md +360 -0
- package/skills/memory-forensics/SKILL.md +491 -0
- package/skills/memory-safety-patterns/SKILL.md +33 -0
- package/skills/memory-safety-patterns/resources/implementation-playbook.md +603 -0
- package/skills/mermaid-expert/SKILL.md +59 -0
- package/skills/microservices-patterns/SKILL.md +35 -0
- package/skills/microservices-patterns/resources/implementation-playbook.md +607 -0
- package/skills/minecraft-bukkit-pro/SKILL.md +126 -0
- package/skills/ml-engineer/SKILL.md +168 -0
- package/skills/ml-pipeline-workflow/SKILL.md +257 -0
- package/skills/mlops-engineer/SKILL.md +219 -0
- package/skills/mobile-developer/SKILL.md +205 -0
- package/skills/mobile-security-coder/SKILL.md +184 -0
- package/skills/modern-javascript-patterns/SKILL.md +35 -0
- package/skills/modern-javascript-patterns/resources/implementation-playbook.md +910 -0
- package/skills/monorepo-architect/SKILL.md +61 -0
- package/skills/monorepo-management/SKILL.md +35 -0
- package/skills/monorepo-management/resources/implementation-playbook.md +621 -0
- package/skills/mtls-configuration/SKILL.md +359 -0
- package/skills/multi-cloud-architecture/SKILL.md +189 -0
- package/skills/multi-platform-apps-multi-platform/SKILL.md +203 -0
- package/skills/network-engineer/SKILL.md +169 -0
- package/skills/nextjs-app-router-patterns/SKILL.md +33 -0
- package/skills/nextjs-app-router-patterns/resources/implementation-playbook.md +543 -0
- package/skills/nft-standards/SKILL.md +395 -0
- package/skills/node-expert/SKILL.md +23 -0
- package/skills/nodejs-backend-patterns/SKILL.md +35 -0
- package/skills/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
- package/skills/nx-workspace-patterns/SKILL.md +464 -0
- package/skills/observability-engineer/SKILL.md +237 -0
- package/skills/observability-monitoring-monitor-setup/SKILL.md +48 -0
- package/skills/observability-monitoring-monitor-setup/resources/implementation-playbook.md +505 -0
- package/skills/observability-monitoring-slo-implement/SKILL.md +43 -0
- package/skills/observability-monitoring-slo-implement/resources/implementation-playbook.md +1077 -0
- package/skills/on-call-handoff-patterns/SKILL.md +453 -0
- package/skills/openapi-spec-generation/SKILL.md +33 -0
- package/skills/openapi-spec-generation/resources/implementation-playbook.md +1027 -0
- package/skills/payment-integration/SKILL.md +77 -0
- package/skills/paypal-integration/SKILL.md +479 -0
- package/skills/pci-compliance/SKILL.md +478 -0
- package/skills/performance-engineer/SKILL.md +180 -0
- package/skills/performance-testing-review-ai-review/SKILL.md +450 -0
- package/skills/performance-testing-review-multi-agent-review/SKILL.md +216 -0
- package/skills/php-pro/SKILL.md +63 -0
- package/skills/posix-shell-pro/SKILL.md +304 -0
- package/skills/postgresql/SKILL.md +230 -0
- package/skills/postmortem-writing/SKILL.md +386 -0
- package/skills/projection-patterns/SKILL.md +33 -0
- package/skills/projection-patterns/resources/implementation-playbook.md +501 -0
- package/skills/prometheus-configuration/SKILL.md +404 -0
- package/skills/prompt-engineer/SKILL.md +272 -0
- package/skills/prompt-engineering-patterns/SKILL.md +213 -0
- package/skills/prompt-engineering-patterns/assets/few-shot-examples.json +106 -0
- package/skills/prompt-engineering-patterns/assets/prompt-template-library.md +246 -0
- package/skills/prompt-engineering-patterns/references/chain-of-thought.md +399 -0
- package/skills/prompt-engineering-patterns/references/few-shot-learning.md +369 -0
- package/skills/prompt-engineering-patterns/references/prompt-optimization.md +414 -0
- package/skills/prompt-engineering-patterns/references/prompt-templates.md +470 -0
- package/skills/prompt-engineering-patterns/references/system-prompts.md +189 -0
- package/skills/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
- package/skills/protocol-reverse-engineering/SKILL.md +29 -0
- package/skills/protocol-reverse-engineering/resources/implementation-playbook.md +509 -0
- package/skills/python-development-python-scaffold/SKILL.md +331 -0
- package/skills/python-packaging/SKILL.md +36 -0
- package/skills/python-packaging/resources/implementation-playbook.md +869 -0
- package/skills/python-performance-optimization/SKILL.md +36 -0
- package/skills/python-performance-optimization/resources/implementation-playbook.md +868 -0
- package/skills/python-pro/SKILL.md +158 -0
- package/skills/python-testing-patterns/SKILL.md +37 -0
- package/skills/python-testing-patterns/resources/implementation-playbook.md +906 -0
- package/skills/quant-analyst/SKILL.md +53 -0
- package/skills/rag-implementation/SKILL.md +421 -0
- package/skills/react-modernization/SKILL.md +34 -0
- package/skills/react-modernization/resources/implementation-playbook.md +512 -0
- package/skills/react-native-architecture/SKILL.md +33 -0
- package/skills/react-native-architecture/resources/implementation-playbook.md +670 -0
- package/skills/react-state-management/SKILL.md +441 -0
- package/skills/reference-builder/SKILL.md +188 -0
- package/skills/reverse-engineer/SKILL.md +173 -0
- package/skills/risk-manager/SKILL.md +61 -0
- package/skills/risk-metrics-calculation/SKILL.md +33 -0
- package/skills/risk-metrics-calculation/resources/implementation-playbook.md +554 -0
- package/skills/ruby-pro/SKILL.md +56 -0
- package/skills/rust-async-patterns/SKILL.md +33 -0
- package/skills/rust-async-patterns/resources/implementation-playbook.md +516 -0
- package/skills/rust-pro/SKILL.md +178 -0
- package/skills/saga-orchestration/SKILL.md +496 -0
- package/skills/sales-automator/SKILL.md +55 -0
- package/skills/sast-configuration/SKILL.md +212 -0
- package/skills/scala-pro/SKILL.md +82 -0
- package/skills/screen-reader-testing/SKILL.md +33 -0
- package/skills/screen-reader-testing/resources/implementation-playbook.md +544 -0
- package/skills/search-specialist/SKILL.md +80 -0
- package/skills/secrets-management/SKILL.md +364 -0
- package/skills/security-auditor/SKILL.md +169 -0
- package/skills/security-compliance-compliance-check/SKILL.md +55 -0
- package/skills/security-compliance-compliance-check/resources/implementation-playbook.md +963 -0
- package/skills/security-requirement-extraction/SKILL.md +33 -0
- package/skills/security-requirement-extraction/resources/implementation-playbook.md +676 -0
- package/skills/security-scanning-security-dependencies/SKILL.md +43 -0
- package/skills/security-scanning-security-dependencies/resources/implementation-playbook.md +544 -0
- package/skills/security-scanning-security-hardening/SKILL.md +147 -0
- package/skills/security-scanning-security-sast/SKILL.md +495 -0
- package/skills/seo-authority-builder/SKILL.md +136 -0
- package/skills/seo-cannibalization-detector/SKILL.md +123 -0
- package/skills/seo-content-auditor/SKILL.md +83 -0
- package/skills/seo-content-planner/SKILL.md +108 -0
- package/skills/seo-content-refresher/SKILL.md +118 -0
- package/skills/seo-content-writer/SKILL.md +96 -0
- package/skills/seo-keyword-strategist/SKILL.md +95 -0
- package/skills/seo-meta-optimizer/SKILL.md +92 -0
- package/skills/seo-snippet-hunter/SKILL.md +114 -0
- package/skills/seo-structure-architect/SKILL.md +108 -0
- package/skills/service-mesh-expert/SKILL.md +58 -0
- package/skills/service-mesh-observability/SKILL.md +395 -0
- package/skills/shellcheck-configuration/SKILL.md +466 -0
- package/skills/similarity-search-patterns/SKILL.md +33 -0
- package/skills/similarity-search-patterns/resources/implementation-playbook.md +557 -0
- package/skills/slo-implementation/SKILL.md +341 -0
- package/skills/solidity-security/SKILL.md +34 -0
- package/skills/solidity-security/resources/implementation-playbook.md +524 -0
- package/skills/spark-optimization/SKILL.md +427 -0
- package/skills/sql-optimization-patterns/SKILL.md +35 -0
- package/skills/sql-optimization-patterns/resources/implementation-playbook.md +504 -0
- package/skills/sql-pro/SKILL.md +173 -0
- package/skills/startup-analyst/SKILL.md +328 -0
- package/skills/startup-business-analyst-business-case/SKILL.md +487 -0
- package/skills/startup-business-analyst-financial-projections/SKILL.md +353 -0
- package/skills/startup-business-analyst-market-opportunity/SKILL.md +240 -0
- package/skills/startup-financial-modeling/SKILL.md +467 -0
- package/skills/startup-metrics-framework/SKILL.md +34 -0
- package/skills/startup-metrics-framework/resources/implementation-playbook.md +500 -0
- package/skills/stride-analysis-patterns/SKILL.md +33 -0
- package/skills/stride-analysis-patterns/resources/implementation-playbook.md +655 -0
- package/skills/stripe-integration/SKILL.md +454 -0
- package/skills/systems-programming-rust-project/SKILL.md +440 -0
- package/skills/tailwind-design-system/SKILL.md +33 -0
- package/skills/tailwind-design-system/resources/implementation-playbook.md +665 -0
- package/skills/tdd-orchestrator/SKILL.md +205 -0
- package/skills/tdd-workflows-tdd-cycle/SKILL.md +221 -0
- package/skills/tdd-workflows-tdd-green/SKILL.md +73 -0
- package/skills/tdd-workflows-tdd-green/resources/implementation-playbook.md +870 -0
- package/skills/tdd-workflows-tdd-red/SKILL.md +164 -0
- package/skills/tdd-workflows-tdd-refactor/SKILL.md +187 -0
- package/skills/team-collaboration-issue/SKILL.md +37 -0
- package/skills/team-collaboration-issue/resources/implementation-playbook.md +640 -0
- package/skills/team-collaboration-standup-notes/SKILL.md +44 -0
- package/skills/team-collaboration-standup-notes/resources/implementation-playbook.md +768 -0
- package/skills/team-composition-analysis/SKILL.md +413 -0
- package/skills/temporal-python-pro/SKILL.md +370 -0
- package/skills/temporal-python-testing/SKILL.md +170 -0
- package/skills/temporal-python-testing/resources/integration-testing.md +455 -0
- package/skills/temporal-python-testing/resources/local-setup.md +553 -0
- package/skills/temporal-python-testing/resources/replay-testing.md +462 -0
- package/skills/temporal-python-testing/resources/unit-testing.md +328 -0
- package/skills/terraform-module-library/SKILL.md +261 -0
- package/skills/terraform-module-library/references/aws-modules.md +63 -0
- package/skills/terraform-specialist/SKILL.md +166 -0
- package/skills/test-automator/SKILL.md +224 -0
- package/skills/threat-mitigation-mapping/SKILL.md +33 -0
- package/skills/threat-mitigation-mapping/resources/implementation-playbook.md +744 -0
- package/skills/threat-modeling-expert/SKILL.md +60 -0
- package/skills/track-management/SKILL.md +38 -0
- package/skills/track-management/resources/implementation-playbook.md +591 -0
- package/skills/turborepo-caching/SKILL.md +419 -0
- package/skills/tutorial-engineer/SKILL.md +139 -0
- package/skills/typescript-advanced-types/SKILL.md +35 -0
- package/skills/typescript-advanced-types/resources/implementation-playbook.md +716 -0
- package/skills/typescript-pro/SKILL.md +55 -0
- package/skills/ui-minimal/SKILL.md +23 -0
- package/skills/ui-ux-designer/SKILL.md +209 -0
- package/skills/ui-visual-validator/SKILL.md +214 -0
- package/skills/unit-testing-test-generate/SKILL.md +319 -0
- package/skills/unity-developer/SKILL.md +230 -0
- package/skills/unity-ecs-patterns/SKILL.md +33 -0
- package/skills/unity-ecs-patterns/resources/implementation-playbook.md +625 -0
- package/skills/uv-package-manager/SKILL.md +37 -0
- package/skills/uv-package-manager/resources/implementation-playbook.md +830 -0
- package/skills/vector-database-engineer/SKILL.md +60 -0
- package/skills/vector-index-tuning/SKILL.md +42 -0
- package/skills/vector-index-tuning/resources/implementation-playbook.md +507 -0
- package/skills/wcag-audit-patterns/SKILL.md +41 -0
- package/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
- package/skills/web3-testing/SKILL.md +427 -0
- package/skills/workflow-orchestration-patterns/SKILL.md +333 -0
- package/skills/workflow-patterns/SKILL.md +38 -0
- package/skills/workflow-patterns/resources/implementation-playbook.md +621 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import path from 'path';
|
|
6
|
+
const program = new Command();
|
|
7
|
+
program
|
|
8
|
+
.name('vibe')
|
|
9
|
+
.description('Vibe Kit CLI - Manage your AI agent vibes')
|
|
10
|
+
.version('1.0.0');
|
|
11
|
+
program
|
|
12
|
+
.command('list')
|
|
13
|
+
.description('List all available vibes')
|
|
14
|
+
.action(async () => {
|
|
15
|
+
const catalogPath = path.join(process.cwd(), 'catalog.json');
|
|
16
|
+
if (!fs.existsSync(catalogPath)) {
|
|
17
|
+
console.error(chalk.red('❌ Catalog not found. Run npm run build:catalog first.'));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const catalog = await fs.readJSON(catalogPath);
|
|
21
|
+
console.log(chalk.bold('\nAvailable Vibes:'));
|
|
22
|
+
catalog.skills.forEach((skill) => {
|
|
23
|
+
console.log(`${chalk.green('•')} ${chalk.bold(skill.name)} - ${skill.description}`);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
program.parse();
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const yaml = require('yaml');
|
|
5
|
+
function stripQuotes(value) {
|
|
6
|
+
if (typeof value !== 'string')
|
|
7
|
+
return value;
|
|
8
|
+
if (value.length < 2)
|
|
9
|
+
return value.trim();
|
|
10
|
+
const first = value[0];
|
|
11
|
+
const last = value[value.length - 1];
|
|
12
|
+
if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
|
|
13
|
+
return value.slice(1, -1).trim();
|
|
14
|
+
}
|
|
15
|
+
if (first === '"' || first === "'") {
|
|
16
|
+
return value.slice(1).trim();
|
|
17
|
+
}
|
|
18
|
+
if (last === '"' || last === "'") {
|
|
19
|
+
return value.slice(0, -1).trim();
|
|
20
|
+
}
|
|
21
|
+
return value.trim();
|
|
22
|
+
}
|
|
23
|
+
function parseInlineList(raw) {
|
|
24
|
+
if (typeof raw !== 'string')
|
|
25
|
+
return [];
|
|
26
|
+
const value = raw.trim();
|
|
27
|
+
if (!value.startsWith('[') || !value.endsWith(']'))
|
|
28
|
+
return [];
|
|
29
|
+
const inner = value.slice(1, -1).trim();
|
|
30
|
+
if (!inner)
|
|
31
|
+
return [];
|
|
32
|
+
return inner
|
|
33
|
+
.split(',')
|
|
34
|
+
.map(item => stripQuotes(item.trim()))
|
|
35
|
+
.filter(Boolean);
|
|
36
|
+
}
|
|
37
|
+
function isPlainObject(value) {
|
|
38
|
+
return value && typeof value === 'object' && !Array.isArray(value);
|
|
39
|
+
}
|
|
40
|
+
function parseFrontmatter(content) {
|
|
41
|
+
const sanitized = content.replace(/^\uFEFF/, '');
|
|
42
|
+
const lines = sanitized.split(/\r?\n/);
|
|
43
|
+
if (!lines.length || lines[0].trim() !== '---') {
|
|
44
|
+
return { data: {}, body: content, errors: [], hasFrontmatter: false };
|
|
45
|
+
}
|
|
46
|
+
let endIndex = -1;
|
|
47
|
+
for (let i = 1; i < lines.length; i += 1) {
|
|
48
|
+
if (lines[i].trim() === '---') {
|
|
49
|
+
endIndex = i;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (endIndex === -1) {
|
|
54
|
+
return {
|
|
55
|
+
data: {},
|
|
56
|
+
body: content,
|
|
57
|
+
errors: ['Missing closing frontmatter delimiter (---).'],
|
|
58
|
+
hasFrontmatter: true,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const errors = [];
|
|
62
|
+
const fmText = lines.slice(1, endIndex).join('\n');
|
|
63
|
+
let data = {};
|
|
64
|
+
try {
|
|
65
|
+
const doc = yaml.parseDocument(fmText, { prettyErrors: false });
|
|
66
|
+
if (doc.errors && doc.errors.length) {
|
|
67
|
+
errors.push(...doc.errors.map(error => error.message));
|
|
68
|
+
}
|
|
69
|
+
data = doc.toJS();
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
errors.push(err.message);
|
|
73
|
+
data = {};
|
|
74
|
+
}
|
|
75
|
+
if (!isPlainObject(data)) {
|
|
76
|
+
errors.push('Frontmatter must be a YAML mapping/object.');
|
|
77
|
+
data = {};
|
|
78
|
+
}
|
|
79
|
+
const body = lines.slice(endIndex + 1).join('\n');
|
|
80
|
+
return { data, body, errors, hasFrontmatter: true };
|
|
81
|
+
}
|
|
82
|
+
function tokenize(value) {
|
|
83
|
+
if (!value)
|
|
84
|
+
return [];
|
|
85
|
+
return value
|
|
86
|
+
.toLowerCase()
|
|
87
|
+
.replace(/[^a-z0-9]+/g, ' ')
|
|
88
|
+
.split(' ')
|
|
89
|
+
.map(token => token.trim())
|
|
90
|
+
.filter(Boolean);
|
|
91
|
+
}
|
|
92
|
+
function unique(list) {
|
|
93
|
+
const seen = new Set();
|
|
94
|
+
const result = [];
|
|
95
|
+
for (const item of list) {
|
|
96
|
+
if (!item || seen.has(item))
|
|
97
|
+
continue;
|
|
98
|
+
seen.add(item);
|
|
99
|
+
result.push(item);
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
function readSkill(skillDir, skillId) {
|
|
104
|
+
const skillPath = path.join(skillDir, skillId, 'SKILL.md');
|
|
105
|
+
const content = fs.readFileSync(skillPath, 'utf8');
|
|
106
|
+
const { data } = parseFrontmatter(content);
|
|
107
|
+
const name = typeof data.name === 'string' && data.name.trim()
|
|
108
|
+
? data.name.trim()
|
|
109
|
+
: skillId;
|
|
110
|
+
const description = typeof data.description === 'string'
|
|
111
|
+
? data.description.trim()
|
|
112
|
+
: '';
|
|
113
|
+
let tags = [];
|
|
114
|
+
if (Array.isArray(data.tags)) {
|
|
115
|
+
tags = data.tags.map(tag => String(tag).trim());
|
|
116
|
+
}
|
|
117
|
+
else if (typeof data.tags === 'string' && data.tags.trim()) {
|
|
118
|
+
const parts = data.tags.includes(',')
|
|
119
|
+
? data.tags.split(',')
|
|
120
|
+
: data.tags.split(/\s+/);
|
|
121
|
+
tags = parts.map(tag => tag.trim());
|
|
122
|
+
}
|
|
123
|
+
else if (isPlainObject(data.metadata) && data.metadata.tags) {
|
|
124
|
+
const rawTags = data.metadata.tags;
|
|
125
|
+
if (Array.isArray(rawTags)) {
|
|
126
|
+
tags = rawTags.map(tag => String(tag).trim());
|
|
127
|
+
}
|
|
128
|
+
else if (typeof rawTags === 'string' && rawTags.trim()) {
|
|
129
|
+
const parts = rawTags.includes(',')
|
|
130
|
+
? rawTags.split(',')
|
|
131
|
+
: rawTags.split(/\s+/);
|
|
132
|
+
tags = parts.map(tag => tag.trim());
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
tags = tags.filter(Boolean);
|
|
136
|
+
return {
|
|
137
|
+
id: skillId,
|
|
138
|
+
name,
|
|
139
|
+
description,
|
|
140
|
+
tags,
|
|
141
|
+
path: skillPath,
|
|
142
|
+
content,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function listSkillIds(skillsDir) {
|
|
146
|
+
return fs.readdirSync(skillsDir)
|
|
147
|
+
.filter(entry => !entry.startsWith('.') && fs.statSync(path.join(skillsDir, entry)).isDirectory())
|
|
148
|
+
.sort();
|
|
149
|
+
}
|
|
150
|
+
module.exports = {
|
|
151
|
+
listSkillIds,
|
|
152
|
+
parseFrontmatter,
|
|
153
|
+
parseInlineList,
|
|
154
|
+
readSkill,
|
|
155
|
+
stripQuotes,
|
|
156
|
+
tokenize,
|
|
157
|
+
unique,
|
|
158
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
async function run() {
|
|
5
|
+
const skillsDir = path.resolve(process.cwd(), 'skills');
|
|
6
|
+
const items = await fs.readdir(skillsDir);
|
|
7
|
+
const skills = [];
|
|
8
|
+
for (const item of items) {
|
|
9
|
+
const skillPath = path.join(skillsDir, item);
|
|
10
|
+
if (!(await fs.stat(skillPath)).isDirectory())
|
|
11
|
+
continue;
|
|
12
|
+
const skillMdPath = path.join(skillPath, 'SKILL.md');
|
|
13
|
+
if (!fs.existsSync(skillMdPath))
|
|
14
|
+
continue;
|
|
15
|
+
const content = await fs.readFile(skillMdPath, 'utf-8');
|
|
16
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
17
|
+
if (frontmatterMatch) {
|
|
18
|
+
const yamlLines = frontmatterMatch[1].split('\n');
|
|
19
|
+
const frontmatter = {};
|
|
20
|
+
for (const line of yamlLines) {
|
|
21
|
+
const [key, ...valueParts] = line.split(':');
|
|
22
|
+
if (key && valueParts.length > 0) {
|
|
23
|
+
frontmatter[key.trim()] = valueParts.join(':').trim();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
skills.push({
|
|
27
|
+
name: frontmatter.name || item,
|
|
28
|
+
description: frontmatter.description || '',
|
|
29
|
+
path: `skills/${item}`,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const catalog = {
|
|
34
|
+
lastUpdated: new Date().toISOString(),
|
|
35
|
+
skills,
|
|
36
|
+
};
|
|
37
|
+
await fs.writeJSON(path.join(process.cwd(), 'catalog.json'), catalog, { spaces: 2 });
|
|
38
|
+
console.log(chalk.blue(`📂 catalog.json built with ${skills.length} skills.`));
|
|
39
|
+
// Generate CATALOG.md
|
|
40
|
+
let markdown = `# Vibe Kit Catalog\n\n`;
|
|
41
|
+
markdown += `Explore our curated collection of ${skills.length} vibes. Last updated: ${new Date().toLocaleDateString()}\n\n`;
|
|
42
|
+
markdown += `| Name | Description | Path |\n`;
|
|
43
|
+
markdown += `|------|-------------|------|\n`;
|
|
44
|
+
for (const skill of skills) {
|
|
45
|
+
markdown += `| **${skill.name}** | ${skill.description} | [View](./${skill.path}) |\n`;
|
|
46
|
+
}
|
|
47
|
+
await fs.writeFile(path.join(process.cwd(), 'CATALOG.md'), markdown);
|
|
48
|
+
console.log(chalk.magenta(`📝 CATALOG.md generated.`));
|
|
49
|
+
}
|
|
50
|
+
run();
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const yaml = require('yaml');
|
|
5
|
+
const { listSkillIds, parseFrontmatter } = require('../lib/skill-utils');
|
|
6
|
+
const ROOT = path.resolve(__dirname, '..');
|
|
7
|
+
const SKILLS_DIR = path.join(ROOT, 'skills');
|
|
8
|
+
const ALLOWED_FIELDS = new Set([
|
|
9
|
+
'name',
|
|
10
|
+
'description',
|
|
11
|
+
'license',
|
|
12
|
+
'compatibility',
|
|
13
|
+
'metadata',
|
|
14
|
+
'allowed-tools',
|
|
15
|
+
]);
|
|
16
|
+
function isPlainObject(value) {
|
|
17
|
+
return value && typeof value === 'object' && !Array.isArray(value);
|
|
18
|
+
}
|
|
19
|
+
function coerceToString(value) {
|
|
20
|
+
if (value === null || value === undefined)
|
|
21
|
+
return '';
|
|
22
|
+
if (typeof value === 'string')
|
|
23
|
+
return value.trim();
|
|
24
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
25
|
+
return String(value);
|
|
26
|
+
if (Array.isArray(value)) {
|
|
27
|
+
const simple = value.every(item => ['string', 'number', 'boolean'].includes(typeof item));
|
|
28
|
+
return simple ? value.map(item => String(item).trim()).filter(Boolean).join(', ') : JSON.stringify(value);
|
|
29
|
+
}
|
|
30
|
+
if (isPlainObject(value)) {
|
|
31
|
+
return JSON.stringify(value);
|
|
32
|
+
}
|
|
33
|
+
return String(value).trim();
|
|
34
|
+
}
|
|
35
|
+
function appendMetadata(metadata, key, value) {
|
|
36
|
+
const nextValue = coerceToString(value);
|
|
37
|
+
if (!nextValue)
|
|
38
|
+
return;
|
|
39
|
+
if (!metadata[key]) {
|
|
40
|
+
metadata[key] = nextValue;
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (metadata[key].includes(nextValue))
|
|
44
|
+
return;
|
|
45
|
+
metadata[key] = `${metadata[key]}, ${nextValue}`;
|
|
46
|
+
}
|
|
47
|
+
function collectAllowedTools(value, toolSet) {
|
|
48
|
+
if (!value)
|
|
49
|
+
return;
|
|
50
|
+
if (typeof value === 'string') {
|
|
51
|
+
value
|
|
52
|
+
.split(/[\s,]+/)
|
|
53
|
+
.map(token => token.trim())
|
|
54
|
+
.filter(Boolean)
|
|
55
|
+
.forEach(token => toolSet.add(token));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (Array.isArray(value)) {
|
|
59
|
+
value
|
|
60
|
+
.map(token => String(token).trim())
|
|
61
|
+
.filter(Boolean)
|
|
62
|
+
.forEach(token => toolSet.add(token));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function normalizeSkill(skillId) {
|
|
66
|
+
const skillPath = path.join(SKILLS_DIR, skillId, 'SKILL.md');
|
|
67
|
+
const content = fs.readFileSync(skillPath, 'utf8');
|
|
68
|
+
const { data, body, hasFrontmatter } = parseFrontmatter(content);
|
|
69
|
+
if (!hasFrontmatter)
|
|
70
|
+
return false;
|
|
71
|
+
let modified = false;
|
|
72
|
+
const updated = { ...data };
|
|
73
|
+
const metadata = isPlainObject(updated.metadata) ? { ...updated.metadata } : {};
|
|
74
|
+
if (updated.metadata !== undefined && !isPlainObject(updated.metadata)) {
|
|
75
|
+
appendMetadata(metadata, 'legacy_metadata', updated.metadata);
|
|
76
|
+
modified = true;
|
|
77
|
+
}
|
|
78
|
+
const allowedTools = new Set();
|
|
79
|
+
collectAllowedTools(updated['allowed-tools'], allowedTools);
|
|
80
|
+
collectAllowedTools(updated.tools, allowedTools);
|
|
81
|
+
collectAllowedTools(updated.tool_access, allowedTools);
|
|
82
|
+
if (updated.tools !== undefined) {
|
|
83
|
+
delete updated.tools;
|
|
84
|
+
modified = true;
|
|
85
|
+
}
|
|
86
|
+
if (updated.tool_access !== undefined) {
|
|
87
|
+
delete updated.tool_access;
|
|
88
|
+
modified = true;
|
|
89
|
+
}
|
|
90
|
+
for (const key of Object.keys(updated)) {
|
|
91
|
+
if (ALLOWED_FIELDS.has(key))
|
|
92
|
+
continue;
|
|
93
|
+
if (key === 'tags') {
|
|
94
|
+
appendMetadata(metadata, 'tags', updated[key]);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
appendMetadata(metadata, key, updated[key]);
|
|
98
|
+
}
|
|
99
|
+
delete updated[key];
|
|
100
|
+
modified = true;
|
|
101
|
+
}
|
|
102
|
+
if (allowedTools.size) {
|
|
103
|
+
updated['allowed-tools'] = Array.from(allowedTools).join(' ');
|
|
104
|
+
modified = true;
|
|
105
|
+
}
|
|
106
|
+
else if (updated['allowed-tools'] !== undefined) {
|
|
107
|
+
delete updated['allowed-tools'];
|
|
108
|
+
modified = true;
|
|
109
|
+
}
|
|
110
|
+
if (Object.keys(metadata).length) {
|
|
111
|
+
updated.metadata = metadata;
|
|
112
|
+
modified = true;
|
|
113
|
+
}
|
|
114
|
+
else if (updated.metadata !== undefined) {
|
|
115
|
+
delete updated.metadata;
|
|
116
|
+
modified = true;
|
|
117
|
+
}
|
|
118
|
+
if (!modified)
|
|
119
|
+
return false;
|
|
120
|
+
const ordered = {};
|
|
121
|
+
for (const key of ['name', 'description', 'license', 'compatibility', 'allowed-tools', 'metadata']) {
|
|
122
|
+
if (updated[key] !== undefined) {
|
|
123
|
+
ordered[key] = updated[key];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const fm = yaml.stringify(ordered).trimEnd();
|
|
127
|
+
const bodyPrefix = body.length && (body.startsWith('\n') || body.startsWith('\r\n')) ? '' : '\n';
|
|
128
|
+
const next = `---\n${fm}\n---${bodyPrefix}${body}`;
|
|
129
|
+
fs.writeFileSync(skillPath, next);
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
function run() {
|
|
133
|
+
const skillIds = listSkillIds(SKILLS_DIR);
|
|
134
|
+
let updatedCount = 0;
|
|
135
|
+
for (const skillId of skillIds) {
|
|
136
|
+
if (normalizeSkill(skillId))
|
|
137
|
+
updatedCount += 1;
|
|
138
|
+
}
|
|
139
|
+
console.log(`Normalized frontmatter for ${updatedCount} skills.`);
|
|
140
|
+
}
|
|
141
|
+
if (require.main === module) {
|
|
142
|
+
run();
|
|
143
|
+
}
|
|
144
|
+
module.exports = { run };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { SkillFrontmatterSchema } from '../src/types/index.js';
|
|
5
|
+
async function validateSkill(skillPath) {
|
|
6
|
+
const skillMdPath = path.join(skillPath, 'SKILL.md');
|
|
7
|
+
if (!fs.existsSync(skillMdPath)) {
|
|
8
|
+
console.error(chalk.red(`❌ Missing SKILL.md in ${skillPath}`));
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const content = await fs.readFile(skillMdPath, 'utf-8');
|
|
13
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
14
|
+
if (!frontmatterMatch) {
|
|
15
|
+
console.error(chalk.red(`❌ No frontmatter found in ${skillMdPath}`));
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
const yamlLines = frontmatterMatch[1].split('\n');
|
|
19
|
+
const frontmatter = {};
|
|
20
|
+
for (const line of yamlLines) {
|
|
21
|
+
const [key, ...valueParts] = line.split(':');
|
|
22
|
+
if (key && valueParts.length > 0) {
|
|
23
|
+
frontmatter[key.trim()] = valueParts.join(':').trim();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const result = SkillFrontmatterSchema.safeParse(frontmatter);
|
|
27
|
+
if (!result.success) {
|
|
28
|
+
console.error(chalk.red(`❌ Validation failed for ${skillMdPath}:`));
|
|
29
|
+
console.error(result.error.issues);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
console.log(chalk.green(`✅ ${frontmatter.name} validated.`));
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
console.error(chalk.red(`❌ Error reading ${skillMdPath}:`), err);
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function run() {
|
|
41
|
+
const skillsDir = path.resolve(process.cwd(), 'skills');
|
|
42
|
+
const items = await fs.readdir(skillsDir);
|
|
43
|
+
let allValid = true;
|
|
44
|
+
for (const item of items) {
|
|
45
|
+
const fullPath = path.join(skillsDir, item);
|
|
46
|
+
if ((await fs.stat(fullPath)).isDirectory()) {
|
|
47
|
+
const isValid = await validateSkill(fullPath);
|
|
48
|
+
if (!isValid)
|
|
49
|
+
allValid = false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (!allValid) {
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
run();
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
const KIT_ROOT = path.resolve(__dirname, '../../../');
|
|
11
|
+
const ALIASES_PATH = path.join(KIT_ROOT, 'aliases.json');
|
|
12
|
+
const BUNDLES_PATH = path.join(KIT_ROOT, 'bundles.json');
|
|
13
|
+
const program = new Command();
|
|
14
|
+
program
|
|
15
|
+
.name('vibe')
|
|
16
|
+
.description('Vibe Kit CLI - Manage your AI agent vibes')
|
|
17
|
+
.version('1.0.0');
|
|
18
|
+
program
|
|
19
|
+
.command('list')
|
|
20
|
+
.description('List all available vibes')
|
|
21
|
+
.action(async () => {
|
|
22
|
+
const catalogPath = path.join(KIT_ROOT, 'catalog.json');
|
|
23
|
+
if (!fs.existsSync(catalogPath)) {
|
|
24
|
+
console.error(chalk.red(`❌ Catalog not found at ${catalogPath}. Run npm run build:catalog in kit root.`));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const catalog = await fs.readJSON(catalogPath);
|
|
28
|
+
console.log(chalk.bold('\nAvailable Vibes:'));
|
|
29
|
+
catalog.skills.forEach((skill) => {
|
|
30
|
+
console.log(`${chalk.green('•')} ${chalk.bold(skill.name)} - ${skill.description}`);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
program
|
|
34
|
+
.command('bundles')
|
|
35
|
+
.description('List available skill bundles')
|
|
36
|
+
.action(async () => {
|
|
37
|
+
if (!fs.existsSync(BUNDLES_PATH)) {
|
|
38
|
+
console.error(chalk.red('❌ bundles.json not found.'));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const data = await fs.readJSON(BUNDLES_PATH);
|
|
42
|
+
console.log(chalk.bold('\nAvailable Bundles:'));
|
|
43
|
+
Object.entries(data.bundles).forEach(([name, bundle]) => {
|
|
44
|
+
console.log(`${chalk.cyan('•')} ${chalk.bold(name)}: ${bundle.description}`);
|
|
45
|
+
console.log(` ${chalk.dim('Skills: ' + bundle.skills.slice(0, 5).join(', ') + (bundle.skills.length > 5 ? '...' : ''))}`);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
program
|
|
49
|
+
.command('aliases')
|
|
50
|
+
.description('List skill aliases')
|
|
51
|
+
.action(async () => {
|
|
52
|
+
if (!fs.existsSync(ALIASES_PATH)) {
|
|
53
|
+
console.error(chalk.red('❌ aliases.json not found.'));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const aliases = await fs.readJSON(ALIASES_PATH);
|
|
57
|
+
console.log(chalk.bold('\nSkill Aliases:'));
|
|
58
|
+
Object.entries(aliases).forEach(([alias, skill]) => {
|
|
59
|
+
console.log(`${chalk.yellow('•')} ${chalk.bold(alias)} ${chalk.dim('→')} ${skill}`);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
program
|
|
63
|
+
.command('search <query>')
|
|
64
|
+
.description('Search for vibes in the catalog')
|
|
65
|
+
.action(async (query) => {
|
|
66
|
+
const catalogPath = path.join(KIT_ROOT, 'catalog.json');
|
|
67
|
+
if (!fs.existsSync(catalogPath)) {
|
|
68
|
+
console.error(chalk.red(`❌ Catalog not found at ${catalogPath}. Run npm run build:catalog in kit root.`));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const catalog = await fs.readJSON(catalogPath);
|
|
72
|
+
const results = catalog.skills.filter(skill => skill.name.toLowerCase().includes(query.toLowerCase()) ||
|
|
73
|
+
skill.description.toLowerCase().includes(query.toLowerCase()));
|
|
74
|
+
if (results.length === 0) {
|
|
75
|
+
console.log(chalk.yellow(`\nNo vibes found matching "${query}"`));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
console.log(chalk.bold(`\nSearch Results for "${query}":`));
|
|
79
|
+
results.forEach((skill) => {
|
|
80
|
+
console.log(`${chalk.green('•')} ${chalk.bold(skill.name)} - ${skill.description}`);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
program
|
|
84
|
+
.command('install <name>')
|
|
85
|
+
.description('Install a vibe or bundle to the current workspace')
|
|
86
|
+
.option('-b, --bundle', 'Install a bundle of skills')
|
|
87
|
+
.option('-g, --global', 'Install globally (not implemented)')
|
|
88
|
+
.action(async (name, options) => {
|
|
89
|
+
const catalogPath = path.join(KIT_ROOT, 'catalog.json');
|
|
90
|
+
if (!fs.existsSync(catalogPath)) {
|
|
91
|
+
console.error(chalk.red(`❌ Catalog not found at ${catalogPath}. Run npm run build:catalog in kit root.`));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const catalog = await fs.readJSON(catalogPath);
|
|
95
|
+
if (options.bundle) {
|
|
96
|
+
if (!fs.existsSync(BUNDLES_PATH)) {
|
|
97
|
+
console.error(chalk.red('❌ bundles.json not found.'));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const bundleData = await fs.readJSON(BUNDLES_PATH);
|
|
101
|
+
const bundle = bundleData.bundles[name];
|
|
102
|
+
if (!bundle) {
|
|
103
|
+
console.error(chalk.red(`❌ Bundle "${name}" not found.`));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const spinner = ora(`Installing bundle: ${name}...`).start();
|
|
107
|
+
let count = 0;
|
|
108
|
+
for (const skillName of bundle.skills) {
|
|
109
|
+
const skill = catalog.skills.find(s => s.name === skillName);
|
|
110
|
+
if (skill) {
|
|
111
|
+
const destDir = path.join(process.cwd(), '.agent', 'skills', skillName);
|
|
112
|
+
const srcDir = path.join(KIT_ROOT, skill.path);
|
|
113
|
+
await fs.ensureDir(destDir);
|
|
114
|
+
await fs.copy(srcDir, destDir);
|
|
115
|
+
count++;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
spinner.succeed(chalk.green(`Bundle "${name}" installed! (${count} skills)`));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
// Single skill install (with alias support)
|
|
122
|
+
let skillName = name;
|
|
123
|
+
if (fs.existsSync(ALIASES_PATH)) {
|
|
124
|
+
const aliases = await fs.readJSON(ALIASES_PATH);
|
|
125
|
+
if (aliases[name]) {
|
|
126
|
+
skillName = aliases[name];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const skill = catalog.skills.find(s => s.name === skillName);
|
|
130
|
+
if (!skill) {
|
|
131
|
+
console.error(chalk.red(`❌ Vibe "${skillName}" not found in catalog.`));
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const spinner = ora(`Installing vibe: ${skillName}...`).start();
|
|
135
|
+
try {
|
|
136
|
+
const destDir = path.join(process.cwd(), '.agent', 'skills', skillName);
|
|
137
|
+
const srcDir = path.join(KIT_ROOT, skill.path);
|
|
138
|
+
await fs.ensureDir(destDir);
|
|
139
|
+
await fs.copy(srcDir, destDir);
|
|
140
|
+
spinner.succeed(chalk.green(`Vibe "${skillName}" installed to .agent/skills/${skillName}`));
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
spinner.fail(chalk.red(`Failed to install vibe: ${err.message}`));
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
program.parse();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const SkillFrontmatterSchema = z.object({
|
|
3
|
+
name: z.string().min(1, "Skill name is required"),
|
|
4
|
+
description: z.string().min(1, "Description is required"),
|
|
5
|
+
});
|
|
6
|
+
export const CatalogItemSchema = SkillFrontmatterSchema.extend({
|
|
7
|
+
path: z.string(),
|
|
8
|
+
category: z.string().optional(),
|
|
9
|
+
});
|
|
10
|
+
export const CatalogSchema = z.object({
|
|
11
|
+
lastUpdated: z.string(),
|
|
12
|
+
skills: z.array(CatalogItemSchema),
|
|
13
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ruaruababa/vibe-kit",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"vibe": "./bin/vibe.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "npx tsc && npm run build:catalog",
|
|
11
|
+
"build:catalog": "node --loader ts-node/esm scripts/build-catalog.ts",
|
|
12
|
+
"validate": "node --loader ts-node/esm scripts/validate-skills.ts",
|
|
13
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
14
|
+
"prepack": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"bin",
|
|
18
|
+
"dist",
|
|
19
|
+
"skills",
|
|
20
|
+
"catalog.json",
|
|
21
|
+
"CATALOG.md",
|
|
22
|
+
"bundles.json",
|
|
23
|
+
"aliases.json",
|
|
24
|
+
"README.md"
|
|
25
|
+
],
|
|
26
|
+
"keywords": [],
|
|
27
|
+
"author": "",
|
|
28
|
+
"license": "ISC",
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/fs-extra": "^11.0.4",
|
|
31
|
+
"@types/node": "^25.0.10",
|
|
32
|
+
"ts-node": "^10.9.2",
|
|
33
|
+
"typescript": "^5.9.3"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"chalk": "^5.6.2",
|
|
37
|
+
"commander": "^14.0.2",
|
|
38
|
+
"fs-extra": "^11.3.3",
|
|
39
|
+
"ora": "^9.1.0",
|
|
40
|
+
"yaml": "^2.8.2",
|
|
41
|
+
"zod": "^4.3.6"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: accessibility-compliance-accessibility-audit
|
|
3
|
+
description: "You are an accessibility expert specializing in WCAG compliance, inclusive design, and assistive technology compatibility. Conduct audits, identify barriers, and provide remediation guidance."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Accessibility Audit and Testing
|
|
7
|
+
|
|
8
|
+
You are an accessibility expert specializing in WCAG compliance, inclusive design, and assistive technology compatibility. Conduct comprehensive audits, identify barriers, provide remediation guidance, and ensure digital products are accessible to all users.
|
|
9
|
+
|
|
10
|
+
## Use this skill when
|
|
11
|
+
|
|
12
|
+
- Auditing web or mobile experiences for WCAG compliance
|
|
13
|
+
- Identifying accessibility barriers and remediation priorities
|
|
14
|
+
- Establishing ongoing accessibility testing practices
|
|
15
|
+
- Preparing compliance evidence for stakeholders
|
|
16
|
+
|
|
17
|
+
## Do not use this skill when
|
|
18
|
+
|
|
19
|
+
- You only need a general UI design review without accessibility scope
|
|
20
|
+
- The request is unrelated to user experience or compliance
|
|
21
|
+
- You cannot access the UI, design artifacts, or content
|
|
22
|
+
|
|
23
|
+
## Context
|
|
24
|
+
|
|
25
|
+
The user needs to audit and improve accessibility to ensure compliance with WCAG standards and provide an inclusive experience for users with disabilities. Focus on automated testing, manual verification, remediation strategies, and establishing ongoing accessibility practices.
|
|
26
|
+
|
|
27
|
+
## Requirements
|
|
28
|
+
|
|
29
|
+
$ARGUMENTS
|
|
30
|
+
|
|
31
|
+
## Instructions
|
|
32
|
+
|
|
33
|
+
- Confirm scope (platforms, WCAG level, target pages, key user journeys).
|
|
34
|
+
- Run automated scans to collect baseline violations and coverage gaps.
|
|
35
|
+
- Perform manual checks (keyboard, screen reader, focus order, contrast).
|
|
36
|
+
- Map findings to WCAG criteria, severity, and user impact.
|
|
37
|
+
- Provide remediation steps and re-test after fixes.
|
|
38
|
+
- If detailed procedures are required, open `resources/implementation-playbook.md`.
|
|
39
|
+
|
|
40
|
+
## Resources
|
|
41
|
+
|
|
42
|
+
- `resources/implementation-playbook.md` for detailed audit steps, tooling, and remediation examples.
|