@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
@@ -57,74 +57,74 @@ describe('dare validate', () => {
57
57
  expect(stdout).toMatch(/Invalid id/);
58
58
  });
59
59
  });
60
- const validYaml = `title: "ok"
61
- version: "1.0.0"
62
- models:
63
- cursor: { HIGH: a, MED: b, LOW: c }
64
- tasks:
65
- - id: task-001
66
- title: "First"
67
- depends_on: []
68
- complexity: LOW
69
- subtask_prompt: "go"
70
- - id: task-002
71
- title: "Second"
72
- depends_on: []
73
- complexity: LOW
74
- subtask_prompt: "go"
60
+ const validYaml = `title: "ok"
61
+ version: "1.0.0"
62
+ models:
63
+ cursor: { HIGH: a, MED: b, LOW: c }
64
+ tasks:
65
+ - id: task-001
66
+ title: "First"
67
+ depends_on: []
68
+ complexity: LOW
69
+ subtask_prompt: "go"
70
+ - id: task-002
71
+ title: "Second"
72
+ depends_on: []
73
+ complexity: LOW
74
+ subtask_prompt: "go"
75
75
  `;
76
- const dupIdYaml = `title: "dup"
77
- version: "1.0.0"
78
- models:
79
- cursor: { HIGH: a, MED: b, LOW: c }
80
- tasks:
81
- - id: task-001
82
- title: "A"
83
- depends_on: []
84
- complexity: LOW
85
- subtask_prompt: "go"
86
- - id: task-001
87
- title: "B"
88
- depends_on: []
89
- complexity: LOW
90
- subtask_prompt: "go"
76
+ const dupIdYaml = `title: "dup"
77
+ version: "1.0.0"
78
+ models:
79
+ cursor: { HIGH: a, MED: b, LOW: c }
80
+ tasks:
81
+ - id: task-001
82
+ title: "A"
83
+ depends_on: []
84
+ complexity: LOW
85
+ subtask_prompt: "go"
86
+ - id: task-001
87
+ title: "B"
88
+ depends_on: []
89
+ complexity: LOW
90
+ subtask_prompt: "go"
91
91
  `;
92
- const unknownDepYaml = `title: "missing"
93
- version: "1.0.0"
94
- models:
95
- cursor: { HIGH: a, MED: b, LOW: c }
96
- tasks:
97
- - id: task-001
98
- title: "A"
99
- depends_on: [task-999]
100
- complexity: LOW
101
- subtask_prompt: "go"
92
+ const unknownDepYaml = `title: "missing"
93
+ version: "1.0.0"
94
+ models:
95
+ cursor: { HIGH: a, MED: b, LOW: c }
96
+ tasks:
97
+ - id: task-001
98
+ title: "A"
99
+ depends_on: [task-999]
100
+ complexity: LOW
101
+ subtask_prompt: "go"
102
102
  `;
103
- const cycleYaml = `title: "cycle"
104
- version: "1.0.0"
105
- models:
106
- cursor: { HIGH: a, MED: b, LOW: c }
107
- tasks:
108
- - id: task-001
109
- title: "A"
110
- depends_on: [task-002]
111
- complexity: LOW
112
- subtask_prompt: "go"
113
- - id: task-002
114
- title: "B"
115
- depends_on: [task-001]
116
- complexity: LOW
117
- subtask_prompt: "go"
103
+ const cycleYaml = `title: "cycle"
104
+ version: "1.0.0"
105
+ models:
106
+ cursor: { HIGH: a, MED: b, LOW: c }
107
+ tasks:
108
+ - id: task-001
109
+ title: "A"
110
+ depends_on: [task-002]
111
+ complexity: LOW
112
+ subtask_prompt: "go"
113
+ - id: task-002
114
+ title: "B"
115
+ depends_on: [task-001]
116
+ complexity: LOW
117
+ subtask_prompt: "go"
118
118
  `;
