@dewtech/dare-cli 3.2.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 (839) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +764 -762
  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/ralph-loop.test.js +107 -45
  6. package/dist/__tests__/dag-runner/ralph-loop.test.js.map +1 -1
  7. package/dist/__tests__/dag-runner/state-store.test.d.ts +2 -0
  8. package/dist/__tests__/dag-runner/state-store.test.d.ts.map +1 -0
  9. package/dist/__tests__/dag-runner/state-store.test.js +74 -0
  10. package/dist/__tests__/dag-runner/state-store.test.js.map +1 -0
  11. package/dist/__tests__/ide-command-parity.test.js +1 -0
  12. package/dist/__tests__/ide-command-parity.test.js.map +1 -1
  13. package/dist/__tests__/mcp-server/server.test.js +3 -16
  14. package/dist/__tests__/mcp-server/server.test.js.map +1 -1
  15. package/dist/__tests__/project-generator.test.d.ts +2 -0
  16. package/dist/__tests__/project-generator.test.d.ts.map +1 -0
  17. package/dist/__tests__/project-generator.test.js +56 -0
  18. package/dist/__tests__/project-generator.test.js.map +1 -0
  19. package/dist/__tests__/refine.test.js +49 -49
  20. package/dist/__tests__/reverse-collection.test.js +6 -6
  21. package/dist/__tests__/review.test.js +38 -38
  22. package/dist/__tests__/security-hardening.test.d.ts +2 -0
  23. package/dist/__tests__/security-hardening.test.d.ts.map +1 -0
  24. package/dist/__tests__/security-hardening.test.js +101 -0
  25. package/dist/__tests__/security-hardening.test.js.map +1 -0
  26. package/dist/__tests__/validate.test.js +65 -65
  27. package/dist/bin/dare.js +2 -0
  28. package/dist/bin/dare.js.map +1 -1
  29. package/dist/commands/__tests__/bench.spec.d.ts +2 -0
  30. package/dist/commands/__tests__/bench.spec.d.ts.map +1 -0
  31. package/dist/commands/__tests__/bench.spec.js +106 -0
  32. package/dist/commands/__tests__/bench.spec.js.map +1 -0
  33. package/dist/commands/__tests__/execute.best-of.spec.d.ts +2 -0
  34. package/dist/commands/__tests__/execute.best-of.spec.d.ts.map +1 -0
  35. package/dist/commands/__tests__/execute.best-of.spec.js +24 -0
  36. package/dist/commands/__tests__/execute.best-of.spec.js.map +1 -0
  37. package/dist/commands/__tests__/execute.telemetry.spec.d.ts +2 -0
  38. package/dist/commands/__tests__/execute.telemetry.spec.d.ts.map +1 -0
  39. package/dist/commands/__tests__/execute.telemetry.spec.js +93 -0
  40. package/dist/commands/__tests__/execute.telemetry.spec.js.map +1 -0
  41. package/dist/commands/__tests__/execute.verify.spec.d.ts +2 -0
  42. package/dist/commands/__tests__/execute.verify.spec.d.ts.map +1 -0
  43. package/dist/commands/__tests__/execute.verify.spec.js +150 -0
  44. package/dist/commands/__tests__/execute.verify.spec.js.map +1 -0
  45. package/dist/commands/__tests__/init-validation.test.d.ts +2 -0
  46. package/dist/commands/__tests__/init-validation.test.d.ts.map +1 -0
  47. package/dist/commands/__tests__/init-validation.test.js +81 -0
  48. package/dist/commands/__tests__/init-validation.test.js.map +1 -0
  49. package/dist/commands/__tests__/init.integration.spec.js +6 -4
  50. package/dist/commands/__tests__/init.integration.spec.js.map +1 -1
  51. package/dist/commands/__tests__/init.spec.d.ts +2 -0
  52. package/dist/commands/__tests__/init.spec.d.ts.map +1 -0
  53. package/dist/commands/__tests__/init.spec.js +88 -0
  54. package/dist/commands/__tests__/init.spec.js.map +1 -0
  55. package/dist/commands/bench.d.ts +10 -0
  56. package/dist/commands/bench.d.ts.map +1 -0
  57. package/dist/commands/bench.js +64 -0
  58. package/dist/commands/bench.js.map +1 -0
  59. package/dist/commands/blueprint.js +122 -122
  60. package/dist/commands/design.js +20 -20
  61. package/dist/commands/execute-verification.d.ts +51 -0
  62. package/dist/commands/execute-verification.d.ts.map +1 -0
  63. package/dist/commands/execute-verification.js +201 -0
  64. package/dist/commands/execute-verification.js.map +1 -0
  65. package/dist/commands/execute.d.ts.map +1 -1
  66. package/dist/commands/execute.js +139 -2
  67. package/dist/commands/execute.js.map +1 -1
  68. package/dist/commands/init-validation.d.ts +22 -0
  69. package/dist/commands/init-validation.d.ts.map +1 -0
  70. package/dist/commands/init-validation.js +54 -0
  71. package/dist/commands/init-validation.js.map +1 -0
  72. package/dist/commands/init.d.ts.map +1 -1
  73. package/dist/commands/init.js +26 -10
  74. package/dist/commands/init.js.map +1 -1
  75. package/dist/dag-runner/ralph-loop.d.ts +9 -9
  76. package/dist/dag-runner/ralph-loop.d.ts.map +1 -1
  77. package/dist/dag-runner/ralph-loop.js +89 -113
  78. package/dist/dag-runner/ralph-loop.js.map +1 -1
  79. package/dist/dag-runner/state-store.d.ts +14 -1
  80. package/dist/dag-runner/state-store.d.ts.map +1 -1
  81. package/dist/dag-runner/state-store.js +39 -8
  82. package/dist/dag-runner/state-store.js.map +1 -1
  83. package/dist/exec/npm-invoke.d.ts +8 -0
  84. package/dist/exec/npm-invoke.d.ts.map +1 -0
  85. package/dist/exec/npm-invoke.js +45 -0
  86. package/dist/exec/npm-invoke.js.map +1 -0
  87. package/dist/exec/safe-spawn.d.ts +21 -0
  88. package/dist/exec/safe-spawn.d.ts.map +1 -0
  89. package/dist/exec/safe-spawn.js +108 -0
  90. package/dist/exec/safe-spawn.js.map +1 -0
  91. package/dist/graphrag/graph-rag.js +24 -24
  92. package/dist/graphrag/types.d.ts +2 -2
  93. package/dist/graphrag/types.d.ts.map +1 -1
  94. package/dist/mcp-server/__tests__/auth.test.d.ts +2 -0
  95. package/dist/mcp-server/__tests__/auth.test.d.ts.map +1 -0
  96. package/dist/mcp-server/__tests__/auth.test.js +72 -0
  97. package/dist/mcp-server/__tests__/auth.test.js.map +1 -0
  98. package/dist/mcp-server/__tests__/boot-config.test.d.ts +2 -0
  99. package/dist/mcp-server/__tests__/boot-config.test.d.ts.map +1 -0
  100. package/dist/mcp-server/__tests__/boot-config.test.js +29 -0
  101. package/dist/mcp-server/__tests__/boot-config.test.js.map +1 -0
  102. package/dist/mcp-server/__tests__/error-sanitize.test.d.ts +2 -0
  103. package/dist/mcp-server/__tests__/error-sanitize.test.d.ts.map +1 -0
  104. package/dist/mcp-server/__tests__/error-sanitize.test.js +66 -0
  105. package/dist/mcp-server/__tests__/error-sanitize.test.js.map +1 -0
  106. package/dist/mcp-server/__tests__/path-confinement.test.d.ts +2 -0
  107. package/dist/mcp-server/__tests__/path-confinement.test.d.ts.map +1 -0
  108. package/dist/mcp-server/__tests__/path-confinement.test.js +135 -0
  109. package/dist/mcp-server/__tests__/path-confinement.test.js.map +1 -0
  110. package/dist/mcp-server/bin/server.js +18 -6
  111. package/dist/mcp-server/bin/server.js.map +1 -1
  112. package/dist/mcp-server/boot-config.d.ts +6 -0
  113. package/dist/mcp-server/boot-config.d.ts.map +1 -0
  114. package/dist/mcp-server/boot-config.js +17 -0
  115. package/dist/mcp-server/boot-config.js.map +1 -0
  116. package/dist/mcp-server/middleware/auth.d.ts +10 -0
  117. package/dist/mcp-server/middleware/auth.d.ts.map +1 -0
  118. package/dist/mcp-server/middleware/auth.js +44 -0
  119. package/dist/mcp-server/middleware/auth.js.map +1 -0
  120. package/dist/mcp-server/middleware/cors.d.ts +6 -0
  121. package/dist/mcp-server/middleware/cors.d.ts.map +1 -0
  122. package/dist/mcp-server/middleware/cors.js +30 -0
  123. package/dist/mcp-server/middleware/cors.js.map +1 -0
  124. package/dist/mcp-server/middleware/error-handler.d.ts +11 -0
  125. package/dist/mcp-server/middleware/error-handler.d.ts.map +1 -0
  126. package/dist/mcp-server/middleware/error-handler.js +14 -0
  127. package/dist/mcp-server/middleware/error-handler.js.map +1 -0
  128. package/dist/mcp-server/server.d.ts +7 -2
  129. package/dist/mcp-server/server.d.ts.map +1 -1
  130. package/dist/mcp-server/server.js +185 -105
  131. package/dist/mcp-server/server.js.map +1 -1
  132. package/dist/skills/registry-mock.json +109 -109
  133. package/dist/skills/tests/manifest.spec.js +20 -20
  134. package/dist/stacks/__tests__/dna-emitter.spec.js +6 -6
  135. package/dist/stacks/dna-emitter.d.ts.map +1 -1
  136. package/dist/stacks/dna-emitter.js +70 -79
  137. package/dist/stacks/dna-emitter.js.map +1 -1
  138. package/dist/stacks/ruby-rails-8/scaffold.js +15 -15
  139. package/dist/utils/UpdateApplier.d.ts.map +1 -1
  140. package/dist/utils/UpdateApplier.js +8 -0
  141. package/dist/utils/UpdateApplier.js.map +1 -1
  142. package/dist/utils/logger.d.ts +7 -0
  143. package/dist/utils/logger.d.ts.map +1 -0
  144. package/dist/utils/logger.js +23 -0
  145. package/dist/utils/logger.js.map +1 -0
  146. package/dist/utils/path-safety.d.ts +22 -0
  147. package/dist/utils/path-safety.d.ts.map +1 -0
  148. package/dist/utils/path-safety.js +83 -0
  149. package/dist/utils/path-safety.js.map +1 -0
  150. package/dist/utils/project-generator.d.ts.map +1 -1
  151. package/dist/utils/project-generator.js +256 -252
  152. package/dist/utils/project-generator.js.map +1 -1
  153. package/dist/utils/stack-bootstrap.js +373 -373
  154. package/dist/utils/stack-bootstrap.js.map +1 -1
  155. package/dist/utils/templates.js +394 -394
  156. package/dist/verification/__tests__/anti-tamper.test.d.ts +2 -0
  157. package/dist/verification/__tests__/anti-tamper.test.d.ts.map +1 -0
  158. package/dist/verification/__tests__/anti-tamper.test.js +73 -0
  159. package/dist/verification/__tests__/anti-tamper.test.js.map +1 -0
  160. package/dist/verification/__tests__/bench-fixtures.test.d.ts +2 -0
  161. package/dist/verification/__tests__/bench-fixtures.test.d.ts.map +1 -0
  162. package/dist/verification/__tests__/bench-fixtures.test.js +35 -0
  163. package/dist/verification/__tests__/bench-fixtures.test.js.map +1 -0
  164. package/dist/verification/__tests__/bench-harness.test.d.ts +2 -0
  165. package/dist/verification/__tests__/bench-harness.test.d.ts.map +1 -0
  166. package/dist/verification/__tests__/bench-harness.test.js +75 -0
  167. package/dist/verification/__tests__/bench-harness.test.js.map +1 -0
  168. package/dist/verification/__tests__/bench-report.test.d.ts +2 -0
  169. package/dist/verification/__tests__/bench-report.test.d.ts.map +1 -0
  170. package/dist/verification/__tests__/bench-report.test.js +73 -0
  171. package/dist/verification/__tests__/bench-report.test.js.map +1 -0
  172. package/dist/verification/__tests__/best-of-n-runner.test.d.ts +2 -0
  173. package/dist/verification/__tests__/best-of-n-runner.test.d.ts.map +1 -0
  174. package/dist/verification/__tests__/best-of-n-runner.test.js +94 -0
  175. package/dist/verification/__tests__/best-of-n-runner.test.js.map +1 -0
  176. package/dist/verification/__tests__/config.test.d.ts +2 -0
  177. package/dist/verification/__tests__/config.test.d.ts.map +1 -0
  178. package/dist/verification/__tests__/config.test.js +50 -0
  179. package/dist/verification/__tests__/config.test.js.map +1 -0
  180. package/dist/verification/__tests__/decay-policy.test.d.ts +2 -0
  181. package/dist/verification/__tests__/decay-policy.test.d.ts.map +1 -0
  182. package/dist/verification/__tests__/decay-policy.test.js +130 -0
  183. package/dist/verification/__tests__/decay-policy.test.js.map +1 -0
  184. package/dist/verification/__tests__/fail-to-pass.test.d.ts +2 -0
  185. package/dist/verification/__tests__/fail-to-pass.test.d.ts.map +1 -0
  186. package/dist/verification/__tests__/fail-to-pass.test.js +107 -0
  187. package/dist/verification/__tests__/fail-to-pass.test.js.map +1 -0
  188. package/dist/verification/__tests__/failure-signature.test.d.ts +2 -0
  189. package/dist/verification/__tests__/failure-signature.test.d.ts.map +1 -0
  190. package/dist/verification/__tests__/failure-signature.test.js +40 -0
  191. package/dist/verification/__tests__/failure-signature.test.js.map +1 -0
  192. package/dist/verification/__tests__/logger.test.d.ts +2 -0
  193. package/dist/verification/__tests__/logger.test.d.ts.map +1 -0
  194. package/dist/verification/__tests__/logger.test.js +23 -0
  195. package/dist/verification/__tests__/logger.test.js.map +1 -0
  196. package/dist/verification/__tests__/mutation-cargo-mutants.test.d.ts +2 -0
  197. package/dist/verification/__tests__/mutation-cargo-mutants.test.d.ts.map +1 -0
  198. package/dist/verification/__tests__/mutation-cargo-mutants.test.js +96 -0
  199. package/dist/verification/__tests__/mutation-cargo-mutants.test.js.map +1 -0
  200. package/dist/verification/__tests__/mutation-infection.test.d.ts +2 -0
  201. package/dist/verification/__tests__/mutation-infection.test.d.ts.map +1 -0
  202. package/dist/verification/__tests__/mutation-infection.test.js +101 -0
  203. package/dist/verification/__tests__/mutation-infection.test.js.map +1 -0
  204. package/dist/verification/__tests__/mutation-mutmut.test.d.ts +2 -0
  205. package/dist/verification/__tests__/mutation-mutmut.test.d.ts.map +1 -0
  206. package/dist/verification/__tests__/mutation-mutmut.test.js +102 -0
  207. package/dist/verification/__tests__/mutation-mutmut.test.js.map +1 -0
  208. package/dist/verification/__tests__/mutation-registry.test.d.ts +2 -0
  209. package/dist/verification/__tests__/mutation-registry.test.d.ts.map +1 -0
  210. package/dist/verification/__tests__/mutation-registry.test.js +28 -0
  211. package/dist/verification/__tests__/mutation-registry.test.js.map +1 -0
  212. package/dist/verification/__tests__/mutation-stryker.test.d.ts +2 -0
  213. package/dist/verification/__tests__/mutation-stryker.test.d.ts.map +1 -0
  214. package/dist/verification/__tests__/mutation-stryker.test.js +88 -0
  215. package/dist/verification/__tests__/mutation-stryker.test.js.map +1 -0
  216. package/dist/verification/__tests__/no-shell-true.test.d.ts +2 -0
  217. package/dist/verification/__tests__/no-shell-true.test.d.ts.map +1 -0
  218. package/dist/verification/__tests__/no-shell-true.test.js +43 -0
  219. package/dist/verification/__tests__/no-shell-true.test.js.map +1 -0
  220. package/dist/verification/__tests__/path-safety.test.d.ts +2 -0
  221. package/dist/verification/__tests__/path-safety.test.d.ts.map +1 -0
  222. package/dist/verification/__tests__/path-safety.test.js +59 -0
  223. package/dist/verification/__tests__/path-safety.test.js.map +1 -0
  224. package/dist/verification/__tests__/prerank.test.d.ts +2 -0
  225. package/dist/verification/__tests__/prerank.test.d.ts.map +1 -0
  226. package/dist/verification/__tests__/prerank.test.js +44 -0
  227. package/dist/verification/__tests__/prerank.test.js.map +1 -0
  228. package/dist/verification/__tests__/runner.test.d.ts +2 -0
  229. package/dist/verification/__tests__/runner.test.d.ts.map +1 -0
  230. package/dist/verification/__tests__/runner.test.js +200 -0
  231. package/dist/verification/__tests__/runner.test.js.map +1 -0
  232. package/dist/verification/__tests__/safe-spawn.test.d.ts +2 -0
  233. package/dist/verification/__tests__/safe-spawn.test.d.ts.map +1 -0
  234. package/dist/verification/__tests__/safe-spawn.test.js +36 -0
  235. package/dist/verification/__tests__/safe-spawn.test.js.map +1 -0
  236. package/dist/verification/__tests__/security.test.d.ts +2 -0
  237. package/dist/verification/__tests__/security.test.d.ts.map +1 -0
  238. package/dist/verification/__tests__/security.test.js +79 -0
  239. package/dist/verification/__tests__/security.test.js.map +1 -0
  240. package/dist/verification/__tests__/selector-pareto.test.d.ts +2 -0
  241. package/dist/verification/__tests__/selector-pareto.test.d.ts.map +1 -0
  242. package/dist/verification/__tests__/selector-pareto.test.js +77 -0
  243. package/dist/verification/__tests__/selector-pareto.test.js.map +1 -0
  244. package/dist/verification/__tests__/telemetry.test.d.ts +2 -0
  245. package/dist/verification/__tests__/telemetry.test.d.ts.map +1 -0
  246. package/dist/verification/__tests__/telemetry.test.js +116 -0
  247. package/dist/verification/__tests__/telemetry.test.js.map +1 -0
  248. package/dist/verification/__tests__/type-check.test.d.ts +2 -0
  249. package/dist/verification/__tests__/type-check.test.d.ts.map +1 -0
  250. package/dist/verification/__tests__/type-check.test.js +52 -0
  251. package/dist/verification/__tests__/type-check.test.js.map +1 -0
  252. package/dist/verification/__tests__/worktree.test.d.ts +2 -0
  253. package/dist/verification/__tests__/worktree.test.d.ts.map +1 -0
  254. package/dist/verification/__tests__/worktree.test.js +41 -0
  255. package/dist/verification/__tests__/worktree.test.js.map +1 -0
  256. package/dist/verification/bench/fixtures.d.ts +11 -0
  257. package/dist/verification/bench/fixtures.d.ts.map +1 -0
  258. package/dist/verification/bench/fixtures.js +66 -0
  259. package/dist/verification/bench/fixtures.js.map +1 -0
  260. package/dist/verification/bench/harness.d.ts +19 -0
  261. package/dist/verification/bench/harness.d.ts.map +1 -0
  262. package/dist/verification/bench/harness.js +138 -0
  263. package/dist/verification/bench/harness.js.map +1 -0
  264. package/dist/verification/bench/report.d.ts +53 -0
  265. package/dist/verification/bench/report.d.ts.map +1 -0
  266. package/dist/verification/bench/report.js +47 -0
  267. package/dist/verification/bench/report.js.map +1 -0
  268. package/dist/verification/best-of-n/runner.d.ts +29 -0
  269. package/dist/verification/best-of-n/runner.d.ts.map +1 -0
  270. package/dist/verification/best-of-n/runner.js +76 -0
  271. package/dist/verification/best-of-n/runner.js.map +1 -0
  272. package/dist/verification/best-of-n/selector/pareto.d.ts +10 -0
  273. package/dist/verification/best-of-n/selector/pareto.d.ts.map +1 -0
  274. package/dist/verification/best-of-n/selector/pareto.js +65 -0
  275. package/dist/verification/best-of-n/selector/pareto.js.map +1 -0
  276. package/dist/verification/best-of-n/selector/prerank.d.ts +23 -0
  277. package/dist/verification/best-of-n/selector/prerank.d.ts.map +1 -0
  278. package/dist/verification/best-of-n/selector/prerank.js +32 -0
  279. package/dist/verification/best-of-n/selector/prerank.js.map +1 -0
  280. package/dist/verification/best-of-n/worktree.d.ts +9 -0
  281. package/dist/verification/best-of-n/worktree.d.ts.map +1 -0
  282. package/dist/verification/best-of-n/worktree.js +100 -0
  283. package/dist/verification/best-of-n/worktree.js.map +1 -0
  284. package/dist/verification/config.d.ts +24 -0
  285. package/dist/verification/config.d.ts.map +1 -0
  286. package/dist/verification/config.js +168 -0
  287. package/dist/verification/config.js.map +1 -0
  288. package/dist/verification/decay/policy.d.ts +16 -0
  289. package/dist/verification/decay/policy.d.ts.map +1 -0
  290. package/dist/verification/decay/policy.js +64 -0
  291. package/dist/verification/decay/policy.js.map +1 -0
  292. package/dist/verification/decay/signature.d.ts +6 -0
  293. package/dist/verification/decay/signature.d.ts.map +1 -0
  294. package/dist/verification/decay/signature.js +18 -0
  295. package/dist/verification/decay/signature.js.map +1 -0
  296. package/dist/verification/gates/anti-tamper.d.ts +16 -0
  297. package/dist/verification/gates/anti-tamper.d.ts.map +1 -0
  298. package/dist/verification/gates/anti-tamper.js +142 -0
  299. package/dist/verification/gates/anti-tamper.js.map +1 -0
  300. package/dist/verification/gates/fail-to-pass.d.ts +39 -0
  301. package/dist/verification/gates/fail-to-pass.d.ts.map +1 -0
  302. package/dist/verification/gates/fail-to-pass.js +173 -0
  303. package/dist/verification/gates/fail-to-pass.js.map +1 -0
  304. package/dist/verification/gates/mutation/adapter.d.ts +34 -0
  305. package/dist/verification/gates/mutation/adapter.d.ts.map +1 -0
  306. package/dist/verification/gates/mutation/adapter.js +22 -0
  307. package/dist/verification/gates/mutation/adapter.js.map +1 -0
  308. package/dist/verification/gates/mutation/cargo-mutants.d.ts +28 -0
  309. package/dist/verification/gates/mutation/cargo-mutants.d.ts.map +1 -0
  310. package/dist/verification/gates/mutation/cargo-mutants.js +170 -0
  311. package/dist/verification/gates/mutation/cargo-mutants.js.map +1 -0
  312. package/dist/verification/gates/mutation/infection.d.ts +28 -0
  313. package/dist/verification/gates/mutation/infection.d.ts.map +1 -0
  314. package/dist/verification/gates/mutation/infection.js +149 -0
  315. package/dist/verification/gates/mutation/infection.js.map +1 -0
  316. package/dist/verification/gates/mutation/mutmut.d.ts +23 -0
  317. package/dist/verification/gates/mutation/mutmut.d.ts.map +1 -0
  318. package/dist/verification/gates/mutation/mutmut.js +148 -0
  319. package/dist/verification/gates/mutation/mutmut.js.map +1 -0
  320. package/dist/verification/gates/mutation/stryker.d.ts +19 -0
  321. package/dist/verification/gates/mutation/stryker.d.ts.map +1 -0
  322. package/dist/verification/gates/mutation/stryker.js +103 -0
  323. package/dist/verification/gates/mutation/stryker.js.map +1 -0
  324. package/dist/verification/gates/type-check.d.ts +11 -0
  325. package/dist/verification/gates/type-check.d.ts.map +1 -0
  326. package/dist/verification/gates/type-check.js +84 -0
  327. package/dist/verification/gates/type-check.js.map +1 -0
  328. package/dist/verification/registry.d.ts +6 -0
  329. package/dist/verification/registry.d.ts.map +1 -0
  330. package/dist/verification/registry.js +49 -0
  331. package/dist/verification/registry.js.map +1 -0
  332. package/dist/verification/runner.d.ts +27 -0
  333. package/dist/verification/runner.d.ts.map +1 -0
  334. package/dist/verification/runner.js +173 -0
  335. package/dist/verification/runner.js.map +1 -0
  336. package/dist/verification/telemetry.d.ts +18 -0
  337. package/dist/verification/telemetry.d.ts.map +1 -0
  338. package/dist/verification/telemetry.js +71 -0
  339. package/dist/verification/telemetry.js.map +1 -0
  340. package/dist/verification/types.d.ts +89 -0
  341. package/dist/verification/types.d.ts.map +1 -0
  342. package/dist/verification/types.js +3 -0
  343. package/dist/verification/types.js.map +1 -0
  344. package/package.json +96 -91
  345. package/templates/DARE-dag-example.yaml +280 -280
  346. package/templates/UPDATE-MANIFEST.json +68 -48
  347. package/templates/backend/node-nestjs/.env.example +9 -9
  348. package/templates/backend/node-nestjs/nest-cli.json +8 -8
  349. package/templates/backend/node-nestjs/package.json +50 -50
  350. package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
  351. package/templates/backend/node-nestjs/src/app.module.ts +15 -15
  352. package/templates/backend/node-nestjs/src/app.service.ts +8 -8
  353. package/templates/backend/node-nestjs/src/main.ts +24 -24
  354. package/templates/backend/node-nestjs/tsconfig.json +21 -21
  355. package/templates/backend/php-laravel/.env.example +22 -22
  356. package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
  357. package/templates/backend/php-laravel/composer.json +40 -40
  358. package/templates/backend/python-fastapi/.env.example +4 -4
  359. package/templates/backend/python-fastapi/app/api/router.py +8 -8
  360. package/templates/backend/python-fastapi/app/core/config.py +20 -20
  361. package/templates/backend/python-fastapi/main.py +35 -35
  362. package/templates/backend/python-fastapi/requirements.txt +13 -13
  363. package/templates/backend/rust-axum/.env.example +3 -3
  364. package/templates/backend/rust-axum/Cargo.toml +23 -23
  365. package/templates/backend/rust-axum/src/errors.rs +30 -30
  366. package/templates/backend/rust-axum/src/main.rs +32 -32
  367. package/templates/backend/rust-axum/src/routes.rs +6 -6
  368. package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
  369. package/templates/frontend/leptos-csr/Cargo.toml +16 -16
  370. package/templates/frontend/leptos-csr/Trunk.toml +10 -10
  371. package/templates/frontend/leptos-csr/index.html +11 -11
  372. package/templates/frontend/leptos-csr/src/lib.rs +20 -20
  373. package/templates/frontend/leptos-csr/style/main.scss +19 -19
  374. package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
  375. package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
  376. package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
  377. package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
  378. package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
  379. package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
  380. package/templates/frontend/react/index.html +12 -12
  381. package/templates/frontend/react/package.json +35 -35
  382. package/templates/frontend/react/src/App.tsx +25 -25
  383. package/templates/frontend/react/src/main.tsx +9 -9
  384. package/templates/frontend/vue/package.json +32 -32
  385. package/templates/frontend/vue/src/App.vue +7 -7
  386. package/templates/frontend/vue/src/main.ts +10 -10
  387. package/templates/frontend/vue/src/router/index.ts +14 -14
  388. package/templates/frontend/vue/src/views/HomeView.vue +6 -6
  389. package/templates/hooks/pre-commit-dare-validate +24 -24
  390. package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -152
  391. package/templates/ide/antigravity/.agents/skills/dare-bench/SKILL.md +21 -0
  392. package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +368 -368
  393. package/templates/ide/antigravity/.agents/skills/dare-bootstrap/SKILL.md +32 -32
  394. package/templates/ide/antigravity/.agents/skills/dare-bugfix-design/SKILL.md +76 -76
  395. package/templates/ide/antigravity/.agents/skills/dare-dag/SKILL.md +32 -32
  396. package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -154
  397. package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -130
  398. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
  399. package/templates/ide/antigravity/.agents/skills/dare-design/SKILL.md +180 -180
  400. package/templates/ide/antigravity/.agents/skills/dare-discover/SKILL.md +33 -33
  401. package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -63
  402. package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -315
  403. package/templates/ide/antigravity/.agents/skills/dare-execute/SKILL.md +264 -264
  404. package/templates/ide/antigravity/.agents/skills/dare-feature-design/SKILL.md +74 -74
  405. package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -192
  406. package/templates/ide/antigravity/.agents/skills/dare-graph/SKILL.md +35 -35
  407. package/templates/ide/antigravity/.agents/skills/dare-info/SKILL.md +31 -31
  408. package/templates/ide/antigravity/.agents/skills/dare-init/SKILL.md +35 -35
  409. package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -337
  410. package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -166
  411. package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -217
  412. package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -61
  413. package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -187
  414. package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -217
  415. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
  416. package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -108
  417. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
  418. package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -263
  419. package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
  420. package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -274
  421. package/templates/ide/antigravity/.agents/skills/dare-skill/SKILL.md +35 -35
  422. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
  423. package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -188
  424. package/templates/ide/antigravity/.agents/skills/dare-update/SKILL.md +33 -33
  425. package/templates/ide/antigravity/.agents/skills/dare-validate/SKILL.md +33 -33
  426. package/templates/ide/antigravity/.agents/skills/dare-welcome/SKILL.md +30 -30
  427. package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -343
  428. package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -377
  429. package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -382
  430. package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -326
  431. package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -393
  432. package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
  433. package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
  434. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
  435. package/templates/ide/antigravity/templates/TASKS-template.md +26 -26
  436. package/templates/ide/antigravity/templates/TELEMETRY-template.md +125 -125
  437. package/templates/ide/claude/.claude/commands/dare-ax.md +131 -131
  438. package/templates/ide/claude/.claude/commands/dare-bench.md +18 -0
  439. package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
  440. package/templates/ide/claude/.claude/commands/dare-bootstrap.md +27 -27
  441. package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -119
  442. package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
  443. package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
  444. package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -117
  445. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
  446. package/templates/ide/claude/.claude/commands/dare-dag.md +27 -27
  447. package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
  448. package/templates/ide/claude/.claude/commands/dare-discover.md +28 -28
  449. package/templates/ide/claude/.claude/commands/dare-dna.md +75 -75
  450. package/templates/ide/claude/.claude/commands/dare-docker.md +207 -207
  451. package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
  452. package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -147
  453. package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -149
  454. package/templates/ide/claude/.claude/commands/dare-graph.md +30 -30
  455. package/templates/ide/claude/.claude/commands/dare-info.md +26 -26
  456. package/templates/ide/claude/.claude/commands/dare-init.md +30 -30
  457. package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -211
  458. package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -124
  459. package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -148
  460. package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -72
  461. package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -166
  462. package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -159
  463. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
  464. package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -139
  465. package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
  466. package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
  467. package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
  468. package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
  469. package/templates/ide/claude/.claude/commands/dare-skill.md +30 -30
  470. package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
  471. package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -132
  472. package/templates/ide/claude/.claude/commands/dare-update.md +28 -28
  473. package/templates/ide/claude/.claude/commands/dare-validate.md +28 -28
  474. package/templates/ide/claude/.claude/commands/dare-welcome.md +25 -25
  475. package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -205
  476. package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -232
  477. package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -228
  478. package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -210
  479. package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -236
  480. package/templates/ide/claude/.claude/settings.example.json +35 -35
  481. package/templates/ide/claude/CLAUDE.md +146 -146
  482. package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
  483. package/templates/ide/claude/templates/DESIGN-template.md +129 -129
  484. package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
  485. package/templates/ide/claude/templates/TASKS-template.md +26 -26
  486. package/templates/ide/claude/templates/TELEMETRY-template.md +125 -125
  487. package/templates/ide/cursor/.cursor/commands/dare-bench.md +18 -0
  488. package/templates/ide/cursor/.cursor/commands/dare-blueprint.md +86 -86
  489. package/templates/ide/cursor/.cursor/commands/dare-bootstrap.md +27 -27
  490. package/templates/ide/cursor/.cursor/commands/dare-bugfix-design.md +64 -64
  491. package/templates/ide/cursor/.cursor/commands/dare-dag-run.md +110 -110
  492. package/templates/ide/cursor/.cursor/commands/dare-dag-viz.md +139 -139
  493. package/templates/ide/cursor/.cursor/commands/dare-dag.md +27 -27
  494. package/templates/ide/cursor/.cursor/commands/dare-design.md +35 -35
  495. package/templates/ide/cursor/.cursor/commands/dare-discover.md +28 -28
  496. package/templates/ide/cursor/.cursor/commands/dare-dna.md +75 -75
  497. package/templates/ide/cursor/.cursor/commands/dare-docker-compose.md +18 -18
  498. package/templates/ide/cursor/.cursor/commands/dare-dockerfile.md +17 -17
  499. package/templates/ide/cursor/.cursor/commands/dare-execute.md +19 -19
  500. package/templates/ide/cursor/.cursor/commands/dare-feature-design.md +64 -64
  501. package/templates/ide/cursor/.cursor/commands/dare-graph.md +30 -30
  502. package/templates/ide/cursor/.cursor/commands/dare-info.md +26 -26
  503. package/templates/ide/cursor/.cursor/commands/dare-init.md +30 -30
  504. package/templates/ide/cursor/.cursor/commands/dare-migrate.md +72 -72
  505. package/templates/ide/cursor/.cursor/commands/dare-refine.md +107 -107
  506. package/templates/ide/cursor/.cursor/commands/dare-reverse.md +139 -139
  507. package/templates/ide/cursor/.cursor/commands/dare-review.md +91 -91
  508. package/templates/ide/cursor/.cursor/commands/dare-skill.md +30 -30
  509. package/templates/ide/cursor/.cursor/commands/dare-tasks.md +184 -184
  510. package/templates/ide/cursor/.cursor/commands/dare-telemetry.md +42 -42
  511. package/templates/ide/cursor/.cursor/commands/dare-update.md +28 -28
  512. package/templates/ide/cursor/.cursor/commands/dare-validate.md +28 -28
  513. package/templates/ide/cursor/.cursor/commands/dare-welcome.md +25 -25
  514. package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -263
  515. package/templates/ide/cursor/.cursor/rules/skill-bugfix-design.mdc +51 -51
  516. package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -173
  517. package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -134
  518. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
  519. package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -63
  520. package/templates/ide/cursor/.cursor/rules/skill-docker.mdc +33 -33
  521. package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -352
  522. package/templates/ide/cursor/.cursor/rules/skill-feature-design.mdc +43 -43
  523. package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -244
  524. package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -371
  525. package/templates/ide/cursor/.cursor/rules/skill-laravel-api.mdc +44 -44
  526. package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -266
  527. package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -295
  528. package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -367
  529. package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -58
  530. package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -346
  531. package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -248
  532. package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -400
  533. package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -262
  534. package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -107
  535. package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -281
  536. package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
  537. package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
  538. package/templates/ide/cursor/.cursor/rules/skill-telemetry.mdc +156 -156
  539. package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
  540. package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
  541. package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
  542. package/templates/ide/cursor/templates/TASKS-template.md +26 -26
  543. package/templates/ide/cursor/templates/TELEMETRY-template.md +125 -125
  544. package/templates/shared/docker-compose.yml +41 -41
  545. package/templates/stacks/go-gin/.dare/skills.yml +11 -11
  546. package/templates/stacks/go-gin/.env.example +24 -24
  547. package/templates/stacks/go-gin/.github/workflows/dare-ci.yml +42 -42
  548. package/templates/stacks/go-gin/README.md.tpl +38 -38
  549. package/templates/stacks/go-gin/cmd/server/main.go.tpl +78 -78
  550. package/templates/stacks/go-gin/db/migrations/0001_create_users.down.sql +2 -2
  551. package/templates/stacks/go-gin/db/migrations/0001_create_users.up.sql +12 -12
  552. package/templates/stacks/go-gin/db/queries/users.sql +23 -23
  553. package/templates/stacks/go-gin/gitignore +7 -7
  554. package/templates/stacks/go-gin/go.mod.tpl +17 -17
  555. package/templates/stacks/go-gin/internal/config/config.go +41 -41
  556. package/templates/stacks/go-gin/internal/db/postgres.go.tpl +25 -25
  557. package/templates/stacks/go-gin/internal/handler/auth_handler.go.tpl +72 -72
  558. package/templates/stacks/go-gin/internal/handler/users_handler.go.tpl +72 -72
  559. package/templates/stacks/go-gin/internal/handler/ws_handler.go +37 -37
  560. package/templates/stacks/go-gin/internal/llm/dummy.go +14 -14
  561. package/templates/stacks/go-gin/internal/llm/provider.go +8 -8
  562. package/templates/stacks/go-gin/internal/middleware/jwt.go.tpl +58 -58
  563. package/templates/stacks/go-gin/internal/middleware/rate_limit.go +55 -55
  564. package/templates/stacks/go-gin/internal/model/user.go +17 -17
  565. package/templates/stacks/go-gin/internal/repository/users_repository.go.tpl +79 -79
  566. package/templates/stacks/go-gin/internal/service/auth_service.go.tpl +55 -55
  567. package/templates/stacks/go-gin/internal/service/users_service.go.tpl +53 -53
  568. package/templates/stacks/go-gin/llms.txt.tpl +54 -54
  569. package/templates/stacks/go-gin/openapi.json.tpl +46 -46
  570. package/templates/stacks/go-gin/sqlc.yaml +14 -14
  571. package/templates/stacks/go-gin/tests/smoke_test.go.tpl +22 -22
  572. package/templates/stacks/go-stdlib/.dare/skills.yml +11 -11
  573. package/templates/stacks/go-stdlib/.env.example +24 -24
  574. package/templates/stacks/go-stdlib/.github/workflows/dare-ci.yml +42 -42
  575. package/templates/stacks/go-stdlib/README.md.tpl +41 -41
  576. package/templates/stacks/go-stdlib/cmd/server/main.go.tpl +82 -82
  577. package/templates/stacks/go-stdlib/db/migrations/0001_create_users.down.sql +2 -2
  578. package/templates/stacks/go-stdlib/db/migrations/0001_create_users.up.sql +12 -12
  579. package/templates/stacks/go-stdlib/db/queries/users.sql +23 -23
  580. package/templates/stacks/go-stdlib/gitignore +6 -6
  581. package/templates/stacks/go-stdlib/go.mod.tpl +15 -15
  582. package/templates/stacks/go-stdlib/internal/config/config.go +41 -41
  583. package/templates/stacks/go-stdlib/internal/db/postgres.go.tpl +24 -24
  584. package/templates/stacks/go-stdlib/internal/handler/auth_handler.go.tpl +71 -71
  585. package/templates/stacks/go-stdlib/internal/handler/users_handler.go.tpl +84 -84
  586. package/templates/stacks/go-stdlib/internal/handler/ws_handler.go +36 -36
  587. package/templates/stacks/go-stdlib/internal/httpx/json.go +32 -32
  588. package/templates/stacks/go-stdlib/internal/llm/dummy.go +14 -14
  589. package/templates/stacks/go-stdlib/internal/llm/provider.go +8 -8
  590. package/templates/stacks/go-stdlib/internal/middleware/chain.go +21 -21
  591. package/templates/stacks/go-stdlib/internal/middleware/cors.go +27 -27
  592. package/templates/stacks/go-stdlib/internal/middleware/jwt.go.tpl +51 -51
  593. package/templates/stacks/go-stdlib/internal/middleware/rate_limit.go +81 -81
  594. package/templates/stacks/go-stdlib/internal/model/user.go +17 -17
  595. package/templates/stacks/go-stdlib/internal/repository/users_repository.go.tpl +75 -75
  596. package/templates/stacks/go-stdlib/internal/service/auth_service.go.tpl +55 -55
  597. package/templates/stacks/go-stdlib/internal/service/users_service.go.tpl +53 -53
  598. package/templates/stacks/go-stdlib/llms.txt.tpl +60 -60
  599. package/templates/stacks/go-stdlib/openapi.json.tpl +46 -46
  600. package/templates/stacks/go-stdlib/sqlc.yaml +14 -14
  601. package/templates/stacks/go-stdlib/tests/smoke_test.go.tpl +45 -45
  602. package/templates/stacks/mcp-go/.dare/skills.yml +8 -8
  603. package/templates/stacks/mcp-go/.env.example +14 -14
  604. package/templates/stacks/mcp-go/.github/workflows/dare-ci.yml +42 -42
  605. package/templates/stacks/mcp-go/README.md.tpl +50 -50
  606. package/templates/stacks/mcp-go/cmd/server/main.go.tpl +62 -62
  607. package/templates/stacks/mcp-go/gitignore +6 -6
  608. package/templates/stacks/mcp-go/go.mod.tpl +9 -9
  609. package/templates/stacks/mcp-go/internal/prompts/summarize.go +9 -9
  610. package/templates/stacks/mcp-go/internal/server/server.go.tpl +80 -80
  611. package/templates/stacks/mcp-go/internal/tools/echo.go +15 -15
  612. package/templates/stacks/mcp-go/internal/transports/http.go.tpl +21 -21
  613. package/templates/stacks/mcp-go/internal/transports/sse.go.tpl +17 -17
  614. package/templates/stacks/mcp-go/internal/transports/stdio.go.tpl +14 -14
  615. package/templates/stacks/mcp-go/llms.txt.tpl +60 -60
  616. package/templates/stacks/mcp-go/openapi.json.tpl +31 -31
  617. package/templates/stacks/mcp-go/tests/echo_test.go.tpl +37 -37
  618. package/templates/stacks/mcp-node-ts/.dare/skills.yml +8 -8
  619. package/templates/stacks/mcp-node-ts/.env.example +16 -16
  620. package/templates/stacks/mcp-node-ts/.github/workflows/dare-ci.yml +54 -54
  621. package/templates/stacks/mcp-node-ts/README.md.hbs +49 -49
  622. package/templates/stacks/mcp-node-ts/gitignore +7 -7
  623. package/templates/stacks/mcp-node-ts/llms.txt.hbs +61 -61
  624. package/templates/stacks/mcp-node-ts/openapi.json.hbs +39 -39
  625. package/templates/stacks/mcp-node-ts/package.json.hbs +35 -35
  626. package/templates/stacks/mcp-node-ts/src/cli.ts.hbs +71 -71
  627. package/templates/stacks/mcp-node-ts/src/prompts/index.ts +36 -36
  628. package/templates/stacks/mcp-node-ts/src/server.ts.hbs +45 -45
  629. package/templates/stacks/mcp-node-ts/src/tools/echo.ts +23 -23
  630. package/templates/stacks/mcp-node-ts/src/tools/index.ts +18 -18
  631. package/templates/stacks/mcp-node-ts/src/transports/http.ts +68 -68
  632. package/templates/stacks/mcp-node-ts/src/transports/sse.ts +58 -58
  633. package/templates/stacks/mcp-node-ts/src/transports/stdio.ts +5 -5
  634. package/templates/stacks/mcp-node-ts/tests/echo.test.ts +50 -50
  635. package/templates/stacks/mcp-node-ts/tsconfig.json +17 -17
  636. package/templates/stacks/mcp-python/.dare/skills.yml +8 -8
  637. package/templates/stacks/mcp-python/.env.example +14 -14
  638. package/templates/stacks/mcp-python/.github/workflows/dare-ci.yml +42 -42
  639. package/templates/stacks/mcp-python/README.md.j2 +49 -49
  640. package/templates/stacks/mcp-python/gitignore +12 -12
  641. package/templates/stacks/mcp-python/llms.txt.j2 +56 -56
  642. package/templates/stacks/mcp-python/openapi.json.j2 +33 -33
  643. package/templates/stacks/mcp-python/pyproject.toml.j2 +37 -37
  644. package/templates/stacks/mcp-python/src/cli.py.j2 +68 -68
  645. package/templates/stacks/mcp-python/src/prompts/summarize.py +10 -10
  646. package/templates/stacks/mcp-python/src/server.py.j2 +28 -28
  647. package/templates/stacks/mcp-python/src/tools/echo.py +12 -12
  648. package/templates/stacks/mcp-python/src/transports/http.py +12 -12
  649. package/templates/stacks/mcp-python/src/transports/sse.py +13 -13
  650. package/templates/stacks/mcp-python/src/transports/stdio.py +6 -6
  651. package/templates/stacks/mcp-python/tests/test_echo.py +28 -28
  652. package/templates/stacks/mcp-rust/.dare/skills.yml +8 -8
  653. package/templates/stacks/mcp-rust/.env.example +14 -14
  654. package/templates/stacks/mcp-rust/.github/workflows/dare-ci.yml +38 -38
  655. package/templates/stacks/mcp-rust/Cargo.toml.tera +35 -35
  656. package/templates/stacks/mcp-rust/README.md.tera +50 -50
  657. package/templates/stacks/mcp-rust/gitignore +5 -5
  658. package/templates/stacks/mcp-rust/llms.txt.tera +60 -60
  659. package/templates/stacks/mcp-rust/openapi.json.tera +31 -31
  660. package/templates/stacks/mcp-rust/src/cli.rs.tera +33 -33
  661. package/templates/stacks/mcp-rust/src/lib.rs +6 -6
  662. package/templates/stacks/mcp-rust/src/main.rs.tera +30 -30
  663. package/templates/stacks/mcp-rust/src/prompts/mod.rs +1 -1
  664. package/templates/stacks/mcp-rust/src/prompts/summarize.rs +5 -5
  665. package/templates/stacks/mcp-rust/src/server.rs.tera +38 -38
  666. package/templates/stacks/mcp-rust/src/tools/echo.rs +18 -18
  667. package/templates/stacks/mcp-rust/src/tools/mod.rs +22 -22
  668. package/templates/stacks/mcp-rust/src/transports/http.rs +27 -27
  669. package/templates/stacks/mcp-rust/src/transports/mod.rs +3 -3
  670. package/templates/stacks/mcp-rust/src/transports/sse.rs +33 -33
  671. package/templates/stacks/mcp-rust/src/transports/stdio.rs +14 -14
  672. package/templates/stacks/mcp-rust/tests/echo_test.rs.tera +27 -27
  673. package/templates/stacks/node-nestjs/.dare/skills.yml +11 -11
  674. package/templates/stacks/node-nestjs/.env.example +21 -21
  675. package/templates/stacks/node-nestjs/.github/workflows/dare-ci.yml +54 -54
  676. package/templates/stacks/node-nestjs/README.md.hbs +35 -35
  677. package/templates/stacks/node-nestjs/gitignore +7 -7
  678. package/templates/stacks/node-nestjs/llms.txt.hbs +47 -47
  679. package/templates/stacks/node-nestjs/nest-cli.json +16 -16
  680. package/templates/stacks/node-nestjs/openapi.json.hbs +75 -75
  681. package/templates/stacks/node-nestjs/package.json.hbs +57 -57
  682. package/templates/stacks/node-nestjs/prisma/schema.prisma +25 -25
  683. package/templates/stacks/node-nestjs/prisma/seed.ts.hbs +25 -25
  684. package/templates/stacks/node-nestjs/src/app.module.ts +39 -39
  685. package/templates/stacks/node-nestjs/src/auth/auth.controller.ts +29 -29
  686. package/templates/stacks/node-nestjs/src/auth/auth.module.ts +25 -25
  687. package/templates/stacks/node-nestjs/src/auth/auth.service.ts +36 -36
  688. package/templates/stacks/node-nestjs/src/auth/dto/login-response.dto.ts +9 -9
  689. package/templates/stacks/node-nestjs/src/auth/dto/login.dto.ts +17 -17
  690. package/templates/stacks/node-nestjs/src/auth/jwt.strategy.ts +25 -25
  691. package/templates/stacks/node-nestjs/src/common/filters/problem-details.filter.ts +38 -38
  692. package/templates/stacks/node-nestjs/src/common/interceptors/json-response.interceptor.ts +13 -13
  693. package/templates/stacks/node-nestjs/src/main.ts.hbs +44 -44
  694. package/templates/stacks/node-nestjs/src/prisma/prisma.module.ts +9 -9
  695. package/templates/stacks/node-nestjs/src/prisma/prisma.service.ts +9 -9
  696. package/templates/stacks/node-nestjs/src/users/dto/create-user.dto.ts +22 -22
  697. package/templates/stacks/node-nestjs/src/users/dto/user.dto.ts +15 -15
  698. package/templates/stacks/node-nestjs/src/users/users.controller.ts +41 -41
  699. package/templates/stacks/node-nestjs/src/users/users.module.ts +11 -11
  700. package/templates/stacks/node-nestjs/src/users/users.repository.ts +38 -38
  701. package/templates/stacks/node-nestjs/src/users/users.service.ts +38 -38
  702. package/templates/stacks/node-nestjs/tsconfig.build.json +4 -4
  703. package/templates/stacks/node-nestjs/tsconfig.json +28 -28
  704. package/templates/stacks/php-laravel/.dare/skills.yml +11 -11
  705. package/templates/stacks/php-laravel/.env.example +41 -41
  706. package/templates/stacks/php-laravel/.github/workflows/dare-ci.yml +43 -43
  707. package/templates/stacks/php-laravel/README.md.hbs +36 -36
  708. package/templates/stacks/php-laravel/app/Http/Controllers/Api/AuthController.php +36 -36
  709. package/templates/stacks/php-laravel/app/Http/Controllers/Api/UsersController.php +33 -33
  710. package/templates/stacks/php-laravel/app/Http/Requests/CreateUserRequest.php +26 -26
  711. package/templates/stacks/php-laravel/app/Http/Requests/LoginRequest.php +34 -34
  712. package/templates/stacks/php-laravel/app/Llm/Contracts/LlmProvider.php +12 -12
  713. package/templates/stacks/php-laravel/app/Llm/Providers/DummyProvider.php +13 -13
  714. package/templates/stacks/php-laravel/app/Llm/Providers/OpenAiProvider.php +33 -33
  715. package/templates/stacks/php-laravel/app/Models/User.php +44 -44
  716. package/templates/stacks/php-laravel/app/Repositories/UsersRepository.php +32 -32
  717. package/templates/stacks/php-laravel/app/Services/AuthService.php +37 -37
  718. package/templates/stacks/php-laravel/app/Services/UsersService.php +57 -57
  719. package/templates/stacks/php-laravel/artisan +12 -12
  720. package/templates/stacks/php-laravel/bootstrap/app.php +29 -29
  721. package/templates/stacks/php-laravel/bootstrap/providers.php +5 -5
  722. package/templates/stacks/php-laravel/composer.json.hbs +58 -58
  723. package/templates/stacks/php-laravel/config/l5-swagger.php +41 -41
  724. package/templates/stacks/php-laravel/config/reverb.php +34 -34
  725. package/templates/stacks/php-laravel/config/sanctum.php +15 -15
  726. package/templates/stacks/php-laravel/database/migrations/2026_06_01_000001_create_users_table.php +27 -27
  727. package/templates/stacks/php-laravel/database/seeders/DatabaseSeeder.php +21 -21
  728. package/templates/stacks/php-laravel/gitignore +23 -23
  729. package/templates/stacks/php-laravel/llms.txt.hbs +53 -53
  730. package/templates/stacks/php-laravel/openapi.json.hbs +43 -43
  731. package/templates/stacks/php-laravel/phpstan.neon +9 -9
  732. package/templates/stacks/php-laravel/routes/api.php +13 -13
  733. package/templates/stacks/php-laravel/routes/channels.php +7 -7
  734. package/templates/stacks/php-laravel/tests/Feature/AuthTest.php +35 -35
  735. package/templates/stacks/php-laravel/tests/Feature/UsersTest.php +30 -30
  736. package/templates/stacks/php-laravel/tests/Pest.php +5 -5
  737. package/templates/stacks/python-fastapi/.dare/skills.yml +11 -11
  738. package/templates/stacks/python-fastapi/.env.example +21 -21
  739. package/templates/stacks/python-fastapi/.github/workflows/dare-ci.yml +43 -43
  740. package/templates/stacks/python-fastapi/README.md.j2 +35 -35
  741. package/templates/stacks/python-fastapi/alembic/env.py +46 -46
  742. package/templates/stacks/python-fastapi/alembic/script.py.mako +26 -26
  743. package/templates/stacks/python-fastapi/alembic/versions/0001_create_users.py.j2 +37 -37
  744. package/templates/stacks/python-fastapi/alembic.ini.j2 +39 -39
  745. package/templates/stacks/python-fastapi/app/core/config.py +24 -24
  746. package/templates/stacks/python-fastapi/app/core/security.py +34 -34
  747. package/templates/stacks/python-fastapi/app/db/session.py +22 -22
  748. package/templates/stacks/python-fastapi/app/main.py.j2 +36 -36
  749. package/templates/stacks/python-fastapi/app/models/__init__.py +3 -3
  750. package/templates/stacks/python-fastapi/app/models/user.py +30 -30
  751. package/templates/stacks/python-fastapi/app/repositories/user_repository.py +34 -34
  752. package/templates/stacks/python-fastapi/app/routers/auth.py +37 -37
  753. package/templates/stacks/python-fastapi/app/routers/users.py +46 -46
  754. package/templates/stacks/python-fastapi/app/schemas/user.py +56 -56
  755. package/templates/stacks/python-fastapi/app/services/auth_service.py +22 -22
  756. package/templates/stacks/python-fastapi/app/services/user_service.py +31 -31
  757. package/templates/stacks/python-fastapi/gitignore +12 -12
  758. package/templates/stacks/python-fastapi/llms.txt.j2 +53 -53
  759. package/templates/stacks/python-fastapi/openapi.json.j2 +43 -43
  760. package/templates/stacks/python-fastapi/pyproject.toml.j2 +45 -45
  761. package/templates/stacks/python-fastapi/tests/test_auth.py +22 -22
  762. package/templates/stacks/ruby-rails-8/.dare/skills.yml +50 -50
  763. package/templates/stacks/ruby-rails-8/.env.example +20 -20
  764. package/templates/stacks/ruby-rails-8/.github/workflows/dare-ci.yml +112 -112
  765. package/templates/stacks/ruby-rails-8/Gemfile.erb +61 -61
  766. package/templates/stacks/ruby-rails-8/app/channels/application_cable/channel.rb +11 -11
  767. package/templates/stacks/ruby-rails-8/app/channels/application_cable/connection.rb +34 -34
  768. package/templates/stacks/ruby-rails-8/app/channels/dare_updates_channel.rb +18 -18
  769. package/templates/stacks/ruby-rails-8/app/channels/user_updates_channel.rb +23 -23
  770. package/templates/stacks/ruby-rails-8/app/controllers/application_controller.rb +44 -44
  771. package/templates/stacks/ruby-rails-8/app/controllers/concerns/problem_details.rb +93 -93
  772. package/templates/stacks/ruby-rails-8/app/handlers/summarize_handler.rb +33 -33
  773. package/templates/stacks/ruby-rails-8/app/handlers/users_handler.rb +68 -68
  774. package/templates/stacks/ruby-rails-8/app/llm/cache/llm_cache.rb +44 -44
  775. package/templates/stacks/ruby-rails-8/app/llm/prompts/prompt_loader.rb +54 -54
  776. package/templates/stacks/ruby-rails-8/app/llm/prompts/summarize_v1.jinja2 +12 -12
  777. package/templates/stacks/ruby-rails-8/app/llm/providers/dummy_provider.rb +35 -35
  778. package/templates/stacks/ruby-rails-8/app/llm/providers/llm_provider.rb +67 -67
  779. package/templates/stacks/ruby-rails-8/app/llm/providers/openai_provider.rb +62 -62
  780. package/templates/stacks/ruby-rails-8/app/llm/rate_limit/token_bucket.rb +82 -82
  781. package/templates/stacks/ruby-rails-8/app/llm/validators/summarize_output_schema.json +21 -21
  782. package/templates/stacks/ruby-rails-8/app/llm/validators/validator.rb +52 -52
  783. package/templates/stacks/ruby-rails-8/app/models/user.rb +36 -36
  784. package/templates/stacks/ruby-rails-8/app/presenters/user_presenter.rb +48 -48
  785. package/templates/stacks/ruby-rails-8/app/repositories/document_repository.rb +57 -57
  786. package/templates/stacks/ruby-rails-8/app/repositories/user_repository.rb +73 -73
  787. package/templates/stacks/ruby-rails-8/app/services/create_user_service.rb +67 -67
  788. package/templates/stacks/ruby-rails-8/app/services/realtime_service.rb +53 -53
  789. package/templates/stacks/ruby-rails-8/app/services/summarize_document_service.rb +57 -57
  790. package/templates/stacks/ruby-rails-8/config/dare.yml +42 -42
  791. package/templates/stacks/ruby-rails-8/config/initializers/dare.rb +31 -31
  792. package/templates/stacks/ruby-rails-8/config/initializers/rack_attack.rb +64 -64
  793. package/templates/stacks/ruby-rails-8/config/initializers/rswag_api.rb +12 -12
  794. package/templates/stacks/ruby-rails-8/lib/tasks/dare.rake +159 -159
  795. package/templates/stacks/ruby-rails-8/llms.txt.erb +69 -69
  796. package/templates/stacks/ruby-rails-8/spec/api/summarize_spec.rb +56 -56
  797. package/templates/stacks/ruby-rails-8/spec/api/users_spec.rb +72 -72
  798. package/templates/stacks/ruby-rails-8/spec/channels/dare_updates_channel_spec.rb +61 -61
  799. package/templates/stacks/ruby-rails-8/spec/channels/user_updates_channel_spec.rb +56 -56
  800. package/templates/stacks/ruby-rails-8/spec/factories/users.rb +27 -27
  801. package/templates/stacks/ruby-rails-8/spec/handlers/users_handler_spec.rb +88 -88
  802. package/templates/stacks/ruby-rails-8/spec/rails_helper.rb +31 -31
  803. package/templates/stacks/ruby-rails-8/spec/services/create_user_service_spec.rb +88 -88
  804. package/templates/stacks/ruby-rails-8/spec/services/summarize_document_service_spec.rb +142 -142
  805. package/templates/stacks/ruby-rails-8/spec/swagger_helper.rb +73 -73
  806. package/templates/stacks/rust-axum/.dare/skills.yml +11 -11
  807. package/templates/stacks/rust-axum/.env.example +26 -26
  808. package/templates/stacks/rust-axum/.github/workflows/dare-ci.yml +40 -40
  809. package/templates/stacks/rust-axum/Cargo.toml.tera +53 -53
  810. package/templates/stacks/rust-axum/README.md.tera +37 -37
  811. package/templates/stacks/rust-axum/gitignore +5 -5
  812. package/templates/stacks/rust-axum/llms.txt.tera +54 -54
  813. package/templates/stacks/rust-axum/migrations/0001_create_users.sql +13 -13
  814. package/templates/stacks/rust-axum/openapi.json.tera +46 -46
  815. package/templates/stacks/rust-axum/src/config.rs +45 -45
  816. package/templates/stacks/rust-axum/src/errors.rs +48 -48
  817. package/templates/stacks/rust-axum/src/handlers/auth.rs +48 -48
  818. package/templates/stacks/rust-axum/src/handlers/mod.rs +3 -3
  819. package/templates/stacks/rust-axum/src/handlers/users.rs +81 -81
  820. package/templates/stacks/rust-axum/src/handlers/ws.rs +24 -24
  821. package/templates/stacks/rust-axum/src/lib.rs +19 -19
  822. package/templates/stacks/rust-axum/src/llm/mod.rs +1 -1
  823. package/templates/stacks/rust-axum/src/llm/provider.rs +48 -48
  824. package/templates/stacks/rust-axum/src/main.rs.tera +64 -64
  825. package/templates/stacks/rust-axum/src/middleware/auth.rs +20 -20
  826. package/templates/stacks/rust-axum/src/middleware/mod.rs +2 -2
  827. package/templates/stacks/rust-axum/src/middleware/rate_limit.rs +27 -27
  828. package/templates/stacks/rust-axum/src/models/mod.rs +1 -1
  829. package/templates/stacks/rust-axum/src/models/user.rs +13 -13
  830. package/templates/stacks/rust-axum/src/repositories/mod.rs +1 -1
  831. package/templates/stacks/rust-axum/src/repositories/user_repository.rs +62 -62
  832. package/templates/stacks/rust-axum/src/services/auth_service.rs +50 -50
  833. package/templates/stacks/rust-axum/src/services/mod.rs +2 -2
  834. package/templates/stacks/rust-axum/src/services/user_service.rs +53 -53
  835. package/templates/stacks/rust-axum/tests/integration_test.rs.tera +13 -13
  836. package/dist/commands/new.d.ts +0 -16
  837. package/dist/commands/new.d.ts.map +0 -1
  838. package/dist/commands/new.js +0 -104
  839. package/dist/commands/new.js.map +0 -1
