@dewtech/dare-cli 3.3.0 → 3.5.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 (750) 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__/dag-runner/buildLocateContext.test.d.ts +2 -0
  6. package/dist/__tests__/dag-runner/buildLocateContext.test.d.ts.map +1 -0
  7. package/dist/__tests__/dag-runner/buildLocateContext.test.js +53 -0
  8. package/dist/__tests__/dag-runner/buildLocateContext.test.js.map +1 -0
  9. package/dist/__tests__/dual-graph.test.d.ts +2 -0
  10. package/dist/__tests__/dual-graph.test.d.ts.map +1 -0
  11. package/dist/__tests__/dual-graph.test.js +141 -0
  12. package/dist/__tests__/dual-graph.test.js.map +1 -0
  13. package/dist/__tests__/graphrag/contract/traverse.contract.d.ts +9 -0
  14. package/dist/__tests__/graphrag/contract/traverse.contract.d.ts.map +1 -0
  15. package/dist/__tests__/graphrag/contract/traverse.contract.js +58 -0
  16. package/dist/__tests__/graphrag/contract/traverse.contract.js.map +1 -0
  17. package/dist/__tests__/graphrag/contract/traverse.contract.test.d.ts +2 -0
  18. package/dist/__tests__/graphrag/contract/traverse.contract.test.d.ts.map +1 -0
  19. package/dist/__tests__/graphrag/contract/traverse.contract.test.js +100 -0
  20. package/dist/__tests__/graphrag/contract/traverse.contract.test.js.map +1 -0
  21. package/dist/__tests__/graphrag/factory.test.js +10 -1
  22. package/dist/__tests__/graphrag/factory.test.js.map +1 -1
  23. package/dist/__tests__/graphrag/fixtures/dual-graph/build-fixture-graph.d.ts +11 -0
  24. package/dist/__tests__/graphrag/fixtures/dual-graph/build-fixture-graph.d.ts.map +1 -0
  25. package/dist/__tests__/graphrag/fixtures/dual-graph/build-fixture-graph.js +34 -0
  26. package/dist/__tests__/graphrag/fixtures/dual-graph/build-fixture-graph.js.map +1 -0
  27. package/dist/__tests__/graphrag/fixtures/dual-graph/fixtures.test.d.ts +2 -0
  28. package/dist/__tests__/graphrag/fixtures/dual-graph/fixtures.test.d.ts.map +1 -0
  29. package/dist/__tests__/graphrag/fixtures/dual-graph/fixtures.test.js +46 -0
  30. package/dist/__tests__/graphrag/fixtures/dual-graph/fixtures.test.js.map +1 -0
  31. package/dist/__tests__/graphrag/graph-rag.test.js +31 -0
  32. package/dist/__tests__/graphrag/graph-rag.test.js.map +1 -1
  33. package/dist/__tests__/graphrag/json-graph.test.js +57 -0
  34. package/dist/__tests__/graphrag/json-graph.test.js.map +1 -1
  35. package/dist/__tests__/graphrag/neo4j-graph.test.d.ts +2 -0
  36. package/dist/__tests__/graphrag/neo4j-graph.test.d.ts.map +1 -0
  37. package/dist/__tests__/graphrag/neo4j-graph.test.js +104 -0
  38. package/dist/__tests__/graphrag/neo4j-graph.test.js.map +1 -0
  39. package/dist/__tests__/graphrag/neo4j-persistence.test.d.ts +2 -0
  40. package/dist/__tests__/graphrag/neo4j-persistence.test.d.ts.map +1 -0
  41. package/dist/__tests__/graphrag/neo4j-persistence.test.js +110 -0
  42. package/dist/__tests__/graphrag/neo4j-persistence.test.js.map +1 -0
  43. package/dist/__tests__/mcp-server/server.test.js +3 -16
  44. package/dist/__tests__/mcp-server/server.test.js.map +1 -1
  45. package/dist/__tests__/project-generator.test.js +2 -2
  46. package/dist/__tests__/project-generator.test.js.map +1 -1
  47. package/dist/__tests__/refine.test.js +49 -49
  48. package/dist/__tests__/reverse-collection.test.js +6 -6
  49. package/dist/__tests__/review.test.js +38 -38
  50. package/dist/__tests__/security-hardening.test.d.ts +2 -0
  51. package/dist/__tests__/security-hardening.test.d.ts.map +1 -0
  52. package/dist/__tests__/security-hardening.test.js +101 -0
  53. package/dist/__tests__/security-hardening.test.js.map +1 -0
  54. package/dist/__tests__/validate.test.js +65 -65
  55. package/dist/bin/dare.js +0 -0
  56. package/dist/commands/__tests__/execute.telemetry.spec.js +9 -0
  57. package/dist/commands/__tests__/execute.telemetry.spec.js.map +1 -1
  58. package/dist/commands/__tests__/graph-viz-layers.test.d.ts +2 -0
  59. package/dist/commands/__tests__/graph-viz-layers.test.d.ts.map +1 -0
  60. package/dist/commands/__tests__/graph-viz-layers.test.js +36 -0
  61. package/dist/commands/__tests__/graph-viz-layers.test.js.map +1 -0
  62. package/dist/commands/__tests__/impact.test.d.ts +2 -0
  63. package/dist/commands/__tests__/impact.test.d.ts.map +1 -0
  64. package/dist/commands/__tests__/impact.test.js +26 -0
  65. package/dist/commands/__tests__/impact.test.js.map +1 -0
  66. package/dist/commands/__tests__/init-validation.test.d.ts +2 -0
  67. package/dist/commands/__tests__/init-validation.test.d.ts.map +1 -0
  68. package/dist/commands/__tests__/init-validation.test.js +81 -0
  69. package/dist/commands/__tests__/init-validation.test.js.map +1 -0
  70. package/dist/commands/__tests__/init.integration.spec.js +6 -4
  71. package/dist/commands/__tests__/init.integration.spec.js.map +1 -1
  72. package/dist/commands/__tests__/init.spec.d.ts +2 -0
  73. package/dist/commands/__tests__/init.spec.d.ts.map +1 -0
  74. package/dist/commands/__tests__/init.spec.js +88 -0
  75. package/dist/commands/__tests__/init.spec.js.map +1 -0
  76. package/dist/commands/__tests__/locate.test.d.ts +2 -0
  77. package/dist/commands/__tests__/locate.test.d.ts.map +1 -0
  78. package/dist/commands/__tests__/locate.test.js +35 -0
  79. package/dist/commands/__tests__/locate.test.js.map +1 -0
  80. package/dist/commands/__tests__/owners.test.d.ts +2 -0
  81. package/dist/commands/__tests__/owners.test.d.ts.map +1 -0
  82. package/dist/commands/__tests__/owners.test.js +34 -0
  83. package/dist/commands/__tests__/owners.test.js.map +1 -0
  84. package/dist/commands/__tests__/trace.test.d.ts +2 -0
  85. package/dist/commands/__tests__/trace.test.d.ts.map +1 -0
  86. package/dist/commands/__tests__/trace.test.js +29 -0
  87. package/dist/commands/__tests__/trace.test.js.map +1 -0
  88. package/dist/commands/blueprint.js +122 -122
  89. package/dist/commands/design.js +20 -20
  90. package/dist/commands/execute.d.ts.map +1 -1
  91. package/dist/commands/execute.js +11 -6
  92. package/dist/commands/execute.js.map +1 -1
  93. package/dist/commands/graph-queries.d.ts +48 -0
  94. package/dist/commands/graph-queries.d.ts.map +1 -0
  95. package/dist/commands/graph-queries.js +204 -0
  96. package/dist/commands/graph-queries.js.map +1 -0
  97. package/dist/commands/graph.d.ts +13 -0
  98. package/dist/commands/graph.d.ts.map +1 -1
  99. package/dist/commands/graph.js +212 -8
  100. package/dist/commands/graph.js.map +1 -1
  101. package/dist/commands/init-validation.d.ts +22 -0
  102. package/dist/commands/init-validation.d.ts.map +1 -0
  103. package/dist/commands/init-validation.js +54 -0
  104. package/dist/commands/init-validation.js.map +1 -0
  105. package/dist/commands/init.d.ts.map +1 -1
  106. package/dist/commands/init.js +26 -10
  107. package/dist/commands/init.js.map +1 -1
  108. package/dist/dag-runner/__tests__/fixtures/src/math.d.ts +3 -0
  109. package/dist/dag-runner/__tests__/fixtures/src/math.d.ts.map +1 -0
  110. package/dist/dag-runner/__tests__/fixtures/src/math.js +7 -0
  111. package/dist/dag-runner/__tests__/fixtures/src/math.js.map +1 -0
  112. package/dist/dag-runner/__tests__/graph-ingest-symbols.test.d.ts +2 -0
  113. package/dist/dag-runner/__tests__/graph-ingest-symbols.test.d.ts.map +1 -0
  114. package/dist/dag-runner/__tests__/graph-ingest-symbols.test.js +81 -0
  115. package/dist/dag-runner/__tests__/graph-ingest-symbols.test.js.map +1 -0
  116. package/dist/dag-runner/graph-ingest.d.ts.map +1 -1
  117. package/dist/dag-runner/graph-ingest.js +46 -0
  118. package/dist/dag-runner/graph-ingest.js.map +1 -1
  119. package/dist/dag-runner/graph-locate.d.ts +11 -0
  120. package/dist/dag-runner/graph-locate.d.ts.map +1 -0
  121. package/dist/dag-runner/graph-locate.js +74 -0
  122. package/dist/dag-runner/graph-locate.js.map +1 -0
  123. package/dist/dag-runner/run_dag.d.ts +3 -1
  124. package/dist/dag-runner/run_dag.d.ts.map +1 -1
  125. package/dist/dag-runner/run_dag.js +2 -1
  126. package/dist/dag-runner/run_dag.js.map +1 -1
  127. package/dist/dag-runner/utils/stitch-context.d.ts +3 -1
  128. package/dist/dag-runner/utils/stitch-context.d.ts.map +1 -1
  129. package/dist/dag-runner/utils/stitch-context.js +8 -2
  130. package/dist/dag-runner/utils/stitch-context.js.map +1 -1
  131. package/dist/graphrag/__tests__/code-index.test.d.ts +2 -0
  132. package/dist/graphrag/__tests__/code-index.test.d.ts.map +1 -0
  133. package/dist/graphrag/__tests__/code-index.test.js +75 -0
  134. package/dist/graphrag/__tests__/code-index.test.js.map +1 -0
  135. package/dist/graphrag/__tests__/fixtures/code-index/sample.d.ts +5 -0
  136. package/dist/graphrag/__tests__/fixtures/code-index/sample.d.ts.map +1 -0
  137. package/dist/graphrag/__tests__/fixtures/code-index/sample.js +10 -0
  138. package/dist/graphrag/__tests__/fixtures/code-index/sample.js.map +1 -0
  139. package/dist/graphrag/__tests__/locate.test.d.ts +2 -0
  140. package/dist/graphrag/__tests__/locate.test.d.ts.map +1 -0
  141. package/dist/graphrag/__tests__/locate.test.js +43 -0
  142. package/dist/graphrag/__tests__/locate.test.js.map +1 -0
  143. package/dist/graphrag/__tests__/requirement-ingest.test.d.ts +2 -0
  144. package/dist/graphrag/__tests__/requirement-ingest.test.d.ts.map +1 -0
  145. package/dist/graphrag/__tests__/requirement-ingest.test.js +66 -0
  146. package/dist/graphrag/__tests__/requirement-ingest.test.js.map +1 -0
  147. package/dist/graphrag/__tests__/traverse.test.d.ts +2 -0
  148. package/dist/graphrag/__tests__/traverse.test.d.ts.map +1 -0
  149. package/dist/graphrag/__tests__/traverse.test.js +71 -0
  150. package/dist/graphrag/__tests__/traverse.test.js.map +1 -0
  151. package/dist/graphrag/__tests__/types.test.d.ts +2 -0
  152. package/dist/graphrag/__tests__/types.test.d.ts.map +1 -0
  153. package/dist/graphrag/__tests__/types.test.js +52 -0
  154. package/dist/graphrag/__tests__/types.test.js.map +1 -0
  155. package/dist/graphrag/code-index.d.ts +15 -0
  156. package/dist/graphrag/code-index.d.ts.map +1 -0
  157. package/dist/graphrag/code-index.js +205 -0
  158. package/dist/graphrag/code-index.js.map +1 -0
  159. package/dist/graphrag/factory.d.ts.map +1 -1
  160. package/dist/graphrag/factory.js +5 -0
  161. package/dist/graphrag/factory.js.map +1 -1
  162. package/dist/graphrag/graph-rag.d.ts +6 -2
  163. package/dist/graphrag/graph-rag.d.ts.map +1 -1
  164. package/dist/graphrag/graph-rag.js +64 -26
  165. package/dist/graphrag/graph-rag.js.map +1 -1
  166. package/dist/graphrag/index.d.ts +8 -2
  167. package/dist/graphrag/index.d.ts.map +1 -1
  168. package/dist/graphrag/index.js +5 -1
  169. package/dist/graphrag/index.js.map +1 -1
  170. package/dist/graphrag/json-graph.d.ts +8 -0
  171. package/dist/graphrag/json-graph.d.ts.map +1 -1
  172. package/dist/graphrag/json-graph.js +50 -4
  173. package/dist/graphrag/json-graph.js.map +1 -1
  174. package/dist/graphrag/knowledge-graph.d.ts +8 -3
  175. package/dist/graphrag/knowledge-graph.d.ts.map +1 -1
  176. package/dist/graphrag/neo4j-graph.d.ts +19 -18
  177. package/dist/graphrag/neo4j-graph.d.ts.map +1 -1
  178. package/dist/graphrag/neo4j-graph.js +164 -38
  179. package/dist/graphrag/neo4j-graph.js.map +1 -1
  180. package/dist/graphrag/requirement-ingest.d.ts +15 -0
  181. package/dist/graphrag/requirement-ingest.d.ts.map +1 -0
  182. package/dist/graphrag/requirement-ingest.js +158 -0
  183. package/dist/graphrag/requirement-ingest.js.map +1 -0
  184. package/dist/graphrag/traverse.d.ts +5 -0
  185. package/dist/graphrag/traverse.d.ts.map +1 -0
  186. package/dist/graphrag/traverse.js +139 -0
  187. package/dist/graphrag/traverse.js.map +1 -0
  188. package/dist/graphrag/types.d.ts +60 -2
  189. package/dist/graphrag/types.d.ts.map +1 -1
  190. package/dist/graphrag/types.js +34 -1
  191. package/dist/graphrag/types.js.map +1 -1
  192. package/dist/mcp-server/__tests__/auth.test.d.ts +2 -0
  193. package/dist/mcp-server/__tests__/auth.test.d.ts.map +1 -0
  194. package/dist/mcp-server/__tests__/auth.test.js +72 -0
  195. package/dist/mcp-server/__tests__/auth.test.js.map +1 -0
  196. package/dist/mcp-server/__tests__/boot-config.test.d.ts +2 -0
  197. package/dist/mcp-server/__tests__/boot-config.test.d.ts.map +1 -0
  198. package/dist/mcp-server/__tests__/boot-config.test.js +29 -0
  199. package/dist/mcp-server/__tests__/boot-config.test.js.map +1 -0
  200. package/dist/mcp-server/__tests__/error-sanitize.test.d.ts +2 -0
  201. package/dist/mcp-server/__tests__/error-sanitize.test.d.ts.map +1 -0
  202. package/dist/mcp-server/__tests__/error-sanitize.test.js +66 -0
  203. package/dist/mcp-server/__tests__/error-sanitize.test.js.map +1 -0
  204. package/dist/mcp-server/__tests__/mcp-graph.test.d.ts +2 -0
  205. package/dist/mcp-server/__tests__/mcp-graph.test.d.ts.map +1 -0
  206. package/dist/mcp-server/__tests__/mcp-graph.test.js +85 -0
  207. package/dist/mcp-server/__tests__/mcp-graph.test.js.map +1 -0
  208. package/dist/mcp-server/__tests__/path-confinement.test.d.ts +2 -0
  209. package/dist/mcp-server/__tests__/path-confinement.test.d.ts.map +1 -0
  210. package/dist/mcp-server/__tests__/path-confinement.test.js +135 -0
  211. package/dist/mcp-server/__tests__/path-confinement.test.js.map +1 -0
  212. package/dist/mcp-server/bin/server.js +18 -6
  213. package/dist/mcp-server/bin/server.js.map +1 -1
  214. package/dist/mcp-server/boot-config.d.ts +6 -0
  215. package/dist/mcp-server/boot-config.d.ts.map +1 -0
  216. package/dist/mcp-server/boot-config.js +17 -0
  217. package/dist/mcp-server/boot-config.js.map +1 -0
  218. package/dist/mcp-server/middleware/auth.d.ts +10 -0
  219. package/dist/mcp-server/middleware/auth.d.ts.map +1 -0
  220. package/dist/mcp-server/middleware/auth.js +44 -0
  221. package/dist/mcp-server/middleware/auth.js.map +1 -0
  222. package/dist/mcp-server/middleware/cors.d.ts +6 -0
  223. package/dist/mcp-server/middleware/cors.d.ts.map +1 -0
  224. package/dist/mcp-server/middleware/cors.js +30 -0
  225. package/dist/mcp-server/middleware/cors.js.map +1 -0
  226. package/dist/mcp-server/middleware/error-handler.d.ts +11 -0
  227. package/dist/mcp-server/middleware/error-handler.d.ts.map +1 -0
  228. package/dist/mcp-server/middleware/error-handler.js +14 -0
  229. package/dist/mcp-server/middleware/error-handler.js.map +1 -0
  230. package/dist/mcp-server/server.d.ts +7 -2
  231. package/dist/mcp-server/server.d.ts.map +1 -1
  232. package/dist/mcp-server/server.js +290 -105
  233. package/dist/mcp-server/server.js.map +1 -1
  234. package/dist/skills/registry-mock.json +109 -109
  235. package/dist/skills/tests/manifest.spec.js +20 -20
  236. package/dist/stacks/__tests__/dna-emitter.spec.js +6 -6
  237. package/dist/stacks/dna-emitter.js +69 -69
  238. package/dist/stacks/ruby-rails-8/scaffold.js +15 -15
  239. package/dist/utils/__tests__/static-analyzer-exports.test.d.ts +2 -0
  240. package/dist/utils/__tests__/static-analyzer-exports.test.d.ts.map +1 -0
  241. package/dist/utils/__tests__/static-analyzer-exports.test.js +21 -0
  242. package/dist/utils/__tests__/static-analyzer-exports.test.js.map +1 -0
  243. package/dist/utils/project-generator.d.ts.map +1 -1
  244. package/dist/utils/project-generator.js +266 -252
  245. package/dist/utils/project-generator.js.map +1 -1
  246. package/dist/utils/stack-bootstrap.js +371 -371
  247. package/dist/utils/static-analyzer.d.ts +9 -0
  248. package/dist/utils/static-analyzer.d.ts.map +1 -1
  249. package/dist/utils/static-analyzer.js +2 -2
  250. package/dist/utils/static-analyzer.js.map +1 -1
  251. package/dist/utils/templates.js +394 -394
  252. package/dist/verification/__tests__/anti-tamper.test.js +13 -13
  253. package/dist/verification/__tests__/telemetry.test.js +9 -0
  254. package/dist/verification/__tests__/telemetry.test.js.map +1 -1
  255. package/package.json +96 -93
  256. package/templates/DARE-dag-example.yaml +280 -280
  257. package/templates/UPDATE-MANIFEST.json +68 -68
  258. package/templates/backend/node-nestjs/.env.example +9 -9
  259. package/templates/backend/node-nestjs/nest-cli.json +8 -8
  260. package/templates/backend/node-nestjs/package.json +50 -50
  261. package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
  262. package/templates/backend/node-nestjs/src/app.module.ts +15 -15
  263. package/templates/backend/node-nestjs/src/app.service.ts +8 -8
  264. package/templates/backend/node-nestjs/src/main.ts +24 -24
  265. package/templates/backend/node-nestjs/tsconfig.json +21 -21
  266. package/templates/backend/php-laravel/.env.example +22 -22
  267. package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
  268. package/templates/backend/php-laravel/composer.json +40 -40
  269. package/templates/backend/python-fastapi/.env.example +4 -4
  270. package/templates/backend/python-fastapi/app/api/router.py +8 -8
  271. package/templates/backend/python-fastapi/app/core/config.py +20 -20
  272. package/templates/backend/python-fastapi/main.py +35 -35
  273. package/templates/backend/python-fastapi/requirements.txt +13 -13
  274. package/templates/backend/rust-axum/.env.example +3 -3
  275. package/templates/backend/rust-axum/Cargo.toml +23 -23
  276. package/templates/backend/rust-axum/src/errors.rs +30 -30
  277. package/templates/backend/rust-axum/src/main.rs +32 -32
  278. package/templates/backend/rust-axum/src/routes.rs +6 -6
  279. package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
  280. package/templates/frontend/leptos-csr/Cargo.toml +16 -16
  281. package/templates/frontend/leptos-csr/Trunk.toml +10 -10
  282. package/templates/frontend/leptos-csr/index.html +11 -11
  283. package/templates/frontend/leptos-csr/src/lib.rs +20 -20
  284. package/templates/frontend/leptos-csr/style/main.scss +19 -19
  285. package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
  286. package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
  287. package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
  288. package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
  289. package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
  290. package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
  291. package/templates/frontend/react/index.html +12 -12
  292. package/templates/frontend/react/package.json +35 -35
  293. package/templates/frontend/react/src/App.tsx +25 -25
  294. package/templates/frontend/react/src/main.tsx +9 -9
  295. package/templates/frontend/vue/package.json +32 -32
  296. package/templates/frontend/vue/src/App.vue +7 -7
  297. package/templates/frontend/vue/src/main.ts +10 -10
  298. package/templates/frontend/vue/src/router/index.ts +14 -14
  299. package/templates/frontend/vue/src/views/HomeView.vue +6 -6
  300. package/templates/hooks/pre-commit-dare-validate +24 -24
  301. package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -152
  302. package/templates/ide/antigravity/.agents/skills/dare-bench/SKILL.md +21 -21
  303. package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +368 -368
  304. package/templates/ide/antigravity/.agents/skills/dare-bootstrap/SKILL.md +32 -32
  305. package/templates/ide/antigravity/.agents/skills/dare-bugfix-design/SKILL.md +76 -76
  306. package/templates/ide/antigravity/.agents/skills/dare-dag/SKILL.md +32 -32
  307. package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -154
  308. package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -130
  309. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
  310. package/templates/ide/antigravity/.agents/skills/dare-design/SKILL.md +180 -180
  311. package/templates/ide/antigravity/.agents/skills/dare-discover/SKILL.md +33 -33
  312. package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -63
  313. package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -315
  314. package/templates/ide/antigravity/.agents/skills/dare-execute/SKILL.md +264 -264
  315. package/templates/ide/antigravity/.agents/skills/dare-feature-design/SKILL.md +74 -74
  316. package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -192
  317. package/templates/ide/antigravity/.agents/skills/dare-graph/SKILL.md +35 -35
  318. package/templates/ide/antigravity/.agents/skills/dare-info/SKILL.md +31 -31
  319. package/templates/ide/antigravity/.agents/skills/dare-init/SKILL.md +35 -35
  320. package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -337
  321. package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -166
  322. package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -217
  323. package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -61
  324. package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -187
  325. package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -217
  326. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
  327. package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -108
  328. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
  329. package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -263
  330. package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
  331. package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -274
  332. package/templates/ide/antigravity/.agents/skills/dare-skill/SKILL.md +35 -35
  333. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
  334. package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -188
  335. package/templates/ide/antigravity/.agents/skills/dare-update/SKILL.md +33 -33
  336. package/templates/ide/antigravity/.agents/skills/dare-validate/SKILL.md +33 -33
  337. package/templates/ide/antigravity/.agents/skills/dare-welcome/SKILL.md +30 -30
  338. package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -343
  339. package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -377
  340. package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -382
  341. package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -326
  342. package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -393
  343. package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
  344. package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
  345. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
  346. package/templates/ide/antigravity/templates/TASKS-template.md +26 -26
  347. package/templates/ide/antigravity/templates/TELEMETRY-template.md +125 -125
  348. package/templates/ide/claude/.claude/commands/dare-ax.md +131 -131
  349. package/templates/ide/claude/.claude/commands/dare-bench.md +18 -18
  350. package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
  351. package/templates/ide/claude/.claude/commands/dare-bootstrap.md +27 -27
  352. package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -119
  353. package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
  354. package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
  355. package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -117
  356. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
  357. package/templates/ide/claude/.claude/commands/dare-dag.md +27 -27
  358. package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
  359. package/templates/ide/claude/.claude/commands/dare-discover.md +28 -28
  360. package/templates/ide/claude/.claude/commands/dare-dna.md +75 -75
  361. package/templates/ide/claude/.claude/commands/dare-docker.md +207 -207
  362. package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
  363. package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -147
  364. package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -149
  365. package/templates/ide/claude/.claude/commands/dare-graph.md +30 -30
  366. package/templates/ide/claude/.claude/commands/dare-info.md +26 -26
  367. package/templates/ide/claude/.claude/commands/dare-init.md +30 -30
  368. package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -211
  369. package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -124
  370. package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -148
  371. package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -72
  372. package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -166
  373. package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -159
  374. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
  375. package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -139
  376. package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
  377. package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
  378. package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
  379. package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
  380. package/templates/ide/claude/.claude/commands/dare-skill.md +30 -30
  381. package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
  382. package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -132
  383. package/templates/ide/claude/.claude/commands/dare-update.md +28 -28
  384. package/templates/ide/claude/.claude/commands/dare-validate.md +28 -28
  385. package/templates/ide/claude/.claude/commands/dare-welcome.md +25 -25
  386. package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -205
  387. package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -232
  388. package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -228
  389. package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -210
  390. package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -236
  391. package/templates/ide/claude/.claude/settings.example.json +35 -35
  392. package/templates/ide/claude/CLAUDE.md +146 -146
  393. package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
  394. package/templates/ide/claude/templates/DESIGN-template.md +129 -129
  395. package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
  396. package/templates/ide/claude/templates/TASKS-template.md +26 -26
  397. package/templates/ide/claude/templates/TELEMETRY-template.md +125 -125
  398. package/templates/ide/cursor/.cursor/commands/dare-bench.md +18 -18
  399. package/templates/ide/cursor/.cursor/commands/dare-blueprint.md +86 -86
  400. package/templates/ide/cursor/.cursor/commands/dare-bootstrap.md +27 -27
  401. package/templates/ide/cursor/.cursor/commands/dare-bugfix-design.md +64 -64
  402. package/templates/ide/cursor/.cursor/commands/dare-dag-run.md +110 -110
  403. package/templates/ide/cursor/.cursor/commands/dare-dag-viz.md +139 -139
  404. package/templates/ide/cursor/.cursor/commands/dare-dag.md +27 -27
  405. package/templates/ide/cursor/.cursor/commands/dare-design.md +35 -35
  406. package/templates/ide/cursor/.cursor/commands/dare-discover.md +28 -28
  407. package/templates/ide/cursor/.cursor/commands/dare-dna.md +75 -75
  408. package/templates/ide/cursor/.cursor/commands/dare-docker-compose.md +18 -18
  409. package/templates/ide/cursor/.cursor/commands/dare-dockerfile.md +17 -17
  410. package/templates/ide/cursor/.cursor/commands/dare-execute.md +19 -19
  411. package/templates/ide/cursor/.cursor/commands/dare-feature-design.md +64 -64
  412. package/templates/ide/cursor/.cursor/commands/dare-graph.md +30 -30
  413. package/templates/ide/cursor/.cursor/commands/dare-info.md +26 -26
  414. package/templates/ide/cursor/.cursor/commands/dare-init.md +30 -30
  415. package/templates/ide/cursor/.cursor/commands/dare-migrate.md +72 -72
  416. package/templates/ide/cursor/.cursor/commands/dare-refine.md +107 -107
  417. package/templates/ide/cursor/.cursor/commands/dare-reverse.md +139 -139
  418. package/templates/ide/cursor/.cursor/commands/dare-review.md +91 -91
  419. package/templates/ide/cursor/.cursor/commands/dare-skill.md +30 -30
  420. package/templates/ide/cursor/.cursor/commands/dare-tasks.md +184 -184
  421. package/templates/ide/cursor/.cursor/commands/dare-telemetry.md +42 -42
  422. package/templates/ide/cursor/.cursor/commands/dare-update.md +28 -28
  423. package/templates/ide/cursor/.cursor/commands/dare-validate.md +28 -28
  424. package/templates/ide/cursor/.cursor/commands/dare-welcome.md +25 -25
  425. package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -263
  426. package/templates/ide/cursor/.cursor/rules/skill-bugfix-design.mdc +51 -51
  427. package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -173
  428. package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -134
  429. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
  430. package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -63
  431. package/templates/ide/cursor/.cursor/rules/skill-docker.mdc +33 -33
  432. package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -352
  433. package/templates/ide/cursor/.cursor/rules/skill-feature-design.mdc +43 -43
  434. package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -244
  435. package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -371
  436. package/templates/ide/cursor/.cursor/rules/skill-laravel-api.mdc +44 -44
  437. package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -266
  438. package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -295
  439. package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -367
  440. package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -58
  441. package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -346
  442. package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -248
  443. package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -400
  444. package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -262
  445. package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -107
  446. package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -281
  447. package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
  448. package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
  449. package/templates/ide/cursor/.cursor/rules/skill-telemetry.mdc +156 -156
  450. package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
  451. package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
  452. package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
  453. package/templates/ide/cursor/templates/TASKS-template.md +26 -26
  454. package/templates/ide/cursor/templates/TELEMETRY-template.md +125 -125
  455. package/templates/shared/docker-compose.yml +41 -41
  456. package/templates/stacks/go-gin/.dare/skills.yml +11 -11
  457. package/templates/stacks/go-gin/.env.example +24 -24
  458. package/templates/stacks/go-gin/.github/workflows/dare-ci.yml +42 -42
  459. package/templates/stacks/go-gin/README.md.tpl +38 -38
  460. package/templates/stacks/go-gin/cmd/server/main.go.tpl +78 -78
  461. package/templates/stacks/go-gin/db/migrations/0001_create_users.down.sql +2 -2
  462. package/templates/stacks/go-gin/db/migrations/0001_create_users.up.sql +12 -12
  463. package/templates/stacks/go-gin/db/queries/users.sql +23 -23
  464. package/templates/stacks/go-gin/gitignore +7 -7
  465. package/templates/stacks/go-gin/go.mod.tpl +17 -17
  466. package/templates/stacks/go-gin/internal/config/config.go +41 -41
  467. package/templates/stacks/go-gin/internal/db/postgres.go.tpl +25 -25
  468. package/templates/stacks/go-gin/internal/handler/auth_handler.go.tpl +72 -72
  469. package/templates/stacks/go-gin/internal/handler/users_handler.go.tpl +72 -72
  470. package/templates/stacks/go-gin/internal/handler/ws_handler.go +37 -37
  471. package/templates/stacks/go-gin/internal/llm/dummy.go +14 -14
  472. package/templates/stacks/go-gin/internal/llm/provider.go +8 -8
  473. package/templates/stacks/go-gin/internal/middleware/jwt.go.tpl +58 -58
  474. package/templates/stacks/go-gin/internal/middleware/rate_limit.go +55 -55
  475. package/templates/stacks/go-gin/internal/model/user.go +17 -17
  476. package/templates/stacks/go-gin/internal/repository/users_repository.go.tpl +79 -79
  477. package/templates/stacks/go-gin/internal/service/auth_service.go.tpl +55 -55
  478. package/templates/stacks/go-gin/internal/service/users_service.go.tpl +53 -53
  479. package/templates/stacks/go-gin/llms.txt.tpl +54 -54
  480. package/templates/stacks/go-gin/openapi.json.tpl +46 -46
  481. package/templates/stacks/go-gin/sqlc.yaml +14 -14
  482. package/templates/stacks/go-gin/tests/smoke_test.go.tpl +22 -22
  483. package/templates/stacks/go-stdlib/.dare/skills.yml +11 -11
  484. package/templates/stacks/go-stdlib/.env.example +24 -24
  485. package/templates/stacks/go-stdlib/.github/workflows/dare-ci.yml +42 -42
  486. package/templates/stacks/go-stdlib/README.md.tpl +41 -41
  487. package/templates/stacks/go-stdlib/cmd/server/main.go.tpl +82 -82
  488. package/templates/stacks/go-stdlib/db/migrations/0001_create_users.down.sql +2 -2
  489. package/templates/stacks/go-stdlib/db/migrations/0001_create_users.up.sql +12 -12
  490. package/templates/stacks/go-stdlib/db/queries/users.sql +23 -23
  491. package/templates/stacks/go-stdlib/gitignore +6 -6
  492. package/templates/stacks/go-stdlib/go.mod.tpl +15 -15
  493. package/templates/stacks/go-stdlib/internal/config/config.go +41 -41
  494. package/templates/stacks/go-stdlib/internal/db/postgres.go.tpl +24 -24
  495. package/templates/stacks/go-stdlib/internal/handler/auth_handler.go.tpl +71 -71
  496. package/templates/stacks/go-stdlib/internal/handler/users_handler.go.tpl +84 -84
  497. package/templates/stacks/go-stdlib/internal/handler/ws_handler.go +36 -36
  498. package/templates/stacks/go-stdlib/internal/httpx/json.go +32 -32
  499. package/templates/stacks/go-stdlib/internal/llm/dummy.go +14 -14
  500. package/templates/stacks/go-stdlib/internal/llm/provider.go +8 -8
  501. package/templates/stacks/go-stdlib/internal/middleware/chain.go +21 -21
  502. package/templates/stacks/go-stdlib/internal/middleware/cors.go +27 -27
  503. package/templates/stacks/go-stdlib/internal/middleware/jwt.go.tpl +51 -51
  504. package/templates/stacks/go-stdlib/internal/middleware/rate_limit.go +81 -81
  505. package/templates/stacks/go-stdlib/internal/model/user.go +17 -17
  506. package/templates/stacks/go-stdlib/internal/repository/users_repository.go.tpl +75 -75
  507. package/templates/stacks/go-stdlib/internal/service/auth_service.go.tpl +55 -55
  508. package/templates/stacks/go-stdlib/internal/service/users_service.go.tpl +53 -53
  509. package/templates/stacks/go-stdlib/llms.txt.tpl +60 -60
  510. package/templates/stacks/go-stdlib/openapi.json.tpl +46 -46
  511. package/templates/stacks/go-stdlib/sqlc.yaml +14 -14
  512. package/templates/stacks/go-stdlib/tests/smoke_test.go.tpl +45 -45
  513. package/templates/stacks/mcp-go/.dare/skills.yml +8 -8
  514. package/templates/stacks/mcp-go/.env.example +14 -14
  515. package/templates/stacks/mcp-go/.github/workflows/dare-ci.yml +42 -42
  516. package/templates/stacks/mcp-go/README.md.tpl +50 -50
  517. package/templates/stacks/mcp-go/cmd/server/main.go.tpl +62 -62
  518. package/templates/stacks/mcp-go/gitignore +6 -6
  519. package/templates/stacks/mcp-go/go.mod.tpl +9 -9
  520. package/templates/stacks/mcp-go/internal/prompts/summarize.go +9 -9
  521. package/templates/stacks/mcp-go/internal/server/server.go.tpl +80 -80
  522. package/templates/stacks/mcp-go/internal/tools/echo.go +15 -15
  523. package/templates/stacks/mcp-go/internal/transports/http.go.tpl +21 -21
  524. package/templates/stacks/mcp-go/internal/transports/sse.go.tpl +17 -17
  525. package/templates/stacks/mcp-go/internal/transports/stdio.go.tpl +14 -14
  526. package/templates/stacks/mcp-go/llms.txt.tpl +60 -60
  527. package/templates/stacks/mcp-go/openapi.json.tpl +31 -31
  528. package/templates/stacks/mcp-go/tests/echo_test.go.tpl +37 -37
  529. package/templates/stacks/mcp-node-ts/.dare/skills.yml +8 -8
  530. package/templates/stacks/mcp-node-ts/.env.example +16 -16
  531. package/templates/stacks/mcp-node-ts/.github/workflows/dare-ci.yml +54 -54
  532. package/templates/stacks/mcp-node-ts/README.md.hbs +49 -49
  533. package/templates/stacks/mcp-node-ts/gitignore +7 -7
  534. package/templates/stacks/mcp-node-ts/llms.txt.hbs +61 -61
  535. package/templates/stacks/mcp-node-ts/openapi.json.hbs +39 -39
  536. package/templates/stacks/mcp-node-ts/package.json.hbs +35 -35
  537. package/templates/stacks/mcp-node-ts/src/cli.ts.hbs +71 -71
  538. package/templates/stacks/mcp-node-ts/src/prompts/index.ts +36 -36
  539. package/templates/stacks/mcp-node-ts/src/server.ts.hbs +45 -45
  540. package/templates/stacks/mcp-node-ts/src/tools/echo.ts +23 -23
  541. package/templates/stacks/mcp-node-ts/src/tools/index.ts +18 -18
  542. package/templates/stacks/mcp-node-ts/src/transports/http.ts +68 -68
  543. package/templates/stacks/mcp-node-ts/src/transports/sse.ts +58 -58
  544. package/templates/stacks/mcp-node-ts/src/transports/stdio.ts +5 -5
  545. package/templates/stacks/mcp-node-ts/tests/echo.test.ts +50 -50
  546. package/templates/stacks/mcp-node-ts/tsconfig.json +17 -17
  547. package/templates/stacks/mcp-python/.dare/skills.yml +8 -8
  548. package/templates/stacks/mcp-python/.env.example +14 -14
  549. package/templates/stacks/mcp-python/.github/workflows/dare-ci.yml +42 -42
  550. package/templates/stacks/mcp-python/README.md.j2 +49 -49
  551. package/templates/stacks/mcp-python/gitignore +12 -12
  552. package/templates/stacks/mcp-python/llms.txt.j2 +56 -56
  553. package/templates/stacks/mcp-python/openapi.json.j2 +33 -33
  554. package/templates/stacks/mcp-python/pyproject.toml.j2 +37 -37
  555. package/templates/stacks/mcp-python/src/cli.py.j2 +68 -68
  556. package/templates/stacks/mcp-python/src/prompts/summarize.py +10 -10
  557. package/templates/stacks/mcp-python/src/server.py.j2 +28 -28
  558. package/templates/stacks/mcp-python/src/tools/echo.py +12 -12
  559. package/templates/stacks/mcp-python/src/transports/http.py +12 -12
  560. package/templates/stacks/mcp-python/src/transports/sse.py +13 -13
  561. package/templates/stacks/mcp-python/src/transports/stdio.py +6 -6
  562. package/templates/stacks/mcp-python/tests/test_echo.py +28 -28
  563. package/templates/stacks/mcp-rust/.dare/skills.yml +8 -8
  564. package/templates/stacks/mcp-rust/.env.example +14 -14
  565. package/templates/stacks/mcp-rust/.github/workflows/dare-ci.yml +38 -38
  566. package/templates/stacks/mcp-rust/Cargo.toml.tera +35 -35
  567. package/templates/stacks/mcp-rust/README.md.tera +50 -50
  568. package/templates/stacks/mcp-rust/gitignore +5 -5
  569. package/templates/stacks/mcp-rust/llms.txt.tera +60 -60
  570. package/templates/stacks/mcp-rust/openapi.json.tera +31 -31
  571. package/templates/stacks/mcp-rust/src/cli.rs.tera +33 -33
  572. package/templates/stacks/mcp-rust/src/lib.rs +6 -6
  573. package/templates/stacks/mcp-rust/src/main.rs.tera +30 -30
  574. package/templates/stacks/mcp-rust/src/prompts/mod.rs +1 -1
  575. package/templates/stacks/mcp-rust/src/prompts/summarize.rs +5 -5
  576. package/templates/stacks/mcp-rust/src/server.rs.tera +38 -38
  577. package/templates/stacks/mcp-rust/src/tools/echo.rs +18 -18
  578. package/templates/stacks/mcp-rust/src/tools/mod.rs +22 -22
  579. package/templates/stacks/mcp-rust/src/transports/http.rs +27 -27
  580. package/templates/stacks/mcp-rust/src/transports/mod.rs +3 -3
  581. package/templates/stacks/mcp-rust/src/transports/sse.rs +33 -33
  582. package/templates/stacks/mcp-rust/src/transports/stdio.rs +14 -14
  583. package/templates/stacks/mcp-rust/tests/echo_test.rs.tera +27 -27
  584. package/templates/stacks/node-nestjs/.dare/skills.yml +11 -11
  585. package/templates/stacks/node-nestjs/.env.example +21 -21
  586. package/templates/stacks/node-nestjs/.github/workflows/dare-ci.yml +54 -54
  587. package/templates/stacks/node-nestjs/README.md.hbs +35 -35
  588. package/templates/stacks/node-nestjs/gitignore +7 -7
  589. package/templates/stacks/node-nestjs/llms.txt.hbs +47 -47
  590. package/templates/stacks/node-nestjs/nest-cli.json +16 -16
  591. package/templates/stacks/node-nestjs/openapi.json.hbs +75 -75
  592. package/templates/stacks/node-nestjs/package.json.hbs +57 -57
  593. package/templates/stacks/node-nestjs/prisma/schema.prisma +25 -25
  594. package/templates/stacks/node-nestjs/prisma/seed.ts.hbs +25 -25
  595. package/templates/stacks/node-nestjs/src/app.module.ts +39 -39
  596. package/templates/stacks/node-nestjs/src/auth/auth.controller.ts +29 -29
  597. package/templates/stacks/node-nestjs/src/auth/auth.module.ts +25 -25
  598. package/templates/stacks/node-nestjs/src/auth/auth.service.ts +36 -36
  599. package/templates/stacks/node-nestjs/src/auth/dto/login-response.dto.ts +9 -9
  600. package/templates/stacks/node-nestjs/src/auth/dto/login.dto.ts +17 -17
  601. package/templates/stacks/node-nestjs/src/auth/jwt.strategy.ts +25 -25
  602. package/templates/stacks/node-nestjs/src/common/filters/problem-details.filter.ts +38 -38
  603. package/templates/stacks/node-nestjs/src/common/interceptors/json-response.interceptor.ts +13 -13
  604. package/templates/stacks/node-nestjs/src/main.ts.hbs +44 -44
  605. package/templates/stacks/node-nestjs/src/prisma/prisma.module.ts +9 -9
  606. package/templates/stacks/node-nestjs/src/prisma/prisma.service.ts +9 -9
  607. package/templates/stacks/node-nestjs/src/users/dto/create-user.dto.ts +22 -22
  608. package/templates/stacks/node-nestjs/src/users/dto/user.dto.ts +15 -15
  609. package/templates/stacks/node-nestjs/src/users/users.controller.ts +41 -41
  610. package/templates/stacks/node-nestjs/src/users/users.module.ts +11 -11
  611. package/templates/stacks/node-nestjs/src/users/users.repository.ts +38 -38
  612. package/templates/stacks/node-nestjs/src/users/users.service.ts +38 -38
  613. package/templates/stacks/node-nestjs/tsconfig.build.json +4 -4
  614. package/templates/stacks/node-nestjs/tsconfig.json +28 -28
  615. package/templates/stacks/php-laravel/.dare/skills.yml +11 -11
  616. package/templates/stacks/php-laravel/.env.example +41 -41
  617. package/templates/stacks/php-laravel/.github/workflows/dare-ci.yml +43 -43
  618. package/templates/stacks/php-laravel/README.md.hbs +36 -36
  619. package/templates/stacks/php-laravel/app/Http/Controllers/Api/AuthController.php +36 -36
  620. package/templates/stacks/php-laravel/app/Http/Controllers/Api/UsersController.php +33 -33
  621. package/templates/stacks/php-laravel/app/Http/Requests/CreateUserRequest.php +26 -26
  622. package/templates/stacks/php-laravel/app/Http/Requests/LoginRequest.php +34 -34
  623. package/templates/stacks/php-laravel/app/Llm/Contracts/LlmProvider.php +12 -12
  624. package/templates/stacks/php-laravel/app/Llm/Providers/DummyProvider.php +13 -13
  625. package/templates/stacks/php-laravel/app/Llm/Providers/OpenAiProvider.php +33 -33
  626. package/templates/stacks/php-laravel/app/Models/User.php +44 -44
  627. package/templates/stacks/php-laravel/app/Repositories/UsersRepository.php +32 -32
  628. package/templates/stacks/php-laravel/app/Services/AuthService.php +37 -37
  629. package/templates/stacks/php-laravel/app/Services/UsersService.php +57 -57
  630. package/templates/stacks/php-laravel/artisan +12 -12
  631. package/templates/stacks/php-laravel/bootstrap/app.php +29 -29
  632. package/templates/stacks/php-laravel/bootstrap/providers.php +5 -5
  633. package/templates/stacks/php-laravel/composer.json.hbs +58 -58
  634. package/templates/stacks/php-laravel/config/l5-swagger.php +41 -41
  635. package/templates/stacks/php-laravel/config/reverb.php +34 -34
  636. package/templates/stacks/php-laravel/config/sanctum.php +15 -15
  637. package/templates/stacks/php-laravel/database/migrations/2026_06_01_000001_create_users_table.php +27 -27
  638. package/templates/stacks/php-laravel/database/seeders/DatabaseSeeder.php +21 -21
  639. package/templates/stacks/php-laravel/gitignore +23 -23
  640. package/templates/stacks/php-laravel/llms.txt.hbs +53 -53
  641. package/templates/stacks/php-laravel/openapi.json.hbs +43 -43
  642. package/templates/stacks/php-laravel/phpstan.neon +9 -9
  643. package/templates/stacks/php-laravel/routes/api.php +13 -13
  644. package/templates/stacks/php-laravel/routes/channels.php +7 -7
  645. package/templates/stacks/php-laravel/tests/Feature/AuthTest.php +35 -35
  646. package/templates/stacks/php-laravel/tests/Feature/UsersTest.php +30 -30
  647. package/templates/stacks/php-laravel/tests/Pest.php +5 -5
  648. package/templates/stacks/python-fastapi/.dare/skills.yml +11 -11
  649. package/templates/stacks/python-fastapi/.env.example +21 -21
  650. package/templates/stacks/python-fastapi/.github/workflows/dare-ci.yml +43 -43
  651. package/templates/stacks/python-fastapi/README.md.j2 +35 -35
  652. package/templates/stacks/python-fastapi/alembic/env.py +46 -46
  653. package/templates/stacks/python-fastapi/alembic/script.py.mako +26 -26
  654. package/templates/stacks/python-fastapi/alembic/versions/0001_create_users.py.j2 +37 -37
  655. package/templates/stacks/python-fastapi/alembic.ini.j2 +39 -39
  656. package/templates/stacks/python-fastapi/app/core/config.py +24 -24
  657. package/templates/stacks/python-fastapi/app/core/security.py +34 -34
  658. package/templates/stacks/python-fastapi/app/db/session.py +22 -22
  659. package/templates/stacks/python-fastapi/app/main.py.j2 +36 -36
  660. package/templates/stacks/python-fastapi/app/models/__init__.py +3 -3
  661. package/templates/stacks/python-fastapi/app/models/user.py +30 -30
  662. package/templates/stacks/python-fastapi/app/repositories/user_repository.py +34 -34
  663. package/templates/stacks/python-fastapi/app/routers/auth.py +37 -37
  664. package/templates/stacks/python-fastapi/app/routers/users.py +46 -46
  665. package/templates/stacks/python-fastapi/app/schemas/user.py +56 -56
  666. package/templates/stacks/python-fastapi/app/services/auth_service.py +22 -22
  667. package/templates/stacks/python-fastapi/app/services/user_service.py +31 -31
  668. package/templates/stacks/python-fastapi/gitignore +12 -12
  669. package/templates/stacks/python-fastapi/llms.txt.j2 +53 -53
  670. package/templates/stacks/python-fastapi/openapi.json.j2 +43 -43
  671. package/templates/stacks/python-fastapi/pyproject.toml.j2 +45 -45
  672. package/templates/stacks/python-fastapi/tests/test_auth.py +22 -22
  673. package/templates/stacks/ruby-rails-8/.dare/skills.yml +50 -50
  674. package/templates/stacks/ruby-rails-8/.env.example +20 -20
  675. package/templates/stacks/ruby-rails-8/.github/workflows/dare-ci.yml +112 -112
  676. package/templates/stacks/ruby-rails-8/Gemfile.erb +61 -61
  677. package/templates/stacks/ruby-rails-8/app/channels/application_cable/channel.rb +11 -11
  678. package/templates/stacks/ruby-rails-8/app/channels/application_cable/connection.rb +34 -34
  679. package/templates/stacks/ruby-rails-8/app/channels/dare_updates_channel.rb +18 -18
  680. package/templates/stacks/ruby-rails-8/app/channels/user_updates_channel.rb +23 -23
  681. package/templates/stacks/ruby-rails-8/app/controllers/application_controller.rb +44 -44
  682. package/templates/stacks/ruby-rails-8/app/controllers/concerns/problem_details.rb +93 -93
  683. package/templates/stacks/ruby-rails-8/app/handlers/summarize_handler.rb +33 -33
  684. package/templates/stacks/ruby-rails-8/app/handlers/users_handler.rb +68 -68
  685. package/templates/stacks/ruby-rails-8/app/llm/cache/llm_cache.rb +44 -44
  686. package/templates/stacks/ruby-rails-8/app/llm/prompts/prompt_loader.rb +54 -54
  687. package/templates/stacks/ruby-rails-8/app/llm/prompts/summarize_v1.jinja2 +12 -12
  688. package/templates/stacks/ruby-rails-8/app/llm/providers/dummy_provider.rb +35 -35
  689. package/templates/stacks/ruby-rails-8/app/llm/providers/llm_provider.rb +67 -67
  690. package/templates/stacks/ruby-rails-8/app/llm/providers/openai_provider.rb +62 -62
  691. package/templates/stacks/ruby-rails-8/app/llm/rate_limit/token_bucket.rb +82 -82
  692. package/templates/stacks/ruby-rails-8/app/llm/validators/summarize_output_schema.json +21 -21
  693. package/templates/stacks/ruby-rails-8/app/llm/validators/validator.rb +52 -52
  694. package/templates/stacks/ruby-rails-8/app/models/user.rb +36 -36
  695. package/templates/stacks/ruby-rails-8/app/presenters/user_presenter.rb +48 -48
  696. package/templates/stacks/ruby-rails-8/app/repositories/document_repository.rb +57 -57
  697. package/templates/stacks/ruby-rails-8/app/repositories/user_repository.rb +73 -73
  698. package/templates/stacks/ruby-rails-8/app/services/create_user_service.rb +67 -67
  699. package/templates/stacks/ruby-rails-8/app/services/realtime_service.rb +53 -53
  700. package/templates/stacks/ruby-rails-8/app/services/summarize_document_service.rb +57 -57
  701. package/templates/stacks/ruby-rails-8/config/dare.yml +42 -42
  702. package/templates/stacks/ruby-rails-8/config/initializers/dare.rb +31 -31
  703. package/templates/stacks/ruby-rails-8/config/initializers/rack_attack.rb +64 -64
  704. package/templates/stacks/ruby-rails-8/config/initializers/rswag_api.rb +12 -12
  705. package/templates/stacks/ruby-rails-8/lib/tasks/dare.rake +159 -159
  706. package/templates/stacks/ruby-rails-8/llms.txt.erb +69 -69
  707. package/templates/stacks/ruby-rails-8/spec/api/summarize_spec.rb +56 -56
  708. package/templates/stacks/ruby-rails-8/spec/api/users_spec.rb +72 -72
  709. package/templates/stacks/ruby-rails-8/spec/channels/dare_updates_channel_spec.rb +61 -61
  710. package/templates/stacks/ruby-rails-8/spec/channels/user_updates_channel_spec.rb +56 -56
  711. package/templates/stacks/ruby-rails-8/spec/factories/users.rb +27 -27
  712. package/templates/stacks/ruby-rails-8/spec/handlers/users_handler_spec.rb +88 -88
  713. package/templates/stacks/ruby-rails-8/spec/rails_helper.rb +31 -31
  714. package/templates/stacks/ruby-rails-8/spec/services/create_user_service_spec.rb +88 -88
  715. package/templates/stacks/ruby-rails-8/spec/services/summarize_document_service_spec.rb +142 -142
  716. package/templates/stacks/ruby-rails-8/spec/swagger_helper.rb +73 -73
  717. package/templates/stacks/rust-axum/.dare/skills.yml +11 -11
  718. package/templates/stacks/rust-axum/.env.example +26 -26
  719. package/templates/stacks/rust-axum/.github/workflows/dare-ci.yml +40 -40
  720. package/templates/stacks/rust-axum/Cargo.toml.tera +53 -53
  721. package/templates/stacks/rust-axum/README.md.tera +37 -37
  722. package/templates/stacks/rust-axum/gitignore +5 -5
  723. package/templates/stacks/rust-axum/llms.txt.tera +54 -54
  724. package/templates/stacks/rust-axum/migrations/0001_create_users.sql +13 -13
  725. package/templates/stacks/rust-axum/openapi.json.tera +46 -46
  726. package/templates/stacks/rust-axum/src/config.rs +45 -45
  727. package/templates/stacks/rust-axum/src/errors.rs +48 -48
  728. package/templates/stacks/rust-axum/src/handlers/auth.rs +48 -48
  729. package/templates/stacks/rust-axum/src/handlers/mod.rs +3 -3
  730. package/templates/stacks/rust-axum/src/handlers/users.rs +81 -81
  731. package/templates/stacks/rust-axum/src/handlers/ws.rs +24 -24
  732. package/templates/stacks/rust-axum/src/lib.rs +19 -19
  733. package/templates/stacks/rust-axum/src/llm/mod.rs +1 -1
  734. package/templates/stacks/rust-axum/src/llm/provider.rs +48 -48
  735. package/templates/stacks/rust-axum/src/main.rs.tera +64 -64
  736. package/templates/stacks/rust-axum/src/middleware/auth.rs +20 -20
  737. package/templates/stacks/rust-axum/src/middleware/mod.rs +2 -2
  738. package/templates/stacks/rust-axum/src/middleware/rate_limit.rs +27 -27
  739. package/templates/stacks/rust-axum/src/models/mod.rs +1 -1
  740. package/templates/stacks/rust-axum/src/models/user.rs +13 -13
  741. package/templates/stacks/rust-axum/src/repositories/mod.rs +1 -1
  742. package/templates/stacks/rust-axum/src/repositories/user_repository.rs +62 -62
  743. package/templates/stacks/rust-axum/src/services/auth_service.rs +50 -50
  744. package/templates/stacks/rust-axum/src/services/mod.rs +2 -2
  745. package/templates/stacks/rust-axum/src/services/user_service.rs +53 -53
  746. package/templates/stacks/rust-axum/tests/integration_test.rs.tera +13 -13
  747. package/dist/commands/new.d.ts +0 -16
  748. package/dist/commands/new.d.ts.map +0 -1
  749. package/dist/commands/new.js +0 -104
  750. package/dist/commands/new.js.map +0 -1