119
- const badIdYaml = `title: "bad-id"
120
- version: "1.0.0"
121
- models:
122
- cursor: { HIGH: a, MED: b, LOW: c }
123
- tasks:
124
- - id: Task_001
125
- title: "Wrong case"
126
- depends_on: []
127
- complexity: LOW
128
- subtask_prompt: "go"
119
+ const badIdYaml = `title: "bad-id"
120
+ version: "1.0.0"
121
+ models:
122
+ cursor: { HIGH: a, MED: b, LOW: c }
123
+ tasks:
124
+ - id: Task_001
125
+ title: "Wrong case"
126
+ depends_on: []
127
+ complexity: LOW
128
+ subtask_prompt: "go"
129
129
  `;
130
130
  //# sourceMappingURL=validate.test.js.map
package/dist/bin/dare.js CHANGED
@@ -6,21 +6,36 @@ import { designCommand } from '../commands/design.js';
6
6
  import { blueprintCommand } from '../commands/blueprint.js';
7
7
  import { executeCommand } from '../commands/execute.js';
8
8
  import { discoverCommand } from '../commands/discover.js';
9
+ import { reverseCommand } from '../commands/reverse.js';
10
+ import { dnaCommand } from '../commands/dna.js';
11
+ import { migrateCommand } from '../commands/migrate.js';
9
12
  import { graphCommand } from '../commands/graph.js';
10
13
  import { dagCommand } from '../commands/dag.js';
11
14
  import { infoCommand } from '../commands/info.js';
12
15
  import { validateCommand } from '../commands/validate.js';
13
16
  import { bootstrapCommand } from '../commands/bootstrap.js';
17
+ import { updateCommand } from '../commands/update.js';
18
+ import { reviewCommand } from '../commands/review.js';
19
+ import { refineCommand } from '../commands/refine.js';
20
+ import { newCommand } from '../commands/new.js';
21
+ import { skillCommand } from '../skills/index.js';
22
+ import { welcomeCommand } from '../commands/welcome.js';
23
+ import { printBanner } from '../utils/banner.js';
14
24
  const require = createRequire(import.meta.url);
15
25
  const { version } = require('../../package.json');
16
26
  const program = new Command();
17
27
  program
18
28
  .name('dare')
19
- .description('DARE Framework - Design, Architect, Review, Execute methodology for AI-assisted development')
20
- .version(version);
29
+ .description('DARE Framework - Design · Architecture · Review · Execute methodology for AI-assisted development')
30
+ .version(version)
31
+ .option('--no-banner', 'Suppress ASCII art banner');
32
+ program.addCommand(newCommand);
21
33
  program.addCommand(initCommand);
22
34
  program.addCommand(bootstrapCommand);
23
35
  program.addCommand(discoverCommand);
36
+ program.addCommand(reverseCommand);
37
+ program.addCommand(dnaCommand);
38
+ program.addCommand(migrateCommand);
24
39
  program.addCommand(designCommand);
25
40
  program.addCommand(blueprintCommand);
26
41
  program.addCommand(executeCommand);
@@ -28,8 +43,28 @@ program.addCommand(graphCommand);
28
43
  program.addCommand(dagCommand);
29
44
  program.addCommand(validateCommand);
30
45
  program.addCommand(infoCommand);
31
- program.parse(process.argv);
46
+ program.addCommand(updateCommand);
47
+ program.addCommand(reviewCommand);
48
+ program.addCommand(refineCommand);
49
+ program.addCommand(skillCommand);
50
+ program.addCommand(welcomeCommand);
51
+ // Show banner + help when invoked with no subcommand
32
52
  if (!process.argv.slice(2).length) {
53
+ printBanner();
54
+ program.parse(process.argv);
33
55
  program.outputHelp();
34
56
  }
57
+ else {
58
+ // Check for --no-banner early before Commander strips it
59
+ const noBanner = process.argv.includes('--no-banner');
60
+ if (!noBanner) {
61
+ // Show banner only for banner-eligible commands
62
+ const BANNER_COMMANDS = ['new', '--version', '-V'];
63
+ const firstArg = process.argv[2] ?? '';
64
+ if (BANNER_COMMANDS.includes(firstArg)) {
65
+ printBanner();
66
+ }
67
+ }
68
+ program.parse(process.argv);
69
+ }
35
70
  //# sourceMappingURL=dare.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dare.js","sourceRoot":"","sources":["../../src/bin/dare.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,6FAA6F,CAAC;KAC1G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"dare.js","sourceRoot":"","sources":["../../src/bin/dare.ts"],"names":[],"mappings":"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"}
@@ -128,43 +128,43 @@ async function writeIfMissing(target, content, force) {
128
128
  await fs.writeFile(target, content);
129
129
  }
130
130
  function renderBlueprint(generatedAt) {
131
- return `# BLUEPRINT
132
-
133
- ## Architecture Overview
134
- > Generated from DESIGN.md — fill in with the AI agent (\`/dare-blueprint\` / skill \`dare-blueprint\`).
135
-
136
- ## Technology Stack
137
- - **Backend:** To be defined
138
- - **Frontend:** To be defined
139
- - **Database:** To be defined
140
- - **Infrastructure:** To be defined
141
-
142
- ## Modules
143
- ### Module 1: Core
144
- - Description
145
- - Endpoints
146
- - Data models
147
-
148
- ## API Contracts
149
- \`\`\`yaml
150
- openapi: 3.0.0
151
- info:
152
- title: Project API
153
- version: 0.1.0
154
- \`\`\`
155
-
156
- ## Database Schema
157
- \`\`\`sql
158
- -- Tables to be defined
159
- \`\`\`
160
-
161
- ## Strategy
162
- - **Testing:** unit + integration; coverage target
163
- - **Deploy:** env, infra targets, CI/CD
164
- - **Security:** OWASP Top 10 baseline + stack-specific
165
-
166
- ---
167
- *Scaffolded by DARE Framework — ${generatedAt}*
131
+ return `# BLUEPRINT
132
+
133
+ ## Architecture Overview
134
+ > Generated from DESIGN.md — fill in with the AI agent (\`/dare-blueprint\` / skill \`dare-blueprint\`).
135
+
136
+ ## Technology Stack
137
+ - **Backend:** To be defined
138
+ - **Frontend:** To be defined
139
+ - **Database:** To be defined
140
+ - **Infrastructure:** To be defined
141
+
142
+ ## Modules
143
+ ### Module 1: Core
144
+ - Description
145
+ - Endpoints
146
+ - Data models
147
+
148
+ ## API Contracts
149
+ \`\`\`yaml
150
+ openapi: 3.0.0
151
+ info:
152
+ title: Project API
153
+ version: 0.1.0
154
+ \`\`\`
155
+
156
+ ## Database Schema
157
+ \`\`\`sql
158
+ -- Tables to be defined
159
+ \`\`\`
160
+
161
+ ## Strategy
162
+ - **Testing:** unit + integration; coverage target
163
+ - **Deploy:** env, infra targets, CI/CD
164
+ - **Security:** OWASP Top 10 baseline + stack-specific
165
+
166
+ ---
167
+ *Scaffolded by DARE Framework — ${generatedAt}*
168
168
  `;
169
169
  }
170
170
  function renderDag(tasks, generatedAt) {
@@ -186,24 +186,24 @@ function renderDag(tasks, generatedAt) {
186
186
  ].join('\n');
187
187
  })
