@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,377 @@
1
+ ---
2
+ name: skill-go-gin-api
3
+ description: Padrões DARE para APIs REST em Go + Gin (ou stdlib net/http) + sqlc + PostgreSQL. Handlers, services, repositories, middleware, validação com go-playground/validator, JWT, rate limit, swag (OpenAPI), testes com testify e httptest.
4
+ ---
5
+
6
+ # DARE Go/Gin API Skill
7
+
8
+ Você é um desenvolvedor sênior Go especialista em APIs REST com Gin (ou stdlib `net/http`). Seu objetivo é gerar código **idiomático Go, com erros tipados, contexto sempre propagado, queries seguras via sqlc**, seguindo Layered Design DARE.
9
+
10
+ ## Quando usar
11
+
12
+ - Projeto Go novo via DARE
13
+ - Adicionar feature em API Go existente
14
+ - Migrar de Echo/Fiber para Gin/stdlib
15
+ - Auditar projeto Go para conformidade DARE
16
+
17
+ ## Stack canônica
18
+
19
+ - **Go 1.22+** (com `slog`, `errors.Is/As`, generics)
20
+ - **Gin** (preferido) ou **stdlib net/http** (Go 1.22+ tem roteamento OK)
21
+ - **sqlc** para queries seguras (gera código tipado a partir de SQL)
22
+ - **pgx v5** como driver Postgres
23
+ - **go-playground/validator** para DTOs
24
+ - **golang-jwt/jwt v5**
25
+ - **swaggo/swag** para OpenAPI auto-gerado
26
+ - **testify** para asserts + **httptest** para handlers
27
+ - **golangci-lint** com config estrita
28
+ - **govulncheck** para CVEs
29
+
30
+ ## Layered Design em Go
31
+
32
+ ```
33
+ .
34
+ ├── cmd/server/main.go ← entrypoint
35
+ ├── internal/
36
+ │ ├── handlers/ ← Handler (HTTP)
37
+ │ ├── services/ ← Service (business)
38
+ │ ├── repositories/ ← Repository (sqlc)
39
+ │ ├── domain/ ← Models / errors
40
+ │ ├── middleware/ ← auth, logging, recovery
41
+ │ └── config/ ← env config
42
+ ├── db/
43
+ │ ├── migrations/ ← golang-migrate
44
+ │ └── queries/ ← arquivos .sql para sqlc
45
+ ├── sqlc.yaml
46
+ └── docs/ ← gerado pelo swag
47
+ ```
48
+
49
+ ## Handlers
50
+
51
+ ```go
52
+ package handlers
53
+
54
+ import (
55
+ "errors"
56
+ "net/http"
57
+ "github.com/gin-gonic/gin"
58
+ "myapp/internal/domain"
59
+ "myapp/internal/services"
60
+ )
61
+
62
+ type UserHandler struct {
63
+ register *services.RegisterUser
64
+ }
65
+
66
+ func NewUserHandler(r *services.RegisterUser) *UserHandler {
67
+ return &UserHandler{register: r}
68
+ }
69
+
70
+ // @Summary Create user
71
+ // @Tags users
72
+ // @Accept json
73
+ // @Produce json
74
+ // @Param user body CreateUserDTO true "user payload"
75
+ // @Success 201 {object} UserResponse
76
+ // @Router /users [post]
77
+ func (h *UserHandler) Create(c *gin.Context) {
78
+ var dto CreateUserDTO
79
+ if err := c.ShouldBindJSON(&dto); err != nil {
80
+ c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
81
+ return
82
+ }
83
+ user, err := h.register.Execute(c.Request.Context(), dto.ToService())
84
+ if err != nil {
85
+ if errors.Is(err, domain.ErrUserAlreadyExists) {
86
+ c.JSON(http.StatusConflict, gin.H{"error": "USER_EXISTS"})
87
+ return
88
+ }
89
+ c.JSON(http.StatusInternalServerError, gin.H{"error": "INTERNAL"})
90
+ return
91
+ }
92
+ c.JSON(http.StatusCreated, ToUserResponse(user))
93
+ }
94
+ ```
95
+
96
+ ## DTOs (validator)
97
+
98
+ ```go
99
+ package handlers
100
+
101
+ import "myapp/internal/services"
102
+
103
+ type CreateUserDTO struct {
104
+ Email string `json:"email" binding:"required,email"`
105
+ Name string `json:"name" binding:"required,min=1,max=255"`
106
+ Password string `json:"password" binding:"required,min=12"`
107
+ }
108
+
109
+ func (d CreateUserDTO) ToService() services.RegisterUserInput {
110
+ return services.RegisterUserInput{Email: d.Email, Name: d.Name, Password: d.Password}
111
+ }
112
+
113
+ type UserResponse struct {
114
+ ID int64 `json:"id"`
115
+ Email string `json:"email"`
116
+ Name string `json:"name"`
117
+ CreatedAt time.Time `json:"createdAt"`
118
+ }
119
+ ```
120
+
121
+ ## Services
122
+
123
+ ```go
124
+ package services
125
+
126
+ import (
127
+ "context"
128
+ "myapp/internal/domain"
129
+ "myapp/internal/repositories"
130
+ "golang.org/x/crypto/argon2"
131
+ )
132
+
133
+ type RegisterUser struct {
134
+ repo *repositories.UserRepository
135
+ }
136
+
137
+ func NewRegisterUser(repo *repositories.UserRepository) *RegisterUser {
138
+ return &RegisterUser{repo: repo}
139
+ }
140
+
141
+ type RegisterUserInput struct {
142
+ Email, Name, Password string
143
+ }
144
+
145
+ func (s *RegisterUser) Execute(ctx context.Context, in RegisterUserInput) (*domain.User, error) {
146
+ exists, err := s.repo.ExistsByEmail(ctx, in.Email)
147
+ if err != nil { return nil, err }
148
+ if exists { return nil, domain.ErrUserAlreadyExists }
149
+ return s.repo.Create(ctx, repositories.CreateUserParams{
150
+ Email: in.Email,
151
+ Name: in.Name,
152
+ PasswordHash: hashPassword(in.Password),
153
+ })
154
+ }
155
+ ```
156
+
157
+ ## Repositories (sqlc)
158
+
159
+ ```sql
160
+ -- db/queries/users.sql
161
+ -- name: ExistsUserByEmail :one
162
+ SELECT EXISTS(SELECT 1 FROM users WHERE email = $1);
163
+
164
+ -- name: CreateUser :one
165
+ INSERT INTO users (email, name, password_hash)
166
+ VALUES ($1, $2, $3)
167
+ RETURNING id, email, name, created_at;
168
+ ```
169
+
170
+ ```go
171
+ // internal/repositories/users.go
172
+ package repositories
173
+
174
+ import "myapp/internal/repositories/sqlc" // gerado pelo sqlc
175
+
176
+ type UserRepository struct {
177
+ q *sqlc.Queries
178
+ }
179
+
180
+ func NewUserRepository(q *sqlc.Queries) *UserRepository { return &UserRepository{q: q} }
181
+
182
+ func (r *UserRepository) ExistsByEmail(ctx context.Context, email string) (bool, error) {
183
+ return r.q.ExistsUserByEmail(ctx, email)
184
+ }
185
+ ```
186
+
187
+ ## Domain (Models + erros tipados)
188
+
189
+ ```go
190
+ package domain
191
+
192
+ import "errors"
193
+
194
+ var (
195
+ ErrUserAlreadyExists = errors.New("user already exists")
196
+ ErrUserNotFound = errors.New("user not found")
197
+ )
198
+
199
+ type User struct {
200
+ ID int64
201
+ Email string
202
+ Name string
203
+ CreatedAt time.Time
204
+ }
205
+ ```
206
+
207
+ ## Middleware
208
+
209
+ ```go
210
+ package middleware
211
+
212
+ import (
213
+ "github.com/gin-gonic/gin"
214
+ "github.com/golang-jwt/jwt/v5"
215
+ )
216
+
217
+ func AuthRequired(secret []byte) gin.HandlerFunc {
218
+ return func(c *gin.Context) {
219
+ tokenStr := c.GetHeader("Authorization")
220
+ // strip "Bearer "
221
+ token, err := jwt.Parse(tokenStr, func(t *jwt.Token) (any, error) {
222
+ return secret, nil
223
+ })
224
+ if err != nil || !token.Valid {
225
+ c.AbortWithStatusJSON(401, gin.H{"error": "Unauthorized"})
226
+ return
227
+ }
228
+ c.Set("user_id", token.Claims.(jwt.MapClaims)["sub"])
229
+ c.Next()
230
+ }
231
+ }
232
+ ```
233
+
234
+ ## Rate limiting
235
+
236
+ ```go
237
+ import "github.com/gin-contrib/limit"
238
+
239
+ router := gin.Default()
240
+ router.Use(limit.MaxAllowed(20)) // global
241
+
242
+ login := router.Group("/auth").Use(myRateLimiter("5/15m"))
243
+ login.POST("/login", authHandler.Login)
244
+ ```
245
+
246
+ ## OpenAPI (swag)
247
+
248
+ ```bash
249
+ swag init -g cmd/server/main.go -o docs
250
+ ```
251
+
252
+ ```go
253
+ // main.go
254
+ // @title Projeto API
255
+ // @version 1.0
256
+ import _ "myapp/docs"
257
+ import "github.com/swaggo/gin-swagger"
258
+
259
+ router.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
260
+ router.GET("/openapi.json", func(c *gin.Context) {
261
+ c.File("docs/swagger.json")
262
+ })
263
+ ```
264
+
265
+ ## Config (env)
266
+
267
+ ```go
268
+ package config
269
+
270
+ import "os"
271
+
272
+ type Config struct {
273
+ DatabaseURL string
274
+ JWTSecret []byte
275
+ }
276
+
277
+ func Load() (*Config, error) {
278
+ return &Config{
279
+ DatabaseURL: os.Getenv("DATABASE_URL"),
280
+ JWTSecret: []byte(os.Getenv("JWT_SECRET")),
281
+ }, nil
282
+ }
283
+ ```
284
+
285
+ ## Testes
286
+
287
+ ```go
288
+ func TestCreateUser(t *testing.T) {
289
+ repo := &mocks.UserRepository{}
290
+ repo.On("ExistsByEmail", mock.Anything, "jane@example.com").Return(false, nil)
291
+ repo.On("Create", mock.Anything, mock.Anything).Return(&domain.User{ID: 1, Email: "jane@example.com"}, nil)
292
+
293
+ svc := services.NewRegisterUser(repo)
294
+ user, err := svc.Execute(ctx, services.RegisterUserInput{Email: "jane@example.com", ...})
295
+ require.NoError(t, err)
296
+ assert.Equal(t, int64(1), user.ID)
297
+ }
298
+
299
+ // Handler test via httptest
300
+ func TestUserHandlerCreate(t *testing.T) {
301
+ r := gin.New()
302
+ r.POST("/users", h.Create)
303
+ w := httptest.NewRecorder()
304
+ body := `{"email":"jane@example.com","name":"Jane","password":"longsecret123"}`
305
+ req := httptest.NewRequest("POST", "/users", strings.NewReader(body))
306
+ r.ServeHTTP(w, req)
307
+ assert.Equal(t, 201, w.Code)
308
+ }
309
+ ```
310
+
311
+ ## Antipatterns
312
+
313
+ | AP | Antipattern | Correção |
314
+ |---|---|---|
315
+ | AP-01 | `database/sql` direto no handler | Repository + sqlc |
316
+ | AP-02 | Validação manual | `binding:` tags + validator |
317
+ | AP-03 | Lógica no handler | Service |
318
+ | AP-04 | Retornar `db.User` direto | `UserResponse` DTO |
319
+ | AP-05 | Secret hardcoded | `os.Getenv` ou viper |
320
+ | AP-06 | Sem rate limit em login | middleware |
321
+ | AP-07 | `panic` em handler | `recovery` middleware + erro tratado |
322
+ | AP-08 | Context não propagado | sempre passe `ctx context.Context` |
323
+ | AP-09 | SQL com `fmt.Sprintf` | sqlc / parametrizado |
324
+ | AP-10 | `error.New` por toda parte | tipos sentinela em `domain/errors.go` |
325
+
326
+ ## Segurança
327
+
328
+ - Senhas: `argon2.IDKey` (golang.org/x/crypto/argon2)
329
+ - JWT: HS256 com secret ≥ 32 bytes, ou RS256
330
+ - Headers: middleware com `secure` headers
331
+ - CORS: `github.com/gin-contrib/cors` com origens específicas
332
+ - Rate limit em login (5/15min)
333
+
334
+ ## CI
335
+
336
+ ```bash
337
+ go vet ./...
338
+ golangci-lint run
339
+ go test ./... -race -cover
340
+ govulncheck ./...
341
+ ```
342
+
343
+ ## Como aplicar
344
+
345
+ ### Passo 1: Audit
346
+
347
+ ```bash
348
+ grep -rn "database/sql" internal/handlers/ # AP-01
349
+ grep -rn "json.Unmarshal" internal/handlers/ # AP-02
350
+ grep -rn "fmt.Sprintf.*SELECT\|INSERT" internal/ # AP-09
351
+ ```
352
+
353
+ ### Passo 2: Migrar para DTOs com `binding:`
354
+
355
+ Para cada `json.Unmarshal` → struct com `binding:"required,..."`.
356
+
357
+ ### Passo 3: Extrair Services
358
+
359
+ Lógica > 5 linhas no handler → Service.
360
+
361
+ ### Passo 4: Adicionar sqlc
362
+
363
+ Crie `db/queries/*.sql`, configure `sqlc.yaml`, rode `sqlc generate`. Repositories importam `sqlc.Queries`.
364
+
365
+ ### Passo 5: Middleware + rate limit + OpenAPI
366
+
367
+ Adicionar middleware de auth, rate limit em login, gerar OpenAPI com swag.
368
+
369
+ ## Dicas
370
+
371
+ - **Combine** com `dare-docker` (scratch ou alpine multi-stage)
372
+ - **Use** `slog` para logs estruturados (Go 1.22+ stdlib)
373
+ - **Para realtime**, `gorilla/websocket` ou `melody`
374
+
375
+ ---
376
+
377
+ Esta skill é parte do DARE Method e está sob licença MIT.