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,67 @@
1
+ # ===========================================
2
+ # Woodpecker CI for Java/Gradle Projects
3
+ # ===========================================
4
+ # Copy to: .woodpecker.yml
5
+ #
6
+ # MINIMAL CI - runs on push, pull requests, tags, and manual triggers.
7
+ # Run full validation locally: ./.ci-local/ci-local.sh full
8
+ #
9
+ # Caching: Woodpecker does not have declarative cache.
10
+ # Mount volumes on the server for .gradle/ and build/ to speed up builds.
11
+ # ===========================================
12
+
13
+ when:
14
+ - event: push
15
+ branch: main
16
+ - event: pull_request
17
+ - event: tag
18
+ - event: manual
19
+
20
+ steps:
21
+ - name: lint
22
+ image: eclipse-temurin:21-jdk # Change: 17, 21, 25
23
+ environment:
24
+ GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.caching=true"
25
+ commands:
26
+ - chmod +x gradlew
27
+ - ./gradlew spotlessCheck --no-daemon
28
+ failure: ignore
29
+
30
+ - name: build
31
+ image: eclipse-temurin:21-jdk # Change: 17, 21, 25
32
+ environment:
33
+ GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.caching=true"
34
+ commands:
35
+ - chmod +x gradlew
36
+ - ./gradlew classes --no-daemon
37
+
38
+ # ===========================================
39
+ # DOCKER - Only on version tags
40
+ # ===========================================
41
+ # Uncomment to enable Docker builds on tags.
42
+ # Requires woodpeckerci/plugin-docker-buildx.
43
+ #
44
+ # - name: docker
45
+ # image: woodpeckerci/plugin-docker-buildx
46
+ # settings:
47
+ # repo: registry.example.com/my-app
48
+ # tag: ${CI_COMMIT_TAG}
49
+ # dockerfile: Dockerfile
50
+ # when:
51
+ # - event: tag
52
+
53
+ # ===========================================
54
+ # PUBLISH - Only on version tags
55
+ # ===========================================
56
+ # - name: publish
57
+ # image: eclipse-temurin:21-jdk
58
+ # commands:
59
+ # - chmod +x gradlew
60
+ # - ./gradlew publish --no-daemon
61
+ # environment:
62
+ # MAVEN_USERNAME:
63
+ # from_secret: maven_username
64
+ # MAVEN_PASSWORD:
65
+ # from_secret: maven_password
66
+ # when:
67
+ # - event: tag
@@ -0,0 +1,47 @@
1
+ # ===========================================
2
+ # Woodpecker CI for Node.js Projects
3
+ # ===========================================
4
+ # Copy to: .woodpecker.yml
5
+ #
6
+ # MINIMAL CI - runs on push, pull requests, tags, and manual triggers.
7
+ # Run full validation locally: ./.ci-local/ci-local.sh full
8
+ #
9
+ # Caching: Woodpecker does not have declarative cache.
10
+ # Mount a volume for node_modules/ on the server to speed up builds.
11
+ # ===========================================
12
+
13
+ when:
14
+ - event: push
15
+ branch: main
16
+ - event: pull_request
17
+ - event: tag
18
+ - event: manual
19
+
20
+ steps:
21
+ - name: lint
22
+ image: node:20-alpine # Change: 18, 20, 22
23
+ commands:
24
+ - npm ci
25
+ - npm run lint
26
+ failure: ignore
27
+
28
+ - name: build
29
+ image: node:20-alpine # Change: 18, 20, 22
30
+ commands:
31
+ - npm ci
32
+ - npm run build
33
+
34
+ # ===========================================
35
+ # DOCKER - Only on version tags
36
+ # ===========================================
37
+ # Uncomment to enable Docker builds on tags.
38
+ # Requires woodpeckerci/plugin-docker-buildx.
39
+ #
40
+ # - name: docker
41
+ # image: woodpeckerci/plugin-docker-buildx
42
+ # settings:
43
+ # repo: registry.example.com/my-app
44
+ # tag: ${CI_COMMIT_TAG}
45
+ # dockerfile: Dockerfile
46
+ # when:
47
+ # - event: tag
@@ -0,0 +1,108 @@
1
+ # ===========================================
2
+ # Woodpecker CI for Python Projects
3
+ # ===========================================
4
+ # Copy to: .woodpecker.yml
5
+ #
6
+ # MINIMAL CI - runs on push, pull requests, tags, and manual triggers.
7
+ # Run full validation locally: ./.ci-local/ci-local.sh full
8
+ #
9
+ # Uses pip by default. See commented alternatives for poetry/uv.
10
+ #
11
+ # Caching: Woodpecker does not have declarative cache.
12
+ # Mount a volume for pip cache on the server to speed up builds.
13
+ # ===========================================
14
+
15
+ when:
16
+ - event: push
17
+ branch: main
18
+ - event: pull_request
19
+ - event: tag
20
+ - event: manual
21
+
22
+ steps:
23
+ - name: lint
24
+ image: python:3.12-slim # Change: 3.10, 3.11, 3.12, 3.13
25
+ commands:
26
+ - python -m pip install --upgrade pip
27
+ - pip install ruff mypy
28
+ - ruff check .
29
+ - mypy . --ignore-missing-imports
30
+ failure: ignore
31
+
32
+ - name: build
33
+ image: python:3.12-slim # Change: 3.10, 3.11, 3.12, 3.13
34
+ commands:
35
+ - python -m pip install --upgrade pip
36
+ - pip install -r requirements.txt || true
37
+ - pip install -r requirements-dev.txt || true
38
+
39
+ # ===========================================
40
+ # Alternative: Poetry
41
+ # ===========================================
42
+ # Replace the build and lint steps above with:
43
+ #
44
+ # - name: lint
45
+ # image: python:3.12-slim
46
+ # commands:
47
+ # - pip install poetry
48
+ # - poetry install
49
+ # - poetry run ruff check .
50
+ # - poetry run mypy . --ignore-missing-imports
51
+ # failure: ignore
52
+ #
53
+ # - name: build
54
+ # image: python:3.12-slim
55
+ # commands:
56
+ # - pip install poetry
57
+ # - poetry install
58
+
59
+ # ===========================================
60
+ # Alternative: uv
61
+ # ===========================================
62
+ # Replace the build and lint steps above with:
63
+ #
64
+ # - name: lint
65
+ # image: python:3.12-slim
66
+ # commands:
67
+ # - pip install uv
68
+ # - uv sync
69
+ # - uv run ruff check .
70
+ # - uv run mypy . --ignore-missing-imports
71
+ # failure: ignore
72
+ #
73
+ # - name: build
74
+ # image: python:3.12-slim
75
+ # commands:
76
+ # - pip install uv
77
+ # - uv sync
78
+
79
+ # ===========================================
80
+ # DOCKER - Only on version tags
81
+ # ===========================================
82
+ # Uncomment to enable Docker builds on tags.
83
+ # Requires woodpeckerci/plugin-docker-buildx.
84
+ #
85
+ # - name: docker
86
+ # image: woodpeckerci/plugin-docker-buildx
87
+ # settings:
88
+ # repo: registry.example.com/my-app
89
+ # tag: ${CI_COMMIT_TAG}
90
+ # dockerfile: Dockerfile
91
+ # when:
92
+ # - event: tag
93
+
94
+ # ===========================================
95
+ # PUBLISH to PyPI - Only on version tags
96
+ # ===========================================
97
+ # - name: publish
98
+ # image: python:3.12-slim
99
+ # commands:
100
+ # - pip install build twine
101
+ # - python -m build
102
+ # - twine upload dist/*
103
+ # environment:
104
+ # TWINE_USERNAME: __token__
105
+ # TWINE_PASSWORD:
106
+ # from_secret: pypi_token
107
+ # when:
108
+ # - event: tag
@@ -0,0 +1,57 @@
1
+ # ===========================================
2
+ # Woodpecker CI for Rust Projects
3
+ # ===========================================
4
+ # Copy to: .woodpecker.yml
5
+ #
6
+ # MINIMAL CI - runs on push, pull requests, tags, and manual triggers.
7
+ # Run full validation locally: ./.ci-local/ci-local.sh full
8
+ #
9
+ # Caching: Woodpecker does not have declarative cache.
10
+ # Mount volumes for .cargo/ and target/ on the server to speed up builds.
11
+ # ===========================================
12
+
13
+ when:
14
+ - event: push
15
+ branch: main
16
+ - event: pull_request
17
+ - event: tag
18
+ - event: manual
19
+
20
+ steps:
21
+ - name: lint
22
+ image: rust:1.83-slim
23
+ commands:
24
+ - rustup component add clippy rustfmt
25
+ - cargo fmt --all -- --check
26
+ - cargo clippy --all-targets -- -D warnings
27
+ failure: ignore
28
+
29
+ - name: build
30
+ image: rust:1.83-slim
31
+ commands:
32
+ - cargo build --release
33
+
34
+ # ===========================================
35
+ # DOCKER - Only on version tags
36
+ # ===========================================
37
+ # Uncomment to enable Docker builds on tags.
38
+ # Requires woodpeckerci/plugin-docker-buildx.
39
+ #
40
+ # - name: docker
41
+ # image: woodpeckerci/plugin-docker-buildx
42
+ # settings:
43
+ # repo: registry.example.com/my-app
44
+ # tag: ${CI_COMMIT_TAG}
45
+ # dockerfile: Dockerfile
46
+ # when:
47
+ # - event: tag
48
+
49
+ # ===========================================
50
+ # RELEASE - Only on version tags
51
+ # ===========================================
52
+ # - name: release
53
+ # image: rust:1.83-slim
54
+ # commands:
55
+ # - echo "Uploading release artifacts..."
56
+ # when:
57
+ # - event: tag
package/tsconfig.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "jsx": "react",
7
+ "jsxFactory": "React.createElement",
8
+ "outDir": "dist",
9
+ "rootDir": "src",
10
+ "strict": true,
11
+ "esModuleInterop": true,
12
+ "skipLibCheck": true,
13
+ "declaration": true,
14
+ "declarationMap": true,
15
+ "sourceMap": true
16
+ },
17
+ "include": ["src/**/*"],
18
+ "exclude": ["node_modules", "dist"]
19
+ }
@@ -0,0 +1,16 @@
1
+ import { defineConfig } from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: true,
6
+ environment: 'node',
7
+ pool: 'forks',
8
+ testTimeout: 30_000,
9
+ coverage: {
10
+ provider: 'v8',
11
+ include: ['src/**/*.ts', 'src/**/*.tsx'],
12
+ exclude: ['src/index.tsx', 'src/ui/**', 'src/e2e/**'],
13
+ thresholds: { lines: 85, branches: 80 },
14
+ },
15
+ },
16
+ })
@@ -0,0 +1,111 @@
1
+ # ===========================================
2
+ # Reusable Workflow: Go Build
3
+ # ===========================================
4
+ # Minimal CI for Go projects.
5
+ #
6
+ # Usage:
7
+ # jobs:
8
+ # build:
9
+ # uses: JNZader/project-starter-framework/.github/workflows/reusable-build-go.yml@main
10
+ # with:
11
+ # go-version: '1.23'
12
+ # ===========================================
13
+
14
+ name: Go Build (Reusable)
15
+
16
+ on:
17
+ workflow_call:
18
+ inputs:
19
+ go-version:
20
+ description: 'Go version'
21
+ required: false
22
+ default: '1.23'
23
+ type: string
24
+ run-tests:
25
+ description: 'Run tests'
26
+ required: false
27
+ default: true
28
+ type: boolean
29
+ run-lint:
30
+ description: 'Run golangci-lint'
31
+ required: false
32
+ default: true
33
+ type: boolean
34
+ working-directory:
35
+ description: 'Working directory'
36
+ required: false
37
+ default: '.'
38
+ type: string
39
+ build-flags:
40
+ description: 'Additional go build flags'
41
+ required: false
42
+ default: ''
43
+ type: string
44
+ lint-fail-on-error:
45
+ description: 'Fail the build if linting fails'
46
+ required: false
47
+ default: true
48
+ type: boolean
49
+
50
+ jobs:
51
+ build:
52
+ name: Build
53
+ runs-on: ubuntu-latest
54
+ timeout-minutes: 10
55
+ permissions:
56
+ contents: read
57
+
58
+ defaults:
59
+ run:
60
+ working-directory: ${{ inputs.working-directory }}
61
+
62
+ steps:
63
+ - name: Checkout
64
+ uses: actions/checkout@v4
65
+
66
+ - name: Validate inputs
67
+ env:
68
+ ARGS: ${{ inputs.build-flags }}
69
+ run: |
70
+ if echo "$ARGS" | grep -qE '[;|&$`(){}<>'"'"'"]'; then
71
+ echo "::error::Invalid characters in input arguments. Shell metacharacters are not allowed."
72
+ exit 1
73
+ fi
74
+
75
+ - name: Setup Go ${{ inputs.go-version }}
76
+ uses: actions/setup-go@v5
77
+ with:
78
+ go-version: ${{ inputs.go-version }}
79
+ cache-dependency-path: ${{ inputs.working-directory }}/go.sum
80
+
81
+ - name: Download dependencies
82
+ run: go mod download
83
+
84
+ - name: Verify dependencies
85
+ run: go mod verify
86
+
87
+ - name: Build
88
+ env:
89
+ BUILD_FLAGS: ${{ inputs.build-flags }}
90
+ run: go build -v $BUILD_FLAGS ./...
91
+
92
+ - name: Lint
93
+ if: inputs.run-lint
94
+ uses: golangci/golangci-lint-action@v6
95
+ with:
96
+ version: v1.62
97
+ working-directory: ${{ inputs.working-directory }}
98
+ args: --timeout=5m
99
+ continue-on-error: ${{ !inputs.lint-fail-on-error }}
100
+
101
+ - name: Test
102
+ if: inputs.run-tests
103
+ run: go test -v -race -coverprofile=coverage.out ./...
104
+
105
+ - name: Upload coverage
106
+ if: inputs.run-tests
107
+ uses: actions/upload-artifact@v4
108
+ with:
109
+ name: coverage
110
+ path: ${{ inputs.working-directory }}/coverage.out
111
+ retention-days: 7
@@ -0,0 +1,120 @@
1
+ # ===========================================
2
+ # Reusable Workflow: Java/Gradle Build
3
+ # ===========================================
4
+ # Minimal CI for Java projects - saves CI minutes.
5
+ #
6
+ # Usage in your project:
7
+ # jobs:
8
+ # build:
9
+ # uses: JNZader/project-starter-framework/.github/workflows/reusable-build-java.yml@main
10
+ # with:
11
+ # java-version: '21'
12
+ # ===========================================
13
+
14
+ name: Java Build (Reusable)
15
+
16
+ on:
17
+ workflow_call:
18
+ inputs:
19
+ java-version:
20
+ description: 'Java version (17, 21, 25)'
21
+ required: false
22
+ default: '21'
23
+ type: string
24
+ gradle-tasks:
25
+ description: 'Gradle tasks to run'
26
+ required: false
27
+ default: 'classes'
28
+ type: string
29
+ run-tests:
30
+ description: 'Run tests (uses more minutes)'
31
+ required: false
32
+ default: true
33
+ type: boolean
34
+ run-spotless:
35
+ description: 'Run Spotless format check'
36
+ required: false
37
+ default: true
38
+ type: boolean
39
+ working-directory:
40
+ description: 'Working directory'
41
+ required: false
42
+ default: '.'
43
+ type: string
44
+ gradle-args:
45
+ description: 'Additional Gradle arguments'
46
+ required: false
47
+ default: ''
48
+ type: string
49
+ lint-fail-on-error:
50
+ description: 'Fail the build if linting fails'
51
+ required: false
52
+ default: true
53
+ type: boolean
54
+
55
+ env:
56
+ GRADLE_OPTS: '-Dorg.gradle.daemon=false -Dorg.gradle.caching=true'
57
+
58
+ jobs:
59
+ build:
60
+ name: Build
61
+ runs-on: ubuntu-latest
62
+ timeout-minutes: 15
63
+ permissions:
64
+ contents: read
65
+
66
+ defaults:
67
+ run:
68
+ working-directory: ${{ inputs.working-directory }}
69
+
70
+ steps:
71
+ - name: Checkout
72
+ uses: actions/checkout@v4
73
+
74
+ - name: Validate inputs
75
+ env:
76
+ ARGS: ${{ inputs.gradle-args }}
77
+ run: |
78
+ if echo "$ARGS" | grep -qE '[;|&$`(){}<>'"'"'"]'; then
79
+ echo "::error::Invalid characters in input arguments. Shell metacharacters are not allowed."
80
+ exit 1
81
+ fi
82
+
83
+ - name: Setup Java ${{ inputs.java-version }}
84
+ uses: actions/setup-java@v4
85
+ with:
86
+ java-version: ${{ inputs.java-version }}
87
+ distribution: 'temurin'
88
+
89
+ - name: Setup Gradle
90
+ uses: gradle/actions/setup-gradle@v4
91
+ with:
92
+ cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
93
+
94
+ - name: Grant execute permission
95
+ run: chmod +x gradlew
96
+
97
+ - name: Compile
98
+ env:
99
+ GRADLE_TASKS: ${{ inputs.gradle-tasks }}
100
+ GRADLE_ARGS: ${{ inputs.gradle-args }}
101
+ run: ./gradlew $GRADLE_TASKS --no-daemon $GRADLE_ARGS
102
+
103
+ - name: Spotless Check
104
+ if: inputs.run-spotless
105
+ continue-on-error: ${{ !inputs.lint-fail-on-error }}
106
+ run: ./gradlew spotlessCheck --no-daemon
107
+
108
+ - name: Test
109
+ if: inputs.run-tests
110
+ env:
111
+ GRADLE_ARGS: ${{ inputs.gradle-args }}
112
+ run: ./gradlew test --no-daemon $GRADLE_ARGS
113
+
114
+ - name: Upload test results
115
+ if: inputs.run-tests && always()
116
+ uses: actions/upload-artifact@v4
117
+ with:
118
+ name: test-results
119
+ path: '**/build/reports/tests/'
120
+ retention-days: 7
@@ -0,0 +1,145 @@
1
+ # ===========================================
2
+ # Reusable Workflow: Node.js Build
3
+ # ===========================================
4
+ # Minimal CI for Node.js/TypeScript projects.
5
+ #
6
+ # Usage:
7
+ # jobs:
8
+ # build:
9
+ # uses: JNZader/project-starter-framework/.github/workflows/reusable-build-node.yml@main
10
+ # with:
11
+ # node-version: '20'
12
+ # ===========================================
13
+
14
+ name: Node.js Build (Reusable)
15
+
16
+ on:
17
+ workflow_call:
18
+ inputs:
19
+ node-version:
20
+ description: 'Node.js version'
21
+ required: false
22
+ default: '20'
23
+ type: string
24
+ package-manager:
25
+ description: 'Package manager (npm, yarn, pnpm)'
26
+ required: false
27
+ default: 'npm'
28
+ type: string
29
+ build-script:
30
+ description: 'Build script name'
31
+ required: false
32
+ default: 'build'
33
+ type: string
34
+ run-tests:
35
+ description: 'Run tests'
36
+ required: false
37
+ default: true
38
+ type: boolean
39
+ run-lint:
40
+ description: 'Run linting'
41
+ required: false
42
+ default: true
43
+ type: boolean
44
+ working-directory:
45
+ description: 'Working directory'
46
+ required: false
47
+ default: '.'
48
+ type: string
49
+ lint-fail-on-error:
50
+ description: 'Fail the build if linting fails'
51
+ required: false
52
+ default: true
53
+ type: boolean
54
+
55
+ jobs:
56
+ build:
57
+ name: Build
58
+ runs-on: ubuntu-latest
59
+ timeout-minutes: 10
60
+ permissions:
61
+ contents: read
62
+
63
+ defaults:
64
+ run:
65
+ working-directory: ${{ inputs.working-directory }}
66
+
67
+ steps:
68
+ - name: Checkout
69
+ uses: actions/checkout@v4
70
+
71
+ - name: Setup pnpm
72
+ if: inputs.package-manager == 'pnpm'
73
+ uses: pnpm/action-setup@v4
74
+ with:
75
+ version: 9
76
+
77
+ - name: Setup Node.js ${{ inputs.node-version }}
78
+ uses: actions/setup-node@v4
79
+ with:
80
+ node-version: ${{ inputs.node-version }}
81
+ cache: ${{ inputs.package-manager }}
82
+
83
+ - name: Install (npm)
84
+ if: inputs.package-manager == 'npm'
85
+ run: npm ci
86
+
87
+ - name: Install (yarn)
88
+ if: inputs.package-manager == 'yarn'
89
+ run: yarn install --frozen-lockfile
90
+
91
+ - name: Install (pnpm)
92
+ if: inputs.package-manager == 'pnpm'
93
+ run: pnpm install --frozen-lockfile
94
+
95
+ - name: Lint
96
+ if: inputs.run-lint
97
+ continue-on-error: ${{ !inputs.lint-fail-on-error }}
98
+ env:
99
+ PKG_MGR: ${{ inputs.package-manager }}
100
+ run: |
101
+ if [ "$PKG_MGR" = "pnpm" ]; then
102
+ pnpm run lint
103
+ elif [ "$PKG_MGR" = "yarn" ]; then
104
+ yarn lint
105
+ else
106
+ npm run lint
107
+ fi
108
+
109
+ - name: Build
110
+ env:
111
+ PKG_MGR: ${{ inputs.package-manager }}
112
+ BUILD_SCRIPT: ${{ inputs.build-script }}
113
+ run: |
114
+ if [ "$PKG_MGR" = "pnpm" ]; then
115
+ pnpm run "$BUILD_SCRIPT"
116
+ elif [ "$PKG_MGR" = "yarn" ]; then
117
+ yarn "$BUILD_SCRIPT"
118
+ else
119
+ npm run "$BUILD_SCRIPT"
120
+ fi
121
+
122
+ - name: Test
123
+ if: inputs.run-tests
124
+ env:
125
+ PKG_MGR: ${{ inputs.package-manager }}
126
+ run: |
127
+ if [ "$PKG_MGR" = "pnpm" ]; then
128
+ pnpm test
129
+ elif [ "$PKG_MGR" = "yarn" ]; then
130
+ yarn test
131
+ else
132
+ npm test
133
+ fi
134
+
135
+ - name: Upload test results
136
+ if: inputs.run-tests && always()
137
+ uses: actions/upload-artifact@v4
138
+ with:
139
+ name: test-results-node
140
+ path: |
141
+ coverage/
142
+ junit.xml
143
+ test-results/
144
+ retention-days: 7
145
+ if-no-files-found: ignore