188
188
  .join('\n\n');
189
- return `title: "Project - Development Tasks"
190
- version: "1.0.0"
191
- generated: "${generatedAt}"
192
-
193
- # Limites alinhados com Cursor SDK DAG runner
194
- limits:
195
- parent_context_chars: 2000 # snippet de output de cada pai injetado no filho
196
- task_output_chars: 4000 # cap do output capturado por task
197
- timeout_seconds: 600 # AbortController por task
198
-
199
- # Mapeamento complexity → modelo, por runner
200
- models:
201
- cursor: { HIGH: gpt-5.3-codex, MED: composer-2, LOW: auto-low }
202
- claude: { HIGH: claude-sonnet-4-5, MED: claude-haiku-4, LOW: claude-haiku-4 }
203
- antigravity: { HIGH: gemini-2.5-pro, MED: gemini-2.5-flash, LOW: gemini-2.5-flash }
204
-
205
- tasks:
206
- ${tasksYaml}
189
+ return `title: "Project - Development Tasks"
190
+ version: "1.0.0"
191
+ generated: "${generatedAt}"
192
+
193
+ # Limites alinhados com Cursor SDK DAG runner
194
+ limits:
195
+ parent_context_chars: 2000 # snippet de output de cada pai injetado no filho
196
+ task_output_chars: 4000 # cap do output capturado por task
197
+ timeout_seconds: 600 # AbortController por task
198
+
199
+ # Mapeamento complexity → modelo, por runner
200
+ models:
201
+ cursor: { HIGH: gpt-5.3-codex, MED: composer-2, LOW: auto-low }
202
+ claude: { HIGH: claude-sonnet-4-5, MED: claude-haiku-4, LOW: claude-haiku-4 }
203
+ antigravity: { HIGH: gemini-2.5-pro, MED: gemini-2.5-flash, LOW: gemini-2.5-flash }
204
+
205
+ tasks:
206
+ ${tasksYaml}
207
207
  `;
208
208
  }
209
209
  function renderTasksMd(tasks, generatedAt) {
@@ -213,77 +213,77 @@ function renderTasksMd(tasks, generatedAt) {
213
213
  return `| ${t.id} | ${t.title} | ⏳ PENDING | ${deps} | ${t.complexity} |`;
214
214
  })
215
215
  .join('\n');
216
- return `# TASKS
217
-
218
- ## Status Legend
219
- - ⏳ PENDING
220
- - 🔄 RUNNING
221
- - ✅ DONE
222
- - ❌ FAILED
223
- - ⏭️ SKIPPED
224
-
225
- ## Tasks
226
-
227
- | ID | Title | Status | Depends On | Complexity |
228
- |----|-------|--------|------------|------------|
229
- ${rows}
230
-
231
- ## How to execute
232
-
233
- Paralelo (recomendado):
234
- \`\`\`bash
235
- dare execute --parallel
236
- \`\`\`
237
-
238
- Task única:
239
- \`\`\`bash
240
- dare execute --task task-001
241
- \`\`\`
242
-
243
- Resume (apenas PENDING/FAILED):
244
- \`\`\`bash
245
- dare execute --parallel --resume
246
- \`\`\`
247
-
248
- ---
249
- *Scaffolded by DARE Framework — ${generatedAt}*
216
+ return `# TASKS
217
+
218
+ ## Status Legend
219
+ - ⏳ PENDING
220
+ - 🔄 RUNNING
221
+ - ✅ DONE
222
+ - ❌ FAILED
223
+ - ⏭️ SKIPPED
224
+
225
+ ## Tasks
226
+
227
+ | ID | Title | Status | Depends On | Complexity |
228
+ |----|-------|--------|------------|------------|
229
+ ${rows}
230
+
231
+ ## How to execute
232
+
233
+ Paralelo (recomendado):
234
+ \`\`\`bash
235
+ dare execute --parallel
236
+ \`\`\`
237
+
238
+ Task única:
239
+ \`\`\`bash
240
+ dare execute --task task-001
241
+ \`\`\`
242
+
243
+ Resume (apenas PENDING/FAILED):
244
+ \`\`\`bash
245
+ dare execute --parallel --resume
246
+ \`\`\`
247
+
248
+ ---
249
+ *Scaffolded by DARE Framework — ${generatedAt}*
250
250
  `;
