@dewtech/dare-cli 2.17.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 (344) hide show
  1. package/README.md +98 -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.js +49 -49
  31. package/dist/__tests__/reverse-facts.test.d.ts +2 -0
  32. package/dist/__tests__/reverse-facts.test.d.ts.map +1 -0
  33. package/dist/__tests__/reverse-facts.test.js +78 -0
  34. package/dist/__tests__/reverse-facts.test.js.map +1 -0
  35. package/dist/__tests__/review.test.js +38 -38
  36. package/dist/__tests__/validate.test.js +65 -65
  37. package/dist/bin/dare.js +32 -3
  38. package/dist/bin/dare.js.map +1 -1
  39. package/dist/commands/blueprint.js +122 -122
  40. package/dist/commands/dag.d.ts.map +1 -1
  41. package/dist/commands/dag.js +43 -79
  42. package/dist/commands/dag.js.map +1 -1
  43. package/dist/commands/dna.d.ts +3 -0
  44. package/dist/commands/dna.d.ts.map +1 -0
  45. package/dist/commands/dna.js +69 -0
  46. package/dist/commands/dna.js.map +1 -0
  47. package/dist/commands/migrate.d.ts +3 -0
  48. package/dist/commands/migrate.d.ts.map +1 -0
  49. package/dist/commands/migrate.js +101 -0
  50. package/dist/commands/migrate.js.map +1 -0
  51. package/dist/commands/new.d.ts +16 -0
  52. package/dist/commands/new.d.ts.map +1 -0
  53. package/dist/commands/new.js +103 -0
  54. package/dist/commands/new.js.map +1 -0
  55. package/dist/commands/reverse.d.ts +3 -0
  56. package/dist/commands/reverse.d.ts.map +1 -0
  57. package/dist/commands/reverse.js +201 -0
  58. package/dist/commands/reverse.js.map +1 -0
  59. package/dist/commands/welcome.d.ts +14 -0
  60. package/dist/commands/welcome.d.ts.map +1 -0
  61. package/dist/commands/welcome.js +29 -0
  62. package/dist/commands/welcome.js.map +1 -0
  63. package/dist/skills/commands/add.d.ts +23 -0
  64. package/dist/skills/commands/add.d.ts.map +1 -0
  65. package/dist/skills/commands/add.js +206 -0
  66. package/dist/skills/commands/add.js.map +1 -0
  67. package/dist/skills/commands/info.d.ts +14 -0
  68. package/dist/skills/commands/info.d.ts.map +1 -0
  69. package/dist/skills/commands/info.js +99 -0
  70. package/dist/skills/commands/info.js.map +1 -0
  71. package/dist/skills/commands/list.d.ts +19 -0
  72. package/dist/skills/commands/list.d.ts.map +1 -0
  73. package/dist/skills/commands/list.js +163 -0
  74. package/dist/skills/commands/list.js.map +1 -0
  75. package/dist/skills/commands/publish.d.ts +56 -0
  76. package/dist/skills/commands/publish.d.ts.map +1 -0
  77. package/dist/skills/commands/publish.js +272 -0
  78. package/dist/skills/commands/publish.js.map +1 -0
  79. package/dist/skills/commands/remove.d.ts +19 -0
  80. package/dist/skills/commands/remove.d.ts.map +1 -0
  81. package/dist/skills/commands/remove.js +96 -0
  82. package/dist/skills/commands/remove.js.map +1 -0
  83. package/dist/skills/commands/update.d.ts +31 -0
  84. package/dist/skills/commands/update.d.ts.map +1 -0
  85. package/dist/skills/commands/update.js +132 -0
  86. package/dist/skills/commands/update.js.map +1 -0
  87. package/dist/skills/index.d.ts +22 -0
  88. package/dist/skills/index.d.ts.map +1 -0
  89. package/dist/skills/index.js +33 -0
  90. package/dist/skills/index.js.map +1 -0
  91. package/dist/skills/manifest.d.ts +54 -0
  92. package/dist/skills/manifest.d.ts.map +1 -0
  93. package/dist/skills/manifest.js +162 -0
  94. package/dist/skills/manifest.js.map +1 -0
  95. package/dist/skills/registry-local.d.ts +67 -0
  96. package/dist/skills/registry-local.d.ts.map +1 -0
  97. package/dist/skills/registry-local.js +130 -0
  98. package/dist/skills/registry-local.js.map +1 -0
  99. package/dist/skills/registry-mock.json +109 -0
  100. package/dist/skills/registry-remote.d.ts +110 -0
  101. package/dist/skills/registry-remote.d.ts.map +1 -0
  102. package/dist/skills/registry-remote.js +246 -0
  103. package/dist/skills/registry-remote.js.map +1 -0
  104. package/dist/skills/registry.d.ts +49 -0
  105. package/dist/skills/registry.d.ts.map +1 -0
  106. package/dist/skills/registry.js +94 -0
  107. package/dist/skills/registry.js.map +1 -0
  108. package/dist/skills/tests/manifest.spec.d.ts +8 -0
  109. package/dist/skills/tests/manifest.spec.d.ts.map +1 -0
  110. package/dist/skills/tests/manifest.spec.js +176 -0
  111. package/dist/skills/tests/manifest.spec.js.map +1 -0
  112. package/dist/skills/tests/publish.spec.d.ts +12 -0
  113. package/dist/skills/tests/publish.spec.d.ts.map +1 -0
  114. package/dist/skills/tests/publish.spec.js +276 -0
  115. package/dist/skills/tests/publish.spec.js.map +1 -0
  116. package/dist/skills/tests/registry-local.spec.d.ts +8 -0
  117. package/dist/skills/tests/registry-local.spec.d.ts.map +1 -0
  118. package/dist/skills/tests/registry-local.spec.js +231 -0
  119. package/dist/skills/tests/registry-local.spec.js.map +1 -0
  120. package/dist/skills/tests/registry.spec.d.ts +7 -0
  121. package/dist/skills/tests/registry.spec.d.ts.map +1 -0
  122. package/dist/skills/tests/registry.spec.js +58 -0
  123. package/dist/skills/tests/registry.spec.js.map +1 -0
  124. package/dist/skills/tests/remote-registry.spec.d.ts +9 -0
  125. package/dist/skills/tests/remote-registry.spec.d.ts.map +1 -0
  126. package/dist/skills/tests/remote-registry.spec.js +357 -0
  127. package/dist/skills/tests/remote-registry.spec.js.map +1 -0
  128. package/dist/skills/tests/update.spec.d.ts +9 -0
  129. package/dist/skills/tests/update.spec.d.ts.map +1 -0
  130. package/dist/skills/tests/update.spec.js +166 -0
  131. package/dist/skills/tests/update.spec.js.map +1 -0
  132. package/dist/utils/banner.d.ts +28 -0
  133. package/dist/utils/banner.d.ts.map +1 -0
  134. package/dist/utils/banner.js +77 -0
  135. package/dist/utils/banner.js.map +1 -0
  136. package/dist/utils/banner.spec.d.ts +5 -0
  137. package/dist/utils/banner.spec.d.ts.map +1 -0
  138. package/dist/utils/banner.spec.js +253 -0
  139. package/dist/utils/banner.spec.js.map +1 -0
  140. package/dist/utils/confidence.d.ts +41 -0
  141. package/dist/utils/confidence.d.ts.map +1 -0
  142. package/dist/utils/confidence.js +101 -0
  143. package/dist/utils/confidence.js.map +1 -0
  144. package/dist/utils/datamodel.d.ts +41 -0
  145. package/dist/utils/datamodel.d.ts.map +1 -0
  146. package/dist/utils/datamodel.js +535 -0
  147. package/dist/utils/datamodel.js.map +1 -0
  148. package/dist/utils/dna-detector.d.ts +61 -0
  149. package/dist/utils/dna-detector.d.ts.map +1 -0
  150. package/dist/utils/dna-detector.js +354 -0
  151. package/dist/utils/dna-detector.js.map +1 -0
  152. package/dist/utils/dna-facts.d.ts +13 -0
  153. package/dist/utils/dna-facts.d.ts.map +1 -0
  154. package/dist/utils/dna-facts.js +109 -0
  155. package/dist/utils/dna-facts.js.map +1 -0
  156. package/dist/utils/excalidraw-renderer.d.ts +11 -71
  157. package/dist/utils/excalidraw-renderer.d.ts.map +1 -1
  158. package/dist/utils/excalidraw-renderer.js +29 -162
  159. package/dist/utils/excalidraw-renderer.js.map +1 -1
  160. package/dist/utils/graph-renderer.d.ts +115 -0
  161. package/dist/utils/graph-renderer.d.ts.map +1 -0
  162. package/dist/utils/graph-renderer.js +216 -0
  163. package/dist/utils/graph-renderer.js.map +1 -0
  164. package/dist/utils/migration.d.ts +64 -0
  165. package/dist/utils/migration.d.ts.map +1 -0
  166. package/dist/utils/migration.js +183 -0
  167. package/dist/utils/migration.js.map +1 -0
  168. package/dist/utils/module-detector.d.ts +46 -0
  169. package/dist/utils/module-detector.d.ts.map +1 -0
  170. package/dist/utils/module-detector.js +348 -0
  171. package/dist/utils/module-detector.js.map +1 -0
  172. package/dist/utils/project-generator.js +252 -252
  173. package/dist/utils/reverse-facts.d.ts +50 -0
  174. package/dist/utils/reverse-facts.d.ts.map +1 -0
  175. package/dist/utils/reverse-facts.js +291 -0
  176. package/dist/utils/reverse-facts.js.map +1 -0
  177. package/dist/utils/stack-bootstrap.js +371 -371
  178. package/package.json +8 -3
  179. package/templates/DARE-dag-example.yaml +280 -280
  180. package/templates/UPDATE-MANIFEST.json +48 -48
  181. package/templates/backend/node-nestjs/.env.example +9 -9
  182. package/templates/backend/node-nestjs/nest-cli.json +8 -8
  183. package/templates/backend/node-nestjs/package.json +50 -50
  184. package/templates/backend/node-nestjs/src/app.controller.ts +12 -12
  185. package/templates/backend/node-nestjs/src/app.module.ts +15 -15
  186. package/templates/backend/node-nestjs/src/app.service.ts +8 -8
  187. package/templates/backend/node-nestjs/src/main.ts +24 -24
  188. package/templates/backend/node-nestjs/tsconfig.json +21 -21
  189. package/templates/backend/php-laravel/.env.example +22 -22
  190. package/templates/backend/php-laravel/app/Http/Controllers/HealthController.php +15 -15
  191. package/templates/backend/php-laravel/composer.json +40 -40
  192. package/templates/backend/python-fastapi/.env.example +4 -4
  193. package/templates/backend/python-fastapi/app/api/router.py +8 -8
  194. package/templates/backend/python-fastapi/app/core/config.py +20 -20
  195. package/templates/backend/python-fastapi/main.py +35 -35
  196. package/templates/backend/python-fastapi/requirements.txt +13 -13
  197. package/templates/backend/rust-axum/.env.example +3 -3
  198. package/templates/backend/rust-axum/Cargo.toml +23 -23
  199. package/templates/backend/rust-axum/src/errors.rs +30 -30
  200. package/templates/backend/rust-axum/src/main.rs +32 -32
  201. package/templates/backend/rust-axum/src/routes.rs +6 -6
  202. package/templates/frontend/leptos-csr/.cargo/config.toml +2 -2
  203. package/templates/frontend/leptos-csr/Cargo.toml +16 -16
  204. package/templates/frontend/leptos-csr/Trunk.toml +10 -10
  205. package/templates/frontend/leptos-csr/index.html +11 -11
  206. package/templates/frontend/leptos-csr/src/lib.rs +20 -20
  207. package/templates/frontend/leptos-csr/style/main.scss +19 -19
  208. package/templates/frontend/leptos-fullstack/.cargo/config.toml +4 -4
  209. package/templates/frontend/leptos-fullstack/Cargo.toml +56 -56
  210. package/templates/frontend/leptos-fullstack/src/app.rs +49 -49
  211. package/templates/frontend/leptos-fullstack/src/lib.rs +9 -9
  212. package/templates/frontend/leptos-fullstack/src/main.rs +29 -29
  213. package/templates/frontend/leptos-fullstack/style/main.scss +19 -19
  214. package/templates/frontend/react/index.html +12 -12
  215. package/templates/frontend/react/package.json +35 -35
  216. package/templates/frontend/react/src/App.tsx +25 -25
  217. package/templates/frontend/react/src/main.tsx +9 -9
  218. package/templates/frontend/vue/package.json +32 -32
  219. package/templates/frontend/vue/src/App.vue +7 -7
  220. package/templates/frontend/vue/src/main.ts +10 -10
  221. package/templates/frontend/vue/src/router/index.ts +14 -14
  222. package/templates/frontend/vue/src/views/HomeView.vue +6 -6
  223. package/templates/hooks/pre-commit-dare-validate +24 -24
  224. package/templates/ide/antigravity/.agents/skills/dare-ax/SKILL.md +152 -0
  225. package/templates/ide/antigravity/.agents/skills/dare-dag-build/SKILL.md +154 -0
  226. package/templates/ide/antigravity/.agents/skills/dare-dag-run/SKILL.md +130 -0
  227. package/templates/ide/antigravity/.agents/skills/dare-dag-runner/SKILL.md +203 -203
  228. package/templates/ide/antigravity/.agents/skills/dare-dna/SKILL.md +63 -0
  229. package/templates/ide/antigravity/.agents/skills/dare-docker/SKILL.md +315 -0
  230. package/templates/ide/antigravity/.agents/skills/dare-frontend-design/SKILL.md +192 -0
  231. package/templates/ide/antigravity/.agents/skills/dare-laravel-api/SKILL.md +337 -0
  232. package/templates/ide/antigravity/.agents/skills/dare-layered-design/SKILL.md +166 -0
  233. package/templates/ide/antigravity/.agents/skills/dare-llm-integration/SKILL.md +217 -0
  234. package/templates/ide/antigravity/.agents/skills/dare-migrate/SKILL.md +61 -0
  235. package/templates/ide/antigravity/.agents/skills/dare-quality-telemetry/SKILL.md +187 -0
  236. package/templates/ide/antigravity/.agents/skills/dare-realtime/SKILL.md +217 -0
  237. package/templates/ide/antigravity/.agents/skills/dare-refine/SKILL.md +114 -114
  238. package/templates/ide/antigravity/.agents/skills/dare-reverse/SKILL.md +108 -0
  239. package/templates/ide/antigravity/.agents/skills/dare-review/SKILL.md +111 -111
  240. package/templates/ide/antigravity/.agents/skills/dare-rust-leptos/SKILL.md +263 -0
  241. package/templates/ide/antigravity/.agents/skills/dare-rust-workspace/SKILL.md +275 -275
  242. package/templates/ide/antigravity/.agents/skills/dare-security/SKILL.md +274 -0
  243. package/templates/ide/antigravity/.agents/skills/dare-tasks/SKILL.md +265 -265
  244. package/templates/ide/antigravity/.agents/skills/dare-telemetry/SKILL.md +188 -0
  245. package/templates/ide/antigravity/.agents/skills/skill-fastapi-api/SKILL.md +343 -0
  246. package/templates/ide/antigravity/.agents/skills/skill-go-gin-api/SKILL.md +377 -0
  247. package/templates/ide/antigravity/.agents/skills/skill-mcp-server/SKILL.md +382 -0
  248. package/templates/ide/antigravity/.agents/skills/skill-nestjs-api/SKILL.md +326 -0
  249. package/templates/ide/antigravity/.agents/skills/skill-rails-api/SKILL.md +393 -0
  250. package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -193
  251. package/templates/ide/antigravity/templates/DESIGN-template.md +129 -129
  252. package/templates/ide/antigravity/templates/TASK-SPEC-template.md +141 -141
  253. package/templates/ide/claude/.claude/commands/dare-ax.md +131 -0
  254. package/templates/ide/claude/.claude/commands/dare-blueprint.md +134 -134
  255. package/templates/ide/claude/.claude/commands/dare-bugfix-design.md +119 -0
  256. package/templates/ide/claude/.claude/commands/dare-dag-build.md +151 -151
  257. package/templates/ide/claude/.claude/commands/dare-dag-run.md +109 -109
  258. package/templates/ide/claude/.claude/commands/dare-dag-runner.md +117 -0
  259. package/templates/ide/claude/.claude/commands/dare-dag-viz.md +197 -197
  260. package/templates/ide/claude/.claude/commands/dare-design.md +69 -69
  261. package/templates/ide/claude/.claude/commands/dare-dna.md +75 -0
  262. package/templates/ide/claude/.claude/commands/dare-docker.md +207 -0
  263. package/templates/ide/claude/.claude/commands/dare-execute.md +152 -152
  264. package/templates/ide/claude/.claude/commands/dare-feature-design.md +147 -0
  265. package/templates/ide/claude/.claude/commands/dare-frontend-design.md +149 -0
  266. package/templates/ide/claude/.claude/commands/dare-laravel-api.md +211 -0
  267. package/templates/ide/claude/.claude/commands/dare-layered-design.md +124 -0
  268. package/templates/ide/claude/.claude/commands/dare-llm-integration.md +148 -0
  269. package/templates/ide/claude/.claude/commands/dare-migrate.md +72 -0
  270. package/templates/ide/claude/.claude/commands/dare-quality-telemetry.md +166 -0
  271. package/templates/ide/claude/.claude/commands/dare-realtime.md +159 -0
  272. package/templates/ide/claude/.claude/commands/dare-refine.md +145 -145
  273. package/templates/ide/claude/.claude/commands/dare-reverse.md +139 -0
  274. package/templates/ide/claude/.claude/commands/dare-review.md +113 -113
  275. package/templates/ide/claude/.claude/commands/dare-rust-leptos.md +269 -269
  276. package/templates/ide/claude/.claude/commands/dare-rust-workspace.md +209 -209
  277. package/templates/ide/claude/.claude/commands/dare-security.md +232 -232
  278. package/templates/ide/claude/.claude/commands/dare-tasks.md +70 -70
  279. package/templates/ide/claude/.claude/commands/dare-telemetry.md +132 -0
  280. package/templates/ide/claude/.claude/commands/skill-fastapi-api.md +205 -0
  281. package/templates/ide/claude/.claude/commands/skill-go-gin-api.md +232 -0
  282. package/templates/ide/claude/.claude/commands/skill-mcp-server.md +228 -0
  283. package/templates/ide/claude/.claude/commands/skill-nestjs-api.md +210 -0
  284. package/templates/ide/claude/.claude/commands/skill-rails-api.md +236 -0
  285. package/templates/ide/claude/.claude/settings.example.json +35 -35
  286. package/templates/ide/claude/CLAUDE.md +146 -146
  287. package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -193
  288. package/templates/ide/claude/templates/DESIGN-template.md +129 -129
  289. package/templates/ide/claude/templates/TASK-SPEC-template.md +141 -141
  290. package/templates/ide/cursor/.cursor/commands/dag-viz.md +139 -0
  291. package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +86 -86
  292. package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -35
  293. package/templates/ide/cursor/.cursor/commands/generate-tasks.md +184 -184
  294. package/templates/ide/cursor/.cursor/commands/refine-task.md +107 -107
  295. package/templates/ide/cursor/.cursor/commands/review-task.md +91 -91
  296. package/templates/ide/cursor/.cursor/commands/run-dag.md +110 -110
  297. package/templates/ide/cursor/.cursor/rules/skill-ax.mdc +263 -0
  298. package/templates/ide/cursor/.cursor/rules/skill-dag-build.mdc +173 -0
  299. package/templates/ide/cursor/.cursor/rules/skill-dag-run.mdc +134 -0
  300. package/templates/ide/cursor/.cursor/rules/skill-dag-runner.mdc +221 -221
  301. package/templates/ide/cursor/.cursor/rules/skill-dna.mdc +63 -0
  302. package/templates/ide/cursor/.cursor/rules/skill-fastapi-api.mdc +352 -0
  303. package/templates/ide/cursor/.cursor/rules/skill-frontend-design.mdc +244 -0
  304. package/templates/ide/cursor/.cursor/rules/skill-go-gin-api.mdc +371 -0
  305. package/templates/ide/cursor/.cursor/rules/skill-layered-design.mdc +266 -0
  306. package/templates/ide/cursor/.cursor/rules/skill-llm-integration.mdc +295 -0
  307. package/templates/ide/cursor/.cursor/rules/skill-mcp-server.mdc +367 -0
  308. package/templates/ide/cursor/.cursor/rules/skill-migrate.mdc +58 -0
  309. package/templates/ide/cursor/.cursor/rules/skill-nestjs-api.mdc +346 -0
  310. package/templates/ide/cursor/.cursor/rules/skill-quality-telemetry.mdc +248 -0
  311. package/templates/ide/cursor/.cursor/rules/skill-rails-api.mdc +400 -0
  312. package/templates/ide/cursor/.cursor/rules/skill-realtime.mdc +262 -0
  313. package/templates/ide/cursor/.cursor/rules/skill-reverse.mdc +107 -0
  314. package/templates/ide/cursor/.cursor/rules/skill-rust-leptos.mdc +281 -0
  315. package/templates/ide/cursor/.cursor/rules/skill-rust-workspace.mdc +312 -312
  316. package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -245
  317. package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -193
  318. package/templates/ide/cursor/templates/DESIGN-template.md +129 -129
  319. package/templates/ide/cursor/templates/TASK-SPEC-template.md +141 -141
  320. package/templates/shared/docker-compose.yml +41 -41
  321. package/dist/__tests__/dag-runner/adapters.test.d.ts +0 -2
  322. package/dist/__tests__/dag-runner/adapters.test.d.ts.map +0 -1
  323. package/dist/__tests__/dag-runner/adapters.test.js +0 -134
  324. package/dist/__tests__/dag-runner/adapters.test.js.map +0 -1
  325. package/dist/dag-runner/adapters/antigravity.d.ts +0 -6
  326. package/dist/dag-runner/adapters/antigravity.d.ts.map +0 -1
  327. package/dist/dag-runner/adapters/antigravity.js +0 -54
  328. package/dist/dag-runner/adapters/antigravity.js.map +0 -1
  329. package/dist/dag-runner/adapters/claude.d.ts +0 -6
  330. package/dist/dag-runner/adapters/claude.d.ts.map +0 -1
  331. package/dist/dag-runner/adapters/claude.js +0 -48
  332. package/dist/dag-runner/adapters/claude.js.map +0 -1
  333. package/dist/dag-runner/adapters/cursor.d.ts +0 -6
  334. package/dist/dag-runner/adapters/cursor.d.ts.map +0 -1
  335. package/dist/dag-runner/adapters/cursor.js +0 -58
  336. package/dist/dag-runner/adapters/cursor.js.map +0 -1
  337. package/dist/dag-runner/adapters/index.d.ts +0 -46
  338. package/dist/dag-runner/adapters/index.d.ts.map +0 -1
  339. package/dist/dag-runner/adapters/index.js +0 -55
  340. package/dist/dag-runner/adapters/index.js.map +0 -1
  341. package/dist/dag-runner/utils/timeout.d.ts +0 -27
  342. package/dist/dag-runner/utils/timeout.d.ts.map +0 -1
  343. package/dist/dag-runner/utils/timeout.js +0 -55
  344. package/dist/dag-runner/utils/timeout.js.map +0 -1
