@noclaf/cli 0.8.0 → 0.9.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 (306) hide show
  1. package/README.md +26 -88
  2. package/dist/app.js +13 -0
  3. package/dist/app.js.map +1 -0
  4. package/dist/brand.js +9 -49
  5. package/dist/brand.js.map +1 -1
  6. package/dist/cli.js +3 -37
  7. package/dist/cli.js.map +1 -1
  8. package/dist/mcp-server.js +3 -187
  9. package/dist/mcp-server.js.map +1 -1
  10. package/package.json +8 -17
  11. package/dist/adapters/supabase/allocation-gateway.js +0 -291
  12. package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
  13. package/dist/adapters/supabase/analytics-gateway.js +0 -18
  14. package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
  15. package/dist/adapters/supabase/calendar-gateway.js +0 -48
  16. package/dist/adapters/supabase/calendar-gateway.js.map +0 -1
  17. package/dist/adapters/supabase/calendar-write-gateway.js +0 -35
  18. package/dist/adapters/supabase/calendar-write-gateway.js.map +0 -1
  19. package/dist/adapters/supabase/checklist-gateway.js +0 -63
  20. package/dist/adapters/supabase/checklist-gateway.js.map +0 -1
  21. package/dist/adapters/supabase/client.js +0 -136
  22. package/dist/adapters/supabase/client.js.map +0 -1
  23. package/dist/adapters/supabase/context-gateway.js +0 -23
  24. package/dist/adapters/supabase/context-gateway.js.map +0 -1
  25. package/dist/adapters/supabase/gateway.js +0 -28
  26. package/dist/adapters/supabase/gateway.js.map +0 -1
  27. package/dist/adapters/supabase/release-gateway.js +0 -61
  28. package/dist/adapters/supabase/release-gateway.js.map +0 -1
  29. package/dist/adapters/supabase/sprint-gateway.js +0 -59
  30. package/dist/adapters/supabase/sprint-gateway.js.map +0 -1
  31. package/dist/adapters/supabase/task-gateway.js +0 -533
  32. package/dist/adapters/supabase/task-gateway.js.map +0 -1
  33. package/dist/auth.js +0 -141
  34. package/dist/auth.js.map +0 -1
  35. package/dist/cli/commands/auth.js +0 -127
  36. package/dist/cli/commands/auth.js.map +0 -1
  37. package/dist/cli/commands/clean.js +0 -120
  38. package/dist/cli/commands/clean.js.map +0 -1
  39. package/dist/cli/commands/completion.js +0 -114
  40. package/dist/cli/commands/completion.js.map +0 -1
  41. package/dist/cli/commands/exec.js +0 -69
  42. package/dist/cli/commands/exec.js.map +0 -1
  43. package/dist/cli/commands/init/analyze-step.js +0 -21
  44. package/dist/cli/commands/init/analyze-step.js.map +0 -1
  45. package/dist/cli/commands/init/apply-answers.js +0 -122
  46. package/dist/cli/commands/init/apply-answers.js.map +0 -1
  47. package/dist/cli/commands/init/apply-step.js +0 -165
  48. package/dist/cli/commands/init/apply-step.js.map +0 -1
  49. package/dist/cli/commands/init/auth-step.js +0 -48
  50. package/dist/cli/commands/init/auth-step.js.map +0 -1
  51. package/dist/cli/commands/init/boilerplate-step.js +0 -20
  52. package/dist/cli/commands/init/boilerplate-step.js.map +0 -1
  53. package/dist/cli/commands/init/clients-step.js +0 -78
  54. package/dist/cli/commands/init/clients-step.js.map +0 -1
  55. package/dist/cli/commands/init/context-step.js +0 -81
  56. package/dist/cli/commands/init/context-step.js.map +0 -1
  57. package/dist/cli/commands/init/describe-step.js +0 -68
  58. package/dist/cli/commands/init/describe-step.js.map +0 -1
  59. package/dist/cli/commands/init/index.js +0 -98
  60. package/dist/cli/commands/init/index.js.map +0 -1
  61. package/dist/cli/commands/init/mode.js +0 -18
  62. package/dist/cli/commands/init/mode.js.map +0 -1
  63. package/dist/cli/commands/init/progress.js +0 -60
  64. package/dist/cli/commands/init/progress.js.map +0 -1
  65. package/dist/cli/commands/init/project-step.js +0 -133
  66. package/dist/cli/commands/init/project-step.js.map +0 -1
  67. package/dist/cli/commands/init/provision-step.js +0 -103
  68. package/dist/cli/commands/init/provision-step.js.map +0 -1
  69. package/dist/cli/commands/map.js +0 -18
  70. package/dist/cli/commands/map.js.map +0 -1
  71. package/dist/cli/commands/plan.js +0 -45
  72. package/dist/cli/commands/plan.js.map +0 -1
  73. package/dist/cli/commands/skills.js +0 -23
  74. package/dist/cli/commands/skills.js.map +0 -1
  75. package/dist/cli/commands/sync.js +0 -319
  76. package/dist/cli/commands/sync.js.map +0 -1
  77. package/dist/cli/commands/validate-plan.js +0 -42
  78. package/dist/cli/commands/validate-plan.js.map +0 -1
  79. package/dist/cli/commands/wave.js +0 -57
  80. package/dist/cli/commands/wave.js.map +0 -1
  81. package/dist/cli/copy/auth.json +0 -6
  82. package/dist/cli/copy/flows.json +0 -6
  83. package/dist/cli/copy/init.json +0 -20
  84. package/dist/cli/copy/sync.json +0 -3
  85. package/dist/cli/copy.js +0 -23
  86. package/dist/cli/copy.js.map +0 -1
  87. package/dist/cli/flows/clients.js +0 -130
  88. package/dist/cli/flows/clients.js.map +0 -1
  89. package/dist/cli/flows/completion.js +0 -63
  90. package/dist/cli/flows/completion.js.map +0 -1
  91. package/dist/cli/flows/dependencies.js +0 -114
  92. package/dist/cli/flows/dependencies.js.map +0 -1
  93. package/dist/cli/flows/sections.js +0 -85
  94. package/dist/cli/flows/sections.js.map +0 -1
  95. package/dist/cli/flows/user-config.js +0 -37
  96. package/dist/cli/flows/user-config.js.map +0 -1
  97. package/dist/cli/ui/render.js +0 -239
  98. package/dist/cli/ui/render.js.map +0 -1
  99. package/dist/cli/ui/report.js +0 -130
  100. package/dist/cli/ui/report.js.map +0 -1
  101. package/dist/config.js +0 -289
  102. package/dist/config.js.map +0 -1
  103. package/dist/constants.js +0 -9
  104. package/dist/constants.js.map +0 -1
  105. package/dist/core/ports.js +0 -2
  106. package/dist/core/ports.js.map +0 -1
  107. package/dist/core/types.js +0 -5
  108. package/dist/core/types.js.map +0 -1
  109. package/dist/database.types.js +0 -11
  110. package/dist/database.types.js.map +0 -1
  111. package/dist/lib/active-project.js +0 -28
  112. package/dist/lib/active-project.js.map +0 -1
  113. package/dist/lib/autopull.js +0 -13
  114. package/dist/lib/autopull.js.map +0 -1
  115. package/dist/lib/boilerplate-scaffold.js +0 -65
  116. package/dist/lib/boilerplate-scaffold.js.map +0 -1
  117. package/dist/lib/boilerplates.js +0 -61
  118. package/dist/lib/boilerplates.js.map +0 -1
  119. package/dist/lib/calendar-logic.js +0 -59
  120. package/dist/lib/calendar-logic.js.map +0 -1
  121. package/dist/lib/calendar-write-logic.js +0 -6
  122. package/dist/lib/calendar-write-logic.js.map +0 -1
  123. package/dist/lib/checklist-logic.js +0 -5
  124. package/dist/lib/checklist-logic.js.map +0 -1
  125. package/dist/lib/client-configs.js +0 -191
  126. package/dist/lib/client-configs.js.map +0 -1
  127. package/dist/lib/client-install.js +0 -40
  128. package/dist/lib/client-install.js.map +0 -1
  129. package/dist/lib/colors.js +0 -92
  130. package/dist/lib/colors.js.map +0 -1
  131. package/dist/lib/cowork-extension.js +0 -143
  132. package/dist/lib/cowork-extension.js.map +0 -1
  133. package/dist/lib/dates.js +0 -21
  134. package/dist/lib/dates.js.map +0 -1
  135. package/dist/lib/dependencies.js +0 -145
  136. package/dist/lib/dependencies.js.map +0 -1
  137. package/dist/lib/dependency-install.js +0 -163
  138. package/dist/lib/dependency-install.js.map +0 -1
  139. package/dist/lib/duration.js +0 -5
  140. package/dist/lib/duration.js.map +0 -1
  141. package/dist/lib/exec-delegate.js +0 -218
  142. package/dist/lib/exec-delegate.js.map +0 -1
  143. package/dist/lib/exec-engines.js +0 -90
  144. package/dist/lib/exec-engines.js.map +0 -1
  145. package/dist/lib/exec-events.js +0 -87
  146. package/dist/lib/exec-events.js.map +0 -1
  147. package/dist/lib/exec-translators.js +0 -198
  148. package/dist/lib/exec-translators.js.map +0 -1
  149. package/dist/lib/file-merge.js +0 -33
  150. package/dist/lib/file-merge.js.map +0 -1
  151. package/dist/lib/git-exposure.js +0 -35
  152. package/dist/lib/git-exposure.js.map +0 -1
  153. package/dist/lib/harness.js +0 -127
  154. package/dist/lib/harness.js.map +0 -1
  155. package/dist/lib/hooks.js +0 -216
  156. package/dist/lib/hooks.js.map +0 -1
  157. package/dist/lib/patterns.js +0 -25
  158. package/dist/lib/patterns.js.map +0 -1
  159. package/dist/lib/pg-error.js +0 -53
  160. package/dist/lib/pg-error.js.map +0 -1
  161. package/dist/lib/plan-delegate.js +0 -117
  162. package/dist/lib/plan-delegate.js.map +0 -1
  163. package/dist/lib/project-context.js +0 -151
  164. package/dist/lib/project-context.js.map +0 -1
  165. package/dist/lib/prompts.js +0 -69
  166. package/dist/lib/prompts.js.map +0 -1
  167. package/dist/lib/provision-apply.js +0 -220
  168. package/dist/lib/provision-apply.js.map +0 -1
  169. package/dist/lib/provision-collect.js +0 -47
  170. package/dist/lib/provision-collect.js.map +0 -1
  171. package/dist/lib/provision.js +0 -45
  172. package/dist/lib/provision.js.map +0 -1
  173. package/dist/lib/release-logic.js +0 -10
  174. package/dist/lib/release-logic.js.map +0 -1
  175. package/dist/lib/repo-map.js +0 -176
  176. package/dist/lib/repo-map.js.map +0 -1
  177. package/dist/lib/require-config.js +0 -32
  178. package/dist/lib/require-config.js.map +0 -1
  179. package/dist/lib/rules.js +0 -146
  180. package/dist/lib/rules.js.map +0 -1
  181. package/dist/lib/sections.js +0 -89
  182. package/dist/lib/sections.js.map +0 -1
  183. package/dist/lib/skill-agent.js +0 -44
  184. package/dist/lib/skill-agent.js.map +0 -1
  185. package/dist/lib/skill-serve.js +0 -128
  186. package/dist/lib/skill-serve.js.map +0 -1
  187. package/dist/lib/skills-cache.js +0 -99
  188. package/dist/lib/skills-cache.js.map +0 -1
  189. package/dist/lib/skills.js +0 -237
  190. package/dist/lib/skills.js.map +0 -1
  191. package/dist/lib/sprint-deadline.js +0 -28
  192. package/dist/lib/sprint-deadline.js.map +0 -1
  193. package/dist/lib/sprint-logic.js +0 -31
  194. package/dist/lib/sprint-logic.js.map +0 -1
  195. package/dist/lib/targets.js +0 -150
  196. package/dist/lib/targets.js.map +0 -1
  197. package/dist/lib/task-history.js +0 -15
  198. package/dist/lib/task-history.js.map +0 -1
  199. package/dist/lib/telemetry.js +0 -51
  200. package/dist/lib/telemetry.js.map +0 -1
  201. package/dist/lib/tool-result.js +0 -15
  202. package/dist/lib/tool-result.js.map +0 -1
  203. package/dist/lib/validate-plan-delegate.js +0 -106
  204. package/dist/lib/validate-plan-delegate.js.map +0 -1
  205. package/dist/lib/version-check.js +0 -89
  206. package/dist/lib/version-check.js.map +0 -1
  207. package/dist/lib/wave-scheduler.js +0 -95
  208. package/dist/lib/wave-scheduler.js.map +0 -1
  209. package/dist/session-factory.js +0 -19
  210. package/dist/session-factory.js.map +0 -1
  211. package/dist/spinner.js +0 -12
  212. package/dist/spinner.js.map +0 -1
  213. package/dist/tools/activate-sprint.js +0 -44
  214. package/dist/tools/activate-sprint.js.map +0 -1
  215. package/dist/tools/add-checklist-item.js +0 -44
  216. package/dist/tools/add-checklist-item.js.map +0 -1
  217. package/dist/tools/add-checklist.js +0 -63
  218. package/dist/tools/add-checklist.js.map +0 -1
  219. package/dist/tools/add-holiday.js +0 -41
  220. package/dist/tools/add-holiday.js.map +0 -1
  221. package/dist/tools/add-home-office.js +0 -31
  222. package/dist/tools/add-home-office.js.map +0 -1
  223. package/dist/tools/add-vacation.js +0 -39
  224. package/dist/tools/add-vacation.js.map +0 -1
  225. package/dist/tools/attach-pr.js +0 -97
  226. package/dist/tools/attach-pr.js.map +0 -1
  227. package/dist/tools/comment-task.js +0 -72
  228. package/dist/tools/comment-task.js.map +0 -1
  229. package/dist/tools/create-release.js +0 -46
  230. package/dist/tools/create-release.js.map +0 -1
  231. package/dist/tools/create-sprint.js +0 -66
  232. package/dist/tools/create-sprint.js.map +0 -1
  233. package/dist/tools/create-task.js +0 -174
  234. package/dist/tools/create-task.js.map +0 -1
  235. package/dist/tools/delegate-exec.js +0 -63
  236. package/dist/tools/delegate-exec.js.map +0 -1
  237. package/dist/tools/end-allocation.js +0 -38
  238. package/dist/tools/end-allocation.js.map +0 -1
  239. package/dist/tools/end-sprint.js +0 -37
  240. package/dist/tools/end-sprint.js.map +0 -1
  241. package/dist/tools/end-task-allocation.js +0 -60
  242. package/dist/tools/end-task-allocation.js.map +0 -1
  243. package/dist/tools/exec-status.js +0 -45
  244. package/dist/tools/exec-status.js.map +0 -1
  245. package/dist/tools/finalize-release.js +0 -45
  246. package/dist/tools/finalize-release.js.map +0 -1
  247. package/dist/tools/get-active-allocation.js +0 -69
  248. package/dist/tools/get-active-allocation.js.map +0 -1
  249. package/dist/tools/get-calendar.js +0 -40
  250. package/dist/tools/get-calendar.js.map +0 -1
  251. package/dist/tools/get-context.js +0 -48
  252. package/dist/tools/get-context.js.map +0 -1
  253. package/dist/tools/get-sprint.js +0 -38
  254. package/dist/tools/get-sprint.js.map +0 -1
  255. package/dist/tools/get-task.js +0 -146
  256. package/dist/tools/get-task.js.map +0 -1
  257. package/dist/tools/index.js +0 -92
  258. package/dist/tools/index.js.map +0 -1
  259. package/dist/tools/list-my-allocations.js +0 -71
  260. package/dist/tools/list-my-allocations.js.map +0 -1
  261. package/dist/tools/list-projects.js +0 -38
  262. package/dist/tools/list-projects.js.map +0 -1
  263. package/dist/tools/list-releases.js +0 -32
  264. package/dist/tools/list-releases.js.map +0 -1
  265. package/dist/tools/list-sprints.js +0 -30
  266. package/dist/tools/list-sprints.js.map +0 -1
  267. package/dist/tools/list-tasks.js +0 -95
  268. package/dist/tools/list-tasks.js.map +0 -1
  269. package/dist/tools/move-task.js +0 -82
  270. package/dist/tools/move-task.js.map +0 -1
  271. package/dist/tools/plan.js +0 -56
  272. package/dist/tools/plan.js.map +0 -1
  273. package/dist/tools/record-delivery.js +0 -100
  274. package/dist/tools/record-delivery.js.map +0 -1
  275. package/dist/tools/remove-checklist-item.js +0 -42
  276. package/dist/tools/remove-checklist-item.js.map +0 -1
  277. package/dist/tools/remove-checklist.js +0 -42
  278. package/dist/tools/remove-checklist.js.map +0 -1
  279. package/dist/tools/remove-holiday.js +0 -31
  280. package/dist/tools/remove-holiday.js.map +0 -1
  281. package/dist/tools/remove-home-office.js +0 -32
  282. package/dist/tools/remove-home-office.js.map +0 -1
  283. package/dist/tools/remove-vacation.js +0 -31
  284. package/dist/tools/remove-vacation.js.map +0 -1
  285. package/dist/tools/set-project.js +0 -52
  286. package/dist/tools/set-project.js.map +0 -1
  287. package/dist/tools/set-review.js +0 -132
  288. package/dist/tools/set-review.js.map +0 -1
  289. package/dist/tools/sprint-common.js +0 -13
  290. package/dist/tools/sprint-common.js.map +0 -1
  291. package/dist/tools/start-allocation.js +0 -32
  292. package/dist/tools/start-allocation.js.map +0 -1
  293. package/dist/tools/start-task-allocation.js +0 -83
  294. package/dist/tools/start-task-allocation.js.map +0 -1
  295. package/dist/tools/update-checklist-item.js +0 -51
  296. package/dist/tools/update-checklist-item.js.map +0 -1
  297. package/dist/tools/update-release.js +0 -58
  298. package/dist/tools/update-release.js.map +0 -1
  299. package/dist/tools/update-sprint.js +0 -56
  300. package/dist/tools/update-sprint.js.map +0 -1
  301. package/dist/tools/update-task.js +0 -183
  302. package/dist/tools/update-task.js.map +0 -1
  303. package/dist/tools/validate-plan.js +0 -58
  304. package/dist/tools/validate-plan.js.map +0 -1
  305. package/dist/version.js +0 -16
  306. package/dist/version.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"require-config.js","sourceRoot":"","sources":["../../src/lib/require-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAsB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAgB,EAChB,iBAA0B;IAE1B,MAAM,SAAS,GAAG,iBAAiB,IAAI,mBAAmB,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAEvF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,WAAW,CAChB,qCAAqC,KAAK,CAAC,UAAU,qCAAqC;YACxF,KAAK,KAAK,CAAC,UAAU,6EAA6E,CACrG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACxD,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;QACtE,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;IAClD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC;AAC3E,CAAC"}
