@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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,gFAAgF,CAAC;KAC7F,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,gBAAgB,CAAC;KAC5B,UAAU,CAAC,eAAe,CAAC;KAC3B,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,mBAAmB,CAAC,CAAC;AAEnC,mFAAmF;AACnF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Manifest — reads and writes `.dare/skills.yml`
3
+ *
4
+ * Source of truth for all installed skills in a DARE project.
5
+ * Format is intentionally human-readable but managed by the CLI (ADR-01).
6
+ *
7
+ * @module skills/manifest
8
+ */
9
+ export interface SkillEntry {
10
+ name: string;
11
+ version: string;
12
+ enabled: boolean;
13
+ dependsOn?: string[];
14
+ }
15
+ export interface Manifest {
16
+ skills: SkillEntry[];
17
+ }
18
+ export declare class ManifestReader {
19
+ /**
20
+ * Returns true when a manifest file exists at the given project root.
21
+ */
22
+ exists(projectPath: string): boolean;
23
+ /**
24
+ * Reads and parses the manifest.
25
+ * Throws a descriptive error when the file is absent or malformed.
26
+ */
27
+ read(projectPath: string): Manifest;
28
+ /**
29
+ * Reads the manifest if it exists, or returns an empty one.
30
+ */
31
+ readOrEmpty(projectPath: string): Manifest;
32
+ private _validate;
33
+ }
34
+ export declare class ManifestWriter {
35
+ private readonly _reader;
36
+ /**
37
+ * Writes (overwrites) the full manifest to disk.
38
+ * Creates `.dare/` directory if it does not exist.
39
+ */
40
+ write(projectPath: string, manifest: Manifest): void;
41
+ /**
42
+ * Adds a skill entry to the manifest.
43
+ * If the skill already exists (same name), it is replaced.
44
+ */
45
+ addSkill(projectPath: string, skill: SkillEntry): void;
46
+ /**
47
+ * Removes a skill entry by name.
48
+ * No-op if the skill is not present.
49
+ */
50
+ removeSkill(projectPath: string, skillName: string): void;
51
+ /** Convert to a plain object that yaml serialises predictably. */
52
+ private _toSerializable;
53
+ }
54
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/skills/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAoBD,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIpC;;;OAGG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAuBnC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAS1C,OAAO,CAAC,SAAS;CAqDlB;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAYpD;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAatD;;;OAGG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAQzD,kEAAkE;IAClE,OAAO,CAAC,eAAe;CAexB"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Manifest — reads and writes `.dare/skills.yml`
3
+ *
4
+ * Source of truth for all installed skills in a DARE project.
5
+ * Format is intentionally human-readable but managed by the CLI (ADR-01).
6
+ *
7
+ * @module skills/manifest
8
+ */
9
+ import fs from 'fs-extra';
10
+ import path from 'path';
11
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
12
+ // ---------------------------------------------------------------------------
13
+ // Constants
14
+ // ---------------------------------------------------------------------------
15
+ const MANIFEST_DIR = '.dare';
16
+ const MANIFEST_FILE = 'skills.yml';
17
+ function manifestPath(projectPath) {
18
+ return path.join(projectPath, MANIFEST_DIR, MANIFEST_FILE);
19
+ }
20
+ const HEADER_COMMENT = '# .dare/skills.yml — Managed by DARE CLI. Do not edit manually.\n';
21
+ // ---------------------------------------------------------------------------
22
+ // ManifestReader
23
+ // ---------------------------------------------------------------------------
24
+ export class ManifestReader {
25
+ /**
26
+ * Returns true when a manifest file exists at the given project root.
27
+ */
28
+ exists(projectPath) {
29
+ return fs.pathExistsSync(manifestPath(projectPath));
30
+ }
31
+ /**
32
+ * Reads and parses the manifest.
33
+ * Throws a descriptive error when the file is absent or malformed.
34
+ */
35
+ read(projectPath) {
36
+ const filePath = manifestPath(projectPath);
37
+ if (!fs.pathExistsSync(filePath)) {
38
+ throw new Error(`Manifest not found at ${filePath}. Run 'dare skill add <name>' to create one.`);
39
+ }
40
+ const raw = fs.readFileSync(filePath, 'utf-8');
41
+ let parsed;
42
+ try {
43
+ parsed = parseYaml(raw);
44
+ }
45
+ catch (err) {
46
+ throw new Error(`Failed to parse ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
47
+ }
48
+ return this._validate(parsed, filePath);
49
+ }
50
+ /**
51
+ * Reads the manifest if it exists, or returns an empty one.
52
+ */
53
+ readOrEmpty(projectPath) {
54
+ if (!this.exists(projectPath)) {
55
+ return { skills: [] };
56
+ }
57
+ return this.read(projectPath);
58
+ }
59
+ // ---- private -------------------------------------------------------------
60
+ _validate(raw, filePath) {
61
+ if (typeof raw !== 'object' || raw === null) {
62
+ throw new Error(`${filePath}: expected an object at top level, got ${typeof raw}.`);
63
+ }
64
+ const obj = raw;
65
+ if (!Array.isArray(obj['skills'])) {
66
+ throw new Error(`${filePath}: 'skills' must be an array.`);
67
+ }
68
+ const skills = obj['skills'].map((item, idx) => {
69
+ if (typeof item !== 'object' || item === null) {
70
+ throw new Error(`${filePath}: skills[${idx}] must be an object.`);
71
+ }
72
+ const entry = item;
73
+ if (typeof entry['name'] !== 'string' || !entry['name']) {
74
+ throw new Error(`${filePath}: skills[${idx}].name must be a non-empty string.`);
75
+ }
76
+ if (typeof entry['version'] !== 'string' || !entry['version']) {
77
+ throw new Error(`${filePath}: skills[${idx}].version must be a non-empty string.`);
78
+ }
79
+ if (typeof entry['enabled'] !== 'boolean') {
80
+ throw new Error(`${filePath}: skills[${idx}].enabled must be a boolean.`);
81
+ }
82
+ const skill = {
83
+ name: entry['name'],
84
+ version: entry['version'],
85
+ enabled: entry['enabled'],
86
+ };
87
+ if (Array.isArray(entry['dependsOn'])) {
88
+ skill.dependsOn = entry['dependsOn'].map((d, i) => {
89
+ if (typeof d !== 'string') {
90
+ throw new Error(`${filePath}: skills[${idx}].dependsOn[${i}] must be a string.`);
91
+ }
92
+ return d;
93
+ });
94
+ }
95
+ return skill;
96
+ });
97
+ return { skills };
98
+ }
99
+ }
100
+ // ---------------------------------------------------------------------------
101
+ // ManifestWriter
102
+ // ---------------------------------------------------------------------------
103
+ export class ManifestWriter {
104
+ constructor() {
105
+ this._reader = new ManifestReader();
106
+ }
107
+ /**
108
+ * Writes (overwrites) the full manifest to disk.
109
+ * Creates `.dare/` directory if it does not exist.
110
+ */
111
+ write(projectPath, manifest) {
112
+ const filePath = manifestPath(projectPath);
113
+ fs.ensureDirSync(path.dirname(filePath));
114
+ const yamlBody = stringifyYaml(this._toSerializable(manifest), {
115
+ indent: 2,
116
+ lineWidth: 120,
117
+ });
118
+ fs.writeFileSync(filePath, HEADER_COMMENT + yamlBody, 'utf-8');
119
+ }
120
+ /**
121
+ * Adds a skill entry to the manifest.
122
+ * If the skill already exists (same name), it is replaced.
123
+ */
124
+ addSkill(projectPath, skill) {
125
+ const manifest = this._reader.readOrEmpty(projectPath);
126
+ const idx = manifest.skills.findIndex((s) => s.name === skill.name);
127
+ if (idx >= 0) {
128
+ manifest.skills[idx] = skill;
129
+ }
130
+ else {
131
+ manifest.skills.push(skill);
132
+ }
133
+ this.write(projectPath, manifest);
134
+ }
135
+ /**
136
+ * Removes a skill entry by name.
137
+ * No-op if the skill is not present.
138
+ */
139
+ removeSkill(projectPath, skillName) {
140
+ const manifest = this._reader.readOrEmpty(projectPath);
141
+ manifest.skills = manifest.skills.filter((s) => s.name !== skillName);
142
+ this.write(projectPath, manifest);
143
+ }
144
+ // ---- private -------------------------------------------------------------
145
+ /** Convert to a plain object that yaml serialises predictably. */
146
+ _toSerializable(manifest) {
147
+ return {
148
+ skills: manifest.skills.map((s) => {
149
+ const entry = {
150
+ name: s.name,
151
+ version: s.version,
152
+ enabled: s.enabled,
153
+ };
154
+ if (s.dependsOn && s.dependsOn.length > 0) {
155
+ entry['dependsOn'] = s.dependsOn;
156
+ }
157
+ return entry;
158
+ }),
159
+ };
160
+ }
161
+ }
162
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/skills/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * LocalRegistry — persistent skill registry stored in `~/.dare/registry/`.
3
+ *
4
+ * Directory layout:
5
+ *
6
+ * ```
7
+ * ~/.dare/registry/
8
+ * ├── index.json # { skills: [{ name, version, description, ... }] }
9
+ * ├── dare-ax/
10
+ * │ └── 1.0.0/
11
+ * │ ├── skill.yml
12
+ * │ └── index.ts
13
+ * └── dare-layered-design/
14
+ * └── 1.0.0/
15
+ * └── ...
16
+ * ```
17
+ *
18
+ * This acts as a local publish target that `dare skill publish` writes to, and
19
+ * `dare skill add` falls back to when the remote mock registry has no match.
20
+ *
21
+ * @module skills/registry-local
22
+ */
23
+ export interface LocalRegistrySkill {
24
+ name: string;
25
+ version: string;
26
+ description: string;
27
+ author: string;
28
+ license: string;
29
+ homepage?: string;
30
+ repository?: string;
31
+ keywords?: string[];
32
+ dare_version?: string;
33
+ published_at?: string;
34
+ size_kb?: number;
35
+ source: 'local';
36
+ }
37
+ export declare class LocalRegistry {
38
+ private readonly _root;
39
+ constructor(root?: string);
40
+ /**
41
+ * Returns all skills in the local registry index.
42
+ */
43
+ list(): LocalRegistrySkill[];
44
+ /**
45
+ * Finds a skill by name (and optionally an exact version).
46
+ * Returns `null` when not found.
47
+ */
48
+ find(name: string, version?: string): LocalRegistrySkill | null;
49
+ /**
50
+ * Publishes a skill from `skillPath` into the local registry.
51
+ *
52
+ * Copies all files (excluding node_modules/, dist/, .git/) from `skillPath`
53
+ * into `~/.dare/registry/<name>/<version>/` and updates `index.json`.
54
+ */
55
+ publish(skillPath: string, meta: LocalRegistrySkill): void;
56
+ /**
57
+ * Installs a skill from the local registry into a project.
58
+ *
59
+ * Copies files from `~/.dare/registry/<name>/<version>/` into
60
+ * `<targetProjectPath>/packages/skills/<name>/`.
61
+ */
62
+ install(name: string, version: string, targetProjectPath: string): void;
63
+ private _indexPath;
64
+ private _readIndex;
65
+ private _writeIndex;
66
+ }
67
+ //# sourceMappingURL=registry-local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-local.d.ts","sourceRoot":"","sources":["../../src/skills/registry-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAUH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAqBD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,IAAI,CAAC,EAAE,MAAM;IAMzB;;OAEG;IACH,IAAI,IAAI,kBAAkB,EAAE;IAI5B;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAkB/D;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;IA0B1D;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAevE,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,WAAW;CAIpB"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * LocalRegistry — persistent skill registry stored in `~/.dare/registry/`.
3
+ *
4
+ * Directory layout:
5
+ *
6
+ * ```
7
+ * ~/.dare/registry/
8
+ * ├── index.json # { skills: [{ name, version, description, ... }] }
9
+ * ├── dare-ax/
10
+ * │ └── 1.0.0/
11
+ * │ ├── skill.yml
12
+ * │ └── index.ts
13
+ * └── dare-layered-design/
14
+ * └── 1.0.0/
15
+ * └── ...
16
+ * ```
17
+ *
18
+ * This acts as a local publish target that `dare skill publish` writes to, and
19
+ * `dare skill add` falls back to when the remote mock registry has no match.
20
+ *
21
+ * @module skills/registry-local
22
+ */
23
+ import fs from 'fs-extra';
24
+ import path from 'path';
25
+ import os from 'os';
26
+ // ---------------------------------------------------------------------------
27
+ // Constants
28
+ // ---------------------------------------------------------------------------
29
+ /** Default path for the local registry root. Tests can override via env var. */
30
+ function getRegistryRoot() {
31
+ return process.env['DARE_LOCAL_REGISTRY'] ?? path.join(os.homedir(), '.dare', 'registry');
32
+ }
33
+ const INDEX_FILE = 'index.json';
34
+ // ---------------------------------------------------------------------------
35
+ // LocalRegistry
36
+ // ---------------------------------------------------------------------------
37
+ export class LocalRegistry {
38
+ constructor(root) {
39
+ this._root = root ?? getRegistryRoot();
40
+ }
41
+ // ---- Read -----------------------------------------------------------------
42
+ /**
43
+ * Returns all skills in the local registry index.
44
+ */
45
+ list() {
46
+ return this._readIndex().skills;
47
+ }
48
+ /**
49
+ * Finds a skill by name (and optionally an exact version).
50
+ * Returns `null` when not found.
51
+ */
52
+ find(name, version) {
53
+ const skills = this._readIndex().skills;
54
+ const matches = skills.filter((s) => s.name === name);
55
+ if (matches.length === 0)
56
+ return null;
57
+ if (version) {
58
+ return matches.find((s) => s.version === version) ?? null;
59
+ }
60
+ // Return the latest by published_at, or just the last entry.
61
+ return matches.sort((a, b) => (b.published_at ?? '').localeCompare(a.published_at ?? ''))[0] ?? null;
62
+ }
63
+ // ---- Write ----------------------------------------------------------------
64
+ /**
65
+ * Publishes a skill from `skillPath` into the local registry.
66
+ *
67
+ * Copies all files (excluding node_modules/, dist/, .git/) from `skillPath`
68
+ * into `~/.dare/registry/<name>/<version>/` and updates `index.json`.
69
+ */
70
+ publish(skillPath, meta) {
71
+ const destDir = path.join(this._root, meta.name, meta.version);
72
+ fs.ensureDirSync(destDir);
73
+ // Copy files (excluding node_modules, dist, .git).
74
+ const entries = fs.readdirSync(skillPath, { withFileTypes: true });
75
+ for (const entry of entries) {
76
+ if (['node_modules', 'dist', '.git'].includes(entry.name))
77
+ continue;
78
+ const src = path.join(skillPath, entry.name);
79
+ const dst = path.join(destDir, entry.name);
80
+ fs.copySync(src, dst);
81
+ }
82
+ // Update index.
83
+ const index = this._readIndex();
84
+ const existing = index.skills.findIndex((s) => s.name === meta.name && s.version === meta.version);
85
+ if (existing >= 0) {
86
+ index.skills[existing] = meta;
87
+ }
88
+ else {
89
+ index.skills.push(meta);
90
+ }
91
+ this._writeIndex(index);
92
+ }
93
+ /**
94
+ * Installs a skill from the local registry into a project.
95
+ *
96
+ * Copies files from `~/.dare/registry/<name>/<version>/` into
97
+ * `<targetProjectPath>/packages/skills/<name>/`.
98
+ */
99
+ install(name, version, targetProjectPath) {
100
+ const srcDir = path.join(this._root, name, version);
101
+ if (!fs.pathExistsSync(srcDir)) {
102
+ throw new Error(`Local registry does not have "${name}@${version}". ` +
103
+ `Run \`dare skill publish\` first.`);
104
+ }
105
+ const destDir = path.join(targetProjectPath, 'packages', 'skills', name);
106
+ fs.ensureDirSync(destDir);
107
+ fs.copySync(srcDir, destDir);
108
+ }
109
+ // ---- Private --------------------------------------------------------------
110
+ _indexPath() {
111
+ return path.join(this._root, INDEX_FILE);
112
+ }
113
+ _readIndex() {
114
+ const p = this._indexPath();
115
+ if (!fs.pathExistsSync(p)) {
116
+ return { skills: [] };
117
+ }
118
+ const raw = fs.readFileSync(p, 'utf-8');
119
+ const parsed = JSON.parse(raw);
120
+ if (typeof parsed !== 'object' || parsed === null || !Array.isArray(parsed['skills'])) {
121
+ return { skills: [] };
122
+ }
123
+ return parsed;
124
+ }
125
+ _writeIndex(index) {
126
+ fs.ensureDirSync(this._root);
127
+ fs.writeFileSync(this._indexPath(), JSON.stringify(index, null, 2) + '\n', 'utf-8');
128
+ }
129
+ }
130
+ //# sourceMappingURL=registry-local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-local.js","sourceRoot":"","sources":["../../src/skills/registry-local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ {
2
+ "skills": [
3
+ {
4
+ "name": "dare-ax",
5
+ "version": "1.0.0",
6
+ "description": "Agent Experience patterns for DARE projects",
7
+ "author": "Wanderson",
8
+ "license": "MIT",
9
+ "homepage": "https://github.com/dewtech-technologies/dare-method",
10
+ "repository": "https://github.com/dewtech-technologies/dare-method",
11
+ "keywords": ["ax", "agent-experience", "discovery"],
12
+ "dependencies": {},
13
+ "published_at": "2026-05-26T00:00:00Z",
14
+ "size_kb": 48
15
+ },
16
+ {
17
+ "name": "dare-layered-design",
18
+ "version": "1.0.0",
19
+ "description": "Layered architecture patterns (domain / application / infra)",
20
+ "author": "Wanderson",
21
+ "license": "MIT",
22
+ "homepage": "https://github.com/dewtech-technologies/dare-method",
23
+ "repository": "https://github.com/dewtech-technologies/dare-method",
24
+ "keywords": ["layered", "architecture", "ddd"],
25
+ "dependencies": {
26
+ "dare-ax": ">=1.0.0"
27
+ },
28
+ "published_at": "2026-05-26T00:00:00Z",
29
+ "size_kb": 72
30
+ },
31
+ {
32
+ "name": "dare-llm-integration",
33
+ "version": "1.0.0",
34
+ "description": "LLM integration patterns (prompts, chains, tools)",
35
+ "author": "Wanderson",
36
+ "license": "MIT",
37
+ "homepage": "https://github.com/dewtech-technologies/dare-method",
38
+ "repository": "https://github.com/dewtech-technologies/dare-method",
39
+ "keywords": ["llm", "ai", "prompts", "chains"],
40
+ "dependencies": {
41
+ "dare-ax": ">=1.0.0"
42
+ },
43
+ "published_at": "2026-05-26T00:00:00Z",
44
+ "size_kb": 96
45
+ },
46
+ {
47
+ "name": "dare-frontend-design",
48
+ "version": "1.0.0",
49
+ "description": "Frontend architecture patterns (components, state, routing)",
50
+ "author": "Wanderson",
51
+ "license": "MIT",
52
+ "homepage": "https://github.com/dewtech-technologies/dare-method",
53
+ "repository": "https://github.com/dewtech-technologies/dare-method",
54
+ "keywords": ["frontend", "components", "state", "routing"],
55
+ "dependencies": {
56
+ "dare-ax": ">=1.0.0"
57
+ },
58
+ "published_at": "2026-05-26T00:00:00Z",
59
+ "size_kb": 84
60
+ },
61
+ {
62
+ "name": "dare-realtime",
63
+ "version": "1.0.0",
64
+ "description": "Real-time patterns (WebSocket / SSE / CRDT)",
65
+ "author": "Wanderson",
66
+ "license": "MIT",
67
+ "homepage": "https://github.com/dewtech-technologies/dare-method",
68
+ "repository": "https://github.com/dewtech-technologies/dare-method",
69
+ "keywords": ["realtime", "websocket", "sse", "crdt"],
70
+ "dependencies": {
71
+ "dare-ax": ">=1.0.0"
72
+ },
73
+ "published_at": "2026-05-26T00:00:00Z",
74
+ "size_kb": 112
75
+ },
76
+ {
77
+ "name": "dare-quality-telemetry",
78
+ "version": "1.0.0",
79
+ "description": "Quality metrics collection (M-01 to M-04 tracking)",
80
+ "author": "Wanderson",
81
+ "license": "MIT",
82
+ "homepage": "https://github.com/dewtech-technologies/dare-method",
83
+ "repository": "https://github.com/dewtech-technologies/dare-method",
84
+ "keywords": ["quality", "telemetry", "metrics", "observability"],
85
+ "dependencies": {
86
+ "dare-ax": ">=1.0.0"
87
+ },
88
+ "published_at": "2026-05-26T00:00:00Z",
89
+ "size_kb": 64
90
+ },
91
+ {
92
+ "name": "ruby-rails-8",
93
+ "version": "1.0.0",
94
+ "description": "Rails 8 full-stack with all DARE patterns pre-configured",
95
+ "author": "Wanderson",
96
+ "license": "MIT",
97
+ "homepage": "https://github.com/dewtech-technologies/dare-method",
98
+ "repository": "https://github.com/dewtech-technologies/dare-method",
99
+ "keywords": ["rails", "ruby", "fullstack", "hotwire"],
100
+ "dependencies": {
101
+ "dare-ax": ">=1.0.0",
102
+ "dare-layered-design": ">=1.0.0",
103
+ "dare-realtime": ">=1.0.0"
104
+ },
105
+ "published_at": "2026-05-26T00:00:00Z",
106
+ "size_kb": 240
107
+ }
108
+ ]
109
+ }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Remote registry client and resolver for the DARE skill registry.
3
+ *
4
+ * Provides:
5
+ * - `RemoteRegistry` — HTTP client for the Vercel Functions backend
6
+ * - `RegistryResolver` — combina remote + local + mock em ordem de prioridade
7
+ *
8
+ * Priority: Remote (if online) → Local (~/.dare/registry/) → Mock (offline)
9
+ *
10
+ * @module skills/registry-remote
11
+ */
12
+ import { type RegistrySkill } from './registry.js';
13
+ import { LocalRegistry } from './registry-local.js';
14
+ export interface RemoteSkill {
15
+ name: string;
16
+ version: string;
17
+ description: string;
18
+ author: string;
19
+ license: string;
20
+ dare_version: string;
21
+ dependencies: Record<string, string>;
22
+ keywords: string[];
23
+ homepage?: string;
24
+ publishedAt: string;
25
+ }
26
+ export type SkillSource = 'remote' | 'local' | 'mock';
27
+ export interface ResolvedSkill extends RegistrySkill {
28
+ source: SkillSource;
29
+ }
30
+ export interface PublishPayload {
31
+ version: string;
32
+ description: string;
33
+ author: string;
34
+ license: string;
35
+ dare_version: string;
36
+ dependencies: Record<string, string>;
37
+ keywords: string[];
38
+ homepage?: string;
39
+ }
40
+ /**
41
+ * HTTP client for the DARE registry backend (Vercel Functions).
42
+ *
43
+ * All network calls use `AbortController` with a configurable timeout.
44
+ */
45
+ export declare class RemoteRegistry {
46
+ private readonly _baseUrl;
47
+ private readonly _timeoutMs;
48
+ constructor(baseUrl?: string, timeoutMs?: number);
49
+ /**
50
+ * Lists all skills from the remote registry.
51
+ * Returns an empty array on network failure.
52
+ *
53
+ * @throws Never — failures are returned as empty array.
54
+ */
55
+ list(options?: {
56
+ keyword?: string;
57
+ author?: string;
58
+ }): Promise<RemoteSkill[]>;
59
+ /**
60
+ * Fetches details for a single skill by name.
61
+ * Returns `null` when not found (404) or on network failure.
62
+ */
63
+ find(name: string): Promise<RemoteSkill | null>;
64
+ /**
65
+ * Publishes a skill to the remote registry.
66
+ *
67
+ * @param skillName - The skill name (used in the URL path)
68
+ * @param payload - Skill metadata
69
+ * @param token - Bearer token for authentication
70
+ * @throws Error if the request fails or returns a non-2xx status.
71
+ */
72
+ publish(skillName: string, payload: PublishPayload, token: string): Promise<void>;
73
+ /**
74
+ * Checks connectivity to the registry by fetching the skills list.
75
+ * Returns `true` if the registry responds with a 2xx status.
76
+ */
77
+ isOnline(): Promise<boolean>;
78
+ private _fetch;
79
+ }
80
+ /**
81
+ * Combines remote, local, and mock registries with priority fallback.
82
+ *
83
+ * Priority order:
84
+ * 1. Remote (if available and online — timeout = 3s)
85
+ * 2. Local (`~/.dare/registry/`)
86
+ * 3. Mock (bundled JSON fallback)
87
+ *
88
+ * Skills from higher-priority sources overwrite those with the same
89
+ * `name@version` from lower-priority sources.
90
+ */
91
+ export declare class RegistryResolver {
92
+ private readonly _remote;
93
+ private readonly _local;
94
+ constructor(remote?: RemoteRegistry, local?: LocalRegistry);
95
+ /**
96
+ * Returns all skills with source annotations.
97
+ * Falls back automatically if remote is offline.
98
+ */
99
+ list(): Promise<ResolvedSkill[]>;
100
+ /**
101
+ * Finds a single skill by name.
102
+ * Uses remote first, then local, then mock.
103
+ */
104
+ find(name: string): Promise<ResolvedSkill | null>;
105
+ }
106
+ /** Shared remote registry client. */
107
+ export declare const remoteRegistry: RemoteRegistry;
108
+ /** Shared resolver (remote → local → mock). */
109
+ export declare const registryResolver: RegistryResolver;
110
+ //# sourceMappingURL=registry-remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-remote.d.ts","sourceRoot":"","sources":["../../src/skills/registry-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,aAAa,EAA2B,MAAM,qBAAqB,CAAC;AAM7E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGlC,OAAO,SAAqC,EAC5C,SAAS,SAAQ;IAMnB;;;;;OAKG;IACG,IAAI,CAAC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAUvF;;;OAGG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAWrD;;;;;;;OAOG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBvF;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;YAYpB,MAAM;CAUrB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;gBAGrC,MAAM,CAAC,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,aAAa;IAMvB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAoDtC;;;OAGG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAmDxD;AAMD,qCAAqC;AACrC,eAAO,MAAM,cAAc,gBAAuB,CAAC;AAEnD,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}