@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
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Types for `dare refine` — the planning-time and on-demand check that
3
+ * keeps individual tasks small enough for the agent to implement in a
4
+ * single conversation without hand-waving.
5
+ *
6
+ * Two ways to invoke it:
7
+ * 1. Implicit (during `/dare-tasks` skill): the IDE agent calls
8
+ * `dare refine <task-id>` for each just-generated task and uses the
9
+ * report to decide whether to split or keep.
10
+ * 2. Manual (`dare refine <id> [--split]`): the dev kicks it off when a
11
+ * task feels too heavy or after a scope change.
12
+ *
13
+ * The complexity heuristic is intentionally cheap and deterministic — it
14
+ * counts well-known signals from the task spec (files, functions, tests,
15
+ * deps, prompt keywords). The IDE agent layer can add semantic nuance with
16
+ * `--from-agent <verdict.json>`, mirroring the review pattern.
17
+ */
18
+ /** Coarse complexity buckets. Stable strings for cross-process consumers. */
19
+ export type ComplexityLevel = 'LOW' | 'MED' | 'HIGH' | 'CRITICAL';
20
+ /** Individual contributor to the total score. Used for transparency. */
21
+ export interface ComplexitySignal {
22
+ /** Short, lowercase id. Examples: `files`, `functions`, `keywords`. */
23
+ kind: string;
24
+ /** Numeric weight added to the score. */
25
+ weight: number;
26
+ /** Human-readable explanation: "5 arquivos a criar/modificar". */
27
+ detail: string;
28
+ }
29
+ /** Output of running the heuristic against a single task. */
30
+ export interface ComplexityReport {
31
+ /** Task id under analysis. */
32
+ taskId: string;
33
+ /** Path to the spec file that was parsed (relative to project root). */
34
+ specPath: string | null;
35
+ /** Raw score — sum of all signal weights. */
36
+ score: number;
37
+ /** Bucket derived from `score`. */
38
+ level: ComplexityLevel;
39
+ /** Whether the heuristic recommends splitting this task. */
40
+ recommendsSplit: boolean;
41
+ /** Ordered list of signals that contributed to the score (largest first). */
42
+ signals: ComplexitySignal[];
43
+ }
44
+ /**
45
+ * Proposed sub-task produced by `--split`. Not yet committed to `dare-dag.yaml`
46
+ * — the agent / dev confirms before writing.
47
+ */
48
+ export interface ProposedSubtask {
49
+ /** Suggested kebab-case id (e.g. `task-034a`, `task-034b`). */
50
+ id: string;
51
+ /** Short title. */
52
+ title: string;
53
+ /** Files this sub-task should own (subset of the parent's files). */
54
+ files: string[];
55
+ /** Why this slice exists — surfaced to the dev for sanity-check. */
56
+ rationale: string;
57
+ /** Coarse complexity of the sub-task itself (best-effort). */
58
+ estimatedLevel: ComplexityLevel;
59
+ }
60
+ /** Result of `dare refine <id> --split` before any write happens. */
61
+ export interface SplitProposal {
62
+ /** Source task that's being split. */
63
+ originalTaskId: string;
64
+ /** Subtasks the dev / agent will replace it with. */
65
+ subtasks: ProposedSubtask[];
66
+ /** Free-form note from the analyzer about the split shape. */
67
+ notes: string;
68
+ }
69
+ /** CLI options for `dare refine`. */
70
+ export interface RefineOptions {
71
+ /** Project root, defaults to `process.cwd()`. */
72
+ projectRoot?: string;
73
+ /** When true, emit a split proposal alongside the complexity report. */
74
+ split?: boolean;
75
+ /** When true, write the split back into `dare-dag.yaml` after approval. */
76
+ apply?: boolean;
77
+ /** Output format. */
78
+ format?: 'human' | 'json';
79
+ /** Optional semantic verdict from the IDE agent (JSON path). */
80
+ fromAgent?: string;
81
+ }
82
+ /**
83
+ * Optional semantic input the IDE agent can supply via `--from-agent`. The
84
+ * agent gets a richer view of the spec and may flag tasks the heuristic
85
+ * couldn't see (e.g. "this task needs a new service abstraction we don't
86
+ * have yet — that's a refactor task on its own").
87
+ */
88
+ export interface RefineVerdict {
89
+ /** Whether the agent considers the task small enough to ship cleanly. */
90
+ manageable: boolean;
91
+ /** Reasons the agent thinks splitting would help. */
92
+ reasons: string[];
93
+ /** Optional pre-baked subtask proposals from the agent. */
94
+ proposedSubtasks?: ProposedSubtask[];
95
+ }
96
+ //# sourceMappingURL=Refine.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Refine.types.d.ts","sourceRoot":"","sources":["../../src/types/Refine.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC;AAElE,wEAAwE;AACxE,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,KAAK,EAAE,eAAe,CAAC;IACvB,4DAA4D;IAC5D,eAAe,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,cAAc,EAAE,eAAe,CAAC;CACjC;AAED,qEAAqE;AACrE,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC1B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,UAAU,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;CACtC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Types for `dare refine` — the planning-time and on-demand check that
3
+ * keeps individual tasks small enough for the agent to implement in a
4
+ * single conversation without hand-waving.
5
+ *
6
+ * Two ways to invoke it:
7
+ * 1. Implicit (during `/dare-tasks` skill): the IDE agent calls
8
+ * `dare refine <task-id>` for each just-generated task and uses the
9
+ * report to decide whether to split or keep.
10
+ * 2. Manual (`dare refine <id> [--split]`): the dev kicks it off when a
11
+ * task feels too heavy or after a scope change.
12
+ *
13
+ * The complexity heuristic is intentionally cheap and deterministic — it
14
+ * counts well-known signals from the task spec (files, functions, tests,
15
+ * deps, prompt keywords). The IDE agent layer can add semantic nuance with
16
+ * `--from-agent <verdict.json>`, mirroring the review pattern.
17
+ */
18
+ export {};
19
+ //# sourceMappingURL=Refine.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Refine.types.js","sourceRoot":"","sources":["../../src/types/Refine.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Types for `dare review` — the post-execution sanity check that catches
3
+ * stubs, mocks, TODOs, empty functions and similar "fake completeness"
4
+ * patterns in the files a task touched.
5
+ *
6
+ * Two complementary layers:
7
+ * 1. Static analysis (deterministic, this module) — regex / AST-lite scanning
8
+ * of files modified by the task.
9
+ * 2. Semantic review (opt-in, agent-driven) — the IDE agent re-reads the
10
+ * spec and implementation and answers "does this satisfy the spec?".
11
+ * That layer lives in the IDE skills, not here; this types file only
12
+ * models its output so the command can merge both reports.
13
+ */
14
+ /** Severity of a violation. `error` blocks DONE; `warning` is informational. */
15
+ export type ViolationSeverity = 'error' | 'warning';
16
+ /** Stable identifiers for each detector. Used in reports and ignore-lists. */
17
+ export type ViolationKind = 'todo-marker' | 'empty-function' | 'not-implemented-stub' | 'phantom-return' | 'production-mock' | 'placeholder-comment' | 'hardcoded-response';
18
+ /** A single finding in a file. */
19
+ export interface Violation {
20
+ kind: ViolationKind;
21
+ severity: ViolationSeverity;
22
+ /** Project-relative path. */
23
+ file: string;
24
+ /** 1-based line number where the offense was found. */
25
+ line: number;
26
+ /** Trimmed snippet of the offending line (max ~200 chars). */
27
+ snippet: string;
28
+ /** Short, actionable message for the dev. */
29
+ message: string;
30
+ }
31
+ /** Aggregated outcome of analyzing one file. */
32
+ export interface FileReport {
33
+ /** Project-relative path. */
34
+ file: string;
35
+ /** True if the file matched a "test file" pattern (mocks are allowed). */
36
+ isTestFile: boolean;
37
+ violations: Violation[];
38
+ }
39
+ /** Final report of a `dare review` invocation. */
40
+ export interface ReviewReport {
41
+ /** Task id under review. */
42
+ taskId: string;
43
+ /** Files the task is supposed to have touched (from the spec or git). */
44
+ filesScanned: string[];
45
+ /** Per-file findings, including clean files (empty `violations`). */
46
+ reports: FileReport[];
47
+ /** True when there is at least one `error`-severity violation. */
48
+ failed: boolean;
49
+ /** Quick counts for the summary line. */
50
+ totals: {
51
+ errors: number;
52
+ warnings: number;
53
+ filesWithFindings: number;
54
+ };
55
+ /** Optional semantic verdict from the IDE agent (merged if present). */
56
+ semantic?: SemanticVerdict;
57
+ }
58
+ /**
59
+ * Verdict produced by the IDE agent in the semantic review layer. The CLI
60
+ * accepts this via `dare review <id> --from-agent <path-to-json>` or via
61
+ * stdin, and merges it into the final report.
62
+ */
63
+ export interface SemanticVerdict {
64
+ /** Whether the agent considers the implementation faithful to the spec. */
65
+ passed: boolean;
66
+ /** Spec criteria the agent could not match against implementation. */
67
+ unmetCriteria: string[];
68
+ /** Free-form notes the agent wants to surface. */
69
+ notes?: string;
70
+ }
71
+ /** Options passed to `runReview`. */
72
+ export interface ReviewOptions {
73
+ /** Project root, defaults to `process.cwd()`. */
74
+ projectRoot?: string;
75
+ /** Optional explicit file list (overrides spec/git detection). */
76
+ files?: string[];
77
+ /** Suppress warnings, only print errors. */
78
+ errorsOnly?: boolean;
79
+ /** Treat warnings as errors. */
80
+ strict?: boolean;
81
+ /** Path to JSON file with a `SemanticVerdict` from the IDE agent. */
82
+ fromAgent?: string;
83
+ /** Output format. `json` produces a machine-readable report for hooks. */
84
+ format?: 'human' | 'json';
85
+ }
86
+ //# sourceMappingURL=Review.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Review.types.d.ts","sourceRoot":"","sources":["../../src/types/Review.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpD,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,gBAAgB,GAChB,sBAAsB,GACtB,gBAAgB,GAChB,iBAAiB,GACjB,qBAAqB,GACrB,oBAAoB,CAAC;AAEzB,kCAAkC;AAClC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,kDAAkD;AAClD,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qEAAqE;IACrE,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,kEAAkE;IAClE,MAAM,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,wEAAwE;IACxE,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,MAAM,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gCAAgC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Types for `dare review` — the post-execution sanity check that catches
3
+ * stubs, mocks, TODOs, empty functions and similar "fake completeness"
4
+ * patterns in the files a task touched.
5
+ *
6
+ * Two complementary layers:
7
+ * 1. Static analysis (deterministic, this module) — regex / AST-lite scanning
8
+ * of files modified by the task.
9
+ * 2. Semantic review (opt-in, agent-driven) — the IDE agent re-reads the
10
+ * spec and implementation and answers "does this satisfy the spec?".
11
+ * That layer lives in the IDE skills, not here; this types file only
12
+ * models its output so the command can merge both reports.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=Review.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Review.types.js","sourceRoot":"","sources":["../../src/types/Review.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Types for the DARE Update Manifest system.
3
+ *
4
+ * The manifest lives in `templates/UPDATE-MANIFEST.json` and describes — for
5
+ * every CLI version released — which template files changed, were added or
6
+ * removed, plus optional migrations the `dare update` command must run.
7
+ *
8
+ * `dare update` reads the project's `dareVersion` from `dare.config.json`,
9
+ * compares it with the installed CLI version, and applies every intermediate
10
+ * version's entries in order.
11
+ */
12
+ /** IDE targets a change applies to. `'*'` means every IDE / all setups. */
13
+ export type IdeTarget = '*' | 'cursor' | 'claude-code' | 'antigravity' | 'hybrid' | 'claude-hybrid';
14
+ /** Kind of file-level change. */
15
+ export type ChangeKind = 'added' | 'modified' | 'removed' | 'renamed';
16
+ /** A single file-level change shipped in a release. */
17
+ export interface ManifestChange {
18
+ /** What happened to the file. */
19
+ type: ChangeKind;
20
+ /**
21
+ * Project-relative path that will be touched on the dev's machine
22
+ * (e.g. `.cursor/commands/generate-design.md`).
23
+ */
24
+ path: string;
25
+ /**
26
+ * For `renamed` changes: the path the file used to live at, so we can
27
+ * delete the old file before laying down the new one.
28
+ */
29
+ previousPath?: string;
30
+ /**
31
+ * Source path inside the CLI's `templates/` directory. When omitted, the
32
+ * applier assumes the source mirrors `path` under `templates/`.
33
+ */
34
+ templateSource?: string;
35
+ /** Short, human-readable description shown to the dev. */
36
+ description: string;
37
+ /** Which IDE setups this change applies to. Defaults to `['*']`. */
38
+ appliesTo?: IdeTarget[];
39
+ /**
40
+ * Hash (SHA-256) of the **previous** template content. Used to detect
41
+ * customizations: if the file in the project doesn't match this hash, we
42
+ * treat it as customized and prompt the dev.
43
+ */
44
+ previousHash?: string;
45
+ }
46
+ /** Optional migration step (code transformation, not a file copy). */
47
+ export interface ManifestMigration {
48
+ /** Stable id, e.g. `rename-dare-meta-to-config`. */
49
+ id: string;
50
+ /** What the migration does — shown to the dev. */
51
+ description: string;
52
+ /** Whether the dev can skip this safely. Defaults to `false`. */
53
+ optional?: boolean;
54
+ }
55
+ /** Everything that ships in a single CLI release. */
56
+ export interface ManifestRelease {
57
+ /** ISO-8601 release date. */
58
+ releasedAt: string;
59
+ /** One-line summary suitable for a changelog header. */
60
+ summary: string;
61
+ /** Longer explanation shown when the dev runs `dare update`. */
62
+ changelog: string;
63
+ /** File-level changes. */
64
+ changes: ManifestChange[];
65
+ /** Optional migrations (executed after file changes). */
66
+ migrations?: ManifestMigration[];
67
+ }
68
+ /** Top-level shape of `templates/UPDATE-MANIFEST.json`. */
69
+ export interface UpdateManifest {
70
+ /** Schema version of the manifest itself. Bump on breaking changes. */
71
+ schemaVersion: 1;
72
+ /** Keyed by semver version string, e.g. `"2.17.0"`. */
73
+ releases: Record<string, ManifestRelease>;
74
+ }
75
+ /** Result of comparing project state with a target CLI version. */
76
+ export interface UpdatePlan {
77
+ /** Version recorded in the project's `dare.config.json` (or `'legacy'`). */
78
+ fromVersion: string;
79
+ /** Version of the CLI currently installed. */
80
+ toVersion: string;
81
+ /** Ordered list of releases that need to be applied. */
82
+ pendingReleases: Array<{
83
+ version: string;
84
+ release: ManifestRelease;
85
+ }>;
86
+ /** Total file changes across all pending releases (post-filter). */
87
+ applicableChanges: ManifestChange[];
88
+ }
89
+ /** How a file change resolves on the dev's disk. */
90
+ export type ConflictResolution = 'apply' | 'customized' | 'missing' | 'identical';
91
+ //# sourceMappingURL=UpdateManifest.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateManifest.types.d.ts","sourceRoot":"","sources":["../../src/types/UpdateManifest.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GACjB,GAAG,GACH,QAAQ,GACR,aAAa,GACb,aAAa,GACb,QAAQ,GACR,eAAe,CAAC;AAEpB,iCAAiC;AACjC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtE,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,IAAI,EAAE,UAAU,CAAC;IAEjB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IAEpB,oEAAoE;IACpE,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;IAExB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,yDAAyD;IACzD,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAED,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,aAAa,EAAE,CAAC,CAAC;IACjB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3C;AAED,mEAAmE;AACnE,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,eAAe,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IACtE,oEAAoE;IACpE,iBAAiB,EAAE,cAAc,EAAE,CAAC;CACrC;AAED,oDAAoD;AACpD,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP,YAAY,GACZ,SAAS,GACT,WAAW,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Types for the DARE Update Manifest system.
3
+ *
4
+ * The manifest lives in `templates/UPDATE-MANIFEST.json` and describes — for
5
+ * every CLI version released — which template files changed, were added or
6
+ * removed, plus optional migrations the `dare update` command must run.
7
+ *
8
+ * `dare update` reads the project's `dareVersion` from `dare.config.json`,
9
+ * compares it with the installed CLI version, and applies every intermediate
10
+ * version's entries in order.
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=UpdateManifest.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateManifest.types.js","sourceRoot":"","sources":["../../src/types/UpdateManifest.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Orchestrates `dare review`:
3
+ * 1. Resolve the task spec from `DARE/EXECUTION/task-<id>.md` (or other
4
+ * common locations).
5
+ * 2. Discover which files the task touched — by parsing the spec's
6
+ * "ARQUIVOS A CRIAR / MODIFICAR" table, falling back to `git diff`
7
+ * against the merge base when the spec doesn't list files.
8
+ * 3. Run the static analyzer over those files.
9
+ * 4. Optionally merge a `SemanticVerdict` provided by the IDE agent
10
+ * (via `--from-agent <path>`).
11
+ *
12
+ * Pure data manipulation — file I/O happens through `fs-extra` and `child_process`.
13
+ * The CLI command (`commands/review.ts`) wraps this with chalk output.
14
+ */
15
+ import type { ReviewOptions, ReviewReport } from '../types/Review.types.js';
16
+ export declare function findSpecFile(projectRoot: string, taskId: string): Promise<string | null>;
17
+ /**
18
+ * Parse the "ARQUIVOS A CRIAR / MODIFICAR" markdown table from a spec.
19
+ *
20
+ * Expected shape (from `TASK-SPEC-template.md`):
21
+ *
22
+ * | Ação | Caminho | Descrição |
23
+ * |------|---------|-----------|
24
+ * | CRIAR | `src/foo.ts` | ... |
25
+ * | MODIFICAR | `src/bar.ts` | ... |
26
+ *
27
+ * We grab anything in backticks within rows where the first column is
28
+ * CRIAR/MODIFICAR/CREATE/MODIFY/UPDATE. Returns project-relative paths.
29
+ */
30
+ export declare function parseFilesFromSpec(specMarkdown: string): string[];
31
+ /**
32
+ * Fallback: ask git which files diverge from the merge base with the default
33
+ * branch. Returns project-relative paths; on any git error, returns `[]`
34
+ * silently — the caller is expected to surface a friendlier message.
35
+ */
36
+ export declare function discoverFilesFromGit(projectRoot: string): string[];
37
+ /**
38
+ * Main entry point. Resolves files, runs the analyzer, merges semantic input
39
+ * if any, and returns a fully populated `ReviewReport`.
40
+ */
41
+ export declare function runReview(taskId: string, options?: ReviewOptions): Promise<ReviewReport>;
42
+ //# sourceMappingURL=ReviewRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewRunner.d.ts","sourceRoot":"","sources":["../../src/utils/ReviewRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEb,MAAM,0BAA0B,CAAC;AAalC,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBjE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBlE;AA6BD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAwDvB"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Orchestrates `dare review`:
3
+ * 1. Resolve the task spec from `DARE/EXECUTION/task-<id>.md` (or other
4
+ * common locations).
5
+ * 2. Discover which files the task touched — by parsing the spec's
6
+ * "ARQUIVOS A CRIAR / MODIFICAR" table, falling back to `git diff`
7
+ * against the merge base when the spec doesn't list files.
8
+ * 3. Run the static analyzer over those files.
9
+ * 4. Optionally merge a `SemanticVerdict` provided by the IDE agent
10
+ * (via `--from-agent <path>`).
11
+ *
12
+ * Pure data manipulation — file I/O happens through `fs-extra` and `child_process`.
13
+ * The CLI command (`commands/review.ts`) wraps this with chalk output.
14
+ */
15
+ import fs from 'fs-extra';
16
+ import path from 'path';
17
+ import { execFileSync } from 'child_process';
18
+ import { runStaticAnalysis } from './static-analyzer.js';
19
+ /** Candidate locations of a task spec, tried in order. */
20
+ function specCandidates(projectRoot, taskId) {
21
+ return [
22
+ path.join(projectRoot, 'DARE', 'EXECUTION', `${taskId}.md`),
23
+ path.join(projectRoot, 'DARE', 'EXECUTION', `task-${taskId}.md`),
24
+ path.join(projectRoot, 'DARE', 'tasks', `${taskId}.md`),
25
+ path.join(projectRoot, 'DARE', `${taskId}.md`),
26
+ ];
27
+ }
28
+ export async function findSpecFile(projectRoot, taskId) {
29
+ for (const candidate of specCandidates(projectRoot, taskId)) {
30
+ if (await fs.pathExists(candidate))
31
+ return candidate;
32
+ }
33
+ return null;
34
+ }
35
+ /**
36
+ * Parse the "ARQUIVOS A CRIAR / MODIFICAR" markdown table from a spec.
37
+ *
38
+ * Expected shape (from `TASK-SPEC-template.md`):
39
+ *
40
+ * | Ação | Caminho | Descrição |
41
+ * |------|---------|-----------|
42
+ * | CRIAR | `src/foo.ts` | ... |
43
+ * | MODIFICAR | `src/bar.ts` | ... |
44
+ *
45
+ * We grab anything in backticks within rows where the first column is
46
+ * CRIAR/MODIFICAR/CREATE/MODIFY/UPDATE. Returns project-relative paths.
47
+ */
48
+ export function parseFilesFromSpec(specMarkdown) {
49
+ const lines = specMarkdown.split(/\r?\n/);
50
+ const out = [];
51
+ const actionRe = /^\|\s*(CRIAR|MODIFICAR|CREATE|MODIFY|UPDATE|TOUCH)\s*\|/i;
52
+ const pathRe = /`([^`]+)`/;
53
+ for (const line of lines) {
54
+ if (!actionRe.test(line))
55
+ continue;
56
+ const m = pathRe.exec(line);
57
+ if (!m)
58
+ continue;
59
+ const filePath = m[1].trim();
60
+ // Filter obvious non-file references (directories, comments).
61
+ if (!filePath || filePath.endsWith('/') || filePath.startsWith('['))
62
+ continue;
63
+ out.push(filePath);
64
+ }
65
+ // De-dupe while preserving order.
66
+ return Array.from(new Set(out));
67
+ }
68
+ /**
69
+ * Fallback: ask git which files diverge from the merge base with the default
70
+ * branch. Returns project-relative paths; on any git error, returns `[]`
71
+ * silently — the caller is expected to surface a friendlier message.
72
+ */
73
+ export function discoverFilesFromGit(projectRoot) {
74
+ try {
75
+ const baseRef = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
76
+ cwd: projectRoot,
77
+ stdio: ['ignore', 'pipe', 'ignore'],
78
+ })
79
+ .toString()
80
+ .trim();
81
+ // Diff vs HEAD~1 if no merge-base is sensible — best-effort.
82
+ const out = execFileSync('git', ['diff', '--name-only', 'HEAD', '--', '.'], { cwd: projectRoot, stdio: ['ignore', 'pipe', 'ignore'] })
83
+ .toString()
84
+ .trim();
85
+ if (!out)
86
+ return [];
87
+ return out
88
+ .split('\n')
89
+ .map((s) => s.trim())
90
+ .filter(Boolean);
91
+ void baseRef; // (silence unused-warning when only diff matters)
92
+ }
93
+ catch {
94
+ return [];
95
+ }
96
+ }
97
+ /** Build the empty-shell report when there are no files to scan. */
98
+ function emptyReport(taskId) {
99
+ return {
100
+ taskId,
101
+ filesScanned: [],
102
+ reports: [],
103
+ failed: false,
104
+ totals: { errors: 0, warnings: 0, filesWithFindings: 0 },
105
+ };
106
+ }
107
+ /** Read the optional semantic verdict supplied by the IDE agent. */
108
+ async function loadSemanticVerdict(fromAgentPath) {
109
+ if (!(await fs.pathExists(fromAgentPath))) {
110
+ throw new Error(`--from-agent file not found: ${fromAgentPath}`);
111
+ }
112
+ const data = await fs.readJSON(fromAgentPath);
113
+ if (typeof data?.passed !== 'boolean' || !Array.isArray(data?.unmetCriteria)) {
114
+ throw new Error(`Invalid semantic verdict in ${fromAgentPath}: needs { passed: boolean, unmetCriteria: string[] }.`);
115
+ }
116
+ return data;
117
+ }
118
+ /**
119
+ * Main entry point. Resolves files, runs the analyzer, merges semantic input
120
+ * if any, and returns a fully populated `ReviewReport`.
121
+ */
122
+ export async function runReview(taskId, options = {}) {
123
+ const projectRoot = options.projectRoot ?? process.cwd();
124
+ // 1. Resolve file list.
125
+ let files = options.files ?? [];
126
+ if (files.length === 0) {
127
+ const specPath = await findSpecFile(projectRoot, taskId);
128
+ if (specPath) {
129
+ const md = await fs.readFile(specPath, 'utf-8');
130
+ files = parseFilesFromSpec(md);
131
+ }
132
+ }
133
+ if (files.length === 0) {
134
+ // Last-ditch: try git.
135
+ files = discoverFilesFromGit(projectRoot);
136
+ }
137
+ if (files.length === 0) {
138
+ return emptyReport(taskId);
139
+ }
140
+ // 2. Run analyzer.
141
+ const reports = await runStaticAnalysis(projectRoot, files);
142
+ // 3. Aggregate totals.
143
+ let errors = 0;
144
+ let warnings = 0;
145
+ let filesWithFindings = 0;
146
+ for (const r of reports) {
147
+ if (r.violations.length === 0)
148
+ continue;
149
+ filesWithFindings++;
150
+ for (const v of r.violations) {
151
+ if (v.severity === 'error')
152
+ errors++;
153
+ else
154
+ warnings++;
155
+ }
156
+ }
157
+ // 4. Optional semantic merge.
158
+ let semantic;
159
+ if (options.fromAgent) {
160
+ const v = await loadSemanticVerdict(options.fromAgent);
161
+ if (v)
162
+ semantic = v;
163
+ }
164
+ const failedFromStatic = errors > 0 || (Boolean(options.strict) && warnings > 0);
165
+ const failedFromSemantic = semantic ? !semantic.passed : false;
166
+ return {
167
+ taskId,
168
+ filesScanned: files,
169
+ reports,
170
+ failed: failedFromStatic || failedFromSemantic,
171
+ totals: { errors, warnings, filesWithFindings },
172
+ semantic,
173
+ };
174
+ }
175
+ //# sourceMappingURL=ReviewRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewRunner.js","sourceRoot":"","sources":["../../src/utils/ReviewRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAM7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,0DAA0D;AAC1D,SAAS,cAAc,CAAC,WAAmB,EAAE,MAAc;IACzD,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,KAAK,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,MAAM,KAAK,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,KAAK,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,MAAc;IAEd,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5D,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,YAAoB;IACrD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAG,0DAA0D,CAAC;IAC5E,MAAM,MAAM,GAAG,WAAW,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACnC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,8DAA8D;QAC9D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC9E,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IAED,kCAAkC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE;YACzE,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC;aACC,QAAQ,EAAE;aACV,IAAI,EAAE,CAAC;QACV,6DAA6D;QAC7D,MAAM,GAAG,GAAG,YAAY,CACtB,KAAK,EACL,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,EAC1C,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAC1D;aACE,QAAQ,EAAE;aACV,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,OAAO,GAAG;aACP,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,KAAK,OAAO,CAAC,CAAC,kDAAkD;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO;QACL,MAAM;QACN,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE;KACzD,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,KAAK,UAAU,mBAAmB,CAChC,aAAqB;IAErB,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,OAAO,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CACb,+BAA+B,aAAa,uDAAuD,CACpG,CAAC;IACJ,CAAC;IACD,OAAO,IAAuB,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,UAAyB,EAAE;IAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEzD,wBAAwB;IACxB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,KAAK,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,uBAAuB;QACvB,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAE5D,uBAAuB;IACvB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACxC,iBAAiB,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;gBAAE,MAAM,EAAE,CAAC;;gBAChC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAqC,CAAC;IAC1C,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC;YAAE,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,gBAAgB,GACpB,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAE/D,OAAO;QACL,MAAM;QACN,YAAY,EAAE,KAAK;QACnB,OAAO;QACP,MAAM,EAAE,gBAAgB,IAAI,kBAAkB;QAC9C,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE;QAC/C,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Applies an `UpdatePlan` to a project on disk.
3
+ *
4
+ * The detector decides *what* would happen; the applier actually writes files,
5
+ * backs up the previous state, prompts on conflicts and runs migrations. Kept
6
+ * separate so unit tests can poke the detector without touching the filesystem.
7
+ */
8
+ import type { ConflictResolution, ManifestChange, ManifestMigration, UpdatePlan } from '../types/UpdateManifest.types.js';
9
+ /** Per-file outcome used to build the final summary. */
10
+ export interface ChangeOutcome {
11
+ change: ManifestChange;
12
+ resolution: ConflictResolution;
13
+ action: 'wrote' | 'deleted' | 'skipped' | 'kept-custom';
14
+ }
15
+ export interface ApplyOptions {
16
+ projectRoot: string;
17
+ /** Backup directory inside the project (defaults to `.dare/backup-<from>`). */
18
+ backupDir?: string;
19
+ /** Skip interactive prompts and always overwrite customizations. Dangerous. */
20
+ force?: boolean;
21
+ /** Print plan but write nothing. */
22
+ dryRun?: boolean;
23
+ /** Default answer for the per-file conflict prompt — `'ask'` is interactive. */
24
+ conflictPolicy?: 'ask' | 'keep' | 'replace';
25
+ }
26
+ /**
27
+ * Snapshot every file the plan touches into `backupDir`, preserving its
28
+ * relative path. Touches only files that currently exist.
29
+ */
30
+ export declare function backupAffectedFiles(plan: UpdatePlan, projectRoot: string, backupDir: string): Promise<number>;
31
+ export interface ApplyResult {
32
+ outcomes: ChangeOutcome[];
33
+ migrationsRan: ManifestMigration[];
34
+ backupPath: string | null;
35
+ backupFilesCount: number;
36
+ }
37
+ /**
38
+ * Execute the plan. Returns a structured result so the command can print a
39
+ * sensible summary at the end.
40
+ */
41
+ export declare function applyPlan(plan: UpdatePlan, options: ApplyOptions): Promise<ApplyResult>;
42
+ //# sourceMappingURL=UpdateApplier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateApplier.d.ts","sourceRoot":"","sources":["../../src/utils/UpdateApplier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,UAAU,EACX,MAAM,kCAAkC,CAAC;AA6B1C,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;CACzD;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oCAAoC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAYjB;AA8JD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,WAAW,CAAC,CAgCtB"}