package/dist/lib/rules.js DELETED
@@ -1,146 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { skillsDir } from './skills.js';
4
- import { DEV_ROLE, GENERAL } from './sections.js';
5
- /**
6
- * Rules do harness — convenções versionadas no `noclaf-skills`, na mesma taxonomia
7
- * da seleção: `rules/<role>/<área|general>/<stack|general>/rules.md`. O geral do role
8
- * fica em `rules/<role>/general/general-rules.md`.
9
- *
10
- * Este módulo lê + concatena (determinístico) pela `Selection`, e o CLI grava o
11
- * resultado no repo (`docs/_rules`). Rules são de código → só o role `dev`.
12
- */
13
- const RULES_ROOT = 'rules';
14
- function rulePath(dir, ...seg) {
15
- return join(dir, RULES_ROOT, ...seg);
16
- }
17
- /** Separa o frontmatter (`--- … ---`) do corpo. */
18
- function splitFrontmatter(raw) {
19
- const m = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(raw);
20
- if (!m)
21
- return { fm: {}, body: raw };
22
- const fm = {};
23
- for (const line of m[1].split(/\r?\n/)) {
24
- const mm = /^([A-Za-z0-9_-]+):\s*(.*)$/.exec(line);
25
- if (mm)
26
- fm[mm[1]] = mm[2].trim();
27
- }
28
- return { fm, body: raw.slice(m[0].length) };
29
- }
30
- /** Rebaixa headings um nível (`##` → `###`) pra aninharem sob o cabeçalho do bloco. */
31
- function demoteHeadings(md) {
32
- return md.replace(/^(#{1,5})(\s)/gm, '#$1$2');
33
- }
34
- /** Corpo (sem frontmatter, headings rebaixados) de um arquivo de regra, ou `null`. */
35
- function readRuleBody(path) {
36
- if (!existsSync(path))
37
- return null;
38
- const body = splitFrontmatter(readFileSync(path, 'utf8')).body.trim();
39
- return body.length > 0 ? demoteHeadings(body) : null;
40
- }
41
- /** Cabeçalho canônico da seção de critérios de review nas rules (ver `rules/README.md`). */
42
- export const REVIEW_HEADING = 'Critérios de review';
43
- /**
44
- * Extrai o corpo de uma seção `## <heading>` do markdown — da linha do heading até o próximo
45
- * `## ` (mesmo nível) ou o fim. `null` se a seção não existe ou está vazia. Pura.
46
- */
47
- export function extractSection(md, heading) {
48
- const lines = md.split(/\r?\n/);
49
- const start = lines.findIndex((l) => l.trim() === `## ${heading}`);
50
- if (start === -1)
51
- return null;
52
- const rest = lines.slice(start + 1);
53
- const end = rest.findIndex((l) => /^##\s/.test(l));
54
- const body = (end === -1 ? rest : rest.slice(0, end)).join('\n').trim();
55
- return body.length > 0 ? body : null;
56
- }
57
- /** Seção `## Critérios de review` (sem rebaixar headings — é checklist) de um arquivo, ou `null`. */
58
- function readRuleSection(path, heading) {
59
- if (!existsSync(path))
60
- return null;
61
- return extractSection(splitFrontmatter(readFileSync(path, 'utf8')).body, heading);
62
- }
63
- /** Skills recomendadas (frontmatter `skills:`) de um arquivo de regra. */
64
- function ruleSkillsAt(path) {
65
- if (!existsSync(path))
66
- return [];
67
- return (splitFrontmatter(readFileSync(path, 'utf8')).fm.skills ?? '')
68
- .split(/[,\s]+/)
69
- .map((s) => s.trim())
70
- .filter(Boolean);
71
- }
72
- /** Arquivo de regra geral do role (`rules/<role>/general/general-rules.md`, ou `rules.md`). */
73
- function generalRule(dir) {
74
- const named = rulePath(dir, DEV_ROLE, GENERAL, 'general-rules.md');
75
- return existsSync(named) ? named : rulePath(dir, DEV_ROLE, GENERAL, 'rules.md');
76
- }
77
- /**
78
- * Concatena o harness pela seleção: geral do role + (por área selecionada) o geral da
79
- * área + o **stack** escolhido. Ordenado (general → áreas alfabéticas). String vazia se
80
- * nada aplicável. Só o role `dev` tem rules.
81
- */
82
- export function concatenateRules(sel, dir = skillsDir()) {
83
- if (!sel.roles.includes(DEV_ROLE))
84
- return '';
85
- const blocks = [];
86
- const general = readRuleBody(generalRule(dir));
87
- if (general)
88
- blocks.push(`## general\n\n${general}`);
89
- for (const area of Object.keys(sel.stacks).sort()) {
90
- const areaGeneral = readRuleBody(rulePath(dir, DEV_ROLE, area, GENERAL, 'rules.md'));
91
- if (areaGeneral)
92
- blocks.push(`## ${area}\n\n${areaGeneral}`);
93
- const stack = sel.stacks[area];
94
- if (stack && stack !== GENERAL) {
95
- const body = readRuleBody(rulePath(dir, DEV_ROLE, area, stack, 'rules.md'));
96
- if (body)
97
- blocks.push(`## ${area} · ${stack}\n\n${body}`);
98
- }
99
- }
100
- return blocks.join('\n\n');
101
- }
102
- /**
103
- * Concatena os `## Critérios de review` das rules selecionadas (general → áreas alfabéticas →
104
- * stack), na MESMA ordem do `concatenateRules`. É a fonte única da rubrica de review
105
- * (`docs/_review.md`) — determinístico: mesma seleção+bundle → mesma saída. Só o role `dev`.
106
- */
107
- export function concatenateReviewCriteria(sel, dir = skillsDir()) {
108
- if (!sel.roles.includes(DEV_ROLE))
109
- return '';
110
- const blocks = [];
111
- const general = readRuleSection(generalRule(dir), REVIEW_HEADING);
112
- if (general)
113
- blocks.push(`## general\n\n${general}`);
114
- for (const area of Object.keys(sel.stacks).sort()) {
115
- const areaGeneral = readRuleSection(rulePath(dir, DEV_ROLE, area, GENERAL, 'rules.md'), REVIEW_HEADING);
116
- if (areaGeneral)
117
- blocks.push(`## ${area}\n\n${areaGeneral}`);
118
- const stack = sel.stacks[area];
119
- if (stack && stack !== GENERAL) {
120
- const body = readRuleSection(rulePath(dir, DEV_ROLE, area, stack, 'rules.md'), REVIEW_HEADING);
121
- if (body)
122
- blocks.push(`## ${area} · ${stack}\n\n${body}`);
123
- }
124
- }
125
- return blocks.join('\n\n');
126
- }
127
- /**
128
- * Skills recomendadas (skills.sh, do frontmatter `skills:`) das áreas/stacks
129
- * selecionadas — do `rules.md` da área + do stack escolhido. Deduplicado.
130
- */
131
- export function collectRuleSkills(sel, dir = skillsDir()) {
132
- if (!sel.roles.includes(DEV_ROLE))
133
- return [];
134
- const out = new Set();
135
- for (const area of Object.keys(sel.stacks)) {
136
- for (const s of ruleSkillsAt(rulePath(dir, DEV_ROLE, area, GENERAL, 'rules.md')))
137
- out.add(s);
138
- const stack = sel.stacks[area];
139
- if (stack && stack !== GENERAL) {
140
- for (const s of ruleSkillsAt(rulePath(dir, DEV_ROLE, area, stack, 'rules.md')))
141
- out.add(s);
142
- }
143
- }
144
- return [...out];
145
- }
146
- //# sourceMappingURL=rules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/lib/rules.ts"],"names":[],"mappings":"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"}
@@ -1,89 +0,0 @@
1
- import { existsSync, readdirSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- /**
4
- * Seleção unificada de conteúdo por **role → área → stack**, com `general` em cascata.
5
- * Um só modelo dita skills, rules e dependencies — o que o usuário preenche no `init`
6
- * filtra os três igual.
7
- *
8
- * Taxonomia (uniforme nos kinds versionados):
9
- * skills/<role>/<área|general>/<stack|general>/<skill>/SKILL.md
10
- * rules/<role>/<área|general>/<stack|general>/rules.md
11
- * dependencies/<role>/<área|general>/<stack|general>/*.md
12
- * agents/<role>/<name>.md (role, sem área/stack)
13
- * commands/<name>.md · hooks/* (flat — sempre dev)
14
- *
15
- * Regra de inclusão: role selecionado; `general` do role entra sempre; uma área só
16
- * entra se selecionada, e dentro dela só o `general` da área + o **stack escolhido**.
17
- */
18
- export const GENERAL = 'general';
19
- export const DEV_ROLE = 'dev';
20
- /** Roles = subpastas de topo de `skills/` (ex.: `dev`, `management`). */
21
- export function discoverRoles(dir) {
22
- return subdirs(join(dir, 'skills'));
23
- }
24
- /** Áreas de um role = subpastas de `skills/<role>/` menos `general`. */
25
- export function discoverAreas(dir, role) {
26
- return subdirs(join(dir, 'skills', role)).filter((a) => a !== GENERAL);
27
- }
28
- /** Stacks de uma área = subpastas de `skills/<role>/<área>/` menos `general`. */
29
- export function discoverStacks(dir, role, area) {
30
- return subdirs(join(dir, 'skills', role, area)).filter((s) => s !== GENERAL);
31
- }
32
- function subdirs(root) {
33
- if (!existsSync(root))
34
- return [];
35
- return readdirSync(root, { withFileTypes: true })
36
- .filter((e) => e.isDirectory() && !e.name.startsWith('.'))
37
- .map((e) => e.name)
38
- .sort();
39
- }
40
- /**
41
- * Um path é incluído na seleção? Vale pra qualquer kind — aplica a gramática da taxonomia.
42
- * `commands`/`hooks` são flat e sempre-dev; `agents` filtra por role; `skills`/`rules`/
43
- * `dependencies` filtram por role → área → stack com `general` em cascata.
44
- */
45
- export function includePath(relPath, sel) {
46
- const parts = relPath.split('/');
47
- const kind = parts[0];
48
- if (kind === 'commands' || kind === 'hooks')
49
- return sel.roles.includes(DEV_ROLE);
50
- const role = parts[1];
51
- if (!sel.roles.includes(role))
52
- return false;
53
- if (kind === 'agents')
54
- return true; // role já bateu; agents não têm área/stack
55
- const seg2 = parts[2];
56
- if (seg2 === undefined || seg2 === GENERAL)
57
- return true; // geral do role
58
- if (!(seg2 in sel.stacks))
59
- return false; // área não selecionada
60
- const seg3 = parts[3];
61
- return seg3 === GENERAL || seg3 === sel.stacks[seg2]; // geral da área ou stack escolhido
62
- }
63
- /** Filtra docs pela seleção. `undefined` → tudo (sem filtro). */
64
- export function filterForSelection(docs, sel) {
65
- if (!sel)
66
- return docs;
67
- return docs.filter((d) => includePath(d.relPath, sel));
68
- }
69
- /**
70
- * Achata os segmentos de taxonomia pro layout on-disk do cliente:
71
- * skills/<role>/general/<skill>/… → skills/<skill>/…
72
- * skills/<role>/<área>/<stack>/<skill>/… → skills/<skill>/…
73
- * agents/<role>/<name> → agents/<name>
74
- * commands/<name> · hooks/* → inalterado (já flat)
75
- */
76
- export function flattenSelection(docs) {
77
- return docs.map((d) => {
78
- const parts = d.relPath.split('/');
79
- const kind = parts[0];
80
- if (kind === 'agents')
81
- return { ...d, relPath: `agents/${parts.slice(2).join('/')}` };
82
- if (kind === 'skills') {
83
- const rest = parts[2] === GENERAL ? parts.slice(3) : parts.slice(4);
84
- return { ...d, relPath: `skills/${rest.join('/')}` };
85
- }
86
- return d;
87
- });
88
- }
89
- //# sourceMappingURL=sections.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/lib/sections.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import { spawnSync } from 'node:child_process';
2
- import { readSkillDocs } from './skills.js';
3
- /** Corpo da skill como prompt (fonte única); ausente do cache → fallback do caller. */
4
- export function skillPrompt(id, fallback) {
5
- try {
6
- const doc = readSkillDocs().find((d) => d.id === id && d.type === 'skill');
7
- if (doc?.content.trim())
8
- return doc.content.trim();
9
- }
10
- catch {
11
- /* skill ausente do cache → fallback */
12
- }
13
- return fallback;
14
- }
15
- /** Existe um binário no PATH (via `--version`)? */
16
- function hasBin(bin) {
17
- try {
18
- return !spawnSync(bin, ['--version'], { stdio: 'ignore' }).error;
19
- }
20
- catch {
21
- return false;
22
- }
23
- }
24
- /**
25
- * Roda o prompt num agente headless no `cwd`. Prefere `claude`, cai pro `codex`;
26
- * sem nenhum no PATH, não roda (`ran:false`).
27
- */
28
- export function runSkillAgent(prompt, opts) {
29
- // stdin ignorado (o prompt vai por arg) — evita o agente ficar esperando stdin.
30
- const stdio = ['ignore', opts.stdoutFd ?? 1, 2];
31
- if (hasBin('claude')) {
32
- const r = spawnSync('claude', ['-p', prompt, '--permission-mode', 'acceptEdits'], {
33
- cwd: opts.cwd,
34
- stdio,
35
- });
36
- return { ran: true, ok: !r.error && r.status === 0, agent: 'claude' };
37
- }
38
- if (hasBin('codex')) {
39
- const r = spawnSync('codex', ['exec', prompt], { cwd: opts.cwd, stdio });
40
- return { ran: true, ok: !r.error && r.status === 0, agent: 'codex' };
41
- }
42
- return { ran: false, reason: 'sem `claude` nem `codex` no PATH pra rodar a análise' };
43
- }
44
- //# sourceMappingURL=skill-agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-agent.js","sourceRoot":"","sources":["../../src/lib/skill-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgB5C,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,QAAgB;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC3E,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mDAAmD;AACnD,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,CAAC;QACH,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,IAAqB;IACjE,gFAAgF;IAChF,MAAM,KAAK,GAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtE,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE;YAChF,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK;SACN,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,sDAAsD,EAAE,CAAC;AACxF,CAAC"}
@@ -1,128 +0,0 @@
1
- import { readSkillFiles, toSkillDocs } from './skills.js';
2
- /**
3
- * Camada de **serviço** do pacote de skills pro servidor MCP: expõe os docs como
4
- * resources (leitura sob demanda) e como prompts (slash/commands no Cowork e Codex).
5
- * Só o `mcp-server.ts` importa isto — o CLI nunca precisa.
6
- */
7
- export const SKILLS_URI_PREFIX = 'noclaf://skills/';
8
- let cache = null;
9
- /** Carrega o pacote de skills, memoizado (não muda enquanto o processo roda). */
10
- export function loadSkills(dir) {
11
- if (cache && !dir)
12
- return cache;
13
- const files = readSkillFiles(dir);
14
- const loaded = {
15
- docs: toSkillDocs(files),
16
- rawByPath: new Map(files.map((f) => [f.path, f.raw])),
17
- };
18
- if (!dir)
19
- cache = loaded;
20
- return loaded;
21
- }
22
- /** Limpa o cache (testes / dir custom). */
23
- export function clearSkillsCache() {
24
- cache = null;
25
- }
26
- /**
27
- * Nome do resource em estilo caminho — agrupa a listagem por tipo/skill (como o
28
- * conector do Figma), em vez de despejar títulos soltos. Skills e commands viram
29
- * `skill/<id>` / `command/<id>`; arquivos de apoio (templates, *-PATTERN) aninham
30
- * sob a skill dona (`skill/init-sdd/templates/spec`); docs soltos viram `doc/<path>`.
31
- */
32
- function resourceName(doc, skillFolders) {
33
- if (doc.type === 'command')
34
- return `command/${doc.id}`;
35
- if (doc.type === 'agent')
36
- return `agent/${doc.id}`;
37
- if (doc.type === 'dependency')
38
- return `dependency/${doc.id}`;
39
- if (doc.type === 'skill')
40
- return `skill/${doc.id}`;
41
- // doc: aninha sob a skill dona, se estiver dentro da pasta de uma.
42
- for (const [folder, id] of skillFolders) {
43
- if (doc.path.startsWith(`${folder}/`)) {
44
- const sub = doc.path.slice(folder.length + 1).replace(/\.md$/i, '');
45
- return `skill/${id}/${sub}`;
46
- }
47
- }
48
- return `doc/${doc.path.replace(/\.md$/i, '')}`;
49
- }
50
- export function skillResourceDescriptors(docs) {
51
- // Pasta (dir do SKILL.md) → id, pra aninhar os arquivos de apoio sob a skill.
52
- const skillFolders = new Map();
53
- for (const d of docs) {
54
- if (d.type === 'skill')
55
- skillFolders.set(d.path.slice(0, d.path.lastIndexOf('/')), d.id);
56
- }
57
- return docs
58
- // `command`/`skill` já são servidos como **prompts** — não repetir como resource
59
- // (senão o Cowork lista cada um duas vezes). Aqui ficam só os arquivos de apoio
60
- // (templates/patterns), agents e dependencies.
61
- .filter((d) => d.type !== 'command' && d.type !== 'skill')
62
- .map((d) => ({
63
- uri: `${SKILLS_URI_PREFIX}${d.path}`,
64
- name: resourceName(d, skillFolders),
65
- description: d.description || d.title,
66
- mimeType: 'text/markdown',
67
- }))
68
- .sort((a, b) => a.name.localeCompare(b.name));
69
- }
70
- /** Lê um resource pela URI, a partir dos docs + os markdowns crus por path. */
71
- export function readSkillResource(uri, docs, rawByPath) {
72
- if (!uri.startsWith(SKILLS_URI_PREFIX))
73
- throw new Error(`URI fora do pacote de skills: ${uri}`);
74
- const rel = uri.slice(SKILLS_URI_PREFIX.length);
75
- const doc = docs.find((d) => d.path === rel);
76
- if (!doc)
77
- throw new Error(`Recurso não encontrado: ${uri}`);
78
- return { uri, mimeType: 'text/markdown', text: rawByPath.get(rel) ?? doc.content };
79
- }
80
- /** Só `command` e `skill` viram prompts (docs/agents/dependencies não). */
81
- function isPromptable(type) {
82
- return type === 'command' || type === 'skill';
83
- }
84
- export function skillPromptDescriptors(docs) {
85
- return docs
86
- .filter((d) => isPromptable(d.type))
87
- .map((d) => ({
88
- name: d.id,
89
- description: `[${d.type}] ${d.description || d.title}`.slice(0, 200),
90
- arguments: [
91
- {
92
- name: 'args',
93
- description: d.frontmatter['argument-hint'] || 'Argumentos opcionais passados ao prompt.',
94
- required: false,
95
- },
96
- ],
97
- }));
98
- }
99
- /** Monta o texto de um prompt: corpo do doc com `$ARGUMENTS` substituído. */
100
- export function buildSkillPrompt(name, args, docs) {
101
- const doc = docs.find((d) => d.id === name && isPromptable(d.type));
102
- if (!doc)
103
- throw new Error(`Prompt desconhecido: ${name}`);
104
- let text = doc.content.split('$ARGUMENTS').join(args?.args ?? '');
105
- // Cowork/Codex servem a skill como **prompt** — não têm o filesystem dela. Então os
106
- // arquivos de apoio (`templates/*`, `*-PATTERN.md`, `STANDARDS.md`) que o corpo
107
- // referencia por path relativo não existem lá. Inline-os pra a skill ficar
108
- // auto-contida (no Claude Code isso não roda — lá os arquivos são nativos).
109
- if (doc.type === 'skill') {
110
- const folder = doc.path.slice(0, doc.path.lastIndexOf('/'));
111
- const companions = docs
112
- .filter((d) => d.type === 'doc' && d.path.startsWith(`${folder}/`))
113
- .sort((a, b) => a.path.localeCompare(b.path));
114
- if (companions.length > 0) {
115
- const blocks = companions
116
- .map((comp) => {
117
- const rel = comp.path.slice(folder.length + 1);
118
- return `\n\n---\n\n### Arquivo de apoio da skill: \`${rel}\`\n\n${comp.content.trim()}`;
119
- })
120
- .join('');
121
- text +=
122
- `\n\n<!-- Arquivos de apoio inline: o Cowork/Codex não têm o filesystem da ` +
123
- `skill; use estes no lugar das referências por path relativo acima. -->${blocks}`;
124
- }
125
- }
126
- return { description: doc.description || doc.title, text };
127
- }
128
- //# sourceMappingURL=skill-serve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-serve.js","sourceRoot":"","sources":["../../src/lib/skill-serve.ts"],"names":[],"mappings":"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"}
@@ -1,99 +0,0 @@
1
- import { existsSync, mkdirSync, rmSync, cpSync, readdirSync, readFileSync, writeFileSync, } from 'node:fs';
2
- import { tmpdir } from 'node:os';
3
- import { join } from 'node:path';
4
- import AdmZip from 'adm-zip';
5
- import { brand, env, homePath } from '../brand.js';
6
- /**
7
- * Skills como repo aberto (não pacote npm): o CLI baixa o zipball do GitHub pro
8
- * cache local (`~/.noclaf/skills`) e lê de lá — `skillsDir()` resolve pra cá sem
9
- * checkout, e `noclaf sync` atualiza o cache sem republicar o CLI.
10
- */
11
- const DEFAULT_REPO = brand.skillsRepo;
12
- const DEFAULT_REF = brand.skillsRef;
13
- /** `owner/repo` do repo de skills. Sobrescrevível via `NOCLAF_SKILLS_REPO`. */
14
- export function skillsRepo() {
15
- return env('SKILLS_REPO') || DEFAULT_REPO;
16
- }
17
- /** Branch/tag a baixar. Sobrescrevível via `NOCLAF_SKILLS_REF`. */
18
- export function skillsRef() {
19
- return env('SKILLS_REF') || DEFAULT_REF;
20
- }
21
- /** Raiz do cache local (o conteúdo do repo: `commands/`, `skills/`, `hooks/`, …). */
22
- export function skillsCacheDir() {
23
- return homePath('skills');
24
- }
25
- const MARKER = `${brand.homeDirName}-skills.json`;
26
- /** Metadados do último fetch (repo/ref/quando). `null` se o cache não existe. */
27
- export function cacheMeta() {
28
- const p = join(skillsCacheDir(), MARKER);
29
- if (!existsSync(p))
30
- return null;
31
- try {
32
- return JSON.parse(readFileSync(p, 'utf8'));
33
- }
34
- catch {
35
- return null;
36
- }
37
- }
38
- /** O cache existe e parece válido (tem ao menos `skills/` ou `commands/`)? */
39
- export function skillsCached() {
40
- const dir = skillsCacheDir();
41
- return existsSync(join(dir, 'skills')) || existsSync(join(dir, 'commands'));
42
- }
43
- /**
44
- * Baixa o repo de skills (zipball do GitHub) pro cache local. Sem `git` — usa
45
- * `fetch` (Node 20+) + `adm-zip`. Idempotente: com `force=false` e cache presente,
46
- * não toca a rede. Se o download falhar mas houver cache antigo, segue com ele.
47
- */
48
- /** Timeout do download — sem isto o `fetch` pode pendurar no connect pra sempre. */
49
- const DEFAULT_TIMEOUT_MS = 20_000;
50
- export async function fetchSkills(opts = {}) {
51
- const dir = skillsCacheDir();
52
- const repo = skillsRepo();
53
- const ref = skillsRef();
54
- if (!opts.force && skillsCached()) {
55
- return { status: 'cached', dir, repo, ref };
56
- }
57
- const url = `https://codeload.github.com/${repo}/zip/refs/heads/${ref}`;
58
- const staging = join(tmpdir(), `${brand.name}-skills-${process.pid}-${Date.now()}`);
59
- const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
60
- const ac = new AbortController();
61
- const timer = setTimeout(() => ac.abort(), timeoutMs);
62
- try {
63
- const res = await fetch(url, { signal: ac.signal });
64
- if (!res.ok)
65
- throw new Error(`HTTP ${res.status} ao baixar ${url}`);
66
- const buf = Buffer.from(await res.arrayBuffer());
67
- // O zipball tem um único dir raiz (`<repo>-<ref>/`); extrai e mira nele.
68
- rmSync(staging, { recursive: true, force: true });
69
- mkdirSync(staging, { recursive: true });
70
- new AdmZip(buf).extractAllTo(staging, true);
71
- const dirs = readdirSync(staging, { withFileTypes: true }).filter((e) => e.isDirectory());
72
- const root = dirs.length === 1 ? join(staging, dirs[0].name) : staging;
73
- // Substitui o cache pelo conteúdo baixado.
74
- rmSync(dir, { recursive: true, force: true });
75
- mkdirSync(dir, { recursive: true });
76
- cpSync(root, dir, { recursive: true });
77
- const meta = { repo, ref, fetchedAt: new Date().toISOString() };
78
- writeFileSync(join(dir, MARKER), JSON.stringify(meta, null, 2) + '\n', 'utf8');
79
- return { status: 'fetched', dir, repo, ref };
80
- }
81
- catch (err) {
82
- const msg = ac.signal.aborted
83
- ? `timeout após ${timeoutMs}ms baixando ${url}`
84
- : err.message;
85
- if (skillsCached()) {
86
- return { status: 'cached', dir, repo, ref, error: msg };
87
- }
88
- return { status: 'failed', dir, repo, ref, error: msg };
89
- }
90
- finally {
91
- clearTimeout(timer);
92
- rmSync(staging, { recursive: true, force: true });
93
- }
94
- }
95
- /** Garante que o cache exista (baixa só se ausente). Best-effort pro runtime do MCP. */
96
- export async function ensureSkillsCache() {
97
- return fetchSkills({ force: false });
98
- }
99
- //# sourceMappingURL=skills-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-cache.js","sourceRoot":"","sources":["../../src/lib/skills-cache.ts"],"names":[],"mappings":"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"}