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,778 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: solo-dev-planner-self-correction
|
|
3
|
+
description: "Módulo 2: Auto-fix y context management"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 🔄 Solo Dev Planner - Self-Correction & Context Management
|
|
7
|
+
|
|
8
|
+
> Módulo 2 de 6: Autonomía del agente con auto-fix y context optimizado
|
|
9
|
+
|
|
10
|
+
## 📚 Relacionado con:
|
|
11
|
+
- 01-CORE.md (Filosofía base)
|
|
12
|
+
- 03-PROGRESSIVE-SETUP.md (Usa estos scripts en setup)
|
|
13
|
+
- 06-OPERATIONS.md (Mise tasks)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 🔄 Self-Correction Protocol (Autonomía del Agente)
|
|
18
|
+
|
|
19
|
+
### Filosofía: El Agente Como Solucionador Autónomo
|
|
20
|
+
|
|
21
|
+
**Problema tradicional:**
|
|
22
|
+
```typescript
|
|
23
|
+
❌ Test falla → Agente se detiene → Espera humano
|
|
24
|
+
❌ Lint error → Agente pide ayuda → Pierde contexto
|
|
25
|
+
❌ Build falla → Agente confused → Workflow bloqueado
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Con Self-Correction:**
|
|
29
|
+
```typescript
|
|
30
|
+
✅ Error detectado → Lee error → Analiza causa → Aplica fix → Re-ejecuta
|
|
31
|
+
✅ Hasta 3 intentos automáticos antes de pedir ayuda humana
|
|
32
|
+
✅ Aprende de errores comunes y los evita
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Script Completo de Auto-Fix
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
#!/bin/bash
|
|
39
|
+
# scripts/auto-fix.sh - Auto-corrección inteligente completa
|
|
40
|
+
|
|
41
|
+
set -e
|
|
42
|
+
|
|
43
|
+
ERROR_TYPE=$1
|
|
44
|
+
MAX_ATTEMPTS=3
|
|
45
|
+
ATTEMPT=0
|
|
46
|
+
|
|
47
|
+
# Colores para output
|
|
48
|
+
RED='\033[0;31m'
|
|
49
|
+
GREEN='\033[0;32m'
|
|
50
|
+
YELLOW='\033[1;33m'
|
|
51
|
+
NC='\033[0m' # No Color
|
|
52
|
+
|
|
53
|
+
log_attempt() {
|
|
54
|
+
echo "$(date -Iseconds)|$ATTEMPT|$ERROR_TYPE|$1" >> .auto-fix-log.txt
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
auto_fix_lint() {
|
|
58
|
+
echo -e "${YELLOW}🔧 Auto-fixing lint errors...${NC}"
|
|
59
|
+
|
|
60
|
+
mise run format
|
|
61
|
+
mise run lint --fix
|
|
62
|
+
|
|
63
|
+
if mise run lint; then
|
|
64
|
+
echo -e "${GREEN}✅ Lint fixed${NC}"
|
|
65
|
+
return 0
|
|
66
|
+
else
|
|
67
|
+
echo -e "${RED}❌ Lint still failing${NC}"
|
|
68
|
+
return 1
|
|
69
|
+
fi
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
auto_fix_imports() {
|
|
73
|
+
echo -e "${YELLOW}🔧 Auto-fixing import errors...${NC}"
|
|
74
|
+
|
|
75
|
+
if [ -f "package.json" ]; then
|
|
76
|
+
bun install
|
|
77
|
+
elif [ -f "pyproject.toml" ]; then
|
|
78
|
+
uv sync
|
|
79
|
+
elif [ -f "go.mod" ]; then
|
|
80
|
+
go mod tidy
|
|
81
|
+
elif [ -f "Cargo.toml" ]; then
|
|
82
|
+
cargo fetch
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
return 0
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
auto_fix_database() {
|
|
89
|
+
echo -e "${YELLOW}🔧 Auto-fixing database errors...${NC}"
|
|
90
|
+
|
|
91
|
+
mise run docker:up
|
|
92
|
+
echo "⏳ Waiting for database..."
|
|
93
|
+
sleep 5
|
|
94
|
+
|
|
95
|
+
mise run db:migrate
|
|
96
|
+
|
|
97
|
+
if psql "$DATABASE_URL" -c "SELECT 1" > /dev/null 2>&1; then
|
|
98
|
+
echo -e "${GREEN}✅ Database fixed${NC}"
|
|
99
|
+
return 0
|
|
100
|
+
else
|
|
101
|
+
echo -e "${RED}❌ Database still not responding${NC}"
|
|
102
|
+
return 1
|
|
103
|
+
fi
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
auto_fix_tests() {
|
|
107
|
+
echo -e "${YELLOW}🔧 Auto-fixing test errors...${NC}"
|
|
108
|
+
|
|
109
|
+
rm -rf .cache coverage .pytest_cache
|
|
110
|
+
|
|
111
|
+
if [ "$NODE_ENV" != "production" ]; then
|
|
112
|
+
mise run db:reset
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
if mise run test:unit; then
|
|
116
|
+
echo -e "${GREEN}✅ Tests fixed${NC}"
|
|
117
|
+
return 0
|
|
118
|
+
else
|
|
119
|
+
echo -e "${RED}❌ Tests still failing${NC}"
|
|
120
|
+
return 1
|
|
121
|
+
fi
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
auto_fix_types() {
|
|
125
|
+
echo -e "${YELLOW}🔧 Attempting to fix type errors...${NC}"
|
|
126
|
+
|
|
127
|
+
if [ -f "tsconfig.json" ]; then
|
|
128
|
+
bun run build || true
|
|
129
|
+
elif [ -f "pyproject.toml" ]; then
|
|
130
|
+
pyright --createstub || true
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
return 0
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
# Main loop con retry logic
|
|
137
|
+
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
|
138
|
+
ATTEMPT=$((ATTEMPT + 1))
|
|
139
|
+
echo -e "\n${YELLOW}🔄 Fix attempt $ATTEMPT/$MAX_ATTEMPTS${NC}"
|
|
140
|
+
|
|
141
|
+
if case "$ERROR_TYPE" in
|
|
142
|
+
lint) auto_fix_lint ;;
|
|
143
|
+
imports) auto_fix_imports ;;
|
|
144
|
+
database) auto_fix_database ;;
|
|
145
|
+
tests) auto_fix_tests ;;
|
|
146
|
+
types) auto_fix_types ;;
|
|
147
|
+
*) echo -e "${RED}❌ Unknown error type: $ERROR_TYPE${NC}"; exit 1 ;;
|
|
148
|
+
esac; then
|
|
149
|
+
log_attempt "SUCCESS"
|
|
150
|
+
echo -e "${GREEN}✅ Fixed after $ATTEMPT attempts${NC}"
|
|
151
|
+
exit 0
|
|
152
|
+
fi
|
|
153
|
+
|
|
154
|
+
log_attempt "FAILED"
|
|
155
|
+
|
|
156
|
+
if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then
|
|
157
|
+
echo "⏳ Waiting 2 seconds before retry..."
|
|
158
|
+
sleep 2
|
|
159
|
+
fi
|
|
160
|
+
done
|
|
161
|
+
|
|
162
|
+
echo -e "\n${RED}⛔ BLOCKED: Could not auto-fix after $MAX_ATTEMPTS attempts${NC}"
|
|
163
|
+
echo -e "${YELLOW}🙋 Human intervention required${NC}"
|
|
164
|
+
log_attempt "BLOCKED"
|
|
165
|
+
exit 1
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Mise Tasks con Auto-Recovery
|
|
169
|
+
|
|
170
|
+
```toml
|
|
171
|
+
# .mise.toml - Tasks mejorados con auto-recovery
|
|
172
|
+
|
|
173
|
+
[tasks."fix:auto"]
|
|
174
|
+
description = "Auto-detect and fix common errors"
|
|
175
|
+
run = """
|
|
176
|
+
#!/usr/bin/env bash
|
|
177
|
+
|
|
178
|
+
LAST_ERROR=$(cat .last-error 2>/dev/null || echo "")
|
|
179
|
+
|
|
180
|
+
if echo "$LAST_ERROR" | grep -qi "lint\|format\|prettier"; then
|
|
181
|
+
bash scripts/auto-fix.sh lint
|
|
182
|
+
elif echo "$LAST_ERROR" | grep -qi "import\|module\|cannot find"; then
|
|
183
|
+
bash scripts/auto-fix.sh imports
|
|
184
|
+
elif echo "$LAST_ERROR" | grep -qi "database\|postgres\|connection"; then
|
|
185
|
+
bash scripts/auto-fix.sh database
|
|
186
|
+
elif echo "$LAST_ERROR" | grep -qi "test.*failed\|assertion"; then
|
|
187
|
+
bash scripts/auto-fix.sh tests
|
|
188
|
+
elif echo "$LAST_ERROR" | grep -qi "type.*error"; then
|
|
189
|
+
bash scripts/auto-fix.sh types
|
|
190
|
+
else
|
|
191
|
+
echo "❓ No auto-fix available for this error"
|
|
192
|
+
exit 1
|
|
193
|
+
fi
|
|
194
|
+
"""
|
|
195
|
+
|
|
196
|
+
[tasks.test]
|
|
197
|
+
description = "Run tests with auto-recovery"
|
|
198
|
+
run = """
|
|
199
|
+
#!/usr/bin/env bash
|
|
200
|
+
|
|
201
|
+
ATTEMPT=0
|
|
202
|
+
MAX_ATTEMPTS=2
|
|
203
|
+
|
|
204
|
+
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
|
205
|
+
ATTEMPT=$((ATTEMPT + 1))
|
|
206
|
+
|
|
207
|
+
if mise run test:unit 2>&1 | tee .last-error; then
|
|
208
|
+
echo "✅ Tests passed"
|
|
209
|
+
exit 0
|
|
210
|
+
fi
|
|
211
|
+
|
|
212
|
+
echo "⚠️ Tests failed, attempt $ATTEMPT/$MAX_ATTEMPTS"
|
|
213
|
+
|
|
214
|
+
if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then
|
|
215
|
+
echo "Attempting auto-fix..."
|
|
216
|
+
bash scripts/auto-fix.sh tests || true
|
|
217
|
+
fi
|
|
218
|
+
done
|
|
219
|
+
|
|
220
|
+
echo "❌ Tests still failing after auto-fix"
|
|
221
|
+
exit 1
|
|
222
|
+
"""
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Git Hooks con Recovery Automático
|
|
226
|
+
|
|
227
|
+
```toml
|
|
228
|
+
# .mise.toml - Hooks con auto-fix
|
|
229
|
+
|
|
230
|
+
[hooks.pre-commit]
|
|
231
|
+
run = """
|
|
232
|
+
#!/usr/bin/env bash
|
|
233
|
+
set -e
|
|
234
|
+
|
|
235
|
+
echo "🎣 Running pre-commit hooks..."
|
|
236
|
+
|
|
237
|
+
# Lint con auto-fix automático
|
|
238
|
+
if ! mise run lint 2>&1 | tee .last-error; then
|
|
239
|
+
echo "⚠️ Lint failed, attempting auto-fix..."
|
|
240
|
+
|
|
241
|
+
if bash scripts/auto-fix.sh lint; then
|
|
242
|
+
echo "✅ Auto-fixed and re-staged"
|
|
243
|
+
git add -u
|
|
244
|
+
else
|
|
245
|
+
echo "❌ Could not auto-fix. Please fix manually."
|
|
246
|
+
exit 1
|
|
247
|
+
fi
|
|
248
|
+
fi
|
|
249
|
+
|
|
250
|
+
# Tests con auto-recovery (2 intentos)
|
|
251
|
+
ATTEMPT=0
|
|
252
|
+
while [ $ATTEMPT -lt 2 ]; do
|
|
253
|
+
if mise run test:changed; then
|
|
254
|
+
echo "✅ Tests passed"
|
|
255
|
+
break
|
|
256
|
+
fi
|
|
257
|
+
|
|
258
|
+
ATTEMPT=$((ATTEMPT + 1))
|
|
259
|
+
if [ $ATTEMPT -lt 2 ]; then
|
|
260
|
+
echo "Attempting test auto-fix..."
|
|
261
|
+
bash scripts/auto-fix.sh tests || true
|
|
262
|
+
else
|
|
263
|
+
echo "❌ Tests failing after auto-fix"
|
|
264
|
+
exit 1
|
|
265
|
+
fi
|
|
266
|
+
done
|
|
267
|
+
|
|
268
|
+
echo "✅ Pre-commit checks passed!"
|
|
269
|
+
"""
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## 📊 Context Script (Para Claude Code)
|
|
275
|
+
|
|
276
|
+
### Problema: Context Window Pollution
|
|
277
|
+
|
|
278
|
+
**Sin Context Script:**
|
|
279
|
+
```
|
|
280
|
+
Claude Code debe leer:
|
|
281
|
+
❌ 50+ archivos para entender estado
|
|
282
|
+
❌ 10,000+ tokens consumidos
|
|
283
|
+
❌ Lento y costoso
|
|
284
|
+
❌ Pierde contexto entre turnos
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**Con Context Script:**
|
|
288
|
+
```
|
|
289
|
+
Claude Code ejecuta:
|
|
290
|
+
✅ 1 comando → Estado completo
|
|
291
|
+
✅ < 500 tokens
|
|
292
|
+
✅ JSON parseable
|
|
293
|
+
✅ Rápido y barato
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Implementación Completa
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
#!/bin/bash
|
|
300
|
+
# scripts/agent-context.sh
|
|
301
|
+
# Proporciona estado completo del proyecto en < 500 tokens
|
|
302
|
+
|
|
303
|
+
cat << EOF
|
|
304
|
+
{
|
|
305
|
+
"timestamp": "$(date -Iseconds)",
|
|
306
|
+
"git": {
|
|
307
|
+
"branch": "$(git branch --show-current)",
|
|
308
|
+
"status": "$(git status -s | wc -l) files changed",
|
|
309
|
+
"last_commit": "$(git log -1 --pretty=format:'%h - %s (%ar)')",
|
|
310
|
+
"unpushed": $(git log origin/$(git branch --show-current)..HEAD --oneline 2>/dev/null | wc -l)
|
|
311
|
+
},
|
|
312
|
+
"tools": {
|
|
313
|
+
"node": "$(mise current node 2>/dev/null || echo 'not installed')",
|
|
314
|
+
"python": "$(mise current python 2>/dev/null || echo 'not installed')",
|
|
315
|
+
"go": "$(mise current go 2>/dev/null || echo 'not installed')"
|
|
316
|
+
},
|
|
317
|
+
"tests": {
|
|
318
|
+
"status": "$(mise run test:unit >/dev/null 2>&1 && echo 'passing' || echo 'failing')",
|
|
319
|
+
"coverage": "$(grep -oP '\d+%' coverage.txt 2>/dev/null | head -1 || echo 'unknown')",
|
|
320
|
+
"last_run": "$(stat -f '%Sm' -t '%Y-%m-%d %H:%M' .last-test 2>/dev/null || echo 'never')"
|
|
321
|
+
},
|
|
322
|
+
"database": {
|
|
323
|
+
"migrations": $(ls migrations/*.sql 2>/dev/null | wc -l),
|
|
324
|
+
"pending": $(mise run db:status 2>/dev/null | grep -c 'pending' || echo 0),
|
|
325
|
+
"connection": "$(psql "$DATABASE_URL" -c 'SELECT 1' >/dev/null 2>&1 && echo 'ok' || echo 'failed')"
|
|
326
|
+
},
|
|
327
|
+
"build": {
|
|
328
|
+
"lint": "$(mise run lint >/dev/null 2>&1 && echo 'passing' || echo 'failing')",
|
|
329
|
+
"last_error": "$(tail -n 3 .last-error 2>/dev/null || echo 'none')"
|
|
330
|
+
},
|
|
331
|
+
"todos": [
|
|
332
|
+
$(grep -r "TODO\|FIXME" src/ 2>/dev/null | head -n 5 | sed 's/"/\\"/g' | awk '{print " \"" $0 "\""}' | paste -sd,)
|
|
333
|
+
],
|
|
334
|
+
"phase": "$([ -f docker-compose.yml ] && echo 'alpha' || echo 'mvp')",
|
|
335
|
+
"health": {
|
|
336
|
+
"api_running": $(curl -s http://localhost:8080/health >/dev/null 2>&1 && echo 'true' || echo 'false'),
|
|
337
|
+
"db_running": $(docker ps | grep -q postgres && echo 'true' || echo 'false')
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
EOF
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### Mise Integration
|
|
344
|
+
|
|
345
|
+
```toml
|
|
346
|
+
# .mise.toml
|
|
347
|
+
|
|
348
|
+
[tasks.context]
|
|
349
|
+
description = "Show complete project context (for AI agents)"
|
|
350
|
+
run = "bash scripts/agent-context.sh"
|
|
351
|
+
alias = "ctx"
|
|
352
|
+
|
|
353
|
+
[tasks."context:watch"]
|
|
354
|
+
description = "Watch context changes in real-time"
|
|
355
|
+
run = "watch -n 2 'bash scripts/agent-context.sh | jq'"
|
|
356
|
+
|
|
357
|
+
[tasks."context:save"]
|
|
358
|
+
description = "Save context snapshot"
|
|
359
|
+
run = "bash scripts/agent-context.sh > .context-snapshot-$(date +%s).json"
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### Workflow para Claude Code
|
|
363
|
+
|
|
364
|
+
```markdown
|
|
365
|
+
# En cada turno, Claude Code ejecuta:
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
mise run context
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
# Output (< 500 tokens):
|
|
372
|
+
```json
|
|
373
|
+
{
|
|
374
|
+
"timestamp": "2025-12-23T15:30:00Z",
|
|
375
|
+
"git": {
|
|
376
|
+
"branch": "feat/01-user-auth",
|
|
377
|
+
"status": "3 files changed",
|
|
378
|
+
"last_commit": "abc123 - add User model (2 minutes ago)"
|
|
379
|
+
},
|
|
380
|
+
"tests": { "status": "failing", "coverage": "75%" },
|
|
381
|
+
"database": { "migrations": 3, "pending": 0 },
|
|
382
|
+
"build": { "lint": "passing" },
|
|
383
|
+
"phase": "mvp",
|
|
384
|
+
"health": { "api_running": false, "db_running": true }
|
|
385
|
+
}
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
**El agente ahora sabe TODO sin leer archivos!** ✨
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
##
|
|
394
|
+
imports) auto_fix_imports && exit 0 ;;
|
|
395
|
+
database) auto_fix_database && exit 0 ;;
|
|
396
|
+
tests) auto_fix_tests && exit 0 ;;
|
|
397
|
+
esac
|
|
398
|
+
|
|
399
|
+
sleep 2
|
|
400
|
+
done
|
|
401
|
+
|
|
402
|
+
echo "⛔ BLOCKED: Could not auto-fix after $MAX_ATTEMPTS attempts"
|
|
403
|
+
echo "🙋 Human intervention required"
|
|
404
|
+
exit 1
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Categorías de Errores y Fixes Automáticos
|
|
408
|
+
|
|
409
|
+
**1. Errores de Linting:**
|
|
410
|
+
```bash
|
|
411
|
+
❌ ESLint: Unexpected token
|
|
412
|
+
→ mise run format && mise run lint --fix
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
**2. Errores de Imports:**
|
|
416
|
+
```bash
|
|
417
|
+
❌ Cannot find module '@/models/User'
|
|
418
|
+
→ bun install (o uv sync, go mod tidy)
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
**3. Errores de Database:**
|
|
422
|
+
```bash
|
|
423
|
+
❌ Connection refused
|
|
424
|
+
→ mise run docker:up && mise run db:migrate
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
**4. Errores de Tests:**
|
|
428
|
+
```bash
|
|
429
|
+
❌ Test failed
|
|
430
|
+
→ rm -rf .cache && mise run test:unit
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Mise Tasks con Auto-Recovery
|
|
434
|
+
|
|
435
|
+
```toml
|
|
436
|
+
# .mise.toml
|
|
437
|
+
|
|
438
|
+
[tasks."fix:auto"]
|
|
439
|
+
description = "Auto-detect and fix common errors"
|
|
440
|
+
run = """
|
|
441
|
+
#!/usr/bin/env bash
|
|
442
|
+
LAST_ERROR=$(cat .last-error 2>/dev/null || echo "")
|
|
443
|
+
|
|
444
|
+
if echo "$LAST_ERROR" | grep -qi "lint"; then
|
|
445
|
+
bash scripts/auto-fix.sh lint
|
|
446
|
+
elif echo "$LAST_ERROR" | grep -qi "import"; then
|
|
447
|
+
bash scripts/auto-fix.sh imports
|
|
448
|
+
elif echo "$LAST_ERROR" | grep -qi "database"; then
|
|
449
|
+
bash scripts/auto-fix.sh database
|
|
450
|
+
elif echo "$LAST_ERROR" | grep -qi "test"; then
|
|
451
|
+
bash scripts/auto-fix.sh tests
|
|
452
|
+
fi
|
|
453
|
+
"""
|
|
454
|
+
|
|
455
|
+
[tasks.test]
|
|
456
|
+
description = "Run tests with auto-recovery"
|
|
457
|
+
run = """
|
|
458
|
+
#!/usr/bin/env bash
|
|
459
|
+
ATTEMPT=0
|
|
460
|
+
MAX_ATTEMPTS=2
|
|
461
|
+
|
|
462
|
+
while [ $ATTEMPT -lt $MAX_ATTEMPTS ]; do
|
|
463
|
+
ATTEMPT=$((ATTEMPT + 1))
|
|
464
|
+
|
|
465
|
+
if mise run test:unit; then
|
|
466
|
+
echo "✅ Tests passed"
|
|
467
|
+
exit 0
|
|
468
|
+
fi
|
|
469
|
+
|
|
470
|
+
if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then
|
|
471
|
+
echo "⚠️ Attempting auto-fix..."
|
|
472
|
+
bash scripts/auto-fix.sh tests
|
|
473
|
+
fi
|
|
474
|
+
done
|
|
475
|
+
|
|
476
|
+
echo "❌ Tests still failing"
|
|
477
|
+
exit 1
|
|
478
|
+
"""
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### Git Hooks con Recovery
|
|
482
|
+
|
|
483
|
+
```toml
|
|
484
|
+
[hooks.pre-commit]
|
|
485
|
+
run = """
|
|
486
|
+
#!/usr/bin/env bash
|
|
487
|
+
set -e
|
|
488
|
+
|
|
489
|
+
# Lint con auto-fix
|
|
490
|
+
if ! mise run lint; then
|
|
491
|
+
echo "⚠️ Lint failed, attempting auto-fix..."
|
|
492
|
+
bash scripts/auto-fix.sh lint && git add -u
|
|
493
|
+
fi
|
|
494
|
+
|
|
495
|
+
# Tests con retry
|
|
496
|
+
ATTEMPT=0
|
|
497
|
+
while [ $ATTEMPT -lt 2 ]; do
|
|
498
|
+
if mise run test:changed; then
|
|
499
|
+
break
|
|
500
|
+
fi
|
|
501
|
+
ATTEMPT=$((ATTEMPT + 1))
|
|
502
|
+
[ $ATTEMPT -lt 2 ] && bash scripts/auto-fix.sh tests
|
|
503
|
+
done
|
|
504
|
+
|
|
505
|
+
echo "✅ Pre-commit checks passed!"
|
|
506
|
+
"""
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
---
|
|
510
|
+
|
|
511
|
+
## 🎯 Progressive Disclosure (Setup en Fases)
|
|
512
|
+
|
|
513
|
+
### Filosofía: No Abrumar al Inicio
|
|
514
|
+
|
|
515
|
+
**Antes:**
|
|
516
|
+
```
|
|
517
|
+
Día 1: Instalar 15 herramientas → 3 horas ❌
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
**Ahora:**
|
|
521
|
+
```
|
|
522
|
+
MVP (15 min): mise + SQLite → Código funcionando ✅
|
|
523
|
+
Alpha (1h): PostgreSQL + CI
|
|
524
|
+
Beta (2-3h): Monitoring + Deploy
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
### Fase 1: MVP (5-15 minutos)
|
|
528
|
+
|
|
529
|
+
```bash
|
|
530
|
+
#!/bin/bash
|
|
531
|
+
# scripts/setup-mvp.sh
|
|
532
|
+
|
|
533
|
+
echo "🚀 Setting up MVP (5-15 minutes)"
|
|
534
|
+
|
|
535
|
+
# Instalar Mise
|
|
536
|
+
if ! command -v mise &> /dev/null; then
|
|
537
|
+
curl https://mise.run | sh
|
|
538
|
+
fi
|
|
539
|
+
|
|
540
|
+
# Instalar herramientas
|
|
541
|
+
mise install
|
|
542
|
+
|
|
543
|
+
# Crear .env mínimo (SQLite, sin Docker)
|
|
544
|
+
cat > .env << EOF
|
|
545
|
+
DATABASE_URL=sqlite:///dev.db
|
|
546
|
+
NODE_ENV=development
|
|
547
|
+
EOF
|
|
548
|
+
|
|
549
|
+
# Setup git hooks
|
|
550
|
+
mise hook-env
|
|
551
|
+
|
|
552
|
+
echo "✅ MVP Setup Complete!"
|
|
553
|
+
echo "🎉 Ready to code! Run: mise run dev"
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
### Fase 2: Alpha (1 hora)
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
#!/bin/bash
|
|
560
|
+
# scripts/setup-alpha.sh
|
|
561
|
+
|
|
562
|
+
echo "🚀 Upgrading to Alpha (1 hour)"
|
|
563
|
+
|
|
564
|
+
# Docker Compose
|
|
565
|
+
cat > docker-compose.yml << EOF
|
|
566
|
+
version: '3.8'
|
|
567
|
+
services:
|
|
568
|
+
db:
|
|
569
|
+
image: postgres:16-alpine
|
|
570
|
+
environment:
|
|
571
|
+
POSTGRES_DB: mydb
|
|
572
|
+
POSTGRES_USER: postgres
|
|
573
|
+
POSTGRES_PASSWORD: postgres
|
|
574
|
+
ports:
|
|
575
|
+
- "5432:5432"
|
|
576
|
+
EOF
|
|
577
|
+
|
|
578
|
+
# Iniciar PostgreSQL
|
|
579
|
+
mise run docker:up
|
|
580
|
+
|
|
581
|
+
# Actualizar .env
|
|
582
|
+
sed -i 's|sqlite|postgresql://postgres:postgres@localhost:5432/mydb|' .env
|
|
583
|
+
|
|
584
|
+
# Migraciones
|
|
585
|
+
mise run db:migrate
|
|
586
|
+
|
|
587
|
+
# Setup CI básico
|
|
588
|
+
mkdir -p .github/workflows
|
|
589
|
+
# Copiar CI template...
|
|
590
|
+
|
|
591
|
+
echo "✅ Alpha Complete!"
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
### Fase 3: Beta (2-3 horas)
|
|
595
|
+
|
|
596
|
+
```bash
|
|
597
|
+
#!/bin/bash
|
|
598
|
+
# scripts/setup-beta.sh
|
|
599
|
+
|
|
600
|
+
echo "🚀 Upgrading to Beta (2-3 hours)"
|
|
601
|
+
|
|
602
|
+
# Monitoring, deployment, secrets
|
|
603
|
+
echo "Choose deployment platform:"
|
|
604
|
+
echo " 1) Railway"
|
|
605
|
+
echo " 2) Koyeb"
|
|
606
|
+
echo " 3) Coolify"
|
|
607
|
+
read -p "Choice: " choice
|
|
608
|
+
|
|
609
|
+
# Setup según elección...
|
|
610
|
+
|
|
611
|
+
echo "✅ Beta Complete - Production ready!"
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
### Mise Tasks para Fases
|
|
615
|
+
|
|
616
|
+
```toml
|
|
617
|
+
[tasks."setup:mvp"]
|
|
618
|
+
description = "Phase 1: MVP (5-15 min)"
|
|
619
|
+
run = "bash scripts/setup-mvp.sh"
|
|
620
|
+
|
|
621
|
+
[tasks."setup:alpha"]
|
|
622
|
+
description = "Phase 2: Alpha (1 hour)"
|
|
623
|
+
run = "bash scripts/setup-alpha.sh"
|
|
624
|
+
|
|
625
|
+
[tasks."setup:beta"]
|
|
626
|
+
description = "Phase 3: Beta (2-3 hours)"
|
|
627
|
+
run = "bash scripts/setup-beta.sh"
|
|
628
|
+
|
|
629
|
+
[tasks.setup]
|
|
630
|
+
description = "Interactive setup wizard"
|
|
631
|
+
run = """
|
|
632
|
+
echo "Choose phase:"
|
|
633
|
+
echo " 1) MVP - Quick start (15 min)"
|
|
634
|
+
echo " 2) Alpha - Full dev (1 hour)"
|
|
635
|
+
echo " 3) Beta - Production (2-3 hours)"
|
|
636
|
+
read -p "Choice [1-3]: " choice
|
|
637
|
+
|
|
638
|
+
case $choice in
|
|
639
|
+
1) mise run setup:mvp ;;
|
|
640
|
+
2) mise run setup:alpha ;;
|
|
641
|
+
3) mise run setup:beta ;;
|
|
642
|
+
esac
|
|
643
|
+
"""
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
---
|
|
647
|
+
|
|
648
|
+
## 📊 Context Script (para Claude Code)
|
|
649
|
+
|
|
650
|
+
### Problema: Context Window Pollution
|
|
651
|
+
|
|
652
|
+
**Sin Context Script:**
|
|
653
|
+
```
|
|
654
|
+
❌ Claude lee 50+ archivos → 10,000 tokens
|
|
655
|
+
❌ Lento y costoso
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
**Con Context Script:**
|
|
659
|
+
```
|
|
660
|
+
✅ 1 comando → Estado completo → < 500 tokens
|
|
661
|
+
✅ JSON parseable
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
### Implementación
|
|
665
|
+
|
|
666
|
+
```bash
|
|
667
|
+
#!/bin/bash
|
|
668
|
+
# scripts/agent-context.sh
|
|
669
|
+
|
|
670
|
+
cat << EOF
|
|
671
|
+
{
|
|
672
|
+
"timestamp": "$(date -Iseconds)",
|
|
673
|
+
"git": {
|
|
674
|
+
"branch": "$(git branch --show-current)",
|
|
675
|
+
"status": "$(git status -s | wc -l) files changed",
|
|
676
|
+
"last_commit": "$(git log -1 --pretty=format:'%h - %s')"
|
|
677
|
+
},
|
|
678
|
+
"tools": {
|
|
679
|
+
"node": "$(mise current node 2>/dev/null || echo 'N/A')",
|
|
680
|
+
"python": "$(mise current python 2>/dev/null || echo 'N/A')",
|
|
681
|
+
"go": "$(mise current go 2>/dev/null || echo 'N/A')"
|
|
682
|
+
},
|
|
683
|
+
"tests": {
|
|
684
|
+
"status": "$(mise run test:unit >/dev/null 2>&1 && echo 'passing' || echo 'failing')",
|
|
685
|
+
"coverage": "$(grep -oP '\d+%' coverage.txt 2>/dev/null || echo 'unknown')"
|
|
686
|
+
},
|
|
687
|
+
"database": {
|
|
688
|
+
"migrations": $(ls migrations/*.sql 2>/dev/null | wc -l),
|
|
689
|
+
"pending": $(mise run db:status 2>/dev/null | grep -c 'pending' || echo 0),
|
|
690
|
+
"connection": "$(psql "$DATABASE_URL" -c 'SELECT 1' >/dev/null 2>&1 && echo 'ok' || echo 'failed')"
|
|
691
|
+
},
|
|
692
|
+
"build": {
|
|
693
|
+
"lint": "$(mise run lint >/dev/null 2>&1 && echo 'passing' || echo 'failing')",
|
|
694
|
+
"last_error": "$(tail -n 3 .last-error 2>/dev/null || echo 'none')"
|
|
695
|
+
},
|
|
696
|
+
"todos": [
|
|
697
|
+
$(grep -r "TODO\|FIXME" src/ 2>/dev/null | head -n 5 | awk '{print "\"" $0 "\""}' | paste -sd,)
|
|
698
|
+
],
|
|
699
|
+
"phase": "$([ -f docker-compose.yml ] && echo 'alpha' || echo 'mvp')",
|
|
700
|
+
"health": {
|
|
701
|
+
"api_running": $(curl -s http://localhost:8080/health >/dev/null 2>&1 && echo 'true' || echo 'false'),
|
|
702
|
+
"db_running": $(docker ps | grep -q postgres && echo 'true' || echo 'false')
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
EOF
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
### Mise Integration
|
|
709
|
+
|
|
710
|
+
```toml
|
|
711
|
+
[tasks.context]
|
|
712
|
+
description = "Show complete project context (for AI agents)"
|
|
713
|
+
run = "bash scripts/agent-context.sh"
|
|
714
|
+
alias = "ctx"
|
|
715
|
+
|
|
716
|
+
[tasks."context:watch"]
|
|
717
|
+
description = "Watch context in real-time"
|
|
718
|
+
run = "watch -n 2 'bash scripts/agent-context.sh | jq'"
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
### Uso en Claude Code
|
|
722
|
+
|
|
723
|
+
```bash
|
|
724
|
+
# Al inicio de cada turno
|
|
725
|
+
mise run context
|
|
726
|
+
|
|
727
|
+
# Claude obtiene TODO el estado en < 500 tokens:
|
|
728
|
+
# - Qué rama está activa
|
|
729
|
+
# - Tests passing/failing
|
|
730
|
+
# - Migraciones pendientes
|
|
731
|
+
# - TODOs pendientes
|
|
732
|
+
# - Health checks
|
|
733
|
+
# - Fase del proyecto (mvp/alpha/beta)
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
## 🔄 Atomic Sequential Merges (El Corazón del Agente)
|
|
739
|
+
|
|
740
|
+
### ⚠️ Aclaración Importante: NO es "1 rama = 1 commit"
|
|
741
|
+
|
|
742
|
+
```
|
|
743
|
+
❌ MODELO INCORRECTO (lo que NO debes hacer):
|
|
744
|
+
|
|
745
|
+
feat/01-add-model → 1 commit → merge
|
|
746
|
+
feat/02-add-migration → 1 commit → merge
|
|
747
|
+
feat/03-add-tests → 1 commit → merge
|
|
748
|
+
|
|
749
|
+
Problema: Crear una rama nueva por cada commit es una locura
|
|
750
|
+
```
|
|
751
|
+
|
|
752
|
+
```
|
|
753
|
+
✅ MODELO CORRECTO (Atomic Sequential Merges):
|
|
754
|
+
|
|
755
|
+
feat/01-database-schema (UNA SOLA RAMA)
|
|
756
|
+
├─ commit: "add User model"
|
|
757
|
+
├─ commit: "add Post model"
|
|
758
|
+
├─ commit: "add migration script"
|
|
759
|
+
├─ commit: "add tests"
|
|
760
|
+
└─ SQUASH MERGE → develop (4 commits → 1 commit limpio)
|
|
761
|
+
|
|
762
|
+
feat/02-api-endpoints (siguiente rama)
|
|
763
|
+
├─ commit: "add GET /users endpoint"
|
|
764
|
+
├─ commit: "add POST /users endpoint"
|
|
765
|
+
├─ commit: "add validation middleware"
|
|
766
|
+
├─ commit: "add error handling"
|
|
767
|
+
├─ commit: "add tests"
|
|
768
|
+
└─ SQUASH MERGE → develop (5 commits → 1 commit limpio)
|
|
769
|
+
|
|
770
|
+
Ventaja:
|
|
771
|
+
✅ Una rama = un paso completo
|
|
772
|
+
✅ Múltiples commits durante desarrollo
|
|
773
|
+
✅ Historia limpia en develop (1 commit por paso)
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
### El Problema con Stacked PRs para Solo Devs
|
|
777
|
+
|
|
778
|
+
```
|