@@ -1,141 +1,141 @@
1
- # TASK [ID]: [Título da Task]
2
-
3
- > **Complexidade:** LOW / MED / HIGH
4
- > **Depends on:** [task-ids ou —]
5
- > **Estimativa:** [X horas]
6
-
7
- ---
8
-
9
- ## 1. OBJETIVO
10
-
11
- [Uma frase precisa do que esta task entrega. Deve ser verificável — termine com um estado observável, não uma ação.]
12
-
13
- Exemplo: _"Ao final desta task, o endpoint `POST /api/v1/users` aceita cadastro, valida unicidade de e-mail e retorna JWT."_
14
-
15
- ---
16
-
17
- ## 2. CONTEXTO
18
-
19
- - **Fase no BLUEPRINT:** Fase [N] — [Nome da fase]
20
- - **Arquivos existentes relevantes:** [caminhos de arquivos que servem de referência ou serão modificados]
21
- - **Decisões do BLUEPRINT que afetam esta task:** [cite seção/decisão específica]
22
-
23
- ---
24
-
25
- ## 3. ARQUIVOS A CRIAR / MODIFICAR
26
-
27
- | Ação | Caminho | Descrição |
28
- |------|---------|-----------|
29
- | CRIAR | `src/[módulo]/[arquivo]` | [o que contém] |
30
- | MODIFICAR | `src/[módulo]/[arquivo]` | [o que muda] |
31
- | CRIAR | `tests/[arquivo].test.[ext]` | Testes da feature |
32
-
33
- ---
34
-
35
- ## 4. IMPLEMENTAÇÃO
36
-
37
- ### Passo 1: [Nome do passo]
38
- [Descrição precisa do que fazer. Inclua assinaturas de função/struct se crítico.]
39
-
40
- ```[lang]
41
- // Exemplo de padrão esperado
42
- ```
43
-
44
- ### Passo 2: [Nome do passo]
45
- [Descrição]
46
-
47
- ### Passo 3: Testes
48
- - [ ] Teste do caminho feliz (`should_[comportamento]_when_[condição]`)
49
- - [ ] Teste de erro de validação (400 / erro de negócio)
50
- - [ ] Teste de autorização (401 / 403 quando aplicável)
51
- - [ ] Teste de edge case: [descrever]
52
-
53
- ---
54
-
55
- ## 5. CONSIDERAÇÕES DE SEGURANÇA
56
-
57
- - [ ] **Input validation:** toda entrada do usuário validada no servidor antes de qualquer processamento
58
- - [ ] **Autenticação / Autorização:** verificar se o usuário tem permissão sobre o *recurso específico*, não só sobre a rota
59
- - [ ] **Dados sensíveis:** senhas, tokens e PII nunca aparecem em logs, responses de erro ou mensagens de exceção
60
- - [ ] **SQL / Command Injection:** usar ORM / prepared statements; nunca concatenar strings em queries
61
- - [ ] **Dependências novas:** se esta task adicionar uma dependência, verificar CVEs com `npm audit` / `cargo audit` / `pip-audit` antes de commitar
62
- - [ ] **Segredo em código:** nenhum token, chave ou credencial hardcoded — sempre via variável de ambiente
63
-
64
- ---
65
-
66
- ## 6. VALIDATION GATES (RALPH LOOP)
67
-
68
- Execute **todos** antes de marcar a task como DONE. Se qualquer um falhar, leia o erro, corrija e reexecute.
69
-
70
- ```bash
71
- # 1. Build — sem erros de compilação
72
- [comando de build da stack]
73
-
74
- # 2. Tests — todos passando, incluindo os novos
75
- [comando de test]
76
-
77
- # 3. Lint — sem warnings
78
- [comando de lint]
79
-
80
- # 4. Auditoria de dependências (se novas deps foram adicionadas nesta task)
81
- [npm audit --audit-level=high | cargo audit | pip-audit | composer audit]
82
- ```
83
-
84
- > **Gate de segurança obrigatório:** se esta task adicionar dependências externas, `[audit-cmd]` não pode retornar CVE de nível HIGH ou CRITICAL.
85
-
86
- ---
87
-
88
- ## 7. PADRÕES PROIBIDOS (ANTI-STUB / ANTI-MOCK)
89
-
90
- > Esta seção é **inegociável**. O comando `dare review` (v2.17+) escaneia o código modificado por esta task e reprova se encontrar qualquer padrão abaixo.
91
-
92
- ### Em código de produção (qualquer arquivo **fora** de `*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/`)
93
-
94
- - ❌ **TODO / FIXME / XXX / HACK** — qualquer um desses marcadores em comentário
95
- - ❌ **Função vazia** — `fn x() {}`, `function x() {}`, `def x(): pass`, `def x(): ...`
96
- - ❌ **Stub explícito** — `throw new Error('not implemented')`, `unimplemented!()`, `todo!()`, `raise NotImplementedError`
97
- - ❌ **Retorno-fantasma** — `return null` / `return undefined` / `return {}` / `return []` como **única** statement de função pública declarada nesta task
98
- - ❌ **Mocks fora de testes** — `jest.fn()`, `sinon.stub()`, `mockReturnValue`, dados hardcoded fingindo ser do banco, fixtures injetadas em controllers/services
99
- - ❌ **Comentário de placeholder** — `// implement later`, `# placeholder`, `// stub`, `// FIXME implement`
100
-
101
- ### Mocks são permitidos APENAS em
102
-
103
- - Arquivos de teste (`*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/`)
104
- - Seeds / fixtures dentro de `database/seeders/`, `tests/fixtures/`
105
- - Helpers explicitamente marcados como auxiliares de teste
106
-
107
- ### Verificação automática
108
-
109
- Antes de marcar a task como DONE, rode:
110
-
111
- ```bash
112
- dare review <task-id>
113
- ```
114
-
115
- Output esperado:
116
-
117
- ```
118
- ✅ task-XYZ: nenhum padrão proibido detectado em N arquivos modificados.
119
- ```
120
-
121
- Se a review falhar, a task **não pode** ir para DONE — corrija os achados e re-rode.
122
-
123
- ---
124
-
125
- ## 8. CRITÉRIOS DE DONE
126
-
127
- - [ ] Todos os 4 validation gates passaram sem erros (build + test + lint + audit)
128
- - [ ] Testes cobrem caminho feliz + erros enumerados + edge cases da seção 4
129
- - [ ] Considerações de segurança da seção 5 todas checadas
130
- - [ ] Arquivos listados na seção 3 criados/modificados conforme spec
131
- - [ ] **`dare review <task-id>` passou** (seção 7 — sem stubs, mocks, TODOs)
132
- - [ ] Cada validação declarada na spec tem teste demonstrando o erro real (não placeholder)
133
- - [ ] Cada edge case enumerado tem teste cobrindo
134
- - [ ] Endpoints retornam dados reais do banco/service, não hardcoded
135
- - [ ] `DARE/TASKS.md` atualizado com status `DONE`
136
-
137
- ---
138
-
139
- ## 9. PRÓXIMA TASK SUGERIDA
140
-
141
- `[task-id]` — [título] _(desbloqueada após conclusão desta task)_
1
+ # TASK [ID]: [Título da Task]
2
+
3
+ > **Complexidade:** LOW / MED / HIGH
4
+ > **Depends on:** [task-ids ou —]
5
+ > **Estimativa:** [X horas]
6
+
7
+ ---
8
+
9
+ ## 1. OBJETIVO
10
+
11
+ [Uma frase precisa do que esta task entrega. Deve ser verificável — termine com um estado observável, não uma ação.]
12
+
13
+ Exemplo: _"Ao final desta task, o endpoint `POST /api/v1/users` aceita cadastro, valida unicidade de e-mail e retorna JWT."_
14
+
15
+ ---
16
+
17
+ ## 2. CONTEXTO
18
+
19
+ - **Fase no BLUEPRINT:** Fase [N] — [Nome da fase]
20
+ - **Arquivos existentes relevantes:** [caminhos de arquivos que servem de referência ou serão modificados]
21
+ - **Decisões do BLUEPRINT que afetam esta task:** [cite seção/decisão específica]
22
+
23
+ ---
24
+
25
+ ## 3. ARQUIVOS A CRIAR / MODIFICAR
26
+
27
+ | Ação | Caminho | Descrição |
28
+ |------|---------|-----------|
29
+ | CRIAR | `src/[módulo]/[arquivo]` | [o que contém] |
30
+ | MODIFICAR | `src/[módulo]/[arquivo]` | [o que muda] |
31
+ | CRIAR | `tests/[arquivo].test.[ext]` | Testes da feature |
32
+
33
+ ---
34
+
35
+ ## 4. IMPLEMENTAÇÃO
36
+
37
+ ### Passo 1: [Nome do passo]
38
+ [Descrição precisa do que fazer. Inclua assinaturas de função/struct se crítico.]
39
+
40
+ ```[lang]
41
+ // Exemplo de padrão esperado
42
+ ```
43
+
44
+ ### Passo 2: [Nome do passo]
45
+ [Descrição]
46
+
47
+ ### Passo 3: Testes
48
+ - [ ] Teste do caminho feliz (`should_[comportamento]_when_[condição]`)
49
+ - [ ] Teste de erro de validação (400 / erro de negócio)
50
+ - [ ] Teste de autorização (401 / 403 quando aplicável)
51
+ - [ ] Teste de edge case: [descrever]
52
+
53
+ ---
54
+
55
+ ## 5. CONSIDERAÇÕES DE SEGURANÇA
56
+
57
+ - [ ] **Input validation:** toda entrada do usuário validada no servidor antes de qualquer processamento
58
+ - [ ] **Autenticação / Autorização:** verificar se o usuário tem permissão sobre o *recurso específico*, não só sobre a rota
59
+ - [ ] **Dados sensíveis:** senhas, tokens e PII nunca aparecem em logs, responses de erro ou mensagens de exceção
60
+ - [ ] **SQL / Command Injection:** usar ORM / prepared statements; nunca concatenar strings em queries
61
+ - [ ] **Dependências novas:** se esta task adicionar uma dependência, verificar CVEs com `npm audit` / `cargo audit` / `pip-audit` antes de commitar
62
+ - [ ] **Segredo em código:** nenhum token, chave ou credencial hardcoded — sempre via variável de ambiente
63
+
64
+ ---
65
+
66
+ ## 6. VALIDATION GATES (RALPH LOOP)
67
+
68
+ Execute **todos** antes de marcar a task como DONE. Se qualquer um falhar, leia o erro, corrija e reexecute.
69
+
70
+ ```bash
71
+ # 1. Build — sem erros de compilação
72
+ [comando de build da stack]
73
+
74
+ # 2. Tests — todos passando, incluindo os novos
75
+ [comando de test]
76
+
77
+ # 3. Lint — sem warnings
78
+ [comando de lint]
79
+
80
+ # 4. Auditoria de dependências (se novas deps foram adicionadas nesta task)
81
+ [npm audit --audit-level=high | cargo audit | pip-audit | composer audit]
82
+ ```
83
+
84
+ > **Gate de segurança obrigatório:** se esta task adicionar dependências externas, `[audit-cmd]` não pode retornar CVE de nível HIGH ou CRITICAL.
85
+
86
+ ---
87
+
88
+ ## 7. PADRÕES PROIBIDOS (ANTI-STUB / ANTI-MOCK)
89
+
90
+ > Esta seção é **inegociável**. O comando `dare review` (v2.17+) escaneia o código modificado por esta task e reprova se encontrar qualquer padrão abaixo.
91
+
92
+ ### Em código de produção (qualquer arquivo **fora** de `*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/`)
93
+
94
+ - ❌ **TODO / FIXME / XXX / HACK** — qualquer um desses marcadores em comentário
95
+ - ❌ **Função vazia** — `fn x() {}`, `function x() {}`, `def x(): pass`, `def x(): ...`
96
+ - ❌ **Stub explícito** — `throw new Error('not implemented')`, `unimplemented!()`, `todo!()`, `raise NotImplementedError`
97
+ - ❌ **Retorno-fantasma** — `return null` / `return undefined` / `return {}` / `return []` como **única** statement de função pública declarada nesta task
98
+ - ❌ **Mocks fora de testes** — `jest.fn()`, `sinon.stub()`, `mockReturnValue`, dados hardcoded fingindo ser do banco, fixtures injetadas em controllers/services
99
+ - ❌ **Comentário de placeholder** — `// implement later`, `# placeholder`, `// stub`, `// FIXME implement`
100
+
101
+ ### Mocks são permitidos APENAS em
102
+
103
+ - Arquivos de teste (`*.test.*`, `*.spec.*`, `__tests__/`, `tests/`, `spec/`)
104
+ - Seeds / fixtures dentro de `database/seeders/`, `tests/fixtures/`
105
+ - Helpers explicitamente marcados como auxiliares de teste
106
+
107
+ ### Verificação automática
108
+
109
+ Antes de marcar a task como DONE, rode:
110
+
111
+ ```bash
112
+ dare review <task-id>
113
+ ```
114
+
115
+ Output esperado:
116
+
117
+ ```
118
+ ✅ task-XYZ: nenhum padrão proibido detectado em N arquivos modificados.
119
+ ```
120
+
121
+ Se a review falhar, a task **não pode** ir para DONE — corrija os achados e re-rode.
122
+
123
+ ---
124
+
125
+ ## 8. CRITÉRIOS DE DONE
126
+
127
+ - [ ] Todos os 4 validation gates passaram sem erros (build + test + lint + audit)
128
+ - [ ] Testes cobrem caminho feliz + erros enumerados + edge cases da seção 4
129
+ - [ ] Considerações de segurança da seção 5 todas checadas
130
+ - [ ] Arquivos listados na seção 3 criados/modificados conforme spec
131
+ - [ ] **`dare review <task-id>` passou** (seção 7 — sem stubs, mocks, TODOs)
132
+ - [ ] Cada validação declarada na spec tem teste demonstrando o erro real (não placeholder)
133
+ - [ ] Cada edge case enumerado tem teste cobrindo
134
+ - [ ] Endpoints retornam dados reais do banco/service, não hardcoded
135
+ - [ ] `DARE/TASKS.md` atualizado com status `DONE`
136
+
137
+ ---
138
+
139
+ ## 9. PRÓXIMA TASK SUGERIDA
140
+
141
+ `[task-id]` — [título] _(desbloqueada após conclusão desta task)_
@@ -1,41 +1,41 @@
1
- services:
2
- app:
3
- build: .
4
- ports:
5
- - "${PORT:-3000}:3000"
6
- env_file: .env
7
- depends_on:
8
- db:
9
- condition: service_healthy
10
- networks:
11
- - app-network
12
-
13
- db:
14
- image: postgres:16-alpine
15
- environment:
16
- POSTGRES_DB: ${DB_NAME:-{{PROJECT_NAME}}}
17
- POSTGRES_USER: ${DB_USER:-postgres}
18
- POSTGRES_PASSWORD: ${DB_PASS:-postgres}
19
- volumes:
20
- - db_data:/var/lib/postgresql/data
21
- healthcheck:
22
- test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres}"]
23
- interval: 10s
24
- timeout: 5s
25
- retries: 5
26
- networks:
27
- - app-network
28
-
29
- redis:
30
- image: redis:7-alpine
31
- volumes:
32
- - redis_data:/data
33
- networks:
34
- - app-network
35
-
36
- networks:
37
- app-network:
38
-
39
- volumes:
40
- db_data:
41
- redis_data:
1
+ services:
2
+ app:
3
+ build: .
4
+ ports:
5
+ - "${PORT:-3000}:3000"
6
+ env_file: .env
7
+ depends_on:
8
+ db:
9
+ condition: service_healthy
10
+ networks:
11
+ - app-network
12
+
13
+ db:
14
+ image: postgres:16-alpine
15
+ environment:
16
+ POSTGRES_DB: ${DB_NAME:-{{PROJECT_NAME}}}
17
+ POSTGRES_USER: ${DB_USER:-postgres}
18
+ POSTGRES_PASSWORD: ${DB_PASS:-postgres}
19
+ volumes:
20
+ - db_data:/var/lib/postgresql/data
21
+ healthcheck:
22
+ test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres}"]
23
+ interval: 10s
24
+ timeout: 5s
25
+ retries: 5
26
+ networks:
27
+ - app-network
28
+
29
+ redis:
30
+ image: redis:7-alpine
31
+ volumes:
32
+ - redis_data:/data
33
+ networks:
34
+ - app-network
35
+
36
+ networks:
37
+ app-network:
38
+
39
+ volumes:
40
+ db_data:
41
+ redis_data:
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=adapters.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapters.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/dag-runner/adapters.test.ts"],"names":[],"mappings":""}
@@ -1,134 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { getAdapter, MissingApiKeyError, pickModel, } from '../../dag-runner/adapters/index.js';
3
- const sampleModels = { HIGH: 'big', MED: 'mid', LOW: 'small' };
4
- // ─── Anthropic SDK mock ──────────────────────────────────────────────────────
5
- vi.mock('@anthropic-ai/sdk', () => {
6
- var _a;
7
- const create = vi.fn(async () => ({
8
- content: [{ type: 'text', text: 'mocked claude response' }],
9
- usage: { input_tokens: 10, output_tokens: 20 },
10
- }));
11
- // Default export is the client class.
12
- return {
13
- default: (_a = class MockAnthropic {
14
- constructor() {
15
- this.messages = { create };
16
- }
17
- },
18
- _a.__spy = create,
19
- _a),
20
- };
21
- });
22
- // ─── Cursor SDK mock ─────────────────────────────────────────────────────────
23
- vi.mock('@cursor/sdk', () => ({
24
- Agent: {
25
- create: vi.fn(async () => ({
26
- send: vi.fn(async () => ({
27
- cancel: vi.fn(async () => undefined),
28
- wait: vi.fn(async () => ({ result: 'mocked cursor response' })),
29
- })),
30
- close: vi.fn(async () => undefined),
31
- })),
32
- },
33
- }));
34
- // ─── Google Generative AI mock ───────────────────────────────────────────────
35
- vi.mock('@google/generative-ai', () => ({
36
- GoogleGenerativeAI: class {
37
- getGenerativeModel() {
38
- return {
39
- generateContent: async () => ({
40
- response: {
41
- text: () => 'mocked antigravity response',
42
- usageMetadata: { promptTokenCount: 5, candidatesTokenCount: 7 },
43
- },
44
- }),
45
- };
46
- }
47
- },
48
- }));
49
- describe('pickModel', () => {
50
- it('returns the model id for the given complexity', () => {
51
- expect(pickModel(sampleModels, 'HIGH')).toBe('big');
52
- expect(pickModel(sampleModels, 'MED')).toBe('mid');
53
- expect(pickModel(sampleModels, 'LOW')).toBe('small');
54
- });
55
- it('throws when models block is missing', () => {
56
- expect(() => pickModel(undefined, 'HIGH')).toThrow();
57
- });
58
- });
59
- describe('Adapters — happy path with mocked SDKs', () => {
60
- beforeEach(() => {
61
- process.env.ANTHROPIC_API_KEY = 'test-key';
62
- process.env.CURSOR_API_KEY = 'test-key';
63
- process.env.ANTIGRAVITY_API_KEY = 'test-key';
64
- });
65
- it('claude adapter calls SDK and returns text + tokens', async () => {
66
- const adapter = await getAdapter('claude');
67
- const ctrl = new AbortController();
68
- const res = await adapter.call({
69
- prompt: 'hi',
70
- complexity: 'MED',
71
- models: sampleModels,
72
- signal: ctrl.signal,
73
- });
74
- expect(res.output).toBe('mocked claude response');
75
- expect(res.tokens).toBe(30);
76
- });
77
- it('cursor adapter calls SDK and returns result', async () => {
78
- const adapter = await getAdapter('cursor');
79
- const ctrl = new AbortController();
80
- const res = await adapter.call({
81
- prompt: 'hi',
82
- complexity: 'LOW',
83
- models: sampleModels,
84
- signal: ctrl.signal,
85
- });
86
- expect(res.output).toBe('mocked cursor response');
87
- });
88
- it('antigravity adapter calls SDK and returns text + tokens', async () => {
89
- const adapter = await getAdapter('antigravity');
90
- const ctrl = new AbortController();
91
- const res = await adapter.call({
92
- prompt: 'hi',
93
- complexity: 'HIGH',
94
- models: sampleModels,
95
- signal: ctrl.signal,
96
- });
97
- expect(res.output).toBe('mocked antigravity response');
98
- expect(res.tokens).toBe(12);
99
- });
100
- });
101
- describe('Adapters — missing API keys', () => {
102
- it('claude adapter throws MissingApiKeyError when ANTHROPIC_API_KEY is unset', async () => {
103
- delete process.env.ANTHROPIC_API_KEY;
104
- const adapter = await getAdapter('claude');
105
- await expect(adapter.call({
106
- prompt: 'hi',
107
- complexity: 'MED',
108
- models: sampleModels,
109
- signal: new AbortController().signal,
110
- })).rejects.toBeInstanceOf(MissingApiKeyError);
111
- });
112
- it('cursor adapter throws MissingApiKeyError when CURSOR_API_KEY is unset', async () => {
113
- delete process.env.CURSOR_API_KEY;
114
- const adapter = await getAdapter('cursor');
115
- await expect(adapter.call({
116
- prompt: 'hi',
117
- complexity: 'MED',
118
- models: sampleModels,
119
- signal: new AbortController().signal,
120
- })).rejects.toBeInstanceOf(MissingApiKeyError);
121
- });
122
- it('antigravity adapter throws MissingApiKeyError when both env vars are unset', async () => {
123
- delete process.env.ANTIGRAVITY_API_KEY;
124
- delete process.env.GOOGLE_API_KEY;
125
- const adapter = await getAdapter('antigravity');
126
- await expect(adapter.call({
127
- prompt: 'hi',
128
- complexity: 'MED',
129
- models: sampleModels,
130
- signal: new AbortController().signal,
131
- })).rejects.toBeInstanceOf(MissingApiKeyError);
132
- });
133
- });
134
- //# sourceMappingURL=adapters.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapters.test.js","sourceRoot":"","sources":["../../../src/__tests__/dag-runner/adapters.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { type AdapterCallInput, type AdapterCallResult, type RunnerAdapter } from './index.js';
2
- export declare class AntigravityAdapter implements RunnerAdapter {
3
- readonly name: "antigravity";
4
- call({ prompt, complexity, models, signal }: AdapterCallInput): Promise<AdapterCallResult>;
5
- }
6
- //# sourceMappingURL=antigravity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../../src/dag-runner/adapters/antigravity.ts"],"names":[],"mappings":"AAWA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAQpB,qBAAa,kBAAmB,YAAW,aAAa;IACtD,QAAQ,CAAC,IAAI,EAAG,aAAa,CAAU;IAEjC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA6BjG"}
@@ -1,54 +0,0 @@
1
- /**
2
- * Antigravity adapter — uses Google Generative AI (Gemini) to execute a task.
3
- *
4
- * Antigravity (Google's IDE) does not expose a public agent SDK at the time
5
- * of writing, so we drive the underlying Gemini family directly. Models in
6
- * `dare-dag.yaml`'s `models.antigravity` block (e.g. `gemini-2.5-pro`,
7
- * `gemini-2.5-flash`) are passed as the model id.
8
- *
9
- * Env: ANTIGRAVITY_API_KEY (preferred) or GOOGLE_API_KEY (fallback).
10
- */
11
- import { GoogleGenerativeAI } from '@google/generative-ai';
12
- import { AdapterCallError, MissingApiKeyError, pickModel, } from './index.js';
13
- const SYSTEM_INSTRUCTION = 'You are a DARE subagent executing a single task from a DAG. Follow the prompt ' +
14
- 'exactly. When you finish, respond with a concise summary of what you did and the ' +
15
- 'paths of files you created or modified. Keep responses self-contained — your ' +
16
- 'output may be quoted into a downstream task.';
17
- export class AntigravityAdapter {
18
- constructor() {
19
- this.name = 'antigravity';
20
- }
21
- async call({ prompt, complexity, models, signal }) {
22
- const apiKey = process.env.ANTIGRAVITY_API_KEY ?? process.env.GOOGLE_API_KEY;
23
- if (!apiKey)
24
- throw new MissingApiKeyError('antigravity', 'ANTIGRAVITY_API_KEY');
25
- const modelId = pickModel(models, complexity);
26
- try {
27
- const client = new GoogleGenerativeAI(apiKey);
28
- const model = client.getGenerativeModel({
29
- model: modelId,
30
- systemInstruction: SYSTEM_INSTRUCTION,
31
- });
32
- const res = await model.generateContent({
33
- contents: [{ role: 'user', parts: [{ text: prompt }] }],
34
- }, { signal });
35
- const text = res.response.text();
36
- const usage = res.response.usageMetadata;
37
- const tokens = usage
38
- ? (usage.promptTokenCount ?? 0) + (usage.candidatesTokenCount ?? 0)
39
- : undefined;
40
- return { output: text, tokens };
41
- }
42
- catch (err) {
43
- if (err instanceof MissingApiKeyError)
44
- throw err;
45
- throw new AdapterCallError('antigravity', extractErrorMessage(err), err);
46
- }
47
- }
48
- }
49
- function extractErrorMessage(err) {
50
- if (err instanceof Error)
51
- return err.message;
52
- return String(err);
53
- }
54
- //# sourceMappingURL=antigravity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/dag-runner/adapters/antigravity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,GAIV,MAAM,YAAY,CAAC;AAEpB,MAAM,kBAAkB,GACtB,gFAAgF;IAChF,mFAAmF;IACnF,+EAA+E;IAC/E,8CAA8C,CAAC;AAEjD,MAAM,OAAO,kBAAkB;IAA/B;QACW,SAAI,GAAG,aAAsB,CAAC;IA+BzC,CAAC;IA7BC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAoB;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC7E,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QAEhF,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC;gBACtC,KAAK,EAAE,OAAO;gBACd,iBAAiB,EAAE,kBAAkB;aACtC,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC;gBACtC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;aACxD,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAEf,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK;gBAClB,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC;gBACnE,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB;gBAAE,MAAM,GAAG,CAAC;YACjD,MAAM,IAAI,gBAAgB,CAAC,aAAa,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC"}
@@ -1,6 +0,0 @@
1
- import { type AdapterCallInput, type AdapterCallResult, type RunnerAdapter } from './index.js';
2
- export declare class ClaudeAdapter implements RunnerAdapter {
3
- readonly name: "claude";
4
- call({ prompt, complexity, models, signal }: AdapterCallInput): Promise<AdapterCallResult>;
5
- }
6
- //# sourceMappingURL=claude.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/dag-runner/adapters/claude.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAQpB,qBAAa,aAAc,YAAW,aAAa;IACjD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAE5B,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA+BjG"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Claude adapter — calls the Anthropic Messages API to execute a task.
3
- *
4
- * Env: ANTHROPIC_API_KEY
5
- */
6
- import Anthropic from '@anthropic-ai/sdk';
7
- import { AdapterCallError, MissingApiKeyError, pickModel, } from './index.js';
8
- const SYSTEM_PROMPT = 'You are a DARE subagent executing a single task from a DAG. Follow the prompt ' +
9
- 'exactly. When you finish, respond with a concise summary of what you did and the ' +
10
- 'paths of files you created or modified. Keep responses self-contained — your ' +
11
- 'output may be quoted into a downstream task.';
12
- export class ClaudeAdapter {
13
- constructor() {
14
- this.name = 'claude';
15
- }
16
- async call({ prompt, complexity, models, signal }) {
17
- const apiKey = process.env.ANTHROPIC_API_KEY;
18
- if (!apiKey)
19
- throw new MissingApiKeyError('claude', 'ANTHROPIC_API_KEY');
20
- const model = pickModel(models, complexity);
21
- const client = new Anthropic({ apiKey });
22
- try {
23
- const res = await client.messages.create({
24
- model,
25
- max_tokens: 4096,
26
- system: SYSTEM_PROMPT,
27
- messages: [{ role: 'user', content: prompt }],
28
- }, { signal });
29
- const text = res.content
30
- .filter((b) => b.type === 'text')
31
- .map((b) => b.text)
32
- .join('\n');
33
- const tokens = (res.usage?.input_tokens ?? 0) + (res.usage?.output_tokens ?? 0);
34
- return { output: text, tokens };
35
- }
36
- catch (err) {
37
- if (err instanceof MissingApiKeyError)
38
- throw err;
39
- throw new AdapterCallError('claude', extractErrorMessage(err), err);
40
- }
41
- }
42
- }
43
- function extractErrorMessage(err) {
44
- if (err instanceof Error)
45
- return err.message;
46
- return String(err);
47
- }
48
- //# sourceMappingURL=claude.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/dag-runner/adapters/claude.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,GAIV,MAAM,YAAY,CAAC;AAEpB,MAAM,aAAa,GACjB,gFAAgF;IAChF,mFAAmF;IACnF,+EAA+E;IAC/E,8CAA8C,CAAC;AAEjD,MAAM,OAAO,aAAa;IAA1B;QACW,SAAI,GAAG,QAAiB,CAAC;IAiCpC,CAAC;IA/BC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAoB;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC7C,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAEzE,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CACtC;gBACE,KAAK;gBACL,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,aAAa;gBACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;aAC9C,EACD,EAAE,MAAM,EAAE,CACX,CAAC;YAEF,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO;iBACrB,MAAM,CAAC,CAAC,CAAC,EAA4B,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC;YAEhF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB;gBAAE,MAAM,GAAG,CAAC;YACjD,MAAM,IAAI,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC"}