@noclaf/cli 0.7.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 (294) hide show
  1. package/README.md +26 -84
  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/client.js +0 -136
  20. package/dist/adapters/supabase/client.js.map +0 -1
  21. package/dist/adapters/supabase/context-gateway.js +0 -23
  22. package/dist/adapters/supabase/context-gateway.js.map +0 -1
  23. package/dist/adapters/supabase/gateway.js +0 -26
  24. package/dist/adapters/supabase/gateway.js.map +0 -1
  25. package/dist/adapters/supabase/release-gateway.js +0 -61
  26. package/dist/adapters/supabase/release-gateway.js.map +0 -1
  27. package/dist/adapters/supabase/sprint-gateway.js +0 -59
  28. package/dist/adapters/supabase/sprint-gateway.js.map +0 -1
  29. package/dist/adapters/supabase/task-gateway.js +0 -533
  30. package/dist/adapters/supabase/task-gateway.js.map +0 -1
  31. package/dist/auth.js +0 -141
  32. package/dist/auth.js.map +0 -1
  33. package/dist/cli/commands/auth.js +0 -127
  34. package/dist/cli/commands/auth.js.map +0 -1
  35. package/dist/cli/commands/clean.js +0 -120
  36. package/dist/cli/commands/clean.js.map +0 -1
  37. package/dist/cli/commands/completion.js +0 -114
  38. package/dist/cli/commands/completion.js.map +0 -1
  39. package/dist/cli/commands/exec.js +0 -69
  40. package/dist/cli/commands/exec.js.map +0 -1
  41. package/dist/cli/commands/init/analyze-step.js +0 -21
  42. package/dist/cli/commands/init/analyze-step.js.map +0 -1
  43. package/dist/cli/commands/init/apply-answers.js +0 -122
  44. package/dist/cli/commands/init/apply-answers.js.map +0 -1
  45. package/dist/cli/commands/init/apply-step.js +0 -165
  46. package/dist/cli/commands/init/apply-step.js.map +0 -1
  47. package/dist/cli/commands/init/auth-step.js +0 -48
  48. package/dist/cli/commands/init/auth-step.js.map +0 -1
  49. package/dist/cli/commands/init/boilerplate-step.js +0 -20
  50. package/dist/cli/commands/init/boilerplate-step.js.map +0 -1
  51. package/dist/cli/commands/init/clients-step.js +0 -78
  52. package/dist/cli/commands/init/clients-step.js.map +0 -1
  53. package/dist/cli/commands/init/context-step.js +0 -81
  54. package/dist/cli/commands/init/context-step.js.map +0 -1
  55. package/dist/cli/commands/init/describe-step.js +0 -68
  56. package/dist/cli/commands/init/describe-step.js.map +0 -1
  57. package/dist/cli/commands/init/index.js +0 -98
  58. package/dist/cli/commands/init/index.js.map +0 -1
  59. package/dist/cli/commands/init/mode.js +0 -18
  60. package/dist/cli/commands/init/mode.js.map +0 -1
  61. package/dist/cli/commands/init/progress.js +0 -60
  62. package/dist/cli/commands/init/progress.js.map +0 -1
  63. package/dist/cli/commands/init/project-step.js +0 -133
  64. package/dist/cli/commands/init/project-step.js.map +0 -1
  65. package/dist/cli/commands/init/provision-step.js +0 -103
  66. package/dist/cli/commands/init/provision-step.js.map +0 -1
  67. package/dist/cli/commands/map.js +0 -18
  68. package/dist/cli/commands/map.js.map +0 -1
  69. package/dist/cli/commands/plan.js +0 -45
  70. package/dist/cli/commands/plan.js.map +0 -1
  71. package/dist/cli/commands/skills.js +0 -23
  72. package/dist/cli/commands/skills.js.map +0 -1
  73. package/dist/cli/commands/sync.js +0 -319
  74. package/dist/cli/commands/sync.js.map +0 -1
  75. package/dist/cli/commands/validate-plan.js +0 -42
  76. package/dist/cli/commands/validate-plan.js.map +0 -1
  77. package/dist/cli/commands/wave.js +0 -57
  78. package/dist/cli/commands/wave.js.map +0 -1
  79. package/dist/cli/copy/auth.json +0 -6
  80. package/dist/cli/copy/flows.json +0 -6
  81. package/dist/cli/copy/init.json +0 -20
  82. package/dist/cli/copy/sync.json +0 -3
  83. package/dist/cli/copy.js +0 -23
  84. package/dist/cli/copy.js.map +0 -1
  85. package/dist/cli/flows/clients.js +0 -130
  86. package/dist/cli/flows/clients.js.map +0 -1
  87. package/dist/cli/flows/completion.js +0 -63
  88. package/dist/cli/flows/completion.js.map +0 -1
  89. package/dist/cli/flows/dependencies.js +0 -114
  90. package/dist/cli/flows/dependencies.js.map +0 -1
  91. package/dist/cli/flows/sections.js +0 -85
  92. package/dist/cli/flows/sections.js.map +0 -1
  93. package/dist/cli/flows/user-config.js +0 -37
  94. package/dist/cli/flows/user-config.js.map +0 -1
  95. package/dist/cli/ui/render.js +0 -239
  96. package/dist/cli/ui/render.js.map +0 -1
  97. package/dist/cli/ui/report.js +0 -130
  98. package/dist/cli/ui/report.js.map +0 -1
  99. package/dist/config.js +0 -289
  100. package/dist/config.js.map +0 -1
  101. package/dist/constants.js +0 -9
  102. package/dist/constants.js.map +0 -1
  103. package/dist/core/ports.js +0 -2
  104. package/dist/core/ports.js.map +0 -1
  105. package/dist/core/types.js +0 -5
  106. package/dist/core/types.js.map +0 -1
  107. package/dist/database.types.js +0 -11
  108. package/dist/database.types.js.map +0 -1
  109. package/dist/lib/active-project.js +0 -28
  110. package/dist/lib/active-project.js.map +0 -1
  111. package/dist/lib/autopull.js +0 -13
  112. package/dist/lib/autopull.js.map +0 -1
  113. package/dist/lib/boilerplate-scaffold.js +0 -65
  114. package/dist/lib/boilerplate-scaffold.js.map +0 -1
  115. package/dist/lib/boilerplates.js +0 -61
  116. package/dist/lib/boilerplates.js.map +0 -1
  117. package/dist/lib/calendar-logic.js +0 -59
  118. package/dist/lib/calendar-logic.js.map +0 -1
  119. package/dist/lib/calendar-write-logic.js +0 -6
  120. package/dist/lib/calendar-write-logic.js.map +0 -1
  121. package/dist/lib/client-configs.js +0 -191
  122. package/dist/lib/client-configs.js.map +0 -1
  123. package/dist/lib/client-install.js +0 -40
  124. package/dist/lib/client-install.js.map +0 -1
  125. package/dist/lib/colors.js +0 -92
  126. package/dist/lib/colors.js.map +0 -1
  127. package/dist/lib/cowork-extension.js +0 -143
  128. package/dist/lib/cowork-extension.js.map +0 -1
  129. package/dist/lib/dates.js +0 -21
  130. package/dist/lib/dates.js.map +0 -1
  131. package/dist/lib/dependencies.js +0 -145
  132. package/dist/lib/dependencies.js.map +0 -1
  133. package/dist/lib/dependency-install.js +0 -163
  134. package/dist/lib/dependency-install.js.map +0 -1
  135. package/dist/lib/duration.js +0 -5
  136. package/dist/lib/duration.js.map +0 -1
  137. package/dist/lib/exec-delegate.js +0 -218
  138. package/dist/lib/exec-delegate.js.map +0 -1
  139. package/dist/lib/exec-engines.js +0 -90
  140. package/dist/lib/exec-engines.js.map +0 -1
  141. package/dist/lib/exec-events.js +0 -87
  142. package/dist/lib/exec-events.js.map +0 -1
  143. package/dist/lib/exec-translators.js +0 -198
  144. package/dist/lib/exec-translators.js.map +0 -1
  145. package/dist/lib/file-merge.js +0 -33
  146. package/dist/lib/file-merge.js.map +0 -1
  147. package/dist/lib/git-exposure.js +0 -35
  148. package/dist/lib/git-exposure.js.map +0 -1
  149. package/dist/lib/harness.js +0 -127
  150. package/dist/lib/harness.js.map +0 -1
  151. package/dist/lib/hooks.js +0 -216
  152. package/dist/lib/hooks.js.map +0 -1
  153. package/dist/lib/patterns.js +0 -25
  154. package/dist/lib/patterns.js.map +0 -1
  155. package/dist/lib/pg-error.js +0 -53
  156. package/dist/lib/pg-error.js.map +0 -1
  157. package/dist/lib/plan-delegate.js +0 -117
  158. package/dist/lib/plan-delegate.js.map +0 -1
  159. package/dist/lib/project-context.js +0 -151
  160. package/dist/lib/project-context.js.map +0 -1
  161. package/dist/lib/prompts.js +0 -69
  162. package/dist/lib/prompts.js.map +0 -1
  163. package/dist/lib/provision-apply.js +0 -220
  164. package/dist/lib/provision-apply.js.map +0 -1
  165. package/dist/lib/provision-collect.js +0 -47
  166. package/dist/lib/provision-collect.js.map +0 -1
  167. package/dist/lib/provision.js +0 -45
  168. package/dist/lib/provision.js.map +0 -1
  169. package/dist/lib/release-logic.js +0 -10
  170. package/dist/lib/release-logic.js.map +0 -1
  171. package/dist/lib/repo-map.js +0 -176
  172. package/dist/lib/repo-map.js.map +0 -1
  173. package/dist/lib/require-config.js +0 -32
  174. package/dist/lib/require-config.js.map +0 -1
  175. package/dist/lib/rules.js +0 -146
  176. package/dist/lib/rules.js.map +0 -1
  177. package/dist/lib/sections.js +0 -89
  178. package/dist/lib/sections.js.map +0 -1
  179. package/dist/lib/skill-agent.js +0 -44
  180. package/dist/lib/skill-agent.js.map +0 -1
  181. package/dist/lib/skill-serve.js +0 -128
  182. package/dist/lib/skill-serve.js.map +0 -1
  183. package/dist/lib/skills-cache.js +0 -99
  184. package/dist/lib/skills-cache.js.map +0 -1
  185. package/dist/lib/skills.js +0 -237
  186. package/dist/lib/skills.js.map +0 -1
  187. package/dist/lib/sprint-deadline.js +0 -28
  188. package/dist/lib/sprint-deadline.js.map +0 -1
  189. package/dist/lib/sprint-logic.js +0 -31
  190. package/dist/lib/sprint-logic.js.map +0 -1
  191. package/dist/lib/targets.js +0 -150
  192. package/dist/lib/targets.js.map +0 -1
  193. package/dist/lib/task-history.js +0 -15
  194. package/dist/lib/task-history.js.map +0 -1
  195. package/dist/lib/telemetry.js +0 -51
  196. package/dist/lib/telemetry.js.map +0 -1
  197. package/dist/lib/tool-result.js +0 -15
  198. package/dist/lib/tool-result.js.map +0 -1
  199. package/dist/lib/validate-plan-delegate.js +0 -106
  200. package/dist/lib/validate-plan-delegate.js.map +0 -1
  201. package/dist/lib/version-check.js +0 -89
  202. package/dist/lib/version-check.js.map +0 -1
  203. package/dist/lib/wave-scheduler.js +0 -95
  204. package/dist/lib/wave-scheduler.js.map +0 -1
  205. package/dist/session-factory.js +0 -19
  206. package/dist/session-factory.js.map +0 -1
  207. package/dist/spinner.js +0 -12
  208. package/dist/spinner.js.map +0 -1
  209. package/dist/tools/activate-sprint.js +0 -44
  210. package/dist/tools/activate-sprint.js.map +0 -1
  211. package/dist/tools/add-checklist.js +0 -63
  212. package/dist/tools/add-checklist.js.map +0 -1
  213. package/dist/tools/add-holiday.js +0 -41
  214. package/dist/tools/add-holiday.js.map +0 -1
  215. package/dist/tools/add-home-office.js +0 -31
  216. package/dist/tools/add-home-office.js.map +0 -1
  217. package/dist/tools/add-vacation.js +0 -39
  218. package/dist/tools/add-vacation.js.map +0 -1
  219. package/dist/tools/attach-pr.js +0 -97
  220. package/dist/tools/attach-pr.js.map +0 -1
  221. package/dist/tools/comment-task.js +0 -72
  222. package/dist/tools/comment-task.js.map +0 -1
  223. package/dist/tools/create-release.js +0 -46
  224. package/dist/tools/create-release.js.map +0 -1
  225. package/dist/tools/create-sprint.js +0 -66
  226. package/dist/tools/create-sprint.js.map +0 -1
  227. package/dist/tools/create-task.js +0 -174
  228. package/dist/tools/create-task.js.map +0 -1
  229. package/dist/tools/delegate-exec.js +0 -63
  230. package/dist/tools/delegate-exec.js.map +0 -1
  231. package/dist/tools/end-allocation.js +0 -38
  232. package/dist/tools/end-allocation.js.map +0 -1
  233. package/dist/tools/end-sprint.js +0 -37
  234. package/dist/tools/end-sprint.js.map +0 -1
  235. package/dist/tools/end-task-allocation.js +0 -60
  236. package/dist/tools/end-task-allocation.js.map +0 -1
  237. package/dist/tools/exec-status.js +0 -45
  238. package/dist/tools/exec-status.js.map +0 -1
  239. package/dist/tools/finalize-release.js +0 -45
  240. package/dist/tools/finalize-release.js.map +0 -1
  241. package/dist/tools/get-active-allocation.js +0 -69
  242. package/dist/tools/get-active-allocation.js.map +0 -1
  243. package/dist/tools/get-calendar.js +0 -40
  244. package/dist/tools/get-calendar.js.map +0 -1
  245. package/dist/tools/get-context.js +0 -48
  246. package/dist/tools/get-context.js.map +0 -1
  247. package/dist/tools/get-sprint.js +0 -38
  248. package/dist/tools/get-sprint.js.map +0 -1
  249. package/dist/tools/get-task.js +0 -146
  250. package/dist/tools/get-task.js.map +0 -1
  251. package/dist/tools/index.js +0 -84
  252. package/dist/tools/index.js.map +0 -1
  253. package/dist/tools/list-my-allocations.js +0 -71
  254. package/dist/tools/list-my-allocations.js.map +0 -1
  255. package/dist/tools/list-projects.js +0 -38
  256. package/dist/tools/list-projects.js.map +0 -1
  257. package/dist/tools/list-releases.js +0 -32
  258. package/dist/tools/list-releases.js.map +0 -1
  259. package/dist/tools/list-sprints.js +0 -30
  260. package/dist/tools/list-sprints.js.map +0 -1
  261. package/dist/tools/list-tasks.js +0 -95
  262. package/dist/tools/list-tasks.js.map +0 -1
  263. package/dist/tools/move-task.js +0 -82
  264. package/dist/tools/move-task.js.map +0 -1
  265. package/dist/tools/plan.js +0 -56
  266. package/dist/tools/plan.js.map +0 -1
  267. package/dist/tools/record-delivery.js +0 -100
  268. package/dist/tools/record-delivery.js.map +0 -1
  269. package/dist/tools/remove-holiday.js +0 -31
  270. package/dist/tools/remove-holiday.js.map +0 -1
  271. package/dist/tools/remove-home-office.js +0 -32
  272. package/dist/tools/remove-home-office.js.map +0 -1
  273. package/dist/tools/remove-vacation.js +0 -31
  274. package/dist/tools/remove-vacation.js.map +0 -1
  275. package/dist/tools/set-project.js +0 -52
  276. package/dist/tools/set-project.js.map +0 -1
  277. package/dist/tools/set-review.js +0 -132
  278. package/dist/tools/set-review.js.map +0 -1
  279. package/dist/tools/sprint-common.js +0 -13
  280. package/dist/tools/sprint-common.js.map +0 -1
  281. package/dist/tools/start-allocation.js +0 -32
  282. package/dist/tools/start-allocation.js.map +0 -1
  283. package/dist/tools/start-task-allocation.js +0 -83
  284. package/dist/tools/start-task-allocation.js.map +0 -1
  285. package/dist/tools/update-release.js +0 -58
  286. package/dist/tools/update-release.js.map +0 -1
  287. package/dist/tools/update-sprint.js +0 -56
  288. package/dist/tools/update-sprint.js.map +0 -1
  289. package/dist/tools/update-task.js +0 -183
  290. package/dist/tools/update-task.js.map +0 -1
  291. package/dist/tools/validate-plan.js +0 -58
  292. package/dist/tools/validate-plan.js.map +0 -1
  293. package/dist/version.js +0 -16
  294. package/dist/version.js.map +0 -1
