@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,159 +1,159 @@
1
- # frozen_string_literal: true
2
-
3
- # DARE v3.0 — Quality Telemetry rake tasks
4
- # Validates conformance metrics M-01 to M-04 as per dare-quality-telemetry spec
5
- #
6
- # Usage:
7
- # bundle exec rake dare:metrics # Full validation + JSON output
8
- # bundle exec rake dare:metrics:quick # Exit-only (CI-friendly)
9
- # bundle exec rake dare:openapi # Regenerate OpenAPI spec
10
- #
11
- # CI integration: add `bundle exec rake dare:metrics` to your CI pipeline.
12
- # The task exits with code 1 if any metric fails.
13
-
14
- namespace :dare do
15
- # ── Main metrics validation task ─────────────────────────────────────────
16
- desc "Validate DARE conformance metrics M-01 to M-04 and output JSON report"
17
- task metrics: :environment do
18
- require "json"
19
-
20
- results = {
21
- timestamp: Time.now.iso8601,
22
- commit: git_commit_sha,
23
- stack: "ruby-rails-8",
24
- dare_version: "3.0",
25
- metrics: {}
26
- }
27
-
28
- # M-01: llms.txt exists and is non-empty
29
- llms_txt_path = Rails.root.join("llms.txt")
30
- llms_txt_valid = llms_txt_path.exist? && llms_txt_path.size > 0
31
- results[:metrics]["M-01"] = {
32
- pass: llms_txt_valid,
33
- description: "Project has valid llms.txt",
34
- details: llms_txt_valid ? "llms.txt found (#{llms_txt_path.size} bytes)" : "llms.txt missing or empty"
35
- }
36
-
37
- # M-02: OpenAPI spec exists and is valid JSON
38
- openapi_path = Rails.root.join("public", "openapi.json")
39
- openapi_valid = begin
40
- openapi_path.exist? && JSON.parse(openapi_path.read).is_a?(Hash)
41
- rescue JSON::ParserError
42
- false
43
- end
44
- results[:metrics]["M-02"] = {
45
- pass: openapi_valid,
46
- description: "All endpoints have OpenAPI documentation",
47
- details: openapi_valid ? "public/openapi.json found and valid" : "public/openapi.json missing or invalid JSON"
48
- }
49
-
50
- # M-03: CLI --json support (rails --help or dare:metrics itself)
51
- # The DARE rails stack exposes JSON output from rake dare:metrics
52
- cli_json_support = true # This task itself emits JSON — M-03 is satisfied
53
- results[:metrics]["M-03"] = {
54
- pass: cli_json_support,
55
- description: "CLI supports --json output",
56
- details: "rake dare:metrics emits JSON via STDOUT. Pass DARE_JSON=1 for machine-readable only."
57
- }
58
-
59
- # M-04: Rate limiting configured (rack-attack initializer present)
60
- rack_attack_path = Rails.root.join("config", "initializers", "rack_attack.rb")
61
- rate_limit_configured = rack_attack_path.exist?
62
- results[:metrics]["M-04"] = {
63
- pass: rate_limit_configured,
64
- description: "100% of public endpoints have rate limit configured",
65
- details: rate_limit_configured ? "rack_attack.rb initializer found" : "config/initializers/rack_attack.rb missing"
66
- }
67
-
68
- # ── Summary ─────────────────────────────────────────────────────────────
69
- all_passed = results[:metrics].all? { |_, m| m[:pass] }
70
- passed_count = results[:metrics].count { |_, m| m[:pass] }
71
- total_count = results[:metrics].size
72
-
73
- results[:summary] = {
74
- passed: passed_count,
75
- total: total_count,
76
- all_pass: all_passed,
77
- score: "#{(passed_count.to_f / total_count * 100).round(1)}%"
78
- }
79
-
80
- # ── Output ───────────────────────────────────────────────────────────────
81
- json_output = JSON.pretty_generate(results)
82
- puts json_output
83
-
84
- # Save to tmp/dare_metrics.json
85
- tmp_dir = Rails.root.join("tmp")
86
- FileUtils.mkdir_p(tmp_dir)
87
- File.write(Rails.root.join("tmp", "dare_metrics.json"), json_output)
88
- $stderr.puts "\n[DARE] Metrics saved to tmp/dare_metrics.json" unless ENV["DARE_JSON"]
89
-
90
- unless all_passed
91
- $stderr.puts "\n[DARE] FAILED: #{total_count - passed_count} metric(s) not passing.\n"
92
- $stderr.puts results[:metrics].select { |_, m| !m[:pass] }.map { |k, m| " #{k}: #{m[:details]}" }.join("\n")
93
- exit!(1)
94
- end
95
-
96
- $stderr.puts "\n[DARE] All #{total_count} metrics passed (#{results[:summary][:score]})\n" unless ENV["DARE_JSON"]
97
- end
98
-
99
- # ── Quick check for CI pipelines ─────────────────────────────────────────
100
- namespace :metrics do
101
- desc "Quick DARE metrics check (silent — exit code only)"
102
- task quick: :environment do
103
- ENV["DARE_JSON"] = "1"
104
- Rake::Task["dare:metrics"].invoke
105
- end
106
- end
107
-
108
- # ── OpenAPI regeneration ──────────────────────────────────────────────────
109
- desc "Regenerate public/openapi.json from rswag specs"
110
- task openapi: :environment do
111
- puts "[DARE] Regenerating OpenAPI spec via rswag..."
112
-
113
- # rswag generates the spec when you run rswag:specs:swaggerize
114
- # This is a convenience wrapper
115
- Rake::Task["rswag:specs:swaggerize"].invoke if Rake::Task.task_defined?("rswag:specs:swaggerize")
116
-
117
- openapi_path = Rails.root.join("public", "openapi.json")
118
- if openapi_path.exist?
119
- puts "[DARE] OpenAPI spec generated: #{openapi_path}"
120
- else
121
- warn "[DARE] WARNING: public/openapi.json not found after swaggerize."
122
- warn "[DARE] Run: bundle exec rspec spec/api/ to generate it."
123
- end
124
- end
125
-
126
- # ── Validate layered design ───────────────────────────────────────────────
127
- desc "Validate DARE layered design directory structure"
128
- task validate_structure: :environment do
129
- required_dirs = %w[
130
- app/handlers
131
- app/services
132
- app/repositories
133
- app/models
134
- app/presenters
135
- app/llm/providers
136
- app/llm/prompts
137
- app/llm/validators
138
- app/channels
139
- ]
140
-
141
- missing = required_dirs.reject { |d| Rails.root.join(d).exist? }
142
-
143
- if missing.any?
144
- warn "[DARE] Missing directories:"
145
- missing.each { |d| warn " - #{d}" }
146
- exit!(1)
147
- else
148
- puts "[DARE] Layered design structure OK (#{required_dirs.size} directories)"
149
- end
150
- end
151
-
152
- private
153
-
154
- def git_commit_sha
155
- `git rev-parse --short HEAD 2>/dev/null`.strip.presence || "unknown"
156
- rescue StandardError
157
- "unknown"
158
- end
159
- end
1
+ # frozen_string_literal: true
2
+
3
+ # DARE v3.0 — Quality Telemetry rake tasks
4
+ # Validates conformance metrics M-01 to M-04 as per dare-quality-telemetry spec
5
+ #
6
+ # Usage:
7
+ # bundle exec rake dare:metrics # Full validation + JSON output
8
+ # bundle exec rake dare:metrics:quick # Exit-only (CI-friendly)
9
+ # bundle exec rake dare:openapi # Regenerate OpenAPI spec
10
+ #
11
+ # CI integration: add `bundle exec rake dare:metrics` to your CI pipeline.
12
+ # The task exits with code 1 if any metric fails.
13
+
14
+ namespace :dare do
15
+ # ── Main metrics validation task ─────────────────────────────────────────
16
+ desc "Validate DARE conformance metrics M-01 to M-04 and output JSON report"
17
+ task metrics: :environment do
18
+ require "json"
19
+
20
+ results = {
21
+ timestamp: Time.now.iso8601,
22
+ commit: git_commit_sha,
23
+ stack: "ruby-rails-8",
24
+ dare_version: "3.0",
25
+ metrics: {}
26
+ }
27
+
28
+ # M-01: llms.txt exists and is non-empty
29
+ llms_txt_path = Rails.root.join("llms.txt")
30
+ llms_txt_valid = llms_txt_path.exist? && llms_txt_path.size > 0
31
+ results[:metrics]["M-01"] = {
32
+ pass: llms_txt_valid,
33
+ description: "Project has valid llms.txt",
34
+ details: llms_txt_valid ? "llms.txt found (#{llms_txt_path.size} bytes)" : "llms.txt missing or empty"
35
+ }
36
+
37
+ # M-02: OpenAPI spec exists and is valid JSON
38
+ openapi_path = Rails.root.join("public", "openapi.json")
39
+ openapi_valid = begin
40
+ openapi_path.exist? && JSON.parse(openapi_path.read).is_a?(Hash)
41
+ rescue JSON::ParserError
42
+ false
43
+ end
44
+ results[:metrics]["M-02"] = {
45
+ pass: openapi_valid,
46
+ description: "All endpoints have OpenAPI documentation",
47
+ details: openapi_valid ? "public/openapi.json found and valid" : "public/openapi.json missing or invalid JSON"
48
+ }
49
+
50
+ # M-03: CLI --json support (rails --help or dare:metrics itself)
51
+ # The DARE rails stack exposes JSON output from rake dare:metrics
52
+ cli_json_support = true # This task itself emits JSON — M-03 is satisfied
53
+ results[:metrics]["M-03"] = {
54
+ pass: cli_json_support,
55
+ description: "CLI supports --json output",
56
+ details: "rake dare:metrics emits JSON via STDOUT. Pass DARE_JSON=1 for machine-readable only."
57
+ }
58
+
59
+ # M-04: Rate limiting configured (rack-attack initializer present)
60
+ rack_attack_path = Rails.root.join("config", "initializers", "rack_attack.rb")
61
+ rate_limit_configured = rack_attack_path.exist?
62
+ results[:metrics]["M-04"] = {
63
+ pass: rate_limit_configured,
64
+ description: "100% of public endpoints have rate limit configured",
65
+ details: rate_limit_configured ? "rack_attack.rb initializer found" : "config/initializers/rack_attack.rb missing"
66
+ }
67
+
68
+ # ── Summary ─────────────────────────────────────────────────────────────
69
+ all_passed = results[:metrics].all? { |_, m| m[:pass] }
70
+ passed_count = results[:metrics].count { |_, m| m[:pass] }
71
+ total_count = results[:metrics].size
72
+
73
+ results[:summary] = {
74
+ passed: passed_count,
75
+ total: total_count,
76
+ all_pass: all_passed,
77
+ score: "#{(passed_count.to_f / total_count * 100).round(1)}%"
78
+ }
79
+
80
+ # ── Output ───────────────────────────────────────────────────────────────
81
+ json_output = JSON.pretty_generate(results)
82
+ puts json_output
83
+
84
+ # Save to tmp/dare_metrics.json
85
+ tmp_dir = Rails.root.join("tmp")
86
+ FileUtils.mkdir_p(tmp_dir)
87
+ File.write(Rails.root.join("tmp", "dare_metrics.json"), json_output)
88
+ $stderr.puts "\n[DARE] Metrics saved to tmp/dare_metrics.json" unless ENV["DARE_JSON"]
89
+
90
+ unless all_passed
91
+ $stderr.puts "\n[DARE] FAILED: #{total_count - passed_count} metric(s) not passing.\n"
92
+ $stderr.puts results[:metrics].select { |_, m| !m[:pass] }.map { |k, m| " #{k}: #{m[:details]}" }.join("\n")
93
+ exit!(1)
94
+ end
95
+
96
+ $stderr.puts "\n[DARE] All #{total_count} metrics passed (#{results[:summary][:score]})\n" unless ENV["DARE_JSON"]
97
+ end
98
+
99
+ # ── Quick check for CI pipelines ─────────────────────────────────────────
100
+ namespace :metrics do
101
+ desc "Quick DARE metrics check (silent — exit code only)"
102
+ task quick: :environment do
103
+ ENV["DARE_JSON"] = "1"
104
+ Rake::Task["dare:metrics"].invoke
105
+ end
106
+ end
107
+
108
+ # ── OpenAPI regeneration ──────────────────────────────────────────────────
109
+ desc "Regenerate public/openapi.json from rswag specs"
110
+ task openapi: :environment do
111
+ puts "[DARE] Regenerating OpenAPI spec via rswag..."
112
+
113
+ # rswag generates the spec when you run rswag:specs:swaggerize
114
+ # This is a convenience wrapper
115
+ Rake::Task["rswag:specs:swaggerize"].invoke if Rake::Task.task_defined?("rswag:specs:swaggerize")
116
+
117
+ openapi_path = Rails.root.join("public", "openapi.json")
118
+ if openapi_path.exist?
119
+ puts "[DARE] OpenAPI spec generated: #{openapi_path}"
120
+ else
121
+ warn "[DARE] WARNING: public/openapi.json not found after swaggerize."
122
+ warn "[DARE] Run: bundle exec rspec spec/api/ to generate it."
123
+ end
124
+ end
125
+
126
+ # ── Validate layered design ───────────────────────────────────────────────
127
+ desc "Validate DARE layered design directory structure"
128
+ task validate_structure: :environment do
129
+ required_dirs = %w[
130
+ app/handlers
131
+ app/services
132
+ app/repositories
133
+ app/models
134
+ app/presenters
135
+ app/llm/providers
136
+ app/llm/prompts
137
+ app/llm/validators
138
+ app/channels
139
+ ]
140
+
141
+ missing = required_dirs.reject { |d| Rails.root.join(d).exist? }
142
+
143
+ if missing.any?
144
+ warn "[DARE] Missing directories:"
145
+ missing.each { |d| warn " - #{d}" }
146
+ exit!(1)
147
+ else
148
+ puts "[DARE] Layered design structure OK (#{required_dirs.size} directories)"
149
+ end
150
+ end
151
+
152
+ private
153
+
154
+ def git_commit_sha
155
+ `git rev-parse --short HEAD 2>/dev/null`.strip.presence || "unknown"
156
+ rescue StandardError
157
+ "unknown"
158
+ end
159
+ end
@@ -1,69 +1,69 @@
1
- # llms.txt — Project Context for AI Agents
2
- # Generated by DARE v3.0 — ruby-rails-8 stack
3
- # App: <%= app_name %>
4
-
5
- ## Project Overview
6
- Rails 8 application built with DARE v3.0 methodology.
7
- Stack: ruby-rails-8 | Layered Design | OpenAPI | LLM integration | Action Cable
8
-
9
- ## Tech Stack
10
- - Language: Ruby 3.3+
11
- - Framework: Rails 8.0+ (Omakase)
12
- - Database: PostgreSQL 14+
13
- - Real-time: Action Cable + Redis
14
- - Background: Solid Queue
15
- - Cache: Solid Cache + Redis
16
- - Deploy: Kamal
17
-
18
- ## Architecture (Layered Design)
19
- - app/handlers/ — HTTP handlers (thin controllers — only HTTP concerns)
20
- - app/services/ — Business logic (one class per operation, pure Ruby)
21
- - app/repositories/ — Data access (interface + ActiveRecord implementation)
22
- - app/models/ — Domain objects (no callbacks, no fat model)
23
- - app/presenters/ — Serializers (Model → JSON, RFC 7807 errors)
24
- - app/llm/ — LLM patterns (providers, prompts, validators, cache)
25
- - app/channels/ — Real-time (Action Cable, authorized subscriptions)
26
- - app/jobs/ — Background jobs (Solid Queue)
27
-
28
- ## Key Conventions
29
- - Controllers NEVER call Repository or contain business logic
30
- - Services are plain Ruby objects injected with dependencies
31
- - Repositories abstract ActiveRecord; services never call AR directly
32
- - Errors always formatted as RFC 7807 Problem Details
33
- - Every endpoint documented via rswag (OpenAPI auto-generated from specs)
34
-
35
- ## Key Endpoints
36
- - GET /openapi.json — OpenAPI spec (auto-generated by rswag)
37
- - GET /api-docs — Swagger UI
38
- - POST /api/users — Create user (example)
39
- - GET /api/users/:id — Show user (example)
40
-
41
- ## Getting Started
42
- bundle install
43
- bin/rails db:create db:migrate
44
- bin/rails server
45
- # OR with Kamal:
46
- kamal setup && kamal deploy
47
-
48
- ## Rate Limits
49
- - Public endpoints: 100 req/min per IP (rack-attack)
50
- - Auth endpoints: 10 req/min per IP
51
- - LLM endpoints: 20 req/min per user
52
-
53
- ## For AI Agents
54
- - OpenAPI spec: GET /openapi.json
55
- - DARE metrics: bundle exec rake dare:metrics
56
- - Test suite: bundle exec rspec
57
- - Lint: bundle exec rubocop
58
- - Rails help: bin/rails --help
59
- - DARE manifest: .dare/skills.yml
60
-
61
- ## Directory Guide
62
- - New feature? Add: handler → service → repository → model → presenter → spec
63
- - New LLM feature? Add provider/prompt/validator in app/llm/
64
- - New real-time event? Add channel in app/channels/ + realtime_service.rb broadcast
65
- - New background job? Add in app/jobs/ using Solid Queue
66
-
67
- ## Generated by
68
- DARE Method v3.0 — https://github.com/dewtech-technologies/dare-method
69
- Stack: ruby-rails-8
1
+ # llms.txt — Project Context for AI Agents
2
+ # Generated by DARE v3.0 — ruby-rails-8 stack
3
+ # App: <%= app_name %>
4
+
5
+ ## Project Overview
6
+ Rails 8 application built with DARE v3.0 methodology.
7
+ Stack: ruby-rails-8 | Layered Design | OpenAPI | LLM integration | Action Cable
8
+
9
+ ## Tech Stack
10
+ - Language: Ruby 3.3+
11
+ - Framework: Rails 8.0+ (Omakase)
12
+ - Database: PostgreSQL 14+
13
+ - Real-time: Action Cable + Redis
14
+ - Background: Solid Queue
15
+ - Cache: Solid Cache + Redis
16
+ - Deploy: Kamal
17
+
18
+ ## Architecture (Layered Design)
19
+ - app/handlers/ — HTTP handlers (thin controllers — only HTTP concerns)
20
+ - app/services/ — Business logic (one class per operation, pure Ruby)
21
+ - app/repositories/ — Data access (interface + ActiveRecord implementation)
22
+ - app/models/ — Domain objects (no callbacks, no fat model)
23
+ - app/presenters/ — Serializers (Model → JSON, RFC 7807 errors)
24
+ - app/llm/ — LLM patterns (providers, prompts, validators, cache)
25
+ - app/channels/ — Real-time (Action Cable, authorized subscriptions)
26
+ - app/jobs/ — Background jobs (Solid Queue)
27
+
28
+ ## Key Conventions
29
+ - Controllers NEVER call Repository or contain business logic
30
+ - Services are plain Ruby objects injected with dependencies
31
+ - Repositories abstract ActiveRecord; services never call AR directly
32
+ - Errors always formatted as RFC 7807 Problem Details
33
+ - Every endpoint documented via rswag (OpenAPI auto-generated from specs)
34
+
35
+ ## Key Endpoints
36
+ - GET /openapi.json — OpenAPI spec (auto-generated by rswag)
37
+ - GET /api-docs — Swagger UI
38
+ - POST /api/users — Create user (example)
39
+ - GET /api/users/:id — Show user (example)
40
+
41
+ ## Getting Started
42
+ bundle install
43
+ bin/rails db:create db:migrate
44
+ bin/rails server
45
+ # OR with Kamal:
46
+ kamal setup && kamal deploy
47
+
48
+ ## Rate Limits
49
+ - Public endpoints: 100 req/min per IP (rack-attack)
50
+ - Auth endpoints: 10 req/min per IP
51
+ - LLM endpoints: 20 req/min per user
52
+
53
+ ## For AI Agents
54
+ - OpenAPI spec: GET /openapi.json
55
+ - DARE metrics: bundle exec rake dare:metrics
56
+ - Test suite: bundle exec rspec
57
+ - Lint: bundle exec rubocop
58
+ - Rails help: bin/rails --help
59
+ - DARE manifest: .dare/skills.yml
60
+
61
+ ## Directory Guide
62
+ - New feature? Add: handler → service → repository → model → presenter → spec
63
+ - New LLM feature? Add provider/prompt/validator in app/llm/
64
+ - New real-time event? Add channel in app/channels/ + realtime_service.rb broadcast
65
+ - New background job? Add in app/jobs/ using Solid Queue
66
+
67
+ ## Generated by
68
+ DARE Method v3.0 — https://github.com/dewtech-technologies/dare-method
69
+ Stack: ruby-rails-8
@@ -1,56 +1,56 @@
1
- # frozen_string_literal: true
2
-
3
- # DARE v3.0 — rswag OpenAPI spec for Summarize Documents API
4
- # M-02: running `rake rswag:specs:swaggerize` generates public/openapi.json from this
5
- require "swagger_helper"
6
-
7
- RSpec.describe "Summarize Documents API", type: :request do
8
- path "/api/v1/documents/{id}/summarize" do
9
- parameter name: :id, in: :path, type: :string, description: "Document ID"
10
-
11
- post "Summarize a document with LLM" do
12
- tags "Documents"
13
- produces "application/json"
14
- security [{ bearerAuth: [] }]
15
- description <<~DESC
16
- Summarizes the document identified by :id using the configured LLM provider.
17
- Returns the generated summary and the document ID on success.
18
- RFC 7807 Problem Details on errors (D-006).
19
- DESC
20
-
21
- response "200", "Document summarized successfully" do
22
- schema type: :object,
23
- required: %w[summary document_id],
24
- properties: {
25
- summary: { type: :string, example: "This document discusses..." },
26
- document_id: { type: :string, example: "doc-abc-123" }
27
- }
28
-
29
- let(:id) { create(:document, content: "Long content to summarize.").id }
30
- run_test!
31
- end
32
-
33
- response "401", "Unauthorized — missing or invalid authentication token" do
34
- schema "$ref" => "#/components/schemas/ProblemDetails"
35
-
36
- let(:id) { "any-id" }
37
- # No auth header provided
38
- run_test!
39
- end
40
-
41
- response "404", "Document not found" do
42
- schema "$ref" => "#/components/schemas/ProblemDetails"
43
-
44
- let(:id) { "non-existent-document-id" }
45
- run_test!
46
- end
47
-
48
- response "422", "Summarization failed (LLM returned empty result)" do
49
- schema "$ref" => "#/components/schemas/ProblemDetails"
50
-
51
- let(:id) { create(:document, content: "").id }
52
- run_test!
53
- end
54
- end
55
- end
56
- end
1
+ # frozen_string_literal: true
2
+
3
+ # DARE v3.0 — rswag OpenAPI spec for Summarize Documents API
4
+ # M-02: running `rake rswag:specs:swaggerize` generates public/openapi.json from this
5
+ require "swagger_helper"
6
+
7
+ RSpec.describe "Summarize Documents API", type: :request do
8
+ path "/api/v1/documents/{id}/summarize" do
9
+ parameter name: :id, in: :path, type: :string, description: "Document ID"
10
+
11
+ post "Summarize a document with LLM" do
12
+ tags "Documents"
13
+ produces "application/json"
14
+ security [{ bearerAuth: [] }]
15
+ description <<~DESC
16
+ Summarizes the document identified by :id using the configured LLM provider.
17
+ Returns the generated summary and the document ID on success.
18
+ RFC 7807 Problem Details on errors (D-006).
19
+ DESC
20
+
21
+ response "200", "Document summarized successfully" do
22
+ schema type: :object,
23
+ required: %w[summary document_id],
24
+ properties: {
25
+ summary: { type: :string, example: "This document discusses..." },
26
+ document_id: { type: :string, example: "doc-abc-123" }
27
+ }
28
+
29
+ let(:id) { create(:document, content: "Long content to summarize.").id }
30
+ run_test!
31
+ end
32
+
33
+ response "401", "Unauthorized — missing or invalid authentication token" do
34
+ schema "$ref" => "#/components/schemas/ProblemDetails"
35
+
36
+ let(:id) { "any-id" }
37
+ # No auth header provided
38
+ run_test!
39
+ end
40
+
41
+ response "404", "Document not found" do
42
+ schema "$ref" => "#/components/schemas/ProblemDetails"
43
+
44
+ let(:id) { "non-existent-document-id" }
45
+ run_test!
46
+ end
47
+
48
+ response "422", "Summarization failed (LLM returned empty result)" do
49
+ schema "$ref" => "#/components/schemas/ProblemDetails"
50
+
51
+ let(:id) { create(:document, content: "").id }
52
+ run_test!
53
+ end
54
+ end
55
+ end
56
+ end