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,377 @@
1
+ ---
2
+ name: docs-spring
3
+ description: >
4
+ Spring Boot API documentation. SpringDoc, Swagger UI, Redoc, custom themes.
5
+ Trigger: apigen-docs, SpringDoc, Swagger, OpenAPI, @Operation, @Schema
6
+ tools:
7
+ - Read
8
+ - Write
9
+ - Edit
10
+ - Bash
11
+ - Grep
12
+ metadata:
13
+ author: apigen-team
14
+ version: "1.0"
15
+ tags: [documentation, spring-boot, springdoc, java]
16
+ scope: ["apigen-docs/**"]
17
+ ---
18
+
19
+ # API Documentation Spring Boot (apigen-docs)
20
+
21
+ ## Configuration
22
+
23
+ ```yaml
24
+ apigen:
25
+ docs:
26
+ enabled: true
27
+
28
+ openapi:
29
+ title: ${spring.application.name}
30
+ version: ${app.version:1.0.0}
31
+ description: API Documentation
32
+ contact:
33
+ name: API Support
34
+ email: support@example.com
35
+ license:
36
+ name: Apache 2.0
37
+ url: https://www.apache.org/licenses/LICENSE-2.0
38
+
39
+ swagger-ui:
40
+ enabled: true
41
+ path: /swagger-ui
42
+ theme: dark # default, dark, feeling-blue
43
+ try-it-out: true
44
+
45
+ redoc:
46
+ enabled: true
47
+ path: /redoc
48
+
49
+ graphql-playground:
50
+ enabled: true
51
+ path: /graphql-playground
52
+
53
+ springdoc:
54
+ api-docs:
55
+ path: /api-docs
56
+ show-actuator: false
57
+ packages-to-scan: com.example.api
58
+ ```
59
+
60
+ ## OpenAPI Configuration
61
+
62
+ ```java
63
+ @Configuration
64
+ @EnableConfigurationProperties(DocsProperties.class)
65
+ public class OpenApiConfiguration {
66
+
67
+ @Bean
68
+ public OpenAPI customOpenAPI(DocsProperties props) {
69
+ return new OpenAPI()
70
+ .info(new Info()
71
+ .title(props.getOpenapi().getTitle())
72
+ .version(props.getOpenapi().getVersion())
73
+ .description(props.getOpenapi().getDescription())
74
+ .contact(new Contact()
75
+ .name(props.getOpenapi().getContact().getName())
76
+ .email(props.getOpenapi().getContact().getEmail()))
77
+ .license(new License()
78
+ .name(props.getOpenapi().getLicense().getName())
79
+ .url(props.getOpenapi().getLicense().getUrl())))
80
+ .externalDocs(new ExternalDocumentation()
81
+ .description("API Guide")
82
+ .url("https://docs.example.com"))
83
+ .components(new Components()
84
+ .addSecuritySchemes("bearerAuth", securityScheme()))
85
+ .security(List.of(new SecurityRequirement().addList("bearerAuth")));
86
+ }
87
+
88
+ private SecurityScheme securityScheme() {
89
+ return new SecurityScheme()
90
+ .type(SecurityScheme.Type.HTTP)
91
+ .scheme("bearer")
92
+ .bearerFormat("JWT")
93
+ .description("JWT token from /auth/login endpoint");
94
+ }
95
+
96
+ @Bean
97
+ public GroupedOpenApi publicApi() {
98
+ return GroupedOpenApi.builder()
99
+ .group("public")
100
+ .pathsToMatch("/api/**")
101
+ .pathsToExclude("/api/admin/**")
102
+ .build();
103
+ }
104
+
105
+ @Bean
106
+ public GroupedOpenApi adminApi() {
107
+ return GroupedOpenApi.builder()
108
+ .group("admin")
109
+ .pathsToMatch("/api/admin/**")
110
+ .build();
111
+ }
112
+ }
113
+ ```
114
+
115
+ ## Controller Annotations
116
+
117
+ ```java
118
+ @RestController
119
+ @RequestMapping("/api/users")
120
+ @Tag(name = "Users", description = "User management operations")
121
+ @SecurityRequirement(name = "bearerAuth")
122
+ public class UserController {
123
+
124
+ @Operation(
125
+ summary = "Get user by ID",
126
+ description = "Retrieves a user by their unique identifier",
127
+ responses = {
128
+ @ApiResponse(
129
+ responseCode = "200",
130
+ description = "User found",
131
+ content = @Content(schema = @Schema(implementation = UserDTO.class))),
132
+ @ApiResponse(
133
+ responseCode = "404",
134
+ description = "User not found",
135
+ content = @Content(schema = @Schema(implementation = ProblemDetail.class)))
136
+ }
137
+ )
138
+ @GetMapping("/{id}")
139
+ public UserDTO getUser(
140
+ @Parameter(description = "User ID", example = "123e4567-e89b-12d3-a456-426614174000")
141
+ @PathVariable UUID id) {
142
+ return userService.findById(id);
143
+ }
144
+
145
+ @Operation(
146
+ summary = "Create user",
147
+ description = "Creates a new user account"
148
+ )
149
+ @ApiResponse(responseCode = "201", description = "User created")
150
+ @ApiResponse(responseCode = "400", description = "Invalid input")
151
+ @ApiResponse(responseCode = "409", description = "Email already exists")
152
+ @PostMapping
153
+ @ResponseStatus(HttpStatus.CREATED)
154
+ public UserDTO createUser(
155
+ @RequestBody @Valid
156
+ @io.swagger.v3.oas.annotations.parameters.RequestBody(
157
+ description = "User to create",
158
+ required = true,
159
+ content = @Content(
160
+ examples = @ExampleObject(
161
+ name = "Example user",
162
+ value = """
163
+ {
164
+ "email": "john@example.com",
165
+ "name": "John Doe",
166
+ "password": "SecurePass123!"
167
+ }
168
+ """
169
+ )
170
+ )
171
+ )
172
+ CreateUserRequest request) {
173
+ return userService.create(request);
174
+ }
175
+
176
+ @Operation(
177
+ summary = "List users",
178
+ description = "Returns a paginated list of users"
179
+ )
180
+ @GetMapping
181
+ public Page<UserDTO> listUsers(
182
+ @Parameter(description = "Page number (0-indexed)")
183
+ @RequestParam(defaultValue = "0") int page,
184
+
185
+ @Parameter(description = "Page size")
186
+ @RequestParam(defaultValue = "20") int size,
187
+
188
+ @Parameter(description = "Filter by status")
189
+ @RequestParam(required = false) UserStatus status) {
190
+ return userService.findAll(PageRequest.of(page, size), status);
191
+ }
192
+ }
193
+ ```
194
+
195
+ ## Schema Annotations
196
+
197
+ ```java
198
+ @Schema(description = "User data transfer object")
199
+ public record UserDTO(
200
+ @Schema(description = "Unique user identifier",
201
+ example = "123e4567-e89b-12d3-a456-426614174000",
202
+ accessMode = Schema.AccessMode.READ_ONLY)
203
+ UUID id,
204
+
205
+ @Schema(description = "User email address",
206
+ example = "john@example.com",
207
+ requiredMode = Schema.RequiredMode.REQUIRED)
208
+ String email,
209
+
210
+ @Schema(description = "User display name",
211
+ example = "John Doe",
212
+ maxLength = 100)
213
+ String name,
214
+
215
+ @Schema(description = "User account status",
216
+ defaultValue = "ACTIVE")
217
+ UserStatus status,
218
+
219
+ @Schema(description = "Account creation timestamp",
220
+ accessMode = Schema.AccessMode.READ_ONLY)
221
+ Instant createdAt
222
+ ) {}
223
+
224
+ @Schema(description = "Request to create a new user")
225
+ public record CreateUserRequest(
226
+ @Schema(description = "Email address", example = "john@example.com")
227
+ @Email @NotBlank
228
+ String email,
229
+
230
+ @Schema(description = "Display name", example = "John Doe")
231
+ @NotBlank @Size(max = 100)
232
+ String name,
233
+
234
+ @Schema(description = "Password (min 8 chars, must contain uppercase, lowercase, digit)",
235
+ example = "SecurePass123!",
236
+ minLength = 8)
237
+ @NotBlank @Size(min = 8)
238
+ String password
239
+ ) {}
240
+ ```
241
+
242
+ ## Custom Swagger UI Theme
243
+
244
+ ```java
245
+ @Bean
246
+ public SwaggerUiConfigProperties swaggerUiConfig() {
247
+ SwaggerUiConfigProperties props = new SwaggerUiConfigProperties();
248
+ props.setPath("/swagger-ui");
249
+ props.setTryItOutEnabled(true);
250
+ props.setFilter(true);
251
+ props.setShowExtensions(true);
252
+ props.setPersistAuthorization(true);
253
+ return props;
254
+ }
255
+
256
+ // Custom CSS for dark theme
257
+ @Bean
258
+ public WebMvcConfigurer swaggerUiCustomizer() {
259
+ return new WebMvcConfigurer() {
260
+ @Override
261
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
262
+ registry.addResourceHandler("/swagger-ui/custom.css")
263
+ .addResourceLocations("classpath:/static/swagger/");
264
+ }
265
+ };
266
+ }
267
+ ```
268
+
269
+ ## Redoc Configuration
270
+
271
+ ```java
272
+ @Controller
273
+ @ConditionalOnProperty(prefix = "apigen.docs.redoc", name = "enabled", havingValue = "true")
274
+ public class RedocController {
275
+
276
+ @GetMapping("/redoc")
277
+ public String redoc(Model model) {
278
+ model.addAttribute("specUrl", "/api-docs");
279
+ model.addAttribute("options", Map.of(
280
+ "hideDownloadButton", false,
281
+ "hideHostname", false,
282
+ "expandResponses", "200,201",
283
+ "theme", Map.of(
284
+ "colors", Map.of(
285
+ "primary", Map.of("main", "#1976d2")
286
+ )
287
+ )
288
+ ));
289
+ return "redoc";
290
+ }
291
+ }
292
+ ```
293
+
294
+ ```html
295
+ <!-- templates/redoc.html -->
296
+ <!DOCTYPE html>
297
+ <html>
298
+ <head>
299
+ <title>API Documentation</title>
300
+ <link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700" rel="stylesheet">
301
+ <style>body { margin: 0; padding: 0; }</style>
302
+ </head>
303
+ <body>
304
+ <redoc spec-url="/api-docs" th:attr="spec-url=${specUrl}"></redoc>
305
+ <script src="https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js"></script>
306
+ </body>
307
+ </html>
308
+ ```
309
+
310
+ ## OpenAPI Customizer
311
+
312
+ ```java
313
+ @Component
314
+ public class ApiDocsCustomizer implements OpenApiCustomizer {
315
+
316
+ @Override
317
+ public void customise(OpenAPI openApi) {
318
+ // Add common headers
319
+ openApi.getPaths().values().forEach(pathItem ->
320
+ pathItem.readOperations().forEach(operation -> {
321
+ if (operation.getParameters() == null) {
322
+ operation.setParameters(new ArrayList<>());
323
+ }
324
+ operation.getParameters().add(new Parameter()
325
+ .name("X-Request-ID")
326
+ .in("header")
327
+ .description("Request correlation ID")
328
+ .schema(new StringSchema().format("uuid")));
329
+ })
330
+ );
331
+
332
+ // Add server list
333
+ openApi.setServers(List.of(
334
+ new Server().url("https://api.example.com").description("Production"),
335
+ new Server().url("https://staging.api.example.com").description("Staging"),
336
+ new Server().url("http://localhost:8080").description("Local")
337
+ ));
338
+ }
339
+ }
340
+ ```
341
+
342
+ ## REST Controller for Docs
343
+
344
+ ```java
345
+ @RestController
346
+ @RequestMapping("/api/docs")
347
+ public class DocsController {
348
+
349
+ private final ResourceLoader resourceLoader;
350
+
351
+ @GetMapping("/openapi.yaml")
352
+ public ResponseEntity<Resource> getOpenApiYaml() {
353
+ Resource resource = resourceLoader.getResource("classpath:openapi/api.yaml");
354
+ return ResponseEntity.ok()
355
+ .contentType(MediaType.parseMediaType("application/x-yaml"))
356
+ .body(resource);
357
+ }
358
+
359
+ @GetMapping("/changelog")
360
+ public ResponseEntity<String> getChangelog() throws IOException {
361
+ Resource resource = resourceLoader.getResource("classpath:docs/CHANGELOG.md");
362
+ String content = StreamUtils.copyToString(
363
+ resource.getInputStream(), StandardCharsets.UTF_8);
364
+ return ResponseEntity.ok()
365
+ .contentType(MediaType.TEXT_MARKDOWN)
366
+ .body(content);
367
+ }
368
+ }
369
+ ```
370
+
371
+ ## Related Skills
372
+
373
+ - `api-documentation`: API documentation concepts
374
+ - `spring-boot-4`: Spring Boot 4.0 patterns
375
+ - `apigen-architecture`: Overall system architecture
376
+
377
+
@@ -0,0 +1,190 @@
1
+ ---
2
+ name: mustache-templates
3
+ description: >
4
+ Desarrollo de templates Mustache para generación de código. Sintaxis, contextos, partials.
5
+ Trigger: template mustache, .mustache, generación código, template context
6
+ tools:
7
+ - Read
8
+ - Write
9
+ - Edit
10
+ - Grep
11
+ - Glob
12
+ metadata:
13
+ author: apigen-team
14
+ version: "1.0"
15
+ tags: [mustache, templates, codegen]
16
+ scope: ["**/templates/**/*.mustache"]
17
+ ---
18
+
19
+ # Mustache Templates
20
+
21
+ ## Ubicación
22
+
23
+ ```
24
+ apigen-codegen/src/main/resources/templates/
25
+ ├── java/
26
+ ├── kotlin/
27
+ ├── csharp/
28
+ ├── go-chi/
29
+ ├── go-gin/
30
+ ├── python-fastapi/
31
+ ├── typescript-nestjs/
32
+ ├── php-laravel/
33
+ └── rust-axum/
34
+ ```
35
+
36
+ ## Sintaxis Quick Reference
37
+
38
+ ```mustache
39
+ {{! Comentario }}
40
+ {{variable}} {{! Variable }}
41
+ {{{rawHtml}}} {{! Sin escape }}
42
+ {{#section}}...{{/section}} {{! Si truthy }}
43
+ {{^section}}...{{/section}} {{! Si falsy }}
44
+ {{#list}}{{.}}{{/list}} {{! Iterar }}
45
+ {{> partial}} {{! Incluir }}
46
+ {{#-first}}...{{/-first}} {{! Primer item }}
47
+ {{#-last}}...{{/-last}} {{! Último item }}
48
+ ```
49
+
50
+ ## Patrones Comunes
51
+
52
+ ### Imports Condicionales
53
+
54
+ ```mustache
55
+ {{#hasValidation}}
56
+ import jakarta.validation.constraints.*;
57
+ {{/hasValidation}}
58
+ {{#hasJpa}}
59
+ import jakarta.persistence.*;
60
+ {{/hasJpa}}
61
+ ```
62
+
63
+ ### Lista con Separadores
64
+
65
+ ```mustache
66
+ {{#columns}}
67
+ {{propertyName}}{{^-last}},{{/-last}}
68
+ {{/columns}}
69
+ ```
70
+
71
+ ### If-Else
72
+
73
+ ```mustache
74
+ {{#nullable}}
75
+ Optional<{{type}}>
76
+ {{/nullable}}
77
+ {{^nullable}}
78
+ {{type}}
79
+ {{/nullable}}
80
+ ```
81
+
82
+ ### Default Value
83
+
84
+ ```mustache
85
+ {{propertyName}}{{^propertyName}}defaultValue{{/propertyName}}
86
+ ```
87
+
88
+ ## Context Objects (Java)
89
+
90
+ ```java
91
+ public class EntityTemplateContext {
92
+ String packageName;
93
+ String className;
94
+ String tableName;
95
+ List<ColumnContext> columns;
96
+ boolean hasAuditing;
97
+ boolean hasSoftDelete;
98
+ }
99
+
100
+ public class ColumnContext {
101
+ String columnName;
102
+ String propertyName;
103
+ String javaType;
104
+ boolean required;
105
+ boolean isId;
106
+ boolean isRelationship;
107
+ String relatedClassName;
108
+ }
109
+ ```
110
+
111
+ ## Template Ejemplo Completo
112
+
113
+ ```mustache
114
+ package {{packageName}}.entity;
115
+
116
+ import jakarta.persistence.*;
117
+ {{#hasLombok}}
118
+ import lombok.*;
119
+ {{/hasLombok}}
120
+ {{#hasValidation}}
121
+ import jakarta.validation.constraints.*;
122
+ {{/hasValidation}}
123
+ {{#hasAuditing}}
124
+ import org.springframework.data.annotation.*;
125
+ {{/hasAuditing}}
126
+
127
+ @Entity
128
+ @Table(name = "{{tableName}}")
129
+ {{#hasLombok}}
130
+ @Data
131
+ @Builder
132
+ @NoArgsConstructor
133
+ @AllArgsConstructor
134
+ {{/hasLombok}}
135
+ public class {{className}} {
136
+
137
+ @Id
138
+ @GeneratedValue(strategy = GenerationType.{{idStrategy}})
139
+ private {{idType}} id;
140
+
141
+ {{#columns}}
142
+ {{^isId}}
143
+ {{#isRelationship}}
144
+ @ManyToOne(fetch = FetchType.LAZY)
145
+ @JoinColumn(name = "{{columnName}}")
146
+ private {{relatedClassName}} {{propertyName}};
147
+ {{/isRelationship}}
148
+ {{^isRelationship}}
149
+ @Column(name = "{{columnName}}"{{#required}}, nullable = false{{/required}})
150
+ private {{javaType}} {{propertyName}};
151
+ {{/isRelationship}}
152
+
153
+ {{/isId}}
154
+ {{/columns}}
155
+ {{#hasAuditing}}
156
+ @CreatedDate
157
+ private Instant createdAt;
158
+
159
+ @LastModifiedDate
160
+ private Instant updatedAt;
161
+ {{/hasAuditing}}
162
+ }
163
+ ```
164
+
165
+ ## Testing Templates
166
+
167
+ ```java
168
+ @Test
169
+ void shouldRenderEntity() {
170
+ var context = new EntityTemplateContext();
171
+ context.setClassName("User");
172
+ context.setTableName("users");
173
+ context.setColumns(List.of(
174
+ column("name", "String", false)
175
+ ));
176
+
177
+ String result = engine.render("java/entity.mustache", context);
178
+
179
+ assertThat(result)
180
+ .contains("public class User")
181
+ .contains("@Table(name = \"users\")")
182
+ .contains("private String name");
183
+ }
184
+ ```
185
+
186
+ ## Related Skills
187
+
188
+ - `codegen-patterns`: Patrones de generación
189
+ - `apigen-codegen-dev`: Desarrollo del módulo
190
+