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.
Files changed (500) hide show
  1. package/.gitignore.template +105 -0
  2. package/.releaserc +44 -0
  3. package/README.md +45 -0
  4. package/ai-config/.skillignore +15 -0
  5. package/ai-config/AUTO_INVOKE.md +300 -0
  6. package/ai-config/agents/_TEMPLATE.md +93 -0
  7. package/ai-config/agents/business/api-designer.md +1657 -0
  8. package/ai-config/agents/business/business-analyst.md +1331 -0
  9. package/ai-config/agents/business/product-strategist.md +206 -0
  10. package/ai-config/agents/business/project-manager.md +178 -0
  11. package/ai-config/agents/business/requirements-analyst.md +1277 -0
  12. package/ai-config/agents/business/technical-writer.md +1679 -0
  13. package/ai-config/agents/creative/ux-designer.md +205 -0
  14. package/ai-config/agents/data-ai/ai-engineer.md +487 -0
  15. package/ai-config/agents/data-ai/analytics-engineer.md +953 -0
  16. package/ai-config/agents/data-ai/data-engineer.md +173 -0
  17. package/ai-config/agents/data-ai/data-scientist.md +672 -0
  18. package/ai-config/agents/data-ai/mlops-engineer.md +814 -0
  19. package/ai-config/agents/data-ai/prompt-engineer.md +772 -0
  20. package/ai-config/agents/development/angular-expert.md +620 -0
  21. package/ai-config/agents/development/backend-architect.md +795 -0
  22. package/ai-config/agents/development/database-specialist.md +212 -0
  23. package/ai-config/agents/development/frontend-specialist.md +686 -0
  24. package/ai-config/agents/development/fullstack-engineer.md +668 -0
  25. package/ai-config/agents/development/golang-pro.md +338 -0
  26. package/ai-config/agents/development/java-enterprise.md +400 -0
  27. package/ai-config/agents/development/javascript-pro.md +422 -0
  28. package/ai-config/agents/development/nextjs-pro.md +474 -0
  29. package/ai-config/agents/development/python-pro.md +570 -0
  30. package/ai-config/agents/development/react-pro.md +487 -0
  31. package/ai-config/agents/development/rust-pro.md +246 -0
  32. package/ai-config/agents/development/spring-boot-4-expert.md +326 -0
  33. package/ai-config/agents/development/typescript-pro.md +336 -0
  34. package/ai-config/agents/development/vue-specialist.md +605 -0
  35. package/ai-config/agents/infrastructure/cloud-architect.md +472 -0
  36. package/ai-config/agents/infrastructure/deployment-manager.md +358 -0
  37. package/ai-config/agents/infrastructure/devops-engineer.md +455 -0
  38. package/ai-config/agents/infrastructure/incident-responder.md +519 -0
  39. package/ai-config/agents/infrastructure/kubernetes-expert.md +705 -0
  40. package/ai-config/agents/infrastructure/monitoring-specialist.md +674 -0
  41. package/ai-config/agents/infrastructure/performance-engineer.md +658 -0
  42. package/ai-config/agents/orchestrator.md +241 -0
  43. package/ai-config/agents/quality/accessibility-auditor.md +1204 -0
  44. package/ai-config/agents/quality/code-reviewer-compact.md +123 -0
  45. package/ai-config/agents/quality/code-reviewer.md +363 -0
  46. package/ai-config/agents/quality/dependency-manager.md +743 -0
  47. package/ai-config/agents/quality/e2e-test-specialist.md +1005 -0
  48. package/ai-config/agents/quality/performance-tester.md +1086 -0
  49. package/ai-config/agents/quality/security-auditor.md +133 -0
  50. package/ai-config/agents/quality/test-engineer.md +453 -0
  51. package/ai-config/agents/specialists/api-designer.md +87 -0
  52. package/ai-config/agents/specialists/backend-architect.md +73 -0
  53. package/ai-config/agents/specialists/code-reviewer.md +77 -0
  54. package/ai-config/agents/specialists/db-optimizer.md +75 -0
  55. package/ai-config/agents/specialists/devops-engineer.md +83 -0
  56. package/ai-config/agents/specialists/documentation-writer.md +78 -0
  57. package/ai-config/agents/specialists/frontend-developer.md +75 -0
  58. package/ai-config/agents/specialists/performance-analyst.md +82 -0
  59. package/ai-config/agents/specialists/refactor-specialist.md +74 -0
  60. package/ai-config/agents/specialists/security-auditor.md +74 -0
  61. package/ai-config/agents/specialists/test-engineer.md +81 -0
  62. package/ai-config/agents/specialists/ux-consultant.md +76 -0
  63. package/ai-config/agents/specialized/agent-generator.md +1190 -0
  64. package/ai-config/agents/specialized/blockchain-developer.md +149 -0
  65. package/ai-config/agents/specialized/code-migrator.md +892 -0
  66. package/ai-config/agents/specialized/context-manager.md +978 -0
  67. package/ai-config/agents/specialized/documentation-writer.md +1078 -0
  68. package/ai-config/agents/specialized/ecommerce-expert.md +1756 -0
  69. package/ai-config/agents/specialized/embedded-engineer.md +1714 -0
  70. package/ai-config/agents/specialized/error-detective.md +1034 -0
  71. package/ai-config/agents/specialized/fintech-specialist.md +1659 -0
  72. package/ai-config/agents/specialized/freelance-project-planner-v2.md +1988 -0
  73. package/ai-config/agents/specialized/freelance-project-planner-v3.md +2136 -0
  74. package/ai-config/agents/specialized/freelance-project-planner-v4.md +4503 -0
  75. package/ai-config/agents/specialized/freelance-project-planner.md +722 -0
  76. package/ai-config/agents/specialized/game-developer.md +1963 -0
  77. package/ai-config/agents/specialized/healthcare-dev.md +1620 -0
  78. package/ai-config/agents/specialized/mobile-developer.md +188 -0
  79. package/ai-config/agents/specialized/parallel-plan-executor.md +506 -0
  80. package/ai-config/agents/specialized/plan-executor.md +485 -0
  81. package/ai-config/agents/specialized/solo-dev-planner-modular/00-INDEX.md +485 -0
  82. package/ai-config/agents/specialized/solo-dev-planner-modular/01-CORE.md +3493 -0
  83. package/ai-config/agents/specialized/solo-dev-planner-modular/02-SELF-CORRECTION.md +778 -0
  84. package/ai-config/agents/specialized/solo-dev-planner-modular/03-PROGRESSIVE-SETUP.md +918 -0
  85. package/ai-config/agents/specialized/solo-dev-planner-modular/04-DEPLOYMENT.md +1537 -0
  86. package/ai-config/agents/specialized/solo-dev-planner-modular/05-TESTING.md +2633 -0
  87. package/ai-config/agents/specialized/solo-dev-planner-modular/06-OPERATIONS.md +5610 -0
  88. package/ai-config/agents/specialized/solo-dev-planner-modular/INSTALL.md +335 -0
  89. package/ai-config/agents/specialized/solo-dev-planner-modular/QUICK-REFERENCE.txt +215 -0
  90. package/ai-config/agents/specialized/solo-dev-planner-modular/README.md +260 -0
  91. package/ai-config/agents/specialized/solo-dev-planner-modular/START-HERE.md +379 -0
  92. package/ai-config/agents/specialized/solo-dev-planner-modular/WORKFLOW-DIAGRAM.md +355 -0
  93. package/ai-config/agents/specialized/solo-dev-planner-modular/solo-dev-planner.md +279 -0
  94. package/ai-config/agents/specialized/template-writer.md +347 -0
  95. package/ai-config/agents/specialized/test-runner.md +99 -0
  96. package/ai-config/agents/specialized/vibekanban-smart-worker.md +244 -0
  97. package/ai-config/agents/specialized/wave-executor.md +138 -0
  98. package/ai-config/agents/specialized/workflow-optimizer.md +1114 -0
  99. package/ai-config/commands/git/changelog.md +32 -0
  100. package/ai-config/commands/git/ci-local.md +70 -0
  101. package/ai-config/commands/git/commit.md +35 -0
  102. package/ai-config/commands/git/fix-issue.md +23 -0
  103. package/ai-config/commands/git/pr-create.md +42 -0
  104. package/ai-config/commands/git/pr-review.md +50 -0
  105. package/ai-config/commands/git/worktree.md +39 -0
  106. package/ai-config/commands/refactoring/cleanup.md +24 -0
  107. package/ai-config/commands/refactoring/dead-code.md +40 -0
  108. package/ai-config/commands/refactoring/extract.md +31 -0
  109. package/ai-config/commands/testing/e2e.md +30 -0
  110. package/ai-config/commands/testing/tdd.md +36 -0
  111. package/ai-config/commands/testing/test-coverage.md +30 -0
  112. package/ai-config/commands/testing/test-fix.md +24 -0
  113. package/ai-config/commands/workflow/generate-agents-md.md +85 -0
  114. package/ai-config/commands/workflow/planning.md +47 -0
  115. package/ai-config/commands/workflows/compound.md +89 -0
  116. package/ai-config/commands/workflows/plan.md +77 -0
  117. package/ai-config/commands/workflows/review.md +78 -0
  118. package/ai-config/commands/workflows/work.md +75 -0
  119. package/ai-config/config.yaml +18 -0
  120. package/ai-config/hooks/_TEMPLATE.md +96 -0
  121. package/ai-config/hooks/block-dangerous-commands.md +75 -0
  122. package/ai-config/hooks/commit-guard.md +90 -0
  123. package/ai-config/hooks/context-loader.md +73 -0
  124. package/ai-config/hooks/improve-prompt.md +91 -0
  125. package/ai-config/hooks/learning-log.md +72 -0
  126. package/ai-config/hooks/model-router.md +86 -0
  127. package/ai-config/hooks/secret-scanner.md +64 -0
  128. package/ai-config/hooks/skill-validator.md +102 -0
  129. package/ai-config/hooks/task-artifact.md +114 -0
  130. package/ai-config/hooks/validate-workflow.md +100 -0
  131. package/ai-config/prompts/base.md +71 -0
  132. package/ai-config/prompts/modes/debug.md +34 -0
  133. package/ai-config/prompts/modes/deploy.md +40 -0
  134. package/ai-config/prompts/modes/research.md +32 -0
  135. package/ai-config/prompts/modes/review.md +33 -0
  136. package/ai-config/prompts/review-policy.md +79 -0
  137. package/ai-config/skills/_TEMPLATE.md +157 -0
  138. package/ai-config/skills/backend/api-gateway/SKILL.md +254 -0
  139. package/ai-config/skills/backend/bff-concepts/SKILL.md +239 -0
  140. package/ai-config/skills/backend/bff-spring/SKILL.md +364 -0
  141. package/ai-config/skills/backend/chi-router/SKILL.md +396 -0
  142. package/ai-config/skills/backend/error-handling/SKILL.md +255 -0
  143. package/ai-config/skills/backend/exceptions-spring/SKILL.md +323 -0
  144. package/ai-config/skills/backend/fastapi/SKILL.md +302 -0
  145. package/ai-config/skills/backend/gateway-spring/SKILL.md +390 -0
  146. package/ai-config/skills/backend/go-backend/SKILL.md +457 -0
  147. package/ai-config/skills/backend/gradle-multimodule/SKILL.md +274 -0
  148. package/ai-config/skills/backend/graphql-concepts/SKILL.md +352 -0
  149. package/ai-config/skills/backend/graphql-spring/SKILL.md +398 -0
  150. package/ai-config/skills/backend/grpc-concepts/SKILL.md +283 -0
  151. package/ai-config/skills/backend/grpc-spring/SKILL.md +445 -0
  152. package/ai-config/skills/backend/jwt-auth/SKILL.md +412 -0
  153. package/ai-config/skills/backend/notifications-concepts/SKILL.md +259 -0
  154. package/ai-config/skills/backend/recommendations-concepts/SKILL.md +261 -0
  155. package/ai-config/skills/backend/search-concepts/SKILL.md +263 -0
  156. package/ai-config/skills/backend/search-spring/SKILL.md +375 -0
  157. package/ai-config/skills/backend/spring-boot-4/SKILL.md +172 -0
  158. package/ai-config/skills/backend/websockets/SKILL.md +532 -0
  159. package/ai-config/skills/data-ai/ai-ml/SKILL.md +423 -0
  160. package/ai-config/skills/data-ai/analytics-concepts/SKILL.md +195 -0
  161. package/ai-config/skills/data-ai/analytics-spring/SKILL.md +340 -0
  162. package/ai-config/skills/data-ai/duckdb-analytics/SKILL.md +440 -0
  163. package/ai-config/skills/data-ai/langchain/SKILL.md +238 -0
  164. package/ai-config/skills/data-ai/mlflow/SKILL.md +302 -0
  165. package/ai-config/skills/data-ai/onnx-inference/SKILL.md +290 -0
  166. package/ai-config/skills/data-ai/powerbi/SKILL.md +352 -0
  167. package/ai-config/skills/data-ai/pytorch/SKILL.md +274 -0
  168. package/ai-config/skills/data-ai/scikit-learn/SKILL.md +321 -0
  169. package/ai-config/skills/data-ai/vector-db/SKILL.md +301 -0
  170. package/ai-config/skills/database/graph-databases/SKILL.md +218 -0
  171. package/ai-config/skills/database/graph-spring/SKILL.md +361 -0
  172. package/ai-config/skills/database/pgx-postgres/SKILL.md +512 -0
  173. package/ai-config/skills/database/redis-cache/SKILL.md +343 -0
  174. package/ai-config/skills/database/sqlite-embedded/SKILL.md +388 -0
  175. package/ai-config/skills/database/timescaledb/SKILL.md +320 -0
  176. package/ai-config/skills/docs/api-documentation/SKILL.md +293 -0
  177. package/ai-config/skills/docs/docs-spring/SKILL.md +377 -0
  178. package/ai-config/skills/docs/mustache-templates/SKILL.md +190 -0
  179. package/ai-config/skills/docs/technical-docs/SKILL.md +447 -0
  180. package/ai-config/skills/frontend/astro-ssr/SKILL.md +441 -0
  181. package/ai-config/skills/frontend/frontend-design/SKILL.md +54 -0
  182. package/ai-config/skills/frontend/frontend-web/SKILL.md +368 -0
  183. package/ai-config/skills/frontend/mantine-ui/SKILL.md +396 -0
  184. package/ai-config/skills/frontend/tanstack-query/SKILL.md +439 -0
  185. package/ai-config/skills/frontend/zod-validation/SKILL.md +417 -0
  186. package/ai-config/skills/frontend/zustand-state/SKILL.md +350 -0
  187. package/ai-config/skills/infrastructure/chaos-engineering/SKILL.md +244 -0
  188. package/ai-config/skills/infrastructure/chaos-spring/SKILL.md +378 -0
  189. package/ai-config/skills/infrastructure/devops-infra/SKILL.md +435 -0
  190. package/ai-config/skills/infrastructure/docker-containers/SKILL.md +420 -0
  191. package/ai-config/skills/infrastructure/kubernetes/SKILL.md +456 -0
  192. package/ai-config/skills/infrastructure/opentelemetry/SKILL.md +546 -0
  193. package/ai-config/skills/infrastructure/traefik-proxy/SKILL.md +474 -0
  194. package/ai-config/skills/infrastructure/woodpecker-ci/SKILL.md +315 -0
  195. package/ai-config/skills/mobile/ionic-capacitor/SKILL.md +504 -0
  196. package/ai-config/skills/mobile/mobile-ionic/SKILL.md +448 -0
  197. package/ai-config/skills/prompt-improver/SKILL.md +125 -0
  198. package/ai-config/skills/quality/ghagga-review/SKILL.md +216 -0
  199. package/ai-config/skills/references/hooks-patterns/SKILL.md +238 -0
  200. package/ai-config/skills/references/mcp-servers/SKILL.md +275 -0
  201. package/ai-config/skills/references/plugins-reference/SKILL.md +110 -0
  202. package/ai-config/skills/references/skills-reference/SKILL.md +420 -0
  203. package/ai-config/skills/references/subagent-templates/SKILL.md +193 -0
  204. package/ai-config/skills/systems-iot/modbus-protocol/SKILL.md +410 -0
  205. package/ai-config/skills/systems-iot/mqtt-rumqttc/SKILL.md +408 -0
  206. package/ai-config/skills/systems-iot/rust-systems/SKILL.md +386 -0
  207. package/ai-config/skills/systems-iot/tokio-async/SKILL.md +324 -0
  208. package/ai-config/skills/testing/playwright-e2e/SKILL.md +289 -0
  209. package/ai-config/skills/testing/testcontainers/SKILL.md +299 -0
  210. package/ai-config/skills/testing/vitest-testing/SKILL.md +381 -0
  211. package/ai-config/skills/workflow/ci-local-guide/SKILL.md +118 -0
  212. package/ai-config/skills/workflow/claude-automation-recommender/SKILL.md +299 -0
  213. package/ai-config/skills/workflow/claude-md-improver/SKILL.md +158 -0
  214. package/ai-config/skills/workflow/finishing-a-development-branch/SKILL.md +117 -0
  215. package/ai-config/skills/workflow/git-github/SKILL.md +334 -0
  216. package/ai-config/skills/workflow/git-github/references/examples.md +160 -0
  217. package/ai-config/skills/workflow/git-workflow/SKILL.md +214 -0
  218. package/ai-config/skills/workflow/ide-plugins/SKILL.md +277 -0
  219. package/ai-config/skills/workflow/ide-plugins-intellij/SKILL.md +401 -0
  220. package/ai-config/skills/workflow/obsidian-brain-workflow/SKILL.md +199 -0
  221. package/ai-config/skills/workflow/using-git-worktrees/SKILL.md +100 -0
  222. package/ai-config/skills/workflow/verification-before-completion/SKILL.md +73 -0
  223. package/ai-config/skills/workflow/wave-workflow/SKILL.md +178 -0
  224. package/ci-local/README.md +170 -0
  225. package/ci-local/ci-local.sh +297 -0
  226. package/ci-local/hooks/commit-msg +74 -0
  227. package/ci-local/hooks/pre-commit +162 -0
  228. package/ci-local/hooks/pre-push +41 -0
  229. package/ci-local/install.sh +49 -0
  230. package/ci-local/semgrep.yml +214 -0
  231. package/dist/commands/analyze.d.ts +9 -0
  232. package/dist/commands/analyze.d.ts.map +1 -0
  233. package/dist/commands/analyze.js +55 -0
  234. package/dist/commands/analyze.js.map +1 -0
  235. package/dist/commands/analyze.test.d.ts +2 -0
  236. package/dist/commands/analyze.test.d.ts.map +1 -0
  237. package/dist/commands/analyze.test.js +145 -0
  238. package/dist/commands/analyze.test.js.map +1 -0
  239. package/dist/commands/doctor.d.ts +7 -0
  240. package/dist/commands/doctor.d.ts.map +1 -0
  241. package/dist/commands/doctor.js +158 -0
  242. package/dist/commands/doctor.js.map +1 -0
  243. package/dist/commands/doctor.test.d.ts +2 -0
  244. package/dist/commands/doctor.test.d.ts.map +1 -0
  245. package/dist/commands/doctor.test.js +200 -0
  246. package/dist/commands/doctor.test.js.map +1 -0
  247. package/dist/commands/init.d.ts +9 -0
  248. package/dist/commands/init.d.ts.map +1 -0
  249. package/dist/commands/init.js +283 -0
  250. package/dist/commands/init.js.map +1 -0
  251. package/dist/commands/init.test.d.ts +2 -0
  252. package/dist/commands/init.test.d.ts.map +1 -0
  253. package/dist/commands/init.test.js +271 -0
  254. package/dist/commands/init.test.js.map +1 -0
  255. package/dist/commands/sync.d.ts +8 -0
  256. package/dist/commands/sync.d.ts.map +1 -0
  257. package/dist/commands/sync.js +201 -0
  258. package/dist/commands/sync.js.map +1 -0
  259. package/dist/constants.d.ts +21 -0
  260. package/dist/constants.d.ts.map +1 -0
  261. package/dist/constants.js +57 -0
  262. package/dist/constants.js.map +1 -0
  263. package/dist/e2e/aggressive.e2e.test.d.ts +2 -0
  264. package/dist/e2e/aggressive.e2e.test.d.ts.map +1 -0
  265. package/dist/e2e/aggressive.e2e.test.js +350 -0
  266. package/dist/e2e/aggressive.e2e.test.js.map +1 -0
  267. package/dist/e2e/commands.e2e.test.d.ts +2 -0
  268. package/dist/e2e/commands.e2e.test.d.ts.map +1 -0
  269. package/dist/e2e/commands.e2e.test.js +213 -0
  270. package/dist/e2e/commands.e2e.test.js.map +1 -0
  271. package/dist/index.d.ts +3 -0
  272. package/dist/index.d.ts.map +1 -0
  273. package/dist/index.js +82 -0
  274. package/dist/index.js.map +1 -0
  275. package/dist/lib/common.d.ts +17 -0
  276. package/dist/lib/common.d.ts.map +1 -0
  277. package/dist/lib/common.js +111 -0
  278. package/dist/lib/common.js.map +1 -0
  279. package/dist/lib/common.test.d.ts +2 -0
  280. package/dist/lib/common.test.d.ts.map +1 -0
  281. package/dist/lib/common.test.js +316 -0
  282. package/dist/lib/common.test.js.map +1 -0
  283. package/dist/lib/frontmatter.d.ts +18 -0
  284. package/dist/lib/frontmatter.d.ts.map +1 -0
  285. package/dist/lib/frontmatter.js +61 -0
  286. package/dist/lib/frontmatter.js.map +1 -0
  287. package/dist/lib/frontmatter.test.d.ts +2 -0
  288. package/dist/lib/frontmatter.test.d.ts.map +1 -0
  289. package/dist/lib/frontmatter.test.js +257 -0
  290. package/dist/lib/frontmatter.test.js.map +1 -0
  291. package/dist/lib/template.d.ts +24 -0
  292. package/dist/lib/template.d.ts.map +1 -0
  293. package/dist/lib/template.js +78 -0
  294. package/dist/lib/template.js.map +1 -0
  295. package/dist/lib/template.test.d.ts +2 -0
  296. package/dist/lib/template.test.d.ts.map +1 -0
  297. package/dist/lib/template.test.js +201 -0
  298. package/dist/lib/template.test.js.map +1 -0
  299. package/dist/types/index.d.ts +48 -0
  300. package/dist/types/index.d.ts.map +1 -0
  301. package/dist/types/index.js +2 -0
  302. package/dist/types/index.js.map +1 -0
  303. package/dist/ui/AnalyzeUI.d.ts +7 -0
  304. package/dist/ui/AnalyzeUI.d.ts.map +1 -0
  305. package/dist/ui/AnalyzeUI.js +100 -0
  306. package/dist/ui/AnalyzeUI.js.map +1 -0
  307. package/dist/ui/App.d.ts +13 -0
  308. package/dist/ui/App.d.ts.map +1 -0
  309. package/dist/ui/App.js +100 -0
  310. package/dist/ui/App.js.map +1 -0
  311. package/dist/ui/CIContext.d.ts +9 -0
  312. package/dist/ui/CIContext.d.ts.map +1 -0
  313. package/dist/ui/CIContext.js +9 -0
  314. package/dist/ui/CIContext.js.map +1 -0
  315. package/dist/ui/CISelector.d.ts +8 -0
  316. package/dist/ui/CISelector.d.ts.map +1 -0
  317. package/dist/ui/CISelector.js +45 -0
  318. package/dist/ui/CISelector.js.map +1 -0
  319. package/dist/ui/Doctor.d.ts +3 -0
  320. package/dist/ui/Doctor.d.ts.map +1 -0
  321. package/dist/ui/Doctor.js +89 -0
  322. package/dist/ui/Doctor.js.map +1 -0
  323. package/dist/ui/Header.d.ts +8 -0
  324. package/dist/ui/Header.d.ts.map +1 -0
  325. package/dist/ui/Header.js +30 -0
  326. package/dist/ui/Header.js.map +1 -0
  327. package/dist/ui/MemorySelector.d.ts +8 -0
  328. package/dist/ui/MemorySelector.d.ts.map +1 -0
  329. package/dist/ui/MemorySelector.js +46 -0
  330. package/dist/ui/MemorySelector.js.map +1 -0
  331. package/dist/ui/NameInput.d.ts +8 -0
  332. package/dist/ui/NameInput.d.ts.map +1 -0
  333. package/dist/ui/NameInput.js +69 -0
  334. package/dist/ui/NameInput.js.map +1 -0
  335. package/dist/ui/OptionSelector.d.ts +12 -0
  336. package/dist/ui/OptionSelector.d.ts.map +1 -0
  337. package/dist/ui/OptionSelector.js +69 -0
  338. package/dist/ui/OptionSelector.js.map +1 -0
  339. package/dist/ui/Progress.d.ts +11 -0
  340. package/dist/ui/Progress.d.ts.map +1 -0
  341. package/dist/ui/Progress.js +58 -0
  342. package/dist/ui/Progress.js.map +1 -0
  343. package/dist/ui/StackSelector.d.ts +9 -0
  344. package/dist/ui/StackSelector.d.ts.map +1 -0
  345. package/dist/ui/StackSelector.js +65 -0
  346. package/dist/ui/StackSelector.js.map +1 -0
  347. package/dist/ui/Summary.d.ts +12 -0
  348. package/dist/ui/Summary.d.ts.map +1 -0
  349. package/dist/ui/Summary.js +114 -0
  350. package/dist/ui/Summary.js.map +1 -0
  351. package/dist/ui/SyncUI.d.ts +10 -0
  352. package/dist/ui/SyncUI.d.ts.map +1 -0
  353. package/dist/ui/SyncUI.js +64 -0
  354. package/dist/ui/SyncUI.js.map +1 -0
  355. package/dist/ui/Welcome.d.ts +7 -0
  356. package/dist/ui/Welcome.d.ts.map +1 -0
  357. package/dist/ui/Welcome.js +45 -0
  358. package/dist/ui/Welcome.js.map +1 -0
  359. package/dist/ui/theme.d.ts +10 -0
  360. package/dist/ui/theme.d.ts.map +1 -0
  361. package/dist/ui/theme.js +9 -0
  362. package/dist/ui/theme.js.map +1 -0
  363. package/modules/engram/.gitignore-snippet.txt +6 -0
  364. package/modules/engram/.mcp-config-snippet.json +11 -0
  365. package/modules/engram/README.md +146 -0
  366. package/modules/engram/install-engram.sh +216 -0
  367. package/modules/ghagga/.env.example +43 -0
  368. package/modules/ghagga/README.md +153 -0
  369. package/modules/ghagga/docker-compose.yml +80 -0
  370. package/modules/ghagga/setup-ghagga.sh +139 -0
  371. package/modules/memory-simple/.project/NOTES.md +22 -0
  372. package/modules/memory-simple/README.md +23 -0
  373. package/modules/obsidian-brain/.obsidian/app.json +23 -0
  374. package/modules/obsidian-brain/.obsidian/appearance.json +5 -0
  375. package/modules/obsidian-brain/.obsidian/bookmarks.json +34 -0
  376. package/modules/obsidian-brain/.obsidian/community-plugins.json +1 -0
  377. package/modules/obsidian-brain/.obsidian/core-plugins-migration.json +21 -0
  378. package/modules/obsidian-brain/.obsidian/core-plugins.json +18 -0
  379. package/modules/obsidian-brain/.obsidian/daily-notes.json +5 -0
  380. package/modules/obsidian-brain/.obsidian/graph.json +37 -0
  381. package/modules/obsidian-brain/.obsidian/hotkeys.json +14 -0
  382. package/modules/obsidian-brain/.obsidian/plugins/dataview/data.json +25 -0
  383. package/modules/obsidian-brain/.obsidian/plugins/obsidian-kanban/data.json +29 -0
  384. package/modules/obsidian-brain/.obsidian/plugins/templater-obsidian/data.json +18 -0
  385. package/modules/obsidian-brain/.obsidian/snippets/project-memory.css +71 -0
  386. package/modules/obsidian-brain/.obsidian-gitignore-snippet.txt +8 -0
  387. package/modules/obsidian-brain/.project/Attachments/.gitkeep +0 -0
  388. package/modules/obsidian-brain/.project/Memory/BLOCKERS.md +78 -0
  389. package/modules/obsidian-brain/.project/Memory/CONTEXT.md +102 -0
  390. package/modules/obsidian-brain/.project/Memory/DASHBOARD.md +73 -0
  391. package/modules/obsidian-brain/.project/Memory/DECISIONS.md +87 -0
  392. package/modules/obsidian-brain/.project/Memory/KANBAN.md +15 -0
  393. package/modules/obsidian-brain/.project/Memory/README.md +61 -0
  394. package/modules/obsidian-brain/.project/Memory/WAVES.md +78 -0
  395. package/modules/obsidian-brain/.project/Sessions/TEMPLATE.md +99 -0
  396. package/modules/obsidian-brain/.project/Templates/ADR.md +33 -0
  397. package/modules/obsidian-brain/.project/Templates/Blocker.md +21 -0
  398. package/modules/obsidian-brain/.project/Templates/Session.md +88 -0
  399. package/modules/obsidian-brain/README.md +268 -0
  400. package/modules/obsidian-brain/new-wave.sh +182 -0
  401. package/package.json +51 -0
  402. package/schemas/agent.schema.json +34 -0
  403. package/schemas/ai-config.schema.json +28 -0
  404. package/schemas/skill.schema.json +44 -0
  405. package/src/commands/analyze.test.ts +145 -0
  406. package/src/commands/analyze.ts +69 -0
  407. package/src/commands/doctor.test.ts +208 -0
  408. package/src/commands/doctor.ts +163 -0
  409. package/src/commands/init.test.ts +298 -0
  410. package/src/commands/init.ts +285 -0
  411. package/src/constants.ts +69 -0
  412. package/src/e2e/aggressive.e2e.test.ts +557 -0
  413. package/src/e2e/commands.e2e.test.ts +298 -0
  414. package/src/index.tsx +106 -0
  415. package/src/lib/common.test.ts +318 -0
  416. package/src/lib/common.ts +127 -0
  417. package/src/lib/frontmatter.test.ts +291 -0
  418. package/src/lib/frontmatter.ts +77 -0
  419. package/src/lib/template.test.ts +226 -0
  420. package/src/lib/template.ts +99 -0
  421. package/src/types/index.ts +53 -0
  422. package/src/ui/AnalyzeUI.tsx +133 -0
  423. package/src/ui/App.tsx +175 -0
  424. package/src/ui/CIContext.tsx +25 -0
  425. package/src/ui/CISelector.tsx +72 -0
  426. package/src/ui/Doctor.tsx +122 -0
  427. package/src/ui/Header.tsx +48 -0
  428. package/src/ui/MemorySelector.tsx +73 -0
  429. package/src/ui/NameInput.tsx +82 -0
  430. package/src/ui/OptionSelector.tsx +100 -0
  431. package/src/ui/Progress.tsx +88 -0
  432. package/src/ui/StackSelector.tsx +101 -0
  433. package/src/ui/Summary.tsx +134 -0
  434. package/src/ui/Welcome.tsx +54 -0
  435. package/src/ui/theme.ts +10 -0
  436. package/stryker.config.json +19 -0
  437. package/tasks/_TEMPLATE/files-edited.md +3 -0
  438. package/tasks/_TEMPLATE/plan.md +3 -0
  439. package/tasks/_TEMPLATE/research.md +3 -0
  440. package/tasks/_TEMPLATE/verification.md +5 -0
  441. package/templates/common/dependabot/cargo.yml +11 -0
  442. package/templates/common/dependabot/github-actions.yml +16 -0
  443. package/templates/common/dependabot/gomod.yml +15 -0
  444. package/templates/common/dependabot/gradle.yml +15 -0
  445. package/templates/common/dependabot/header.yml +3 -0
  446. package/templates/common/dependabot/maven.yml +15 -0
  447. package/templates/common/dependabot/npm.yml +20 -0
  448. package/templates/common/dependabot/pip.yml +11 -0
  449. package/templates/dependabot.yml +162 -0
  450. package/templates/github/ci-go.yml +41 -0
  451. package/templates/github/ci-java.yml +45 -0
  452. package/templates/github/ci-monorepo.yml +150 -0
  453. package/templates/github/ci-node.yml +42 -0
  454. package/templates/github/ci-python.yml +42 -0
  455. package/templates/github/ci-rust.yml +42 -0
  456. package/templates/github/dependabot-automerge.yml +40 -0
  457. package/templates/gitlab/gitlab-ci-go.yml +88 -0
  458. package/templates/gitlab/gitlab-ci-java.yml +79 -0
  459. package/templates/gitlab/gitlab-ci-monorepo.yml +126 -0
  460. package/templates/gitlab/gitlab-ci-node.yml +63 -0
  461. package/templates/gitlab/gitlab-ci-python.yml +147 -0
  462. package/templates/gitlab/gitlab-ci-rust.yml +67 -0
  463. package/templates/global/claude-settings.json +98 -0
  464. package/templates/global/codex-config.toml +8 -0
  465. package/templates/global/copilot-instructions/base-rules.instructions.md +13 -0
  466. package/templates/global/copilot-instructions/sdd-orchestrator.instructions.md +37 -0
  467. package/templates/global/gemini-commands/cleanup.toml +20 -0
  468. package/templates/global/gemini-commands/commit.toml +15 -0
  469. package/templates/global/gemini-commands/dead-code.toml +22 -0
  470. package/templates/global/gemini-commands/plan.toml +30 -0
  471. package/templates/global/gemini-commands/review.toml +17 -0
  472. package/templates/global/gemini-commands/sdd-apply.toml +22 -0
  473. package/templates/global/gemini-commands/sdd-ff.toml +14 -0
  474. package/templates/global/gemini-commands/sdd-new.toml +21 -0
  475. package/templates/global/gemini-commands/sdd-verify.toml +21 -0
  476. package/templates/global/gemini-commands/tdd.toml +26 -0
  477. package/templates/global/gemini-settings.json +8 -0
  478. package/templates/global/opencode-config.json +44 -0
  479. package/templates/global/sdd-instructions.md +47 -0
  480. package/templates/global/sdd-orchestrator-claude.md +46 -0
  481. package/templates/global/sdd-orchestrator-copilot.md +34 -0
  482. package/templates/renovate.json +69 -0
  483. package/templates/woodpecker/monorepo/backend.yml +34 -0
  484. package/templates/woodpecker/monorepo/frontend.yml +34 -0
  485. package/templates/woodpecker/monorepo/summary.yml +25 -0
  486. package/templates/woodpecker/woodpecker-go.yml +51 -0
  487. package/templates/woodpecker/woodpecker-java.yml +67 -0
  488. package/templates/woodpecker/woodpecker-node.yml +47 -0
  489. package/templates/woodpecker/woodpecker-python.yml +108 -0
  490. package/templates/woodpecker/woodpecker-rust.yml +57 -0
  491. package/tsconfig.json +19 -0
  492. package/vitest.config.ts +16 -0
  493. package/workflows/reusable-build-go.yml +111 -0
  494. package/workflows/reusable-build-java.yml +120 -0
  495. package/workflows/reusable-build-node.yml +145 -0
  496. package/workflows/reusable-build-python.yml +159 -0
  497. package/workflows/reusable-build-rust.yml +135 -0
  498. package/workflows/reusable-docker.yml +120 -0
  499. package/workflows/reusable-ghagga-review.yml +165 -0
  500. package/workflows/reusable-release.yml +91 -0
