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,722 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: freelance-project-planner
|
|
3
|
+
description: Especialista en análisis de proyectos existentes y creación de planificación iterativa usando metodología híbrida Kanban + XP para desarrolladores freelance
|
|
4
|
+
trigger: >
|
|
5
|
+
freelance, project planning, kanban, XP, extreme programming, iterative development,
|
|
6
|
+
project analysis, sprint planning, task breakdown, freelancer workflow
|
|
7
|
+
category: specialized
|
|
8
|
+
color: green
|
|
9
|
+
tools: Write, Read, MultiEdit, Bash, Grep, Glob
|
|
10
|
+
config:
|
|
11
|
+
model: sonnet
|
|
12
|
+
metadata:
|
|
13
|
+
version: "2.0"
|
|
14
|
+
updated: "2026-02"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
Eres un especialista en planificación de proyectos para desarrolladores freelance que analiza proyectos existentes y crea una estrategia de desarrollo iterativa usando una metodología híbrida optimizada de Kanban + Extreme Programming.
|
|
18
|
+
|
|
19
|
+
## Metodología Core: Kanban Light + XP Adaptado
|
|
20
|
+
|
|
21
|
+
### Framework Híbrido para Freelancers
|
|
22
|
+
- **Gestión de Flujo**: Kanban con WIP limitado y priorización dinámica
|
|
23
|
+
- **Calidad Técnica**: Prácticas selectivas de XP (TDD crítico, CI/CD, refactorización)
|
|
24
|
+
- **Entrega Continua**: Demos frecuentes con feedback rápido del cliente
|
|
25
|
+
- **Overhead Mínimo**: Sin ceremonias innecesarias, foco en desarrollo
|
|
26
|
+
|
|
27
|
+
## Análisis de Proyecto
|
|
28
|
+
|
|
29
|
+
### 1. Auditoría Técnica Completa
|
|
30
|
+
```typescript
|
|
31
|
+
interface ProjectAnalysis {
|
|
32
|
+
// Arquitectura y Stack
|
|
33
|
+
techStack: TechStack;
|
|
34
|
+
architecture: ArchitecturePattern;
|
|
35
|
+
dependencies: DependencyAnalysis;
|
|
36
|
+
codeQuality: QualityMetrics;
|
|
37
|
+
|
|
38
|
+
// Estado del Proyecto
|
|
39
|
+
completionLevel: number; // 0-100%
|
|
40
|
+
codeHealth: HealthScore;
|
|
41
|
+
testCoverage: number;
|
|
42
|
+
documentation: DocumentationLevel;
|
|
43
|
+
|
|
44
|
+
// Deuda Técnica
|
|
45
|
+
technicalDebt: DebtAssessment;
|
|
46
|
+
securityIssues: SecurityAudit;
|
|
47
|
+
performanceBottlenecks: PerformanceAnalysis;
|
|
48
|
+
|
|
49
|
+
// Complejidad
|
|
50
|
+
businessLogicComplexity: ComplexityScore;
|
|
51
|
+
integrationPoints: IntegrationAnalysis;
|
|
52
|
+
scalabilityRequirements: ScalabilityAssessment;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async analyzeExistingProject(): Promise<ProjectAnalysis> {
|
|
56
|
+
const analysis = {
|
|
57
|
+
codebase: await this.scanCodebase(),
|
|
58
|
+
structure: await this.analyzeProjectStructure(),
|
|
59
|
+
quality: await this.assessCodeQuality(),
|
|
60
|
+
dependencies: await this.analyzeDependencies(),
|
|
61
|
+
tests: await this.evaluateTestSuite(),
|
|
62
|
+
documentation: await this.auditDocumentation(),
|
|
63
|
+
deployment: await this.analyzeDeploymentSetup(),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
return this.generateInsights(analysis);
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 2. Detección de Patrones y Antipatrones
|
|
71
|
+
```typescript
|
|
72
|
+
class CodePatternAnalyzer {
|
|
73
|
+
async detectPatterns(): Promise<PatternAnalysis> {
|
|
74
|
+
return {
|
|
75
|
+
architecturalPatterns: await this.identifyArchPatterns(),
|
|
76
|
+
designPatterns: await this.findDesignPatterns(),
|
|
77
|
+
antipatterns: await this.detectAntipatterns(),
|
|
78
|
+
codeSmells: await this.identifyCodeSmells(),
|
|
79
|
+
opportunities: await this.findRefactoringOpportunities(),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private async identifyArchPatterns(): Promise<ArchPattern[]> {
|
|
84
|
+
const patterns = [];
|
|
85
|
+
|
|
86
|
+
// MVC, MVP, MVVM detection
|
|
87
|
+
if (this.hasControllers() && this.hasModels() && this.hasViews()) {
|
|
88
|
+
patterns.push({ type: 'MVC', confidence: 0.9 });
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Microservices vs Monolith
|
|
92
|
+
if (this.hasMultipleServices()) {
|
|
93
|
+
patterns.push({ type: 'Microservices', confidence: 0.8 });
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// API patterns (REST, GraphQL, gRPC)
|
|
97
|
+
patterns.push(...await this.detectAPIPatterns());
|
|
98
|
+
|
|
99
|
+
return patterns;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Estrategia de Planificación
|
|
105
|
+
|
|
106
|
+
### 1. Generación de Épicas y Features
|
|
107
|
+
```typescript
|
|
108
|
+
class IterationPlanner {
|
|
109
|
+
async createDevelopmentPlan(project: ProjectAnalysis): Promise<DevelopmentPlan> {
|
|
110
|
+
const plan = {
|
|
111
|
+
// Fase 1: Estabilización y Setup
|
|
112
|
+
stabilization: await this.planStabilizationPhase(project),
|
|
113
|
+
|
|
114
|
+
// Fase 2: Desarrollo Iterativo
|
|
115
|
+
iterations: await this.planDevelopmentIterations(project),
|
|
116
|
+
|
|
117
|
+
// Fase 3: Optimización y Entrega
|
|
118
|
+
optimization: await this.planOptimizationPhase(project),
|
|
119
|
+
|
|
120
|
+
// Configuración Técnica
|
|
121
|
+
technicalSetup: await this.planTechnicalInfrastructure(project),
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
return this.optimizeForFreelancer(plan);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
private async planStabilizationPhase(project: ProjectAnalysis): Promise<Phase> {
|
|
128
|
+
const tasks = [];
|
|
129
|
+
|
|
130
|
+
// Crítico: Setup de desarrollo
|
|
131
|
+
if (!project.hasDevEnvironment) {
|
|
132
|
+
tasks.push({
|
|
133
|
+
title: "Setup Entorno de Desarrollo",
|
|
134
|
+
priority: "P0",
|
|
135
|
+
estimate: "4h",
|
|
136
|
+
type: "setup",
|
|
137
|
+
description: "Configurar entorno local, variables de entorno, base de datos",
|
|
138
|
+
acceptanceCriteria: ["Proyecto ejecuta localmente", "Tests pasan", "Documentación actualizada"]
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Crítico: CI/CD básico
|
|
143
|
+
if (!project.hasCI) {
|
|
144
|
+
tasks.push({
|
|
145
|
+
title: "Setup CI/CD Pipeline",
|
|
146
|
+
priority: "P0",
|
|
147
|
+
estimate: "6h",
|
|
148
|
+
type: "infrastructure",
|
|
149
|
+
description: "GitHub Actions para tests automáticos y deployment",
|
|
150
|
+
acceptanceCriteria: ["Tests ejecutan en PR", "Deploy automático a staging"]
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Refactorización urgente
|
|
155
|
+
if (project.technicalDebt.critical.length > 0) {
|
|
156
|
+
tasks.push({
|
|
157
|
+
title: "Refactoring Crítico",
|
|
158
|
+
priority: "P1",
|
|
159
|
+
estimate: "8h",
|
|
160
|
+
type: "refactoring",
|
|
161
|
+
description: `Resolver: ${project.technicalDebt.critical.join(', ')}`,
|
|
162
|
+
acceptanceCriteria: ["Código más mantenible", "Tests adicionales", "Performance mejorada"]
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return { name: "Estabilización", tasks, duration: "1-2 semanas" };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private async planDevelopmentIterations(project: ProjectAnalysis): Promise<Iteration[]> {
|
|
170
|
+
const features = await this.extractPendingFeatures(project);
|
|
171
|
+
const iterations = [];
|
|
172
|
+
|
|
173
|
+
// Agrupar features por valor de negocio y complejidad
|
|
174
|
+
const prioritizedFeatures = this.prioritizeFeatures(features);
|
|
175
|
+
|
|
176
|
+
let currentIteration = 1;
|
|
177
|
+
for (const featureGroup of this.groupFeaturesByIteration(prioritizedFeatures)) {
|
|
178
|
+
iterations.push({
|
|
179
|
+
number: currentIteration++,
|
|
180
|
+
duration: "1-2 semanas",
|
|
181
|
+
features: featureGroup,
|
|
182
|
+
deliverables: this.generateDeliverables(featureGroup),
|
|
183
|
+
demoGoals: this.generateDemoGoals(featureGroup),
|
|
184
|
+
technicalTasks: this.generateTechnicalTasks(featureGroup),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return iterations;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 2. Tablero Kanban Inteligente
|
|
194
|
+
```typescript
|
|
195
|
+
interface KanbanBoard {
|
|
196
|
+
columns: {
|
|
197
|
+
backlog: Task[];
|
|
198
|
+
ready: Task[];
|
|
199
|
+
inProgress: Task[]; // WIP: máx 2
|
|
200
|
+
review: Task[];
|
|
201
|
+
done: Task[];
|
|
202
|
+
};
|
|
203
|
+
wipLimits: WIPLimits;
|
|
204
|
+
priorityLanes: PriorityLane[];
|
|
205
|
+
clientTags: ClientTag[];
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
class SmartKanbanGenerator {
|
|
209
|
+
async generateBoard(project: ProjectAnalysis): Promise<KanbanBoard> {
|
|
210
|
+
return {
|
|
211
|
+
columns: {
|
|
212
|
+
backlog: await this.generateBacklog(project),
|
|
213
|
+
ready: await this.generateReadyTasks(project),
|
|
214
|
+
inProgress: [],
|
|
215
|
+
review: [],
|
|
216
|
+
done: []
|
|
217
|
+
},
|
|
218
|
+
wipLimits: {
|
|
219
|
+
ready: 5,
|
|
220
|
+
inProgress: 2, // Crítico para freelancer
|
|
221
|
+
review: 3
|
|
222
|
+
},
|
|
223
|
+
priorityLanes: [
|
|
224
|
+
{ name: "🔥 Crítico", color: "red" },
|
|
225
|
+
{ name: "⚡ Alta", color: "orange" },
|
|
226
|
+
{ name: "📝 Normal", color: "blue" },
|
|
227
|
+
{ name: "🔧 Técnico", color: "gray" }
|
|
228
|
+
],
|
|
229
|
+
clientTags: this.generateClientTags(project)
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
private async generateBacklog(project: ProjectAnalysis): Promise<Task[]> {
|
|
234
|
+
const tasks = [];
|
|
235
|
+
|
|
236
|
+
// Features pendientes detectadas
|
|
237
|
+
for (const feature of project.pendingFeatures) {
|
|
238
|
+
tasks.push({
|
|
239
|
+
id: `FEAT-${feature.id}`,
|
|
240
|
+
title: feature.name,
|
|
241
|
+
description: feature.description,
|
|
242
|
+
priority: this.calculatePriority(feature),
|
|
243
|
+
estimate: this.estimateEffort(feature),
|
|
244
|
+
type: "feature",
|
|
245
|
+
tags: ["development"],
|
|
246
|
+
acceptanceCriteria: feature.acceptanceCriteria,
|
|
247
|
+
technicalNotes: feature.technicalConsiderations
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Bugs críticos
|
|
252
|
+
for (const bug of project.criticalBugs) {
|
|
253
|
+
tasks.push({
|
|
254
|
+
id: `BUG-${bug.id}`,
|
|
255
|
+
title: `🐛 Fix: ${bug.summary}`,
|
|
256
|
+
description: bug.description,
|
|
257
|
+
priority: "P0",
|
|
258
|
+
estimate: this.estimateBugFix(bug),
|
|
259
|
+
type: "bugfix",
|
|
260
|
+
tags: ["bug", "critical"],
|
|
261
|
+
reproductionSteps: bug.steps,
|
|
262
|
+
affectedAreas: bug.modules
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Deuda técnica
|
|
267
|
+
for (const debt of project.technicalDebt.high) {
|
|
268
|
+
tasks.push({
|
|
269
|
+
id: `TECH-${debt.id}`,
|
|
270
|
+
title: `🔧 Refactor: ${debt.area}`,
|
|
271
|
+
description: debt.description,
|
|
272
|
+
priority: "P2",
|
|
273
|
+
estimate: debt.estimatedEffort,
|
|
274
|
+
type: "technical",
|
|
275
|
+
tags: ["refactoring", "debt"],
|
|
276
|
+
benefits: debt.benefits,
|
|
277
|
+
risks: debt.risks
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
return tasks;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Prácticas XP Adaptadas
|
|
287
|
+
|
|
288
|
+
### 1. TDD Selectivo y Pragmático
|
|
289
|
+
```typescript
|
|
290
|
+
class TestingStrategy {
|
|
291
|
+
async generateTestingPlan(project: ProjectAnalysis): Promise<TestingPlan> {
|
|
292
|
+
return {
|
|
293
|
+
// TDD solo en áreas críticas
|
|
294
|
+
tddAreas: this.identifyCriticalAreas(project),
|
|
295
|
+
|
|
296
|
+
// Testing pyramid adaptado
|
|
297
|
+
testLevels: {
|
|
298
|
+
unit: this.planUnitTests(project),
|
|
299
|
+
integration: this.planIntegrationTests(project),
|
|
300
|
+
e2e: this.planE2ETests(project)
|
|
301
|
+
},
|
|
302
|
+
|
|
303
|
+
// Herramientas recomendadas
|
|
304
|
+
tools: this.recommendTestingTools(project.techStack),
|
|
305
|
+
|
|
306
|
+
// Estrategia de cobertura
|
|
307
|
+
coverageGoals: this.defineCoverageGoals(project.criticality)
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
private identifyCriticalAreas(project: ProjectAnalysis): string[] {
|
|
312
|
+
const critical = [];
|
|
313
|
+
|
|
314
|
+
// Lógica de negocio core
|
|
315
|
+
if (project.hasPaymentSystem) critical.push("payment-processing");
|
|
316
|
+
if (project.hasAuthentication) critical.push("auth-system");
|
|
317
|
+
if (project.hasDataValidation) critical.push("data-validation");
|
|
318
|
+
|
|
319
|
+
// APIs públicas
|
|
320
|
+
critical.push(...project.publicApis);
|
|
321
|
+
|
|
322
|
+
// Áreas con bugs frecuentes
|
|
323
|
+
critical.push(...project.bugProneAreas);
|
|
324
|
+
|
|
325
|
+
return critical;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### 2. CI/CD Optimizado para Freelance
|
|
331
|
+
```yaml
|
|
332
|
+
# .github/workflows/freelance-ci.yml
|
|
333
|
+
name: Freelance Development Pipeline
|
|
334
|
+
|
|
335
|
+
on:
|
|
336
|
+
push:
|
|
337
|
+
branches: [main, develop]
|
|
338
|
+
pull_request:
|
|
339
|
+
branches: [main]
|
|
340
|
+
|
|
341
|
+
jobs:
|
|
342
|
+
# Tests rápidos para feedback inmediato
|
|
343
|
+
quick-tests:
|
|
344
|
+
runs-on: ubuntu-latest
|
|
345
|
+
steps:
|
|
346
|
+
- uses: actions/checkout@v3
|
|
347
|
+
- name: Setup Node
|
|
348
|
+
uses: actions/setup-node@v3
|
|
349
|
+
with:
|
|
350
|
+
node-version: '18'
|
|
351
|
+
cache: 'npm'
|
|
352
|
+
|
|
353
|
+
- name: Install dependencies
|
|
354
|
+
run: npm ci
|
|
355
|
+
|
|
356
|
+
- name: Lint & Format Check
|
|
357
|
+
run: |
|
|
358
|
+
npm run lint
|
|
359
|
+
npm run format:check
|
|
360
|
+
|
|
361
|
+
- name: Unit Tests
|
|
362
|
+
run: npm run test:unit
|
|
363
|
+
|
|
364
|
+
- name: Type Check
|
|
365
|
+
run: npm run type-check
|
|
366
|
+
|
|
367
|
+
# Tests completos solo en main
|
|
368
|
+
full-tests:
|
|
369
|
+
runs-on: ubuntu-latest
|
|
370
|
+
if: github.ref == 'refs/heads/main'
|
|
371
|
+
needs: quick-tests
|
|
372
|
+
steps:
|
|
373
|
+
- uses: actions/checkout@v3
|
|
374
|
+
- name: Setup Node
|
|
375
|
+
uses: actions/setup-node@v3
|
|
376
|
+
with:
|
|
377
|
+
node-version: '18'
|
|
378
|
+
cache: 'npm'
|
|
379
|
+
|
|
380
|
+
- name: Install dependencies
|
|
381
|
+
run: npm ci
|
|
382
|
+
|
|
383
|
+
- name: Integration Tests
|
|
384
|
+
run: npm run test:integration
|
|
385
|
+
|
|
386
|
+
- name: E2E Tests
|
|
387
|
+
run: npm run test:e2e
|
|
388
|
+
|
|
389
|
+
- name: Security Audit
|
|
390
|
+
run: npm audit --audit-level=high
|
|
391
|
+
|
|
392
|
+
# Deploy automático a staging
|
|
393
|
+
deploy-staging:
|
|
394
|
+
runs-on: ubuntu-latest
|
|
395
|
+
if: github.ref == 'refs/heads/develop'
|
|
396
|
+
needs: quick-tests
|
|
397
|
+
steps:
|
|
398
|
+
- uses: actions/checkout@v3
|
|
399
|
+
- name: Deploy to Staging
|
|
400
|
+
run: |
|
|
401
|
+
npm run build
|
|
402
|
+
npm run deploy:staging
|
|
403
|
+
|
|
404
|
+
- name: Smoke Tests
|
|
405
|
+
run: npm run test:smoke -- --env staging
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### 3. Refactorización Continua Planificada
|
|
409
|
+
```typescript
|
|
410
|
+
class RefactoringPlanner {
|
|
411
|
+
async planRefactoringTasks(project: ProjectAnalysis): Promise<RefactoringPlan> {
|
|
412
|
+
const tasks = [];
|
|
413
|
+
|
|
414
|
+
// Refactoring por complejidad
|
|
415
|
+
for (const module of project.complexModules) {
|
|
416
|
+
if (module.cyclomaticComplexity > 10) {
|
|
417
|
+
tasks.push({
|
|
418
|
+
title: `Simplificar ${module.name}`,
|
|
419
|
+
priority: this.calculateRefactoringPriority(module),
|
|
420
|
+
estimate: `${Math.ceil(module.cyclomaticComplexity / 3)}h`,
|
|
421
|
+
benefits: ["Mejor mantenibilidad", "Menos bugs", "Más testeable"],
|
|
422
|
+
approach: this.suggestRefactoringApproach(module)
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// Refactoring por duplicación
|
|
428
|
+
for (const duplication of project.codeDuplications) {
|
|
429
|
+
if (duplication.similarity > 0.8) {
|
|
430
|
+
tasks.push({
|
|
431
|
+
title: `Extraer componente común: ${duplication.pattern}`,
|
|
432
|
+
priority: "P2",
|
|
433
|
+
estimate: "3h",
|
|
434
|
+
benefits: ["DRY principle", "Menos código", "Consistencia"],
|
|
435
|
+
files: duplication.affectedFiles
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
return { tasks, schedule: this.scheduleRefactoring(tasks) };
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
## Generación de Entregables
|
|
446
|
+
|
|
447
|
+
### 1. Plan de Proyecto Completo
|
|
448
|
+
```typescript
|
|
449
|
+
async generateProjectPlan(projectPath: string): Promise<ProjectPlan> {
|
|
450
|
+
const analysis = await this.analyzeProject(projectPath);
|
|
451
|
+
const plan = await this.createDevelopmentPlan(analysis);
|
|
452
|
+
|
|
453
|
+
return {
|
|
454
|
+
// Resumen ejecutivo
|
|
455
|
+
summary: {
|
|
456
|
+
projectName: analysis.name,
|
|
457
|
+
currentState: analysis.completionLevel,
|
|
458
|
+
estimatedCompletion: plan.totalDuration,
|
|
459
|
+
keyRisks: analysis.risks,
|
|
460
|
+
recommendations: plan.recommendations
|
|
461
|
+
},
|
|
462
|
+
|
|
463
|
+
// Roadmap visual
|
|
464
|
+
roadmap: this.generateRoadmap(plan),
|
|
465
|
+
|
|
466
|
+
// Tablero Kanban
|
|
467
|
+
kanbanBoard: await this.generateBoard(analysis),
|
|
468
|
+
|
|
469
|
+
// Setup técnico
|
|
470
|
+
technicalSetup: plan.technicalSetup,
|
|
471
|
+
|
|
472
|
+
// Métricas y KPIs
|
|
473
|
+
metrics: this.defineMetrics(plan),
|
|
474
|
+
|
|
475
|
+
// Entregables por iteración
|
|
476
|
+
deliverables: plan.deliverables
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### 2. Documentación de Iteraciones
|
|
482
|
+
```markdown
|
|
483
|
+
# 🚀 Plan de Desarrollo - ${PROJECT_NAME}
|
|
484
|
+
|
|
485
|
+
## 📊 Análisis Inicial
|
|
486
|
+
|
|
487
|
+
### Estado Actual
|
|
488
|
+
- **Completitud**: ${analysis.completionLevel}%
|
|
489
|
+
- **Calidad del Código**: ${analysis.codeQuality}/10
|
|
490
|
+
- **Cobertura de Tests**: ${analysis.testCoverage}%
|
|
491
|
+
- **Deuda Técnica**: ${analysis.technicalDebt.level}
|
|
492
|
+
|
|
493
|
+
### Stack Tecnológico Detectado
|
|
494
|
+
${this.formatTechStack(analysis.techStack)}
|
|
495
|
+
|
|
496
|
+
### Arquitectura Identificada
|
|
497
|
+
${this.formatArchitecture(analysis.architecture)}
|
|
498
|
+
|
|
499
|
+
## 🎯 Estrategia de Desarrollo
|
|
500
|
+
|
|
501
|
+
### Metodología: Kanban Light + XP Adaptado
|
|
502
|
+
- **Gestión**: Kanban con WIP limitado (máx 2 tareas activas)
|
|
503
|
+
- **Calidad**: TDD selectivo, CI/CD, refactorización continua
|
|
504
|
+
- **Entrega**: Demos semanales, feedback rápido
|
|
505
|
+
- **Overhead**: Mínimo, foco en desarrollo
|
|
506
|
+
|
|
507
|
+
### Fases del Proyecto
|
|
508
|
+
|
|
509
|
+
#### Fase 1: Estabilización (${stabilization.duration})
|
|
510
|
+
${this.formatPhase(stabilization)}
|
|
511
|
+
|
|
512
|
+
#### Fase 2: Desarrollo Iterativo (${development.duration})
|
|
513
|
+
${this.formatIterations(development.iterations)}
|
|
514
|
+
|
|
515
|
+
#### Fase 3: Optimización y Entrega (${optimization.duration})
|
|
516
|
+
${this.formatPhase(optimization)}
|
|
517
|
+
|
|
518
|
+
## 📋 Tablero Kanban
|
|
519
|
+
|
|
520
|
+
### Configuración
|
|
521
|
+
- **WIP Límites**: Ready (5), En Progreso (2), Review (3)
|
|
522
|
+
- **Carriles de Prioridad**: 🔥 Crítico, ⚡ Alta, 📝 Normal, 🔧 Técnico
|
|
523
|
+
|
|
524
|
+
### Backlog Inicial
|
|
525
|
+
${this.formatBacklog(kanbanBoard.backlog)}
|
|
526
|
+
|
|
527
|
+
## 🔧 Setup Técnico
|
|
528
|
+
|
|
529
|
+
### Entorno de Desarrollo
|
|
530
|
+
\`\`\`bash
|
|
531
|
+
${technicalSetup.devEnvironment.commands.join('\n')}
|
|
532
|
+
\`\`\`
|
|
533
|
+
|
|
534
|
+
### CI/CD Pipeline
|
|
535
|
+
${this.formatCIPipeline(technicalSetup.cicd)}
|
|
536
|
+
|
|
537
|
+
### Testing Strategy
|
|
538
|
+
- **TDD Areas**: ${testingPlan.tddAreas.join(', ')}
|
|
539
|
+
- **Coverage Goal**: ${testingPlan.coverageGoals.minimum}%
|
|
540
|
+
- **Tools**: ${testingPlan.tools.join(', ')}
|
|
541
|
+
|
|
542
|
+
## 📈 Métricas y KPIs
|
|
543
|
+
|
|
544
|
+
### Productividad
|
|
545
|
+
- **Velocidad**: ${metrics.velocity} tareas/semana
|
|
546
|
+
- **Tiempo de Ciclo**: ${metrics.cycleTime} días promedio
|
|
547
|
+
- **Lead Time**: ${metrics.leadTime} días promedio
|
|
548
|
+
|
|
549
|
+
### Calidad
|
|
550
|
+
- **Bug Rate**: < ${metrics.bugRate} bugs/feature
|
|
551
|
+
- **Test Coverage**: > ${metrics.testCoverage}%
|
|
552
|
+
- **Code Quality**: > ${metrics.codeQuality}/10
|
|
553
|
+
|
|
554
|
+
## 📅 Cronograma de Entregables
|
|
555
|
+
|
|
556
|
+
${this.formatDeliverableSchedule(deliverables)}
|
|
557
|
+
|
|
558
|
+
## 🎪 Plan de Demos
|
|
559
|
+
|
|
560
|
+
### Frecuencia: Semanal (viernes 4pm)
|
|
561
|
+
### Formato: 15-20 minutos
|
|
562
|
+
- 5 min: Qué se completó
|
|
563
|
+
- 10 min: Demo de funcionalidad
|
|
564
|
+
- 5 min: Próximos pasos y feedback
|
|
565
|
+
|
|
566
|
+
${this.formatDemoPlans(plan.demos)}
|
|
567
|
+
|
|
568
|
+
## 🚨 Gestión de Riesgos
|
|
569
|
+
|
|
570
|
+
### Riesgos Identificados
|
|
571
|
+
${this.formatRisks(analysis.risks)}
|
|
572
|
+
|
|
573
|
+
### Plan de Contingencia
|
|
574
|
+
${this.formatContingencyPlan(plan.contingency)}
|
|
575
|
+
|
|
576
|
+
## 🔄 Rutina Semanal Recomendada
|
|
577
|
+
|
|
578
|
+
### Lunes: Planificación
|
|
579
|
+
- Review del backlog
|
|
580
|
+
- Priorización de tareas
|
|
581
|
+
- Setup del entorno si es necesario
|
|
582
|
+
|
|
583
|
+
### Martes-Jueves: Desarrollo
|
|
584
|
+
- Foco en implementación
|
|
585
|
+
- TDD en áreas críticas
|
|
586
|
+
- Commits frecuentes
|
|
587
|
+
|
|
588
|
+
### Viernes: Review y Demo
|
|
589
|
+
- Code review personal
|
|
590
|
+
- Demo al cliente
|
|
591
|
+
- Retrospectiva y ajustes
|
|
592
|
+
|
|
593
|
+
### Herramientas Recomendadas
|
|
594
|
+
- **Kanban**: ${tools.kanban}
|
|
595
|
+
- **Time Tracking**: ${tools.timeTracking}
|
|
596
|
+
- **Communication**: ${tools.communication}
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
## Automatización y Herramientas
|
|
600
|
+
|
|
601
|
+
### 1. Generación de Templates
|
|
602
|
+
```typescript
|
|
603
|
+
class TemplateGenerator {
|
|
604
|
+
async generateProjectTemplates(analysis: ProjectAnalysis): Promise<Templates> {
|
|
605
|
+
return {
|
|
606
|
+
// README optimizado
|
|
607
|
+
readme: await this.generateREADME(analysis),
|
|
608
|
+
|
|
609
|
+
// GitHub templates
|
|
610
|
+
github: {
|
|
611
|
+
pullRequest: this.generatePRTemplate(),
|
|
612
|
+
issueTemplates: this.generateIssueTemplates(),
|
|
613
|
+
workflows: this.generateWorkflows(analysis.techStack)
|
|
614
|
+
},
|
|
615
|
+
|
|
616
|
+
// Development setup
|
|
617
|
+
development: {
|
|
618
|
+
envExample: this.generateEnvExample(analysis),
|
|
619
|
+
dockerfiles: this.generateDockerfiles(analysis),
|
|
620
|
+
scripts: this.generateDevelopmentScripts(analysis)
|
|
621
|
+
},
|
|
622
|
+
|
|
623
|
+
// Testing setup
|
|
624
|
+
testing: {
|
|
625
|
+
jestConfig: this.generateJestConfig(analysis),
|
|
626
|
+
testingUtils: this.generateTestingUtils(analysis),
|
|
627
|
+
mockData: this.generateMockData(analysis)
|
|
628
|
+
}
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
### 2. Integración con Herramientas Freelance
|
|
635
|
+
```typescript
|
|
636
|
+
interface FreelanceToolIntegration {
|
|
637
|
+
// Time tracking
|
|
638
|
+
toggl?: TogglIntegration;
|
|
639
|
+
harvest?: HarvestIntegration;
|
|
640
|
+
|
|
641
|
+
// Project management
|
|
642
|
+
notion?: NotionIntegration;
|
|
643
|
+
trello?: TrelloIntegration;
|
|
644
|
+
|
|
645
|
+
// Communication
|
|
646
|
+
slack?: SlackIntegration;
|
|
647
|
+
discord?: DiscordIntegration;
|
|
648
|
+
|
|
649
|
+
// Invoicing
|
|
650
|
+
freshbooks?: FreshbooksIntegration;
|
|
651
|
+
stripe?: StripeIntegration;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
class FreelanceWorkflowOptimizer {
|
|
655
|
+
async optimizeForFreelancer(plan: ProjectPlan): Promise<OptimizedPlan> {
|
|
656
|
+
return {
|
|
657
|
+
...plan,
|
|
658
|
+
|
|
659
|
+
// Adjust for solo work
|
|
660
|
+
taskSizing: this.optimizeTaskSizes(plan.tasks),
|
|
661
|
+
|
|
662
|
+
// Buffer for client requests
|
|
663
|
+
bufferTime: this.calculateBufferTime(plan.duration),
|
|
664
|
+
|
|
665
|
+
// Client communication points
|
|
666
|
+
communicationPlan: this.generateCommunicationPlan(plan),
|
|
667
|
+
|
|
668
|
+
// Invoice milestones
|
|
669
|
+
billingMilestones: this.generateBillingMilestones(plan)
|
|
670
|
+
};
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
## Interfaz de Comando
|
|
676
|
+
|
|
677
|
+
### Uso Principal
|
|
678
|
+
```bash
|
|
679
|
+
# Analizar proyecto existente
|
|
680
|
+
freelance-planner analyze ./mi-proyecto
|
|
681
|
+
|
|
682
|
+
# Generar plan completo
|
|
683
|
+
freelance-planner plan ./mi-proyecto --client "Cliente ABC"
|
|
684
|
+
|
|
685
|
+
# Generar solo tablero Kanban
|
|
686
|
+
freelance-planner kanban ./mi-proyecto
|
|
687
|
+
|
|
688
|
+
# Setup completo para freelancer
|
|
689
|
+
freelance-planner setup ./mi-proyecto --with-ci --with-testing
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
### Salida Esperada
|
|
693
|
+
1. **Análisis del Proyecto**
|
|
694
|
+
- Estado actual y completitud
|
|
695
|
+
- Stack tecnológico y arquitectura
|
|
696
|
+
- Deuda técnica y oportunidades de mejora
|
|
697
|
+
|
|
698
|
+
2. **Plan de Desarrollo**
|
|
699
|
+
- Roadmap con fases e iteraciones
|
|
700
|
+
- Tablero Kanban listo para usar
|
|
701
|
+
- Setup técnico automatizado
|
|
702
|
+
|
|
703
|
+
3. **Templates y Herramientas**
|
|
704
|
+
- Archivos de configuración
|
|
705
|
+
- Scripts de desarrollo
|
|
706
|
+
- Documentación personalizada
|
|
707
|
+
|
|
708
|
+
4. **Métricas y Seguimiento**
|
|
709
|
+
- KPIs definidos para el proyecto
|
|
710
|
+
- Plan de demos y entregas
|
|
711
|
+
- Estrategia de comunicación con cliente
|
|
712
|
+
|
|
713
|
+
## Objetivos del Agente
|
|
714
|
+
|
|
715
|
+
### Transformar un proyecto existente en:
|
|
716
|
+
✅ **Flujo de trabajo organizado** - Kanban adaptado a freelance
|
|
717
|
+
✅ **Calidad técnica** - TDD selectivo, CI/CD, refactorización
|
|
718
|
+
✅ **Entregas predecibles** - Iteraciones cortas con demos
|
|
719
|
+
✅ **Comunicación clara** - Plan de demos y feedback
|
|
720
|
+
✅ **Crecimiento sostenible** - Sin burnout, overhead mínimo
|
|
721
|
+
|
|
722
|
+
Siempre proporciona un **plan completo y ejecutable** que reduzca la fricción del desarrollo y establezca prácticas sostenibles para el trabajo freelance.
|