javi-forge 0.1.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/.gitignore.template +105 -0
- package/.releaserc +44 -0
- package/README.md +45 -0
- package/ai-config/.skillignore +15 -0
- package/ai-config/AUTO_INVOKE.md +300 -0
- package/ai-config/agents/_TEMPLATE.md +93 -0
- package/ai-config/agents/business/api-designer.md +1657 -0
- package/ai-config/agents/business/business-analyst.md +1331 -0
- package/ai-config/agents/business/product-strategist.md +206 -0
- package/ai-config/agents/business/project-manager.md +178 -0
- package/ai-config/agents/business/requirements-analyst.md +1277 -0
- package/ai-config/agents/business/technical-writer.md +1679 -0
- package/ai-config/agents/creative/ux-designer.md +205 -0
- package/ai-config/agents/data-ai/ai-engineer.md +487 -0
- package/ai-config/agents/data-ai/analytics-engineer.md +953 -0
- package/ai-config/agents/data-ai/data-engineer.md +173 -0
- package/ai-config/agents/data-ai/data-scientist.md +672 -0
- package/ai-config/agents/data-ai/mlops-engineer.md +814 -0
- package/ai-config/agents/data-ai/prompt-engineer.md +772 -0
- package/ai-config/agents/development/angular-expert.md +620 -0
- package/ai-config/agents/development/backend-architect.md +795 -0
- package/ai-config/agents/development/database-specialist.md +212 -0
- package/ai-config/agents/development/frontend-specialist.md +686 -0
- package/ai-config/agents/development/fullstack-engineer.md +668 -0
- package/ai-config/agents/development/golang-pro.md +338 -0
- package/ai-config/agents/development/java-enterprise.md +400 -0
- package/ai-config/agents/development/javascript-pro.md +422 -0
- package/ai-config/agents/development/nextjs-pro.md +474 -0
- package/ai-config/agents/development/python-pro.md +570 -0
- package/ai-config/agents/development/react-pro.md +487 -0
- package/ai-config/agents/development/rust-pro.md +246 -0
- package/ai-config/agents/development/spring-boot-4-expert.md +326 -0
- package/ai-config/agents/development/typescript-pro.md +336 -0
- package/ai-config/agents/development/vue-specialist.md +605 -0
- package/ai-config/agents/infrastructure/cloud-architect.md +472 -0
- package/ai-config/agents/infrastructure/deployment-manager.md +358 -0
- package/ai-config/agents/infrastructure/devops-engineer.md +455 -0
- package/ai-config/agents/infrastructure/incident-responder.md +519 -0
- package/ai-config/agents/infrastructure/kubernetes-expert.md +705 -0
- package/ai-config/agents/infrastructure/monitoring-specialist.md +674 -0
- package/ai-config/agents/infrastructure/performance-engineer.md +658 -0
- package/ai-config/agents/orchestrator.md +241 -0
- package/ai-config/agents/quality/accessibility-auditor.md +1204 -0
- package/ai-config/agents/quality/code-reviewer-compact.md +123 -0
- package/ai-config/agents/quality/code-reviewer.md +363 -0
- package/ai-config/agents/quality/dependency-manager.md +743 -0
- package/ai-config/agents/quality/e2e-test-specialist.md +1005 -0
- package/ai-config/agents/quality/performance-tester.md +1086 -0
- package/ai-config/agents/quality/security-auditor.md +133 -0
- package/ai-config/agents/quality/test-engineer.md +453 -0
- package/ai-config/agents/specialists/api-designer.md +87 -0
- package/ai-config/agents/specialists/backend-architect.md +73 -0
- package/ai-config/agents/specialists/code-reviewer.md +77 -0
- package/ai-config/agents/specialists/db-optimizer.md +75 -0
- package/ai-config/agents/specialists/devops-engineer.md +83 -0
- package/ai-config/agents/specialists/documentation-writer.md +78 -0
- package/ai-config/agents/specialists/frontend-developer.md +75 -0
- package/ai-config/agents/specialists/performance-analyst.md +82 -0
- package/ai-config/agents/specialists/refactor-specialist.md +74 -0
- package/ai-config/agents/specialists/security-auditor.md +74 -0
- package/ai-config/agents/specialists/test-engineer.md +81 -0
- package/ai-config/agents/specialists/ux-consultant.md +76 -0
- package/ai-config/agents/specialized/agent-generator.md +1190 -0
- package/ai-config/agents/specialized/blockchain-developer.md +149 -0
- package/ai-config/agents/specialized/code-migrator.md +892 -0
- package/ai-config/agents/specialized/context-manager.md +978 -0
- package/ai-config/agents/specialized/documentation-writer.md +1078 -0
- package/ai-config/agents/specialized/ecommerce-expert.md +1756 -0
- package/ai-config/agents/specialized/embedded-engineer.md +1714 -0
- package/ai-config/agents/specialized/error-detective.md +1034 -0
- package/ai-config/agents/specialized/fintech-specialist.md +1659 -0
- package/ai-config/agents/specialized/freelance-project-planner-v2.md +1988 -0
- package/ai-config/agents/specialized/freelance-project-planner-v3.md +2136 -0
- package/ai-config/agents/specialized/freelance-project-planner-v4.md +4503 -0
- package/ai-config/agents/specialized/freelance-project-planner.md +722 -0
- package/ai-config/agents/specialized/game-developer.md +1963 -0
- package/ai-config/agents/specialized/healthcare-dev.md +1620 -0
- package/ai-config/agents/specialized/mobile-developer.md +188 -0
- package/ai-config/agents/specialized/parallel-plan-executor.md +506 -0
- package/ai-config/agents/specialized/plan-executor.md +485 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/00-INDEX.md +485 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/01-CORE.md +3493 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/02-SELF-CORRECTION.md +778 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/03-PROGRESSIVE-SETUP.md +918 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/04-DEPLOYMENT.md +1537 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/05-TESTING.md +2633 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/06-OPERATIONS.md +5610 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/INSTALL.md +335 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/QUICK-REFERENCE.txt +215 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/README.md +260 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/START-HERE.md +379 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/WORKFLOW-DIAGRAM.md +355 -0
- package/ai-config/agents/specialized/solo-dev-planner-modular/solo-dev-planner.md +279 -0
- package/ai-config/agents/specialized/template-writer.md +347 -0
- package/ai-config/agents/specialized/test-runner.md +99 -0
- package/ai-config/agents/specialized/vibekanban-smart-worker.md +244 -0
- package/ai-config/agents/specialized/wave-executor.md +138 -0
- package/ai-config/agents/specialized/workflow-optimizer.md +1114 -0
- package/ai-config/commands/git/changelog.md +32 -0
- package/ai-config/commands/git/ci-local.md +70 -0
- package/ai-config/commands/git/commit.md +35 -0
- package/ai-config/commands/git/fix-issue.md +23 -0
- package/ai-config/commands/git/pr-create.md +42 -0
- package/ai-config/commands/git/pr-review.md +50 -0
- package/ai-config/commands/git/worktree.md +39 -0
- package/ai-config/commands/refactoring/cleanup.md +24 -0
- package/ai-config/commands/refactoring/dead-code.md +40 -0
- package/ai-config/commands/refactoring/extract.md +31 -0
- package/ai-config/commands/testing/e2e.md +30 -0
- package/ai-config/commands/testing/tdd.md +36 -0
- package/ai-config/commands/testing/test-coverage.md +30 -0
- package/ai-config/commands/testing/test-fix.md +24 -0
- package/ai-config/commands/workflow/generate-agents-md.md +85 -0
- package/ai-config/commands/workflow/planning.md +47 -0
- package/ai-config/commands/workflows/compound.md +89 -0
- package/ai-config/commands/workflows/plan.md +77 -0
- package/ai-config/commands/workflows/review.md +78 -0
- package/ai-config/commands/workflows/work.md +75 -0
- package/ai-config/config.yaml +18 -0
- package/ai-config/hooks/_TEMPLATE.md +96 -0
- package/ai-config/hooks/block-dangerous-commands.md +75 -0
- package/ai-config/hooks/commit-guard.md +90 -0
- package/ai-config/hooks/context-loader.md +73 -0
- package/ai-config/hooks/improve-prompt.md +91 -0
- package/ai-config/hooks/learning-log.md +72 -0
- package/ai-config/hooks/model-router.md +86 -0
- package/ai-config/hooks/secret-scanner.md +64 -0
- package/ai-config/hooks/skill-validator.md +102 -0
- package/ai-config/hooks/task-artifact.md +114 -0
- package/ai-config/hooks/validate-workflow.md +100 -0
- package/ai-config/prompts/base.md +71 -0
- package/ai-config/prompts/modes/debug.md +34 -0
- package/ai-config/prompts/modes/deploy.md +40 -0
- package/ai-config/prompts/modes/research.md +32 -0
- package/ai-config/prompts/modes/review.md +33 -0
- package/ai-config/prompts/review-policy.md +79 -0
- package/ai-config/skills/_TEMPLATE.md +157 -0
- package/ai-config/skills/backend/api-gateway/SKILL.md +254 -0
- package/ai-config/skills/backend/bff-concepts/SKILL.md +239 -0
- package/ai-config/skills/backend/bff-spring/SKILL.md +364 -0
- package/ai-config/skills/backend/chi-router/SKILL.md +396 -0
- package/ai-config/skills/backend/error-handling/SKILL.md +255 -0
- package/ai-config/skills/backend/exceptions-spring/SKILL.md +323 -0
- package/ai-config/skills/backend/fastapi/SKILL.md +302 -0
- package/ai-config/skills/backend/gateway-spring/SKILL.md +390 -0
- package/ai-config/skills/backend/go-backend/SKILL.md +457 -0
- package/ai-config/skills/backend/gradle-multimodule/SKILL.md +274 -0
- package/ai-config/skills/backend/graphql-concepts/SKILL.md +352 -0
- package/ai-config/skills/backend/graphql-spring/SKILL.md +398 -0
- package/ai-config/skills/backend/grpc-concepts/SKILL.md +283 -0
- package/ai-config/skills/backend/grpc-spring/SKILL.md +445 -0
- package/ai-config/skills/backend/jwt-auth/SKILL.md +412 -0
- package/ai-config/skills/backend/notifications-concepts/SKILL.md +259 -0
- package/ai-config/skills/backend/recommendations-concepts/SKILL.md +261 -0
- package/ai-config/skills/backend/search-concepts/SKILL.md +263 -0
- package/ai-config/skills/backend/search-spring/SKILL.md +375 -0
- package/ai-config/skills/backend/spring-boot-4/SKILL.md +172 -0
- package/ai-config/skills/backend/websockets/SKILL.md +532 -0
- package/ai-config/skills/data-ai/ai-ml/SKILL.md +423 -0
- package/ai-config/skills/data-ai/analytics-concepts/SKILL.md +195 -0
- package/ai-config/skills/data-ai/analytics-spring/SKILL.md +340 -0
- package/ai-config/skills/data-ai/duckdb-analytics/SKILL.md +440 -0
- package/ai-config/skills/data-ai/langchain/SKILL.md +238 -0
- package/ai-config/skills/data-ai/mlflow/SKILL.md +302 -0
- package/ai-config/skills/data-ai/onnx-inference/SKILL.md +290 -0
- package/ai-config/skills/data-ai/powerbi/SKILL.md +352 -0
- package/ai-config/skills/data-ai/pytorch/SKILL.md +274 -0
- package/ai-config/skills/data-ai/scikit-learn/SKILL.md +321 -0
- package/ai-config/skills/data-ai/vector-db/SKILL.md +301 -0
- package/ai-config/skills/database/graph-databases/SKILL.md +218 -0
- package/ai-config/skills/database/graph-spring/SKILL.md +361 -0
- package/ai-config/skills/database/pgx-postgres/SKILL.md +512 -0
- package/ai-config/skills/database/redis-cache/SKILL.md +343 -0
- package/ai-config/skills/database/sqlite-embedded/SKILL.md +388 -0
- package/ai-config/skills/database/timescaledb/SKILL.md +320 -0
- package/ai-config/skills/docs/api-documentation/SKILL.md +293 -0
- package/ai-config/skills/docs/docs-spring/SKILL.md +377 -0
- package/ai-config/skills/docs/mustache-templates/SKILL.md +190 -0
- package/ai-config/skills/docs/technical-docs/SKILL.md +447 -0
- package/ai-config/skills/frontend/astro-ssr/SKILL.md +441 -0
- package/ai-config/skills/frontend/frontend-design/SKILL.md +54 -0
- package/ai-config/skills/frontend/frontend-web/SKILL.md +368 -0
- package/ai-config/skills/frontend/mantine-ui/SKILL.md +396 -0
- package/ai-config/skills/frontend/tanstack-query/SKILL.md +439 -0
- package/ai-config/skills/frontend/zod-validation/SKILL.md +417 -0
- package/ai-config/skills/frontend/zustand-state/SKILL.md +350 -0
- package/ai-config/skills/infrastructure/chaos-engineering/SKILL.md +244 -0
- package/ai-config/skills/infrastructure/chaos-spring/SKILL.md +378 -0
- package/ai-config/skills/infrastructure/devops-infra/SKILL.md +435 -0
- package/ai-config/skills/infrastructure/docker-containers/SKILL.md +420 -0
- package/ai-config/skills/infrastructure/kubernetes/SKILL.md +456 -0
- package/ai-config/skills/infrastructure/opentelemetry/SKILL.md +546 -0
- package/ai-config/skills/infrastructure/traefik-proxy/SKILL.md +474 -0
- package/ai-config/skills/infrastructure/woodpecker-ci/SKILL.md +315 -0
- package/ai-config/skills/mobile/ionic-capacitor/SKILL.md +504 -0
- package/ai-config/skills/mobile/mobile-ionic/SKILL.md +448 -0
- package/ai-config/skills/prompt-improver/SKILL.md +125 -0
- package/ai-config/skills/quality/ghagga-review/SKILL.md +216 -0
- package/ai-config/skills/references/hooks-patterns/SKILL.md +238 -0
- package/ai-config/skills/references/mcp-servers/SKILL.md +275 -0
- package/ai-config/skills/references/plugins-reference/SKILL.md +110 -0
- package/ai-config/skills/references/skills-reference/SKILL.md +420 -0
- package/ai-config/skills/references/subagent-templates/SKILL.md +193 -0
- package/ai-config/skills/systems-iot/modbus-protocol/SKILL.md +410 -0
- package/ai-config/skills/systems-iot/mqtt-rumqttc/SKILL.md +408 -0
- package/ai-config/skills/systems-iot/rust-systems/SKILL.md +386 -0
- package/ai-config/skills/systems-iot/tokio-async/SKILL.md +324 -0
- package/ai-config/skills/testing/playwright-e2e/SKILL.md +289 -0
- package/ai-config/skills/testing/testcontainers/SKILL.md +299 -0
- package/ai-config/skills/testing/vitest-testing/SKILL.md +381 -0
- package/ai-config/skills/workflow/ci-local-guide/SKILL.md +118 -0
- package/ai-config/skills/workflow/claude-automation-recommender/SKILL.md +299 -0
- package/ai-config/skills/workflow/claude-md-improver/SKILL.md +158 -0
- package/ai-config/skills/workflow/finishing-a-development-branch/SKILL.md +117 -0
- package/ai-config/skills/workflow/git-github/SKILL.md +334 -0
- package/ai-config/skills/workflow/git-github/references/examples.md +160 -0
- package/ai-config/skills/workflow/git-workflow/SKILL.md +214 -0
- package/ai-config/skills/workflow/ide-plugins/SKILL.md +277 -0
- package/ai-config/skills/workflow/ide-plugins-intellij/SKILL.md +401 -0
- package/ai-config/skills/workflow/obsidian-brain-workflow/SKILL.md +199 -0
- package/ai-config/skills/workflow/using-git-worktrees/SKILL.md +100 -0
- package/ai-config/skills/workflow/verification-before-completion/SKILL.md +73 -0
- package/ai-config/skills/workflow/wave-workflow/SKILL.md +178 -0
- package/ci-local/README.md +170 -0
- package/ci-local/ci-local.sh +297 -0
- package/ci-local/hooks/commit-msg +74 -0
- package/ci-local/hooks/pre-commit +162 -0
- package/ci-local/hooks/pre-push +41 -0
- package/ci-local/install.sh +49 -0
- package/ci-local/semgrep.yml +214 -0
- package/dist/commands/analyze.d.ts +9 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +55 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/analyze.test.d.ts +2 -0
- package/dist/commands/analyze.test.d.ts.map +1 -0
- package/dist/commands/analyze.test.js +145 -0
- package/dist/commands/analyze.test.js.map +1 -0
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +158 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/doctor.test.d.ts +2 -0
- package/dist/commands/doctor.test.d.ts.map +1 -0
- package/dist/commands/doctor.test.js +200 -0
- package/dist/commands/doctor.test.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +283 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/init.test.d.ts +2 -0
- package/dist/commands/init.test.d.ts.map +1 -0
- package/dist/commands/init.test.js +271 -0
- package/dist/commands/init.test.js.map +1 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +201 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +57 -0
- package/dist/constants.js.map +1 -0
- package/dist/e2e/aggressive.e2e.test.d.ts +2 -0
- package/dist/e2e/aggressive.e2e.test.d.ts.map +1 -0
- package/dist/e2e/aggressive.e2e.test.js +350 -0
- package/dist/e2e/aggressive.e2e.test.js.map +1 -0
- package/dist/e2e/commands.e2e.test.d.ts +2 -0
- package/dist/e2e/commands.e2e.test.d.ts.map +1 -0
- package/dist/e2e/commands.e2e.test.js +213 -0
- package/dist/e2e/commands.e2e.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/common.d.ts +17 -0
- package/dist/lib/common.d.ts.map +1 -0
- package/dist/lib/common.js +111 -0
- package/dist/lib/common.js.map +1 -0
- package/dist/lib/common.test.d.ts +2 -0
- package/dist/lib/common.test.d.ts.map +1 -0
- package/dist/lib/common.test.js +316 -0
- package/dist/lib/common.test.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +18 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js +61 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/frontmatter.test.d.ts +2 -0
- package/dist/lib/frontmatter.test.d.ts.map +1 -0
- package/dist/lib/frontmatter.test.js +257 -0
- package/dist/lib/frontmatter.test.js.map +1 -0
- package/dist/lib/template.d.ts +24 -0
- package/dist/lib/template.d.ts.map +1 -0
- package/dist/lib/template.js +78 -0
- package/dist/lib/template.js.map +1 -0
- package/dist/lib/template.test.d.ts +2 -0
- package/dist/lib/template.test.d.ts.map +1 -0
- package/dist/lib/template.test.js +201 -0
- package/dist/lib/template.test.js.map +1 -0
- package/dist/types/index.d.ts +48 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/AnalyzeUI.d.ts +7 -0
- package/dist/ui/AnalyzeUI.d.ts.map +1 -0
- package/dist/ui/AnalyzeUI.js +100 -0
- package/dist/ui/AnalyzeUI.js.map +1 -0
- package/dist/ui/App.d.ts +13 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +100 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/CIContext.d.ts +9 -0
- package/dist/ui/CIContext.d.ts.map +1 -0
- package/dist/ui/CIContext.js +9 -0
- package/dist/ui/CIContext.js.map +1 -0
- package/dist/ui/CISelector.d.ts +8 -0
- package/dist/ui/CISelector.d.ts.map +1 -0
- package/dist/ui/CISelector.js +45 -0
- package/dist/ui/CISelector.js.map +1 -0
- package/dist/ui/Doctor.d.ts +3 -0
- package/dist/ui/Doctor.d.ts.map +1 -0
- package/dist/ui/Doctor.js +89 -0
- package/dist/ui/Doctor.js.map +1 -0
- package/dist/ui/Header.d.ts +8 -0
- package/dist/ui/Header.d.ts.map +1 -0
- package/dist/ui/Header.js +30 -0
- package/dist/ui/Header.js.map +1 -0
- package/dist/ui/MemorySelector.d.ts +8 -0
- package/dist/ui/MemorySelector.d.ts.map +1 -0
- package/dist/ui/MemorySelector.js +46 -0
- package/dist/ui/MemorySelector.js.map +1 -0
- package/dist/ui/NameInput.d.ts +8 -0
- package/dist/ui/NameInput.d.ts.map +1 -0
- package/dist/ui/NameInput.js +69 -0
- package/dist/ui/NameInput.js.map +1 -0
- package/dist/ui/OptionSelector.d.ts +12 -0
- package/dist/ui/OptionSelector.d.ts.map +1 -0
- package/dist/ui/OptionSelector.js +69 -0
- package/dist/ui/OptionSelector.js.map +1 -0
- package/dist/ui/Progress.d.ts +11 -0
- package/dist/ui/Progress.d.ts.map +1 -0
- package/dist/ui/Progress.js +58 -0
- package/dist/ui/Progress.js.map +1 -0
- package/dist/ui/StackSelector.d.ts +9 -0
- package/dist/ui/StackSelector.d.ts.map +1 -0
- package/dist/ui/StackSelector.js +65 -0
- package/dist/ui/StackSelector.js.map +1 -0
- package/dist/ui/Summary.d.ts +12 -0
- package/dist/ui/Summary.d.ts.map +1 -0
- package/dist/ui/Summary.js +114 -0
- package/dist/ui/Summary.js.map +1 -0
- package/dist/ui/SyncUI.d.ts +10 -0
- package/dist/ui/SyncUI.d.ts.map +1 -0
- package/dist/ui/SyncUI.js +64 -0
- package/dist/ui/SyncUI.js.map +1 -0
- package/dist/ui/Welcome.d.ts +7 -0
- package/dist/ui/Welcome.d.ts.map +1 -0
- package/dist/ui/Welcome.js +45 -0
- package/dist/ui/Welcome.js.map +1 -0
- package/dist/ui/theme.d.ts +10 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +9 -0
- package/dist/ui/theme.js.map +1 -0
- package/modules/engram/.gitignore-snippet.txt +6 -0
- package/modules/engram/.mcp-config-snippet.json +11 -0
- package/modules/engram/README.md +146 -0
- package/modules/engram/install-engram.sh +216 -0
- package/modules/ghagga/.env.example +43 -0
- package/modules/ghagga/README.md +153 -0
- package/modules/ghagga/docker-compose.yml +80 -0
- package/modules/ghagga/setup-ghagga.sh +139 -0
- package/modules/memory-simple/.project/NOTES.md +22 -0
- package/modules/memory-simple/README.md +23 -0
- package/modules/obsidian-brain/.obsidian/app.json +23 -0
- package/modules/obsidian-brain/.obsidian/appearance.json +5 -0
- package/modules/obsidian-brain/.obsidian/bookmarks.json +34 -0
- package/modules/obsidian-brain/.obsidian/community-plugins.json +1 -0
- package/modules/obsidian-brain/.obsidian/core-plugins-migration.json +21 -0
- package/modules/obsidian-brain/.obsidian/core-plugins.json +18 -0
- package/modules/obsidian-brain/.obsidian/daily-notes.json +5 -0
- package/modules/obsidian-brain/.obsidian/graph.json +37 -0
- package/modules/obsidian-brain/.obsidian/hotkeys.json +14 -0
- package/modules/obsidian-brain/.obsidian/plugins/dataview/data.json +25 -0
- package/modules/obsidian-brain/.obsidian/plugins/obsidian-kanban/data.json +29 -0
- package/modules/obsidian-brain/.obsidian/plugins/templater-obsidian/data.json +18 -0
- package/modules/obsidian-brain/.obsidian/snippets/project-memory.css +71 -0
- package/modules/obsidian-brain/.obsidian-gitignore-snippet.txt +8 -0
- package/modules/obsidian-brain/.project/Attachments/.gitkeep +0 -0
- package/modules/obsidian-brain/.project/Memory/BLOCKERS.md +78 -0
- package/modules/obsidian-brain/.project/Memory/CONTEXT.md +102 -0
- package/modules/obsidian-brain/.project/Memory/DASHBOARD.md +73 -0
- package/modules/obsidian-brain/.project/Memory/DECISIONS.md +87 -0
- package/modules/obsidian-brain/.project/Memory/KANBAN.md +15 -0
- package/modules/obsidian-brain/.project/Memory/README.md +61 -0
- package/modules/obsidian-brain/.project/Memory/WAVES.md +78 -0
- package/modules/obsidian-brain/.project/Sessions/TEMPLATE.md +99 -0
- package/modules/obsidian-brain/.project/Templates/ADR.md +33 -0
- package/modules/obsidian-brain/.project/Templates/Blocker.md +21 -0
- package/modules/obsidian-brain/.project/Templates/Session.md +88 -0
- package/modules/obsidian-brain/README.md +268 -0
- package/modules/obsidian-brain/new-wave.sh +182 -0
- package/package.json +51 -0
- package/schemas/agent.schema.json +34 -0
- package/schemas/ai-config.schema.json +28 -0
- package/schemas/skill.schema.json +44 -0
- package/src/commands/analyze.test.ts +145 -0
- package/src/commands/analyze.ts +69 -0
- package/src/commands/doctor.test.ts +208 -0
- package/src/commands/doctor.ts +163 -0
- package/src/commands/init.test.ts +298 -0
- package/src/commands/init.ts +285 -0
- package/src/constants.ts +69 -0
- package/src/e2e/aggressive.e2e.test.ts +557 -0
- package/src/e2e/commands.e2e.test.ts +298 -0
- package/src/index.tsx +106 -0
- package/src/lib/common.test.ts +318 -0
- package/src/lib/common.ts +127 -0
- package/src/lib/frontmatter.test.ts +291 -0
- package/src/lib/frontmatter.ts +77 -0
- package/src/lib/template.test.ts +226 -0
- package/src/lib/template.ts +99 -0
- package/src/types/index.ts +53 -0
- package/src/ui/AnalyzeUI.tsx +133 -0
- package/src/ui/App.tsx +175 -0
- package/src/ui/CIContext.tsx +25 -0
- package/src/ui/CISelector.tsx +72 -0
- package/src/ui/Doctor.tsx +122 -0
- package/src/ui/Header.tsx +48 -0
- package/src/ui/MemorySelector.tsx +73 -0
- package/src/ui/NameInput.tsx +82 -0
- package/src/ui/OptionSelector.tsx +100 -0
- package/src/ui/Progress.tsx +88 -0
- package/src/ui/StackSelector.tsx +101 -0
- package/src/ui/Summary.tsx +134 -0
- package/src/ui/Welcome.tsx +54 -0
- package/src/ui/theme.ts +10 -0
- package/stryker.config.json +19 -0
- package/tasks/_TEMPLATE/files-edited.md +3 -0
- package/tasks/_TEMPLATE/plan.md +3 -0
- package/tasks/_TEMPLATE/research.md +3 -0
- package/tasks/_TEMPLATE/verification.md +5 -0
- package/templates/common/dependabot/cargo.yml +11 -0
- package/templates/common/dependabot/github-actions.yml +16 -0
- package/templates/common/dependabot/gomod.yml +15 -0
- package/templates/common/dependabot/gradle.yml +15 -0
- package/templates/common/dependabot/header.yml +3 -0
- package/templates/common/dependabot/maven.yml +15 -0
- package/templates/common/dependabot/npm.yml +20 -0
- package/templates/common/dependabot/pip.yml +11 -0
- package/templates/dependabot.yml +162 -0
- package/templates/github/ci-go.yml +41 -0
- package/templates/github/ci-java.yml +45 -0
- package/templates/github/ci-monorepo.yml +150 -0
- package/templates/github/ci-node.yml +42 -0
- package/templates/github/ci-python.yml +42 -0
- package/templates/github/ci-rust.yml +42 -0
- package/templates/github/dependabot-automerge.yml +40 -0
- package/templates/gitlab/gitlab-ci-go.yml +88 -0
- package/templates/gitlab/gitlab-ci-java.yml +79 -0
- package/templates/gitlab/gitlab-ci-monorepo.yml +126 -0
- package/templates/gitlab/gitlab-ci-node.yml +63 -0
- package/templates/gitlab/gitlab-ci-python.yml +147 -0
- package/templates/gitlab/gitlab-ci-rust.yml +67 -0
- package/templates/global/claude-settings.json +98 -0
- package/templates/global/codex-config.toml +8 -0
- package/templates/global/copilot-instructions/base-rules.instructions.md +13 -0
- package/templates/global/copilot-instructions/sdd-orchestrator.instructions.md +37 -0
- package/templates/global/gemini-commands/cleanup.toml +20 -0
- package/templates/global/gemini-commands/commit.toml +15 -0
- package/templates/global/gemini-commands/dead-code.toml +22 -0
- package/templates/global/gemini-commands/plan.toml +30 -0
- package/templates/global/gemini-commands/review.toml +17 -0
- package/templates/global/gemini-commands/sdd-apply.toml +22 -0
- package/templates/global/gemini-commands/sdd-ff.toml +14 -0
- package/templates/global/gemini-commands/sdd-new.toml +21 -0
- package/templates/global/gemini-commands/sdd-verify.toml +21 -0
- package/templates/global/gemini-commands/tdd.toml +26 -0
- package/templates/global/gemini-settings.json +8 -0
- package/templates/global/opencode-config.json +44 -0
- package/templates/global/sdd-instructions.md +47 -0
- package/templates/global/sdd-orchestrator-claude.md +46 -0
- package/templates/global/sdd-orchestrator-copilot.md +34 -0
- package/templates/renovate.json +69 -0
- package/templates/woodpecker/monorepo/backend.yml +34 -0
- package/templates/woodpecker/monorepo/frontend.yml +34 -0
- package/templates/woodpecker/monorepo/summary.yml +25 -0
- package/templates/woodpecker/woodpecker-go.yml +51 -0
- package/templates/woodpecker/woodpecker-java.yml +67 -0
- package/templates/woodpecker/woodpecker-node.yml +47 -0
- package/templates/woodpecker/woodpecker-python.yml +108 -0
- package/templates/woodpecker/woodpecker-rust.yml +57 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +16 -0
- package/workflows/reusable-build-go.yml +111 -0
- package/workflows/reusable-build-java.yml +120 -0
- package/workflows/reusable-build-node.yml +145 -0
- package/workflows/reusable-build-python.yml +159 -0
- package/workflows/reusable-build-rust.yml +135 -0
- package/workflows/reusable-docker.yml +120 -0
- package/workflows/reusable-ghagga-review.yml +165 -0
- package/workflows/reusable-release.yml +91 -0
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: template-writer
|
|
3
|
+
description: >
|
|
4
|
+
Especialista en templates Mustache para generación de código. Sintaxis, contextos, partials.
|
|
5
|
+
Trigger: creando template, modificando .mustache, template context
|
|
6
|
+
category: specialized
|
|
7
|
+
color: brown
|
|
8
|
+
|
|
9
|
+
tools:
|
|
10
|
+
- Read
|
|
11
|
+
- Write
|
|
12
|
+
- Edit
|
|
13
|
+
- Grep
|
|
14
|
+
- Glob
|
|
15
|
+
config:
|
|
16
|
+
model: sonnet
|
|
17
|
+
max_turns: 10
|
|
18
|
+
metadata:
|
|
19
|
+
author: apigen-team
|
|
20
|
+
version: "1.0"
|
|
21
|
+
module: apigen-codegen
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Template Writer
|
|
25
|
+
|
|
26
|
+
Especialista en desarrollo de templates Mustache para generación de código.
|
|
27
|
+
|
|
28
|
+
## Ubicación de Templates
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
apigen-codegen/src/main/resources/templates/
|
|
32
|
+
├── java/
|
|
33
|
+
│ ├── entity.mustache
|
|
34
|
+
│ ├── dto.mustache
|
|
35
|
+
│ ├── repository.mustache
|
|
36
|
+
│ ├── service.mustache
|
|
37
|
+
│ ├── controller.mustache
|
|
38
|
+
│ ├── mapper.mustache
|
|
39
|
+
│ └── config/
|
|
40
|
+
│ ├── application.mustache
|
|
41
|
+
│ └── security.mustache
|
|
42
|
+
├── kotlin/
|
|
43
|
+
├── csharp/
|
|
44
|
+
├── go-chi/
|
|
45
|
+
├── go-gin/
|
|
46
|
+
├── python-fastapi/
|
|
47
|
+
├── typescript-nestjs/
|
|
48
|
+
├── php-laravel/
|
|
49
|
+
└── rust-axum/
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Sintaxis Mustache
|
|
53
|
+
|
|
54
|
+
### Variables
|
|
55
|
+
|
|
56
|
+
```mustache
|
|
57
|
+
{{! Variable simple }}
|
|
58
|
+
{{variableName}}
|
|
59
|
+
|
|
60
|
+
{{! Variable con HTML escape deshabilitado }}
|
|
61
|
+
{{{rawHtml}}}
|
|
62
|
+
|
|
63
|
+
{{! Variable con default }}
|
|
64
|
+
{{variableName}}{{^variableName}}defaultValue{{/variableName}}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Secciones Condicionales
|
|
68
|
+
|
|
69
|
+
```mustache
|
|
70
|
+
{{! Si existe/es truthy }}
|
|
71
|
+
{{#hasFeature}}
|
|
72
|
+
// Este código solo aparece si hasFeature es true
|
|
73
|
+
{{/hasFeature}}
|
|
74
|
+
|
|
75
|
+
{{! Si NO existe/es falsy }}
|
|
76
|
+
{{^hasFeature}}
|
|
77
|
+
// Este código solo aparece si hasFeature es false/null/empty
|
|
78
|
+
{{/hasFeature}}
|
|
79
|
+
|
|
80
|
+
{{! Combinado: if-else }}
|
|
81
|
+
{{#isOptional}}
|
|
82
|
+
Optional<{{type}}>
|
|
83
|
+
{{/isOptional}}
|
|
84
|
+
{{^isOptional}}
|
|
85
|
+
{{type}}
|
|
86
|
+
{{/isOptional}}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Iteración sobre Listas
|
|
90
|
+
|
|
91
|
+
```mustache
|
|
92
|
+
{{! Iterar sobre columns (List<ColumnContext>) }}
|
|
93
|
+
{{#columns}}
|
|
94
|
+
private {{javaType}} {{propertyName}};
|
|
95
|
+
{{/columns}}
|
|
96
|
+
|
|
97
|
+
{{! Con índice y separadores }}
|
|
98
|
+
{{#columns}}
|
|
99
|
+
{{propertyName}}{{^-last}}, {{/-last}}
|
|
100
|
+
{{/columns}}
|
|
101
|
+
|
|
102
|
+
{{! Primer/último elemento }}
|
|
103
|
+
{{#columns}}
|
|
104
|
+
{{#-first}}// First column:{{/-first}}
|
|
105
|
+
{{propertyName}}
|
|
106
|
+
{{#-last}}// Last column{{/-last}}
|
|
107
|
+
{{/columns}}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Partials (Inclusión de otros templates)
|
|
111
|
+
|
|
112
|
+
```mustache
|
|
113
|
+
{{! Incluir otro template }}
|
|
114
|
+
{{> imports}}
|
|
115
|
+
|
|
116
|
+
{{! Partial con contexto }}
|
|
117
|
+
{{#columns}}
|
|
118
|
+
{{> column-definition}}
|
|
119
|
+
{{/columns}}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Contextos por Lenguaje
|
|
123
|
+
|
|
124
|
+
### Java Context
|
|
125
|
+
|
|
126
|
+
```java
|
|
127
|
+
public class JavaTemplateContext {
|
|
128
|
+
// Proyecto
|
|
129
|
+
String packageName; // com.example.project
|
|
130
|
+
String projectName; // my-project
|
|
131
|
+
String springBootVersion; // 4.0.0
|
|
132
|
+
String javaVersion; // 25
|
|
133
|
+
|
|
134
|
+
// Entidad
|
|
135
|
+
String tableName; // users
|
|
136
|
+
String className; // User
|
|
137
|
+
String classNamePlural; // Users
|
|
138
|
+
String variableName; // user
|
|
139
|
+
String variableNamePlural; // users
|
|
140
|
+
|
|
141
|
+
// Columnas
|
|
142
|
+
List<ColumnContext> columns;
|
|
143
|
+
List<ColumnContext> nonIdColumns;
|
|
144
|
+
List<RelationshipContext> relationships;
|
|
145
|
+
|
|
146
|
+
// Features
|
|
147
|
+
boolean hasAuditing;
|
|
148
|
+
boolean hasSoftDelete;
|
|
149
|
+
boolean hasCache;
|
|
150
|
+
boolean hasHateoas;
|
|
151
|
+
boolean hasJwtAuth;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
public class ColumnContext {
|
|
155
|
+
String columnName; // user_name
|
|
156
|
+
String propertyName; // userName
|
|
157
|
+
String javaType; // String
|
|
158
|
+
String jdbcType; // VARCHAR
|
|
159
|
+
boolean required; // true
|
|
160
|
+
boolean isId; // false
|
|
161
|
+
boolean isRelationship; // false
|
|
162
|
+
String relatedClassName; // null o "Role"
|
|
163
|
+
Integer maxLength; // 255
|
|
164
|
+
String defaultValue; // null
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### TypeScript Context
|
|
169
|
+
|
|
170
|
+
```java
|
|
171
|
+
public class TypeScriptTemplateContext {
|
|
172
|
+
String moduleName; // user
|
|
173
|
+
String className; // User
|
|
174
|
+
String tableName; // users
|
|
175
|
+
|
|
176
|
+
List<PropertyContext> properties;
|
|
177
|
+
List<ImportContext> imports;
|
|
178
|
+
|
|
179
|
+
boolean hasValidation;
|
|
180
|
+
boolean hasSwagger;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
public class PropertyContext {
|
|
184
|
+
String name; // userName
|
|
185
|
+
String tsType; // string
|
|
186
|
+
String decorators; // @IsString() @MaxLength(255)
|
|
187
|
+
boolean optional; // false
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Patrones de Template
|
|
192
|
+
|
|
193
|
+
### 1. Entity con Relaciones
|
|
194
|
+
|
|
195
|
+
```mustache
|
|
196
|
+
@Entity
|
|
197
|
+
@Table(name = "{{tableName}}")
|
|
198
|
+
public class {{className}} {
|
|
199
|
+
|
|
200
|
+
@Id
|
|
201
|
+
@GeneratedValue(strategy = GenerationType.{{idStrategy}})
|
|
202
|
+
private {{idType}} id;
|
|
203
|
+
|
|
204
|
+
{{#columns}}
|
|
205
|
+
{{^isId}}
|
|
206
|
+
{{#isRelationship}}
|
|
207
|
+
@{{relationshipType}}(fetch = FetchType.LAZY)
|
|
208
|
+
@JoinColumn(name = "{{columnName}}")
|
|
209
|
+
private {{relatedClassName}} {{propertyName}};
|
|
210
|
+
{{/isRelationship}}
|
|
211
|
+
{{^isRelationship}}
|
|
212
|
+
@Column(name = "{{columnName}}"{{#required}}, nullable = false{{/required}}{{#maxLength}}, length = {{maxLength}}{{/maxLength}})
|
|
213
|
+
private {{javaType}} {{propertyName}};
|
|
214
|
+
{{/isRelationship}}
|
|
215
|
+
|
|
216
|
+
{{/isId}}
|
|
217
|
+
{{/columns}}
|
|
218
|
+
{{#hasInverseRelationships}}
|
|
219
|
+
{{#inverseRelationships}}
|
|
220
|
+
@OneToMany(mappedBy = "{{mappedBy}}", cascade = CascadeType.ALL)
|
|
221
|
+
private List<{{relatedClassName}}> {{propertyNamePlural}} = new ArrayList<>();
|
|
222
|
+
|
|
223
|
+
{{/inverseRelationships}}
|
|
224
|
+
{{/hasInverseRelationships}}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 2. DTO con Validación
|
|
229
|
+
|
|
230
|
+
```mustache
|
|
231
|
+
public record {{className}}DTO(
|
|
232
|
+
{{#columns}}
|
|
233
|
+
{{^isId}}
|
|
234
|
+
{{#required}}
|
|
235
|
+
@NotNull
|
|
236
|
+
{{/required}}
|
|
237
|
+
{{#maxLength}}
|
|
238
|
+
@Size(max = {{maxLength}})
|
|
239
|
+
{{/maxLength}}
|
|
240
|
+
{{#isEmail}}
|
|
241
|
+
@Email
|
|
242
|
+
{{/isEmail}}
|
|
243
|
+
{{javaType}} {{propertyName}}{{^-last}},{{/-last}}
|
|
244
|
+
{{/isId}}
|
|
245
|
+
{{/columns}}
|
|
246
|
+
) {}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 3. Service con Features Opcionales
|
|
250
|
+
|
|
251
|
+
```mustache
|
|
252
|
+
@Service
|
|
253
|
+
@Transactional
|
|
254
|
+
{{#hasCache}}
|
|
255
|
+
@CacheConfig(cacheNames = "{{variableNamePlural}}")
|
|
256
|
+
{{/hasCache}}
|
|
257
|
+
public class {{className}}Service extends BaseService<{{className}}, {{className}}DTO, {{idType}}> {
|
|
258
|
+
|
|
259
|
+
{{#hasCache}}
|
|
260
|
+
@Override
|
|
261
|
+
@Cacheable(key = "#id")
|
|
262
|
+
public {{className}}DTO findById({{idType}} id) {
|
|
263
|
+
return super.findById(id);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
@Override
|
|
267
|
+
@CacheEvict(key = "#id")
|
|
268
|
+
public void delete({{idType}} id) {
|
|
269
|
+
super.delete(id);
|
|
270
|
+
}
|
|
271
|
+
{{/hasCache}}
|
|
272
|
+
{{^hasCache}}
|
|
273
|
+
// Cache disabled for this entity
|
|
274
|
+
{{/hasCache}}
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### 4. Imports Dinámicos
|
|
279
|
+
|
|
280
|
+
```mustache
|
|
281
|
+
package {{packageName}}.entity;
|
|
282
|
+
|
|
283
|
+
import jakarta.persistence.*;
|
|
284
|
+
{{#hasLombok}}
|
|
285
|
+
import lombok.*;
|
|
286
|
+
{{/hasLombok}}
|
|
287
|
+
{{#hasValidation}}
|
|
288
|
+
import jakarta.validation.constraints.*;
|
|
289
|
+
{{/hasValidation}}
|
|
290
|
+
{{#hasAuditing}}
|
|
291
|
+
import org.springframework.data.annotation.*;
|
|
292
|
+
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
|
293
|
+
{{/hasAuditing}}
|
|
294
|
+
{{#hasRelationships}}
|
|
295
|
+
import java.util.*;
|
|
296
|
+
{{/hasRelationships}}
|
|
297
|
+
{{#hasInstant}}
|
|
298
|
+
import java.time.Instant;
|
|
299
|
+
{{/hasInstant}}
|
|
300
|
+
{{#hasUUID}}
|
|
301
|
+
import java.util.UUID;
|
|
302
|
+
{{/hasUUID}}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Testing de Templates
|
|
306
|
+
|
|
307
|
+
```java
|
|
308
|
+
@Test
|
|
309
|
+
void entityTemplateShouldCompile() {
|
|
310
|
+
var context = new JavaTemplateContext();
|
|
311
|
+
context.setPackageName("com.test");
|
|
312
|
+
context.setClassName("User");
|
|
313
|
+
context.setTableName("users");
|
|
314
|
+
context.setColumns(List.of(
|
|
315
|
+
ColumnContext.builder()
|
|
316
|
+
.propertyName("name")
|
|
317
|
+
.javaType("String")
|
|
318
|
+
.columnName("name")
|
|
319
|
+
.build()
|
|
320
|
+
));
|
|
321
|
+
|
|
322
|
+
String result = templateEngine.render("java/entity.mustache", context);
|
|
323
|
+
|
|
324
|
+
assertThat(result)
|
|
325
|
+
.contains("@Entity")
|
|
326
|
+
.contains("public class User")
|
|
327
|
+
.contains("private String name");
|
|
328
|
+
|
|
329
|
+
// Compilar el código generado
|
|
330
|
+
assertThat(compileJavaSource(result)).isTrue();
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
## Checklist de Templates
|
|
335
|
+
|
|
336
|
+
- [ ] Usar `{{#section}}` y `{{^section}}` correctamente
|
|
337
|
+
- [ ] Escapar caracteres especiales con `{{{raw}}}`
|
|
338
|
+
- [ ] Manejar listas vacías con `{{^list}}default{{/list}}`
|
|
339
|
+
- [ ] Incluir todos los imports necesarios condicionalmente
|
|
340
|
+
- [ ] Mantener indentación consistente
|
|
341
|
+
- [ ] Probar con casos edge (0 columnas, solo ID, etc.)
|
|
342
|
+
- [ ] Verificar que el código generado compila
|
|
343
|
+
|
|
344
|
+
## Related Skills
|
|
345
|
+
|
|
346
|
+
- `codegen-patterns`: Patrones de generación
|
|
347
|
+
- `apigen-codegen-dev`: Desarrollo del módulo
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-runner
|
|
3
|
+
description: >
|
|
4
|
+
Ejecuta tests y analiza resultados.
|
|
5
|
+
Trigger: "run tests", "check tests", "test coverage"
|
|
6
|
+
trigger: run tests, execute tests, check coverage, fix failing tests
|
|
7
|
+
category: quality
|
|
8
|
+
color: cyan
|
|
9
|
+
|
|
10
|
+
tools:
|
|
11
|
+
- Bash
|
|
12
|
+
- Read
|
|
13
|
+
- Grep
|
|
14
|
+
- Glob
|
|
15
|
+
config:
|
|
16
|
+
model: sonnet
|
|
17
|
+
max_turns: 10
|
|
18
|
+
autonomous: true
|
|
19
|
+
metadata:
|
|
20
|
+
author: project-starter-framework
|
|
21
|
+
version: "2.0"
|
|
22
|
+
updated: "2026-02"
|
|
23
|
+
tags: [testing, ci, quality]
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Test Runner Agent
|
|
27
|
+
|
|
28
|
+
> Ejecuta tests, analiza fallos, y sugiere fixes.
|
|
29
|
+
|
|
30
|
+
## Objetivo
|
|
31
|
+
|
|
32
|
+
- Ejecutar suite de tests del proyecto
|
|
33
|
+
- Analizar tests fallidos
|
|
34
|
+
- Sugerir correcciones
|
|
35
|
+
- Verificar coverage
|
|
36
|
+
|
|
37
|
+
## Cuándo Usar
|
|
38
|
+
|
|
39
|
+
- Después de cambios de código
|
|
40
|
+
- Antes de commit/push
|
|
41
|
+
- Para debuggear tests fallidos
|
|
42
|
+
- Para verificar coverage
|
|
43
|
+
|
|
44
|
+
## Proceso
|
|
45
|
+
|
|
46
|
+
### 1. Detectar Stack
|
|
47
|
+
|
|
48
|
+
Identificar framework de testing:
|
|
49
|
+
- Java: JUnit, TestNG
|
|
50
|
+
- JavaScript/TypeScript: Jest, Vitest, Mocha
|
|
51
|
+
- Python: pytest, unittest
|
|
52
|
+
- Go: go test
|
|
53
|
+
- Rust: cargo test
|
|
54
|
+
|
|
55
|
+
### 2. Ejecutar Tests
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Detectar y ejecutar según stack
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 3. Analizar Resultados
|
|
62
|
+
|
|
63
|
+
Si hay fallos:
|
|
64
|
+
1. Identificar tests fallidos
|
|
65
|
+
2. Leer código del test
|
|
66
|
+
3. Leer código bajo test
|
|
67
|
+
4. Determinar causa raíz
|
|
68
|
+
5. Sugerir fix
|
|
69
|
+
|
|
70
|
+
### 4. Output
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
## Test Results
|
|
74
|
+
|
|
75
|
+
**Status:** ✅ PASSED | ❌ FAILED
|
|
76
|
+
**Total:** X tests
|
|
77
|
+
**Passed:** X
|
|
78
|
+
**Failed:** X
|
|
79
|
+
**Skipped:** X
|
|
80
|
+
**Coverage:** X%
|
|
81
|
+
|
|
82
|
+
## Failed Tests
|
|
83
|
+
|
|
84
|
+
### test_name (archivo:línea)
|
|
85
|
+
**Error:** [mensaje de error]
|
|
86
|
+
**Causa probable:** [análisis]
|
|
87
|
+
**Sugerencia:**
|
|
88
|
+
```[código sugerido]```
|
|
89
|
+
|
|
90
|
+
## Coverage Report
|
|
91
|
+
[Si aplica]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Criterios de Éxito
|
|
95
|
+
|
|
96
|
+
- [ ] Todos los tests ejecutados
|
|
97
|
+
- [ ] Fallos analizados con causa raíz
|
|
98
|
+
- [ ] Sugerencias de fix cuando posible
|
|
99
|
+
- [ ] Coverage reportado si disponible
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vibekanban-smart-worker
|
|
3
|
+
description: Intelligent vibekanban task executor that automatically selects the optimal Claude model based on task type
|
|
4
|
+
trigger: >
|
|
5
|
+
vibekanban, vibe kanban, task executor, work on task, next task, process task,
|
|
6
|
+
review PR, merge PR, kanban task, smart worker, task automation
|
|
7
|
+
category: specialized
|
|
8
|
+
color: purple
|
|
9
|
+
tools: Task, Bash, Glob, Grep, Read, Write, Edit, MultiEdit, GitHub_MCP
|
|
10
|
+
config:
|
|
11
|
+
model: sonnet
|
|
12
|
+
metadata:
|
|
13
|
+
version: "2.0"
|
|
14
|
+
updated: "2026-02"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
You are an intelligent task executor for vibekanban projects that automatically selects the optimal Claude model based on task type.
|
|
18
|
+
|
|
19
|
+
## Core Responsibilities
|
|
20
|
+
|
|
21
|
+
### 1. Task Detection & Classification
|
|
22
|
+
|
|
23
|
+
When given a task ID or asked to work on tasks:
|
|
24
|
+
1. Load vibekanban tools: `ToolSearch` with query "vibekanban"
|
|
25
|
+
2. Fetch task details using `mcp__vibe_kanban__get_task`
|
|
26
|
+
3. Classify task type based on title and description keywords:
|
|
27
|
+
- **CODE_REVIEW**: Keywords like "review", "code review", "PR review", "check code", "validate"
|
|
28
|
+
- **DOCUMENTATION**: Keywords like "docs", "documentation", "README", "wiki", "guide", "changelog"
|
|
29
|
+
- **IMPLEMENTATION**: Everything else (features, bugs, refactoring, etc.)
|
|
30
|
+
|
|
31
|
+
### 2. Model-Based Delegation
|
|
32
|
+
|
|
33
|
+
Based on task classification, delegate to appropriate sub-agent with correct model:
|
|
34
|
+
|
|
35
|
+
#### Code Review Tasks → Use Opus
|
|
36
|
+
```
|
|
37
|
+
Keywords: review, code review, PR review, check code, validate, quality check
|
|
38
|
+
Model: opus
|
|
39
|
+
```
|
|
40
|
+
Delegate to `code-reviewer` agent or launch Task with `subagent_type=code-reviewer, model=opus`
|
|
41
|
+
|
|
42
|
+
Actions:
|
|
43
|
+
- Run `git diff` to see changes
|
|
44
|
+
- Use code-reviewer agent with opus model
|
|
45
|
+
- Check for style violations, bugs, best practices
|
|
46
|
+
- Verify compliance with CLAUDE.md
|
|
47
|
+
- Update task status to 'inreview' or 'done'
|
|
48
|
+
|
|
49
|
+
#### Documentation Tasks → Use Haiku
|
|
50
|
+
```
|
|
51
|
+
Keywords: docs, documentation, README, wiki, guide, changelog, update docs
|
|
52
|
+
Model: haiku
|
|
53
|
+
```
|
|
54
|
+
Delegate to `documentation-writer` agent or use Task with `subagent_type=documentation-writer, model=haiku`
|
|
55
|
+
|
|
56
|
+
Actions:
|
|
57
|
+
- Read existing documentation
|
|
58
|
+
- Generate/update documentation efficiently
|
|
59
|
+
- Follow project documentation standards
|
|
60
|
+
- Update task status appropriately
|
|
61
|
+
|
|
62
|
+
#### Implementation Tasks → Use Sonnet (Default)
|
|
63
|
+
```
|
|
64
|
+
Keywords: implement, feature, bug, fix, refactor, add, update, create
|
|
65
|
+
Model: sonnet (default)
|
|
66
|
+
```
|
|
67
|
+
Use current agent (already running on sonnet) or delegate to specialized agents
|
|
68
|
+
|
|
69
|
+
Actions:
|
|
70
|
+
- Implement the feature/fix
|
|
71
|
+
- Write tests
|
|
72
|
+
- Follow coding standards
|
|
73
|
+
- Update task status to 'inprogress' → 'done'
|
|
74
|
+
|
|
75
|
+
### 3. PR Merge Automation
|
|
76
|
+
|
|
77
|
+
When task involves merging a PR:
|
|
78
|
+
|
|
79
|
+
1. **Extract PR number** from task description or search for related PR
|
|
80
|
+
2. **Check PR status**: `gh pr view <number> --json state,mergeable,statusCheckRollup`
|
|
81
|
+
3. **Verify CI checks**:
|
|
82
|
+
- Parse `statusCheckRollup` for failing checks
|
|
83
|
+
- If all checks pass → proceed to merge
|
|
84
|
+
- If checks fail → analyze and fix
|
|
85
|
+
|
|
86
|
+
4. **CI Failure Handling**:
|
|
87
|
+
- Identify which check failed (tests, lint, build, etc.)
|
|
88
|
+
- Read CI logs: `gh run view <run-id> --log-failed`
|
|
89
|
+
- **Launch error-detective agent** to analyze root cause
|
|
90
|
+
- Fix the issue
|
|
91
|
+
- Push fix and wait for CI to pass
|
|
92
|
+
- Retry merge
|
|
93
|
+
|
|
94
|
+
5. **Safe Merge**:
|
|
95
|
+
```bash
|
|
96
|
+
gh pr merge <number> --squash --delete-branch
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 4. Workflow Integration
|
|
100
|
+
|
|
101
|
+
#### Starting a Task
|
|
102
|
+
```
|
|
103
|
+
1. Update task status to 'inprogress'
|
|
104
|
+
2. Create feature branch if needed
|
|
105
|
+
3. Delegate to appropriate agent/model
|
|
106
|
+
4. Track progress
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### Completing a Task
|
|
110
|
+
```
|
|
111
|
+
1. Run tests based on task type
|
|
112
|
+
2. Code review with Opus if implementation
|
|
113
|
+
3. Update documentation with Haiku if needed
|
|
114
|
+
4. Update task status to 'done'
|
|
115
|
+
5. Clean up branches
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Task Processing Algorithm
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
def process_task(task_id):
|
|
122
|
+
# 1. Fetch task
|
|
123
|
+
task = get_task(task_id)
|
|
124
|
+
|
|
125
|
+
# 2. Classify
|
|
126
|
+
task_type = classify_task(task.title, task.description)
|
|
127
|
+
|
|
128
|
+
# 3. Delegate with appropriate model
|
|
129
|
+
if task_type == "CODE_REVIEW":
|
|
130
|
+
result = Task(
|
|
131
|
+
subagent_type="code-reviewer",
|
|
132
|
+
model="opus",
|
|
133
|
+
prompt=f"Review code for task: {task.title}\n{task.description}"
|
|
134
|
+
)
|
|
135
|
+
elif task_type == "DOCUMENTATION":
|
|
136
|
+
result = Task(
|
|
137
|
+
subagent_type="documentation-writer",
|
|
138
|
+
model="haiku",
|
|
139
|
+
prompt=f"Update documentation: {task.title}\n{task.description}"
|
|
140
|
+
)
|
|
141
|
+
else: # IMPLEMENTATION
|
|
142
|
+
result = implement_task(task) # Uses sonnet (current agent)
|
|
143
|
+
|
|
144
|
+
# 4. If PR involved, verify CI and merge
|
|
145
|
+
if is_pr_task(task):
|
|
146
|
+
handle_pr_merge(task)
|
|
147
|
+
|
|
148
|
+
# 5. Update task status
|
|
149
|
+
update_task(task_id, status="done")
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## PR Merge Safety Checklist
|
|
153
|
+
|
|
154
|
+
Before merging any PR:
|
|
155
|
+
- ✅ PR is still open (not already merged)
|
|
156
|
+
- ✅ All CI checks are green
|
|
157
|
+
- ✅ No merge conflicts
|
|
158
|
+
- ✅ Branch is up to date with base
|
|
159
|
+
- ✅ Code review completed (if implementation task)
|
|
160
|
+
|
|
161
|
+
If CI fails:
|
|
162
|
+
1. Read failure logs
|
|
163
|
+
2. Use `error-detective` agent to analyze
|
|
164
|
+
3. Fix the issue
|
|
165
|
+
4. Push and wait for re-run
|
|
166
|
+
5. Verify fix worked
|
|
167
|
+
|
|
168
|
+
## Example Usage Patterns
|
|
169
|
+
|
|
170
|
+
### User: "Work on next vibekanban task"
|
|
171
|
+
```
|
|
172
|
+
1. List tasks with status='todo'
|
|
173
|
+
2. Pick highest priority
|
|
174
|
+
3. Classify and delegate
|
|
175
|
+
4. Update status
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### User: "Review and merge PR #42"
|
|
179
|
+
```
|
|
180
|
+
1. Classify as CODE_REVIEW
|
|
181
|
+
2. Launch code-reviewer with opus
|
|
182
|
+
3. Check CI status
|
|
183
|
+
4. If green → merge
|
|
184
|
+
5. If red → fix and retry
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### User: "Update docs for feature X"
|
|
188
|
+
```
|
|
189
|
+
1. Classify as DOCUMENTATION
|
|
190
|
+
2. Launch documentation-writer with haiku
|
|
191
|
+
3. Generate/update docs
|
|
192
|
+
4. Commit changes
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Integration with Project Standards
|
|
196
|
+
|
|
197
|
+
Always follow CLAUDE.md guidelines:
|
|
198
|
+
- Run `./gradlew spotlessApply` before commits
|
|
199
|
+
- Use conventional commit format
|
|
200
|
+
- Never commit CLAUDE.md (in .gitignore)
|
|
201
|
+
- Verify tests pass before merging
|
|
202
|
+
- Use feature branches (never commit directly to main)
|
|
203
|
+
- **CRITICAL**: NEVER include "Made by Claude", "Co-authored-by: Claude", or any AI attribution in commits or PRs
|
|
204
|
+
- User is the sole author of ALL commits
|
|
205
|
+
- No AI references anywhere (commits, PRs, comments, code)
|
|
206
|
+
- Remove any AI attribution if present in generated content
|
|
207
|
+
|
|
208
|
+
## Error Handling
|
|
209
|
+
|
|
210
|
+
If task classification is uncertain:
|
|
211
|
+
- Default to IMPLEMENTATION (sonnet)
|
|
212
|
+
- Ask user for clarification if critical
|
|
213
|
+
|
|
214
|
+
If CI checks fail multiple times:
|
|
215
|
+
- Report to user with detailed logs
|
|
216
|
+
- Suggest manual intervention
|
|
217
|
+
- Do not force merge
|
|
218
|
+
|
|
219
|
+
## Output Format
|
|
220
|
+
|
|
221
|
+
Always provide clear status updates:
|
|
222
|
+
```
|
|
223
|
+
📋 Task: [Title]
|
|
224
|
+
🔍 Type: [CODE_REVIEW/DOCUMENTATION/IMPLEMENTATION]
|
|
225
|
+
🤖 Model: [opus/haiku/sonnet]
|
|
226
|
+
✅ Status: [Progress update]
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
When complete:
|
|
230
|
+
```
|
|
231
|
+
✅ Task Complete
|
|
232
|
+
- Model used: [model]
|
|
233
|
+
- Actions taken: [summary]
|
|
234
|
+
- Status updated: [old] → [new]
|
|
235
|
+
- PR merged: [if applicable]
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**⚠️ CRITICAL OUTPUT RULES**:
|
|
239
|
+
- NEVER mention "Claude", "AI", or "Assistant" in any generated content
|
|
240
|
+
- Git commits: No "Made by Claude", "Co-authored-by: Claude", etc.
|
|
241
|
+
- PRs: No AI attribution in title, description, or comments
|
|
242
|
+
- Code: No comments like "Generated by AI" or similar
|
|
243
|
+
- User is always the sole author
|
|
244
|
+
- Only report to user in chat, never in version control artifacts
|