@@ -0,0 +1,297 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # CI-LOCAL: Universal CI Simulation for Any Project
4
+ # =============================================================================
5
+ # Detecta automáticamente: Java/Gradle, Java/Maven, Node, Python, Go, Rust
6
+ #
7
+ # Uso:
8
+ # ./ci-local.sh # CI completo
9
+ # ./ci-local.sh quick # Solo lint + compile
10
+ # ./ci-local.sh shell # Shell interactivo en entorno CI
11
+ # ./ci-local.sh detect # Mostrar stack detectado
12
+ # =============================================================================
13
+
14
+ set -e
15
+
16
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
17
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
18
+
19
+ # Source shared library for colors and detect_stack
20
+ source "$SCRIPT_DIR/../lib/common.sh"
21
+
22
+ # =============================================================================
23
+ # CI COMMAND SETUP (extends shared detect_stack with CI-specific commands)
24
+ # =============================================================================
25
+ setup_ci_commands() {
26
+ # detect_stack is from lib/common.sh - sets STACK_TYPE, BUILD_TOOL, JAVA_VERSION
27
+ detect_stack
28
+
29
+ DOCKERFILE=""
30
+ LINT_CMD=""
31
+ COMPILE_CMD=""
32
+ TEST_CMD=""
33
+
34
+ case "$STACK_TYPE" in
35
+ java-gradle)
36
+ DOCKERFILE="java.Dockerfile"
37
+ LINT_CMD="./gradlew spotlessCheck --no-daemon"
38
+ COMPILE_CMD="./gradlew classes testClasses --no-daemon"
39
+ TEST_CMD="./gradlew test --no-daemon"
40
+ ;;
41
+ java-maven)
42
+ DOCKERFILE="java.Dockerfile"
43
+ LINT_CMD="./mvnw spotless:check"
44
+ COMPILE_CMD="./mvnw compile test-compile"
45
+ TEST_CMD="./mvnw test"
46
+ ;;
47
+ node)
48
+ DOCKERFILE="node.Dockerfile"
49
+ LINT_CMD="$BUILD_TOOL run lint"
50
+ COMPILE_CMD="$BUILD_TOOL run build"
51
+ TEST_CMD="$BUILD_TOOL test"
52
+ ;;
53
+ python)
54
+ DOCKERFILE="python.Dockerfile"
55
+ LINT_CMD="ruff check . && { pylint **/*.py 2>/dev/null || true; }"
56
+ COMPILE_CMD=""
57
+ TEST_CMD="pytest"
58
+ ;;
59
+ go)
60
+ DOCKERFILE="go.Dockerfile"
61
+ LINT_CMD="golangci-lint run"
62
+ COMPILE_CMD="go build ./..."
63
+ TEST_CMD="go test ./..."
64
+ ;;
65
+ rust)
66
+ DOCKERFILE="rust.Dockerfile"
67
+ LINT_CMD="cargo clippy -- -D warnings"
68
+ COMPILE_CMD="cargo build"
69
+ TEST_CMD="cargo test"
70
+ ;;
71
+ *)
72
+ DOCKERFILE=""
73
+ ;;
74
+ esac
75
+ }
76
+
77
+ # =============================================================================
78
+ # DOCKER
79
+ # =============================================================================
80
+ get_image_name() {
81
+ echo "ci-local-$STACK_TYPE"
82
+ }
83
+
84
+ create_dockerfile() {
85
+ local docker_dir="$SCRIPT_DIR/docker"
86
+ mkdir -p "$docker_dir"
87
+
88
+ case "$STACK_TYPE" in
89
+ java-gradle|java-maven)
90
+ cat > "$docker_dir/$DOCKERFILE" << 'DOCKERFILE'
91
+ ARG JAVA_VERSION=21
92
+ FROM eclipse-temurin:${JAVA_VERSION}-jdk-noble
93
+ RUN apt-get update && apt-get install -y git curl unzip && rm -rf /var/lib/apt/lists/*
94
+ RUN useradd -m -s /bin/bash runner
95
+ USER runner
96
+ WORKDIR /home/runner/work
97
+ ENV GRADLE_USER_HOME=/home/runner/.gradle
98
+ ENTRYPOINT ["/bin/bash", "-c"]
99
+ DOCKERFILE
100
+ ;;
101
+ node)
102
+ cat > "$docker_dir/$DOCKERFILE" << 'DOCKERFILE'
103
+ FROM node:22-slim
104
+ RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
105
+ RUN npm install -g pnpm
106
+ RUN useradd -m -s /bin/bash runner
107
+ USER runner
108
+ WORKDIR /home/runner/work
109
+ ENTRYPOINT ["/bin/bash", "-c"]
110
+ DOCKERFILE
111
+ ;;
112
+ python)
113
+ cat > "$docker_dir/$DOCKERFILE" << 'DOCKERFILE'
114
+ FROM python:3.12-slim
115
+ RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
116
+ RUN pip install --no-cache-dir pytest ruff pylint poetry
117
+ RUN useradd -m -s /bin/bash runner
118
+ USER runner
119
+ WORKDIR /home/runner/work
120
+ ENTRYPOINT ["/bin/bash", "-c"]
121
+ DOCKERFILE
122
+ ;;
123
+ go)
124
+ cat > "$docker_dir/$DOCKERFILE" << 'DOCKERFILE'
125
+ FROM golang:1.23-bookworm
126
+ RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
127
+ RUN go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.0 && \
128
+ mv /root/go/bin/golangci-lint /usr/local/bin/
129
+ RUN useradd -m -s /bin/bash runner
130
+ USER runner
131
+ WORKDIR /home/runner/work
132
+ ENTRYPOINT ["/bin/bash", "-c"]
133
+ DOCKERFILE
134
+ ;;
135
+ rust)
136
+ cat > "$docker_dir/$DOCKERFILE" << 'DOCKERFILE'
137
+ FROM rust:1.83-slim
138
+ RUN apt-get update && apt-get install -y git pkg-config libssl-dev && rm -rf /var/lib/apt/lists/*
139
+ RUN rustup component add clippy rustfmt
140
+ RUN useradd -m -s /bin/bash runner
141
+ USER runner
142
+ WORKDIR /home/runner/work
143
+ ENTRYPOINT ["/bin/bash", "-c"]
144
+ DOCKERFILE
145
+ ;;
146
+ *)
147
+ cat > "$docker_dir/$DOCKERFILE" << 'DOCKERFILE'
148
+ FROM ubuntu:24.04
149
+ RUN apt-get update && apt-get install -y git curl && rm -rf /var/lib/apt/lists/*
150
+ RUN useradd -m -s /bin/bash runner
151
+ USER runner
152
+ WORKDIR /home/runner/work
153
+ ENTRYPOINT ["/bin/bash", "-c"]
154
+ DOCKERFILE
155
+ ;;
156
+ esac
157
+
158
+ echo -e "${GREEN}Created $DOCKERFILE${NC}"
159
+ }
160
+
161
+ ensure_docker_image() {
162
+ local image_name
163
+ image_name=$(get_image_name)
164
+ local dockerfile="$SCRIPT_DIR/docker/$DOCKERFILE"
165
+
166
+ # Create Dockerfile if it does not exist yet
167
+ if [[ ! -f "$dockerfile" ]]; then
168
+ echo -e "${YELLOW}Creating Dockerfile for $STACK_TYPE...${NC}"
169
+ create_dockerfile
170
+ fi
171
+
172
+ # Detect staleness: rebuild if the Dockerfile content has changed since last build
173
+ local current_hash
174
+ current_hash=$(sha256sum "$dockerfile" 2>/dev/null | cut -d' ' -f1)
175
+ local image_hash
176
+ image_hash=$(docker inspect --format='{{index .Config.Labels "dockerfile-hash"}}' "$image_name" 2>/dev/null || echo "")
177
+
178
+ if [[ "$current_hash" != "$image_hash" ]]; then
179
+ echo -e "${YELLOW}Building CI Docker image...${NC}"
180
+ local -a build_args=("--label" "dockerfile-hash=$current_hash")
181
+ if [[ -n "$JAVA_VERSION" && "$STACK_TYPE" == java-* ]]; then
182
+ build_args+=("--build-arg" "JAVA_VERSION=$JAVA_VERSION")
183
+ fi
184
+ docker build "${build_args[@]}" -f "$dockerfile" -t "$image_name" "$SCRIPT_DIR/docker"
185
+ fi
186
+ }
187
+
188
+ run_in_ci() {
189
+ local image_name
190
+ image_name=$(get_image_name)
191
+ local -a docker_flags=(--rm)
192
+ if [ -t 0 ]; then
193
+ docker_flags+=(-it)
194
+ fi
195
+ local timeout="${CI_LOCAL_TIMEOUT:-600}"
196
+ # Validate timeout is a positive integer
197
+ if ! [[ "$timeout" =~ ^[0-9]+$ ]]; then
198
+ echo -e "${RED}Error: CI_LOCAL_TIMEOUT must be a positive integer, got: $timeout${NC}"
199
+ exit 1
200
+ fi
201
+ docker run "${docker_flags[@]}" \
202
+ --stop-timeout 30 \
203
+ -v "$PROJECT_DIR:/home/runner/work" \
204
+ -e CI=true \
205
+ "$image_name" timeout "$timeout" bash -c "$1"
206
+ }
207
+
208
+ # =============================================================================
209
+ # MAIN
210
+ # =============================================================================
211
+ echo -e "\n${YELLOW}=== CI-LOCAL ===${NC}"
212
+
213
+ setup_ci_commands
214
+
215
+ if [[ "$STACK_TYPE" == "unknown" ]]; then
216
+ echo -e "${RED}Could not detect project type!${NC}"
217
+ echo -e "${YELLOW}Supported: Java/Gradle, Java/Maven, Node, Python, Go, Rust${NC}"
218
+ exit 1
219
+ fi
220
+
221
+ echo -e "${GREEN}Detected: $STACK_TYPE ($BUILD_TOOL)${NC}"
222
+ if [[ "$STACK_TYPE" == java-* ]]; then
223
+ echo -e "${GREEN}Java version: $JAVA_VERSION${NC}"
224
+ fi
225
+
226
+ MODE="${1:-full}"
227
+
228
+ case "$MODE" in
229
+ detect)
230
+ echo -e "\n${CYAN}Stack details:${NC}"
231
+ echo " Type: $STACK_TYPE"
232
+ echo " Build tool: $BUILD_TOOL"
233
+ echo " Dockerfile: $DOCKERFILE"
234
+ echo " Lint: $LINT_CMD"
235
+ echo " Compile: $COMPILE_CMD"
236
+ echo " Test: $TEST_CMD"
237
+ exit 0
238
+ ;;
239
+
240
+ quick)
241
+ ensure_docker_image
242
+ echo -e "\n${YELLOW}Running quick check...${NC}"
243
+
244
+ if [[ -n "$LINT_CMD" ]]; then
245
+ echo -e "${CYAN}Lint: $LINT_CMD${NC}"
246
+ run_in_ci "cd /home/runner/work && $LINT_CMD"
247
+ fi
248
+ if [[ -n "$COMPILE_CMD" ]]; then
249
+ echo -e "${CYAN}Compile: $COMPILE_CMD${NC}"
250
+ run_in_ci "cd /home/runner/work && $COMPILE_CMD"
251
+ fi
252
+ ;;
253
+
254
+ shell)
255
+ ensure_docker_image
256
+ echo -e "\n${YELLOW}Opening shell in CI environment...${NC}"
257
+ image_name=$(get_image_name)
258
+ docker run --rm -it \
259
+ -v "$PROJECT_DIR:/home/runner/work" \
260
+ -e CI=true \
261
+ "$image_name" "cd /home/runner/work && bash"
262
+ ;;
263
+
264
+ full|*)
265
+ ensure_docker_image
266
+ echo -e "\n${YELLOW}Running full CI simulation...${NC}"
267
+
268
+ step=1
269
+ total=0
270
+ [[ -n "$LINT_CMD" ]] && total=$((total + 1))
271
+ [[ -n "$COMPILE_CMD" ]] && total=$((total + 1))
272
+ [[ -n "$TEST_CMD" ]] && total=$((total + 1))
273
+
274
+ if [[ -n "$LINT_CMD" ]]; then
275
+ echo -e "\n${YELLOW}Step $step/$total: Lint${NC}"
276
+ echo -e " ${CYAN}$LINT_CMD${NC}"
277
+ run_in_ci "cd /home/runner/work && $LINT_CMD"
278
+ step=$((step + 1))
279
+ fi
280
+
281
+ if [[ -n "$COMPILE_CMD" ]]; then
282
+ echo -e "\n${YELLOW}Step $step/$total: Compile${NC}"
283
+ echo -e " ${CYAN}$COMPILE_CMD${NC}"
284
+ run_in_ci "cd /home/runner/work && $COMPILE_CMD"
285
+ step=$((step + 1))
286
+ fi
287
+
288
+ if [[ -n "$TEST_CMD" ]]; then
289
+ echo -e "\n${YELLOW}Step $step/$total: Test${NC}"
290
+ echo -e " ${CYAN}$TEST_CMD${NC}"
291
+ run_in_ci "cd /home/runner/work && $TEST_CMD"
292
+ fi
293
+ ;;
294
+ esac
295
+
296
+ echo -e "\n${GREEN}CI Local completed successfully!${NC}"
297
+ echo -e "${GREEN} Safe to push - CI should pass.${NC}\n"
@@ -0,0 +1,74 @@
1
+ #!/bin/bash
2
+ set -e
3
+ # =============================================================================
4
+ # COMMIT-MSG: Validate commit message
5
+ # =============================================================================
6
+ # Bloquea mensajes con atribución a IA
7
+ # =============================================================================
8
+
9
+ COMMIT_MSG_FILE="$1"
10
+ COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")
11
+
12
+ RED='\033[0;31m'
13
+ GREEN='\033[0;32m'
14
+ YELLOW='\033[1;33m'
15
+ NC='\033[0m'
16
+
17
+ # Patrones prohibidos en mensaje de commit (case insensitive)
18
+ AI_PATTERNS=(
19
+ "co-authored-by:.*claude"
20
+ "co-authored-by:.*anthropic"
21
+ "co-authored-by:.*gpt"
22
+ "co-authored-by:.*openai"
23
+ "co-authored-by:.*copilot"
24
+ "co-authored-by:.*gemini"
25
+ "co-authored-by:.*\bai\b"
26
+ "made by claude"
27
+ "made by gpt"
28
+ "made by ai"
29
+ "made with claude"
30
+ "made with ai"
31
+ "generated by claude"
32
+ "generated by gpt"
33
+ "generated by ai"
34
+ "generated with claude"
35
+ "generated with ai"
36
+ "written by claude"
37
+ "written by ai"
38
+ "created by claude"
39
+ "created by ai"
40
+ "assisted by claude"
41
+ "assisted by ai"
42
+ "with help from claude"
43
+ "claude code"
44
+ "claude opus"
45
+ "claude sonnet"
46
+ "claude haiku"
47
+ "gpt-4"
48
+ "gpt-3"
49
+ "chatgpt"
50
+ "@anthropic.com"
51
+ "@openai.com"
52
+ "noreply@anthropic"
53
+ "noreply@openai"
54
+ )
55
+
56
+ for pattern in "${AI_PATTERNS[@]}"; do
57
+ if echo "$COMMIT_MSG" | grep -iqE "$pattern"; then
58
+ echo -e ""
59
+ echo -e "${RED}COMMIT BLOCKED: AI Attribution Detected${NC}"
60
+ echo -e ""
61
+ echo -e "${RED}Found in commit message: ${NC}"
62
+ echo -e "${YELLOW} Pattern: $pattern${NC}"
63
+ echo -e ""
64
+ echo -e "${RED}Your commit message:${NC}"
65
+ echo -e "${YELLOW}$(cat "$COMMIT_MSG_FILE")${NC}"
66
+ echo -e ""
67
+ echo -e "${GREEN}Remove AI attribution. You are the sole author.${NC}"
68
+ echo -e ""
69
+ exit 1
70
+ fi
71
+ done
72
+
73
+ # Mensaje OK
74
+ exit 0
@@ -0,0 +1,162 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # PRE-COMMIT: Universal quick checks before commit
4
+ # =============================================================================
5
+ # Detecta el stack y ejecuta lint + compile rapido
6
+ # Tiempo: ~30-60 segundos
7
+ # =============================================================================
8
+
9
+ set -e
10
+
11
+ # Encontrar directorio .ci-local
12
+ HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
13
+ if [[ -d "$HOOK_DIR/../.ci-local" ]]; then
14
+ CI_LOCAL_DIR="$HOOK_DIR/../.ci-local"
15
+ elif [[ -d "$(git rev-parse --show-toplevel)/.ci-local" ]]; then
16
+ CI_LOCAL_DIR="$(git rev-parse --show-toplevel)/.ci-local"
17
+ else
18
+ echo "Warning: .ci-local not found, skipping pre-commit checks"
19
+ exit 0
20
+ fi
21
+
22
+ PROJECT_DIR="$(dirname "$CI_LOCAL_DIR")"
23
+
24
+ # Source shared library for colors and detect_stack
25
+ source "$CI_LOCAL_DIR/../lib/common.sh"
26
+
27
+ echo -e "${YELLOW}[pre-commit] Running quick checks...${NC}"
28
+
29
+ # =============================================================================
30
+ # CHECK: No AI attribution in staged files
31
+ # =============================================================================
32
+ echo -e "${YELLOW}[1/3] Checking for AI attribution...${NC}"
33
+
34
+ # Patrones prohibidos (case insensitive)
35
+ AI_PATTERNS=(
36
+ "co-authored-by:.*claude"
37
+ "co-authored-by:.*anthropic"
38
+ "co-authored-by:.*gpt"
39
+ "co-authored-by:.*openai"
40
+ "co-authored-by:.*copilot"
41
+ "co-authored-by:.*gemini"
42
+ "co-authored-by:.*\bai\b"
43
+ "made by claude"
44
+ "made by gpt"
45
+ "made by ai"
46
+ "generated by claude"
47
+ "generated by gpt"
48
+ "generated by ai"
49
+ "generated with claude"
50
+ "generated with ai"
51
+ "written by claude"
52
+ "written by ai"
53
+ "created by claude"
54
+ "created by ai"
55
+ "assisted by claude"
56
+ "assisted by ai"
57
+ "with help from claude"
58
+ "claude code"
59
+ "made by anthropic"
60
+ "powered by anthropic"
61
+ "created by anthropic"
62
+ "made by openai"
63
+ "powered by openai"
64
+ "created by openai"
65
+ "@anthropic.com"
66
+ "@openai.com"
67
+ )
68
+
69
+ # Check actual staged content using git show :0:file
70
+ STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -vE '\.(png|jpg|jpeg|gif|ico|woff|ttf|eot|svg|lock)$' || true)
71
+
72
+ if [[ -n "$STAGED_FILES" ]]; then
73
+ for pattern in "${AI_PATTERNS[@]}"; do
74
+ while IFS= read -r file; do
75
+ [[ -z "$file" ]] && continue
76
+ if git show ":0:$file" 2>/dev/null | grep -iqE "$pattern"; then
77
+ echo -e "${RED}[BLOCKED] AI attribution found in staged content: $file${NC}"
78
+ echo -e "${RED} Pattern matched: $pattern${NC}"
79
+ git show ":0:$file" | grep -inE "$pattern" | head -3 | while IFS= read -r line; do
80
+ echo -e "${RED} $line${NC}"
81
+ done
82
+ echo ""
83
+ echo -e "${YELLOW}Remove AI attribution before committing.${NC}"
84
+ exit 1
85
+ fi
86
+ done <<< "$STAGED_FILES"
87
+ done
88
+ echo -e "${GREEN} No AI attribution found${NC}"
89
+ fi
90
+
91
+ # Semgrep security scan - native or Docker fallback
92
+ SEMGREP_CMD=""
93
+ SEMGREP_MODE=""
94
+ if command -v semgrep &> /dev/null; then
95
+ SEMGREP_CMD="native"
96
+ SEMGREP_MODE="native"
97
+ elif command -v docker &> /dev/null && docker info &> /dev/null 2>&1; then
98
+ SEMGREP_CMD="docker"
99
+ SEMGREP_MODE="Docker"
100
+ fi
101
+
102
+ if [[ -n "$SEMGREP_CMD" ]]; then
103
+ echo -e "${YELLOW}[2/3] Security scan (Semgrep via $SEMGREP_MODE)...${NC}"
104
+ STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(java|kt|js|ts|py|go|rs)$' || true)
105
+ if [[ -n "$STAGED_FILES" ]]; then
106
+ if [[ "$SEMGREP_CMD" == "native" ]]; then
107
+ echo "$STAGED_FILES" | tr '\n' '\0' | xargs -0 semgrep --config=.ci-local/semgrep.yml --severity=ERROR --quiet 2>/dev/null || {
108
+ echo -e "${RED}Semgrep found issues${NC}"
109
+ exit 1
110
+ }
111
+ else
112
+ # Pipe file list via stdin into the container where xargs feeds it to semgrep
113
+ echo "$STAGED_FILES" | docker run --rm -i -v "${PROJECT_DIR}:/src" -w /src returntocorp/semgrep \
114
+ sh -c 'xargs semgrep --config=/src/.ci-local/semgrep.yml --severity=ERROR --quiet' 2>/dev/null || {
115
+ echo -e "${RED}Semgrep found issues${NC}"
116
+ exit 1
117
+ }
118
+ fi
119
+ echo -e "${GREEN}Security OK${NC}"
120
+ else
121
+ echo -e "${GREEN}No files to scan${NC}"
122
+ fi
123
+ else
124
+ echo -e "${YELLOW}[2/3] Semgrep not available, skipping (install semgrep or use Docker)${NC}"
125
+ fi
126
+
127
+ # Quick compile/lint basado en el stack
128
+ echo -e "${YELLOW}[3/3] Quick compile check...${NC}"
129
+ cd "$PROJECT_DIR"
130
+
131
+ # Use shared stack detection from lib/common.sh
132
+ detect_stack
133
+
134
+ case "$STACK_TYPE" in
135
+ java-gradle)
136
+ ./gradlew spotlessCheck classes --no-daemon -q 2>/dev/null || {
137
+ echo -e "${RED}Gradle check failed. Run: ./gradlew spotlessApply${NC}"
138
+ exit 1
139
+ }
140
+ ;;
141
+ java-maven)
142
+ ./mvnw compile -q 2>/dev/null || exit 1
143
+ ;;
144
+ node)
145
+ if [[ "$BUILD_TOOL" == "pnpm" ]]; then
146
+ pnpm lint --silent 2>/dev/null || exit 1
147
+ elif [[ "$BUILD_TOOL" == "yarn" ]]; then
148
+ yarn lint --silent 2>/dev/null || exit 1
149
+ else
150
+ npm run lint --silent 2>/dev/null || exit 1
151
+ fi
152
+ ;;
153
+ rust)
154
+ cargo check --quiet 2>/dev/null || exit 1
155
+ ;;
156
+ go)
157
+ go build ./... 2>/dev/null || exit 1
158
+ ;;
159
+ esac
160
+
161
+ echo -e "${GREEN}Compile OK${NC}"
162
+ echo -e "${GREEN}[pre-commit] All checks passed!${NC}"
@@ -0,0 +1,41 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # PRE-PUSH: Full CI simulation before push
4
+ # =============================================================================
5
+ # Corre tests en Docker identico al CI
6
+ # Si pasa aca -> pasa en GitHub Actions / GitLab CI
7
+ # =============================================================================
8
+
9
+ set -e
10
+
11
+ # Encontrar directorio .ci-local
12
+ if [[ -d "$(git rev-parse --show-toplevel)/.ci-local" ]]; then
13
+ CI_LOCAL_DIR="$(git rev-parse --show-toplevel)/.ci-local"
14
+ else
15
+ echo "Warning: .ci-local not found, skipping pre-push CI simulation"
16
+ exit 0
17
+ fi
18
+
19
+ # Source shared library for colors
20
+ source "$CI_LOCAL_DIR/../lib/common.sh"
21
+
22
+ echo -e "${BLUE}PRE-PUSH: CI Simulation${NC}"
23
+
24
+ # Verificar Docker
25
+ if ! docker info &> /dev/null; then
26
+ echo -e "${RED}Docker is not running.${NC}"
27
+ echo -e "${YELLOW} Start Docker or use: git push --no-verify${NC}"
28
+ exit 1
29
+ fi
30
+
31
+ # Ejecutar CI local
32
+ "$CI_LOCAL_DIR/ci-local.sh" full || {
33
+ echo -e ""
34
+ echo -e "${RED}CI SIMULATION FAILED - Push aborted${NC}"
35
+ echo -e "${RED}Fix the issues above before pushing.${NC}"
36
+ echo -e "${RED}To skip: git push --no-verify${NC}"
37
+ exit 1
38
+ }
39
+
40
+ echo -e ""
41
+ echo -e "${GREEN}CI Simulation PASSED - Safe to push!${NC}"
@@ -0,0 +1,49 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # CI-LOCAL: Installation Script
4
+ # =============================================================================
5
+
6
+ set -e
7
+
8
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
9
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
10
+
11
+ # Source shared library for colors
12
+ source "$SCRIPT_DIR/../lib/common.sh"
13
+
14
+ echo -e "${CYAN}=== CI-LOCAL Installation ===${NC}"
15
+
16
+ cd "$PROJECT_DIR"
17
+
18
+ # 1. Configurar git hooks
19
+ echo -e "${YELLOW}[1/2] Configuring git hooks...${NC}"
20
+ git config core.hooksPath .ci-local/hooks
21
+ chmod +x "$SCRIPT_DIR/hooks/"* 2>/dev/null || true
22
+ chmod +x "$SCRIPT_DIR/"*.sh 2>/dev/null || true
23
+ echo -e "${GREEN}Done${NC}"
24
+
25
+ # 2. Verificar dependencias
26
+ echo -e "${YELLOW}[2/2] Checking dependencies...${NC}"
27
+
28
+ if command -v docker &> /dev/null && docker info &> /dev/null; then
29
+ echo -e "${GREEN}Docker: available${NC}"
30
+ else
31
+ echo -e "${YELLOW}Docker: not running (required for pre-push CI)${NC}"
32
+ fi
33
+
34
+ if command -v semgrep &> /dev/null; then
35
+ echo -e "${GREEN}Semgrep: installed (native)${NC}"
36
+ elif command -v docker &> /dev/null && docker info &> /dev/null 2>&1; then
37
+ echo -e "${GREEN}Semgrep: available via Docker (returntocorp/semgrep)${NC}"
38
+ else
39
+ echo -e "${YELLOW}Semgrep: not available (install semgrep or Docker)${NC}"
40
+ fi
41
+
42
+ echo -e ""
43
+ echo -e "${GREEN}Setup complete!${NC}"
44
+ echo -e ""
45
+ echo -e "Hooks enabled:"
46
+ echo -e " - pre-commit: AI check + lint + security"
47
+ echo -e " - commit-msg: Block AI attribution"
48
+ echo -e " - pre-push: CI simulation in Docker"
49
+ echo -e ""