@dewtech/dare-cli 3.3.0 → 3.4.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 (582) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +764 -764
  3. package/dist/__tests__/confidence.test.js +13 -13
  4. package/dist/__tests__/dag-converter.test.js +56 -56
  5. package/dist/__tests__/mcp-server/server.test.js +3 -16
  6. package/dist/__tests__/mcp-server/server.test.js.map +1 -1
  7. package/dist/__tests__/project-generator.test.js +2 -2
  8. package/dist/__tests__/project-generator.test.js.map +1 -1
  9. package/dist/__tests__/refine.test.js +49 -49
  10. package/dist/__tests__/reverse-collection.test.js +6 -6
  11. package/dist/__tests__/review.test.js +38 -38
  12. package/dist/__tests__/security-hardening.test.d.ts +2 -0
  13. package/dist/__tests__/security-hardening.test.d.ts.map +1 -0
  14. package/dist/__tests__/security-hardening.test.js +101 -0
  15. package/dist/__tests__/security-hardening.test.js.map +1 -0
  16. package/dist/__tests__/validate.test.js +65 -65
  17. package/dist/bin/dare.js +0 -0
  18. package/dist/commands/__tests__/init-validation.test.d.ts +2 -0
  19. package/dist/commands/__tests__/init-validation.test.d.ts.map +1 -0
  20. package/dist/commands/__tests__/init-validation.test.js +81 -0
  21. package/dist/commands/__tests__/init-validation.test.js.map +1 -0
  22. package/dist/commands/__tests__/init.integration.spec.js +6 -4
  23. package/dist/commands/__tests__/init.integration.spec.js.map +1 -1
  24. package/dist/commands/__tests__/init.spec.d.ts +2 -0
  25. package/dist/commands/__tests__/init.spec.d.ts.map +1 -0
  26. package/dist/commands/__tests__/init.spec.js +88 -0
  27. package/dist/commands/__tests__/init.spec.js.map +1 -0
  28. package/dist/commands/blueprint.js +122 -122
  29. package/dist/commands/design.js +20 -20
  30. package/dist/commands/init-validation.d.ts +22 -0
  31. package/dist/commands/init-validation.d.ts.map +1 -0
  32. package/dist/commands/init-validation.js +54 -0
  33. package/dist/commands/init-validation.js.map +1 -0
  34. package/dist/commands/init.d.ts.map +1 -1
  35. package/dist/commands/init.js +26 -10
  36. package/dist/commands/init.js.map +1 -1
  37. package/dist/graphrag/graph-rag.js +24 -24
  38. package/dist/mcp-server/__tests__/auth.test.d.ts +2 -0
  39. package/dist/mcp-server/__tests__/auth.test.d.ts.map +1 -0
  40. package/dist/mcp-server/__tests__/auth.test.js +72 -0
  41. package/dist/mcp-server/__tests__/auth.test.js.map +1 -0
  42. package/dist/mcp-server/__tests__/boot-config.test.d.ts +2 -0
  43. package/dist/mcp-server/__tests__/boot-config.test.d.ts.map +1 -0
  44. package/dist/mcp-server/__tests__/boot-config.test.js +29 -0
  45. package/dist/mcp-server/__tests__/boot-config.test.js.map +1 -0
  46. package/dist/mcp-server/__tests__/error-sanitize.test.d.ts +2 -0
  47. package/dist/mcp-server/__tests__/error-sanitize.test.d.ts.map +1 -0
  48. package/dist/mcp-server/__tests__/error-sanitize.test.js +66 -0
  49. package/dist/mcp-server/__tests__/error-sanitize.test.js.map +1 -0
  50. package/dist/mcp-server/__tests__/path-confinement.test.d.ts +2 -0
  51. package/dist/mcp-server/__tests__/path-confinement.test.d.ts.map +1 -0
  52. package/dist/mcp-server/__tests__/path-confinement.test.js +135 -0
  53. package/dist/mcp-server/__tests__/path-confinement.test.js.map +1 -0
  54. package/dist/mcp-server/bin/server.js +18 -6
  55. package/dist/mcp-server/bin/server.js.map +1 -1
  56. package/dist/mcp-server/boot-config.d.ts +6 -0
  57. package/dist/mcp-server/boot-config.d.ts.map +1 -0
  58. package/dist/mcp-server/boot-config.js +17 -0
  59. package/dist/mcp-server/boot-config.js.map +1 -0
  60. package/dist/mcp-server/middleware/auth.d.ts +10 -0
  61. package/dist/mcp-server/middleware/auth.d.ts.map +1 -0
  62. package/dist/mcp-server/middleware/auth.js +44 -0
  63. package/dist/mcp-server/middleware/auth.js.map +1 -0
  64. package/dist/mcp-server/middleware/cors.d.ts +6 -0
  65. package/dist/mcp-server/middleware/cors.d.ts.map +1 -0
  66. package/dist/mcp-server/middleware/cors.js +30 -0
  67. package/dist/mcp-server/middleware/cors.js.map +1 -0
  68. package/dist/mcp-server/middleware/error-handler.d.ts +11 -0
  69. package/dist/mcp-server/middleware/error-handler.d.ts.map +1 -0
  70. package/dist/mcp-server/middleware/error-handler.js +14 -0
  71. package/dist/mcp-server/middleware/error-handler.js.map +1 -0
  72. package/dist/mcp-server/server.d.ts +7 -2
  73. package/dist/mcp-server/server.d.ts.map +1 -1
  74. package/dist/mcp-server/server.js +185 -105
  75. package/dist/mcp-server/server.js.map +1 -1
  76. package/dist/skills/registry-mock.json +109 -109
  77. package/dist/skills/tests/manifest.spec.js +20 -20
  78. package/dist/stacks/__tests__/dna-emitter.spec.js +6 -6
  79. package/dist/stacks/dna-emitter.js +69 -69
  80. package/dist/stacks/ruby-rails-8/scaffold.js +15 -15
  81. package/dist/utils/project-generator.d.ts.map +1 -1
  82. package/dist/utils/project-generator.js +254 -252
  83. package/dist/utils/project-generator.js.map +1 -1
  84. package/dist/utils/stack-bootstrap.js +371 -371
  85. package/dist/utils/templates.js +394 -394
  86. package/dist/verification/__tests__/anti-tamper.test.js +13 -13
  87. package/package.json +96 -93
  88. package/templates/DARE-dag-example.yaml +280 -280
  89. package/templates/UPDATE-MANIFEST.json +68 -68
  90. package/templates/backend/node-nestjs/.env.example +9 -9
  91. package/templates/backend/node-nestjs/nest-cli.json +8 -8
  92. package/templates/backend/node-nestjs/package.json +50 -50
  93. package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
  94. package/templates/backend/node-nestjs/src/app.module.ts +15 -15
  95. package/templates/backend/node-nestjs/src/app.service.ts +8 -8
  96. package/templates/backend/node-nestjs/src/main.ts +24 -24
  97. package/templates/backend/node-nestjs/tsconfig.json +21 -21
  98. package/templates/backend/php-laravel/.env.example +22 -22
  99. package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
  100. package/templates/backend/php-laravel/composer.json +40 -40
  101. package/templates/backend/python-fastapi/.env.example +4 -4
  102. package/templates/backend/python-fastapi/app/api/router.py +8 -8
  103. package/templates/backend/python-fastapi/app/core/config.py +20 -20
  104. package/templates/backend/python-fastapi/main.py +35 -35
  105. package/templates/backend/python-fastapi/requirements.txt +13 -13
  106. package/templates/backend/rust-axum/.env.example +3 -3
  107. package/templates/backend/rust-axum/Cargo.toml +23 -23
  108. package/templates/backend/rust-axum/src/errors.rs +30 -30
  109. package/templates/backend/rust-axum/src/main.rs +32 -32
  110. package/templates/backend/rust-axum/src/routes.rs +6 -6
  111. package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
  112. package/templates/frontend/leptos-csr/Cargo.toml +16 -16
  113. package/templates/frontend/leptos-csr/Trunk.toml +10 -10
  114. package/templates/frontend/leptos-csr/index.html +11 -11
  115. package/templates/frontend/leptos-csr/src/lib.rs +20 -20
  116. package/templates/frontend/leptos-csr/style/main.scss +19 -19
  117. package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
  118. package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
  119. package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
  120. package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
  121. package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
  122. package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
  123. package/templates/frontend/react/index.html +12 -12
  124. package/templates/frontend/react/package.json +35 -35
  125. package/templates/frontend/react/src/App.tsx +25 -25
  126. package/templates/frontend/react/src/main.tsx +9 -9
  127. package/templates/frontend/vue/package.json +32 -32
  128. package/templates/frontend/vue/src/App.vue +7 -7
  129. package/templates/frontend/vue/src/main.ts +10 -10
  130. package/templates/frontend/vue/src/router/index.ts +14 -14
  131. package/templates/frontend/vue/src/views/HomeView.vue +6 -6
  132. package/templates/hooks/pre-commit-dare-validate +24 -24
  133. package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -152
  134. package/templates/ide/antigravity/.agents/skills/dare-bench/SKILL.md +21 -21
  135. package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +368 -368
  136. package/templates/ide/antigravity/.agents/skills/dare-bootstrap/SKILL.md +32 -32
  137. package/templates/ide/antigravity/.agents/skills/dare-bugfix-design/SKILL.md +76 -76
  138. package/templates/ide/antigravity/.agents/skills/dare-dag/SKILL.md +32 -32
  139. package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -154
  140. package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -130
  141. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
  142. package/templates/ide/antigravity/.agents/skills/dare-design/SKILL.md +180 -180
  143. package/templates/ide/antigravity/.agents/skills/dare-discover/SKILL.md +33 -33
  144. package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -63
  145. package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -315
  146. package/templates/ide/antigravity/.agents/skills/dare-execute/SKILL.md +264 -264
  147. package/templates/ide/antigravity/.agents/skills/dare-feature-design/SKILL.md +74 -74
  148. package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -192
  149. package/templates/ide/antigravity/.agents/skills/dare-graph/SKILL.md +35 -35
  150. package/templates/ide/antigravity/.agents/skills/dare-info/SKILL.md +31 -31
  151. package/templates/ide/antigravity/.agents/skills/dare-init/SKILL.md +35 -35
  152. package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -337
  153. package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -166
  154. package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -217
  155. package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -61
  156. package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -187
  157. package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -217
  158. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
  159. package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -108
  160. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
  161. package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -263
  162. package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
  163. package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -274
  164. package/templates/ide/antigravity/.agents/skills/dare-skill/SKILL.md +35 -35
  165. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
  166. package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -188
  167. package/templates/ide/antigravity/.agents/skills/dare-update/SKILL.md +33 -33
  168. package/templates/ide/antigravity/.agents/skills/dare-validate/SKILL.md +33 -33
  169. package/templates/ide/antigravity/.agents/skills/dare-welcome/SKILL.md +30 -30
  170. package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -343
  171. package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -377
  172. package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -382
  173. package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -326
  174. package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -393
  175. package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
  176. package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
  177. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
  178. package/templates/ide/antigravity/templates/TASKS-template.md +26 -26
  179. package/templates/ide/antigravity/templates/TELEMETRY-template.md +125 -125
  180. package/templates/ide/claude/.claude/commands/dare-ax.md +131 -131
  181. package/templates/ide/claude/.claude/commands/dare-bench.md +18 -18
  182. package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
  183. package/templates/ide/claude/.claude/commands/dare-bootstrap.md +27 -27
  184. package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -119
  185. package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
  186. package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
  187. package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -117
  188. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
  189. package/templates/ide/claude/.claude/commands/dare-dag.md +27 -27
  190. package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
  191. package/templates/ide/claude/.claude/commands/dare-discover.md +28 -28
  192. package/templates/ide/claude/.claude/commands/dare-dna.md +75 -75
  193. package/templates/ide/claude/.claude/commands/dare-docker.md +207 -207
  194. package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
  195. package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -147
  196. package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -149
  197. package/templates/ide/claude/.claude/commands/dare-graph.md +30 -30
  198. package/templates/ide/claude/.claude/commands/dare-info.md +26 -26
  199. package/templates/ide/claude/.claude/commands/dare-init.md +30 -30
  200. package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -211
  201. package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -124
  202. package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -148
  203. package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -72
  204. package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -166
  205. package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -159
  206. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
  207. package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -139
  208. package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
  209. package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
  210. package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
  211. package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
  212. package/templates/ide/claude/.claude/commands/dare-skill.md +30 -30
  213. package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
  214. package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -132
  215. package/templates/ide/claude/.claude/commands/dare-update.md +28 -28
  216. package/templates/ide/claude/.claude/commands/dare-validate.md +28 -28
  217. package/templates/ide/claude/.claude/commands/dare-welcome.md +25 -25
  218. package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -205
  219. package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -232
  220. package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -228
  221. package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -210
  222. package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -236
  223. package/templates/ide/claude/.claude/settings.example.json +35 -35
  224. package/templates/ide/claude/CLAUDE.md +146 -146
  225. package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
  226. package/templates/ide/claude/templates/DESIGN-template.md +129 -129
  227. package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
  228. package/templates/ide/claude/templates/TASKS-template.md +26 -26
  229. package/templates/ide/claude/templates/TELEMETRY-template.md +125 -125
  230. package/templates/ide/cursor/.cursor/commands/dare-bench.md +18 -18
  231. package/templates/ide/cursor/.cursor/commands/dare-blueprint.md +86 -86
  232. package/templates/ide/cursor/.cursor/commands/dare-bootstrap.md +27 -27
  233. package/templates/ide/cursor/.cursor/commands/dare-bugfix-design.md +64 -64
  234. package/templates/ide/cursor/.cursor/commands/dare-dag-run.md +110 -110
  235. package/templates/ide/cursor/.cursor/commands/dare-dag-viz.md +139 -139
  236. package/templates/ide/cursor/.cursor/commands/dare-dag.md +27 -27
  237. package/templates/ide/cursor/.cursor/commands/dare-design.md +35 -35
  238. package/templates/ide/cursor/.cursor/commands/dare-discover.md +28 -28
  239. package/templates/ide/cursor/.cursor/commands/dare-dna.md +75 -75
  240. package/templates/ide/cursor/.cursor/commands/dare-docker-compose.md +18 -18
  241. package/templates/ide/cursor/.cursor/commands/dare-dockerfile.md +17 -17
  242. package/templates/ide/cursor/.cursor/commands/dare-execute.md +19 -19
  243. package/templates/ide/cursor/.cursor/commands/dare-feature-design.md +64 -64
  244. package/templates/ide/cursor/.cursor/commands/dare-graph.md +30 -30
  245. package/templates/ide/cursor/.cursor/commands/dare-info.md +26 -26
  246. package/templates/ide/cursor/.cursor/commands/dare-init.md +30 -30
  247. package/templates/ide/cursor/.cursor/commands/dare-migrate.md +72 -72
  248. package/templates/ide/cursor/.cursor/commands/dare-refine.md +107 -107
  249. package/templates/ide/cursor/.cursor/commands/dare-reverse.md +139 -139
  250. package/templates/ide/cursor/.cursor/commands/dare-review.md +91 -91
  251. package/templates/ide/cursor/.cursor/commands/dare-skill.md +30 -30
  252. package/templates/ide/cursor/.cursor/commands/dare-tasks.md +184 -184
  253. package/templates/ide/cursor/.cursor/commands/dare-telemetry.md +42 -42
  254. package/templates/ide/cursor/.cursor/commands/dare-update.md +28 -28
  255. package/templates/ide/cursor/.cursor/commands/dare-validate.md +28 -28
  256. package/templates/ide/cursor/.cursor/commands/dare-welcome.md +25 -25
  257. package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -263
  258. package/templates/ide/cursor/.cursor/rules/skill-bugfix-design.mdc +51 -51
  259. package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -173
  260. package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -134
  261. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
  262. package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -63
  263. package/templates/ide/cursor/.cursor/rules/skill-docker.mdc +33 -33
  264. package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -352
  265. package/templates/ide/cursor/.cursor/rules/skill-feature-design.mdc +43 -43
  266. package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -244
  267. package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -371
  268. package/templates/ide/cursor/.cursor/rules/skill-laravel-api.mdc +44 -44
  269. package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -266
  270. package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -295
  271. package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -367
  272. package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -58
  273. package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -346
  274. package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -248
  275. package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -400
  276. package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -262
  277. package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -107
  278. package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -281
  279. package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
  280. package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
  281. package/templates/ide/cursor/.cursor/rules/skill-telemetry.mdc +156 -156
  282. package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
  283. package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
  284. package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
  285. package/templates/ide/cursor/templates/TASKS-template.md +26 -26
  286. package/templates/ide/cursor/templates/TELEMETRY-template.md +125 -125
  287. package/templates/shared/docker-compose.yml +41 -41
  288. package/templates/stacks/go-gin/.dare/skills.yml +11 -11
  289. package/templates/stacks/go-gin/.env.example +24 -24
  290. package/templates/stacks/go-gin/.github/workflows/dare-ci.yml +42 -42
  291. package/templates/stacks/go-gin/README.md.tpl +38 -38
  292. package/templates/stacks/go-gin/cmd/server/main.go.tpl +78 -78
  293. package/templates/stacks/go-gin/db/migrations/0001_create_users.down.sql +2 -2
  294. package/templates/stacks/go-gin/db/migrations/0001_create_users.up.sql +12 -12
  295. package/templates/stacks/go-gin/db/queries/users.sql +23 -23
  296. package/templates/stacks/go-gin/gitignore +7 -7
  297. package/templates/stacks/go-gin/go.mod.tpl +17 -17
  298. package/templates/stacks/go-gin/internal/config/config.go +41 -41
  299. package/templates/stacks/go-gin/internal/db/postgres.go.tpl +25 -25
  300. package/templates/stacks/go-gin/internal/handler/auth_handler.go.tpl +72 -72
  301. package/templates/stacks/go-gin/internal/handler/users_handler.go.tpl +72 -72
  302. package/templates/stacks/go-gin/internal/handler/ws_handler.go +37 -37
  303. package/templates/stacks/go-gin/internal/llm/dummy.go +14 -14
  304. package/templates/stacks/go-gin/internal/llm/provider.go +8 -8
  305. package/templates/stacks/go-gin/internal/middleware/jwt.go.tpl +58 -58
  306. package/templates/stacks/go-gin/internal/middleware/rate_limit.go +55 -55
  307. package/templates/stacks/go-gin/internal/model/user.go +17 -17
  308. package/templates/stacks/go-gin/internal/repository/users_repository.go.tpl +79 -79
  309. package/templates/stacks/go-gin/internal/service/auth_service.go.tpl +55 -55
  310. package/templates/stacks/go-gin/internal/service/users_service.go.tpl +53 -53
  311. package/templates/stacks/go-gin/llms.txt.tpl +54 -54
  312. package/templates/stacks/go-gin/openapi.json.tpl +46 -46
  313. package/templates/stacks/go-gin/sqlc.yaml +14 -14
  314. package/templates/stacks/go-gin/tests/smoke_test.go.tpl +22 -22
  315. package/templates/stacks/go-stdlib/.dare/skills.yml +11 -11
  316. package/templates/stacks/go-stdlib/.env.example +24 -24
  317. package/templates/stacks/go-stdlib/.github/workflows/dare-ci.yml +42 -42
  318. package/templates/stacks/go-stdlib/README.md.tpl +41 -41
  319. package/templates/stacks/go-stdlib/cmd/server/main.go.tpl +82 -82
  320. package/templates/stacks/go-stdlib/db/migrations/0001_create_users.down.sql +2 -2
  321. package/templates/stacks/go-stdlib/db/migrations/0001_create_users.up.sql +12 -12
  322. package/templates/stacks/go-stdlib/db/queries/users.sql +23 -23
  323. package/templates/stacks/go-stdlib/gitignore +6 -6
  324. package/templates/stacks/go-stdlib/go.mod.tpl +15 -15
  325. package/templates/stacks/go-stdlib/internal/config/config.go +41 -41
  326. package/templates/stacks/go-stdlib/internal/db/postgres.go.tpl +24 -24
  327. package/templates/stacks/go-stdlib/internal/handler/auth_handler.go.tpl +71 -71
  328. package/templates/stacks/go-stdlib/internal/handler/users_handler.go.tpl +84 -84
  329. package/templates/stacks/go-stdlib/internal/handler/ws_handler.go +36 -36
  330. package/templates/stacks/go-stdlib/internal/httpx/json.go +32 -32
  331. package/templates/stacks/go-stdlib/internal/llm/dummy.go +14 -14
  332. package/templates/stacks/go-stdlib/internal/llm/provider.go +8 -8
  333. package/templates/stacks/go-stdlib/internal/middleware/chain.go +21 -21
  334. package/templates/stacks/go-stdlib/internal/middleware/cors.go +27 -27
  335. package/templates/stacks/go-stdlib/internal/middleware/jwt.go.tpl +51 -51
  336. package/templates/stacks/go-stdlib/internal/middleware/rate_limit.go +81 -81
  337. package/templates/stacks/go-stdlib/internal/model/user.go +17 -17
  338. package/templates/stacks/go-stdlib/internal/repository/users_repository.go.tpl +75 -75
  339. package/templates/stacks/go-stdlib/internal/service/auth_service.go.tpl +55 -55
  340. package/templates/stacks/go-stdlib/internal/service/users_service.go.tpl +53 -53
  341. package/templates/stacks/go-stdlib/llms.txt.tpl +60 -60
  342. package/templates/stacks/go-stdlib/openapi.json.tpl +46 -46
  343. package/templates/stacks/go-stdlib/sqlc.yaml +14 -14
  344. package/templates/stacks/go-stdlib/tests/smoke_test.go.tpl +45 -45
  345. package/templates/stacks/mcp-go/.dare/skills.yml +8 -8
  346. package/templates/stacks/mcp-go/.env.example +14 -14
  347. package/templates/stacks/mcp-go/.github/workflows/dare-ci.yml +42 -42
  348. package/templates/stacks/mcp-go/README.md.tpl +50 -50
  349. package/templates/stacks/mcp-go/cmd/server/main.go.tpl +62 -62
  350. package/templates/stacks/mcp-go/gitignore +6 -6
  351. package/templates/stacks/mcp-go/go.mod.tpl +9 -9
  352. package/templates/stacks/mcp-go/internal/prompts/summarize.go +9 -9
  353. package/templates/stacks/mcp-go/internal/server/server.go.tpl +80 -80
  354. package/templates/stacks/mcp-go/internal/tools/echo.go +15 -15
  355. package/templates/stacks/mcp-go/internal/transports/http.go.tpl +21 -21
  356. package/templates/stacks/mcp-go/internal/transports/sse.go.tpl +17 -17
  357. package/templates/stacks/mcp-go/internal/transports/stdio.go.tpl +14 -14
  358. package/templates/stacks/mcp-go/llms.txt.tpl +60 -60
  359. package/templates/stacks/mcp-go/openapi.json.tpl +31 -31
  360. package/templates/stacks/mcp-go/tests/echo_test.go.tpl +37 -37
  361. package/templates/stacks/mcp-node-ts/.dare/skills.yml +8 -8
  362. package/templates/stacks/mcp-node-ts/.env.example +16 -16
  363. package/templates/stacks/mcp-node-ts/.github/workflows/dare-ci.yml +54 -54
  364. package/templates/stacks/mcp-node-ts/README.md.hbs +49 -49
  365. package/templates/stacks/mcp-node-ts/gitignore +7 -7
  366. package/templates/stacks/mcp-node-ts/llms.txt.hbs +61 -61
  367. package/templates/stacks/mcp-node-ts/openapi.json.hbs +39 -39
  368. package/templates/stacks/mcp-node-ts/package.json.hbs +35 -35
  369. package/templates/stacks/mcp-node-ts/src/cli.ts.hbs +71 -71
  370. package/templates/stacks/mcp-node-ts/src/prompts/index.ts +36 -36
  371. package/templates/stacks/mcp-node-ts/src/server.ts.hbs +45 -45
  372. package/templates/stacks/mcp-node-ts/src/tools/echo.ts +23 -23
  373. package/templates/stacks/mcp-node-ts/src/tools/index.ts +18 -18
  374. package/templates/stacks/mcp-node-ts/src/transports/http.ts +68 -68
  375. package/templates/stacks/mcp-node-ts/src/transports/sse.ts +58 -58
  376. package/templates/stacks/mcp-node-ts/src/transports/stdio.ts +5 -5
  377. package/templates/stacks/mcp-node-ts/tests/echo.test.ts +50 -50
  378. package/templates/stacks/mcp-node-ts/tsconfig.json +17 -17
  379. package/templates/stacks/mcp-python/.dare/skills.yml +8 -8
  380. package/templates/stacks/mcp-python/.env.example +14 -14
  381. package/templates/stacks/mcp-python/.github/workflows/dare-ci.yml +42 -42
  382. package/templates/stacks/mcp-python/README.md.j2 +49 -49
  383. package/templates/stacks/mcp-python/gitignore +12 -12
  384. package/templates/stacks/mcp-python/llms.txt.j2 +56 -56
  385. package/templates/stacks/mcp-python/openapi.json.j2 +33 -33
  386. package/templates/stacks/mcp-python/pyproject.toml.j2 +37 -37
  387. package/templates/stacks/mcp-python/src/cli.py.j2 +68 -68
  388. package/templates/stacks/mcp-python/src/prompts/summarize.py +10 -10
  389. package/templates/stacks/mcp-python/src/server.py.j2 +28 -28
  390. package/templates/stacks/mcp-python/src/tools/echo.py +12 -12
  391. package/templates/stacks/mcp-python/src/transports/http.py +12 -12
  392. package/templates/stacks/mcp-python/src/transports/sse.py +13 -13
  393. package/templates/stacks/mcp-python/src/transports/stdio.py +6 -6
  394. package/templates/stacks/mcp-python/tests/test_echo.py +28 -28
  395. package/templates/stacks/mcp-rust/.dare/skills.yml +8 -8
  396. package/templates/stacks/mcp-rust/.env.example +14 -14
  397. package/templates/stacks/mcp-rust/.github/workflows/dare-ci.yml +38 -38
  398. package/templates/stacks/mcp-rust/Cargo.toml.tera +35 -35
  399. package/templates/stacks/mcp-rust/README.md.tera +50 -50
  400. package/templates/stacks/mcp-rust/gitignore +5 -5
  401. package/templates/stacks/mcp-rust/llms.txt.tera +60 -60
  402. package/templates/stacks/mcp-rust/openapi.json.tera +31 -31
  403. package/templates/stacks/mcp-rust/src/cli.rs.tera +33 -33
  404. package/templates/stacks/mcp-rust/src/lib.rs +6 -6
  405. package/templates/stacks/mcp-rust/src/main.rs.tera +30 -30
  406. package/templates/stacks/mcp-rust/src/prompts/mod.rs +1 -1
  407. package/templates/stacks/mcp-rust/src/prompts/summarize.rs +5 -5
  408. package/templates/stacks/mcp-rust/src/server.rs.tera +38 -38
  409. package/templates/stacks/mcp-rust/src/tools/echo.rs +18 -18
  410. package/templates/stacks/mcp-rust/src/tools/mod.rs +22 -22
  411. package/templates/stacks/mcp-rust/src/transports/http.rs +27 -27
  412. package/templates/stacks/mcp-rust/src/transports/mod.rs +3 -3
  413. package/templates/stacks/mcp-rust/src/transports/sse.rs +33 -33
  414. package/templates/stacks/mcp-rust/src/transports/stdio.rs +14 -14
  415. package/templates/stacks/mcp-rust/tests/echo_test.rs.tera +27 -27
  416. package/templates/stacks/node-nestjs/.dare/skills.yml +11 -11
  417. package/templates/stacks/node-nestjs/.env.example +21 -21
  418. package/templates/stacks/node-nestjs/.github/workflows/dare-ci.yml +54 -54
  419. package/templates/stacks/node-nestjs/README.md.hbs +35 -35
  420. package/templates/stacks/node-nestjs/gitignore +7 -7
  421. package/templates/stacks/node-nestjs/llms.txt.hbs +47 -47
  422. package/templates/stacks/node-nestjs/nest-cli.json +16 -16
  423. package/templates/stacks/node-nestjs/openapi.json.hbs +75 -75
  424. package/templates/stacks/node-nestjs/package.json.hbs +57 -57
  425. package/templates/stacks/node-nestjs/prisma/schema.prisma +25 -25
  426. package/templates/stacks/node-nestjs/prisma/seed.ts.hbs +25 -25
  427. package/templates/stacks/node-nestjs/src/app.module.ts +39 -39
  428. package/templates/stacks/node-nestjs/src/auth/auth.controller.ts +29 -29
  429. package/templates/stacks/node-nestjs/src/auth/auth.module.ts +25 -25
  430. package/templates/stacks/node-nestjs/src/auth/auth.service.ts +36 -36
  431. package/templates/stacks/node-nestjs/src/auth/dto/login-response.dto.ts +9 -9
  432. package/templates/stacks/node-nestjs/src/auth/dto/login.dto.ts +17 -17
  433. package/templates/stacks/node-nestjs/src/auth/jwt.strategy.ts +25 -25
  434. package/templates/stacks/node-nestjs/src/common/filters/problem-details.filter.ts +38 -38
  435. package/templates/stacks/node-nestjs/src/common/interceptors/json-response.interceptor.ts +13 -13
  436. package/templates/stacks/node-nestjs/src/main.ts.hbs +44 -44
  437. package/templates/stacks/node-nestjs/src/prisma/prisma.module.ts +9 -9
  438. package/templates/stacks/node-nestjs/src/prisma/prisma.service.ts +9 -9
  439. package/templates/stacks/node-nestjs/src/users/dto/create-user.dto.ts +22 -22
  440. package/templates/stacks/node-nestjs/src/users/dto/user.dto.ts +15 -15
  441. package/templates/stacks/node-nestjs/src/users/users.controller.ts +41 -41
  442. package/templates/stacks/node-nestjs/src/users/users.module.ts +11 -11
  443. package/templates/stacks/node-nestjs/src/users/users.repository.ts +38 -38
  444. package/templates/stacks/node-nestjs/src/users/users.service.ts +38 -38
  445. package/templates/stacks/node-nestjs/tsconfig.build.json +4 -4
  446. package/templates/stacks/node-nestjs/tsconfig.json +28 -28
  447. package/templates/stacks/php-laravel/.dare/skills.yml +11 -11
  448. package/templates/stacks/php-laravel/.env.example +41 -41
  449. package/templates/stacks/php-laravel/.github/workflows/dare-ci.yml +43 -43
  450. package/templates/stacks/php-laravel/README.md.hbs +36 -36
  451. package/templates/stacks/php-laravel/app/Http/Controllers/Api/AuthController.php +36 -36
  452. package/templates/stacks/php-laravel/app/Http/Controllers/Api/UsersController.php +33 -33
  453. package/templates/stacks/php-laravel/app/Http/Requests/CreateUserRequest.php +26 -26
  454. package/templates/stacks/php-laravel/app/Http/Requests/LoginRequest.php +34 -34
  455. package/templates/stacks/php-laravel/app/Llm/Contracts/LlmProvider.php +12 -12
  456. package/templates/stacks/php-laravel/app/Llm/Providers/DummyProvider.php +13 -13
  457. package/templates/stacks/php-laravel/app/Llm/Providers/OpenAiProvider.php +33 -33
  458. package/templates/stacks/php-laravel/app/Models/User.php +44 -44
  459. package/templates/stacks/php-laravel/app/Repositories/UsersRepository.php +32 -32
  460. package/templates/stacks/php-laravel/app/Services/AuthService.php +37 -37
  461. package/templates/stacks/php-laravel/app/Services/UsersService.php +57 -57
  462. package/templates/stacks/php-laravel/artisan +12 -12
  463. package/templates/stacks/php-laravel/bootstrap/app.php +29 -29
  464. package/templates/stacks/php-laravel/bootstrap/providers.php +5 -5
  465. package/templates/stacks/php-laravel/composer.json.hbs +58 -58
  466. package/templates/stacks/php-laravel/config/l5-swagger.php +41 -41
  467. package/templates/stacks/php-laravel/config/reverb.php +34 -34
  468. package/templates/stacks/php-laravel/config/sanctum.php +15 -15
  469. package/templates/stacks/php-laravel/database/migrations/2026_06_01_000001_create_users_table.php +27 -27
  470. package/templates/stacks/php-laravel/database/seeders/DatabaseSeeder.php +21 -21
  471. package/templates/stacks/php-laravel/gitignore +23 -23
  472. package/templates/stacks/php-laravel/llms.txt.hbs +53 -53
  473. package/templates/stacks/php-laravel/openapi.json.hbs +43 -43
  474. package/templates/stacks/php-laravel/phpstan.neon +9 -9
  475. package/templates/stacks/php-laravel/routes/api.php +13 -13
  476. package/templates/stacks/php-laravel/routes/channels.php +7 -7
  477. package/templates/stacks/php-laravel/tests/Feature/AuthTest.php +35 -35
  478. package/templates/stacks/php-laravel/tests/Feature/UsersTest.php +30 -30
  479. package/templates/stacks/php-laravel/tests/Pest.php +5 -5
  480. package/templates/stacks/python-fastapi/.dare/skills.yml +11 -11
  481. package/templates/stacks/python-fastapi/.env.example +21 -21
  482. package/templates/stacks/python-fastapi/.github/workflows/dare-ci.yml +43 -43
  483. package/templates/stacks/python-fastapi/README.md.j2 +35 -35
  484. package/templates/stacks/python-fastapi/alembic/env.py +46 -46
  485. package/templates/stacks/python-fastapi/alembic/script.py.mako +26 -26
  486. package/templates/stacks/python-fastapi/alembic/versions/0001_create_users.py.j2 +37 -37
  487. package/templates/stacks/python-fastapi/alembic.ini.j2 +39 -39
  488. package/templates/stacks/python-fastapi/app/core/config.py +24 -24
  489. package/templates/stacks/python-fastapi/app/core/security.py +34 -34
  490. package/templates/stacks/python-fastapi/app/db/session.py +22 -22
  491. package/templates/stacks/python-fastapi/app/main.py.j2 +36 -36
  492. package/templates/stacks/python-fastapi/app/models/__init__.py +3 -3
  493. package/templates/stacks/python-fastapi/app/models/user.py +30 -30
  494. package/templates/stacks/python-fastapi/app/repositories/user_repository.py +34 -34
  495. package/templates/stacks/python-fastapi/app/routers/auth.py +37 -37
  496. package/templates/stacks/python-fastapi/app/routers/users.py +46 -46
  497. package/templates/stacks/python-fastapi/app/schemas/user.py +56 -56
  498. package/templates/stacks/python-fastapi/app/services/auth_service.py +22 -22
  499. package/templates/stacks/python-fastapi/app/services/user_service.py +31 -31
  500. package/templates/stacks/python-fastapi/gitignore +12 -12
  501. package/templates/stacks/python-fastapi/llms.txt.j2 +53 -53
  502. package/templates/stacks/python-fastapi/openapi.json.j2 +43 -43
  503. package/templates/stacks/python-fastapi/pyproject.toml.j2 +45 -45
  504. package/templates/stacks/python-fastapi/tests/test_auth.py +22 -22
  505. package/templates/stacks/ruby-rails-8/.dare/skills.yml +50 -50
  506. package/templates/stacks/ruby-rails-8/.env.example +20 -20
  507. package/templates/stacks/ruby-rails-8/.github/workflows/dare-ci.yml +112 -112
  508. package/templates/stacks/ruby-rails-8/Gemfile.erb +61 -61
  509. package/templates/stacks/ruby-rails-8/app/channels/application_cable/channel.rb +11 -11
  510. package/templates/stacks/ruby-rails-8/app/channels/application_cable/connection.rb +34 -34
  511. package/templates/stacks/ruby-rails-8/app/channels/dare_updates_channel.rb +18 -18
  512. package/templates/stacks/ruby-rails-8/app/channels/user_updates_channel.rb +23 -23
  513. package/templates/stacks/ruby-rails-8/app/controllers/application_controller.rb +44 -44
  514. package/templates/stacks/ruby-rails-8/app/controllers/concerns/problem_details.rb +93 -93
  515. package/templates/stacks/ruby-rails-8/app/handlers/summarize_handler.rb +33 -33
  516. package/templates/stacks/ruby-rails-8/app/handlers/users_handler.rb +68 -68
  517. package/templates/stacks/ruby-rails-8/app/llm/cache/llm_cache.rb +44 -44
  518. package/templates/stacks/ruby-rails-8/app/llm/prompts/prompt_loader.rb +54 -54
  519. package/templates/stacks/ruby-rails-8/app/llm/prompts/summarize_v1.jinja2 +12 -12
  520. package/templates/stacks/ruby-rails-8/app/llm/providers/dummy_provider.rb +35 -35
  521. package/templates/stacks/ruby-rails-8/app/llm/providers/llm_provider.rb +67 -67
  522. package/templates/stacks/ruby-rails-8/app/llm/providers/openai_provider.rb +62 -62
  523. package/templates/stacks/ruby-rails-8/app/llm/rate_limit/token_bucket.rb +82 -82
  524. package/templates/stacks/ruby-rails-8/app/llm/validators/summarize_output_schema.json +21 -21
  525. package/templates/stacks/ruby-rails-8/app/llm/validators/validator.rb +52 -52
  526. package/templates/stacks/ruby-rails-8/app/models/user.rb +36 -36
  527. package/templates/stacks/ruby-rails-8/app/presenters/user_presenter.rb +48 -48
  528. package/templates/stacks/ruby-rails-8/app/repositories/document_repository.rb +57 -57
  529. package/templates/stacks/ruby-rails-8/app/repositories/user_repository.rb +73 -73
  530. package/templates/stacks/ruby-rails-8/app/services/create_user_service.rb +67 -67
  531. package/templates/stacks/ruby-rails-8/app/services/realtime_service.rb +53 -53
  532. package/templates/stacks/ruby-rails-8/app/services/summarize_document_service.rb +57 -57
  533. package/templates/stacks/ruby-rails-8/config/dare.yml +42 -42
  534. package/templates/stacks/ruby-rails-8/config/initializers/dare.rb +31 -31
  535. package/templates/stacks/ruby-rails-8/config/initializers/rack_attack.rb +64 -64
  536. package/templates/stacks/ruby-rails-8/config/initializers/rswag_api.rb +12 -12
  537. package/templates/stacks/ruby-rails-8/lib/tasks/dare.rake +159 -159
  538. package/templates/stacks/ruby-rails-8/llms.txt.erb +69 -69
  539. package/templates/stacks/ruby-rails-8/spec/api/summarize_spec.rb +56 -56
  540. package/templates/stacks/ruby-rails-8/spec/api/users_spec.rb +72 -72
  541. package/templates/stacks/ruby-rails-8/spec/channels/dare_updates_channel_spec.rb +61 -61
  542. package/templates/stacks/ruby-rails-8/spec/channels/user_updates_channel_spec.rb +56 -56
  543. package/templates/stacks/ruby-rails-8/spec/factories/users.rb +27 -27
  544. package/templates/stacks/ruby-rails-8/spec/handlers/users_handler_spec.rb +88 -88
  545. package/templates/stacks/ruby-rails-8/spec/rails_helper.rb +31 -31
  546. package/templates/stacks/ruby-rails-8/spec/services/create_user_service_spec.rb +88 -88
  547. package/templates/stacks/ruby-rails-8/spec/services/summarize_document_service_spec.rb +142 -142
  548. package/templates/stacks/ruby-rails-8/spec/swagger_helper.rb +73 -73
  549. package/templates/stacks/rust-axum/.dare/skills.yml +11 -11
  550. package/templates/stacks/rust-axum/.env.example +26 -26
  551. package/templates/stacks/rust-axum/.github/workflows/dare-ci.yml +40 -40
  552. package/templates/stacks/rust-axum/Cargo.toml.tera +53 -53
  553. package/templates/stacks/rust-axum/README.md.tera +37 -37
  554. package/templates/stacks/rust-axum/gitignore +5 -5
  555. package/templates/stacks/rust-axum/llms.txt.tera +54 -54
  556. package/templates/stacks/rust-axum/migrations/0001_create_users.sql +13 -13
  557. package/templates/stacks/rust-axum/openapi.json.tera +46 -46
  558. package/templates/stacks/rust-axum/src/config.rs +45 -45
  559. package/templates/stacks/rust-axum/src/errors.rs +48 -48
  560. package/templates/stacks/rust-axum/src/handlers/auth.rs +48 -48
  561. package/templates/stacks/rust-axum/src/handlers/mod.rs +3 -3
  562. package/templates/stacks/rust-axum/src/handlers/users.rs +81 -81
  563. package/templates/stacks/rust-axum/src/handlers/ws.rs +24 -24
  564. package/templates/stacks/rust-axum/src/lib.rs +19 -19
  565. package/templates/stacks/rust-axum/src/llm/mod.rs +1 -1
  566. package/templates/stacks/rust-axum/src/llm/provider.rs +48 -48
  567. package/templates/stacks/rust-axum/src/main.rs.tera +64 -64
  568. package/templates/stacks/rust-axum/src/middleware/auth.rs +20 -20
  569. package/templates/stacks/rust-axum/src/middleware/mod.rs +2 -2
  570. package/templates/stacks/rust-axum/src/middleware/rate_limit.rs +27 -27
  571. package/templates/stacks/rust-axum/src/models/mod.rs +1 -1
  572. package/templates/stacks/rust-axum/src/models/user.rs +13 -13
  573. package/templates/stacks/rust-axum/src/repositories/mod.rs +1 -1
  574. package/templates/stacks/rust-axum/src/repositories/user_repository.rs +62 -62
  575. package/templates/stacks/rust-axum/src/services/auth_service.rs +50 -50
  576. package/templates/stacks/rust-axum/src/services/mod.rs +2 -2
  577. package/templates/stacks/rust-axum/src/services/user_service.rs +53 -53
  578. package/templates/stacks/rust-axum/tests/integration_test.rs.tera +13 -13
  579. package/dist/commands/new.d.ts +0 -16
  580. package/dist/commands/new.d.ts.map +0 -1
  581. package/dist/commands/new.js +0 -104
  582. package/dist/commands/new.js.map +0 -1