251
251
  }
252
252
  function renderTaskSpec(t) {
253
253
  const deps = t.deps.length === 0 ? 'None' : t.deps.join(', ');
254
- return `# ${t.id}: ${t.title}
255
-
256
- ## Objective
257
- ${t.prompt.split('\n')[0]}
258
-
259
- ## Description
260
- ${t.prompt}
261
-
262
- ## Dependencies
263
- ${deps}
264
-
265
- ## Complexity
266
- ${t.complexity}
267
-
268
- ## Files to create / modify
269
- - _List the concrete files this task touches._
270
-
271
- ## Validation Gates
272
- - [ ] Build passes
273
- - [ ] Tests pass
274
- - [ ] Lint clean
275
- - [ ] _Stack-specific gate (e.g. \`php artisan test\`, \`pytest\`, \`cargo test\`)_
276
-
277
- ## Tests
278
- \`\`\`bash
279
- # Stack-specific test command
280
- \`\`\`
281
-
282
- ## Security
283
- - _OWASP considerations for this task_
284
-
285
- ## Next task
286
- - _Suggested follow-up_
254
+ return `# ${t.id}: ${t.title}
255
+
256
+ ## Objective
257
+ ${t.prompt.split('\n')[0]}
258
+
259
+ ## Description
260
+ ${t.prompt}
261
+
262
+ ## Dependencies
263
+ ${deps}
264
+
265
+ ## Complexity
266
+ ${t.complexity}
267
+
268
+ ## Files to create / modify
269
+ - _List the concrete files this task touches._
270
+
271
+ ## Validation Gates
272
+ - [ ] Build passes
273
+ - [ ] Tests pass
274
+ - [ ] Lint clean
275
+ - [ ] _Stack-specific gate (e.g. \`php artisan test\`, \`pytest\`, \`cargo test\`)_
276
+
277
+ ## Tests
278
+ \`\`\`bash
279
+ # Stack-specific test command
280
+ \`\`\`
281
+
282
+ ## Security
283
+ - _OWASP considerations for this task_
284
+
285
+ ## Next task
286
+ - _Suggested follow-up_
287
287
  `;
288
288
  }
289
289
  //# sourceMappingURL=blueprint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../../src/commands/dag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAEL,KAAK,GAAG,EAGT,MAAM,0BAA0B,CAAC;AAUlC;;;;GAIG;AACH,eAAO,MAAM,UAAU,SAEtB,CAAC;AA6FF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CA6CjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAyC7C"}
1
+ {"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../../src/commands/dag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EACL,KAAK,GAAG,EAGT,MAAM,0BAA0B,CAAC;AAgBlC;;;;GAIG;AACH,eAAO,MAAM,UAAU,SAEtB,CAAC;AAiHF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAejD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAY7C"}
@@ -3,9 +3,9 @@ import chalk from 'chalk';
3
3
  import fs from 'fs-extra';
4
4
  import path from 'path';
5
5
  import { convertYamlToDag } from '../utils/dag-converter.js';
6
- import { computeRanks, } from '../dag-runner/run_dag.js';
7
6
  import { DEFAULT_STATE_PATH, loadAndApplyState, } from '../dag-runner/state-store.js';
8
7
  import { renderDagExcalidraw, serializeExcalidraw, } from '../utils/excalidraw-renderer.js';
8
+ import { renderGraphMermaid, renderGraphDot, escapeMermaid, } from '../utils/graph-renderer.js';
9
9
  /**
10
10
  * `dare dag` — inspect and visualize the static task DAG declared in
11
11
  * `dare-dag.yaml`. Distinct from `dare graph`, which inspects the populated
@@ -76,90 +76,54 @@ const MERMAID_CLASSES = [
76
76
  'classDef st_failed fill:#fee2e2,stroke:#dc2626,color:#7f1d1d;',
77
77
  'classDef st_skipped fill:#e5e7eb,stroke:#6b7280,color:#374151;',
78
78
  ];
79
+ const DOT_FILL = {
80
+ PENDING: '#f3f4f6',
81
+ RUNNING: '#dbeafe',
82
+ DONE: '#dcfce7',
83
+ FAILED: '#fee2e2',
84
+ SKIPPED: '#e5e7eb',
85
+ };
86
+ const DOT_BORDER = {
87
+ PENDING: '#9ca3af',
88
+ RUNNING: '#2563eb',
89
+ DONE: '#16a34a',
90
+ FAILED: '#dc2626',
91
+ SKIPPED: '#6b7280',
92
+ };
93
+ function taskLabelLines(task) {
94
+ const status = task.status ?? 'PENDING';
95
+ return [task.id, task.title, `${STATUS_ICON[status]} ${status}`];
96
+ }
79
97
  export function renderDagMermaid(dag) {
80
- const lines = [
81
- `%% DARE DAG — ${escapeMermaid(dag.title)}`,
82
- `%% Generated: ${new Date().toISOString()}`,
83
- 'graph LR',
84
- ];
85
- // Group nodes by rank using subgraphs so the diagram visually flows by rank
86
- const ranks = computeRanks(dag.tasks);
87
- const byRank = new Map();
88
- for (const task of dag.tasks) {
89
- const r = ranks.get(task.id) ?? 0;
90
- if (!byRank.has(r))
91
- byRank.set(r, []);
92
- byRank.get(r).push(task);
93
- }
94
- const sortedRanks = [...byRank.keys()].sort((a, b) => a - b);
95
- for (const r of sortedRanks) {
96
- lines.push(` subgraph rank_${r} ["Rank ${r}"]`);
97
- lines.push(` direction TB`);
98
- for (const task of byRank.get(r)) {
99
- const id = sanitizeId(task.id);
100
- const status = task.status ?? 'PENDING';
101
- const icon = STATUS_ICON[status];
102
- const label = `${task.id}\\n${escapeMermaid(task.title)}\\n${icon} ${status}`;
103
- lines.push(` ${id}["${label}"]`);
104
- }
105
- lines.push(' end');
106
- }
107
- // Edges
108
- for (const task of dag.tasks) {
109
- for (const dep of task.depends_on) {
110
- lines.push(` ${sanitizeId(dep)} --> ${sanitizeId(task.id)}`);
111
- }
112
- }
113
- // Status classes
114
- for (const task of dag.tasks) {
115
- const status = task.status ?? 'PENDING';
116
- lines.push(` class ${sanitizeId(task.id)} st_${status.toLowerCase()};`);
117
- }
118
- for (const cls of MERMAID_CLASSES)
119
- lines.push(` ${cls}`);
120
- return lines.join('\n');
98
+ const nodes = dag.tasks.map((task) => ({
99
+ id: task.id,
100
+ depends_on: task.depends_on,
101
+ labelLines: taskLabelLines(task),
102
+ bg: '',
103
+ stroke: '',
104
+ mermaidClass: `st_${(task.status ?? 'PENDING').toLowerCase()}`,
105
+ }));
106
+ return renderGraphMermaid(nodes, {
107
+ headerComment: `DARE DAG — ${escapeMermaid(dag.title)}`,
108
+ direction: 'LR',
109
+ styling: 'class',
110
+ classDefs: MERMAID_CLASSES,
111
+ });
121
112
  }
122
113
  export function renderDagDot(dag) {
123
- const lines = [
124
- 'digraph DareDAG {',
125
- ' rankdir=LR;',
126
- ' node [shape=box style=filled fontname=Helvetica];',
127
- ];
128
- const colors = {
129
- PENDING: '"#f3f4f6"',
130
- RUNNING: '"#dbeafe"',
131
- DONE: '"#dcfce7"',
132
- FAILED: '"#fee2e2"',
133
- SKIPPED: '"#e5e7eb"',
134
- };
135
- const borders = {
136
- PENDING: '"#9ca3af"',
137
- RUNNING: '"#2563eb"',
138
- DONE: '"#16a34a"',
139
- FAILED: '"#dc2626"',
140
- SKIPPED: '"#6b7280"',
141
- };
142
- for (const task of dag.tasks) {
114
+ const nodes = dag.tasks.map((task) => {
143
115
  const status = task.status ?? 'PENDING';
144
- const id = JSON.stringify(task.id);
145
- const label = JSON.stringify(`${task.id}\n${task.title}\n${STATUS_ICON[status]} ${status}`);
146
- lines.push(` ${id} [label=${label} fillcolor=${colors[status]} color=${borders[status]}];`);
147
- }
148
- for (const task of dag.tasks) {
149
- for (const dep of task.depends_on) {
150
- lines.push(` ${JSON.stringify(dep)} -> ${JSON.stringify(task.id)};`);
151
- }
152
- }
153
- lines.push('}');
154
- return lines.join('\n');
116
+ return {
117
+ id: task.id,
118
+ depends_on: task.depends_on,
119
+ labelLines: taskLabelLines(task),
120
+ bg: DOT_FILL[status],
121
+ stroke: DOT_BORDER[status],
122
+ };
123
+ });
124
+ return renderGraphDot(nodes, { name: 'DareDAG' });
155
125
  }
156
126
  // ─── Helpers ────────────────────────────────────────────────────────────────
157
- function sanitizeId(id) {
158
- return id.replace(/[^a-zA-Z0-9_]/g, '_');
159
- }
160
- function escapeMermaid(s) {
161
- return s.replace(/"/g, '"').replace(/[\r\n]+/g, ' ');
162
- }
163
127
  function countEdges(dag) {
164
128
  return dag.tasks.reduce((sum, t) => sum + t.depends_on.length, 0);
165
129
  }