@dewtech/dare-cli 2.16.0 → 3.0.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 (408) hide show
  1. package/README.md +196 -3
  2. package/dist/__tests__/confidence.test.d.ts +2 -0
  3. package/dist/__tests__/confidence.test.d.ts.map +1 -0
  4. package/dist/__tests__/confidence.test.js +73 -0
  5. package/dist/__tests__/confidence.test.js.map +1 -0
  6. package/dist/__tests__/datamodel.test.d.ts +2 -0
  7. package/dist/__tests__/datamodel.test.d.ts.map +1 -0
  8. package/dist/__tests__/datamodel.test.js +131 -0
  9. package/dist/__tests__/datamodel.test.js.map +1 -0
  10. package/dist/__tests__/dna-detector.test.d.ts +2 -0
  11. package/dist/__tests__/dna-detector.test.d.ts.map +1 -0
  12. package/dist/__tests__/dna-detector.test.js +97 -0
  13. package/dist/__tests__/dna-detector.test.js.map +1 -0
  14. package/dist/__tests__/dna-facts.test.d.ts +2 -0
  15. package/dist/__tests__/dna-facts.test.d.ts.map +1 -0
  16. package/dist/__tests__/dna-facts.test.js +44 -0
  17. package/dist/__tests__/dna-facts.test.js.map +1 -0
  18. package/dist/__tests__/graph-renderer.test.d.ts +2 -0
  19. package/dist/__tests__/graph-renderer.test.d.ts.map +1 -0
  20. package/dist/__tests__/graph-renderer.test.js +85 -0
  21. package/dist/__tests__/graph-renderer.test.js.map +1 -0
  22. package/dist/__tests__/migration.test.d.ts +2 -0
  23. package/dist/__tests__/migration.test.d.ts.map +1 -0
  24. package/dist/__tests__/migration.test.js +77 -0
  25. package/dist/__tests__/migration.test.js.map +1 -0
  26. package/dist/__tests__/module-detector.test.d.ts +2 -0
  27. package/dist/__tests__/module-detector.test.d.ts.map +1 -0
  28. package/dist/__tests__/module-detector.test.js +83 -0
  29. package/dist/__tests__/module-detector.test.js.map +1 -0
  30. package/dist/__tests__/refine.test.d.ts +2 -0
  31. package/dist/__tests__/refine.test.d.ts.map +1 -0
  32. package/dist/__tests__/refine.test.js +186 -0
  33. package/dist/__tests__/refine.test.js.map +1 -0
  34. package/dist/__tests__/reverse-facts.test.d.ts +2 -0
  35. package/dist/__tests__/reverse-facts.test.d.ts.map +1 -0
  36. package/dist/__tests__/reverse-facts.test.js +78 -0
  37. package/dist/__tests__/reverse-facts.test.js.map +1 -0
  38. package/dist/__tests__/review.test.d.ts +2 -0
  39. package/dist/__tests__/review.test.d.ts.map +1 -0
  40. package/dist/__tests__/review.test.js +242 -0
  41. package/dist/__tests__/review.test.js.map +1 -0
  42. package/dist/__tests__/update.test.d.ts +2 -0
  43. package/dist/__tests__/update.test.d.ts.map +1 -0
  44. package/dist/__tests__/update.test.js +150 -0
  45. package/dist/__tests__/update.test.js.map +1 -0
  46. package/dist/__tests__/validate.test.js +65 -65
  47. package/dist/bin/dare.js +38 -3
  48. package/dist/bin/dare.js.map +1 -1
  49. package/dist/commands/blueprint.js +122 -122
  50. package/dist/commands/dag.d.ts.map +1 -1
  51. package/dist/commands/dag.js +43 -79
  52. package/dist/commands/dag.js.map +1 -1
  53. package/dist/commands/dna.d.ts +3 -0
  54. package/dist/commands/dna.d.ts.map +1 -0
  55. package/dist/commands/dna.js +69 -0
  56. package/dist/commands/dna.js.map +1 -0
  57. package/dist/commands/execute.d.ts.map +1 -1
  58. package/dist/commands/execute.js +76 -0
  59. package/dist/commands/execute.js.map +1 -1
  60. package/dist/commands/migrate.d.ts +3 -0
  61. package/dist/commands/migrate.d.ts.map +1 -0
  62. package/dist/commands/migrate.js +101 -0
  63. package/dist/commands/migrate.js.map +1 -0
  64. package/dist/commands/new.d.ts +16 -0
  65. package/dist/commands/new.d.ts.map +1 -0
  66. package/dist/commands/new.js +103 -0
  67. package/dist/commands/new.js.map +1 -0
  68. package/dist/commands/refine.d.ts +16 -0
  69. package/dist/commands/refine.d.ts.map +1 -0
  70. package/dist/commands/refine.js +167 -0
  71. package/dist/commands/refine.js.map +1 -0
  72. package/dist/commands/reverse.d.ts +3 -0
  73. package/dist/commands/reverse.d.ts.map +1 -0
  74. package/dist/commands/reverse.js +201 -0
  75. package/dist/commands/reverse.js.map +1 -0
  76. package/dist/commands/review.d.ts +16 -0
  77. package/dist/commands/review.d.ts.map +1 -0
  78. package/dist/commands/review.js +106 -0
  79. package/dist/commands/review.js.map +1 -0
  80. package/dist/commands/update.d.ts +13 -0
  81. package/dist/commands/update.d.ts.map +1 -0
  82. package/dist/commands/update.js +149 -0
  83. package/dist/commands/update.js.map +1 -0
  84. package/dist/commands/welcome.d.ts +14 -0
  85. package/dist/commands/welcome.d.ts.map +1 -0
  86. package/dist/commands/welcome.js +29 -0
  87. package/dist/commands/welcome.js.map +1 -0
  88. package/dist/skills/commands/add.d.ts +23 -0
  89. package/dist/skills/commands/add.d.ts.map +1 -0
  90. package/dist/skills/commands/add.js +206 -0
  91. package/dist/skills/commands/add.js.map +1 -0
  92. package/dist/skills/commands/info.d.ts +14 -0
  93. package/dist/skills/commands/info.d.ts.map +1 -0
  94. package/dist/skills/commands/info.js +99 -0
  95. package/dist/skills/commands/info.js.map +1 -0
  96. package/dist/skills/commands/list.d.ts +19 -0
  97. package/dist/skills/commands/list.d.ts.map +1 -0
  98. package/dist/skills/commands/list.js +163 -0
  99. package/dist/skills/commands/list.js.map +1 -0
  100. package/dist/skills/commands/publish.d.ts +56 -0
  101. package/dist/skills/commands/publish.d.ts.map +1 -0
  102. package/dist/skills/commands/publish.js +272 -0
  103. package/dist/skills/commands/publish.js.map +1 -0
  104. package/dist/skills/commands/remove.d.ts +19 -0
  105. package/dist/skills/commands/remove.d.ts.map +1 -0
  106. package/dist/skills/commands/remove.js +96 -0
  107. package/dist/skills/commands/remove.js.map +1 -0
  108. package/dist/skills/commands/update.d.ts +31 -0
  109. package/dist/skills/commands/update.d.ts.map +1 -0
  110. package/dist/skills/commands/update.js +132 -0
  111. package/dist/skills/commands/update.js.map +1 -0
  112. package/dist/skills/index.d.ts +22 -0
  113. package/dist/skills/index.d.ts.map +1 -0
  114. package/dist/skills/index.js +33 -0
  115. package/dist/skills/index.js.map +1 -0
  116. package/dist/skills/manifest.d.ts +54 -0
  117. package/dist/skills/manifest.d.ts.map +1 -0
  118. package/dist/skills/manifest.js +162 -0
  119. package/dist/skills/manifest.js.map +1 -0
  120. package/dist/skills/registry-local.d.ts +67 -0
  121. package/dist/skills/registry-local.d.ts.map +1 -0
  122. package/dist/skills/registry-local.js +130 -0
  123. package/dist/skills/registry-local.js.map +1 -0
  124. package/dist/skills/registry-mock.json +109 -0
  125. package/dist/skills/registry-remote.d.ts +110 -0
  126. package/dist/skills/registry-remote.d.ts.map +1 -0
  127. package/dist/skills/registry-remote.js +246 -0
  128. package/dist/skills/registry-remote.js.map +1 -0
  129. package/dist/skills/registry.d.ts +49 -0
  130. package/dist/skills/registry.d.ts.map +1 -0
  131. package/dist/skills/registry.js +94 -0
  132. package/dist/skills/registry.js.map +1 -0
  133. package/dist/skills/tests/manifest.spec.d.ts +8 -0
  134. package/dist/skills/tests/manifest.spec.d.ts.map +1 -0
  135. package/dist/skills/tests/manifest.spec.js +176 -0
  136. package/dist/skills/tests/manifest.spec.js.map +1 -0
  137. package/dist/skills/tests/publish.spec.d.ts +12 -0
  138. package/dist/skills/tests/publish.spec.d.ts.map +1 -0
  139. package/dist/skills/tests/publish.spec.js +276 -0
  140. package/dist/skills/tests/publish.spec.js.map +1 -0
  141. package/dist/skills/tests/registry-local.spec.d.ts +8 -0
  142. package/dist/skills/tests/registry-local.spec.d.ts.map +1 -0
  143. package/dist/skills/tests/registry-local.spec.js +231 -0
  144. package/dist/skills/tests/registry-local.spec.js.map +1 -0
  145. package/dist/skills/tests/registry.spec.d.ts +7 -0
  146. package/dist/skills/tests/registry.spec.d.ts.map +1 -0
  147. package/dist/skills/tests/registry.spec.js +58 -0
  148. package/dist/skills/tests/registry.spec.js.map +1 -0
  149. package/dist/skills/tests/remote-registry.spec.d.ts +9 -0
  150. package/dist/skills/tests/remote-registry.spec.d.ts.map +1 -0
  151. package/dist/skills/tests/remote-registry.spec.js +357 -0
  152. package/dist/skills/tests/remote-registry.spec.js.map +1 -0
  153. package/dist/skills/tests/update.spec.d.ts +9 -0
  154. package/dist/skills/tests/update.spec.d.ts.map +1 -0
  155. package/dist/skills/tests/update.spec.js +166 -0
  156. package/dist/skills/tests/update.spec.js.map +1 -0
  157. package/dist/types/Refine.types.d.ts +96 -0
  158. package/dist/types/Refine.types.d.ts.map +1 -0
  159. package/dist/types/Refine.types.js +19 -0
  160. package/dist/types/Refine.types.js.map +1 -0
  161. package/dist/types/Review.types.d.ts +86 -0
  162. package/dist/types/Review.types.d.ts.map +1 -0
  163. package/dist/types/Review.types.js +15 -0
  164. package/dist/types/Review.types.js.map +1 -0
  165. package/dist/types/UpdateManifest.types.d.ts +91 -0
  166. package/dist/types/UpdateManifest.types.d.ts.map +1 -0
  167. package/dist/types/UpdateManifest.types.js +13 -0
  168. package/dist/types/UpdateManifest.types.js.map +1 -0
  169. package/dist/utils/ReviewRunner.d.ts +42 -0
  170. package/dist/utils/ReviewRunner.d.ts.map +1 -0
  171. package/dist/utils/ReviewRunner.js +175 -0
  172. package/dist/utils/ReviewRunner.js.map +1 -0
  173. package/dist/utils/UpdateApplier.d.ts +42 -0
  174. package/dist/utils/UpdateApplier.d.ts.map +1 -0
  175. package/dist/utils/UpdateApplier.js +207 -0
  176. package/dist/utils/UpdateApplier.js.map +1 -0
  177. package/dist/utils/UpdateDetector.d.ts +56 -0
  178. package/dist/utils/UpdateDetector.d.ts.map +1 -0
  179. package/dist/utils/UpdateDetector.js +164 -0
  180. package/dist/utils/UpdateDetector.js.map +1 -0
  181. package/dist/utils/banner.d.ts +28 -0
  182. package/dist/utils/banner.d.ts.map +1 -0
  183. package/dist/utils/banner.js +77 -0
  184. package/dist/utils/banner.js.map +1 -0
  185. package/dist/utils/banner.spec.d.ts +5 -0
  186. package/dist/utils/banner.spec.d.ts.map +1 -0
  187. package/dist/utils/banner.spec.js +253 -0
  188. package/dist/utils/banner.spec.js.map +1 -0
  189. package/dist/utils/complexity-analyzer.d.ts +60 -0
  190. package/dist/utils/complexity-analyzer.d.ts.map +1 -0
  191. package/dist/utils/complexity-analyzer.js +292 -0
  192. package/dist/utils/complexity-analyzer.js.map +1 -0
  193. package/dist/utils/confidence.d.ts +41 -0
  194. package/dist/utils/confidence.d.ts.map +1 -0
  195. package/dist/utils/confidence.js +101 -0
  196. package/dist/utils/confidence.js.map +1 -0
  197. package/dist/utils/datamodel.d.ts +41 -0
  198. package/dist/utils/datamodel.d.ts.map +1 -0
  199. package/dist/utils/datamodel.js +535 -0
  200. package/dist/utils/datamodel.js.map +1 -0
  201. package/dist/utils/dna-detector.d.ts +61 -0
  202. package/dist/utils/dna-detector.d.ts.map +1 -0
  203. package/dist/utils/dna-detector.js +354 -0
  204. package/dist/utils/dna-detector.js.map +1 -0
  205. package/dist/utils/dna-facts.d.ts +13 -0
  206. package/dist/utils/dna-facts.d.ts.map +1 -0
  207. package/dist/utils/dna-facts.js +109 -0
  208. package/dist/utils/dna-facts.js.map +1 -0
  209. package/dist/utils/excalidraw-renderer.d.ts +11 -71
  210. package/dist/utils/excalidraw-renderer.d.ts.map +1 -1
  211. package/dist/utils/excalidraw-renderer.js +29 -162
  212. package/dist/utils/excalidraw-renderer.js.map +1 -1
  213. package/dist/utils/graph-renderer.d.ts +115 -0
  214. package/dist/utils/graph-renderer.d.ts.map +1 -0
  215. package/dist/utils/graph-renderer.js +216 -0
  216. package/dist/utils/graph-renderer.js.map +1 -0
  217. package/dist/utils/migration.d.ts +64 -0
  218. package/dist/utils/migration.d.ts.map +1 -0
  219. package/dist/utils/migration.js +183 -0
  220. package/dist/utils/migration.js.map +1 -0
  221. package/dist/utils/module-detector.d.ts +46 -0
  222. package/dist/utils/module-detector.d.ts.map +1 -0
  223. package/dist/utils/module-detector.js +348 -0
  224. package/dist/utils/module-detector.js.map +1 -0
  225. package/dist/utils/project-generator.d.ts.map +1 -1
  226. package/dist/utils/project-generator.js +273 -254
  227. package/dist/utils/project-generator.js.map +1 -1
  228. package/dist/utils/reverse-facts.d.ts +50 -0
  229. package/dist/utils/reverse-facts.d.ts.map +1 -0
  230. package/dist/utils/reverse-facts.js +291 -0
  231. package/dist/utils/reverse-facts.js.map +1 -0
  232. package/dist/utils/stack-bootstrap.js +371 -371
  233. package/dist/utils/static-analyzer.d.ts +29 -0
  234. package/dist/utils/static-analyzer.d.ts.map +1 -0
  235. package/dist/utils/static-analyzer.js +390 -0
  236. package/dist/utils/static-analyzer.js.map +1 -0
  237. package/dist/utils/version-compare.d.ts +27 -0
  238. package/dist/utils/version-compare.d.ts.map +1 -0
  239. package/dist/utils/version-compare.js +47 -0
  240. package/dist/utils/version-compare.js.map +1 -0
  241. package/package.json +8 -3
  242. package/templates/DARE-dag-example.yaml +280 -280
  243. package/templates/UPDATE-MANIFEST.json +48 -0
  244. package/templates/backend/node-nestjs/.env.example +9 -9
  245. package/templates/backend/node-nestjs/nest-cli.json +8 -8
  246. package/templates/backend/node-nestjs/package.json +50 -50
  247. package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
  248. package/templates/backend/node-nestjs/src/app.module.ts +15 -15
  249. package/templates/backend/node-nestjs/src/app.service.ts +8 -8
  250. package/templates/backend/node-nestjs/src/main.ts +24 -24
  251. package/templates/backend/node-nestjs/tsconfig.json +21 -21
  252. package/templates/backend/php-laravel/.env.example +22 -22
  253. package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
  254. package/templates/backend/php-laravel/composer.json +40 -40
  255. package/templates/backend/python-fastapi/.env.example +4 -4
  256. package/templates/backend/python-fastapi/app/api/router.py +8 -8
  257. package/templates/backend/python-fastapi/app/core/config.py +20 -20
  258. package/templates/backend/python-fastapi/main.py +35 -35
  259. package/templates/backend/python-fastapi/requirements.txt +13 -13
  260. package/templates/backend/rust-axum/.env.example +3 -3
  261. package/templates/backend/rust-axum/Cargo.toml +23 -23
  262. package/templates/backend/rust-axum/src/errors.rs +30 -30
  263. package/templates/backend/rust-axum/src/main.rs +32 -32
  264. package/templates/backend/rust-axum/src/routes.rs +6 -6
  265. package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
  266. package/templates/frontend/leptos-csr/Cargo.toml +16 -16
  267. package/templates/frontend/leptos-csr/Trunk.toml +10 -10
  268. package/templates/frontend/leptos-csr/index.html +11 -11
  269. package/templates/frontend/leptos-csr/src/lib.rs +20 -20
  270. package/templates/frontend/leptos-csr/style/main.scss +19 -19
  271. package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
  272. package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
  273. package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
  274. package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
  275. package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
  276. package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
  277. package/templates/frontend/react/index.html +12 -12
  278. package/templates/frontend/react/package.json +35 -35
  279. package/templates/frontend/react/src/App.tsx +25 -25
  280. package/templates/frontend/react/src/main.tsx +9 -9
  281. package/templates/frontend/vue/package.json +32 -32
  282. package/templates/frontend/vue/src/App.vue +7 -7
  283. package/templates/frontend/vue/src/main.ts +10 -10
  284. package/templates/frontend/vue/src/router/index.ts +14 -14
  285. package/templates/frontend/vue/src/views/HomeView.vue +6 -6
  286. package/templates/hooks/pre-commit-dare-validate +24 -24
  287. package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -0
  288. package/templates/ide/antigravity/.agents/skills/dare-blueprint/SKILL.md +180 -36
  289. package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -0
  290. package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -0
  291. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
  292. package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -0
  293. package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -0
  294. package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -0
  295. package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -0
  296. package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -0
  297. package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -0
  298. package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -0
  299. package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -0
  300. package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -0
  301. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -0
  302. package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
  303. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -0
  304. package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -0
  305. package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
  306. package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -0
  307. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -224
  308. package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -0
  309. package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -0
  310. package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -0
  311. package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -0
  312. package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -0
  313. package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -0
  314. package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
  315. package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
  316. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -100
  317. package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
  318. package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -78
  319. package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
  320. package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -110
  321. package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
  322. package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -0
  323. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
  324. package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
  325. package/templates/ide/claude/.claude/commands/dare-dna.md +75 -0
  326. package/templates/ide/claude/.claude/commands/dare-docker.md +207 -0
  327. package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
  328. package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -0
  329. package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -0
  330. package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -0
  331. package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -0
  332. package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -0
  333. package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -0
  334. package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -0
  335. package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -0
  336. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -0
  337. package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
  338. package/templates/ide/claude/.claude/commands/dare-review.md +113 -0
  339. package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
  340. package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
  341. package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
  342. package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
  343. package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -0
  344. package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -0
  345. package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -0
  346. package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -0
  347. package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -0
  348. package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -0
  349. package/templates/ide/claude/.claude/settings.example.json +35 -35
  350. package/templates/ide/claude/CLAUDE.md +146 -146
  351. package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
  352. package/templates/ide/claude/templates/DESIGN-template.md +129 -129
  353. package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -100
  354. package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
  355. package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -41
  356. package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
  357. package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -142
  358. package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -0
  359. package/templates/ide/cursor/.cursor/commands/review-task.md +91 -0
  360. package/templates/ide/cursor/.cursor/commands/run-dag.md +110 -110
  361. package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -0
  362. package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -0
  363. package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -0
  364. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
  365. package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -0
  366. package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -0
  367. package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -0
  368. package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -0
  369. package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -0
  370. package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -0
  371. package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -0
  372. package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -0
  373. package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -0
  374. package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -0
  375. package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -0
  376. package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -0
  377. package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -0
  378. package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -0
  379. package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
  380. package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
  381. package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
  382. package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
  383. package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -100
  384. package/templates/shared/docker-compose.yml +41 -41
  385. package/dist/__tests__/dag-runner/adapters.test.d.ts +0 -2
  386. package/dist/__tests__/dag-runner/adapters.test.d.ts.map +0 -1
  387. package/dist/__tests__/dag-runner/adapters.test.js +0 -134
  388. package/dist/__tests__/dag-runner/adapters.test.js.map +0 -1
  389. package/dist/dag-runner/adapters/antigravity.d.ts +0 -6
  390. package/dist/dag-runner/adapters/antigravity.d.ts.map +0 -1
  391. package/dist/dag-runner/adapters/antigravity.js +0 -54
  392. package/dist/dag-runner/adapters/antigravity.js.map +0 -1
  393. package/dist/dag-runner/adapters/claude.d.ts +0 -6
  394. package/dist/dag-runner/adapters/claude.d.ts.map +0 -1
  395. package/dist/dag-runner/adapters/claude.js +0 -48
  396. package/dist/dag-runner/adapters/claude.js.map +0 -1
  397. package/dist/dag-runner/adapters/cursor.d.ts +0 -6
  398. package/dist/dag-runner/adapters/cursor.d.ts.map +0 -1
  399. package/dist/dag-runner/adapters/cursor.js +0 -58
  400. package/dist/dag-runner/adapters/cursor.js.map +0 -1
  401. package/dist/dag-runner/adapters/index.d.ts +0 -46
  402. package/dist/dag-runner/adapters/index.d.ts.map +0 -1
  403. package/dist/dag-runner/adapters/index.js +0 -55
  404. package/dist/dag-runner/adapters/index.js.map +0 -1
  405. package/dist/dag-runner/utils/timeout.d.ts +0 -27
  406. package/dist/dag-runner/utils/timeout.d.ts.map +0 -1
  407. package/dist/dag-runner/utils/timeout.js +0 -55
  408. package/dist/dag-runner/utils/timeout.js.map +0 -1
