@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
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tests for RemoteRegistry and RegistryResolver.
3
+ *
4
+ * Uses fetch mocks (vi.fn) — no real HTTP calls are made.
5
+ *
6
+ * @module skills/tests/remote-registry.spec
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=remote-registry.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-registry.spec.d.ts","sourceRoot":"","sources":["../../../src/skills/tests/remote-registry.spec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,357 @@
1
+ /**
2
+ * Tests for RemoteRegistry and RegistryResolver.
3
+ *
4
+ * Uses fetch mocks (vi.fn) — no real HTTP calls are made.
5
+ *
6
+ * @module skills/tests/remote-registry.spec
7
+ */
8
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
9
+ import { RemoteRegistry, RegistryResolver } from '../registry-remote.js';
10
+ import { LocalRegistry } from '../registry-local.js';
11
+ import fs from 'fs-extra';
12
+ import path from 'path';
13
+ import os from 'os';
14
+ // ---------------------------------------------------------------------------
15
+ // fetch mock helpers
16
+ // ---------------------------------------------------------------------------
17
+ function makeFetchMock(statusOrError, body) {
18
+ if (statusOrError instanceof Error) {
19
+ return vi.fn().mockRejectedValue(statusOrError);
20
+ }
21
+ const status = statusOrError;
22
+ return vi.fn().mockResolvedValue({
23
+ ok: status >= 200 && status < 300,
24
+ status,
25
+ json: async () => body,
26
+ });
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // Helpers
30
+ // ---------------------------------------------------------------------------
31
+ function makeTmpRegistry() {
32
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'dare-remote-test-'));
33
+ const reg = new LocalRegistry(dir);
34
+ return { dir, reg };
35
+ }
36
+ function makeLocalSkill(overrides = {}) {
37
+ return {
38
+ name: 'dare-ax',
39
+ version: '1.0.0',
40
+ description: 'Agent Experience patterns',
41
+ author: 'Wanderson',
42
+ license: 'MIT',
43
+ dare_version: '>=3.0.0',
44
+ keywords: ['ax'],
45
+ published_at: '2026-05-26T00:00:00Z',
46
+ size_kb: 48,
47
+ source: 'local',
48
+ ...overrides,
49
+ };
50
+ }
51
+ function makeSkillDir(tmpDir, name) {
52
+ const dir = path.join(tmpDir, name);
53
+ fs.ensureDirSync(dir);
54
+ fs.writeFileSync(path.join(dir, 'skill.yml'), `name: ${name}\nversion: 1.0.0\ndescription: Test\nauthor: Test\nlicense: MIT\ndare_version: ">=3.0.0"\n`);
55
+ return dir;
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // RemoteRegistry.list()
59
+ // ---------------------------------------------------------------------------
60
+ describe('RemoteRegistry.list()', () => {
61
+ let origFetch;
62
+ beforeEach(() => {
63
+ origFetch = globalThis.fetch;
64
+ });
65
+ afterEach(() => {
66
+ globalThis.fetch = origFetch;
67
+ });
68
+ it('returns skills from the remote registry', async () => {
69
+ const skills = [
70
+ { name: 'dare-ax', version: '1.0.0', description: 'AX', author: 'Wanderson', license: 'MIT', dare_version: '>=3.0.0', dependencies: {}, keywords: ['ax'], publishedAt: '2026-05-26T00:00:00Z' },
71
+ ];
72
+ globalThis.fetch = makeFetchMock(200, { skills });
73
+ const remote = new RemoteRegistry('https://example.com');
74
+ const result = await remote.list();
75
+ expect(result).toHaveLength(1);
76
+ expect(result[0].name).toBe('dare-ax');
77
+ });
78
+ it('returns empty array when fetch throws', async () => {
79
+ globalThis.fetch = makeFetchMock(new Error('Network error'));
80
+ const remote = new RemoteRegistry('https://example.com');
81
+ await expect(remote.list()).rejects.toThrow('Network error');
82
+ });
83
+ it('passes keyword filter as query parameter', async () => {
84
+ globalThis.fetch = makeFetchMock(200, { skills: [] });
85
+ const remote = new RemoteRegistry('https://example.com');
86
+ await remote.list({ keyword: 'ax' });
87
+ const callArgs = globalThis.fetch.mock.calls[0];
88
+ expect(callArgs[0]).toContain('keyword=ax');
89
+ });
90
+ it('passes author filter as query parameter', async () => {
91
+ globalThis.fetch = makeFetchMock(200, { skills: [] });
92
+ const remote = new RemoteRegistry('https://example.com');
93
+ await remote.list({ author: 'Wanderson' });
94
+ const callArgs = globalThis.fetch.mock.calls[0];
95
+ expect(callArgs[0]).toContain('author=Wanderson');
96
+ });
97
+ it('handles HTTP error status gracefully (non-2xx)', async () => {
98
+ globalThis.fetch = makeFetchMock(500, { skills: [] });
99
+ const remote = new RemoteRegistry('https://example.com');
100
+ // 500 returns { skills: [] } body — should return empty
101
+ const result = await remote.list();
102
+ expect(result).toEqual([]);
103
+ });
104
+ });
105
+ // ---------------------------------------------------------------------------
106
+ // RemoteRegistry.find()
107
+ // ---------------------------------------------------------------------------
108
+ describe('RemoteRegistry.find()', () => {
109
+ let origFetch;
110
+ beforeEach(() => {
111
+ origFetch = globalThis.fetch;
112
+ });
113
+ afterEach(() => {
114
+ globalThis.fetch = origFetch;
115
+ });
116
+ it('returns skill details when found', async () => {
117
+ const latest = { name: 'dare-ax', version: '1.0.0', description: 'AX', author: 'Wanderson', license: 'MIT', dare_version: '>=3.0.0', dependencies: {}, keywords: ['ax'], publishedAt: '2026-05-26T00:00:00Z' };
118
+ globalThis.fetch = makeFetchMock(200, { latest, versions: [latest] });
119
+ const remote = new RemoteRegistry('https://example.com');
120
+ const result = await remote.find('dare-ax');
121
+ expect(result).not.toBeNull();
122
+ expect(result.name).toBe('dare-ax');
123
+ });
124
+ it('returns null for 404', async () => {
125
+ globalThis.fetch = makeFetchMock(404, { title: 'Not Found', status: 404 });
126
+ const remote = new RemoteRegistry('https://example.com');
127
+ const result = await remote.find('nonexistent-skill');
128
+ expect(result).toBeNull();
129
+ });
130
+ it('returns null on network error', async () => {
131
+ globalThis.fetch = makeFetchMock(new Error('Timeout'));
132
+ const remote = new RemoteRegistry('https://example.com');
133
+ const result = await remote.find('dare-ax').catch(() => null);
134
+ expect(result).toBeNull();
135
+ });
136
+ });
137
+ // ---------------------------------------------------------------------------
138
+ // RemoteRegistry.publish()
139
+ // ---------------------------------------------------------------------------
140
+ describe('RemoteRegistry.publish()', () => {
141
+ let origFetch;
142
+ beforeEach(() => {
143
+ origFetch = globalThis.fetch;
144
+ });
145
+ afterEach(() => {
146
+ globalThis.fetch = origFetch;
147
+ });
148
+ it('succeeds with a valid token and MIT license', async () => {
149
+ globalThis.fetch = makeFetchMock(200, { message: 'Published', skill: {} });
150
+ const remote = new RemoteRegistry('https://example.com');
151
+ await expect(remote.publish('my-skill', {
152
+ version: '1.0.0',
153
+ description: 'My skill',
154
+ author: 'Author',
155
+ license: 'MIT',
156
+ dare_version: '>=3.0.0',
157
+ dependencies: {},
158
+ keywords: ['test'],
159
+ }, 'my-token')).resolves.toBeUndefined();
160
+ });
161
+ it('throws when server returns 401', async () => {
162
+ globalThis.fetch = makeFetchMock(401, { title: 'Unauthorized', detail: 'Token required' });
163
+ const remote = new RemoteRegistry('https://example.com');
164
+ await expect(remote.publish('my-skill', {
165
+ version: '1.0.0',
166
+ description: 'My skill',
167
+ author: 'Author',
168
+ license: 'MIT',
169
+ dare_version: '>=3.0.0',
170
+ dependencies: {},
171
+ keywords: [],
172
+ }, '')).rejects.toThrow('Remote publish failed');
173
+ });
174
+ it('throws when server returns 400 (non-MIT license)', async () => {
175
+ globalThis.fetch = makeFetchMock(400, { title: 'License Not Allowed', detail: 'Only MIT is accepted' });
176
+ const remote = new RemoteRegistry('https://example.com');
177
+ await expect(remote.publish('my-skill', {
178
+ version: '1.0.0',
179
+ description: 'My skill',
180
+ author: 'Author',
181
+ license: 'Apache-2.0',
182
+ dare_version: '>=3.0.0',
183
+ dependencies: {},
184
+ keywords: [],
185
+ }, 'valid-token')).rejects.toThrow('Remote publish failed');
186
+ });
187
+ it('sends Authorization header with Bearer token', async () => {
188
+ globalThis.fetch = makeFetchMock(200, { message: 'OK' });
189
+ const remote = new RemoteRegistry('https://example.com');
190
+ await remote.publish('my-skill', {
191
+ version: '1.0.0',
192
+ description: 'x',
193
+ author: 'x',
194
+ license: 'MIT',
195
+ dare_version: '>=3.0.0',
196
+ dependencies: {},
197
+ keywords: [],
198
+ }, 'ghp_mytoken');
199
+ const callArgs = globalThis.fetch.mock.calls[0];
200
+ expect(callArgs[1].headers['Authorization']).toBe('Bearer ghp_mytoken');
201
+ });
202
+ });
203
+ // ---------------------------------------------------------------------------
204
+ // RegistryResolver priority: remote > local > mock
205
+ // ---------------------------------------------------------------------------
206
+ describe('RegistryResolver — source priority', () => {
207
+ let tmpDir;
208
+ let origFetch;
209
+ beforeEach(() => {
210
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'dare-resolver-test-'));
211
+ origFetch = globalThis.fetch;
212
+ });
213
+ afterEach(() => {
214
+ fs.rmSync(tmpDir, { recursive: true, force: true });
215
+ globalThis.fetch = origFetch;
216
+ });
217
+ it('labels skills from mock with source "mock"', async () => {
218
+ // Simulate remote timeout/offline
219
+ globalThis.fetch = makeFetchMock(new Error('Network error'));
220
+ const { reg } = makeTmpRegistry();
221
+ const resolver = new RegistryResolver(new RemoteRegistry('https://example.com', 100), reg);
222
+ const skills = await resolver.list();
223
+ // All skills from mock when remote is offline and local is empty
224
+ for (const s of skills) {
225
+ expect(['mock', 'local']).toContain(s.source);
226
+ }
227
+ });
228
+ it('remote skills override mock skills with same name@version', async () => {
229
+ const remoteSkill = {
230
+ name: 'dare-ax',
231
+ version: '1.0.0',
232
+ description: 'Remote description',
233
+ author: 'RemoteAuthor',
234
+ license: 'MIT',
235
+ dare_version: '>=3.0.0',
236
+ dependencies: {},
237
+ keywords: ['ax'],
238
+ publishedAt: '2026-05-26T00:00:00Z',
239
+ };
240
+ globalThis.fetch = makeFetchMock(200, { skills: [remoteSkill] });
241
+ const { reg } = makeTmpRegistry();
242
+ const resolver = new RegistryResolver(new RemoteRegistry('https://example.com', 3000), reg);
243
+ const skills = await resolver.list();
244
+ const dareAx = skills.find((s) => s.name === 'dare-ax' && s.version === '1.0.0');
245
+ expect(dareAx).toBeDefined();
246
+ expect(dareAx.source).toBe('remote');
247
+ expect(dareAx.description).toBe('Remote description');
248
+ });
249
+ it('local skills override mock skills with same name@version', async () => {
250
+ globalThis.fetch = makeFetchMock(new Error('Offline'));
251
+ const { dir, reg } = makeTmpRegistry();
252
+ const skillDir = makeSkillDir(tmpDir, 'dare-ax');
253
+ const localMeta = makeLocalSkill({
254
+ description: 'Local description',
255
+ });
256
+ reg.publish(skillDir, localMeta);
257
+ const resolver = new RegistryResolver(new RemoteRegistry('https://example.com', 100), reg);
258
+ const skills = await resolver.list();
259
+ const dareAx = skills.find((s) => s.name === 'dare-ax' && s.version === '1.0.0');
260
+ expect(dareAx).toBeDefined();
261
+ expect(dareAx.source).toBe('local');
262
+ expect(dareAx.description).toBe('Local description');
263
+ });
264
+ it('falls back to local when remote times out', async () => {
265
+ // Simulate timeout by making fetch hang until AbortController kicks in
266
+ globalThis.fetch = vi.fn().mockImplementation(() => {
267
+ return new Promise((_, reject) => {
268
+ setTimeout(() => reject(new Error('AbortError')), 500);
269
+ });
270
+ });
271
+ const { dir, reg } = makeTmpRegistry();
272
+ const skillDir = makeSkillDir(tmpDir, 'my-local-skill');
273
+ const localMeta = makeLocalSkill({
274
+ name: 'my-local-skill',
275
+ description: 'From local fallback',
276
+ });
277
+ reg.publish(skillDir, localMeta);
278
+ const resolver = new RegistryResolver(new RemoteRegistry('https://example.com', 50), // very short timeout
279
+ reg);
280
+ const skills = await resolver.list();
281
+ const localSkill = skills.find((s) => s.name === 'my-local-skill');
282
+ expect(localSkill).toBeDefined();
283
+ expect(localSkill.source).toBe('local');
284
+ });
285
+ it('falls back to mock when both remote and local are empty', async () => {
286
+ globalThis.fetch = makeFetchMock(new Error('Offline'));
287
+ const { reg } = makeTmpRegistry(); // empty local registry
288
+ const resolver = new RegistryResolver(new RemoteRegistry('https://example.com', 100), reg);
289
+ const skills = await resolver.list();
290
+ expect(skills.length).toBeGreaterThan(0);
291
+ const mockSkills = skills.filter((s) => s.source === 'mock');
292
+ expect(mockSkills.length).toBeGreaterThan(0);
293
+ });
294
+ // ---- find() priority ----
295
+ it('find() returns remote skill first', async () => {
296
+ const remoteSkill = {
297
+ name: 'dare-ax',
298
+ version: '2.0.0',
299
+ description: 'Remote v2',
300
+ author: 'Wanderson',
301
+ license: 'MIT',
302
+ dare_version: '>=3.0.0',
303
+ dependencies: {},
304
+ keywords: ['ax'],
305
+ publishedAt: '2026-05-26T00:00:00Z',
306
+ };
307
+ globalThis.fetch = makeFetchMock(200, { latest: remoteSkill, versions: [remoteSkill] });
308
+ const { reg } = makeTmpRegistry();
309
+ const resolver = new RegistryResolver(new RemoteRegistry('https://example.com', 3000), reg);
310
+ const result = await resolver.find('dare-ax');
311
+ expect(result).not.toBeNull();
312
+ expect(result.source).toBe('remote');
313
+ });
314
+ it('find() falls back to mock when remote returns 404', async () => {
315
+ globalThis.fetch = makeFetchMock(404, { title: 'Not Found', status: 404 });
316
+ const { reg } = makeTmpRegistry();
317
+ const resolver = new RegistryResolver(new RemoteRegistry('https://example.com', 3000), reg);
318
+ const result = await resolver.find('dare-ax');
319
+ expect(result).not.toBeNull();
320
+ expect(result.source).toBe('mock'); // falls back to mock
321
+ });
322
+ it('find() returns null when skill not found anywhere', async () => {
323
+ globalThis.fetch = makeFetchMock(404, { title: 'Not Found', status: 404 });
324
+ const { reg } = makeTmpRegistry();
325
+ const resolver = new RegistryResolver(new RemoteRegistry('https://example.com', 3000), reg);
326
+ const result = await resolver.find('completely-unknown-skill-xyz');
327
+ expect(result).toBeNull();
328
+ });
329
+ });
330
+ // ---------------------------------------------------------------------------
331
+ // RemoteRegistry.isOnline()
332
+ // ---------------------------------------------------------------------------
333
+ describe('RemoteRegistry.isOnline()', () => {
334
+ let origFetch;
335
+ beforeEach(() => {
336
+ origFetch = globalThis.fetch;
337
+ });
338
+ afterEach(() => {
339
+ globalThis.fetch = origFetch;
340
+ });
341
+ it('returns true when registry responds 200', async () => {
342
+ globalThis.fetch = makeFetchMock(200, { skills: [] });
343
+ const remote = new RemoteRegistry('https://example.com');
344
+ expect(await remote.isOnline()).toBe(true);
345
+ });
346
+ it('returns false when registry is offline', async () => {
347
+ globalThis.fetch = makeFetchMock(new Error('Connection refused'));
348
+ const remote = new RemoteRegistry('https://example.com');
349
+ expect(await remote.isOnline()).toBe(false);
350
+ });
351
+ it('returns false when registry returns 500', async () => {
352
+ globalThis.fetch = makeFetchMock(500, {});
353
+ const remote = new RemoteRegistry('https://example.com');
354
+ expect(await remote.isOnline()).toBe(false);
355
+ });
356
+ });
357
+ //# sourceMappingURL=remote-registry.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-registry.spec.js","sourceRoot":"","sources":["../../../src/skills/tests/remote-registry.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Unit tests for `dare skill update`.
3
+ *
4
+ * Exercises UpdateResult shapes; does NOT spawn a real process.
5
+ * Uses temp directories and patches registry via dependency injection
6
+ * (passes cwd to ManifestWriter/Reader).
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=update.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.spec.d.ts","sourceRoot":"","sources":["../../../src/skills/tests/update.spec.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Unit tests for `dare skill update`.
3
+ *
4
+ * Exercises UpdateResult shapes; does NOT spawn a real process.
5
+ * Uses temp directories and patches registry via dependency injection
6
+ * (passes cwd to ManifestWriter/Reader).
7
+ */
8
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
9
+ import fs from 'fs-extra';
10
+ import os from 'os';
11
+ import path from 'path';
12
+ import { ManifestWriter, ManifestReader } from '../manifest.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Helpers
15
+ // ---------------------------------------------------------------------------
16
+ let tmpDir;
17
+ beforeEach(async () => {
18
+ tmpDir = path.join(os.tmpdir(), `dare-update-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
19
+ await fs.ensureDir(tmpDir);
20
+ });
21
+ afterEach(async () => {
22
+ await fs.remove(tmpDir).catch(() => undefined);
23
+ vi.restoreAllMocks();
24
+ });
25
+ function installSkill(name, version) {
26
+ const writer = new ManifestWriter();
27
+ writer.addSkill(tmpDir, { name, version, enabled: true });
28
+ }
29
+ function readInstalledVersion(name) {
30
+ const reader = new ManifestReader();
31
+ const manifest = reader.readOrEmpty(tmpDir);
32
+ return manifest.skills.find((s) => s.name === name)?.version;
33
+ }
34
+ // ---------------------------------------------------------------------------
35
+ // UpdateResult logic — tested via direct registry + manifest manipulation
36
+ // (mirrors what update.ts does internally)
37
+ // ---------------------------------------------------------------------------
38
+ describe('dare skill update — business logic', () => {
39
+ // ── Scenario helpers ──────────────────────────────────────────────────────
40
+ function simulateUpdate(name, installedVersion, targetVersion) {
41
+ const writer = new ManifestWriter();
42
+ const reader = new ManifestReader();
43
+ if (installedVersion !== null) {
44
+ writer.addSkill(tmpDir, { name, version: installedVersion, enabled: true });
45
+ }
46
+ const manifest = reader.readOrEmpty(tmpDir);
47
+ const installed = manifest.skills.find((s) => s.name === name);
48
+ if (!installed) {
49
+ return { notInstalled: true, alreadyUpToDate: false, updated: false, from: null, to: targetVersion };
50
+ }
51
+ if (installed.version === targetVersion) {
52
+ return { notInstalled: false, alreadyUpToDate: true, updated: false, from: installed.version, to: targetVersion };
53
+ }
54
+ // Perform update
55
+ writer.addSkill(tmpDir, { name, version: targetVersion, enabled: installed.enabled });
56
+ return { notInstalled: false, alreadyUpToDate: false, updated: true, from: installed.version, to: targetVersion };
57
+ }
58
+ // ── Tests ─────────────────────────────────────────────────────────────────
59
+ it('returns notInstalled=true when skill is not in manifest', () => {
60
+ const result = simulateUpdate('dare-ax', null, '1.1.0');
61
+ expect(result.notInstalled).toBe(true);
62
+ expect(result.updated).toBe(false);
63
+ });
64
+ it('returns alreadyUpToDate=true when versions match', () => {
65
+ const result = simulateUpdate('dare-ax', '1.0.0', '1.0.0');
66
+ expect(result.alreadyUpToDate).toBe(true);
67
+ expect(result.updated).toBe(false);
68
+ expect(result.from).toBe('1.0.0');
69
+ expect(result.to).toBe('1.0.0');
70
+ });
71
+ it('performs update and returns updated=true', () => {
72
+ const result = simulateUpdate('dare-ax', '1.0.0', '1.1.0');
73
+ expect(result.updated).toBe(true);
74
+ expect(result.from).toBe('1.0.0');
75
+ expect(result.to).toBe('1.1.0');
76
+ });
77
+ it('manifest reflects new version after update', () => {
78
+ simulateUpdate('dare-ax', '1.0.0', '1.1.0');
79
+ expect(readInstalledVersion('dare-ax')).toBe('1.1.0');
80
+ });
81
+ it('manifest still has single entry after update (no duplicates)', () => {
82
+ simulateUpdate('dare-ax', '1.0.0', '2.0.0');
83
+ const reader = new ManifestReader();
84
+ const manifest = reader.readOrEmpty(tmpDir);
85
+ const entries = manifest.skills.filter((s) => s.name === 'dare-ax');
86
+ expect(entries).toHaveLength(1);
87
+ });
88
+ it('preserves enabled state after update', () => {
89
+ const writer = new ManifestWriter();
90
+ writer.addSkill(tmpDir, { name: 'dare-ax', version: '1.0.0', enabled: false });
91
+ simulateUpdate('dare-ax', '1.0.0', '1.1.0');
92
+ // The simulation always uses enabled: installed.enabled
93
+ // After re-running via writer.addSkill, check what remains
94
+ const reader = new ManifestReader();
95
+ const manifest = reader.readOrEmpty(tmpDir);
96
+ const entry = manifest.skills.find((s) => s.name === 'dare-ax');
97
+ expect(entry?.version).toBe('1.1.0');
98
+ });
99
+ it('does not modify manifest on dry-run (simulated)', () => {
100
+ installSkill('dare-ax', '1.0.0');
101
+ // Dry-run: do NOT call writer.addSkill
102
+ const reader = new ManifestReader();
103
+ const manifest = reader.readOrEmpty(tmpDir);
104
+ const installed = manifest.skills.find((s) => s.name === 'dare-ax');
105
+ // Version should still be 1.0.0
106
+ expect(installed?.version).toBe('1.0.0');
107
+ });
108
+ it('can update multiple skills independently', () => {
109
+ installSkill('dare-ax', '1.0.0');
110
+ installSkill('dare-layered-design', '1.0.0');
111
+ simulateUpdate('dare-ax', '1.0.0', '1.1.0');
112
+ // dare-layered-design should remain at 1.0.0
113
+ expect(readInstalledVersion('dare-ax')).toBe('1.1.0');
114
+ expect(readInstalledVersion('dare-layered-design')).toBe('1.0.0');
115
+ });
116
+ it('from field is null when skill is not installed', () => {
117
+ const result = simulateUpdate('dare-ax', null, '1.1.0');
118
+ expect(result.from).toBeNull();
119
+ });
120
+ it('to field reflects the requested target version', () => {
121
+ const result = simulateUpdate('dare-ax', '1.0.0', '2.5.3');
122
+ expect(result.to).toBe('2.5.3');
123
+ });
124
+ });
125
+ // ---------------------------------------------------------------------------
126
+ // UpdateResult — JSON shape contract
127
+ // ---------------------------------------------------------------------------
128
+ describe('dare skill update — result shape', () => {
129
+ it('UpdateResult has all required fields', () => {
130
+ const result = {
131
+ name: 'dare-ax',
132
+ from: '1.0.0',
133
+ to: '1.1.0',
134
+ updated: true,
135
+ alreadyUpToDate: false,
136
+ notInstalled: false,
137
+ dryRun: false,
138
+ };
139
+ // All required fields present
140
+ expect(result).toHaveProperty('name');
141
+ expect(result).toHaveProperty('from');
142
+ expect(result).toHaveProperty('to');
143
+ expect(result).toHaveProperty('updated');
144
+ expect(result).toHaveProperty('alreadyUpToDate');
145
+ expect(result).toHaveProperty('notInstalled');
146
+ expect(result).toHaveProperty('dryRun');
147
+ });
148
+ it('dry-run result has dryRun=true and updated=false', () => {
149
+ const result = {
150
+ name: 'dare-ax',
151
+ from: '1.0.0',
152
+ to: '1.1.0',
153
+ updated: false,
154
+ alreadyUpToDate: false,
155
+ notInstalled: false,
156
+ dryRun: true,
157
+ };
158
+ expect(result.dryRun).toBe(true);
159
+ expect(result.updated).toBe(false);
160
+ });
161
+ it('error field is optional', () => {
162
+ const result = { name: 'dare-ax' };
163
+ expect(result.error).toBeUndefined();
164
+ });
165
+ });
166
+ //# sourceMappingURL=update.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.spec.js","sourceRoot":"","sources":["../../../src/skills/tests/update.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * DARE CLI — ASCII art banner
3
+ * Displayed on: dare (no args), dare new, dare --version, dare welcome
4
+ *
5
+ * Suppressed when:
6
+ * - process.stdout.isTTY is false (pipe/redirect)
7
+ * - DARE_NO_BANNER=1 env var
8
+ * - --no-banner global flag
9
+ *
10
+ * License: MIT (D-001)
11
+ */
12
+ /**
13
+ * Render the DARE ASCII art using the best available figlet font.
14
+ * Falls back through FONT_FALLBACKS until a non-empty result is obtained.
15
+ */
16
+ export declare function renderBanner(): string;
17
+ /**
18
+ * Print the DARE ASCII art banner to stdout.
19
+ *
20
+ * Respects suppression rules:
21
+ * - !process.stdout.isTTY → silent (unless FORCE_BANNER=1)
22
+ * - DARE_NO_BANNER=1 → silent
23
+ * - options.noColor=true → ANSI green instead of truecolor gradient
24
+ */
25
+ export declare function printBanner(options?: {
26
+ noColor?: boolean;
27
+ }): void;
28
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyBH;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAUrC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CA0BrE"}