@@ -1,237 +0,0 @@
1
- import { existsSync, readFileSync, readdirSync } from 'node:fs';
2
- import { createRequire } from 'node:module';
3
- import { join, relative, sep, dirname } from 'node:path';
4
- import { skillsCacheDir, skillsCached } from './skills-cache.js';
5
- import { includePath } from './sections.js';
6
- import { brand, env } from '../brand.js';
7
- /**
8
- * Diretório do conteúdo das skills. Resolve em ordem: `NOCLAF_SKILLS_DIR`
9
- * (checkout local), `@noclaf/skills` via require.resolve (dev legado), ou o
10
- * cache `~/.noclaf/skills` populado por `noclaf sync`/`init` (fluxo padrão).
11
- */
12
- export function skillsDir() {
13
- const override = env('SKILLS_DIR');
14
- if (override && existsSync(override))
15
- return override;
16
- try {
17
- const require = createRequire(import.meta.url);
18
- return dirname(require.resolve(`${brand.skillsPackage}/package.json`));
19
- }
20
- catch {
21
- /* pacote ausente (modelo repo-aberto) → cai pro cache local */
22
- }
23
- if (skillsCached())
24
- return skillsCacheDir();
25
- throw new Error(`Conteúdo de skills não encontrado. Rode \`${brand.name} sync\` pra baixar o repo ` +
26
- '(ou defina NOCLAF_SKILLS_DIR apontando pra um checkout local).');
27
- }
28
- function listMarkdown(dir) {
29
- const out = [];
30
- const walk = (abs) => {
31
- for (const entry of readdirSync(abs, { withFileTypes: true })) {
32
- if (entry.name.startsWith('.'))
33
- continue;
34
- const childAbs = join(abs, entry.name);
35
- if (entry.isDirectory())
36
- walk(childAbs);
37
- else if (entry.isFile() &&
38
- entry.name.toLowerCase().endsWith('.md') &&
39
- entry.name.toLowerCase() !== 'readme.md')
40
- out.push(relative(dir, childAbs).split(sep).join('/'));
41
- }
42
- };
43
- walk(dir);
44
- return out;
45
- }
46
- /**
47
- * Coleta as linhas indentadas/vazias seguintes (bloco YAML folded `>` ou literal `|`)
48
- * a partir de `lines[i + 1]`. Retorna o valor já juntado e o novo índice do cursor
49
- * (última linha consumida) pro chamador continuar o loop dali.
50
- */
51
- function collectBlockValue(lines, i, folded) {
52
- const collected = [];
53
- while (i + 1 < lines.length && (lines[i + 1].trim() === '' || /^\s+\S/.test(lines[i + 1]))) {
54
- collected.push(lines[++i].trim());
55
- }
56
- const value = folded
57
- ? collected.join(' ').replace(/\s+/g, ' ').trim()
58
- : collected.join('\n').trim();
59
- return { value, nextIndex: i };
60
- }
61
- /** Valor entre aspas simples/duplas → sem as aspas. Sem aspas → devolve como veio. */
62
- function unquote(value) {
63
- if ((value.startsWith('"') && value.endsWith('"')) ||
64
- (value.startsWith("'") && value.endsWith("'"))) {
65
- return value.slice(1, -1);
66
- }
67
- return value;
68
- }
69
- /**
70
- * Parser de frontmatter minimalista: `key: value` de uma linha, mais blocos
71
- * folded (`>`) e literal (`|`). Suficiente pros metadados (não é YAML completo).
72
- * Exportado pra reuso por outros manifestos (ex.: `BOILERPLATE.md`).
73
- */
74
- export function parseFrontmatter(raw) {
75
- const fm = {};
76
- const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(raw);
77
- if (!match)
78
- return { frontmatter: fm, body: raw };
79
- const lines = match[1].split(/\r?\n/);
80
- for (let i = 0; i < lines.length; i++) {
81
- const m = /^([A-Za-z0-9_-]+):\s*(.*)$/.exec(lines[i]);
82
- if (!m)
83
- continue;
84
- const key = m[1];
85
- const value = m[2].trim();
86
- if (/^[|>][+-]?$/.test(value)) {
87
- const block = collectBlockValue(lines, i, value[0] === '>');
88
- fm[key] = block.value;
89
- i = block.nextIndex;
90
- continue;
91
- }
92
- fm[key] = unquote(value);
93
- }
94
- return { frontmatter: fm, body: raw.slice(match[0].length) };
95
- }
96
- /** Clientes de IA reconhecidos pra visibilidade de docs. */
97
- export const KNOWN_CLIENTS = ['claude-code', 'codex', 'cowork'];
98
- const KNOWN_CLIENTS_SET = new Set(KNOWN_CLIENTS);
99
- /**
100
- * Parseia o campo `clients:` do frontmatter (lista separada por vírgula/espaço)
101
- * num conjunto normalizado. Vazio/ausente/sem valor válido → `null` (= todos).
102
- */
103
- export function parseClients(value) {
104
- if (!value)
105
- return null;
106
- const list = value
107
- .split(/[,\s]+/)
108
- .map((s) => s.trim().toLowerCase())
109
- .filter((s) => KNOWN_CLIENTS_SET.has(s));
110
- return list.length > 0 ? [...new Set(list)] : null;
111
- }
112
- /** Um doc é visível pra um surface se não restringe clientes ou inclui aquele. */
113
- export function docForSurface(doc, surface) {
114
- if (!surface)
115
- return true;
116
- return !doc.clients || doc.clients.includes(surface);
117
- }
118
- /** Recorta a lista de docs pros visíveis num surface. */
119
- export function filterSkillsForSurface(docs, surface) {
120
- if (!surface)
121
- return docs;
122
- return docs.filter((d) => docForSurface(d, surface));
123
- }
124
- /**
125
- * Filtra docs crus (relPath+conteúdo) pros visíveis num surface. Docs sem
126
- * frontmatter de doc (ex.: scripts soltos) são mantidos por padrão.
127
- */
128
- export function filterDocsForSurface(docs, surface) {
129
- if (!surface)
130
- return docs;
131
- const parsed = toSkillDocs(docs.map((d) => ({ path: d.relPath, raw: d.content.toString('utf8') })));
132
- const hidden = new Set(parsed.filter((n) => !docForSurface(n, surface)).map((n) => n.path));
133
- return docs.filter((d) => !hidden.has(d.relPath));
134
- }
135
- function typeForPath(relPath) {
136
- const parts = relPath.split('/');
137
- const top = parts[0];
138
- const base = parts[parts.length - 1].toLowerCase();
139
- if (top === 'commands')
140
- return 'command';
141
- // Só `SKILL.md` é a skill; arquivos de apoio (STANDARDS.md, etc.) são `doc`.
142
- if (top === 'skills')
143
- return base === 'skill.md' ? 'skill' : 'doc';
144
- if (top === 'agents')
145
- return 'agent';
146
- if (top === 'dependencies')
147
- return 'dependency';
148
- return 'doc';
149
- }
150
- /** Id de invocação: skill = nome da pasta (SKILL.md); o resto = basename sem `.md`. */
151
- function idForPath(relPath) {
152
- const parts = relPath.split('/');
153
- const base = parts[parts.length - 1];
154
- if (base.toLowerCase() === 'skill.md' && parts.length >= 2)
155
- return parts[parts.length - 2];
156
- return base.replace(/\.md$/i, '');
157
- }
158
- function humanize(id) {
159
- return id.replace(/[-_]/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
160
- }
161
- /**
162
- * "Kinds" do pacote que viram docs. `rules/`, `hooks/`, `index.md`, `README.md`,
163
- * `scripts/` etc. são deliberadamente ignorados — o CLI não lida com eles aqui.
164
- */
165
- const SKILL_KINDS = ['commands', 'skills', 'agents', 'dependencies'];
166
- /** Lê os `.md` dos kinds do pacote (`@noclaf/skills`) como RawDoc[]. */
167
- export function readSkillFiles(dir = skillsDir()) {
168
- if (!existsSync(dir)) {
169
- throw new Error(`Pacote de skills não encontrado em ${dir}. Instale/publique ${brand.skillsPackage}.`);
170
- }
171
- const docs = [];
172
- for (const kind of SKILL_KINDS) {
173
- const kindDir = join(dir, kind);
174
- if (!existsSync(kindDir))
175
- continue;
176
- for (const rel of listMarkdown(kindDir)) {
177
- docs.push({ path: `${kind}/${rel}`, raw: readFileSync(join(kindDir, rel), 'utf-8') });
178
- }
179
- }
180
- return docs;
181
- }
182
- /** Constrói os docs a partir de arquivos crus (frontmatter + corpo). */
183
- export function toSkillDocs(files) {
184
- return files
185
- .map(({ path: relPath, raw }) => {
186
- const { frontmatter, body } = parseFrontmatter(raw);
187
- const id = idForPath(relPath);
188
- return {
189
- id,
190
- uid: frontmatter.id ? String(frontmatter.id).trim() : null,
191
- title: frontmatter.title || frontmatter.name || humanize(id),
192
- type: typeForPath(relPath),
193
- path: relPath,
194
- description: frontmatter.description ?? '',
195
- frontmatter,
196
- content: body.trim(),
197
- clients: parseClients(frontmatter.clients),
198
- };
199
- })
200
- .sort((a, b) => a.path.localeCompare(b.path));
201
- }
202
- export function readSkillDocs(dir = skillsDir()) {
203
- return toSkillDocs(readSkillFiles(dir));
204
- }
205
- /**
206
- * Docs `dependency` do pacote — libs externas que a CLI oferece instalar no fim do
207
- * `sync`/`init`. Escopadas pela **seleção** (role/área/stack, `general` em cascata):
208
- * `dev/general` sempre, mais as da área/stack escolhidos. Sem seleção → todas.
209
- * Best-effort: `[]` se o pacote não estiver disponível.
210
- */
211
- export function readDependencies(selection, dir = skillsDir()) {
212
- try {
213
- let deps = readSkillDocs(dir).filter((d) => d.type === 'dependency');
214
- if (selection)
215
- deps = deps.filter((d) => includePath(d.path, selection));
216
- return deps.sort((a, b) => a.title.localeCompare(b.title));
217
- }
218
- catch {
219
- return [];
220
- }
221
- }
222
- /**
223
- * Mapa `nome de invocação → id sequencial (frontmatter)`, pra telemetria estável.
224
- * Best-effort: mapa vazio se o `@noclaf/skills` não estiver disponível.
225
- */
226
- export function skillIdMap(dir = skillsDir()) {
227
- const map = new Map();
228
- try {
229
- for (const d of readSkillDocs(dir))
230
- map.set(d.id, d.uid);
231
- }
232
- catch {
233
- /* @noclaf/skills ausente → telemetria sem ids */
234
- }
235
- return map;
236
- }
237
- //# sourceMappingURL=skills.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Prazo de tarefa que entra em sprint.
3
- *
4
- * O banco do NOS tem a invariante `sprint_id NOT NULL ⇒ end_date NOT NULL`
5
- * (CHECK `tasks_sprint_requires_end_date`, spec 0021 do NOS): tarefa em sprint é
6
- * compromisso, e compromisso tem prazo. Backlog segue livre de prazo.
7
- *
8
- * Os outros caminhos de escrita do produto (`create_client_task`,
9
- * `move_task_to_project`) já aplicam hoje + 5 dias quando ninguém informou data
10
- * — "tarefa que não nasce é pior que tarefa sem prazo". Aqui é o mesmo default,
11
- * pro agente não morrer na constraint.
12
- */
13
- /** Dias de prazo aplicados quando a tarefa entra em sprint sem `end_date`. */
14
- export const SPRINT_DEADLINE_FALLBACK_DAYS = 5;
15
- /**
16
- * `end_date` final de uma tarefa: o informado, ou — só quando ela fica em sprint
17
- * sem data — hoje + `SPRINT_DEADLINE_FALLBACK_DAYS` em `YYYY-MM-DD`. Pura
18
- * (`today` injetável); a data é lida no fuso local, como o usuário enxerga "hoje".
19
- */
20
- export function resolveTaskDeadline(sprintId, endDate, today = new Date()) {
21
- if (sprintId === null || endDate)
22
- return endDate ?? null;
23
- const d = new Date(today);
24
- d.setDate(d.getDate() + SPRINT_DEADLINE_FALLBACK_DAYS);
25
- const pad = (n) => String(n).padStart(2, '0');
26
- return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
27
- }
28
- //# sourceMappingURL=sprint-deadline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sprint-deadline.js","sourceRoot":"","sources":["../../src/lib/sprint-deadline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAuB,EACvB,OAAkC,EAClC,QAAc,IAAI,IAAI,EAAE;IAExB,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO;QAAE,OAAO,OAAO,IAAI,IAAI,CAAC;IACzD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,6BAA6B,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC"}
@@ -1,31 +0,0 @@
1
- import { FINISHED_STATUSES } from '../core/types.js';
2
- /** Plano de encerramento: quem volta pro backlog e quem fica. Pura. */
3
- export function planSprintEnd(tasks) {
4
- const toBacklog = [];
5
- const kept = [];
6
- for (const t of tasks)
7
- (FINISHED_STATUSES.includes(t.status) ? kept : toBacklog).push(t.id);
8
- return { toBacklog, kept };
9
- }
10
- /** Contagem por status + vencidas (end_date < hoje, fora de done/production). Pura. */
11
- export function summarizeSprintTasks(tasks, today) {
12
- const by_status = {};
13
- for (const t of tasks)
14
- by_status[t.status] = (by_status[t.status] ?? 0) + 1;
15
- const overdue = tasks
16
- .filter((t) => t.end_date && t.end_date < today && !FINISHED_STATUSES.includes(t.status))
17
- .map(({ key, title, end_date }) => ({ key, title, end_date }));
18
- return { total: tasks.length, by_status, overdue };
19
- }
20
- /** Encerra a sprint: tasks primeiro, sprint depois. Já encerrada = no-op (preserva end_date). */
21
- export async function closeSprint(gw, sprint, today) {
22
- if (sprint.status === 'encerrada') {
23
- return { sprint, already_closed: true, returned_to_backlog: 0, kept_done: 0 };
24
- }
25
- const tasks = await gw.listSprintTasks(sprint.id);
26
- const { toBacklog, kept } = planSprintEnd(tasks);
27
- await gw.returnTasksToBacklog(toBacklog);
28
- const updated = await gw.updateSprint(sprint.id, { status: 'encerrada', end_date: today });
29
- return { sprint: updated, already_closed: false, returned_to_backlog: toBacklog.length, kept_done: kept.length };
30
- }
31
- //# sourceMappingURL=sprint-logic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sprint-logic.js","sourceRoot":"","sources":["../../src/lib/sprint-logic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAsC,MAAM,kBAAkB,CAAC;AAEzF,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,oBAAoB,CAAC,KAAsB,EAAE,KAAa;IACxE,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,KAAK;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,KAAK,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SACxF,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAiB,EAAE,MAAiB,EAAE,KAAa;IACnF,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3F,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACnH,CAAC"}
@@ -1,150 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join } from 'node:path';
4
- import { toSkillDocs } from './skills.js';
5
- import { readJson, readToml } from './file-merge.js';
6
- export const claudeTarget = {
7
- id: 'claude',
8
- label: 'Claude Code (~/.claude)',
9
- surface: 'claude-code',
10
- targetDir: () => join(homedir(), '.claude'),
11
- mapDocs: (docs) => docs,
12
- };
13
- /**
14
- * Texto que substitui `$ARGUMENTS` na tradução pro Codex. Skills do Codex são
15
- * selecionadas por descrição e dirigidas por linguagem natural — não há
16
- * substituição de slash-args como no caminho de command/prompt do Claude.
17
- */
18
- const ARGS_REWORD = 'the arguments the user provided';
19
- /** Escapa uma descrição pra uma linha de YAML entre aspas duplas. */
20
- function yamlQuote(value) {
21
- const oneLine = value.replace(/\r?\n/g, ' ').replace(/\s+/g, ' ').trim();
22
- return `"${oneLine.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
23
- }
24
- /** Renderiza o SKILL.md de um node no formato Agent Skills (name + description). */
25
- export function toCodexSkillContent(node) {
26
- const description = node.frontmatter.description || node.description || node.title;
27
- const frontmatter = `---\nname: ${node.id}\ndescription: ${yamlQuote(description)}\n---\n`;
28
- let body = node.content;
29
- if (body.includes('$ARGUMENTS')) {
30
- body = body.split('$ARGUMENTS').join(ARGS_REWORD);
31
- }
32
- // `argument-hint` não existe em skills — dobra num aviso de entrada esperada.
33
- const hint = node.frontmatter['argument-hint'];
34
- const inputLine = hint ? `**Expected input:** ${hint}\n\n` : '';
35
- return `${frontmatter}\n${inputLine}${body.trim()}\n`;
36
- }
37
- /**
38
- * Renderiza um custom prompt do Codex (`~/.codex/prompts/<id>.md`). Diferente da skill,
39
- * o Codex expande `$ARGUMENTS`/`$1..$9` aqui, então preservamos os placeholders.
40
- */
41
- export function toCodexPromptContent(node) {
42
- const description = node.frontmatter.description || node.description || node.title;
43
- const hint = node.frontmatter['argument-hint'];
44
- const fmLines = [`description: ${yamlQuote(description)}`];
45
- if (hint)
46
- fmLines.push(`argument-hint: ${yamlQuote(hint)}`);
47
- const frontmatter = `---\n${fmLines.join('\n')}\n---\n`;
48
- // Corpo original, com `$ARGUMENTS`/`$1` intactos (o Codex substitui na invocação).
49
- return `${frontmatter}\n${node.content.trim()}\n`;
50
- }
51
- /**
52
- * Traduz os docs crus pro layout do Codex em dual-write: cada `command`/`skill` vira
53
- * uma skill (`skills/<id>/SKILL.md`) E um custom prompt (`prompts/<id>.md`). Os
54
- * arquivos de apoio de uma skill (`templates/*.md`, `*-PATTERN.md`, `STANDARDS.md` —
55
- * type `doc`, vizinhos do `SKILL.md`) são carregados pra dentro de `skills/<id>/`
56
- * preservando o path relativo, pra que o SKILL.md traduzido consiga referenciá-los
57
- * exatamente como no Claude. `agent` e `doc` fora de uma skill são ignorados.
58
- */
59
- export function toCodexDocs(docs) {
60
- const nodes = toSkillDocs(docs.map((d) => ({ path: d.relPath, raw: d.content.toString('utf8') })));
61
- const rawByPath = new Map(docs.map((d) => [d.relPath, d.content]));
62
- // Pasta da skill (dir do SKILL.md) -> id, pra rotear os arquivos de apoio.
63
- const skillFolders = new Map();
64
- for (const node of nodes) {
65
- if (node.type === 'skill') {
66
- skillFolders.set(node.path.slice(0, node.path.lastIndexOf('/')), node.id);
67
- }
68
- }
69
- const out = [];
70
- const seen = new Map(); // id -> path de origem (guarda de colisão)
71
- for (const node of nodes) {
72
- if (node.type === 'command' || node.type === 'skill') {
73
- const prev = seen.get(node.id);
74
- if (prev) {
75
- throw new Error(`Tradução Codex: id duplicado "${node.id}" (${prev} e ${node.path}). ` +
76
- `O id precisa ser único — renomeie um deles.`);
77
- }
78
- seen.set(node.id, node.path);
79
- out.push({
80
- relPath: `skills/${node.id}/SKILL.md`,
81
- content: Buffer.from(toCodexSkillContent(node), 'utf8'),
82
- });
83
- out.push({
84
- relPath: `prompts/${node.id}.md`,
85
- content: Buffer.from(toCodexPromptContent(node), 'utf8'),
86
- });
87
- continue;
88
- }
89
- // Arquivo de apoio de uma skill: carrega verbatim pro dir da skill traduzida,
90
- // mantendo o path relativo (ex.: `templates/spec.md`, `SPEC-PATTERN.md`).
91
- if (node.type === 'doc') {
92
- for (const [folder, id] of skillFolders) {
93
- if (!node.path.startsWith(`${folder}/`))
94
- continue;
95
- const rel = node.path.slice(folder.length + 1);
96
- const raw = rawByPath.get(node.path);
97
- if (raw)
98
- out.push({ relPath: `skills/${id}/${rel}`, content: raw });
99
- break;
100
- }
101
- }
102
- }
103
- return out;
104
- }
105
- export const codexTarget = {
106
- id: 'codex',
107
- label: 'Codex CLI (~/.codex)',
108
- surface: 'codex',
109
- targetDir: () => join(homedir(), '.codex'),
110
- mapDocs: (docs) => toCodexDocs(docs),
111
- };
112
- export const ALL_TARGETS = [claudeTarget, codexTarget];
113
- function claudeConfigured() {
114
- const path = join(homedir(), '.claude', 'settings.json');
115
- if (!existsSync(path))
116
- return false;
117
- try {
118
- const json = (readJson(path) ?? {});
119
- return Boolean(json.mcpServers?.noclaf);
120
- }
121
- catch {
122
- return false;
123
- }
124
- }
125
- function codexConfigured() {
126
- const path = join(homedir(), '.codex', 'config.toml');
127
- if (!existsSync(path))
128
- return false;
129
- try {
130
- const toml = (readToml(path) ?? {});
131
- return Boolean(toml.mcp_servers?.noclaf);
132
- }
133
- catch {
134
- return false;
135
- }
136
- }
137
- /**
138
- * Alvos que já têm o servidor `noclaf` configurado (~/.claude/settings.json,
139
- * ~/.codex/config.toml). Base do auto-detect de `sync`: provisiona pra cada
140
- * cliente que o worker de fato usa, sem flags.
141
- */
142
- export function detectConfiguredTargets() {
143
- const targets = [];
144
- if (claudeConfigured())
145
- targets.push(claudeTarget);
146
- if (codexConfigured())
147
- targets.push(codexTarget);
148
- return targets;
149
- }
150
- //# sourceMappingURL=targets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/lib/targets.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { brand } from '../brand.js';
2
- export async function insertTaskHistory(supabase, entry) {
3
- const { error } = await supabase.from('task_history').insert({
4
- task_id: entry.task_id,
5
- user_id: entry.user_id,
6
- action: entry.action,
7
- field: entry.field ?? null,
8
- old_value: entry.old_value ?? null,
9
- new_value: entry.new_value ?? null,
10
- });
11
- if (error) {
12
- console.error(`[${brand.mcpBinName}] falha ao gravar task_history: ${error.message}`);
13
- }
14
- }
15
- //# sourceMappingURL=task-history.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-history.js","sourceRoot":"","sources":["../../src/lib/task-history.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAWpC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAkB,EAClB,KAAmB;IAEnB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;QAC3D,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;KACnC,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
@@ -1,51 +0,0 @@
1
- import { env } from "../brand.js";
2
- function enabled() {
3
- return env("TELEMETRY") !== "0" && !env("NO_TELEMETRY");
4
- }
5
- /**
6
- * Items (skills/commands/agents) provisionados a partir do plano do `provision`,
7
- * já resolvidos pro id sequencial estável (via `uidByName`).
8
- */
9
- export function provisionedItems(files, uidByName) {
10
- const seen = new Set();
11
- const items = [];
12
- for (const f of files) {
13
- const m = /^skills\/([^/]+)\/SKILL\.md$/.exec(f.relPath) ??
14
- /^commands\/([^/]+)\.md$/.exec(f.relPath) ??
15
- /^agents\/([^/]+)\.md$/.exec(f.relPath);
16
- if (m && !seen.has(m[1])) {
17
- seen.add(m[1]);
18
- items.push({ name: m[1], id: uidByName.get(m[1]) ?? null });
19
- }
20
- }
21
- return items.sort((a, b) => a.name.localeCompare(b.name));
22
- }
23
- // Requisições em voo — o CLI é curto e pode encerrar antes do POST completar,
24
- // então guardamos as promises pra dar flush (`flushTelemetry`) antes de sair.
25
- const pending = [];
26
- /** Envia um evento de uso pro NOS. Best-effort, nunca lança. */
27
- export function track(supabase, event) {
28
- if (!supabase || !enabled())
29
- return;
30
- const p = supabase.functions
31
- .invoke("track-usage", { body: { ...event, at: new Date().toISOString() } })
32
- .then(() => undefined)
33
- .catch(() => {
34
- /* telemetria nunca quebra o fluxo */
35
- });
36
- pending.push(p);
37
- }
38
- /**
39
- * Espera as requisições de telemetria em voo (com teto de tempo) antes do CLI sair.
40
- * No servidor MCP (long-lived) não é necessário — o loop já mantém o processo vivo.
41
- */
42
- export async function flushTelemetry(timeoutMs = 4000) {
43
- if (pending.length === 0)
44
- return;
45
- const inflight = Promise.allSettled(pending.splice(0));
46
- await Promise.race([
47
- inflight,
48
- new Promise((resolve) => setTimeout(resolve, timeoutMs)),
49
- ]);
50
- }
51
- //# sourceMappingURL=telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAgClC,SAAS,OAAO;IACd,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA4B,EAC5B,SAAqC;IAErC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GACL,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACzC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,OAAO,GAAuB,EAAE,CAAC;AAEvC,gEAAgE;AAChE,MAAM,UAAU,KAAK,CAAC,QAAyB,EAAE,KAAiB;IAChE,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO;IACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS;SACzB,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC;SAC3E,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;SACrB,KAAK,CAAC,GAAG,EAAE;QACV,qCAAqC;IACvC,CAAC,CAAC,CAAC;IACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAS,GAAG,IAAI;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,QAAQ;QACR,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
@@ -1,15 +0,0 @@
1
- import { humanizePgError } from './pg-error.js';
2
- export function jsonResult(data) {
3
- return {
4
- content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
5
- };
6
- }
7
- /** Erro de tool. Passa pelo tradutor de constraint do Postgres: nome interno de
8
- * invariante do banco nunca chega ao cliente MCP, venha de onde vier. */
9
- export function errorResult(message) {
10
- return {
11
- content: [{ type: 'text', text: humanizePgError(message) }],
12
- isError: true,
13
- };
14
- }
15
- //# sourceMappingURL=tool-result.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-result.js","sourceRoot":"","sources":["../../src/lib/tool-result.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}