@@ -1,217 +1,217 @@
1
- ---
2
- name: dare-llm-integration
3
- description: Integração com LLMs (Large Language Models) em projetos DARE. Fornece abstração LLMProvider, cache em memória com TTL, rate limiting via token bucket, prompt templates versionados e validação de output via JSON Schema. Cobre antipatterns crítico de prompt injection e LLM output não validado.
4
- ---
5
-
6
- # DARE LLM Integration Skill
7
-
8
- Você é um especialista em integração com LLMs (Gemini, Claude, GPT, modelos locais). Seu papel é garantir que toda chamada a LLM em projeto DARE seja **abstraída, cacheada, rate-limited, validada e auditável**.
9
-
10
- ## Quando usar esta skill
11
-
12
- - Projeto vai consumir Gemini, Claude API, OpenAI, Ollama ou similar
13
- - Você está revisando Handler que chama SDK de LLM diretamente
14
- - Você está auditando custos de LLM no projeto
15
- - Você está adicionando proteção contra prompt injection
16
-
17
- ## A arquitetura recomendada
18
-
19
- ```
20
- ┌────────────────────────────────────────────────────────┐
21
- │ Handler / Service │
22
- └────────────────────────────────────────────────────────┘
23
- ↓ injeta
24
- ┌────────────────────────────────────────────────────────┐
25
- │ LLMProvider (interface) │
26
- │ ├── GeminiProvider │
27
- │ ├── ClaudeProvider │
28
- │ ├── OpenAIProvider │
29
- │ └── OllamaProvider (local) │
30
- └────────────────────────────────────────────────────────┘
31
- ↓ wrapping
32
- ┌────────────────────────────────────────────────────────┐
33
- │ Cache (TTL) + RateLimit (token bucket) + Schema │
34
- └────────────────────────────────────────────────────────┘
35
-
36
- ┌────────────────────────────────────────────────────────┐
37
- │ HTTP call externo (Gemini API, etc.) │
38
- └────────────────────────────────────────────────────────┘
39
- ```
40
-
41
- ## Os 5 pilares
42
-
43
- ### 1. LLMProvider abstraction
44
-
45
- NUNCA chame SDK do Gemini/OpenAI dentro de um Handler ou Service de negócio. Sempre passe pela interface `LLMProvider`.
46
-
47
- ```typescript
48
- // ❌ Errado
49
- class SummaryService {
50
- async run(text: string) {
51
- const client = new GoogleGenAI({apiKey: 'xxx'});
52
- return client.generateContent({contents: text});
53
- }
54
- }
55
-
56
- // ✅ Certo
57
- class SummaryService {
58
- constructor(private llm: LLMProvider) {}
59
- async run(text: string) {
60
- return this.llm.complete({
61
- promptId: 'summarize-v1',
62
- input: { text },
63
- schema: SummarySchema,
64
- });
65
- }
66
- }
67
- ```
68
-
69
- ### 2. Cache em memória com TTL
70
-
71
- Toda chamada deve passar por cache. Cache key = `hash(promptId + input + model)`. TTL configurável por prompt (default 1 hora).
72
-
73
- **Antipattern AP-02:** Sem cache → custo explode em loops.
74
-
75
- ### 3. Rate limit via token bucket
76
-
77
- Proteja a integração externa **e** seu wallet. Configure tokens/segundo por provider.
78
-
79
- | Provider | Limite típico |
80
- |---|---|
81
- | Gemini Free | 15 RPM, 1 milhão tokens/dia |
82
- | Claude API | 50 RPM (tier 1) |
83
- | OpenAI | 500 RPM (tier 1) |
84
- | Ollama local | sem limite, mas latência alta |
85
-
86
- ### 4. Prompt templates versionados
87
-
88
- Prompts NUNCA ficam inline em código. Vivem em `prompts/<id>.v<n>.md`:
89
-
90
- ```markdown
91
- ---
92
- id: summarize
93
- version: 1
94
- model: gemini-2.0-flash
95
- temperature: 0.2
96
- max_tokens: 500
97
- schema: SummarySchema
98
- ---
99
-
100
- # System
101
-
102
- You are a concise summarizer. Output JSON with this schema:
103
- {schema}
104
-
105
- # User
106
-
107
- Summarize the following text in 3 bullet points:
108
-
109
- <text>{{ text }}</text>
110
- ```
111
-
112
- Substituição usa **template engine seguro** (Jinja2, Handlebars com sandbox, ou string interpolation com escape) — nunca `eval` ou `f-string` direto com user input.
113
-
114
- ### 5. Validação via JSON Schema
115
-
116
- LLM mente. Sempre valide o output:
117
-
118
- ```typescript
119
- const result = await llm.complete({...});
120
- const validated = SummarySchema.parse(result); // Zod, Pydantic, ajv...
121
- if (!validated.success) {
122
- throw new LLMOutputInvalidError(validated.error);
123
- // Logar + alertar — pode indicar prompt injection ou drift de modelo
124
- }
125
- ```
126
-
127
- ## Métricas obrigatórias
128
-
129
- | ID | Métrica | Como medir |
130
- |---|---|---|
131
- | M-01 | 100% das chamadas LLM via LLMProvider injetado | grep por `new GoogleGenAI \| new OpenAI \| Anthropic(` em Services |
132
- | M-02 | 100% das responses LLM cacheadas | logs do cache layer |
133
- | M-03 | 100% das requests LLM com rate limit | rate limiter ativo em todo provider |
134
- | M-04 | 100% das respostas LLM validadas contra schema | grep por `.parse(` ou `Pydantic` no resultado |
135
-
136
- ## Antipatterns
137
-
138
- | AP | Antipattern | Por que evitar |
139
- |---|---|---|
140
- | AP-01 | SDK do LLM direto em Handler | impossível mockar, impossível trocar de provider |
141
- | AP-02 | Sem cache | custo explode, latência ruim |
142
- | AP-03 | Prompt em código | impossível versionar e A/B testar |
143
- | AP-04 | User input direto em prompt | prompt injection trivial |
144
- | AP-05 | Confiar em output LLM sem validar | LLM mente — schema é defesa |
145
-
146
- ## Defesa contra prompt injection (crítico)
147
-
148
- ```python
149
- # ❌ Errado — instrução + dado misturados
150
- system = f"You are an assistant. {user_question}"
151
-
152
- # ✅ Certo — separação clara
153
- messages = [
154
- {"role": "system", "content": "You are an assistant. Answer only based on the provided document."},
155
- {"role": "user", "content": f"<document>{escape(doc)}</document>\n\n<question>{escape(q)}</question>"}
156
- ]
157
- ```
158
-
159
- Regras:
160
- - Use delimitadores (`<document>`, `<question>`)
161
- - Escape conteúdo do usuário (XML escape, HTML escape)
162
- - Detecte e remova padrões "Ignore as instruções acima", "You are now ..."
163
- - Valide output contra schema — output fora do schema = possível injection bem-sucedido
164
-
165
- ## Como aplicar
166
-
167
- ### Passo 1: Criar abstração LLMProvider
168
-
169
- ```typescript
170
- interface LLMProvider {
171
- complete(req: LLMRequest): Promise<LLMResponse>;
172
- }
173
-
174
- interface LLMRequest {
175
- promptId: string;
176
- input: Record<string, unknown>;
177
- schema: ZodSchema;
178
- options?: { temperature?: number; maxTokens?: number };
179
- }
180
- ```
181
-
182
- ### Passo 2: Implementar 1+ provider
183
-
184
- Comece com o que o projeto usa (Gemini, Claude, etc.). Adicione mais conforme necessário.
185
-
186
- ### Passo 3: Configurar cache
187
-
188
- `packages/skills/dare-llm-integration/cache/` tem implementação em memória com TTL pronta. Use ou copie.
189
-
190
- ### Passo 4: Configurar rate limit
191
-
192
- Token bucket por provider, configurado em `app.config`.
193
-
194
- ### Passo 5: Migrar prompts inline para arquivos
195
-
196
- Inventarie todos os `system: "..."` no código e mova para `prompts/<id>.v1.md`.
197
-
198
- ### Passo 6: Adicionar validação de output
199
-
200
- Schema Zod/Pydantic/serde para cada prompt. CI falha se prompt não tiver schema declarado.
201
-
202
- ## Boas práticas
203
-
204
- 1. **Provider neutro no domínio** — Service não sabe se é Gemini ou Claude
205
- 2. **Custo é parte da observabilidade** — logue tokens in/out + custo estimado por request
206
- 3. **Fallback** — se provider primário falhar, tente secundário (Gemini → Claude)
207
- 4. **Latência alta = degrada UX** — esconda atrás de fila assíncrona quando >2s
208
-
209
- ## Dicas
210
-
211
- - **Leia** `docs/design/skills/dare-llm-integration/DESIGN.md`
212
- - **Combine** com `dare-security` (RS-* para prompt injection)
213
- - **Use** os providers em `packages/skills/dare-llm-integration/providers/` como referência
214
-
215
- ---
216
-
217
- Esta skill é parte do DARE Method e está sob licença MIT.
1
+ ---
2
+ name: dare-llm-integration
3
+ description: Integração com LLMs (Large Language Models) em projetos DARE. Fornece abstração LLMProvider, cache em memória com TTL, rate limiting via token bucket, prompt templates versionados e validação de output via JSON Schema. Cobre antipatterns crítico de prompt injection e LLM output não validado.
4
+ ---
5
+
6
+ # DARE LLM Integration Skill
7
+
8
+ Você é um especialista em integração com LLMs (Gemini, Claude, GPT, modelos locais). Seu papel é garantir que toda chamada a LLM em projeto DARE seja **abstraída, cacheada, rate-limited, validada e auditável**.
9
+
10
+ ## Quando usar esta skill
11
+
12
+ - Projeto vai consumir Gemini, Claude API, OpenAI, Ollama ou similar
13
+ - Você está revisando Handler que chama SDK de LLM diretamente
14
+ - Você está auditando custos de LLM no projeto
15
+ - Você está adicionando proteção contra prompt injection
16
+
17
+ ## A arquitetura recomendada
18
+
19
+ ```
20
+ ┌────────────────────────────────────────────────────────┐
21
+ │ Handler / Service │
22
+ └────────────────────────────────────────────────────────┘
23
+ ↓ injeta
24
+ ┌────────────────────────────────────────────────────────┐
25
+ │ LLMProvider (interface) │
26
+ │ ├── GeminiProvider │
27
+ │ ├── ClaudeProvider │
28
+ │ ├── OpenAIProvider │
29
+ │ └── OllamaProvider (local) │
30
+ └────────────────────────────────────────────────────────┘
31
+ ↓ wrapping
32
+ ┌────────────────────────────────────────────────────────┐
33
+ │ Cache (TTL) + RateLimit (token bucket) + Schema │
34
+ └────────────────────────────────────────────────────────┘
35
+
36
+ ┌────────────────────────────────────────────────────────┐
37
+ │ HTTP call externo (Gemini API, etc.) │
38
+ └────────────────────────────────────────────────────────┘
39
+ ```
40
+
41
+ ## Os 5 pilares
42
+
43
+ ### 1. LLMProvider abstraction
44
+
45
+ NUNCA chame SDK do Gemini/OpenAI dentro de um Handler ou Service de negócio. Sempre passe pela interface `LLMProvider`.
46
+
47
+ ```typescript
48
+ // ❌ Errado
49
+ class SummaryService {
50
+ async run(text: string) {
51
+ const client = new GoogleGenAI({apiKey: 'xxx'});
52
+ return client.generateContent({contents: text});
53
+ }
54
+ }
55
+
56
+ // ✅ Certo
57
+ class SummaryService {
58
+ constructor(private llm: LLMProvider) {}
59
+ async run(text: string) {
60
+ return this.llm.complete({
61
+ promptId: 'summarize-v1',
62
+ input: { text },
63
+ schema: SummarySchema,
64
+ });
65
+ }
66
+ }
67
+ ```
68
+
69
+ ### 2. Cache em memória com TTL
70
+
71
+ Toda chamada deve passar por cache. Cache key = `hash(promptId + input + model)`. TTL configurável por prompt (default 1 hora).
72
+
73
+ **Antipattern AP-02:** Sem cache → custo explode em loops.
74
+
75
+ ### 3. Rate limit via token bucket
76
+
77
+ Proteja a integração externa **e** seu wallet. Configure tokens/segundo por provider.
78
+
79
+ | Provider | Limite típico |
80
+ |---|---|
81
+ | Gemini Free | 15 RPM, 1 milhão tokens/dia |
82
+ | Claude API | 50 RPM (tier 1) |
83
+ | OpenAI | 500 RPM (tier 1) |
84
+ | Ollama local | sem limite, mas latência alta |
85
+
86
+ ### 4. Prompt templates versionados
87
+
88
+ Prompts NUNCA ficam inline em código. Vivem em `prompts/<id>.v<n>.md`:
89
+
90
+ ```markdown
91
+ ---
92
+ id: summarize
93
+ version: 1
94
+ model: gemini-2.0-flash
95
+ temperature: 0.2
96
+ max_tokens: 500
97
+ schema: SummarySchema
98
+ ---
99
+
100
+ # System
101
+
102
+ You are a concise summarizer. Output JSON with this schema:
103
+ {schema}
104
+
105
+ # User
106
+
107
+ Summarize the following text in 3 bullet points:
108
+
109
+ <text>{{ text }}</text>
110
+ ```
111
+
112
+ Substituição usa **template engine seguro** (Jinja2, Handlebars com sandbox, ou string interpolation com escape) — nunca `eval` ou `f-string` direto com user input.
113
+
114
+ ### 5. Validação via JSON Schema
115
+
116
+ LLM mente. Sempre valide o output:
117
+
118
+ ```typescript
119
+ const result = await llm.complete({...});
120
+ const validated = SummarySchema.parse(result); // Zod, Pydantic, ajv...
121
+ if (!validated.success) {
122
+ throw new LLMOutputInvalidError(validated.error);
123
+ // Logar + alertar — pode indicar prompt injection ou drift de modelo
124
+ }
125
+ ```
126
+
127
+ ## Métricas obrigatórias
128
+
129
+ | ID | Métrica | Como medir |
130
+ |---|---|---|
131
+ | M-01 | 100% das chamadas LLM via LLMProvider injetado | grep por `new GoogleGenAI \| new OpenAI \| Anthropic(` em Services |
132
+ | M-02 | 100% das responses LLM cacheadas | logs do cache layer |
133
+ | M-03 | 100% das requests LLM com rate limit | rate limiter ativo em todo provider |
134
+ | M-04 | 100% das respostas LLM validadas contra schema | grep por `.parse(` ou `Pydantic` no resultado |
135
+
136
+ ## Antipatterns
137
+
138
+ | AP | Antipattern | Por que evitar |
139
+ |---|---|---|
140
+ | AP-01 | SDK do LLM direto em Handler | impossível mockar, impossível trocar de provider |
141
+ | AP-02 | Sem cache | custo explode, latência ruim |
142
+ | AP-03 | Prompt em código | impossível versionar e A/B testar |
143
+ | AP-04 | User input direto em prompt | prompt injection trivial |
144
+ | AP-05 | Confiar em output LLM sem validar | LLM mente — schema é defesa |
145
+
146
+ ## Defesa contra prompt injection (crítico)
147
+
148
+ ```python
149
+ # ❌ Errado — instrução + dado misturados
150
+ system = f"You are an assistant. {user_question}"
151
+
152
+ # ✅ Certo — separação clara
153
+ messages = [
154
+ {"role": "system", "content": "You are an assistant. Answer only based on the provided document."},
155
+ {"role": "user", "content": f"<document>{escape(doc)}</document>\n\n<question>{escape(q)}</question>"}
156
+ ]
157
+ ```
158
+
159
+ Regras:
160
+ - Use delimitadores (`<document>`, `<question>`)
161
+ - Escape conteúdo do usuário (XML escape, HTML escape)
162
+ - Detecte e remova padrões "Ignore as instruções acima", "You are now ..."
163
+ - Valide output contra schema — output fora do schema = possível injection bem-sucedido
164
+
165
+ ## Como aplicar
166
+
167
+ ### Passo 1: Criar abstração LLMProvider
168
+
169
+ ```typescript
170
+ interface LLMProvider {
171
+ complete(req: LLMRequest): Promise<LLMResponse>;
172
+ }
173
+
174
+ interface LLMRequest {
175
+ promptId: string;
176
+ input: Record<string, unknown>;
177
+ schema: ZodSchema;
178
+ options?: { temperature?: number; maxTokens?: number };
179
+ }
180
+ ```
181
+
182
+ ### Passo 2: Implementar 1+ provider
183
+
184
+ Comece com o que o projeto usa (Gemini, Claude, etc.). Adicione mais conforme necessário.
185
+
186
+ ### Passo 3: Configurar cache
187
+
188
+ `packages/skills/dare-llm-integration/cache/` tem implementação em memória com TTL pronta. Use ou copie.
189
+
190
+ ### Passo 4: Configurar rate limit
191
+
192
+ Token bucket por provider, configurado em `app.config`.
193
+
194
+ ### Passo 5: Migrar prompts inline para arquivos
195
+
196
+ Inventarie todos os `system: "..."` no código e mova para `prompts/<id>.v1.md`.
197
+
198
+ ### Passo 6: Adicionar validação de output
199
+
200
+ Schema Zod/Pydantic/serde para cada prompt. CI falha se prompt não tiver schema declarado.
201
+
202
+ ## Boas práticas
203
+
204
+ 1. **Provider neutro no domínio** — Service não sabe se é Gemini ou Claude
205
+ 2. **Custo é parte da observabilidade** — logue tokens in/out + custo estimado por request
206
+ 3. **Fallback** — se provider primário falhar, tente secundário (Gemini → Claude)
207
+ 4. **Latência alta = degrada UX** — esconda atrás de fila assíncrona quando >2s
208
+
209
+ ## Dicas
210
+
211
+ - **Leia** `docs/design/skills/dare-llm-integration/DESIGN.md`
212
+ - **Combine** com `dare-security` (RS-* para prompt injection)
213
+ - **Use** os providers em `packages/skills/dare-llm-integration/providers/` como referência
214
+
215
+ ---
216
+
217
+ Esta skill é parte do DARE Method e está sob licença MIT.
@@ -1,61 +1,61 @@
1
- ---
2
- name: dare-migrate
3
- description: Camada semântica da migração (Fase 2 brownfield). Roda depois do comando `dare migrate` e escreve a estratégia de migração + cenários Gherkin de paridade reais no DARE/MIGRATION/, garantindo reimplementação fiel ao legado.
4
- ---
5
-
6
- # DARE Migrate Skill — Migração com paridade (brownfield Fase 2)
7
-
8
- Você é o agente que transforma o entendimento do legado em um **plano de migração com paridade**.
9
- Esta skill é a camada **semântica**: roda **depois** do comando `dare migrate`, que já leu os
10
- artefatos do `reverse`/`dna` e gerou os esqueletos. Sua função é **escrever a estratégia de migração
11
- e os cenários Gherkin de paridade reais** — o contrato comportamental que garante uma reimplementação
12
- fiel ao legado.
13
-
14
- > Pré-requisito: o comando `dare migrate --to <stack>` precisa ter rodado antes (gera
15
- > `DARE/MIGRATION/MIGRATION.md`, `migration-facts.json`, `parity/*.feature`). Que por sua vez exige
16
- > `dare reverse` já executado. Se faltar, peça ao usuário para rodar na ordem.
17
-
18
- ## Quando usar esta skill
19
- - Projeto legado entendido (`reverse` + `dna`) que será reimplementado em outra stack.
20
- - Acabou de rodar `dare migrate` e há seções `<!-- AGENT -->` / `# AGENT` em aberto.
21
-
22
- ## Passo a passo
23
-
24
- ### 1. Carregar contexto (não re-varrer)
25
- Leia `migration-facts.json` (origem/alvo/módulos/blocking gaps), `IDEIA.md` + `REVERSE/module-*.md`
26
- e `PROJECT-DNA.md`. Abra arquivos-chave do legado só o necessário para inferir comportamento.
27
-
28
- ### 2. Preencher `DARE/MIGRATION/MIGRATION.md`
29
- - **Decisão de Paradigma** — mudou (procedural→OO, monólito→serviços)? Decisão + justificativa.
30
- - **Estratégia** — big-bang vs. strangler/parallel-run; ordem dos módulos; feature flags.
31
- - **Registro de Risco** — tratar cada blocking gap (🔴) + riscos de regressão/dados/performance.
32
- - **Arquitetura-alvo** — na stack-alvo, alinhada ao DNA quando o paradigma for preservado.
33
- - **Cutover & Rollback** — passos, validação de paridade (rodar `.feature`), go/no-go, rollback.
34
-
35
- ### 3. Gherkin de paridade (`parity/<módulo>.feature`)
36
- Um `Scenario` por fluxo observável, derivado do **comportamento legado real**: `Given` → `When` →
37
- `Then` idêntico ao legado. Inclua bordas/formatos (arredondamento, máscaras). É o contrato de aceite
38
- da reimplementação na stack-alvo.
39
-
40
- ### 4. Apresentar ao usuário
41
- Resumo: paradigma, estratégia, nº de cenários de paridade, blocking gaps a resolver.
42
-
43
- ## Regras de ouro
44
- 1. **Paridade primeiro** — todo fluxo crítico vira `Scenario`.
45
- 2. **Blocking gaps são bloqueantes** — 🔴 não resolvido é risco; trate ou registre.
46
- 3. **Respeite o DNA** — arquitetura-alvo segue as convenções da casa.
47
- 4. **Não invente comportamento** — cenário sem base no legado = regressão silenciosa.
48
- 5. **Strangler quando possível** — incremental com parallel-run reduz risco.
49
-
50
- ## Antipatterns
51
- | AP | Antipattern | Por quê |
52
- |---|---|---|
53
- | AP-01 | Gherkin genérico sem base no legado | Não garante paridade |
54
- | AP-02 | Ignorar blocking gaps (🔴) | Reimplementa sobre incerteza |
55
- | AP-03 | Big-bang sem necessidade | Maximiza risco |
56
- | AP-04 | Arquitetura-alvo desalinhada do DNA | Código vira ilha inconsistente |
57
- | AP-05 | Reescrever os fatos determinísticos do CLI | Quebra a fonte de verdade |
58
-
59
- ---
60
-
61
- Skill MIT — parte do DARE Method. Fase 2 (brownfield). Pareia com o comando `dare migrate`.
1
+ ---
2
+ name: dare-migrate
3
+ description: Camada semântica da migração (Fase 2 brownfield). Roda depois do comando `dare migrate` e escreve a estratégia de migração + cenários Gherkin de paridade reais no DARE/MIGRATION/, garantindo reimplementação fiel ao legado.
4
+ ---
5
+
6
+ # DARE Migrate Skill — Migração com paridade (brownfield Fase 2)
7
+
8
+ Você é o agente que transforma o entendimento do legado em um **plano de migração com paridade**.
9
+ Esta skill é a camada **semântica**: roda **depois** do comando `dare migrate`, que já leu os
10
+ artefatos do `reverse`/`dna` e gerou os esqueletos. Sua função é **escrever a estratégia de migração
11
+ e os cenários Gherkin de paridade reais** — o contrato comportamental que garante uma reimplementação
12
+ fiel ao legado.
13
+
14
+ > Pré-requisito: o comando `dare migrate --to <stack>` precisa ter rodado antes (gera
15
+ > `DARE/MIGRATION/MIGRATION.md`, `migration-facts.json`, `parity/*.feature`). Que por sua vez exige
16
+ > `dare reverse` já executado. Se faltar, peça ao usuário para rodar na ordem.
17
+
18
+ ## Quando usar esta skill
19
+ - Projeto legado entendido (`reverse` + `dna`) que será reimplementado em outra stack.
20
+ - Acabou de rodar `dare migrate` e há seções `<!-- AGENT -->` / `# AGENT` em aberto.
21
+
22
+ ## Passo a passo
23
+
24
+ ### 1. Carregar contexto (não re-varrer)
25
+ Leia `migration-facts.json` (origem/alvo/módulos/blocking gaps), `IDEIA.md` + `REVERSE/module-*.md`
26
+ e `PROJECT-DNA.md`. Abra arquivos-chave do legado só o necessário para inferir comportamento.
27
+
28
+ ### 2. Preencher `DARE/MIGRATION/MIGRATION.md`
29
+ - **Decisão de Paradigma** — mudou (procedural→OO, monólito→serviços)? Decisão + justificativa.
30
+ - **Estratégia** — big-bang vs. strangler/parallel-run; ordem dos módulos; feature flags.
31
+ - **Registro de Risco** — tratar cada blocking gap (🔴) + riscos de regressão/dados/performance.
32
+ - **Arquitetura-alvo** — na stack-alvo, alinhada ao DNA quando o paradigma for preservado.
33
+ - **Cutover & Rollback** — passos, validação de paridade (rodar `.feature`), go/no-go, rollback.
34
+
35
+ ### 3. Gherkin de paridade (`parity/<módulo>.feature`)
36
+ Um `Scenario` por fluxo observável, derivado do **comportamento legado real**: `Given` → `When` →
37
+ `Then` idêntico ao legado. Inclua bordas/formatos (arredondamento, máscaras). É o contrato de aceite
38
+ da reimplementação na stack-alvo.
39
+
40
+ ### 4. Apresentar ao usuário
41
+ Resumo: paradigma, estratégia, nº de cenários de paridade, blocking gaps a resolver.
42
+
43
+ ## Regras de ouro
44
+ 1. **Paridade primeiro** — todo fluxo crítico vira `Scenario`.
45
+ 2. **Blocking gaps são bloqueantes** — 🔴 não resolvido é risco; trate ou registre.
46
+ 3. **Respeite o DNA** — arquitetura-alvo segue as convenções da casa.
47
+ 4. **Não invente comportamento** — cenário sem base no legado = regressão silenciosa.
48
+ 5. **Strangler quando possível** — incremental com parallel-run reduz risco.
49
+
50
+ ## Antipatterns
51
+ | AP | Antipattern | Por quê |
52
+ |---|---|---|
53
+ | AP-01 | Gherkin genérico sem base no legado | Não garante paridade |
54
+ | AP-02 | Ignorar blocking gaps (🔴) | Reimplementa sobre incerteza |
55
+ | AP-03 | Big-bang sem necessidade | Maximiza risco |
56
+ | AP-04 | Arquitetura-alvo desalinhada do DNA | Código vira ilha inconsistente |
57
+ | AP-05 | Reescrever os fatos determinísticos do CLI | Quebra a fonte de verdade |
58
+
59
+ ---
60
+
61
+ Skill MIT — parte do DARE Method. Fase 2 (brownfield). Pareia com o comando `dare migrate`.