@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,191 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join, dirname } from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- import { backupFile, readJson, writeJson, readToml, writeToml } from './file-merge.js';
6
- import { brand, envName } from '../brand.js';
7
- const MCP_COMMAND = brand.mcpBinName;
8
- /**
9
- * Lê o JSON do path; se for malformado, lança erro com mensagem clara
10
- * apontando que o user deve consertar à mão.
11
- */
12
- function readJsonSafe(path) {
13
- try {
14
- return readJson(path);
15
- }
16
- catch (err) {
17
- throw new Error(`Arquivo ${path} contém JSON inválido (${err.message}). ` +
18
- `Conserte ou apague antes de rodar de novo.`);
19
- }
20
- }
21
- function ensureMcpServersJson(path, rootKey) {
22
- if (!existsSync(path)) {
23
- writeJson(path, { [rootKey]: { [brand.mcpServerKey]: { command: MCP_COMMAND } } });
24
- return { status: 'created', path };
25
- }
26
- const existing = (readJsonSafe(path) ?? {});
27
- const root = (existing[rootKey] ?? {});
28
- const current = root[brand.mcpServerKey];
29
- if (current && current.command === MCP_COMMAND) {
30
- return { status: 'already_configured', path };
31
- }
32
- const backup = backupFile(path);
33
- const next = {
34
- ...existing,
35
- [rootKey]: {
36
- ...root,
37
- [brand.mcpServerKey]: { command: MCP_COMMAND },
38
- },
39
- };
40
- writeJson(path, next);
41
- return { status: 'updated', path, backup };
42
- }
43
- export function installClaudeCodeGlobal() {
44
- const path = join(homedir(), '.claude', 'settings.json');
45
- return ensureMcpServersJson(path, 'mcpServers');
46
- }
47
- export function installClaudeCodeRepo(cwd) {
48
- const path = join(cwd, '.mcp.json');
49
- return ensureMcpServersJson(path, 'mcpServers');
50
- }
51
- export function installVSCodeRepo(cwd) {
52
- const path = join(cwd, '.vscode', 'mcp.json');
53
- return ensureMcpServersJson(path, 'servers');
54
- }
55
- // ---------------------------------------------------------------------------
56
- // Claude Desktop / Cowork — ativa o conector direto no config, sem `.mcpb`.
57
- // ---------------------------------------------------------------------------
58
- /** Diretório de config do Claude Desktop por SO (criado pelo app quando instalado). */
59
- export function coworkConfigDir() {
60
- if (process.platform === 'darwin') {
61
- return join(homedir(), 'Library', 'Application Support', 'Claude');
62
- }
63
- if (process.platform === 'win32') {
64
- return join(process.env.APPDATA ?? join(homedir(), 'AppData', 'Roaming'), 'Claude');
65
- }
66
- return join(homedir(), '.config', 'Claude');
67
- }
68
- export function coworkConfigPath() {
69
- return join(coworkConfigDir(), 'claude_desktop_config.json');
70
- }
71
- /** O app está instalado? Presença do dir de config é o sinal (o app o cria). */
72
- export function coworkAppInstalled() {
73
- return existsSync(coworkConfigDir());
74
- }
75
- /** O conector noclaf já está no `claude_desktop_config.json`? */
76
- export function coworkConfigured() {
77
- const path = coworkConfigPath();
78
- if (!existsSync(path))
79
- return false;
80
- try {
81
- const json = (readJsonSafe(path) ?? {});
82
- return Boolean(json.mcpServers?.[brand.mcpServerKey]);
83
- }
84
- catch {
85
- return false;
86
- }
87
- }
88
- /** Path absoluto do `dist/mcp-server.js` deste pacote (compila pra `dist/lib/`). */
89
- function mcpServerJsPath() {
90
- const here = dirname(fileURLToPath(import.meta.url)); // .../dist/lib
91
- return join(here, '..', 'mcp-server.js'); // .../dist/mcp-server.js
92
- }
93
- /**
94
- * Ativa o conector noclaf direto no `claude_desktop_config.json` do Claude Desktop.
95
- *
96
- * Usa caminhos ABSOLUTOS (`process.execPath` + `dist/mcp-server.js`) porque o app é
97
- * GUI e tem PATH mínimo — `noclaf-cli`/`node` via nvm não seriam encontrados. O PAT
98
- * vem do `~/.noclaf/credentials.json` (via `noclaf login`); `NOCLAF_CLIENT=cowork`
99
- * faz o server servir as skills por prompts/resources e escolher projeto por sessão.
100
- * Não-destrutivo: faz merge + backup do config existente.
101
- */
102
- export function installCoworkGlobal() {
103
- const path = coworkConfigPath();
104
- const entry = {
105
- command: process.execPath,
106
- args: [mcpServerJsPath()],
107
- env: { [envName('CLIENT')]: 'cowork' },
108
- };
109
- if (!existsSync(path)) {
110
- writeJson(path, { mcpServers: { [brand.mcpServerKey]: entry } });
111
- return { status: 'created', path };
112
- }
113
- const existing = (readJsonSafe(path) ?? {});
114
- const root = (existing.mcpServers ?? {});
115
- const current = root[brand.mcpServerKey];
116
- if (current &&
117
- current.command === entry.command &&
118
- current.args?.[0] === entry.args?.[0] &&
119
- current.env?.[envName('CLIENT')] === 'cowork') {
120
- return { status: 'already_configured', path };
121
- }
122
- const backup = backupFile(path);
123
- writeJson(path, { ...existing, mcpServers: { ...root, [brand.mcpServerKey]: entry } });
124
- return { status: 'updated', path, backup };
125
- }
126
- function claudeSettingsPath() {
127
- return join(homedir(), '.claude', 'settings.json');
128
- }
129
- export function readCoAuthoredBy(path = claudeSettingsPath()) {
130
- if (!existsSync(path))
131
- return { path, value: undefined, enabled: true };
132
- const json = (readJsonSafe(path) ?? {});
133
- const value = json.includeCoAuthoredBy;
134
- return { path, value, enabled: value !== false };
135
- }
136
- // ponytail: setamos só includeCoAuthoredBy=false (knob simples, ainda honrado).
137
- // Se o Claude Code um dia remover em favor do `attribution`, migra aqui.
138
- export function disableCoAuthoredBy(path = claudeSettingsPath()) {
139
- const exists = existsSync(path);
140
- const existing = exists ? (readJsonSafe(path) ?? {}) : {};
141
- const backup = exists ? backupFile(path) : undefined;
142
- writeJson(path, { ...existing, includeCoAuthoredBy: false });
143
- return { status: exists ? 'updated' : 'created', path, backup };
144
- }
145
- /**
146
- * Decide se o `noclaf` já está OK no TOML e monta o próximo objeto se precisar
147
- * atualizar (pura, sem IO). Já-OK só se command bate E env NOCLAF_CLIENT=codex já
148
- * existe — senão atualiza (instalações antigas ganham o env no próximo run).
149
- */
150
- export function planCodexUpdate(existing, noclafEntry) {
151
- const servers = (existing.mcp_servers ?? {});
152
- const current = servers[brand.mcpServerKey];
153
- const alreadyConfigured = Boolean(current && current.command === MCP_COMMAND && current.env?.[envName('CLIENT')] === 'codex');
154
- const next = {
155
- ...existing,
156
- mcp_servers: {
157
- ...servers,
158
- [brand.mcpServerKey]: {
159
- ...current,
160
- ...noclafEntry,
161
- env: { ...current?.env, [envName('CLIENT')]: 'codex' },
162
- },
163
- },
164
- };
165
- return { alreadyConfigured, next };
166
- }
167
- export function installCodexGlobal() {
168
- const path = join(homedir(), '.codex', 'config.toml');
169
- // `NOCLAF_CLIENT=codex` avisa o servidor MCP a (1) provisionar/auto-pull pra
170
- // `~/.codex` (skills + prompts) e (2) filtrar os docs pelo surface `codex`.
171
- const noclafEntry = { command: MCP_COMMAND, env: { [envName('CLIENT')]: 'codex' } };
172
- if (!existsSync(path)) {
173
- writeToml(path, { mcp_servers: { [brand.mcpServerKey]: noclafEntry } });
174
- return { status: 'created', path };
175
- }
176
- let existing;
177
- try {
178
- existing = (readToml(path) ?? {});
179
- }
180
- catch (err) {
181
- throw new Error(`Arquivo ${path} contém TOML inválido (${err.message}). ` +
182
- `Conserte ou apague antes de rodar de novo.`);
183
- }
184
- const { alreadyConfigured, next } = planCodexUpdate(existing, noclafEntry);
185
- if (alreadyConfigured)
186
- return { status: 'already_configured', path };
187
- const backup = backupFile(path);
188
- writeToml(path, next);
189
- return { status: 'updated', path, backup };
190
- }
191
- //# sourceMappingURL=client-configs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-configs.js","sourceRoot":"","sources":["../../src/lib/client-configs.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- import { spawnSync } from 'node:child_process';
2
- export const CLIENTS = {
3
- 'claude-code': {
4
- id: 'claude-code',
5
- label: 'Claude Code',
6
- binary: 'claude',
7
- npm: '@anthropic-ai/claude-code',
8
- url: 'https://code.claude.com/docs/en/setup',
9
- },
10
- codex: {
11
- id: 'codex',
12
- label: 'Codex CLI',
13
- binary: 'codex',
14
- npm: '@openai/codex',
15
- url: 'https://developers.openai.com/codex/cli',
16
- },
17
- vscode: {
18
- id: 'vscode',
19
- label: 'VS Code',
20
- binary: 'code',
21
- url: 'https://code.visualstudio.com/download',
22
- },
23
- cowork: {
24
- id: 'cowork',
25
- label: 'Claude Desktop (Cowork)',
26
- url: 'https://claude.ai/download',
27
- },
28
- };
29
- /** Detecta se um binário existe no PATH (roda `<bin> --version`). */
30
- export function isBinaryInstalled(binary) {
31
- try {
32
- const res = spawnSync(binary, ['--version'], { stdio: 'ignore', timeout: 5000 });
33
- // ENOENT → não está no PATH. Qualquer exit code (mesmo != 0) = existe.
34
- return !res.error;
35
- }
36
- catch {
37
- return false;
38
- }
39
- }
40
- //# sourceMappingURL=client-install.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-install.js","sourceRoot":"","sources":["../../src/lib/client-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAiB/C,MAAM,CAAC,MAAM,OAAO,GAA+B;IACjD,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,2BAA2B;QAChC,GAAG,EAAE,uCAAuC;KAC7C;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,OAAO;QACf,GAAG,EAAE,eAAe;QACpB,GAAG,EAAE,yCAAyC;KAC/C;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,wCAAwC;KAC9C;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,yBAAyB;QAChC,GAAG,EAAE,4BAA4B;KAClC;CACF,CAAC;AAEF,qEAAqE;AACrE,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,uEAAuE;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,92 +0,0 @@
1
- import chalk from 'chalk';
2
- import boxen from 'boxen';
3
- /**
4
- * Camada de estilo do CLI. `chalk` cuida de cor (respeita TTY / `NO_COLOR` /
5
- * `FORCE_COLOR` sozinho) e `boxen` desenha caixas. Helpers extras: links
6
- * clicáveis (OSC 8), régua, símbolos e realce de comandos.
7
- */
8
- /** Paleta — `chalk` já é um objeto com `.bold/.dim/.cyan/...`, reexpomos como `c`. */
9
- export const c = chalk;
10
- /** Símbolos usados na saída (unicode). */
11
- export const sym = {
12
- ok: '✓',
13
- err: '✗',
14
- dot: '●',
15
- arrow: '→',
16
- chevron: '›',
17
- bullet: '·',
18
- warn: '⚠',
19
- gear: '↻',
20
- };
21
- /** Comando destacado (ciano) — o realce padrão pra qualquer coisa executável. */
22
- export function cmd(s) {
23
- return chalk.cyan(s);
24
- }
25
- /** Selo com fundo colorido — estado bem visível ao lado de um título. */
26
- export function badge(label, color = 'gray') {
27
- const bg = {
28
- green: chalk.bgGreen,
29
- yellow: chalk.bgYellow,
30
- gray: chalk.bgGray,
31
- cyan: chalk.bgCyan,
32
- }[color];
33
- return bg.black(` ${label} `);
34
- }
35
- /** Régua horizontal fina. */
36
- export function rule(width = 58) {
37
- return chalk.dim('─'.repeat(width));
38
- }
39
- /** Realça trechos `entre crases` como comandos (ciano) e remove as crases. */
40
- export function highlightInlineCode(s) {
41
- return s.replace(/`([^`]+)`/g, (_m, code) => chalk.cyan(code));
42
- }
43
- /**
44
- * Link clicável via OSC 8 (terminais modernos). Fora de TTY, cai pra
45
- * `label (url)` em texto plano. Sublinhado em ciano pra parecer link.
46
- */
47
- export function link(url, label = url) {
48
- if (!process.stdout.isTTY)
49
- return label === url ? url : `${label} (${url})`;
50
- const OSC = ']8;;';
51
- const BEL = '';
52
- return `${OSC}${url}${BEL}${chalk.cyan.underline(label)}${OSC}${BEL}`;
53
- }
54
- /** Caixa (boxen) com defaults do noclaf; opções sobrescrevíveis. */
55
- export function box(content, opts = {}) {
56
- return boxen(content, {
57
- padding: { top: 0, bottom: 0, left: 1, right: 1 },
58
- borderStyle: 'round',
59
- borderColor: 'gray',
60
- dimBorder: true,
61
- ...opts,
62
- });
63
- }
64
- /** Indenta cada linha de um bloco multi-linha (ex.: pra alinhar uma caixa). */
65
- export function indent(block, spaces = 2) {
66
- const pad = ' '.repeat(spaces);
67
- return block
68
- .split('\n')
69
- .map((l) => (l.length ? pad + l : l))
70
- .join('\n');
71
- }
72
- /** Título de seção proeminente: negrito + sublinhado, com subtítulo dim opcional. */
73
- export function sectionTitle(title, subtitle) {
74
- const head = chalk.bold.underline(title);
75
- return subtitle ? `${head} ${chalk.dim(subtitle)}` : head;
76
- }
77
- /**
78
- * Limpa a **tela visível** e volta o cursor pro topo — sem apagar o histórico de
79
- * rolagem (`\x1b[2J\x1b[H`, não `\x1b[3J`), então dá pra rolar pra cima e revisar.
80
- * Só em TTY; desliga com `NOCLAF_NO_CLEAR=1`.
81
- */
82
- export function clearScreen() {
83
- if (!process.stdout.isTTY || process.env.NOCLAF_NO_CLEAR)
84
- return;
85
- process.stdout.write("\x1b[2J\x1b[H");
86
- }
87
- /** Começa uma seção "em tela nova": limpa (se TTY) e imprime o título. */
88
- export function section(title, subtitle) {
89
- clearScreen();
90
- console.log(sectionTitle(title, subtitle));
91
- }
92
- //# sourceMappingURL=colors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/lib/colors.ts"],"names":[],"mappings":"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"}
@@ -1,143 +0,0 @@
1
- import AdmZip from "adm-zip";
2
- import { fileURLToPath } from "node:url";
3
- import { dirname, join } from "node:path";
4
- import { existsSync, readdirSync, readFileSync } from "node:fs";
5
- import { homedir } from "node:os";
6
- import { spawn } from "node:child_process";
7
- import { VERSION } from "../version.js";
8
- import { toolDefinitions } from "../tools/index.js";
9
- import { brand } from "../brand.js";
10
- /**
11
- * Raiz do pacote instalado (onde ficam `dist/` e `node_modules/`).
12
- * Este módulo compila para dist/lib/cowork-extension.js, então sobe dois níveis.
13
- */
14
- function packageRoot() {
15
- const here = dirname(fileURLToPath(import.meta.url)); // .../dist/lib
16
- return join(here, "..", "..");
17
- }
18
- /** Nome + descrição normalizada (espaços colapsados, até 160 chars — limite do MCPB). */
19
- function mapCoworkTools(tools) {
20
- return tools.map((t) => ({
21
- name: t.name,
22
- description: (t.description ?? "")
23
- .replace(/\s+/g, " ")
24
- .trim()
25
- .slice(0, 160),
26
- }));
27
- }
28
- /** Bloco `server` do manifest: como o Claude Desktop sobe o servidor MCP do noclaf. */
29
- function buildCoworkServerConfig() {
30
- return {
31
- type: "node",
32
- entry_point: "dist/mcp-server.js",
33
- mcp_config: {
34
- command: "node",
35
- args: ["${__dirname}/dist/mcp-server.js"],
36
- env: {
37
- NOCLAF_PAT: '${user_config.pat}',
38
- NOCLAF_PROJECT_ID: '${user_config.project_id}',
39
- NOCLAF_REPOSITORY_ID: '${user_config.repository_id}',
40
- // Cowork ignora ~/.claude → o servidor pula o auto-pull e entrega as skills
41
- // por resources + prompts.
42
- NOCLAF_CLIENT: 'cowork',
43
- },
44
- },
45
- };
46
- }
47
- /** Bloco `user_config` do manifest: campos que o app pede na instalação (o PAT). */
48
- function buildCoworkUserConfig() {
49
- return {
50
- pat: {
51
- type: "string",
52
- title: "NOS Personal Access Token (PAT)",
53
- description: `PAT do ${brand.productName} (formato ${brand.patPrefix}…), gerado em ${brand.webUrl}/profile#mcp. O projeto é escolhido por sessão com as tools ${brand.toolPrefix}list_projects / ${brand.toolPrefix}set_project — não há nada de projeto para configurar aqui.`,
54
- sensitive: true,
55
- required: true,
56
- },
57
- };
58
- }
59
- /** Gera o objeto manifest.json (spec MCPB) para a versão atual. */
60
- export function buildCoworkManifest() {
61
- return {
62
- manifest_version: "0.2",
63
- name: "noclaf-cli",
64
- display_name: "Noclaf (NOS)",
65
- version: VERSION,
66
- description: "MCP server pra controlar o NOS (Noclaf Operation System) — tarefas, kanban e ponto/cronometragem — a partir do Claude Desktop / Cowork.",
67
- long_description: "Servidor MCP do NOS (Noclaf Operation System). Permite ao assistente ler o contexto do projeto, listar/criar/atualizar/mover/comentar tarefas e gerenciar alocações (bater ponto e cronometrar tempo por task). A autenticação usa um PAT do NOS, fornecido via configuração da extensão (NOCLAF_PAT).",
68
- author: { name: "Noclaf Tech", url: "https://github.com/Falcao-Tech" },
69
- homepage: "https://github.com/Falcao-Tech/noclaf-cli#readme",
70
- documentation: "https://github.com/Falcao-Tech/noclaf-cli#readme",
71
- support: "https://github.com/Falcao-Tech/noclaf-cli/issues",
72
- keywords: ["mcp", "noclaf", "nos", "tasks", "kanban", "time-tracking"],
73
- server: buildCoworkServerConfig(),
74
- user_config: buildCoworkUserConfig(),
75
- tools: mapCoworkTools(toolDefinitions),
76
- compatibility: {
77
- platforms: ["darwin", "win32", "linux"],
78
- runtimes: { node: ">=20.0.0" },
79
- },
80
- };
81
- }
82
- /**
83
- * Adiciona recursivamente os arquivos de `localDir` ao zip sob `zipPrefix`,
84
- * usando separadores POSIX e sem criar entradas de diretório. Pula source maps.
85
- */
86
- function addFilesRecursively(zip, localDir, zipPrefix) {
87
- for (const entry of readdirSync(localDir, { withFileTypes: true })) {
88
- const localPath = join(localDir, entry.name);
89
- const zipPath = `${zipPrefix}/${entry.name}`;
90
- if (entry.isDirectory()) {
91
- addFilesRecursively(zip, localPath, zipPath);
92
- }
93
- else if (entry.isFile() && !entry.name.endsWith(".map")) {
94
- zip.addFile(zipPath, readFileSync(localPath));
95
- }
96
- }
97
- }
98
- /** Pasta de destino do .mcpb: ~/Downloads se existir, senão o home. */
99
- function defaultOutputDir() {
100
- const downloads = join(homedir(), "Downloads");
101
- return existsSync(downloads) ? downloads : homedir();
102
- }
103
- /**
104
- * Gera o pacote .mcpb (manifest + dist + node_modules) a partir da instalação atual.
105
- * Source maps são omitidos pra reduzir o tamanho.
106
- */
107
- export function generateCoworkExtension(outputDir = defaultOutputDir()) {
108
- const root = packageRoot();
109
- const distDir = join(root, "dist");
110
- const nodeModulesDir = join(root, "node_modules");
111
- if (!existsSync(distDir)) {
112
- throw new Error(`Não encontrei dist/ em ${root}. Reinstale o pacote (npm i -g ${brand.packageName}).`);
113
- }
114
- const manifest = buildCoworkManifest();
115
- const zip = new AdmZip();
116
- zip.addFile("manifest.json", Buffer.from(JSON.stringify(manifest, null, 2) + "\n", "utf8"));
117
- // Adiciona só arquivos (sem entradas de diretório), como o `mcpb pack` faz —
118
- // entradas de pasta quebram o instalador do MCPB. Source maps são omitidos.
119
- addFilesRecursively(zip, distDir, "dist");
120
- if (existsSync(nodeModulesDir)) {
121
- addFilesRecursively(zip, nodeModulesDir, "node_modules");
122
- }
123
- const outputPath = join(outputDir, `${brand.mcpBinName}-${VERSION}.mcpb`);
124
- zip.writeZip(outputPath);
125
- return { outputPath };
126
- }
127
- /** Abre a pasta no explorador de arquivos do SO (best-effort, ignora falhas). */
128
- export function revealInFileManager(target) {
129
- const cmd = process.platform === "darwin"
130
- ? "open"
131
- : process.platform === "win32"
132
- ? "explorer"
133
- : "xdg-open";
134
- try {
135
- const child = spawn(cmd, [target], { stdio: "ignore", detached: true });
136
- child.on("error", () => { });
137
- child.unref();
138
- }
139
- catch {
140
- // sem file manager disponível — ignora
141
- }
142
- }
143
- //# sourceMappingURL=cowork-extension.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cowork-extension.js","sourceRoot":"","sources":["../../src/lib/cowork-extension.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;GAGG;AACH,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe;IACrE,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,yFAAyF;AACzF,SAAS,cAAc,CAAC,KAA+C;IACrE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;aAC/B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE;aACN,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;KACjB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,uFAAuF;AACvF,SAAS,uBAAuB;IAC9B,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,oBAAoB;QACjC,UAAU,EAAE;YACV,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,CAAC,iCAAiC,CAAC;YACzC,GAAG,EAAE;gBACH,UAAU,EAAE,oBAAoB;gBAChC,iBAAiB,EAAE,2BAA2B;gBAC9C,oBAAoB,EAAE,8BAA8B;gBACpD,4EAA4E;gBAC5E,2BAA2B;gBAC3B,aAAa,EAAE,QAAQ;aACxB;SACF;KACF,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,SAAS,qBAAqB;IAC5B,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,iCAAiC;YACxC,WAAW,EACT,UAAU,KAAK,CAAC,WAAW,aAAa,KAAK,CAAC,SAAS,iBAAiB,KAAK,CAAC,MAAM,+DAA+D,KAAK,CAAC,UAAU,mBAAmB,KAAK,CAAC,UAAU,4DAA4D;YACpQ,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,gBAAgB,EAAE,KAAK;QACvB,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE,cAAc;QAC5B,OAAO,EAAE,OAAO;QAChB,WAAW,EACT,yIAAyI;QAC3I,gBAAgB,EACd,wSAAwS;QAC1S,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,gCAAgC,EAAE;QACtE,QAAQ,EAAE,kDAAkD;QAC5D,aAAa,EAAE,kDAAkD;QACjE,OAAO,EAAE,kDAAkD;QAC3D,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC;QACtE,MAAM,EAAE,uBAAuB,EAAE;QACjC,WAAW,EAAE,qBAAqB,EAAE;QACpC,KAAK,EAAE,cAAc,CAAC,eAAe,CAAC;QACtC,aAAa,EAAE;YACb,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;YACvC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;SAC/B;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAC1B,GAAW,EACX,QAAgB,EAChB,SAAiB;IAEjB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAMD,uEAAuE;AACvE,SAAS,gBAAgB;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAoB,gBAAgB,EAAE;IAEtC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,kCAAkC,KAAK,CAAC,WAAW,IAAI,CACtF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;IAEzB,GAAG,CAAC,OAAO,CACT,eAAe,EACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAC9D,CAAC;IAEF,6EAA6E;IAC7E,4EAA4E;IAC5E,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,UAAU,IAAI,OAAO,OAAO,CAAC,CAAC;IAC1E,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzB,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC"}
package/dist/lib/dates.js DELETED
@@ -1,21 +0,0 @@
1
- import { z } from 'zod';
2
- /** Hoje em YYYY-MM-DD, fuso local. */
3
- export function todayStr(now = new Date()) {
4
- const p = (n) => String(n).padStart(2, '0');
5
- return `${now.getFullYear()}-${p(now.getMonth() + 1)}-${p(now.getDate())}`;
6
- }
7
- const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
8
- /** YYYY-MM-DD real (rejeita 2026-02-31 por round-trip). */
9
- export function isIsoDate(s) {
10
- if (!DATE_RE.test(s))
11
- return false;
12
- const d = new Date(`${s}T00:00:00Z`);
13
- return !Number.isNaN(d.getTime()) && d.toISOString().slice(0, 10) === s;
14
- }
15
- /** Schema zod de data ISO válida, compartilhado pelas tools. */
16
- export const isoDate = z.string().refine(isIsoDate, 'use uma data real no formato YYYY-MM-DD');
17
- /** Erro se início > fim (ISO, comparação lexicográfica); null se ok ou se faltar um lado. */
18
- export function dateRangeError(start, end) {
19
- return start && end && start > end ? `Intervalo inválido: início (${start}) deve ser <= fim (${end}).` : null;
20
- }
21
- //# sourceMappingURL=dates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/lib/dates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sCAAsC;AACtC,MAAM,UAAU,QAAQ,CAAC,MAAY,IAAI,IAAI,EAAE;IAC7C,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,OAAO,GAAG,qBAAqB,CAAC;AAEtC,2DAA2D;AAC3D,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,yCAAyC,CAAC,CAAC;AAE/F,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAAC,KAAqB,EAAE,GAAmB;IACvE,OAAO,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,+BAA+B,KAAK,sBAAsB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAChH,CAAC"}