@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
package/dist/lib/hooks.js DELETED
@@ -1,216 +0,0 @@
1
- import { existsSync, readFileSync, readdirSync, copyFileSync, rmSync, } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join } from 'node:path';
4
- import { readJson, writeJson } from './file-merge.js';
5
- import { skillsDir } from './skills.js';
6
- import { ensureDir } from './provision.js';
7
- import { DEV_ROLE } from './sections.js';
8
- /**
9
- * Provisionamento de hooks (só Claude Code). Um hook é um script + um gatilho que
10
- * precisa estar registrado no `settings.json` — então, além de copiar o script pro
11
- * namespace `hooks/noclaf/`, o CLI faz merge não-destrutivo do binding. Fonte:
12
- * `@noclaf/skills/hooks/hooks.json` (flat — hooks são sempre de dev).
13
- */
14
- /** Namespace sob o targetDir onde os scripts do noclaf vivem. Marca "nossa" entrada. */
15
- const HOOKS_NS = 'hooks/noclaf';
16
- function defaultTargetDir() {
17
- return join(homedir(), '.claude');
18
- }
19
- /** Lê e valida um `hooks.json`, devolvendo as entradas bem-formadas. */
20
- function readManifest(path) {
21
- let parsed;
22
- try {
23
- parsed = JSON.parse(readFileSync(path, 'utf-8'));
24
- }
25
- catch {
26
- return [];
27
- }
28
- const list = parsed?.hooks;
29
- if (!Array.isArray(list))
30
- return [];
31
- const out = [];
32
- for (const raw of list) {
33
- if (!raw || typeof raw !== 'object')
34
- continue;
35
- const e = raw;
36
- if (typeof e.event !== 'string' || typeof e.script !== 'string')
37
- continue;
38
- out.push({
39
- id: typeof e.id === 'number' ? e.id : undefined,
40
- event: e.event,
41
- matcher: typeof e.matcher === 'string' ? e.matcher : undefined,
42
- description: typeof e.description === 'string' ? e.description : undefined,
43
- script: e.script,
44
- clients: Array.isArray(e.clients)
45
- ? e.clients.filter((c) => typeof c === 'string')
46
- : undefined,
47
- });
48
- }
49
- return out;
50
- }
51
- /**
52
- * Descobre e resolve os hooks aplicáveis: lê `hooks/hooks.json` (flat), filtra por
53
- * cliente (`clients`), e devolve as entradas com o script de origem. Hooks são de
54
- * código → só entram se a seleção incluir o role `dev` (ou sem seleção).
55
- */
56
- function collectHooks(dir, surface, selection) {
57
- if (selection && !selection.roles.includes(DEV_ROLE))
58
- return [];
59
- const hooksRoot = join(dir, 'hooks');
60
- const manifestPath = join(hooksRoot, 'hooks.json');
61
- if (!existsSync(manifestPath))
62
- return [];
63
- const out = [];
64
- for (const entry of readManifest(manifestPath)) {
65
- if (entry.clients && !entry.clients.includes(surface))
66
- continue;
67
- const srcAbs = join(hooksRoot, entry.script);
68
- if (!existsSync(srcAbs))
69
- continue;
70
- out.push({
71
- id: entry.id ?? null,
72
- event: entry.event,
73
- matcher: entry.matcher,
74
- description: entry.description,
75
- script: entry.script,
76
- srcAbs,
77
- });
78
- }
79
- return out;
80
- }
81
- /** Uma entrada de comando é "nossa" se aponta pro namespace `hooks/noclaf/`. */
82
- function isOurs(hook) {
83
- const cmd = hook?.command;
84
- return typeof cmd === 'string' && cmd.includes(`${HOOKS_NS}/`);
85
- }
86
- /**
87
- * Remove todas as entradas do noclaf de um bloco de `hooks` do settings, deixando
88
- * intactas as do usuário. Devolve o bloco limpo (eventos/grupos vazios removidos).
89
- */
90
- function stripOurs(hooksCfg) {
91
- const clean = {};
92
- for (const [event, groups] of Object.entries(hooksCfg)) {
93
- if (!Array.isArray(groups))
94
- continue;
95
- const keptGroups = [];
96
- for (const group of groups) {
97
- const list = Array.isArray(group?.hooks) ? group.hooks : [];
98
- const kept = list.filter((h) => !isOurs(h));
99
- if (kept.length > 0)
100
- keptGroups.push({ ...group, hooks: kept });
101
- }
102
- if (keptGroups.length > 0)
103
- clean[event] = keptGroups;
104
- }
105
- return clean;
106
- }
107
- /** Remove recursivamente arquivos órfãos sob o namespace, exceto os recém-escritos. */
108
- function pruneScripts(scriptsDir, keep, dryRun, pruned) {
109
- if (!existsSync(scriptsDir))
110
- return;
111
- const walk = (abs) => {
112
- for (const entry of readdirSync(abs, { withFileTypes: true })) {
113
- const childAbs = join(abs, entry.name);
114
- if (entry.isDirectory()) {
115
- walk(childAbs);
116
- try {
117
- if (readdirSync(childAbs).length === 0 && !dryRun)
118
- rmSync(childAbs, { recursive: true });
119
- }
120
- catch {
121
- /* ignore */
122
- }
123
- }
124
- else if (entry.isFile()) {
125
- if (!keep.has(childAbs)) {
126
- if (!dryRun)
127
- rmSync(childAbs);
128
- pruned.push(childAbs);
129
- }
130
- }
131
- }
132
- };
133
- walk(scriptsDir);
134
- }
135
- /**
136
- * Provisiona os hooks do noclaf no Claude Code. Idempotente e não-destrutivo.
137
- * No-op (installed vazio) se o pacote não tem `hooks/` ou nada casa a seleção.
138
- */
139
- export function provisionHooks(options = {}) {
140
- const dryRun = options.dryRun ?? false;
141
- const dir = options.skillsDir ?? skillsDir();
142
- const targetDir = options.targetDir ?? defaultTargetDir();
143
- const surface = options.surface ?? 'claude-code';
144
- const settingsPath = join(targetDir, 'settings.json');
145
- const scriptsDir = join(targetDir, HOOKS_NS);
146
- const resolved = collectHooks(dir, surface, options.selection);
147
- const writtenScripts = new Set();
148
- const installed = [];
149
- for (const h of resolved) {
150
- const destAbs = join(scriptsDir, h.script);
151
- if (!dryRun) {
152
- ensureDir(scriptsDir);
153
- copyFileSync(h.srcAbs, destAbs);
154
- }
155
- writtenScripts.add(destAbs);
156
- installed.push({
157
- event: h.event,
158
- matcher: h.matcher,
159
- script: h.script,
160
- description: h.description,
161
- });
162
- }
163
- const prunedScripts = [];
164
- pruneScripts(scriptsDir, writtenScripts, dryRun, prunedScripts);
165
- // Merge no settings.json: tira as nossas entradas antigas, re-adiciona as atuais.
166
- const settings = readJson(settingsPath) ?? {};
167
- const currentHooks = settings.hooks ?? {};
168
- const merged = stripOurs(currentHooks);
169
- for (const h of resolved) {
170
- const commandPath = join(scriptsDir, h.script).split('\\').join('/');
171
- const ourHook = { type: 'command', command: `python3 "${commandPath}"` };
172
- const groups = merged[h.event] ?? (merged[h.event] = []);
173
- let group = groups.find((g) => g.matcher === h.matcher);
174
- if (!group) {
175
- group = h.matcher !== undefined ? { matcher: h.matcher, hooks: [] } : { hooks: [] };
176
- groups.push(group);
177
- }
178
- group.hooks.push(ourHook);
179
- }
180
- if (!dryRun) {
181
- if (Object.keys(merged).length > 0) {
182
- settings.hooks = merged;
183
- }
184
- else {
185
- delete settings.hooks;
186
- }
187
- writeJson(settingsPath, settings);
188
- }
189
- return { settingsPath, scriptsDir, dryRun, installed, prunedScripts };
190
- }
191
- /** Remove tudo que o noclaf instalou de hooks (scripts + entradas do settings). */
192
- export function uninstallHooks(options = {}) {
193
- const dryRun = options.dryRun ?? false;
194
- const targetDir = options.targetDir ?? defaultTargetDir();
195
- const settingsPath = join(targetDir, 'settings.json');
196
- const scriptsDir = join(targetDir, HOOKS_NS);
197
- const removedScripts = [];
198
- if (existsSync(scriptsDir)) {
199
- if (!dryRun)
200
- rmSync(scriptsDir, { recursive: true, force: true });
201
- removedScripts.push(scriptsDir);
202
- }
203
- const settings = readJson(settingsPath);
204
- if (settings && settings.hooks) {
205
- const merged = stripOurs(settings.hooks);
206
- if (!dryRun) {
207
- if (Object.keys(merged).length > 0)
208
- settings.hooks = merged;
209
- else
210
- delete settings.hooks;
211
- writeJson(settingsPath, settings);
212
- }
213
- }
214
- return { settingsPath, removedScripts, dryRun };
215
- }
216
- //# sourceMappingURL=hooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { runSkillAgent, skillPrompt } from './skill-agent.js';
4
- /**
5
- * Patterns do harness — a parte que **precisa de IA**. O CLI não raciocina sobre o
6
- * código, então dispara um agente **headless** (`claude -p` / `codex exec`), com
7
- * consentimento, pra analisar o repo e escrever `docs/_patterns.md`. Best-effort.
8
- */
9
- export const PATTERNS_REL = 'docs/_patterns.md';
10
- export function patternsPath(cwd) {
11
- return join(cwd, PATTERNS_REL);
12
- }
13
- export function patternsExist(cwd) {
14
- return existsSync(patternsPath(cwd));
15
- }
16
- /** Prompt da análise: corpo da skill `detect-patterns` (fonte única) ou fallback embutido. */
17
- const FALLBACK_PROMPT = `Analise ESTE repositório e escreva \`${PATTERNS_REL}\` (arquivo único, sobrescreva se existir) com os PADRÕES REAIS já usados no código: estrutura de pastas/camadas, convenções de naming, stack/libs e como são usadas, e padrões de estado/dados/erros/testes. Baseie-se SÓ no que existe — não invente nem recomende. Seja conciso (poucas dezenas de linhas): é contexto pra outros agentes, não pode inflar. Não toque em nenhum outro arquivo.`;
18
- /**
19
- * Roda a análise de patterns headless no `cwd` — saída do agente no stdout, como
20
- * sempre (é o `sync` interativo que chama). Nunca lança.
21
- */
22
- export function runPatternsAnalysis(cwd) {
23
- return runSkillAgent(skillPrompt('detect-patterns', FALLBACK_PROMPT), { cwd });
24
- }
25
- //# sourceMappingURL=patterns.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/lib/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAEjF;;;;GAIG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEhD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,8FAA8F;AAC9F,MAAM,eAAe,GAAG,wCAAwC,YAAY,mYAAmY,CAAC;AAIhd;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,aAAa,CAAC,WAAW,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AACjF,CAAC"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Tradução de erro de constraint do Postgres em mensagem acionável.
3
- *
4
- * Quando uma invariante do banco barra a escrita, o driver devolve o nome
5
- * interno da constraint (`violates check constraint "tasks_sprint_requires_end_date"`),
6
- * que não diz ao cliente MCP o que fazer. A tradução aqui é por *classe* de
7
- * constraint — nada de caso especial por nome, senão vira um `if` por invariante
8
- * do banco.
9
- */
10
- /** `tasks_sprint_requires_end_date` (tabela `tasks`) → `sprint requires end date`. Pura. */
11
- function humanizeConstraint(name, table) {
12
- const withoutTable = table && name.startsWith(`${table}_`) ? name.slice(table.length + 1) : name;
13
- return withoutTable.replace(/_(check|key|fkey|excl)$/, '').replace(/_/g, ' ').trim();
14
- }
15
- const RULES = [
16
- {
17
- re: /(?:new row for relation|insert or update on table) "([^"]+)" violates check constraint "([^"]+)"/i,
18
- text: (m) => `os dados enviados quebram a regra "${humanizeConstraint(m[2], m[1])}" da tabela ${m[1]} — ` +
19
- 'preencha/ajuste os campos que a regra cita e repita',
20
- },
21
- {
22
- re: /duplicate key value violates unique constraint "([^"]+)"/i,
23
- text: (m) => `já existe um registro com esses valores (regra "${humanizeConstraint(m[1])}") — ` +
24
- 'use o registro existente ou mude o valor duplicado',
25
- },
26
- {
27
- re: /(?:insert or update on table|update or delete on table) "([^"]+)" violates foreign key constraint "([^"]+)"/i,
28
- text: (m) => `referência inválida em ${m[1]} (regra "${humanizeConstraint(m[2], m[1])}") — ` +
29
- 'o registro apontado não existe ou ainda tem dependentes',
30
- },
31
- {
32
- re: /null value in column "([^"]+)" of relation "([^"]+)" violates not-null constraint/i,
33
- text: (m) => `o campo obrigatório "${m[1]}" de ${m[2]} veio vazio — preencha antes de repetir`,
34
- },
35
- {
36
- re: /new row violates row-level security policy(?: for table "[^"]+")?/i,
37
- text: () => 'sem permissão pra essa ação (seu papel não permite escrever aqui)',
38
- },
39
- ];
40
- /**
41
- * Reescreve o trecho cru do Postgres dentro da mensagem, preservando o resto
42
- * (o prefixo que a gateway pôs: "Erro ao criar tarefa: ..."). Mensagem sem
43
- * erro de constraint passa intacta. Pura.
44
- */
45
- export function humanizePgError(message) {
46
- for (const rule of RULES) {
47
- const m = message.match(rule.re);
48
- if (m)
49
- return message.replace(rule.re, () => rule.text(m));
50
- }
51
- return message;
52
- }
53
- //# sourceMappingURL=pg-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pg-error.js","sourceRoot":"","sources":["../../src/lib/pg-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,4FAA4F;AAC5F,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAc;IACtD,MAAM,YAAY,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,OAAO,YAAY,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,KAAK,GAA4D;IACrE;QACE,EAAE,EAAE,mGAAmG;QACvG,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACV,sCAAsC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK;YAC5F,qDAAqD;KACxD;IACD;QACE,EAAE,EAAE,2DAA2D;QAC/D,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACV,mDAAmD,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;YAClF,oDAAoD;KACvD;IACD;QACE,EAAE,EAAE,8GAA8G;QAClH,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACV,0BAA0B,CAAC,CAAC,CAAC,CAAC,YAAY,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;YAC/E,yDAAyD;KAC5D;IACD;QACE,EAAE,EAAE,oFAAoF;QACxF,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,yCAAyC;KAC/F;IACD;QACE,EAAE,EAAE,oEAAoE;QACxE,IAAI,EAAE,GAAG,EAAE,CAAC,mEAAmE;KAChF;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,117 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
3
- import { dirname, join } from 'node:path';
4
- import { PLAN_ENGINE, engineArgs, engineMissingError, resolveEngineBin, } from './exec-engines.js';
5
- /** Semente pré-SDD: estrutura mínima pro engine preencher na primeira rodada. */
6
- export const PLAN_TEMPLATE = [
7
- '# Plano',
8
- '',
9
- '## Contexto',
10
- '',
11
- '## Problema',
12
- '',
13
- '## Solução',
14
- '',
15
- '## Escopo',
16
- '',
17
- '### Fora de escopo',
18
- '',
19
- '## Decisões',
20
- '',
21
- '## Tarefas',
22
- '',
23
- ].join('\n');
24
- /** Consolidação sob `.noclaf/` — o plano mora junto de history e checkpoints. */
25
- export function planPath(project) {
26
- return join(project, '.noclaf', 'plan.md');
27
- }
28
- /** Compat: plano antigo na raiz vira `.noclaf/plan.md` — ninguém perde plano em andamento. */
29
- export function migrateLegacyPlan(project) {
30
- const target = planPath(project);
31
- const legacy = join(project, 'plan.md');
32
- if (existsSync(target) || !existsSync(legacy))
33
- return;
34
- mkdirSync(dirname(target), { recursive: true });
35
- renameSync(legacy, target);
36
- }
37
- /** Base do refino: conteúdo atual do `plan.md`, ou o template quando ainda não existe. */
38
- export function planBase(project) {
39
- try {
40
- const current = readFileSync(planPath(project), 'utf8');
41
- return current.trim() ? current : PLAN_TEMPLATE;
42
- }
43
- catch {
44
- return PLAN_TEMPLATE;
45
- }
46
- }
47
- /** Preâmbulo de planejamento: ancora no harness e proíbe explicitamente escrever código. */
48
- export function buildPlanPrompt(instruction, base) {
49
- return [
50
- 'Você está RASCUNHANDO/REFINANDO um plano — não implemente nada.',
51
- 'Antes: leia AGENTS.md e docs/_rules/noclaf.md deste projeto e respeite o harness.',
52
- 'NÃO escreva código, NÃO edite arquivos, NÃO rode comandos.',
53
- 'Parta do plano atual abaixo e refine-o à luz da instrução; não descarte raciocínio já feito.',
54
- 'Responda APENAS com o markdown final do plan.md, sem cercas de código e sem comentários.',
55
- '',
56
- `## Instrução`,
57
- instruction,
58
- '',
59
- '## Plano atual',
60
- base,
61
- ].join('\n');
62
- }
63
- /** O engine às vezes embrulha a resposta em ```markdown — o arquivo não quer a cerca. */
64
- export function stripFence(text) {
65
- const t = text.trim();
66
- const m = /^```[a-zA-Z]*\n([\s\S]*?)\n?```$/.exec(t);
67
- return (m ? m[1] : t).trim();
68
- }
69
- /** Write-then-rename: o plano anterior sobrevive até a escrita concluir. */
70
- function writeAtomic(project, content) {
71
- const target = planPath(project);
72
- const tmp = `${target}.tmp`;
73
- mkdirSync(dirname(target), { recursive: true });
74
- writeFileSync(tmp, `${content}\n`, 'utf8');
75
- renameSync(tmp, target);
76
- return target;
77
- }
78
- function spawnPlan(bin, engine, prompt, project, echo) {
79
- return new Promise((resolve) => {
80
- const child = spawn(bin, engineArgs(engine, prompt), {
81
- cwd: project,
82
- stdio: ['ignore', 'pipe', 'pipe'],
83
- });
84
- let markdown = '';
85
- child.stdout.on('data', (d) => (markdown += d.toString()));
86
- child.stderr.on('data', (d) => echo && process.stderr.write(d.toString()));
87
- const fail = (error) => {
88
- resolve({ ok: false, path: planPath(project), engine, error });
89
- };
90
- child.on('error', (e) => fail(e.message));
91
- child.on('close', (code) => {
92
- if (code !== 0)
93
- return fail(`engine ${engine} falhou (exit ${code})`);
94
- const content = stripFence(markdown);
95
- if (!content)
96
- return fail(`engine ${engine} não devolveu markdown`);
97
- resolve({ ok: true, path: writeAtomic(project, content), engine });
98
- });
99
- });
100
- }
101
- /** Bloqueante: roda o engine pensante e escreve o `plan.md`. `echo` streama log no stderr. */
102
- export function runPlan(opts) {
103
- const engine = opts.engine ?? PLAN_ENGINE;
104
- const bin = resolveEngineBin(engine);
105
- if (!bin) {
106
- return Promise.resolve({
107
- ok: false,
108
- path: planPath(opts.project),
109
- engine,
110
- error: engineMissingError(engine),
111
- });
112
- }
113
- migrateLegacyPlan(opts.project);
114
- const prompt = buildPlanPrompt(opts.instruction, planBase(opts.project));
115
- return spawnPlan(bin, engine, prompt, opts.project, opts.echo === true);
116
- }
117
- //# sourceMappingURL=plan-delegate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan-delegate.js","sourceRoot":"","sources":["../../src/lib/plan-delegate.ts"],"names":[],"mappings":"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"}
@@ -1,151 +0,0 @@
1
- import { brand } from '../brand.js';
2
- /**
3
- * Erro com mensagem em pt-BR pronta pra mostrar ao usuário.
4
- * Wrappers (tool MCP, CLI) só precisam pegar `.message`.
5
- */
6
- export class ProjectContextError extends Error {
7
- }
8
- /**
9
- * Texto de "Sobre o projeto" pro harness (`AGENTS.md`), montado do `ai_context` do NOS —
10
- * projeto + cada repo que tenha contexto. Determinístico (não usa LLM). `''` se nada.
11
- */
12
- export function buildProjectOverview(ctx) {
13
- const parts = [];
14
- if (ctx.project.ai_context?.trim())
15
- parts.push(ctx.project.ai_context.trim());
16
- // Escopo pelo **repositório atribuído** (`repository_id`) quando há um selecionado — o
17
- // harness vive dentro dele. Sem repo (binding no projeto) → todos, pra orquestração.
18
- const repos = ctx.current_repository ? [ctx.current_repository] : ctx.repositories;
19
- for (const r of repos) {
20
- if (r.ai_context?.trim())
21
- parts.push(`### ${r.name}\n\n${r.ai_context.trim()}`);
22
- }
23
- return parts.join('\n\n');
24
- }
25
- /**
26
- * Projetos **ativos em que o usuário é membro** (`project_members`). Duas queries
27
- * (memberships → projetos) pra tipagem limpa e independente de RLS: mesmo que o
28
- * usuário seja admin e o RLS deixe ver tudo, aqui recortamos pra atribuição real.
29
- */
30
- export async function listMemberProjects(supabase, userId) {
31
- const membersRes = await supabase
32
- .from('project_members')
33
- .select('project_id')
34
- .eq('user_id', userId);
35
- if (membersRes.error) {
36
- throw new ProjectContextError(`Erro ao listar suas atribuições: ${membersRes.error.message}`);
37
- }
38
- const ids = [...new Set((membersRes.data ?? []).map((r) => r.project_id))];
39
- if (ids.length === 0)
40
- return [];
41
- const projectsRes = await supabase
42
- .from('projects')
43
- .select('id, name')
44
- .eq('is_active', true)
45
- .in('id', ids)
46
- .order('name');
47
- if (projectsRes.error) {
48
- throw new ProjectContextError(`Erro ao listar projetos: ${projectsRes.error.message}`);
49
- }
50
- return (projectsRes.data ?? []).map((p) => ({ id: p.id, name: p.name }));
51
- }
52
- export async function fetchProjectContext(supabase, config, user) {
53
- const projectId = config.project_id;
54
- const [projectRes, reposRes, sprintRes, membersRes] = await Promise.all([
55
- supabase
56
- .from('projects')
57
- .select('id, name, color, monthly_hours, notes, ai_context')
58
- .eq('id', projectId)
59
- .maybeSingle(),
60
- supabase
61
- .from('repositories')
62
- .select('id, project_id, name, url, default_branch, ai_context')
63
- .eq('project_id', projectId)
64
- .order('name'),
65
- supabase
66
- .from('sprints')
67
- .select('id, name, start_date, end_date')
68
- .eq('project_id', projectId)
69
- .eq('status', 'ativa')
70
- .maybeSingle(),
71
- supabase
72
- .from('project_members')
73
- .select('user_id, profiles:profiles!inner(id, full_name, username, avatar_url)')
74
- .eq('project_id', projectId),
75
- ]);
76
- if (projectRes.error) {
77
- throw new ProjectContextError(`Erro ao buscar projeto: ${projectRes.error.message}`);
78
- }
79
- if (!projectRes.data) {
80
- throw new ProjectContextError(`Projeto ${projectId} não encontrado ou você não tem acesso. Rode \`${brand.name} init\` pra revincular.`);
81
- }
82
- if (reposRes.error) {
83
- throw new ProjectContextError(`Erro ao buscar repositórios: ${reposRes.error.message}`);
84
- }
85
- if (sprintRes.error) {
86
- throw new ProjectContextError(`Erro ao buscar sprint ativa: ${sprintRes.error.message}`);
87
- }
88
- if (membersRes.error) {
89
- throw new ProjectContextError(`Erro ao buscar membros: ${membersRes.error.message}`);
90
- }
91
- const project = projectRes.data;
92
- const allRepos = reposRes.data ?? [];
93
- const sprint = sprintRes.data;
94
- const memberRows = (membersRes.data ?? []);
95
- let currentRepository = null;
96
- if (config.repository_id) {
97
- const match = allRepos.find((r) => r.id === config.repository_id);
98
- if (match) {
99
- currentRepository = {
100
- id: match.id,
101
- name: match.name,
102
- url: match.url,
103
- default_branch: match.default_branch,
104
- ai_context: match.ai_context,
105
- };
106
- }
107
- }
108
- const members = memberRows.map((row) => {
109
- const profile = Array.isArray(row.profiles) ? row.profiles[0] : row.profiles;
110
- return {
111
- user_id: row.user_id,
112
- full_name: profile?.full_name ?? null,
113
- username: profile?.username ?? null,
114
- avatar_url: profile?.avatar_url ?? null,
115
- };
116
- });
117
- return {
118
- project: {
119
- id: project.id,
120
- name: project.name,
121
- color: project.color,
122
- monthly_hours: project.monthly_hours,
123
- notes: project.notes,
124
- ai_context: project.ai_context,
125
- },
126
- current_repository: currentRepository,
127
- repositories: allRepos.map((r) => ({
128
- id: r.id,
129
- name: r.name,
130
- url: r.url,
131
- default_branch: r.default_branch,
132
- ai_context: r.ai_context,
133
- })),
134
- active_sprint: sprint
135
- ? {
136
- id: sprint.id,
137
- name: sprint.name,
138
- start_date: sprint.start_date,
139
- end_date: sprint.end_date,
140
- }
141
- : null,
142
- members,
143
- current_user: {
144
- id: user.id,
145
- email: user.email,
146
- full_name: user.full_name,
147
- username: user.username,
148
- },
149
- };
150
- }
151
- //# sourceMappingURL=project-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../src/lib/project-context.ts"],"names":[],"mappings":"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"}