@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,281 +1,281 @@
1
- ---
2
- description: Guia DARE para desenvolvimento Leptos (Rust + WASM) — decisão CSR vs Fullstack, idioms 0.7, antipatterns, tipos compartilhados server+WASM com cfg_attr, workspace misto WASM+nativo, templates de tasks.
3
- globs: **/*.rs,Cargo.toml,.cargo/config.toml,Trunk.toml,Leptos.toml
4
- alwaysApply: false
5
- ---
6
-
7
- # Skill: Rust/Leptos DARE
8
-
9
- Você é um especialista em Leptos 0.7+ (framework reativo Rust → WASM). Esta skill cobre **decisão de variante, idioms obrigatórios, antipatterns clássicos e estruturação de tipos compartilhados** entre server e WASM.
10
-
11
- ---
12
-
13
- ## 1. Decisão de variante: CSR vs Fullstack
14
-
15
- | Critério | CSR (trunk) | Fullstack (cargo-leptos) |
16
- |---|---|---|
17
- | SEO necessário | ❌ | ✅ |
18
- | Time-to-interactive crítico | ❌ | ✅ |
19
- | Dashboard interno / admin | ✅ | ✅ |
20
- | Backend Axum existente | indiferente | ✅ integração direta |
21
- | Simplicidade de deploy | ✅ arquivos estáticos | ⚠️ binário Axum |
22
- | Server functions (`#[server]`) | ❌ não existe | ✅ |
23
-
24
- **Regra de ouro:**
25
- - Atrás de login e SEO não importa → **CSR**
26
- - Precisa SEO, carregamento inicial rápido, server functions → **Fullstack**
27
- - Já tem Axum no monorepo → **Fullstack** (workspace unificado)
28
-
29
- ---
30
-
31
- ## 2. Ferramentas — nunca misturar
32
-
33
- | Variante | Build | Dev | Test |
34
- |---|---|---|---|
35
- | CSR | `trunk build --release` | `trunk serve` | `cargo test --workspace` |
36
- | Fullstack | `cargo leptos build --release` | `cargo leptos watch` | `cargo test --workspace` |
37
-
38
- > ⚠️ `cargo leptos test` **não existe**. Use `cargo test --workspace`.
39
- > ⚠️ Não use `trunk` para fullstack nem `cargo leptos` para CSR.
40
-
41
- ---
42
-
43
- ## 3. Idioms obrigatórios Leptos 0.7
44
-
45
- ### Estado reativo
46
-
47
- ```rust
48
- let (count, set_count) = signal(0);
49
- let doubled = move || count.get() * 2; // derived (memo inline)
50
-
51
- // Estado complexo / compartilhado:
52
- let count = RwSignal::new(0);
53
- ```
54
-
55
- ### Dados assíncronos
56
-
57
- ```rust
58
- // ✅ Resource — fetch declarativo, integra com Suspense
59
- let user = Resource::new(|| user_id(), |id| async move { fetch_user(id).await });
60
-
61
- view! {
62
- <Suspense fallback=|| view! { <p>"Loading..."</p> }>
63
- {move || user.get().map(|u| view! { <p>{u.name}</p> })}
64
- </Suspense>
65
- }
66
-
67
- // ❌ Effect que faz fetch — re-executa em todo render
68
- Effect::new(move |_| { spawn_local(async { fetch_user(id).await }); });
69
- ```
70
-
71
- ### Mutações
72
-
73
- ```rust
74
- let save = Action::new(|input: &String| {
75
- let input = input.clone();
76
- async move { api::save(input).await }
77
- });
78
-
79
- view! {
80
- <button on:click=move |_| save.dispatch("hello".to_string())>"Save"</button>
81
- <Show when=move || save.pending().get()><p>"Saving..."</p></Show>
82
- }
83
- ```
84
-
85
- ### Renderização condicional e listas
86
-
87
- ```rust
88
- view! {
89
- <Show when=move || logged_in.get() fallback=|| view! { <Login/> }>
90
- <Dashboard/>
91
- </Show>
92
-
93
- <For
94
- each=move || items.get()
95
- key=|item| item.id
96
- children=move |item| view! { <ItemRow item=item/> }
97
- />
98
- }
99
- ```
100
-
101
- ### Server functions (fullstack only)
102
-
103
- ```rust
104
- #[server(SaveUser, "/api")]
105
- pub async fn save_user(name: String) -> Result<User, ServerFnError> {
106
- db::create_user(name).await.map_err(Into::into)
107
- }
108
-
109
- let save = ServerAction::<SaveUser>::new();
110
- ```
111
-
112
- ---
113
-
114
- ## 4. Tipos compartilhados server + WASM
115
-
116
- ```rust
117
- // crates/<p>-domain/src/lib.rs
118
- use serde::{Deserialize, Serialize};
119
-
120
- #[cfg_attr(feature = "ssr", derive(sqlx::FromRow))] // só no server
121
- #[derive(Clone, Debug, Serialize, Deserialize)] // server + WASM
122
- pub struct SecurityEvent {
123
- pub id: uuid::Uuid,
124
- pub attack_type: String,
125
- pub risk_score: f32,
126
- pub blocked: bool,
127
- }
128
- ```
129
-
130
- ```toml
131
- # Cargo.toml do crate domain
132
- [dependencies]
133
- serde = { version = "1.0", features = ["derive"] }
134
- uuid = { version = "1.10", features = ["v4", "serde"] }
135
-
136
- [dependencies.sqlx]
137
- version = "0.8"
138
- features = ["postgres", "runtime-tokio", "uuid"]
139
- optional = true
140
-
141
- [features]
142
- ssr = ["dep:sqlx"]
143
- ```
144
-
145
- > O crate domain compila duas vezes: x86 (server, com sqlx) e wasm32 (client, sem sqlx). `cfg_attr` garante que `sqlx::FromRow` só aparece no server build.
146
-
147
- ---
148
-
149
- ## 5. Workspace misto (WASM + nativo)
150
-
151
- ```toml
152
- # Cargo.toml do workspace
153
- [workspace]
154
- resolver = "2"
155
- members = [
156
- "crates/<p>-core", # lib nativa (x86)
157
- "crates/<p>-server", # bin nativo — Axum
158
- "crates/<p>-web", # bin+lib WASM — Leptos
159
- "crates/<p>-cli", # bin nativo
160
- ]
161
- ```
162
-
163
- ```toml
164
- # crates/<p>-web/Cargo.toml
165
- [features]
166
- default = []
167
- hydrate = ["leptos/hydrate"]
168
- ssr = [
169
- "dep:axum",
170
- "dep:leptos_axum",
171
- "dep:tokio",
172
- "leptos/ssr",
173
- ]
174
- ```
175
-
176
- > ⚠️ **Antipattern crítico:** `[build] target = "wasm32-unknown-unknown"` no `.cargo/config.toml` raiz quebra todos os crates nativos. `cargo leptos` e `trunk` gerenciam o target WASM internamente — não interfira.
177
-
178
- ---
179
-
180
- ## 6. Antipatterns
181
-
182
- | Antipattern | Por quê | Alternativa |
183
- |---|---|---|
184
- | `wasm_bindgen` direto | Bypassa abstrações Leptos | APIs do Leptos (`web_sys` via feature) |
185
- | `panic!` em componentes | Derruba app sem `ErrorBoundary` | `Result<_, ServerFnError>` + `ErrorBoundary` |
186
- | `Effect` que faz fetch | Re-executa a cada render | `Resource::new()` |
187
- | `tokio::spawn` no client | `tokio` não existe no WASM | `spawn_local()` ou server function |
188
- | `std::thread` no client | Não existe no WASM | Signals para paralelismo reativo |
189
- | `cargo leptos test` | Comando inválido | `cargo test --workspace` |
190
- | `[build] target` global | Quebra crates nativos | Sem target global; cargo-leptos gerencia |
191
- | Múltiplos signals correlacionados | Render extra desnecessário | Derived signal (`move \|\| (a.get(), b.get())`) |
192
-
193
- ---
194
-
195
- ## 7. Templates de tasks DARE
196
-
197
- Cole no `DARE/dare-dag.yaml`:
198
-
199
- ```yaml
200
- - id: leptos-001
201
- title: "Workspace, AppShell e Router base"
202
- description: |
203
- Cargo workspace com resolver = "2".
204
- App component com leptos_router::Router.
205
- Layout base (header, main, footer). Rota "/" → HomePage.
206
- Ralph Loop: cargo leptos build --release + cargo test --workspace + cargo clippy
207
- depends_on: []
208
-
209
- - id: leptos-002
210
- title: "Form com Action + server function"
211
- description: |
212
- #[server] fn para processar o form.
213
- ActionForm ou Action manual.
214
- Validar input no server (ServerFnError em erro).
215
- Pending state com Action::pending() signal.
216
- depends_on: [leptos-001]
217
-
218
- - id: leptos-003
219
- title: "Lista paginada com Resource + Suspense"
220
- description: |
221
- Resource recebendo página como signal.
222
- Envolver em Suspense com fallback loading.
223
- ErrorBoundary para erros de fetch.
224
- Paginação com For + key por ID.
225
- depends_on: [leptos-001]
226
- ```
227
-
228
- ---
229
-
230
- ## 8. Stack canônica
231
-
232
- | Camada | Cliente (WASM) | Server (Fullstack) |
233
- |---|---|---|
234
- | Framework | Leptos 0.7+ | Leptos 0.7 + leptos_axum |
235
- | Roteamento | leptos_router | (compartilhado) |
236
- | Estado server | Resource + Server Functions | sqlx + Axum |
237
- | Estilo | Tailwind | — |
238
- | Build | cargo-leptos / trunk | cargo-leptos |
239
-
240
- ---
241
-
242
- ## 9. Aplicação por fase DARE
243
-
244
- ### Design
245
- - Decidir CSR vs Fullstack (tabela §1) e justificar
246
- - Listar componentes e server functions
247
- - Listar tipos compartilhados → crate `<p>-domain`
248
-
249
- ### Blueprint
250
- - Tabela de componentes (nome, props, signals)
251
- - Lista de server functions com assinatura
252
- - Tipos no crate domain com features ssr/hydrate
253
-
254
- ### Tasks
255
- - Use os templates de §7
256
-
257
- ### Execute
258
- - Ralph Loop validation:
259
- ```bash
260
- cargo leptos build --release # ou trunk build --release
261
- cargo test --workspace
262
- cargo clippy --workspace --all-targets -- -D warnings
263
- ```
264
-
265
- ---
266
-
267
- ## Checklist final
268
-
269
- - [ ] Variante decidida (CSR ou Fullstack) e justificada no DESIGN.md
270
- - [ ] Workspace com `resolver = "2"` e crates separados
271
- - [ ] `<p>-domain` com tipos compartilhados e features `ssr`
272
- - [ ] Components usam Resource (não Effect) para fetch
273
- - [ ] Mutations usam Action / ServerAction
274
- - [ ] Server functions com `Result<_, ServerFnError>`
275
- - [ ] ErrorBoundary em torno de componentes assíncronos
276
- - [ ] Sem `[build] target` global no `.cargo/config.toml`
277
- - [ ] `cargo test --workspace` (não `cargo leptos test`)
278
-
279
- ---
280
-
281
- Skill licenciada MIT — parte do DARE Method v3.
1
+ ---
2
+ description: Guia DARE para desenvolvimento Leptos (Rust + WASM) — decisão CSR vs Fullstack, idioms 0.7, antipatterns, tipos compartilhados server+WASM com cfg_attr, workspace misto WASM+nativo, templates de tasks.
3
+ globs: **/*.rs,Cargo.toml,.cargo/config.toml,Trunk.toml,Leptos.toml
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Skill: Rust/Leptos DARE
8
+
9
+ Você é um especialista em Leptos 0.7+ (framework reativo Rust → WASM). Esta skill cobre **decisão de variante, idioms obrigatórios, antipatterns clássicos e estruturação de tipos compartilhados** entre server e WASM.
10
+
11
+ ---
12
+
13
+ ## 1. Decisão de variante: CSR vs Fullstack
14
+
15
+ | Critério | CSR (trunk) | Fullstack (cargo-leptos) |
16
+ |---|---|---|
17
+ | SEO necessário | ❌ | ✅ |
18
+ | Time-to-interactive crítico | ❌ | ✅ |
19
+ | Dashboard interno / admin | ✅ | ✅ |
20
+ | Backend Axum existente | indiferente | ✅ integração direta |
21
+ | Simplicidade de deploy | ✅ arquivos estáticos | ⚠️ binário Axum |
22
+ | Server functions (`#[server]`) | ❌ não existe | ✅ |
23
+
24
+ **Regra de ouro:**
25
+ - Atrás de login e SEO não importa → **CSR**
26
+ - Precisa SEO, carregamento inicial rápido, server functions → **Fullstack**
27
+ - Já tem Axum no monorepo → **Fullstack** (workspace unificado)
28
+
29
+ ---
30
+
31
+ ## 2. Ferramentas — nunca misturar
32
+
33
+ | Variante | Build | Dev | Test |
34
+ |---|---|---|---|
35
+ | CSR | `trunk build --release` | `trunk serve` | `cargo test --workspace` |
36
+ | Fullstack | `cargo leptos build --release` | `cargo leptos watch` | `cargo test --workspace` |
37
+
38
+ > ⚠️ `cargo leptos test` **não existe**. Use `cargo test --workspace`.
39
+ > ⚠️ Não use `trunk` para fullstack nem `cargo leptos` para CSR.
40
+
41
+ ---
42
+
43
+ ## 3. Idioms obrigatórios Leptos 0.7
44
+
45
+ ### Estado reativo
46
+
47
+ ```rust
48
+ let (count, set_count) = signal(0);
49
+ let doubled = move || count.get() * 2; // derived (memo inline)
50
+
51
+ // Estado complexo / compartilhado:
52
+ let count = RwSignal::new(0);
53
+ ```
54
+
55
+ ### Dados assíncronos
56
+
57
+ ```rust
58
+ // ✅ Resource — fetch declarativo, integra com Suspense
59
+ let user = Resource::new(|| user_id(), |id| async move { fetch_user(id).await });
60
+
61
+ view! {
62
+ <Suspense fallback=|| view! { <p>"Loading..."</p> }>
63
+ {move || user.get().map(|u| view! { <p>{u.name}</p> })}
64
+ </Suspense>
65
+ }
66
+
67
+ // ❌ Effect que faz fetch — re-executa em todo render
68
+ Effect::new(move |_| { spawn_local(async { fetch_user(id).await }); });
69
+ ```
70
+
71
+ ### Mutações
72
+
73
+ ```rust
74
+ let save = Action::new(|input: &String| {
75
+ let input = input.clone();
76
+ async move { api::save(input).await }
77
+ });
78
+
79
+ view! {
80
+ <button on:click=move |_| save.dispatch("hello".to_string())>"Save"</button>
81
+ <Show when=move || save.pending().get()><p>"Saving..."</p></Show>
82
+ }
83
+ ```
84
+
85
+ ### Renderização condicional e listas
86
+
87
+ ```rust
88
+ view! {
89
+ <Show when=move || logged_in.get() fallback=|| view! { <Login/> }>
90
+ <Dashboard/>
91
+ </Show>
92
+
93
+ <For
94
+ each=move || items.get()
95
+ key=|item| item.id
96
+ children=move |item| view! { <ItemRow item=item/> }
97
+ />
98
+ }
99
+ ```
100
+
101
+ ### Server functions (fullstack only)
102
+
103
+ ```rust
104
+ #[server(SaveUser, "/api")]
105
+ pub async fn save_user(name: String) -> Result<User, ServerFnError> {
106
+ db::create_user(name).await.map_err(Into::into)
107
+ }
108
+
109
+ let save = ServerAction::<SaveUser>::new();
110
+ ```
111
+
112
+ ---
113
+
114
+ ## 4. Tipos compartilhados server + WASM
115
+
116
+ ```rust
117
+ // crates/<p>-domain/src/lib.rs
118
+ use serde::{Deserialize, Serialize};
119
+
120
+ #[cfg_attr(feature = "ssr", derive(sqlx::FromRow))] // só no server
121
+ #[derive(Clone, Debug, Serialize, Deserialize)] // server + WASM
122
+ pub struct SecurityEvent {
123
+ pub id: uuid::Uuid,
124
+ pub attack_type: String,
125
+ pub risk_score: f32,
126
+ pub blocked: bool,
127
+ }
128
+ ```
129
+
130
+ ```toml
131
+ # Cargo.toml do crate domain
132
+ [dependencies]
133
+ serde = { version = "1.0", features = ["derive"] }
134
+ uuid = { version = "1.10", features = ["v4", "serde"] }
135
+
136
+ [dependencies.sqlx]
137
+ version = "0.8"
138
+ features = ["postgres", "runtime-tokio", "uuid"]
139
+ optional = true
140
+
141
+ [features]
142
+ ssr = ["dep:sqlx"]
143
+ ```
144
+
145
+ > O crate domain compila duas vezes: x86 (server, com sqlx) e wasm32 (client, sem sqlx). `cfg_attr` garante que `sqlx::FromRow` só aparece no server build.
146
+
147
+ ---
148
+
149
+ ## 5. Workspace misto (WASM + nativo)
150
+
151
+ ```toml
152
+ # Cargo.toml do workspace
153
+ [workspace]
154
+ resolver = "2"
155
+ members = [
156
+ "crates/<p>-core", # lib nativa (x86)
157
+ "crates/<p>-server", # bin nativo — Axum
158
+ "crates/<p>-web", # bin+lib WASM — Leptos
159
+ "crates/<p>-cli", # bin nativo
160
+ ]
161
+ ```
162
+
163
+ ```toml
164
+ # crates/<p>-web/Cargo.toml
165
+ [features]
166
+ default = []
167
+ hydrate = ["leptos/hydrate"]
168
+ ssr = [
169
+ "dep:axum",
170
+ "dep:leptos_axum",
171
+ "dep:tokio",
172
+ "leptos/ssr",
173
+ ]
174
+ ```
175
+
176
+ > ⚠️ **Antipattern crítico:** `[build] target = "wasm32-unknown-unknown"` no `.cargo/config.toml` raiz quebra todos os crates nativos. `cargo leptos` e `trunk` gerenciam o target WASM internamente — não interfira.
177
+
178
+ ---
179
+
180
+ ## 6. Antipatterns
181
+
182
+ | Antipattern | Por quê | Alternativa |
183
+ |---|---|---|
184
+ | `wasm_bindgen` direto | Bypassa abstrações Leptos | APIs do Leptos (`web_sys` via feature) |
185
+ | `panic!` em componentes | Derruba app sem `ErrorBoundary` | `Result<_, ServerFnError>` + `ErrorBoundary` |
186
+ | `Effect` que faz fetch | Re-executa a cada render | `Resource::new()` |
187
+ | `tokio::spawn` no client | `tokio` não existe no WASM | `spawn_local()` ou server function |
188
+ | `std::thread` no client | Não existe no WASM | Signals para paralelismo reativo |
189
+ | `cargo leptos test` | Comando inválido | `cargo test --workspace` |
190
+ | `[build] target` global | Quebra crates nativos | Sem target global; cargo-leptos gerencia |
191
+ | Múltiplos signals correlacionados | Render extra desnecessário | Derived signal (`move \|\| (a.get(), b.get())`) |
192
+
193
+ ---
194
+
195
+ ## 7. Templates de tasks DARE
196
+
197
+ Cole no `DARE/dare-dag.yaml`:
198
+
199
+ ```yaml
200
+ - id: leptos-001
201
+ title: "Workspace, AppShell e Router base"
202
+ description: |
203
+ Cargo workspace com resolver = "2".
204
+ App component com leptos_router::Router.
205
+ Layout base (header, main, footer). Rota "/" → HomePage.
206
+ Ralph Loop: cargo leptos build --release + cargo test --workspace + cargo clippy
207
+ depends_on: []
208
+
209
+ - id: leptos-002
210
+ title: "Form com Action + server function"
211
+ description: |
212
+ #[server] fn para processar o form.
213
+ ActionForm ou Action manual.
214
+ Validar input no server (ServerFnError em erro).
215
+ Pending state com Action::pending() signal.
216
+ depends_on: [leptos-001]
217
+
218
+ - id: leptos-003
219
+ title: "Lista paginada com Resource + Suspense"
220
+ description: |
221
+ Resource recebendo página como signal.
222
+ Envolver em Suspense com fallback loading.
223
+ ErrorBoundary para erros de fetch.
224
+ Paginação com For + key por ID.
225
+ depends_on: [leptos-001]
226
+ ```
227
+
228
+ ---
229
+
230
+ ## 8. Stack canônica
231
+
232
+ | Camada | Cliente (WASM) | Server (Fullstack) |
233
+ |---|---|---|
234
+ | Framework | Leptos 0.7+ | Leptos 0.7 + leptos_axum |
235
+ | Roteamento | leptos_router | (compartilhado) |
236
+ | Estado server | Resource + Server Functions | sqlx + Axum |
237
+ | Estilo | Tailwind | — |
238
+ | Build | cargo-leptos / trunk | cargo-leptos |
239
+
240
+ ---
241
+
242
+ ## 9. Aplicação por fase DARE
243
+
244
+ ### Design
245
+ - Decidir CSR vs Fullstack (tabela §1) e justificar
246
+ - Listar componentes e server functions
247
+ - Listar tipos compartilhados → crate `<p>-domain`
248
+
249
+ ### Blueprint
250
+ - Tabela de componentes (nome, props, signals)
251
+ - Lista de server functions com assinatura
252
+ - Tipos no crate domain com features ssr/hydrate
253
+
254
+ ### Tasks
255
+ - Use os templates de §7
256
+
257
+ ### Execute
258
+ - Ralph Loop validation:
259
+ ```bash
260
+ cargo leptos build --release # ou trunk build --release
261
+ cargo test --workspace
262
+ cargo clippy --workspace --all-targets -- -D warnings
263
+ ```
264
+
265
+ ---
266
+
267
+ ## Checklist final
268
+
269
+ - [ ] Variante decidida (CSR ou Fullstack) e justificada no DESIGN.md
270
+ - [ ] Workspace com `resolver = "2"` e crates separados
271
+ - [ ] `<p>-domain` com tipos compartilhados e features `ssr`
272
+ - [ ] Components usam Resource (não Effect) para fetch
273
+ - [ ] Mutations usam Action / ServerAction
274
+ - [ ] Server functions com `Result<_, ServerFnError>`
275
+ - [ ] ErrorBoundary em torno de componentes assíncronos
276
+ - [ ] Sem `[build] target` global no `.cargo/config.toml`
277
+ - [ ] `cargo test --workspace` (não `cargo leptos test`)
278
+
279
+ ---
280
+
281
+ Skill licenciada MIT — parte do DARE Method v3.