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,216 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# INSTALL-ENGRAM: Instala Engram memory server para AI agents
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# Uso:
|
|
6
|
+
# ./install-engram.sh # Instalar ultima version
|
|
7
|
+
# ./install-engram.sh --check # Solo verificar si esta instalado
|
|
8
|
+
# ./install-engram.sh --mcp-config # Generar config MCP
|
|
9
|
+
# ./install-engram.sh --no-verify # Instalar sin verificar checksum (NO RECOMENDADO)
|
|
10
|
+
# =============================================================================
|
|
11
|
+
|
|
12
|
+
set -e
|
|
13
|
+
|
|
14
|
+
RED='\033[0;31m'
|
|
15
|
+
GREEN='\033[0;32m'
|
|
16
|
+
YELLOW='\033[1;33m'
|
|
17
|
+
CYAN='\033[0;36m'
|
|
18
|
+
NC='\033[0m'
|
|
19
|
+
|
|
20
|
+
REPO="Gentleman-Programming/engram"
|
|
21
|
+
INSTALL_DIR="${ENGRAM_INSTALL_DIR:-$HOME/.local/bin}"
|
|
22
|
+
NO_VERIFY=false
|
|
23
|
+
|
|
24
|
+
# =============================================================================
|
|
25
|
+
# Helpers
|
|
26
|
+
# =============================================================================
|
|
27
|
+
|
|
28
|
+
check_installed() {
|
|
29
|
+
if command -v engram &> /dev/null; then
|
|
30
|
+
local version
|
|
31
|
+
version=$(engram --version 2>/dev/null || echo "unknown")
|
|
32
|
+
echo -e "${GREEN}Engram ya instalado: $version${NC}"
|
|
33
|
+
echo -e " Path: $(which engram)"
|
|
34
|
+
return 0
|
|
35
|
+
fi
|
|
36
|
+
return 1
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
detect_platform() {
|
|
40
|
+
local os arch
|
|
41
|
+
|
|
42
|
+
case "$(uname -s)" in
|
|
43
|
+
Linux*) os="Linux" ;;
|
|
44
|
+
Darwin*) os="Darwin" ;;
|
|
45
|
+
MINGW*|MSYS*|CYGWIN*) os="Windows" ;;
|
|
46
|
+
*) echo -e "${RED}OS no soportado: $(uname -s)${NC}"; exit 1 ;;
|
|
47
|
+
esac
|
|
48
|
+
|
|
49
|
+
case "$(uname -m)" in
|
|
50
|
+
x86_64|amd64) arch="x86_64" ;;
|
|
51
|
+
arm64|aarch64) arch="arm64" ;;
|
|
52
|
+
*) echo -e "${RED}Arquitectura no soportada: $(uname -m)${NC}"; exit 1 ;;
|
|
53
|
+
esac
|
|
54
|
+
|
|
55
|
+
echo "${os}_${arch}"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
get_latest_version() {
|
|
59
|
+
curl -fsSL "https://api.github.com/repos/${REPO}/releases/latest" \
|
|
60
|
+
| grep '"tag_name"' \
|
|
61
|
+
| head -1 \
|
|
62
|
+
| sed 's/.*"tag_name": *"//;s/".*//'
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
generate_mcp_config() {
|
|
66
|
+
local project_name="${1:-$(basename "$(pwd)")}"
|
|
67
|
+
cat << EOF
|
|
68
|
+
{
|
|
69
|
+
"mcpServers": {
|
|
70
|
+
"engram": {
|
|
71
|
+
"command": "engram",
|
|
72
|
+
"args": ["mcp"],
|
|
73
|
+
"env": {
|
|
74
|
+
"ENGRAM_PROJECT": "${project_name}"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
EOF
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
# =============================================================================
|
|
83
|
+
# Main
|
|
84
|
+
# =============================================================================
|
|
85
|
+
|
|
86
|
+
case "${1:-install}" in
|
|
87
|
+
--check)
|
|
88
|
+
if check_installed; then
|
|
89
|
+
exit 0
|
|
90
|
+
else
|
|
91
|
+
echo -e "${YELLOW}Engram no instalado${NC}"
|
|
92
|
+
exit 1
|
|
93
|
+
fi
|
|
94
|
+
;;
|
|
95
|
+
--mcp-config)
|
|
96
|
+
generate_mcp_config "$2"
|
|
97
|
+
exit 0
|
|
98
|
+
;;
|
|
99
|
+
--no-verify)
|
|
100
|
+
NO_VERIFY=true
|
|
101
|
+
;;
|
|
102
|
+
install|"")
|
|
103
|
+
;;
|
|
104
|
+
*)
|
|
105
|
+
echo "Uso: $0 [--check|--mcp-config [project-name]|--no-verify]"
|
|
106
|
+
exit 1
|
|
107
|
+
;;
|
|
108
|
+
esac
|
|
109
|
+
|
|
110
|
+
echo -e "${CYAN}=== Instalando Engram ===${NC}"
|
|
111
|
+
|
|
112
|
+
# Verificar si ya existe
|
|
113
|
+
if check_installed; then
|
|
114
|
+
read -p " Reinstalar? [y/N]: " REINSTALL
|
|
115
|
+
[[ "$REINSTALL" != "y" && "$REINSTALL" != "Y" ]] && exit 0
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
# Detectar plataforma
|
|
119
|
+
PLATFORM=$(detect_platform)
|
|
120
|
+
echo -e "${YELLOW}Plataforma: ${PLATFORM}${NC}"
|
|
121
|
+
|
|
122
|
+
# Obtener ultima version
|
|
123
|
+
echo -e "${YELLOW}Buscando ultima version...${NC}"
|
|
124
|
+
VERSION=$(get_latest_version)
|
|
125
|
+
if [[ -z "$VERSION" ]]; then
|
|
126
|
+
echo -e "${RED}No se pudo obtener la ultima version${NC}"
|
|
127
|
+
echo -e "${YELLOW}Instala manualmente desde: https://github.com/${REPO}/releases${NC}"
|
|
128
|
+
exit 1
|
|
129
|
+
fi
|
|
130
|
+
echo -e "${GREEN}Version: ${VERSION}${NC}"
|
|
131
|
+
|
|
132
|
+
# Construir URL de descarga
|
|
133
|
+
ARCHIVE_NAME="engram_${PLATFORM}.tar.gz"
|
|
134
|
+
if [[ "$PLATFORM" == Windows_* ]]; then
|
|
135
|
+
ARCHIVE_NAME="engram_${PLATFORM}.zip"
|
|
136
|
+
fi
|
|
137
|
+
DOWNLOAD_URL="https://github.com/${REPO}/releases/download/${VERSION}/${ARCHIVE_NAME}"
|
|
138
|
+
|
|
139
|
+
# Descargar
|
|
140
|
+
echo -e "${YELLOW}Descargando ${DOWNLOAD_URL}...${NC}"
|
|
141
|
+
TMP_DIR=$(mktemp -d)
|
|
142
|
+
chmod 700 "$TMP_DIR"
|
|
143
|
+
trap 'rm -rf "$TMP_DIR"' EXIT
|
|
144
|
+
|
|
145
|
+
if ! curl -fsSL -o "${TMP_DIR}/${ARCHIVE_NAME}" "$DOWNLOAD_URL"; then
|
|
146
|
+
echo -e "${RED}Error descargando. Verifica la URL:${NC}"
|
|
147
|
+
echo -e " ${DOWNLOAD_URL}"
|
|
148
|
+
echo -e "${YELLOW}Releases disponibles: https://github.com/${REPO}/releases${NC}"
|
|
149
|
+
exit 1
|
|
150
|
+
fi
|
|
151
|
+
|
|
152
|
+
# Verify checksum (mandatory by default)
|
|
153
|
+
CHECKSUM_URL="https://github.com/${REPO}/releases/download/${VERSION}/checksums.txt"
|
|
154
|
+
if curl -fsSL -o "${TMP_DIR}/checksums.txt" "$CHECKSUM_URL" 2>/dev/null; then
|
|
155
|
+
echo -e "${CYAN}Verifying checksum...${NC}"
|
|
156
|
+
pushd "$TMP_DIR" > /dev/null
|
|
157
|
+
if command -v sha256sum &>/dev/null; then
|
|
158
|
+
sha256sum -c checksums.txt --ignore-missing || {
|
|
159
|
+
echo -e "${RED}Checksum verification failed!${NC}"
|
|
160
|
+
exit 1
|
|
161
|
+
}
|
|
162
|
+
elif command -v shasum &>/dev/null; then
|
|
163
|
+
shasum -a 256 -c checksums.txt --ignore-missing || {
|
|
164
|
+
echo -e "${RED}Checksum verification failed!${NC}"
|
|
165
|
+
exit 1
|
|
166
|
+
}
|
|
167
|
+
fi
|
|
168
|
+
popd > /dev/null
|
|
169
|
+
echo -e "${GREEN}Checksum verified${NC}"
|
|
170
|
+
else
|
|
171
|
+
if [[ "$NO_VERIFY" == "true" ]]; then
|
|
172
|
+
echo -e "${YELLOW}WARNING: Skipping checksum verification (--no-verify)${NC}"
|
|
173
|
+
else
|
|
174
|
+
echo -e "${RED}Error: Could not download checksums. Cannot verify download integrity.${NC}"
|
|
175
|
+
echo -e "${YELLOW}Use --no-verify flag to skip verification (NOT RECOMMENDED).${NC}"
|
|
176
|
+
exit 1
|
|
177
|
+
fi
|
|
178
|
+
fi
|
|
179
|
+
|
|
180
|
+
# Extraer
|
|
181
|
+
echo -e "${YELLOW}Extrayendo...${NC}"
|
|
182
|
+
if [[ "$ARCHIVE_NAME" == *.zip ]]; then
|
|
183
|
+
unzip -o "${TMP_DIR}/${ARCHIVE_NAME}" -d "${TMP_DIR}" > /dev/null
|
|
184
|
+
else
|
|
185
|
+
tar xzf "${TMP_DIR}/${ARCHIVE_NAME}" -C "${TMP_DIR}"
|
|
186
|
+
fi
|
|
187
|
+
|
|
188
|
+
# Instalar
|
|
189
|
+
mkdir -p "$INSTALL_DIR"
|
|
190
|
+
cp "${TMP_DIR}/engram" "${INSTALL_DIR}/engram" 2>/dev/null \
|
|
191
|
+
|| cp "${TMP_DIR}/engram.exe" "${INSTALL_DIR}/engram.exe" 2>/dev/null
|
|
192
|
+
chmod +x "${INSTALL_DIR}/engram" 2>/dev/null || true
|
|
193
|
+
|
|
194
|
+
# Verificar PATH
|
|
195
|
+
if ! echo "$PATH" | tr ':' '\n' | grep -q "^${INSTALL_DIR}$"; then
|
|
196
|
+
echo -e "${YELLOW}Agrega ${INSTALL_DIR} a tu PATH:${NC}"
|
|
197
|
+
echo -e " export PATH=\"\$PATH:${INSTALL_DIR}\""
|
|
198
|
+
echo -e " # O agrega a ~/.bashrc / ~/.zshrc"
|
|
199
|
+
fi
|
|
200
|
+
|
|
201
|
+
# Verificar instalacion
|
|
202
|
+
if command -v engram &> /dev/null || [[ -f "${INSTALL_DIR}/engram" ]]; then
|
|
203
|
+
echo -e "${GREEN}Engram instalado correctamente${NC}"
|
|
204
|
+
echo -e " Path: ${INSTALL_DIR}/engram"
|
|
205
|
+
else
|
|
206
|
+
echo -e "${RED}Error: engram no encontrado despues de instalar${NC}"
|
|
207
|
+
exit 1
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
# Generar config MCP
|
|
211
|
+
echo -e ""
|
|
212
|
+
echo -e "${CYAN}Config MCP para tu proyecto:${NC}"
|
|
213
|
+
echo -e ""
|
|
214
|
+
generate_mcp_config
|
|
215
|
+
echo -e ""
|
|
216
|
+
echo -e "${GREEN}Copia esto a .mcp.json en la raiz de tu proyecto${NC}"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# GHAGGA - Variables de Entorno
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Copia este archivo como .env y configura tus valores.
|
|
5
|
+
# NUNCA commitees el archivo .env con tus keys reales.
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
# --- Supabase ---
|
|
9
|
+
POSTGRES_PASSWORD=CHANGE_ME_BEFORE_USE
|
|
10
|
+
SUPABASE_URL=http://localhost:54321
|
|
11
|
+
SUPABASE_ANON_KEY=your-anon-key
|
|
12
|
+
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
|
|
13
|
+
|
|
14
|
+
# --- GitHub App ---
|
|
15
|
+
GITHUB_APP_ID=
|
|
16
|
+
GITHUB_PRIVATE_KEY=
|
|
17
|
+
GITHUB_WEBHOOK_SECRET=
|
|
18
|
+
|
|
19
|
+
# --- LLM Providers (configura al menos uno) ---
|
|
20
|
+
|
|
21
|
+
# Anthropic (recomendado)
|
|
22
|
+
ANTHROPIC_API_KEY=
|
|
23
|
+
|
|
24
|
+
# OpenAI
|
|
25
|
+
OPENAI_API_KEY=
|
|
26
|
+
|
|
27
|
+
# Google
|
|
28
|
+
GOOGLE_API_KEY=
|
|
29
|
+
|
|
30
|
+
# Azure OpenAI (alternativa a OpenAI directo)
|
|
31
|
+
# AZURE_OPENAI_API_KEY=
|
|
32
|
+
# AZURE_OPENAI_ENDPOINT=
|
|
33
|
+
# AZURE_OPENAI_DEPLOYMENT=
|
|
34
|
+
|
|
35
|
+
# --- Review Config ---
|
|
36
|
+
# Modo: simple | workflow | consensus
|
|
37
|
+
REVIEW_MODE=simple
|
|
38
|
+
|
|
39
|
+
# Modelo por defecto
|
|
40
|
+
DEFAULT_MODEL=claude-sonnet-4-20250514
|
|
41
|
+
|
|
42
|
+
# --- Semgrep (opcional) ---
|
|
43
|
+
# SEMGREP_APP_TOKEN=
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# GHAGGA - AI Code Review for GitHub PRs
|
|
2
|
+
|
|
3
|
+
> Multi-Agent code review automatizado para Pull Requests de GitHub.
|
|
4
|
+
|
|
5
|
+
## Que es GHAGGA
|
|
6
|
+
|
|
7
|
+
[GHAGGA](https://github.com/JNZader/ghagga/) es un sistema de code review con IA que revisa automaticamente tus Pull Requests usando multiples proveedores LLM (Claude, GPT, Gemini).
|
|
8
|
+
|
|
9
|
+
## Arquitectura
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
GitHub PR → Webhook → Supabase Edge Function → Multi-LLM Review → PR Comments
|
|
13
|
+
↓
|
|
14
|
+
Dashboard React
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Componentes
|
|
18
|
+
|
|
19
|
+
| Componente | Stack | Descripcion |
|
|
20
|
+
|-----------|-------|-------------|
|
|
21
|
+
| Dashboard | React + Mantine + Vite | UI para configurar y monitorear reviews |
|
|
22
|
+
| Backend | Supabase + Deno Edge Functions | Procesa webhooks y orquesta reviews |
|
|
23
|
+
| Database | PostgreSQL + pgvector + pg_trgm | Almacena reviews, embeddings, busqueda |
|
|
24
|
+
| Analysis | Semgrep | Analisis estatico complementario |
|
|
25
|
+
|
|
26
|
+
### Modos de Review
|
|
27
|
+
|
|
28
|
+
| Modo | Descripcion | Cuando usar |
|
|
29
|
+
|------|-------------|-------------|
|
|
30
|
+
| **Simple** | Un solo LLM analiza el codigo | Reviews rapidas, bajo costo |
|
|
31
|
+
| **Workflow** | Pipeline multi-paso secuencial | Analisis profundo, cada paso especializado |
|
|
32
|
+
| **Consensus** | Multiples LLMs evaluan y votan | Maxima confiabilidad, reviews criticas |
|
|
33
|
+
|
|
34
|
+
## Opciones de Deployment
|
|
35
|
+
|
|
36
|
+
| Opcion | Complejidad | Costo | Cuando usar |
|
|
37
|
+
|--------|------------|-------|-------------|
|
|
38
|
+
| Reusable Workflow | Baja | Free tier | Solo quieres PR reviews, sin dashboard |
|
|
39
|
+
| Docker Compose | Media | Self-hosted | Equipo quiere dashboard, tiene servidor |
|
|
40
|
+
| Full Clone | Alta | Self-hosted | Necesitas personalizar logica de review |
|
|
41
|
+
|
|
42
|
+
### Costos de API
|
|
43
|
+
- **Simple mode**: ~$0.01-0.05 por review (1 LLM call)
|
|
44
|
+
- **Workflow mode**: ~$0.05-0.15 por review (multi-paso)
|
|
45
|
+
- **Consensus mode**: ~$0.15-0.50 por review (multiples LLMs)
|
|
46
|
+
|
|
47
|
+
## Instalacion
|
|
48
|
+
|
|
49
|
+
### Prerequisitos
|
|
50
|
+
|
|
51
|
+
- [Supabase CLI](https://supabase.com/docs/guides/cli)
|
|
52
|
+
- [Docker](https://docker.com) (para Supabase local)
|
|
53
|
+
- [Deno](https://deno.land) (para Edge Functions)
|
|
54
|
+
- Una GitHub App configurada
|
|
55
|
+
|
|
56
|
+
### Opcion 1: Reusable Workflow (CI)
|
|
57
|
+
|
|
58
|
+
En tu `.github/workflows/ci.yml`:
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
jobs:
|
|
62
|
+
review:
|
|
63
|
+
uses: JNZader/project-starter-framework/.github/workflows/reusable-ghagga-review.yml@main
|
|
64
|
+
with:
|
|
65
|
+
ghagga-url: ${{ vars.GHAGGA_URL }}
|
|
66
|
+
secrets:
|
|
67
|
+
ghagga-token: ${{ secrets.GHAGGA_TOKEN }}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Opcion 2: Docker Compose (este modulo)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Desde tu proyecto
|
|
74
|
+
cp optional/ghagga/docker-compose.yml .
|
|
75
|
+
cp optional/ghagga/.env.example .env.ghagga
|
|
76
|
+
|
|
77
|
+
# Editar .env.ghagga con tus keys
|
|
78
|
+
# Levantar servicios
|
|
79
|
+
docker compose -f docker-compose.yml up -d
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Opcion 3: Full Clone (desarrollo)
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Clonar GHAGGA
|
|
86
|
+
git clone https://github.com/JNZader/ghagga.git
|
|
87
|
+
cd ghagga
|
|
88
|
+
|
|
89
|
+
# Levantar Supabase local
|
|
90
|
+
supabase start
|
|
91
|
+
|
|
92
|
+
# Configurar variables de entorno
|
|
93
|
+
cp .env.example .env
|
|
94
|
+
# Editar .env con tus API keys
|
|
95
|
+
|
|
96
|
+
# Servir Edge Functions
|
|
97
|
+
supabase functions serve
|
|
98
|
+
|
|
99
|
+
# Dashboard
|
|
100
|
+
cd dashboard && npm install && npm run dev
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Setup GitHub App
|
|
104
|
+
|
|
105
|
+
1. Ir a GitHub Settings > Developer settings > GitHub Apps
|
|
106
|
+
2. Crear nueva app con permisos:
|
|
107
|
+
- **Pull requests**: Read & Write (para comentar)
|
|
108
|
+
- **Contents**: Read (para leer codigo)
|
|
109
|
+
- **Webhooks**: Activar para eventos `pull_request`
|
|
110
|
+
3. Configurar Webhook URL apuntando a tu instancia de GHAGGA
|
|
111
|
+
4. Generar Private Key y guardarla como secret
|
|
112
|
+
|
|
113
|
+
Ver guia completa: [GHAGGA - GitHub App Setup](https://github.com/JNZader/ghagga/blob/main/docs/GITHUB_APP_SETUP.md)
|
|
114
|
+
|
|
115
|
+
## Configuracion de Providers
|
|
116
|
+
|
|
117
|
+
GHAGGA soporta multiples proveedores LLM:
|
|
118
|
+
|
|
119
|
+
| Provider | Modelos | Variable de entorno |
|
|
120
|
+
|----------|---------|-------------------|
|
|
121
|
+
| Anthropic | claude-sonnet-4-20250514 | `ANTHROPIC_API_KEY` |
|
|
122
|
+
| OpenAI | gpt-4o, gpt-4-turbo | `OPENAI_API_KEY` |
|
|
123
|
+
| Google | gemini-2.0-flash, gemini-1.5-pro | `GOOGLE_API_KEY` |
|
|
124
|
+
| Azure OpenAI | gpt-4o (via Azure) | `AZURE_OPENAI_*` |
|
|
125
|
+
|
|
126
|
+
Configura al menos un provider en tu `.env`.
|
|
127
|
+
|
|
128
|
+
## Features Avanzadas
|
|
129
|
+
|
|
130
|
+
### Hebbian Learning
|
|
131
|
+
|
|
132
|
+
GHAGGA aprende de reviews anteriores para mejorar recomendaciones futuras.
|
|
133
|
+
Los patrones recurrentes se refuerzan automaticamente.
|
|
134
|
+
|
|
135
|
+
### Hybrid Search
|
|
136
|
+
|
|
137
|
+
Combina busqueda semantica (pgvector embeddings) con full-text search (pg_trgm) para encontrar codigo similar y reviews previas relevantes.
|
|
138
|
+
|
|
139
|
+
### Semgrep Integration
|
|
140
|
+
|
|
141
|
+
Ejecuta reglas Semgrep como complemento al analisis LLM, cubriendo patrones de seguridad OWASP.
|
|
142
|
+
|
|
143
|
+
## Integracion con el Framework
|
|
144
|
+
|
|
145
|
+
Cuando usas GHAGGA con project-starter-framework:
|
|
146
|
+
|
|
147
|
+
- **CI-Local** valida codigo antes del push (pre-commit, pre-push)
|
|
148
|
+
- **GHAGGA** revisa el PR despues del push (review automatico)
|
|
149
|
+
- **Ambos** usan Semgrep: CI-Local para chequeo local, GHAGGA para analisis profundo
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
Developer → CI-Local (pre-push) → Push → PR → GHAGGA Review → Merge
|
|
153
|
+
```
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# GHAGGA Local Development - Docker Compose
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Levanta Supabase + Dashboard para desarrollo local de GHAGGA.
|
|
5
|
+
#
|
|
6
|
+
# Uso:
|
|
7
|
+
# docker compose up -d # Levantar servicios
|
|
8
|
+
# docker compose logs -f # Ver logs
|
|
9
|
+
# docker compose down # Detener
|
|
10
|
+
#
|
|
11
|
+
# Prerequisitos:
|
|
12
|
+
# - Docker y Docker Compose
|
|
13
|
+
# - Copiar .env.example a .env y configurar API keys
|
|
14
|
+
# =============================================================================
|
|
15
|
+
|
|
16
|
+
services:
|
|
17
|
+
# ---------------------------------------------------------------------------
|
|
18
|
+
# Supabase (PostgreSQL + Auth + Edge Functions)
|
|
19
|
+
# ---------------------------------------------------------------------------
|
|
20
|
+
supabase-db:
|
|
21
|
+
image: supabase/postgres:15.6.1.143
|
|
22
|
+
ports:
|
|
23
|
+
- "127.0.0.1:54322:5432"
|
|
24
|
+
environment:
|
|
25
|
+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env.ghagga}
|
|
26
|
+
POSTGRES_DB: ghagga
|
|
27
|
+
volumes:
|
|
28
|
+
- ghagga-db:/var/lib/postgresql/data
|
|
29
|
+
healthcheck:
|
|
30
|
+
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
31
|
+
interval: 10s
|
|
32
|
+
timeout: 5s
|
|
33
|
+
retries: 5
|
|
34
|
+
|
|
35
|
+
supabase-kong:
|
|
36
|
+
image: kong:3.5
|
|
37
|
+
# NOTE: kong.yml is required. Get it from the GHAGGA repository:
|
|
38
|
+
# curl -o kong.yml https://raw.githubusercontent.com/JNZader/ghagga/main/kong.yml
|
|
39
|
+
volumes:
|
|
40
|
+
- ./kong.yml:/home/kong/kong.yml:ro
|
|
41
|
+
ports:
|
|
42
|
+
- "127.0.0.1:54321:8000" # Supabase API
|
|
43
|
+
- "127.0.0.1:54323:8443" # Supabase API (HTTPS)
|
|
44
|
+
environment:
|
|
45
|
+
KONG_DATABASE: "off"
|
|
46
|
+
KONG_DECLARATIVE_CONFIG: /home/kong/kong.yml
|
|
47
|
+
depends_on:
|
|
48
|
+
supabase-db:
|
|
49
|
+
condition: service_healthy
|
|
50
|
+
healthcheck:
|
|
51
|
+
test: ["CMD-SHELL", "kong health || exit 1"]
|
|
52
|
+
interval: 10s
|
|
53
|
+
timeout: 5s
|
|
54
|
+
retries: 5
|
|
55
|
+
|
|
56
|
+
# ---------------------------------------------------------------------------
|
|
57
|
+
# GHAGGA Dashboard (React + Vite)
|
|
58
|
+
# ---------------------------------------------------------------------------
|
|
59
|
+
dashboard:
|
|
60
|
+
build:
|
|
61
|
+
context: .
|
|
62
|
+
dockerfile: Dockerfile.dashboard
|
|
63
|
+
args:
|
|
64
|
+
GHAGGA_REPO: https://github.com/JNZader/ghagga.git
|
|
65
|
+
ports:
|
|
66
|
+
- "127.0.0.1:5173:5173"
|
|
67
|
+
environment:
|
|
68
|
+
VITE_SUPABASE_URL: http://localhost:54321
|
|
69
|
+
VITE_SUPABASE_ANON_KEY: ${SUPABASE_ANON_KEY:?Set SUPABASE_ANON_KEY in .env.ghagga}
|
|
70
|
+
depends_on:
|
|
71
|
+
supabase-kong:
|
|
72
|
+
condition: service_healthy
|
|
73
|
+
healthcheck:
|
|
74
|
+
test: ["CMD-SHELL", "curl -f http://localhost:5173/ || exit 1"]
|
|
75
|
+
interval: 15s
|
|
76
|
+
timeout: 5s
|
|
77
|
+
retries: 3
|
|
78
|
+
|
|
79
|
+
volumes:
|
|
80
|
+
ghagga-db:
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# SETUP-GHAGGA: Configura GHAGGA code review para tu proyecto
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# Uso:
|
|
6
|
+
# ./setup-ghagga.sh # Setup interactivo
|
|
7
|
+
# ./setup-ghagga.sh --workflow # Solo copiar reusable workflow
|
|
8
|
+
# ./setup-ghagga.sh --docker # Setup Docker Compose
|
|
9
|
+
# =============================================================================
|
|
10
|
+
|
|
11
|
+
set -e
|
|
12
|
+
|
|
13
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
14
|
+
|
|
15
|
+
RED='\033[0;31m'
|
|
16
|
+
GREEN='\033[0;32m'
|
|
17
|
+
YELLOW='\033[1;33m'
|
|
18
|
+
CYAN='\033[0;36m'
|
|
19
|
+
NC='\033[0m'
|
|
20
|
+
|
|
21
|
+
echo -e "${CYAN}=== Setup GHAGGA Code Review ===${NC}"
|
|
22
|
+
|
|
23
|
+
# =============================================================================
|
|
24
|
+
# Helpers
|
|
25
|
+
# =============================================================================
|
|
26
|
+
|
|
27
|
+
setup_workflow() {
|
|
28
|
+
echo -e "${YELLOW}Configurando GitHub Actions workflow...${NC}"
|
|
29
|
+
|
|
30
|
+
mkdir -p .github/workflows
|
|
31
|
+
|
|
32
|
+
cat > .github/workflows/ghagga-review.yml << 'EOF'
|
|
33
|
+
# =============================================================================
|
|
34
|
+
# GHAGGA AI Code Review
|
|
35
|
+
# =============================================================================
|
|
36
|
+
# Trigger: Pull requests to main/develop
|
|
37
|
+
# Requires: GHAGGA_URL and GHAGGA_TOKEN in repo settings
|
|
38
|
+
# =============================================================================
|
|
39
|
+
|
|
40
|
+
name: AI Code Review
|
|
41
|
+
|
|
42
|
+
on:
|
|
43
|
+
pull_request:
|
|
44
|
+
types: [opened, synchronize, reopened]
|
|
45
|
+
branches: [main, develop]
|
|
46
|
+
|
|
47
|
+
concurrency:
|
|
48
|
+
group: ghagga-${{ github.event.pull_request.number }}
|
|
49
|
+
cancel-in-progress: true
|
|
50
|
+
|
|
51
|
+
jobs:
|
|
52
|
+
review:
|
|
53
|
+
uses: JNZader/project-starter-framework/.github/workflows/reusable-ghagga-review.yml@main
|
|
54
|
+
with:
|
|
55
|
+
ghagga-url: ${{ vars.GHAGGA_URL }}
|
|
56
|
+
review-mode: simple
|
|
57
|
+
secrets:
|
|
58
|
+
ghagga-token: ${{ secrets.GHAGGA_TOKEN }}
|
|
59
|
+
EOF
|
|
60
|
+
|
|
61
|
+
echo -e "${GREEN} Creado .github/workflows/ghagga-review.yml${NC}"
|
|
62
|
+
echo -e ""
|
|
63
|
+
echo -e "${YELLOW}Configura en tu repo (Settings > Secrets and variables):${NC}"
|
|
64
|
+
echo -e " Variables:"
|
|
65
|
+
echo -e " GHAGGA_URL = URL de tu instancia GHAGGA"
|
|
66
|
+
echo -e " Secrets:"
|
|
67
|
+
echo -e " GHAGGA_TOKEN = Token de autenticacion"
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
setup_docker() {
|
|
71
|
+
echo -e "${YELLOW}Configurando Docker Compose...${NC}"
|
|
72
|
+
|
|
73
|
+
if [[ -f "$SCRIPT_DIR/docker-compose.yml" ]]; then
|
|
74
|
+
cp "$SCRIPT_DIR/docker-compose.yml" ./docker-compose.ghagga.yml
|
|
75
|
+
echo -e "${GREEN} Copiado docker-compose.ghagga.yml${NC}"
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
if [[ -f "$SCRIPT_DIR/.env.example" ]]; then
|
|
79
|
+
if [[ ! -f ".env.ghagga" ]]; then
|
|
80
|
+
cp "$SCRIPT_DIR/.env.example" .env.ghagga
|
|
81
|
+
echo -e "${GREEN} Copiado .env.ghagga (editar con tus API keys)${NC}"
|
|
82
|
+
else
|
|
83
|
+
echo -e "${YELLOW} .env.ghagga ya existe, no se sobreescribe${NC}"
|
|
84
|
+
fi
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
echo -e ""
|
|
88
|
+
echo -e "${CYAN}Para levantar GHAGGA local:${NC}"
|
|
89
|
+
echo -e " 1. Editar .env.ghagga con tus API keys"
|
|
90
|
+
echo -e " 2. docker compose -f docker-compose.ghagga.yml up -d"
|
|
91
|
+
echo -e " 3. Dashboard: http://localhost:5173"
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
setup_gitignore() {
|
|
95
|
+
local entries=(".env.ghagga" "docker-compose.ghagga.yml")
|
|
96
|
+
for entry in "${entries[@]}"; do
|
|
97
|
+
if ! grep -qF "$entry" .gitignore 2>/dev/null; then
|
|
98
|
+
echo "$entry" >> .gitignore
|
|
99
|
+
fi
|
|
100
|
+
done
|
|
101
|
+
echo -e "${GREEN} .gitignore actualizado${NC}"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
# =============================================================================
|
|
105
|
+
# Main
|
|
106
|
+
# =============================================================================
|
|
107
|
+
|
|
108
|
+
case "${1:-interactive}" in
|
|
109
|
+
--workflow)
|
|
110
|
+
setup_workflow
|
|
111
|
+
;;
|
|
112
|
+
--docker)
|
|
113
|
+
setup_docker
|
|
114
|
+
setup_gitignore
|
|
115
|
+
;;
|
|
116
|
+
interactive|"")
|
|
117
|
+
echo -e " ${CYAN}Como quieres integrar GHAGGA?${NC}"
|
|
118
|
+
echo -e " 1) GitHub Actions workflow (recomendado)"
|
|
119
|
+
echo -e " 2) Docker Compose local"
|
|
120
|
+
echo -e " 3) Ambos"
|
|
121
|
+
echo -e ""
|
|
122
|
+
read -p " Opcion [1/2/3]: " GHAGGA_CHOICE
|
|
123
|
+
|
|
124
|
+
case "$GHAGGA_CHOICE" in
|
|
125
|
+
1) setup_workflow ;;
|
|
126
|
+
2) setup_docker; setup_gitignore ;;
|
|
127
|
+
3) setup_workflow; setup_docker; setup_gitignore ;;
|
|
128
|
+
*) echo -e "${GREEN} Sin GHAGGA${NC}" ;;
|
|
129
|
+
esac
|
|
130
|
+
;;
|
|
131
|
+
*)
|
|
132
|
+
echo "Uso: $0 [--workflow|--docker]"
|
|
133
|
+
exit 1
|
|
134
|
+
;;
|
|
135
|
+
esac
|
|
136
|
+
|
|
137
|
+
echo -e ""
|
|
138
|
+
echo -e "${GREEN}Setup GHAGGA completado${NC}"
|
|
139
|
+
echo -e "Docs: https://github.com/JNZader/ghagga/"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Project Notes
|
|
2
|
+
|
|
3
|
+
> Notas simples del proyecto. Actualizar según sea necesario.
|
|
4
|
+
|
|
5
|
+
## Estado Actual
|
|
6
|
+
|
|
7
|
+
- **Fase:** [Desarrollo/Testing/Producción]
|
|
8
|
+
- **Última actualización:** [Fecha]
|
|
9
|
+
|
|
10
|
+
## Decisiones Importantes
|
|
11
|
+
|
|
12
|
+
1. [Decisión 1]
|
|
13
|
+
2. [Decisión 2]
|
|
14
|
+
|
|
15
|
+
## TODOs
|
|
16
|
+
|
|
17
|
+
- [ ] Task 1
|
|
18
|
+
- [ ] Task 2
|
|
19
|
+
|
|
20
|
+
## Notas
|
|
21
|
+
|
|
22
|
+
[Cualquier nota relevante del proyecto]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Simple Memory
|
|
2
|
+
|
|
3
|
+
> Alternativa simple a VibeKanban. Solo un archivo de notas.
|
|
4
|
+
|
|
5
|
+
## Instalación
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cp -r optional/memory-simple/.project /path/to/your/project/
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Uso
|
|
12
|
+
|
|
13
|
+
Editar `.project/NOTES.md` con:
|
|
14
|
+
- Estado actual del proyecto
|
|
15
|
+
- Decisiones importantes
|
|
16
|
+
- TODOs pendientes
|
|
17
|
+
- Notas relevantes
|
|
18
|
+
|
|
19
|
+
## Cuándo usar
|
|
20
|
+
|
|
21
|
+
- Proyectos pequeños/personales
|
|
22
|
+
- No necesitas gestión de oleadas
|
|
23
|
+
- Prefieres simplicidad sobre metodología
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"useMarkdownLinks": false,
|
|
3
|
+
"newLinkFormat": "relative",
|
|
4
|
+
"attachmentFolderPath": ".project/Attachments",
|
|
5
|
+
"alwaysUpdateLinks": true,
|
|
6
|
+
"showLineNumber": true,
|
|
7
|
+
"userIgnoreFilters": [
|
|
8
|
+
"node_modules/",
|
|
9
|
+
"target/",
|
|
10
|
+
"build/",
|
|
11
|
+
"dist/",
|
|
12
|
+
".gradle/",
|
|
13
|
+
".ci-local/docker/",
|
|
14
|
+
"__pycache__/",
|
|
15
|
+
".pytest_cache/",
|
|
16
|
+
"coverage/",
|
|
17
|
+
".git/",
|
|
18
|
+
"vendor/"
|
|
19
|
+
],
|
|
20
|
+
"newFileLocation": "current",
|
|
21
|
+
"strictLineBreaks": false,
|
|
22
|
+
"showFrontmatter": true
|
|
23
|
+
}
|