@@ -1,6 +1,13 @@
1
1
  import fs from 'fs-extra';
2
2
  import path from 'path';
3
3
  import chalk from 'chalk';
4
+ import { createRequire } from 'module';
5
+ const requireFromHere = createRequire(import.meta.url);
6
+ /** Reads the CLI's own version from its bundled package.json. */
7
+ function getFrameworkVersion() {
8
+ const pkg = requireFromHere('../../package.json');
9
+ return pkg.version;
10
+ }
4
11
  import { generateCursorRules, generateAntigravityRules, generateSharedConfig, generateMcpCursorRules, generateMcpAntigravityRules, generateClaudeCodeRules, generateMcpClaudeCodeRules, generateClaudeCommands, generateClaudeSettings, } from './templates.js';
5
12
  import { bootstrapBackend, bootstrapFrontend, bootstrapMcp, } from './stack-bootstrap.js';
6
13
  export async function generateProjectStructure(config) {
@@ -25,7 +32,19 @@ export async function generateProjectStructure(config) {
25
32
  graphrag,
26
33
  mcp,
27
34
  toolchain: config.toolchain ?? 'auto',
28
- version: '0.1.0',
35
+ version: getFrameworkVersion(),
36
+ // Anti-stub gates introduced in v2.17.
37
+ // `review.onComplete` is opt-in (default off) so existing projects don't
38
+ // change behavior on upgrade; new projects get it on.
39
+ review: {
40
+ onComplete: true,
41
+ strict: false,
42
+ },
43
+ refine: {
44
+ // Thresholds map heuristic score → LOW/MED/HIGH/CRITICAL. See
45
+ // `complexity-analyzer.ts` for defaults; override per project here.
46
+ thresholds: { low: 5, med: 12, high: 20 },
47
+ },
29
48
  };
30
49
  if (structure === 'mcp-server') {
31
50
  configData.mcpTransport = config.mcpTransport;
@@ -125,7 +144,7 @@ export async function installDareToExistingProject(projectDir, config) {
125
144
  const { name, structure, backend, frontend, ide, graphrag, mcp } = config;
126
145
  await fs.ensureDir(path.join(outputDir, 'DARE'));
127
146
  await fs.ensureDir(path.join(outputDir, 'DARE', 'EXECUTION'));
128
- const configData = { name, structure, backend, frontend, ide, graphrag, mcp, version: '0.1.0', installedAt: new Date().toISOString() };
147
+ const configData = { name, structure, backend, frontend, ide, graphrag, mcp, version: getFrameworkVersion(), installedAt: new Date().toISOString() };
129
148
  if (structure === 'mcp-server') {
130
149
  configData.mcpTransport = config.mcpTransport;
131
150
  configData.mcpLanguage = config.mcpLanguage;
@@ -172,94 +191,94 @@ async function generateMcpTemplate(dir, config) {
172
191
  const transportSetup = mcpTransport === 'stdio'
173
192
  ? `const transport = new StdioServerTransport();\nawait server.connect(transport);`
174
193
  : `const app = express();\napp.get('/sse', async (req, res) => {\n const transport = new SSEServerTransport('/messages', res);\n await server.connect(transport);\n});\napp.post('/messages', express.json(), (req, res) => { /* message handler */ });\napp.listen(3000, () => console.error('MCP SSE server running on :3000'));`;
175
- const resourceSection = hasResources ? `
176
- import {
177
- ListResourcesRequestSchema,
178
- ReadResourceRequestSchema,
179
- } from '@modelcontextprotocol/sdk/types.js';
180
-
181
- server.setRequestHandler(ListResourcesRequestSchema, async () => ({
182
- resources: [
183
- {
184
- uri: 'resource://example',
185
- name: 'Example Resource',
186
- description: 'An example resource',
187
- mimeType: 'text/plain',
188
- },
189
- ],
190
- }));
191
-
192
- server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
193
- if (request.params.uri === 'resource://example') {
194
- return { contents: [{ uri: request.params.uri, mimeType: 'text/plain', text: 'Example content' }] };
195
- }
196
- throw new Error(\`Unknown resource: \${request.params.uri}\`);
197
- });
194
+ const resourceSection = hasResources ? `
195
+ import {
196
+ ListResourcesRequestSchema,
197
+ ReadResourceRequestSchema,
198
+ } from '@modelcontextprotocol/sdk/types.js';
199
+
200
+ server.setRequestHandler(ListResourcesRequestSchema, async () => ({
201
+ resources: [
202
+ {
203
+ uri: 'resource://example',
204
+ name: 'Example Resource',
205
+ description: 'An example resource',
206
+ mimeType: 'text/plain',
207
+ },
208
+ ],
209
+ }));
210
+
211
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
212
+ if (request.params.uri === 'resource://example') {
213
+ return { contents: [{ uri: request.params.uri, mimeType: 'text/plain', text: 'Example content' }] };
214
+ }
215
+ throw new Error(\`Unknown resource: \${request.params.uri}\`);
216
+ });
198
217
  ` : '';
199
- const promptSection = hasPrompts ? `
200
- import {
201
- ListPromptsRequestSchema,
202
- GetPromptRequestSchema,
203
- } from '@modelcontextprotocol/sdk/types.js';
204
-
205
- server.setRequestHandler(ListPromptsRequestSchema, async () => ({
206
- prompts: [
207
- {
208
- name: 'example-prompt',
209
- description: 'An example prompt template',
210
- arguments: [{ name: 'topic', description: 'Topic to write about', required: true }],
211
- },
212
- ],
213
- }));
214
-
215
- server.setRequestHandler(GetPromptRequestSchema, async (request) => {
216
- if (request.params.name === 'example-prompt') {
217
- const topic = request.params.arguments?.topic ?? 'general';
218
- return {
219
- description: 'Example prompt',
220
- messages: [{ role: 'user', content: { type: 'text', text: \`Write about: \${topic}\` } }],
221
- };
222
- }
223
- throw new Error(\`Unknown prompt: \${request.params.name}\`);
224
- });
218
+ const promptSection = hasPrompts ? `
219
+ import {
220
+ ListPromptsRequestSchema,
221
+ GetPromptRequestSchema,
222
+ } from '@modelcontextprotocol/sdk/types.js';
223
+
224
+ server.setRequestHandler(ListPromptsRequestSchema, async () => ({
225
+ prompts: [
226
+ {
227
+ name: 'example-prompt',
228
+ description: 'An example prompt template',
229
+ arguments: [{ name: 'topic', description: 'Topic to write about', required: true }],
230
+ },
231
+ ],
232
+ }));
233
+
234
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
235
+ if (request.params.name === 'example-prompt') {
236
+ const topic = request.params.arguments?.topic ?? 'general';
237
+ return {
238
+ description: 'Example prompt',
239
+ messages: [{ role: 'user', content: { type: 'text', text: \`Write about: \${topic}\` } }],
240
+ };
241
+ }
242
+ throw new Error(\`Unknown prompt: \${request.params.name}\`);
243
+ });
225
244
  ` : '';
226
- const indexContent = `import { Server } from '@modelcontextprotocol/sdk/server/index.js';
227
- ${transportImport}
228
- import {
229
- CallToolRequestSchema,
230
- ListToolsRequestSchema,
231
- } from '@modelcontextprotocol/sdk/types.js';
232
-
233
- const server = new Server(
234
- { name: '${config.name}', version: '0.1.0' },
235
- { capabilities: { ${capabilities.join(', ')} } }
236
- );
237
-
238
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
239
- tools: [
240
- {
241
- name: 'hello',
242
- description: 'Says hello to a given name',
243
- inputSchema: {
244
- type: 'object',
245
- properties: {
246
- name: { type: 'string', description: 'Name to greet' },
247
- },
248
- required: ['name'],
249
- },
250
- },
251
- ],
252
- }));
253
-
254
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
255
- if (request.params.name === 'hello') {
256
- const { name } = request.params.arguments as { name: string };
257
- return { content: [{ type: 'text', text: \`Hello, \${name}!\` }] };
258
- }
259
- throw new Error(\`Unknown tool: \${request.params.name}\`);
260
- });
261
- ${resourceSection}${promptSection}
262
- ${transportSetup}
245
+ const indexContent = `import { Server } from '@modelcontextprotocol/sdk/server/index.js';
246
+ ${transportImport}
247
+ import {
248
+ CallToolRequestSchema,
249
+ ListToolsRequestSchema,
250
+ } from '@modelcontextprotocol/sdk/types.js';
251
+
252
+ const server = new Server(
253
+ { name: '${config.name}', version: '0.1.0' },
254
+ { capabilities: { ${capabilities.join(', ')} } }
255
+ );
256
+
257
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
258
+ tools: [
259
+ {
260
+ name: 'hello',
261
+ description: 'Says hello to a given name',
262
+ inputSchema: {
263
+ type: 'object',
264
+ properties: {
265
+ name: { type: 'string', description: 'Name to greet' },
266
+ },
267
+ required: ['name'],
268
+ },
269
+ },
270
+ ],
271
+ }));
272
+
273
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
274
+ if (request.params.name === 'hello') {
275
+ const { name } = request.params.arguments as { name: string };
276
+ return { content: [{ type: 'text', text: \`Hello, \${name}!\` }] };
277
+ }
278
+ throw new Error(\`Unknown tool: \${request.params.name}\`);
279
+ });
280
+ ${resourceSection}${promptSection}
281
+ ${transportSetup}
263
282
  `;
264
283
  await fs.writeFile(path.join(dir, 'src', 'index.ts'), indexContent);
265
284
  const extraDeps = mcpTransport !== 'stdio' ? { express: '^4.18.0' } : {};
@@ -305,45 +324,45 @@ ${transportSetup}
305
324
  // Python MCP
306
325
  const hasResources = mcpFeatures.includes('resources');
307
326
  const hasPrompts = mcpFeatures.includes('prompts');
308
- const resourceSection = hasResources ? `
309
-
310
- @mcp.resource("resource://example")
311
- def example_resource() -> str:
312
- """An example resource."""
313
- return "Example content"
327
+ const resourceSection = hasResources ? `
328
+
329
+ @mcp.resource("resource://example")
330
+ def example_resource() -> str:
331
+ """An example resource."""
332
+ return "Example content"
314
333
  ` : '';
315
- const promptSection = hasPrompts ? `
316
-
317
- @mcp.prompt()
318
- def example_prompt(topic: str) -> str:
319
- """An example prompt template."""
320
- return f"Write about: {topic}"
334
+ const promptSection = hasPrompts ? `
335
+
336
+ @mcp.prompt()
337
+ def example_prompt(topic: str) -> str:
338
+ """An example prompt template."""
339
+ return f"Write about: {topic}"
321
340
  ` : '';
322
341
  const transportLine = mcpTransport === 'stdio' ? '' : '\n# For SSE transport:\n# mcp.run(transport="sse", host="0.0.0.0", port=8000)\n';
323
- await fs.writeFile(path.join(dir, 'main.py'), `from mcp.server.fastmcp import FastMCP
324
-
325
- mcp = FastMCP("${config.name}")
326
-
327
-
328
- @mcp.tool()
329
- def hello(name: str) -> str:
330
- """Says hello to a given name."""
331
- return f"Hello, {name}!"
332
- ${resourceSection}${promptSection}
333
-
334
- if __name__ == "__main__":
335
- mcp.run()${transportLine}
342
+ await fs.writeFile(path.join(dir, 'main.py'), `from mcp.server.fastmcp import FastMCP
343
+
344
+ mcp = FastMCP("${config.name}")
345
+
346
+
347
+ @mcp.tool()
348
+ def hello(name: str) -> str:
349
+ """Says hello to a given name."""
350
+ return f"Hello, {name}!"
351
+ ${resourceSection}${promptSection}
352
+
353
+ if __name__ == "__main__":
354
+ mcp.run()${transportLine}
336
355
  `);
337
356
  await fs.writeFile(path.join(dir, 'requirements.txt'), `mcp>=1.0.0\n`);
338
- await fs.writeFile(path.join(dir, 'pyproject.toml'), `[project]
339
- name = "${config.name}"
340
- version = "0.1.0"
341
- requires-python = ">=3.11"
342
- dependencies = ["mcp>=1.0.0"]
343
-
344
- [build-system]
345
- requires = ["hatchling"]
346
- build-backend = "hatchling.build"
357
+ await fs.writeFile(path.join(dir, 'pyproject.toml'), `[project]
358
+ name = "${config.name}"
359
+ version = "0.1.0"
360
+ requires-python = ">=3.11"
361
+ dependencies = ["mcp>=1.0.0"]
362
+
363
+ [build-system]
364
+ requires = ["hatchling"]
365
+ build-backend = "hatchling.build"
347
366
  `);
348
367
  }
349
368
  }
@@ -413,92 +432,92 @@ async function writeGraphragConfig(dir, config) {
413
432
  const { graphrag } = config;
414
433
  let content;
415
434
  if (graphrag === 'sqlite') {
416
- content = `# DARE Knowledge Graph — SQLite
417
- backend: sqlite
418
-
419
- sqlite:
420
- path: .dare/graph.db
421
-
422
- # Node types tracked in the graph
423
- nodes:
424
- - task
425
- - file
426
- - schema
427
- - endpoint
428
- - component
429
- - entity
430
- - concept
431
-
432
- # Relationship types
433
- edges:
434
- - depends_on
435
- - implements
436
- - uses
437
- - references
438
- - related_to
439
- - contains
440
- - extends
435
+ content = `# DARE Knowledge Graph — SQLite
436
+ backend: sqlite
437
+
438
+ sqlite:
439
+ path: .dare/graph.db
440
+
441
+ # Node types tracked in the graph
442
+ nodes:
443
+ - task
444
+ - file
445
+ - schema
446
+ - endpoint
447
+ - component
448
+ - entity
449
+ - concept
450
+
451
+ # Relationship types
452
+ edges:
453
+ - depends_on
454
+ - implements
455
+ - uses
456
+ - references
457
+ - related_to
458
+ - contains
459
+ - extends
441
460
  `;
442
461
  }
443
462
  else if (graphrag === 'neo4j') {
444
- content = `# DARE Knowledge Graph — Neo4j
445
- backend: neo4j
446
-
447
- neo4j:
448
- url: http://localhost:7474 # Neo4j HTTP API endpoint (not Bolt)
449
- database: dare # database name
450
- username: neo4j
451
- password: password
452
- # auth: "Bearer <token>" # alternative to username/password
453
-
454
- # Node types tracked in the graph
455
- nodes:
456
- - task
457
- - file
458
- - schema
459
- - endpoint
460
- - component
461
- - entity
462
- - concept
463
-
464
- # Relationship types
465
- edges:
466
- - depends_on
467
- - implements
468
- - uses
469
- - references
470
- - related_to
471
- - contains
472
- - extends
463
+ content = `# DARE Knowledge Graph — Neo4j
464
+ backend: neo4j
465
+
466
+ neo4j:
467
+ url: http://localhost:7474 # Neo4j HTTP API endpoint (not Bolt)
468
+ database: dare # database name
469
+ username: neo4j
470
+ password: password
471
+ # auth: "Bearer <token>" # alternative to username/password
472
+
473
+ # Node types tracked in the graph
474
+ nodes:
475
+ - task
476
+ - file
477
+ - schema
478
+ - endpoint
479
+ - component
480
+ - entity
481
+ - concept
482
+
483
+ # Relationship types
484
+ edges:
485
+ - depends_on
486
+ - implements
487
+ - uses
488
+ - references
489
+ - related_to
490
+ - contains
491
+ - extends
473
492
  `;
474
493
  }
475
494
  else {
476
495
  // json
477
- content = `# DARE Knowledge Graph — JSON
478
- backend: json
479
-
480
- json:
481
- path: .dare/graph.json
482
-
483
- # Node types tracked in the graph
484
- nodes:
485
- - task
486
- - file
487
- - schema
488
- - endpoint
489
- - component
490
- - entity
491
- - concept
492
-
493
- # Relationship types
494
- edges:
495
- - depends_on
496
- - implements
497
- - uses
498
- - references
499
- - related_to
500
- - contains
501
- - extends
496
+ content = `# DARE Knowledge Graph — JSON
497
+ backend: json
498
+
499
+ json:
500
+ path: .dare/graph.json
501
+
502
+ # Node types tracked in the graph
503
+ nodes:
504
+ - task
505
+ - file
506
+ - schema
507
+ - endpoint
508
+ - component
509
+ - entity
510
+ - concept
511
+
512
+ # Relationship types
513
+ edges:
514
+ - depends_on
515
+ - implements
516
+ - uses
517
+ - references
518
+ - related_to
519
+ - contains
520
+ - extends
502
521
  `;
503
522
  }
504
523
  const destPath = path.join(dir, 'dare-graph.yml');
@@ -620,27 +639,27 @@ async function generateFrontendTemplate(dir, stack, projectName = 'frontend') {
620
639
  }
621
640
  function generateMcpStackSkill(language) {
622
641
  if (language === 'python') {
623
- return `---
624
- description: Python MCP server development skill
625
- ---
626
- # Python MCP Skill
627
- - Use FastMCP for rapid server development
628
- - Decorate tools with @mcp.tool(), resources with @mcp.resource(), prompts with @mcp.prompt()
629
- - Use type hints — FastMCP derives the JSON schema automatically
630
- - Test with: npx @modelcontextprotocol/inspector python main.py
631
- - Use mcp.run() for stdio, mcp.run(transport="sse") for SSE
642
+ return `---
643
+ description: Python MCP server development skill
644
+ ---
645
+ # Python MCP Skill
646
+ - Use FastMCP for rapid server development
647
+ - Decorate tools with @mcp.tool(), resources with @mcp.resource(), prompts with @mcp.prompt()
648
+ - Use type hints — FastMCP derives the JSON schema automatically
649
+ - Test with: npx @modelcontextprotocol/inspector python main.py
650
+ - Use mcp.run() for stdio, mcp.run(transport="sse") for SSE
632
651
  `;
633
652
  }
634
- return `---
635
- description: Node.js/TypeScript MCP server development skill
636
- ---
637
- # TypeScript MCP Skill
638
- - Import Server from @modelcontextprotocol/sdk/server/index.js
639
- - Use StdioServerTransport for CLI tools, SSEServerTransport for web integrations
640
- - Define tools with ListToolsRequestSchema + CallToolRequestSchema handlers
641
- - Keep inputSchema strict — Claude uses it to call your tools correctly
642
- - Test with: npm run inspect (uses @modelcontextprotocol/inspector)
643
- - Build before shipping: npm run build
653
+ return `---
654
+ description: Node.js/TypeScript MCP server development skill
655
+ ---
656
+ # TypeScript MCP Skill
657
+ - Import Server from @modelcontextprotocol/sdk/server/index.js
658
+ - Use StdioServerTransport for CLI tools, SSEServerTransport for web integrations
659
+ - Define tools with ListToolsRequestSchema + CallToolRequestSchema handlers
660
+ - Keep inputSchema strict — Claude uses it to call your tools correctly
661
+ - Test with: npm run inspect (uses @modelcontextprotocol/inspector)
662
+ - Build before shipping: npm run build
644
663
  `;
645
664
  }
646
665
  // ─────────────────────────────────────────────────────────────────────────────
@@ -819,9 +838,9 @@ async function createRustFullstackWorkspace(outputDir, projectName, layout, fron
819
838
  ].join('\n'));
820
839
  // Root .cargo/config.toml guard
821
840
  await fs.ensureDir(path.join(outputDir, '.cargo'));
822
- await fs.writeFile(path.join(outputDir, '.cargo', 'config.toml'), `# DARE: Do NOT add a global [build] target here.
823
- # This workspace mixes Leptos WASM crates with native Axum crates.
824
- # A global target breaks one or the other — cargo-leptos manages wasm32 internally.
841
+ await fs.writeFile(path.join(outputDir, '.cargo', 'config.toml'), `# DARE: Do NOT add a global [build] target here.
842
+ # This workspace mixes Leptos WASM crates with native Axum crates.
843
+ # A global target breaks one or the other — cargo-leptos manages wasm32 internally.
825
844
  `);
826
845
  // Multi-crate: create core and cli scaffold crates
827
846
  if (layout === 'multi') {
@@ -902,38 +921,38 @@ async function createCliCrate(outputDir, slug) {
902
921
  }
903
922
  function generateStackSkill(stack) {
904
923
  const skills = {
905
- 'rust-leptos': `---
906
- description: Leptos fullstack (SSR + WASM) development skill
907
- ---
908
- # Leptos Fullstack Skill
909
- - Use \`#[component]\` macro for all components — no class components
910
- - State: \`signal()\` (RwSignal), \`ReadSignal\`/\`WriteSignal\` — fine-grained reactivity
911
- - Async data: \`Resource\` for fetching, never \`Effect\` that calls fetch
912
- - Mutations: \`Action\` for server calls (forms, submits)
913
- - Loading states: \`Suspense\` and \`Transition\` — never block the render
914
- - Conditionals: \`Show\`, \`For\` components — not if/for in view!
915
- - Server functions: \`#[server]\` macro — only available with \`ssr\` feature
916
- - Shared types (server + WASM): use \`#[cfg_attr(feature = "ssr", derive(sqlx::FromRow))]\`
917
- - Avoid: \`tokio::spawn\` on client (no async runtime in WASM), \`panic!\` in components, \`wasm_bindgen\` direct
918
- - Build: \`cargo leptos build\` (not \`cargo build\`)
919
- - Test: \`cargo test --workspace\` (not \`cargo leptos test\` — that doesn't exist)
920
- - Lint: \`cargo clippy --all-targets --all-features -- -D warnings && cargo fmt --check\`
921
- - Dev server: \`cargo leptos watch\` (port 3000 + hot reload on port 3001)
924
+ 'rust-leptos': `---
925
+ description: Leptos fullstack (SSR + WASM) development skill
926
+ ---
927
+ # Leptos Fullstack Skill
928
+ - Use \`#[component]\` macro for all components — no class components
929
+ - State: \`signal()\` (RwSignal), \`ReadSignal\`/\`WriteSignal\` — fine-grained reactivity
930
+ - Async data: \`Resource\` for fetching, never \`Effect\` that calls fetch
931
+ - Mutations: \`Action\` for server calls (forms, submits)
932
+ - Loading states: \`Suspense\` and \`Transition\` — never block the render
933
+ - Conditionals: \`Show\`, \`For\` components — not if/for in view!
934
+ - Server functions: \`#[server]\` macro — only available with \`ssr\` feature
935
+ - Shared types (server + WASM): use \`#[cfg_attr(feature = "ssr", derive(sqlx::FromRow))]\`
936
+ - Avoid: \`tokio::spawn\` on client (no async runtime in WASM), \`panic!\` in components, \`wasm_bindgen\` direct
937
+ - Build: \`cargo leptos build\` (not \`cargo build\`)
938
+ - Test: \`cargo test --workspace\` (not \`cargo leptos test\` — that doesn't exist)
939
+ - Lint: \`cargo clippy --all-targets --all-features -- -D warnings && cargo fmt --check\`
940
+ - Dev server: \`cargo leptos watch\` (port 3000 + hot reload on port 3001)
922
941
  `,
923
- 'rust-leptos-csr': `---
924
- description: Leptos CSR (WASM + trunk) development skill
925
- ---
926
- # Leptos CSR Skill
927
- - Pure client-side WASM — no server rendering, no \`#[server]\` functions
928
- - Use \`#[component]\` macro for all components
929
- - State: \`signal()\`, \`create_memo()\` for derived state
930
- - Async data: \`Resource\` — never \`Effect\` that calls fetch
931
- - Entry point: \`leptos::mount::mount_to_body(App)\` called from \`main()\`
932
- - Build tool: \`trunk build\` (NOT \`cargo leptos build\` — wrong tool for CSR)
933
- - Dev server: \`trunk serve\` (port 3001 by default, configured in Trunk.toml)
934
- - Test: \`cargo test --workspace\`
935
- - Lint: \`cargo clippy --all-targets --all-features -- -D warnings && cargo fmt --check\`
936
- - Deploy: \`trunk build --release\` produces \`dist/\` — static files, deployable to any CDN
942
+ 'rust-leptos-csr': `---
943
+ description: Leptos CSR (WASM + trunk) development skill
944
+ ---
945
+ # Leptos CSR Skill
946
+ - Pure client-side WASM — no server rendering, no \`#[server]\` functions
947
+ - Use \`#[component]\` macro for all components
948
+ - State: \`signal()\`, \`create_memo()\` for derived state
949
+ - Async data: \`Resource\` — never \`Effect\` that calls fetch
950
+ - Entry point: \`leptos::mount::mount_to_body(App)\` called from \`main()\`
951
+ - Build tool: \`trunk build\` (NOT \`cargo leptos build\` — wrong tool for CSR)
952
+ - Dev server: \`trunk serve\` (port 3001 by default, configured in Trunk.toml)
953
+ - Test: \`cargo test --workspace\`
954
+ - Lint: \`cargo clippy --all-targets --all-features -- -D warnings && cargo fmt --check\`
955
+ - Deploy: \`trunk build --release\` produces \`dist/\` — static files, deployable to any CDN
937
956
  `,
938
957
  'rust-axum': `---\ndescription: Rust/Axum API development skill\n---\n# Rust/Axum Skill\n- Use Axum for HTTP routing\n- Use Tokio for async runtime\n- Use SQLx for database\n- Run clippy and cargo test\n`,
939
958
  'go-gin': `---\ndescription: Go/Gin API development skill\n---\n# Go + Gin Skill\n- Use Gin for HTTP routing (github.com/gin-gonic/gin)\n- Project layout: cmd/api/main.go (entrypoint), internal/handlers, internal/middleware, internal/services, internal/repository\n- Use context.Context propagation in every handler/service\n- Use struct tags for binding/validation (binding:"required" on DTOs)\n- For SQL: prefer database/sql + sqlx, parametrize ALL queries, no string concat\n- Errors: return wrapped errors (fmt.Errorf("...: %w", err)), not panics\n- Tests: use net/http/httptest + table-driven tests; place *_test.go alongside the package\n- Ralph Loop: \`go build ./...\`, \`go test ./...\`, \`go vet ./...\`\n`,