@@ -1,26 +1,26 @@
1
- # Application
2
- APP_PORT=8000
3
- RUST_LOG=info
4
-
5
- # Database
6
- DATABASE_URL=postgres://user:pass@localhost:5432/myapi
7
-
8
- # JWT auth
9
- JWT_SECRET=replace-me-in-prod
10
- JWT_EXPIRES_SECS=900
11
-
12
- # Argon2 (uses sensible defaults; tune for production)
13
- ARGON2_MEM_KIB=19456
14
- ARGON2_TIME_COST=2
15
- ARGON2_PARALLELISM=1
16
-
17
- # Rate limit
18
- RATE_LIMIT_PER_SEC=10
19
- RATE_LIMIT_BURST=20
20
-
21
- # CORS — comma-separated origins (NEVER use *)
22
- CORS_ORIGINS=http://localhost:3000
23
-
24
- # LLM provider (optional)
25
- LLM_PROVIDER=dummy
26
- # OPENAI_API_KEY=
1
+ # Application
2
+ APP_PORT=8000
3
+ RUST_LOG=info
4
+
5
+ # Database
6
+ DATABASE_URL=postgres://user:pass@localhost:5432/myapi
7
+
8
+ # JWT auth
9
+ JWT_SECRET=replace-me-in-prod
10
+ JWT_EXPIRES_SECS=900
11
+
12
+ # Argon2 (uses sensible defaults; tune for production)
13
+ ARGON2_MEM_KIB=19456
14
+ ARGON2_TIME_COST=2
15
+ ARGON2_PARALLELISM=1
16
+
17
+ # Rate limit
18
+ RATE_LIMIT_PER_SEC=10
19
+ RATE_LIMIT_BURST=20
20
+
21
+ # CORS — comma-separated origins (NEVER use *)
22
+ CORS_ORIGINS=http://localhost:3000
23
+
24
+ # LLM provider (optional)
25
+ LLM_PROVIDER=dummy
26
+ # OPENAI_API_KEY=
@@ -1,40 +1,40 @@
1
- name: DARE CI
2
-
3
- on:
4
- push:
5
- branches: [main]
6
- pull_request:
7
- branches: [main]
8
-
9
- jobs:
10
- audit:
11
- name: cargo audit
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v4
15
- - uses: dtolnay/rust-toolchain@stable
16
- - uses: Swatinem/rust-cache@v2
17
- - run: cargo install cargo-audit --locked
18
- - run: cargo audit --deny warnings
19
-
20
- lint:
21
- name: clippy
22
- runs-on: ubuntu-latest
23
- steps:
24
- - uses: actions/checkout@v4
25
- - uses: dtolnay/rust-toolchain@stable
26
- with:
27
- components: clippy
28
- - uses: Swatinem/rust-cache@v2
29
- - run: cargo clippy --workspace --all-targets -- -D warnings
30
-
31
- test:
32
- name: cargo test
33
- runs-on: ubuntu-latest
34
- env:
35
- DATABASE_URL: postgres://user:pass@localhost:5432/test
36
- steps:
37
- - uses: actions/checkout@v4
38
- - uses: dtolnay/rust-toolchain@stable
39
- - uses: Swatinem/rust-cache@v2
40
- - run: cargo test --workspace
1
+ name: DARE CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ audit:
11
+ name: cargo audit
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: dtolnay/rust-toolchain@stable
16
+ - uses: Swatinem/rust-cache@v2
17
+ - run: cargo install cargo-audit --locked
18
+ - run: cargo audit --deny warnings
19
+
20
+ lint:
21
+ name: clippy
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - uses: dtolnay/rust-toolchain@stable
26
+ with:
27
+ components: clippy
28
+ - uses: Swatinem/rust-cache@v2
29
+ - run: cargo clippy --workspace --all-targets -- -D warnings
30
+
31
+ test:
32
+ name: cargo test
33
+ runs-on: ubuntu-latest
34
+ env:
35
+ DATABASE_URL: postgres://user:pass@localhost:5432/test
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+ - uses: dtolnay/rust-toolchain@stable
39
+ - uses: Swatinem/rust-cache@v2
40
+ - run: cargo test --workspace
@@ -1,53 +1,53 @@
1
- [package]
2
- name = "{{ crateName }}"
3
- version = "0.1.0"
4
- edition = "2021"
5
- description = "DARE-shaped Axum API"
6
- license = "MIT"
7
-
8
- [dependencies]
9
- axum = { version = "0.7", features = ["macros", "ws"] }
10
- tokio = { version = "1", features = ["full"] }
11
- tower = "0.5"
12
- tower-http = { version = "0.6", features = ["cors", "trace"] }
13
- tower_governor = "0.4"
14
-
15
- serde = { version = "1", features = ["derive"] }
16
- serde_json = "1"
17
-
18
- utoipa = { version = "5", features = ["axum_extras", "uuid"] }
19
- utoipa-axum = "0.1"
20
- utoipa-swagger-ui = { version = "8", features = ["axum"] }
21
-
22
- jsonwebtoken = "9"
23
- argon2 = "0.5"
24
- rand_core = { version = "0.6", features = ["std"] }
25
-
26
- sqlx = { version = "0.8", default-features = false, features = [
27
- "runtime-tokio",
28
- "postgres",
29
- "macros",
30
- "uuid",
31
- "chrono",
32
- "migrate",
33
- ] }
34
-
35
- uuid = { version = "1", features = ["v4", "serde"] }
36
- chrono = { version = "0.4", features = ["serde"] }
37
-
38
- dotenvy = "0.15"
39
- thiserror = "1"
40
- anyhow = "1"
41
-
42
- tracing = "0.1"
43
- tracing-subscriber = { version = "0.3", features = ["env-filter"] }
44
-
45
- reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false }
46
- async-trait = "0.1"
47
-
48
- [dev-dependencies]
49
- tokio-test = "0.4"
50
-
51
- [[bin]]
52
- name = "{{ crateName }}"
53
- path = "src/main.rs"
1
+ [package]
2
+ name = "{{ crateName }}"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ description = "DARE-shaped Axum API"
6
+ license = "MIT"
7
+
8
+ [dependencies]
9
+ axum = { version = "0.7", features = ["macros", "ws"] }
10
+ tokio = { version = "1", features = ["full"] }
11
+ tower = "0.5"
12
+ tower-http = { version = "0.6", features = ["cors", "trace"] }
13
+ tower_governor = "0.4"
14
+
15
+ serde = { version = "1", features = ["derive"] }
16
+ serde_json = "1"
17
+
18
+ utoipa = { version = "5", features = ["axum_extras", "uuid"] }
19
+ utoipa-axum = "0.1"
20
+ utoipa-swagger-ui = { version = "8", features = ["axum"] }
21
+
22
+ jsonwebtoken = "9"
23
+ argon2 = "0.5"
24
+ rand_core = { version = "0.6", features = ["std"] }
25
+
26
+ sqlx = { version = "0.8", default-features = false, features = [
27
+ "runtime-tokio",
28
+ "postgres",
29
+ "macros",
30
+ "uuid",
31
+ "chrono",
32
+ "migrate",
33
+ ] }
34
+
35
+ uuid = { version = "1", features = ["v4", "serde"] }
36
+ chrono = { version = "0.4", features = ["serde"] }
37
+
38
+ dotenvy = "0.15"
39
+ thiserror = "1"
40
+ anyhow = "1"
41
+
42
+ tracing = "0.1"
43
+ tracing-subscriber = { version = "0.3", features = ["env-filter"] }
44
+
45
+ reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false }
46
+ async-trait = "0.1"
47
+
48
+ [dev-dependencies]
49
+ tokio-test = "0.4"
50
+
51
+ [[bin]]
52
+ name = "{{ crateName }}"
53
+ path = "src/main.rs"
@@ -1,37 +1,37 @@
1
- # {{ projectName }}
2
-
3
- DARE-shaped Rust API on Axum 0.7. Layered Design (Handler → Service → Repository → Model).
4
-
5
- ## Setup
6
-
7
- ```bash
8
- cp .env.example .env
9
- docker compose up -d postgres
10
- cargo install sqlx-cli --no-default-features --features postgres
11
- sqlx database create
12
- sqlx migrate run
13
- cargo run
14
- ```
15
-
16
- ## Endpoints
17
-
18
- - `POST /auth/login` — exchange email/password for JWT
19
- - `GET /auth/me` — current user (Bearer JWT)
20
- - `GET /users` — list users (paginated)
21
- - `POST /users` — create user (admin only)
22
- - `GET /ws` — WebSocket echo demo
23
- - `GET /openapi.json` — OpenAPI 3.x surface
24
- - `GET /swagger-ui` — Swagger UI
25
-
26
- ## Commands
27
-
28
- - `cargo run` — dev server (port 8000)
29
- - `cargo test --workspace` — tests
30
- - `cargo clippy -- -D warnings` — lint
31
- - `cargo audit` — dependency audit
32
- - `sqlx migrate add <name>` — new migration
33
- - `sqlx migrate run` — apply migrations
34
-
35
- ## DARE Method
36
-
37
- See `.dare/skills.yml` for installed skills, `llms.txt` for agent context.
1
+ # {{ projectName }}
2
+
3
+ DARE-shaped Rust API on Axum 0.7. Layered Design (Handler → Service → Repository → Model).
4
+
5
+ ## Setup
6
+
7
+ ```bash
8
+ cp .env.example .env
9
+ docker compose up -d postgres
10
+ cargo install sqlx-cli --no-default-features --features postgres
11
+ sqlx database create
12
+ sqlx migrate run
13
+ cargo run
14
+ ```
15
+
16
+ ## Endpoints
17
+
18
+ - `POST /auth/login` — exchange email/password for JWT
19
+ - `GET /auth/me` — current user (Bearer JWT)
20
+ - `GET /users` — list users (paginated)
21
+ - `POST /users` — create user (admin only)
22
+ - `GET /ws` — WebSocket echo demo
23
+ - `GET /openapi.json` — OpenAPI 3.x surface
24
+ - `GET /swagger-ui` — Swagger UI
25
+
26
+ ## Commands
27
+
28
+ - `cargo run` — dev server (port 8000)
29
+ - `cargo test --workspace` — tests
30
+ - `cargo clippy -- -D warnings` — lint
31
+ - `cargo audit` — dependency audit
32
+ - `sqlx migrate add <name>` — new migration
33
+ - `sqlx migrate run` — apply migrations
34
+
35
+ ## DARE Method
36
+
37
+ See `.dare/skills.yml` for installed skills, `llms.txt` for agent context.
@@ -1,5 +1,5 @@
1
- /target
2
- .env
3
- .env.local
4
- *.log
5
- .DS_Store
1
+ /target
2
+ .env
3
+ .env.local
4
+ *.log
5
+ .DS_Store
@@ -1,54 +1,54 @@
1
- # {{ projectName }}
2
-
3
- DARE-shaped Rust API on Axum 0.7. Layered Design: Handler → Service → Repository → Model.
4
-
5
- ## Setup
6
-
7
- ```bash
8
- cp .env.example .env
9
- docker compose up -d postgres
10
- cargo install sqlx-cli --no-default-features --features postgres
11
- sqlx database create
12
- sqlx migrate run
13
- cargo run
14
- ```
15
-
16
- ## Commands
17
-
18
- - `cargo run` — dev server (port 8000)
19
- - `cargo test --workspace` — tests
20
- - `cargo clippy -- -D warnings` — lint (warnings are errors)
21
- - `cargo audit` — RustSec advisory audit
22
- - `sqlx migrate add <name>` — new migration
23
- - `sqlx migrate run` — apply migrations
24
-
25
- ## Endpoints
26
-
27
- | Method | Path | Auth | Description |
28
- |---|---|---|---|
29
- | POST | `/auth/login` | none | Exchange email+password for JWT |
30
- | GET | `/auth/me` | Bearer | Current user info |
31
- | GET | `/users` | Bearer | List users (query: page, limit) |
32
- | POST | `/users` | Bearer (admin) | Create user |
33
- | GET | `/ws` | upgrade | WebSocket echo example |
34
- | GET | `/openapi.json` | none | OpenAPI 3.x document (utoipa-generated at runtime) |
35
- | GET | `/swagger-ui` | none | Swagger UI |
36
-
37
- ## Layered Design
38
-
39
- - `src/handlers/` — Axum extractors and route handlers
40
- - `src/services/` — business logic
41
- - `src/repositories/` — sqlx queries
42
- - `src/models/` — domain structs (FromRow / Serialize)
43
- - `src/middleware/` — auth + rate limit
44
- - `src/llm/` — provider abstraction
45
-
46
- Handlers never call sqlx directly — they go through services → repositories.
47
-
48
- ## Env vars
49
-
50
- See `.env.example`. Required: `DATABASE_URL`, `JWT_SECRET`.
51
-
52
- ## DARE skills
53
-
54
- See `.dare/skills.yml`.
1
+ # {{ projectName }}
2
+
3
+ DARE-shaped Rust API on Axum 0.7. Layered Design: Handler → Service → Repository → Model.
4
+
5
+ ## Setup
6
+
7
+ ```bash
8
+ cp .env.example .env
9
+ docker compose up -d postgres
10
+ cargo install sqlx-cli --no-default-features --features postgres
11
+ sqlx database create
12
+ sqlx migrate run
13
+ cargo run
14
+ ```
15
+
16
+ ## Commands
17
+
18
+ - `cargo run` — dev server (port 8000)
19
+ - `cargo test --workspace` — tests
20
+ - `cargo clippy -- -D warnings` — lint (warnings are errors)
21
+ - `cargo audit` — RustSec advisory audit
22
+ - `sqlx migrate add <name>` — new migration
23
+ - `sqlx migrate run` — apply migrations
24
+
25
+ ## Endpoints
26
+
27
+ | Method | Path | Auth | Description |
28
+ |---|---|---|---|
29
+ | POST | `/auth/login` | none | Exchange email+password for JWT |
30
+ | GET | `/auth/me` | Bearer | Current user info |
31
+ | GET | `/users` | Bearer | List users (query: page, limit) |
32
+ | POST | `/users` | Bearer (admin) | Create user |
33
+ | GET | `/ws` | upgrade | WebSocket echo example |
34
+ | GET | `/openapi.json` | none | OpenAPI 3.x document (utoipa-generated at runtime) |
35
+ | GET | `/swagger-ui` | none | Swagger UI |
36
+
37
+ ## Layered Design
38
+
39
+ - `src/handlers/` — Axum extractors and route handlers
40
+ - `src/services/` — business logic
41
+ - `src/repositories/` — sqlx queries
42
+ - `src/models/` — domain structs (FromRow / Serialize)
43
+ - `src/middleware/` — auth + rate limit
44
+ - `src/llm/` — provider abstraction
45
+
46
+ Handlers never call sqlx directly — they go through services → repositories.
47
+
48
+ ## Env vars
49
+
50
+ See `.env.example`. Required: `DATABASE_URL`, `JWT_SECRET`.
51
+
52
+ ## DARE skills
53
+
54
+ See `.dare/skills.yml`.
@@ -1,13 +1,13 @@
1
- -- 0001 — users table
2
- CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
3
-
4
- CREATE TABLE IF NOT EXISTS users (
5
- id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
6
- email VARCHAR(254) NOT NULL UNIQUE,
7
- password VARCHAR(255) NOT NULL,
8
- role VARCHAR(16) NOT NULL DEFAULT 'USER',
9
- created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
10
- updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
11
- );
12
-
13
- CREATE INDEX IF NOT EXISTS ix_users_email ON users (email);
1
+ -- 0001 — users table
2
+ CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
3
+
4
+ CREATE TABLE IF NOT EXISTS users (
5
+ id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
6
+ email VARCHAR(254) NOT NULL UNIQUE,
7
+ password VARCHAR(255) NOT NULL,
8
+ role VARCHAR(16) NOT NULL DEFAULT 'USER',
9
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
10
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
11
+ );
12
+
13
+ CREATE INDEX IF NOT EXISTS ix_users_email ON users (email);
@@ -1,46 +1,46 @@
1
- {
2
- "openapi": "3.1.0",
3
- "info": {
4
- "title": "{{ projectName }}",
5
- "version": "0.1.0",
6
- "description": "DARE-shaped Rust/Axum API. Runtime spec served at /openapi.json by utoipa."
7
- },
8
- "paths": {
9
- "/auth/login": {
10
- "post": {
11
- "summary": "Exchange email+password for JWT",
12
- "responses": { "200": { "description": "JWT issued" }, "401": { "description": "Invalid credentials" } }
13
- }
14
- },
15
- "/auth/me": {
16
- "get": {
17
- "summary": "Current user",
18
- "security": [{ "bearer": [] }],
19
- "responses": { "200": { "description": "User" }, "401": { "description": "Unauthorized" } }
20
- }
21
- },
22
- "/users": {
23
- "get": {
24
- "summary": "List users",
25
- "security": [{ "bearer": [] }],
26
- "responses": { "200": { "description": "Page of users" } }
27
- },
28
- "post": {
29
- "summary": "Create user (admin)",
30
- "security": [{ "bearer": [] }],
31
- "responses": { "201": { "description": "Created" }, "403": { "description": "Forbidden" } }
32
- }
33
- },
34
- "/ws": {
35
- "get": {
36
- "summary": "WebSocket echo upgrade",
37
- "responses": { "101": { "description": "Switching Protocols" } }
38
- }
39
- }
40
- },
41
- "components": {
42
- "securitySchemes": {
43
- "bearer": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" }
44
- }
45
- }
46
- }
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "{{ projectName }}",
5
+ "version": "0.1.0",
6
+ "description": "DARE-shaped Rust/Axum API. Runtime spec served at /openapi.json by utoipa."
7
+ },
8
+ "paths": {
9
+ "/auth/login": {
10
+ "post": {
11
+ "summary": "Exchange email+password for JWT",
12
+ "responses": { "200": { "description": "JWT issued" }, "401": { "description": "Invalid credentials" } }
13
+ }
14
+ },
15
+ "/auth/me": {
16
+ "get": {
17
+ "summary": "Current user",
18
+ "security": [{ "bearer": [] }],
19
+ "responses": { "200": { "description": "User" }, "401": { "description": "Unauthorized" } }
20
+ }
21
+ },
22
+ "/users": {
23
+ "get": {
24
+ "summary": "List users",
25
+ "security": [{ "bearer": [] }],
26
+ "responses": { "200": { "description": "Page of users" } }
27
+ },
28
+ "post": {
29
+ "summary": "Create user (admin)",
30
+ "security": [{ "bearer": [] }],
31
+ "responses": { "201": { "description": "Created" }, "403": { "description": "Forbidden" } }
32
+ }
33
+ },
34
+ "/ws": {
35
+ "get": {
36
+ "summary": "WebSocket echo upgrade",
37
+ "responses": { "101": { "description": "Switching Protocols" } }
38
+ }
39
+ }
40
+ },
41
+ "components": {
42
+ "securitySchemes": {
43
+ "bearer": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" }
44
+ }
45
+ }
46
+ }
@@ -1,45 +1,45 @@
1
- //! Runtime configuration read from environment.
2
- use std::env;
3
-
4
- use tower_http::cors::AllowOrigin;
5
-
6
- #[derive(Clone, Debug)]
7
- pub struct Config {
8
- pub app_port: u16,
9
- pub database_url: String,
10
- pub jwt_secret: String,
11
- pub jwt_expires_secs: i64,
12
- pub rate_limit_per_sec: u64,
13
- pub rate_limit_burst: u32,
14
- pub cors_origins: Vec<String>,
15
- pub llm_provider: String,
16
- }
17
-
18
- impl Config {
19
- pub fn from_env() -> anyhow::Result<Self> {
20
- Ok(Self {
21
- app_port: env::var("APP_PORT").ok().and_then(|s| s.parse().ok()).unwrap_or(8000),
22
- database_url: env::var("DATABASE_URL")?,
23
- jwt_secret: env::var("JWT_SECRET").unwrap_or_else(|_| "replace-me-in-prod".into()),
24
- jwt_expires_secs: env::var("JWT_EXPIRES_SECS").ok().and_then(|s| s.parse().ok()).unwrap_or(900),
25
- rate_limit_per_sec: env::var("RATE_LIMIT_PER_SEC").ok().and_then(|s| s.parse().ok()).unwrap_or(10),
26
- rate_limit_burst: env::var("RATE_LIMIT_BURST").ok().and_then(|s| s.parse().ok()).unwrap_or(20),
27
- cors_origins: env::var("CORS_ORIGINS")
28
- .unwrap_or_else(|_| "http://localhost:3000".into())
29
- .split(',')
30
- .map(|s| s.trim().to_string())
31
- .filter(|s| !s.is_empty())
32
- .collect(),
33
- llm_provider: env::var("LLM_PROVIDER").unwrap_or_else(|_| "dummy".into()),
34
- })
35
- }
36
-
37
- pub fn cors_layer_origins(&self) -> AllowOrigin {
38
- let parsed: Vec<axum::http::HeaderValue> = self
39
- .cors_origins
40
- .iter()
41
- .filter_map(|o| o.parse().ok())
42
- .collect();
43
- AllowOrigin::list(parsed)
44
- }
45
- }
1
+ //! Runtime configuration read from environment.
2
+ use std::env;
3
+
4
+ use tower_http::cors::AllowOrigin;
5
+
6
+ #[derive(Clone, Debug)]
7
+ pub struct Config {
8
+ pub app_port: u16,
9
+ pub database_url: String,
10
+ pub jwt_secret: String,
11
+ pub jwt_expires_secs: i64,
12
+ pub rate_limit_per_sec: u64,
13
+ pub rate_limit_burst: u32,
14
+ pub cors_origins: Vec<String>,
15
+ pub llm_provider: String,
16
+ }
17
+
18
+ impl Config {
19
+ pub fn from_env() -> anyhow::Result<Self> {
20
+ Ok(Self {
21
+ app_port: env::var("APP_PORT").ok().and_then(|s| s.parse().ok()).unwrap_or(8000),
22
+ database_url: env::var("DATABASE_URL")?,
23
+ jwt_secret: env::var("JWT_SECRET").unwrap_or_else(|_| "replace-me-in-prod".into()),
24
+ jwt_expires_secs: env::var("JWT_EXPIRES_SECS").ok().and_then(|s| s.parse().ok()).unwrap_or(900),
25
+ rate_limit_per_sec: env::var("RATE_LIMIT_PER_SEC").ok().and_then(|s| s.parse().ok()).unwrap_or(10),
26
+ rate_limit_burst: env::var("RATE_LIMIT_BURST").ok().and_then(|s| s.parse().ok()).unwrap_or(20),
27
+ cors_origins: env::var("CORS_ORIGINS")
28
+ .unwrap_or_else(|_| "http://localhost:3000".into())
29
+ .split(',')
30
+ .map(|s| s.trim().to_string())
31
+ .filter(|s| !s.is_empty())
32
+ .collect(),
33
+ llm_provider: env::var("LLM_PROVIDER").unwrap_or_else(|_| "dummy".into()),
34
+ })
35
+ }
36
+
37
+ pub fn cors_layer_origins(&self) -> AllowOrigin {
38
+ let parsed: Vec<axum::http::HeaderValue> = self
39
+ .cors_origins
40
+ .iter()
41
+ .filter_map(|o| o.parse().ok())
42
+ .collect();
43
+ AllowOrigin::list(parsed)
44
+ }
45
+ }