@@ -1,367 +1,367 @@
1
- ---
2
- description: Padrões DARE para servidores MCP (Model Context Protocol da Anthropic) em TypeScript ou Python. Tools, resources, prompts; transports stdio/SSE/HTTP; validação Zod/Pydantic; autorização por tool; observabilidade; testes; publicação.
3
- globs: **/*.ts,**/*.py,package.json,pyproject.toml,claude_desktop_config.json
4
- alwaysApply: false
5
- ---
6
-
7
- # Skill: MCP Server DARE
8
-
9
- Você é um especialista em servidores MCP (Model Context Protocol). Esta skill garante MCP servers **bem estruturados, seguros, testáveis e publicáveis**, expondo tools/resources/prompts via stdio, SSE ou HTTP.
10
-
11
- ## O que é MCP em 30 segundos
12
-
13
- Protocolo aberto da Anthropic para conectar agentes (Claude Code, Claude Desktop, Cursor, etc.) a fontes de dados e ações externas. Server expõe:
14
-
15
- - **Tools** — funções chamáveis pelo agente
16
- - **Resources** — dados leitáveis (URI + mimeType)
17
- - **Prompts** — templates parametrizados
18
-
19
- Transports:
20
-
21
- | Transport | Quando usar |
22
- |---|---|
23
- | **stdio** | Server local, agente spawnea processo |
24
- | **SSE** | Server remoto, streaming bidirectional |
25
- | **HTTP** | Server remoto stateless |
26
-
27
- ---
28
-
29
- ## Stack canônica
30
-
31
- ### TypeScript
32
-
33
- - Node 20+ + TS 5.5+
34
- - `@modelcontextprotocol/sdk` SDK oficial
35
- - Zod para schemas
36
- - vitest
37
-
38
- ### Python
39
-
40
- - Python 3.11+
41
- - `mcp` (SDK oficial, `pip install mcp`)
42
- - Pydantic v2
43
- - pytest + pytest-asyncio
44
-
45
- ---
46
-
47
- ## Estrutura
48
-
49
- ```
50
- mcp-meu-server/
51
- ├── package.json (ou pyproject.toml)
52
- ├── src/
53
- │ ├── index.ts ← stdio entrypoint
54
- │ ├── server.ts ← criação do MCP Server
55
- │ ├── tools/
56
- │ │ ├── create_issue.ts
57
- │ │ └── search_issues.ts
58
- │ ├── resources/
59
- │ ├── prompts/
60
- │ ├── schemas/
61
- │ └── lib/ ← clientes externos
62
- └── tests/
63
- ```
64
-
65
- ---
66
-
67
- ## Exemplo TypeScript (stdio)
68
-
69
- ```typescript
70
- // src/index.ts
71
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
72
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
73
- import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
74
- import { z } from 'zod';
75
-
76
- const CreateIssueInput = z.object({
77
- title: z.string().min(1).max(255),
78
- description: z.string().optional(),
79
- priority: z.enum(['low', 'medium', 'high']).default('medium'),
80
- team_id: z.string().uuid(),
81
- });
82
-
83
- const server = new Server(
84
- { name: 'meu-server', version: '1.0.0' },
85
- { capabilities: { tools: {}, resources: {}, prompts: {} } }
86
- );
87
-
88
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
89
- tools: [{
90
- name: 'create_issue',
91
- description: 'Create a new issue in Linear with the given title, description, and priority',
92
- inputSchema: CreateIssueInput.shape,
93
- }],
94
- }));
95
-
96
- server.setRequestHandler(CallToolRequestSchema, async (req) => {
97
- if (req.params.name !== 'create_issue') throw new Error('unknown tool');
98
- const input = CreateIssueInput.parse(req.params.arguments);
99
- const result = await linearClient.createIssue(input);
100
- return { content: [{ type: 'text', text: JSON.stringify(result) }] };
101
- });
102
-
103
- const transport = new StdioServerTransport();
104
- await server.connect(transport);
105
- ```
106
-
107
- ---
108
-
109
- ## Exemplo Python (stdio)
110
-
111
- ```python
112
- import asyncio
113
- from mcp.server import Server
114
- from mcp.server.stdio import stdio_server
115
- from mcp.types import Tool, TextContent
116
- from pydantic import BaseModel, Field
117
-
118
- app = Server("meu-server")
119
-
120
- class CreateIssueInput(BaseModel):
121
- title: str = Field(min_length=1, max_length=255)
122
- description: str | None = None
123
- priority: str = Field(default="medium", pattern="^(low|medium|high)$")
124
- team_id: str
125
-
126
- @app.list_tools()
127
- async def list_tools() -> list[Tool]:
128
- return [
129
- Tool(
130
- name="create_issue",
131
- description="Create a new issue in Linear",
132
- inputSchema=CreateIssueInput.model_json_schema(),
133
- )
134
- ]
135
-
136
- @app.call_tool()
137
- async def call_tool(name: str, arguments: dict) -> list[TextContent]:
138
- if name != "create_issue":
139
- raise ValueError(f"unknown tool: {name}")
140
- input_data = CreateIssueInput.model_validate(arguments)
141
- result = await linear_client.create_issue(input_data)
142
- return [TextContent(type="text", text=result.model_dump_json())]
143
-
144
- async def main():
145
- async with stdio_server() as (read, write):
146
- await app.run(read, write, app.create_initialization_options())
147
-
148
- if __name__ == "__main__":
149
- asyncio.run(main())
150
- ```
151
-
152
- ---
153
-
154
- ## Resources
155
-
156
- ```typescript
157
- server.setRequestHandler(ListResourcesRequestSchema, async () => ({
158
- resources: [{
159
- uri: 'linear://schema',
160
- name: 'Linear Issue Schema',
161
- mimeType: 'application/json',
162
- }],
163
- }));
164
-
165
- server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
166
- if (req.params.uri === 'linear://schema') {
167
- return {
168
- contents: [{
169
- uri: req.params.uri,
170
- mimeType: 'application/json',
171
- text: JSON.stringify(schema),
172
- }],
173
- };
174
- }
175
- throw new Error('unknown resource');
176
- });
177
- ```
178
-
179
- ---
180
-
181
- ## Prompts
182
-
183
- ```typescript
184
- server.setRequestHandler(ListPromptsRequestSchema, async () => ({
185
- prompts: [{
186
- name: 'triage_issue',
187
- description: 'Triage an issue and assign priority',
188
- arguments: [
189
- { name: 'description', description: 'Issue description', required: true },
190
- ],
191
- }],
192
- }));
193
-
194
- server.setRequestHandler(GetPromptRequestSchema, async (req) => ({
195
- messages: [{
196
- role: 'user',
197
- content: {
198
- type: 'text',
199
- text: `Triage this issue and suggest a priority:\n\n${req.params.arguments?.description}`,
200
- },
201
- }],
202
- }));
203
- ```
204
-
205
- ---
206
-
207
- ## Autorização por tool
208
-
209
- ```typescript
210
- // Tool destrutiva exige confirm explícito
211
- if (input.confirm !== 'YES_I_AM_SURE') {
212
- throw new Error('this tool requires confirmation');
213
- }
214
-
215
- // Tool admin
216
- if (!callerHasRole('admin')) {
217
- throw new Error('admin only');
218
- }
219
- ```
220
-
221
- ---
222
-
223
- ## Observabilidade
224
-
225
- **Crítico em stdio:** o protocolo MCP usa **stdout**. Logs SEMPRE em stderr.
226
-
227
- ```typescript
228
- console.error(JSON.stringify({
229
- ts: new Date().toISOString(),
230
- tool: req.params.name,
231
- duration_ms: Date.now() - start,
232
- success: true,
233
- // sem args (PII), sem result completo (pode ter PII)
234
- }));
235
- ```
236
-
237
- ---
238
-
239
- ## Testes
240
-
241
- ```typescript
242
- // Unit
243
- import { test, expect } from 'vitest';
244
- test('valida input correto', () => {
245
- const valid = CreateIssueInput.parse({
246
- title: 'Test',
247
- team_id: '550e8400-e29b-41d4-a716-446655440000',
248
- });
249
- expect(valid.priority).toBe('medium');
250
- });
251
-
252
- test('rejeita team_id inválido', () => {
253
- expect(() => CreateIssueInput.parse({
254
- title: 'Test',
255
- team_id: 'not-uuid',
256
- })).toThrow();
257
- });
258
-
259
- // E2E com client MCP
260
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
261
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
262
-
263
- const transport = new StdioClientTransport({ command: 'node', args: ['dist/index.js'] });
264
- const client = new Client({ name: 'test', version: '0.0.0' }, { capabilities: {} });
265
- await client.connect(transport);
266
- const tools = await client.listTools();
267
- expect(tools.tools.map(t => t.name)).toContain('create_issue');
268
- ```
269
-
270
- ---
271
-
272
- ## Antipatterns
273
-
274
- | AP | Antipattern | Por quê |
275
- |---|---|---|
276
- | AP-01 | Logs no stdout (stdio) | Quebra o protocolo MCP |
277
- | AP-02 | Tool sem schema de input | Cliente passa lixo |
278
- | AP-03 | Sem validação no server | Confia no client (errado) |
279
- | AP-04 | Tool destrutiva sem confirm | Agente apaga sem querer |
280
- | AP-05 | Secrets em código | Use env vars |
281
- | AP-06 | Tool name vago (`do_thing`) | Agente não sabe quando usar |
282
- | AP-07 | Description curto/vago | Agente erra na escolha |
283
- | AP-08 | Resource sem mimeType | Cliente não parseia |
284
- | AP-09 | Tool sem error handling | Erro vira crash em vez de mensagem |
285
-
286
- ---
287
-
288
- ## Publicação
289
-
290
- ### Pré-requisitos
291
-
292
- - `README.md` com:
293
- - Instalação e configuração
294
- - Lista de tools/resources/prompts
295
- - Variáveis de ambiente
296
- - Exemplo `claude_desktop_config.json`
297
- - `LICENSE` (MIT recomendado)
298
- - `package.json`/`pyproject.toml` versionado
299
-
300
- ### Distribuição
301
-
302
- | Stack | Comando |
303
- |---|---|
304
- | TypeScript | `npm publish` |
305
- | Python | `python -m build && twine upload dist/*` |
306
- | Docker (SSE/HTTP) | multi-stage build + push para registry |
307
-
308
- ### Config no Claude Desktop
309
-
310
- ```json
311
- {
312
- "mcpServers": {
313
- "meu-server": {
314
- "command": "node",
315
- "args": ["/abs/path/to/dist/index.js"],
316
- "env": {
317
- "LINEAR_API_KEY": "lin_api_..."
318
- }
319
- }
320
- }
321
- }
322
- ```
323
-
324
- ---
325
-
326
- ## Aplicação por fase DARE
327
-
328
- ### Design
329
- - Definir capabilities (tools, resources, prompts) com nomes e descrições claras
330
- - Decidir transport (stdio/SSE/HTTP)
331
- - Listar variáveis de ambiente necessárias
332
-
333
- ### Blueprint
334
- - Estrutura de pastas
335
- - Schemas Zod/Pydantic por tool
336
- - Estratégia de autorização
337
-
338
- ### Tasks
339
- - Por tool: 1 task (schema + handler + teste)
340
- - Task de configuração transport + entrypoint
341
- - Task de publicação (README + LICENSE + CI release)
342
-
343
- ### Execute
344
- - Ralph Loop:
345
- ```bash
346
- npm run lint && npm test && npm run build
347
- # ou
348
- ruff check . && mypy . && pytest
349
- ```
350
-
351
- ---
352
-
353
- ## Checklist final
354
-
355
- - [ ] Transport escolhido (stdio/SSE/HTTP) com justificativa
356
- - [ ] Cada tool tem name descritivo, description completa, input schema
357
- - [ ] Validação Zod/Pydantic no início de cada handler
358
- - [ ] Tools destrutivas exigem `confirm`
359
- - [ ] Logs em stderr (stdio) com JSON estruturado
360
- - [ ] Secrets via env vars, nunca em código
361
- - [ ] Testes unit + E2E com client MCP
362
- - [ ] README + LICENSE MIT
363
- - [ ] Publicação configurada (npm/PyPI/Docker)
364
-
365
- ---
366
-
367
- Skill licenciada MIT — parte do DARE Method v3.
1
+ ---
2
+ description: Padrões DARE para servidores MCP (Model Context Protocol da Anthropic) em TypeScript ou Python. Tools, resources, prompts; transports stdio/SSE/HTTP; validação Zod/Pydantic; autorização por tool; observabilidade; testes; publicação.
3
+ globs: **/*.ts,**/*.py,package.json,pyproject.toml,claude_desktop_config.json
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Skill: MCP Server DARE
8
+
9
+ Você é um especialista em servidores MCP (Model Context Protocol). Esta skill garante MCP servers **bem estruturados, seguros, testáveis e publicáveis**, expondo tools/resources/prompts via stdio, SSE ou HTTP.
10
+
11
+ ## O que é MCP em 30 segundos
12
+
13
+ Protocolo aberto da Anthropic para conectar agentes (Claude Code, Claude Desktop, Cursor, etc.) a fontes de dados e ações externas. Server expõe:
14
+
15
+ - **Tools** — funções chamáveis pelo agente
16
+ - **Resources** — dados leitáveis (URI + mimeType)
17
+ - **Prompts** — templates parametrizados
18
+
19
+ Transports:
20
+
21
+ | Transport | Quando usar |
22
+ |---|---|
23
+ | **stdio** | Server local, agente spawnea processo |
24
+ | **SSE** | Server remoto, streaming bidirectional |
25
+ | **HTTP** | Server remoto stateless |
26
+
27
+ ---
28
+
29
+ ## Stack canônica
30
+
31
+ ### TypeScript
32
+
33
+ - Node 20+ + TS 5.5+
34
+ - `@modelcontextprotocol/sdk` SDK oficial
35
+ - Zod para schemas
36
+ - vitest
37
+
38
+ ### Python
39
+
40
+ - Python 3.11+
41
+ - `mcp` (SDK oficial, `pip install mcp`)
42
+ - Pydantic v2
43
+ - pytest + pytest-asyncio
44
+
45
+ ---
46
+
47
+ ## Estrutura
48
+
49
+ ```
50
+ mcp-meu-server/
51
+ ├── package.json (ou pyproject.toml)
52
+ ├── src/
53
+ │ ├── index.ts ← stdio entrypoint
54
+ │ ├── server.ts ← criação do MCP Server
55
+ │ ├── tools/
56
+ │ │ ├── create_issue.ts
57
+ │ │ └── search_issues.ts
58
+ │ ├── resources/
59
+ │ ├── prompts/
60
+ │ ├── schemas/
61
+ │ └── lib/ ← clientes externos
62
+ └── tests/
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Exemplo TypeScript (stdio)
68
+
69
+ ```typescript
70
+ // src/index.ts
71
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
72
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
73
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
74
+ import { z } from 'zod';
75
+
76
+ const CreateIssueInput = z.object({
77
+ title: z.string().min(1).max(255),
78
+ description: z.string().optional(),
79
+ priority: z.enum(['low', 'medium', 'high']).default('medium'),
80
+ team_id: z.string().uuid(),
81
+ });
82
+
83
+ const server = new Server(
84
+ { name: 'meu-server', version: '1.0.0' },
85
+ { capabilities: { tools: {}, resources: {}, prompts: {} } }
86
+ );
87
+
88
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
89
+ tools: [{
90
+ name: 'create_issue',
91
+ description: 'Create a new issue in Linear with the given title, description, and priority',
92
+ inputSchema: CreateIssueInput.shape,
93
+ }],
94
+ }));
95
+
96
+ server.setRequestHandler(CallToolRequestSchema, async (req) => {
97
+ if (req.params.name !== 'create_issue') throw new Error('unknown tool');
98
+ const input = CreateIssueInput.parse(req.params.arguments);
99
+ const result = await linearClient.createIssue(input);
100
+ return { content: [{ type: 'text', text: JSON.stringify(result) }] };
101
+ });
102
+
103
+ const transport = new StdioServerTransport();
104
+ await server.connect(transport);
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Exemplo Python (stdio)
110
+
111
+ ```python
112
+ import asyncio
113
+ from mcp.server import Server
114
+ from mcp.server.stdio import stdio_server
115
+ from mcp.types import Tool, TextContent
116
+ from pydantic import BaseModel, Field
117
+
118
+ app = Server("meu-server")
119
+
120
+ class CreateIssueInput(BaseModel):
121
+ title: str = Field(min_length=1, max_length=255)
122
+ description: str | None = None
123
+ priority: str = Field(default="medium", pattern="^(low|medium|high)$")
124
+ team_id: str
125
+
126
+ @app.list_tools()
127
+ async def list_tools() -> list[Tool]:
128
+ return [
129
+ Tool(
130
+ name="create_issue",
131
+ description="Create a new issue in Linear",
132
+ inputSchema=CreateIssueInput.model_json_schema(),
133
+ )
134
+ ]
135
+
136
+ @app.call_tool()
137
+ async def call_tool(name: str, arguments: dict) -> list[TextContent]:
138
+ if name != "create_issue":
139
+ raise ValueError(f"unknown tool: {name}")
140
+ input_data = CreateIssueInput.model_validate(arguments)
141
+ result = await linear_client.create_issue(input_data)
142
+ return [TextContent(type="text", text=result.model_dump_json())]
143
+
144
+ async def main():
145
+ async with stdio_server() as (read, write):
146
+ await app.run(read, write, app.create_initialization_options())
147
+
148
+ if __name__ == "__main__":
149
+ asyncio.run(main())
150
+ ```
151
+
152
+ ---
153
+
154
+ ## Resources
155
+
156
+ ```typescript
157
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({
158
+ resources: [{
159
+ uri: 'linear://schema',
160
+ name: 'Linear Issue Schema',
161
+ mimeType: 'application/json',
162
+ }],
163
+ }));
164
+
165
+ server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
166
+ if (req.params.uri === 'linear://schema') {
167
+ return {
168
+ contents: [{
169
+ uri: req.params.uri,
170
+ mimeType: 'application/json',
171
+ text: JSON.stringify(schema),
172
+ }],
173
+ };
174
+ }
175
+ throw new Error('unknown resource');
176
+ });
177
+ ```
178
+
179
+ ---
180
+
181
+ ## Prompts
182
+
183
+ ```typescript
184
+ server.setRequestHandler(ListPromptsRequestSchema, async () => ({
185
+ prompts: [{
186
+ name: 'triage_issue',
187
+ description: 'Triage an issue and assign priority',
188
+ arguments: [
189
+ { name: 'description', description: 'Issue description', required: true },
190
+ ],
191
+ }],
192
+ }));
193
+
194
+ server.setRequestHandler(GetPromptRequestSchema, async (req) => ({
195
+ messages: [{
196
+ role: 'user',
197
+ content: {
198
+ type: 'text',
199
+ text: `Triage this issue and suggest a priority:\n\n${req.params.arguments?.description}`,
200
+ },
201
+ }],
202
+ }));
203
+ ```
204
+
205
+ ---
206
+
207
+ ## Autorização por tool
208
+
209
+ ```typescript
210
+ // Tool destrutiva exige confirm explícito
211
+ if (input.confirm !== 'YES_I_AM_SURE') {
212
+ throw new Error('this tool requires confirmation');
213
+ }
214
+
215
+ // Tool admin
216
+ if (!callerHasRole('admin')) {
217
+ throw new Error('admin only');
218
+ }
219
+ ```
220
+
221
+ ---
222
+
223
+ ## Observabilidade
224
+
225
+ **Crítico em stdio:** o protocolo MCP usa **stdout**. Logs SEMPRE em stderr.
226
+
227
+ ```typescript
228
+ console.error(JSON.stringify({
229
+ ts: new Date().toISOString(),
230
+ tool: req.params.name,
231
+ duration_ms: Date.now() - start,
232
+ success: true,
233
+ // sem args (PII), sem result completo (pode ter PII)
234
+ }));
235
+ ```
236
+
237
+ ---
238
+
239
+ ## Testes
240
+
241
+ ```typescript
242
+ // Unit
243
+ import { test, expect } from 'vitest';
244
+ test('valida input correto', () => {
245
+ const valid = CreateIssueInput.parse({
246
+ title: 'Test',
247
+ team_id: '550e8400-e29b-41d4-a716-446655440000',
248
+ });
249
+ expect(valid.priority).toBe('medium');
250
+ });
251
+
252
+ test('rejeita team_id inválido', () => {
253
+ expect(() => CreateIssueInput.parse({
254
+ title: 'Test',
255
+ team_id: 'not-uuid',
256
+ })).toThrow();
257
+ });
258
+
259
+ // E2E com client MCP
260
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
261
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
262
+
263
+ const transport = new StdioClientTransport({ command: 'node', args: ['dist/index.js'] });
264
+ const client = new Client({ name: 'test', version: '0.0.0' }, { capabilities: {} });
265
+ await client.connect(transport);
266
+ const tools = await client.listTools();
267
+ expect(tools.tools.map(t => t.name)).toContain('create_issue');
268
+ ```
269
+
270
+ ---
271
+
272
+ ## Antipatterns
273
+
274
+ | AP | Antipattern | Por quê |
275
+ |---|---|---|
276
+ | AP-01 | Logs no stdout (stdio) | Quebra o protocolo MCP |
277
+ | AP-02 | Tool sem schema de input | Cliente passa lixo |
278
+ | AP-03 | Sem validação no server | Confia no client (errado) |
279
+ | AP-04 | Tool destrutiva sem confirm | Agente apaga sem querer |
280
+ | AP-05 | Secrets em código | Use env vars |
281
+ | AP-06 | Tool name vago (`do_thing`) | Agente não sabe quando usar |
282
+ | AP-07 | Description curto/vago | Agente erra na escolha |
283
+ | AP-08 | Resource sem mimeType | Cliente não parseia |
284
+ | AP-09 | Tool sem error handling | Erro vira crash em vez de mensagem |
285
+
286
+ ---
287
+
288
+ ## Publicação
289
+
290
+ ### Pré-requisitos
291
+
292
+ - `README.md` com:
293
+ - Instalação e configuração
294
+ - Lista de tools/resources/prompts
295
+ - Variáveis de ambiente
296
+ - Exemplo `claude_desktop_config.json`
297
+ - `LICENSE` (MIT recomendado)
298
+ - `package.json`/`pyproject.toml` versionado
299
+
300
+ ### Distribuição
301
+
302
+ | Stack | Comando |
303
+ |---|---|
304
+ | TypeScript | `npm publish` |
305
+ | Python | `python -m build && twine upload dist/*` |
306
+ | Docker (SSE/HTTP) | multi-stage build + push para registry |
307
+
308
+ ### Config no Claude Desktop
309
+
310
+ ```json
311
+ {
312
+ "mcpServers": {
313
+ "meu-server": {
314
+ "command": "node",
315
+ "args": ["/abs/path/to/dist/index.js"],
316
+ "env": {
317
+ "LINEAR_API_KEY": "lin_api_..."
318
+ }
319
+ }
320
+ }
321
+ }
322
+ ```
323
+
324
+ ---
325
+
326
+ ## Aplicação por fase DARE
327
+
328
+ ### Design
329
+ - Definir capabilities (tools, resources, prompts) com nomes e descrições claras
330
+ - Decidir transport (stdio/SSE/HTTP)
331
+ - Listar variáveis de ambiente necessárias
332
+
333
+ ### Blueprint
334
+ - Estrutura de pastas
335
+ - Schemas Zod/Pydantic por tool
336
+ - Estratégia de autorização
337
+
338
+ ### Tasks
339
+ - Por tool: 1 task (schema + handler + teste)
340
+ - Task de configuração transport + entrypoint
341
+ - Task de publicação (README + LICENSE + CI release)
342
+
343
+ ### Execute
344
+ - Ralph Loop:
345
+ ```bash
346
+ npm run lint && npm test && npm run build
347
+ # ou
348
+ ruff check . && mypy . && pytest
349
+ ```
350
+
351
+ ---
352
+
353
+ ## Checklist final
354
+
355
+ - [ ] Transport escolhido (stdio/SSE/HTTP) com justificativa
356
+ - [ ] Cada tool tem name descritivo, description completa, input schema
357
+ - [ ] Validação Zod/Pydantic no início de cada handler
358
+ - [ ] Tools destrutivas exigem `confirm`
359
+ - [ ] Logs em stderr (stdio) com JSON estruturado
360
+ - [ ] Secrets via env vars, nunca em código
361
+ - [ ] Testes unit + E2E com client MCP
362
+ - [ ] README + LICENSE MIT
363
+ - [ ] Publicação configurada (npm/PyPI/Docker)
364
+
365
+ ---
366
+
367
+ Skill licenciada MIT — parte do DARE Method v3.