@noclaf/cli 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/README.md +26 -88
  2. package/dist/app.js +13 -0
  3. package/dist/app.js.map +1 -0
  4. package/dist/brand.js +9 -49
  5. package/dist/brand.js.map +1 -1
  6. package/dist/cli.js +3 -37
  7. package/dist/cli.js.map +1 -1
  8. package/dist/mcp-server.js +3 -187
  9. package/dist/mcp-server.js.map +1 -1
  10. package/package.json +8 -17
  11. package/dist/adapters/supabase/allocation-gateway.js +0 -291
  12. package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
  13. package/dist/adapters/supabase/analytics-gateway.js +0 -18
  14. package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
  15. package/dist/adapters/supabase/calendar-gateway.js +0 -48
  16. package/dist/adapters/supabase/calendar-gateway.js.map +0 -1
  17. package/dist/adapters/supabase/calendar-write-gateway.js +0 -35
  18. package/dist/adapters/supabase/calendar-write-gateway.js.map +0 -1
  19. package/dist/adapters/supabase/checklist-gateway.js +0 -63
  20. package/dist/adapters/supabase/checklist-gateway.js.map +0 -1
  21. package/dist/adapters/supabase/client.js +0 -136
  22. package/dist/adapters/supabase/client.js.map +0 -1
  23. package/dist/adapters/supabase/context-gateway.js +0 -23
  24. package/dist/adapters/supabase/context-gateway.js.map +0 -1
  25. package/dist/adapters/supabase/gateway.js +0 -28
  26. package/dist/adapters/supabase/gateway.js.map +0 -1
  27. package/dist/adapters/supabase/release-gateway.js +0 -61
  28. package/dist/adapters/supabase/release-gateway.js.map +0 -1
  29. package/dist/adapters/supabase/sprint-gateway.js +0 -59
  30. package/dist/adapters/supabase/sprint-gateway.js.map +0 -1
  31. package/dist/adapters/supabase/task-gateway.js +0 -533
  32. package/dist/adapters/supabase/task-gateway.js.map +0 -1
  33. package/dist/auth.js +0 -141
  34. package/dist/auth.js.map +0 -1
  35. package/dist/cli/commands/auth.js +0 -127
  36. package/dist/cli/commands/auth.js.map +0 -1
  37. package/dist/cli/commands/clean.js +0 -120
  38. package/dist/cli/commands/clean.js.map +0 -1
  39. package/dist/cli/commands/completion.js +0 -114
  40. package/dist/cli/commands/completion.js.map +0 -1
  41. package/dist/cli/commands/exec.js +0 -69
  42. package/dist/cli/commands/exec.js.map +0 -1
  43. package/dist/cli/commands/init/analyze-step.js +0 -21
  44. package/dist/cli/commands/init/analyze-step.js.map +0 -1
  45. package/dist/cli/commands/init/apply-answers.js +0 -122
  46. package/dist/cli/commands/init/apply-answers.js.map +0 -1
  47. package/dist/cli/commands/init/apply-step.js +0 -165
  48. package/dist/cli/commands/init/apply-step.js.map +0 -1
  49. package/dist/cli/commands/init/auth-step.js +0 -48
  50. package/dist/cli/commands/init/auth-step.js.map +0 -1
  51. package/dist/cli/commands/init/boilerplate-step.js +0 -20
  52. package/dist/cli/commands/init/boilerplate-step.js.map +0 -1
  53. package/dist/cli/commands/init/clients-step.js +0 -78
  54. package/dist/cli/commands/init/clients-step.js.map +0 -1
  55. package/dist/cli/commands/init/context-step.js +0 -81
  56. package/dist/cli/commands/init/context-step.js.map +0 -1
  57. package/dist/cli/commands/init/describe-step.js +0 -68
  58. package/dist/cli/commands/init/describe-step.js.map +0 -1
  59. package/dist/cli/commands/init/index.js +0 -98
  60. package/dist/cli/commands/init/index.js.map +0 -1
  61. package/dist/cli/commands/init/mode.js +0 -18
  62. package/dist/cli/commands/init/mode.js.map +0 -1
  63. package/dist/cli/commands/init/progress.js +0 -60
  64. package/dist/cli/commands/init/progress.js.map +0 -1
  65. package/dist/cli/commands/init/project-step.js +0 -133
  66. package/dist/cli/commands/init/project-step.js.map +0 -1
  67. package/dist/cli/commands/init/provision-step.js +0 -103
  68. package/dist/cli/commands/init/provision-step.js.map +0 -1
  69. package/dist/cli/commands/map.js +0 -18
  70. package/dist/cli/commands/map.js.map +0 -1
  71. package/dist/cli/commands/plan.js +0 -45
  72. package/dist/cli/commands/plan.js.map +0 -1
  73. package/dist/cli/commands/skills.js +0 -23
  74. package/dist/cli/commands/skills.js.map +0 -1
  75. package/dist/cli/commands/sync.js +0 -319
  76. package/dist/cli/commands/sync.js.map +0 -1
  77. package/dist/cli/commands/validate-plan.js +0 -42
  78. package/dist/cli/commands/validate-plan.js.map +0 -1
  79. package/dist/cli/commands/wave.js +0 -57
  80. package/dist/cli/commands/wave.js.map +0 -1
  81. package/dist/cli/copy/auth.json +0 -6
  82. package/dist/cli/copy/flows.json +0 -6
  83. package/dist/cli/copy/init.json +0 -20
  84. package/dist/cli/copy/sync.json +0 -3
  85. package/dist/cli/copy.js +0 -23
  86. package/dist/cli/copy.js.map +0 -1
  87. package/dist/cli/flows/clients.js +0 -130
  88. package/dist/cli/flows/clients.js.map +0 -1
  89. package/dist/cli/flows/completion.js +0 -63
  90. package/dist/cli/flows/completion.js.map +0 -1
  91. package/dist/cli/flows/dependencies.js +0 -114
  92. package/dist/cli/flows/dependencies.js.map +0 -1
  93. package/dist/cli/flows/sections.js +0 -85
  94. package/dist/cli/flows/sections.js.map +0 -1
  95. package/dist/cli/flows/user-config.js +0 -37
  96. package/dist/cli/flows/user-config.js.map +0 -1
  97. package/dist/cli/ui/render.js +0 -239
  98. package/dist/cli/ui/render.js.map +0 -1
  99. package/dist/cli/ui/report.js +0 -130
  100. package/dist/cli/ui/report.js.map +0 -1
  101. package/dist/config.js +0 -289
  102. package/dist/config.js.map +0 -1
  103. package/dist/constants.js +0 -9
  104. package/dist/constants.js.map +0 -1
  105. package/dist/core/ports.js +0 -2
  106. package/dist/core/ports.js.map +0 -1
  107. package/dist/core/types.js +0 -5
  108. package/dist/core/types.js.map +0 -1
  109. package/dist/database.types.js +0 -11
  110. package/dist/database.types.js.map +0 -1
  111. package/dist/lib/active-project.js +0 -28
  112. package/dist/lib/active-project.js.map +0 -1
  113. package/dist/lib/autopull.js +0 -13
  114. package/dist/lib/autopull.js.map +0 -1
  115. package/dist/lib/boilerplate-scaffold.js +0 -65
  116. package/dist/lib/boilerplate-scaffold.js.map +0 -1
  117. package/dist/lib/boilerplates.js +0 -61
  118. package/dist/lib/boilerplates.js.map +0 -1
  119. package/dist/lib/calendar-logic.js +0 -59
  120. package/dist/lib/calendar-logic.js.map +0 -1
  121. package/dist/lib/calendar-write-logic.js +0 -6
  122. package/dist/lib/calendar-write-logic.js.map +0 -1
  123. package/dist/lib/checklist-logic.js +0 -5
  124. package/dist/lib/checklist-logic.js.map +0 -1
  125. package/dist/lib/client-configs.js +0 -191
  126. package/dist/lib/client-configs.js.map +0 -1
  127. package/dist/lib/client-install.js +0 -40
  128. package/dist/lib/client-install.js.map +0 -1
  129. package/dist/lib/colors.js +0 -92
  130. package/dist/lib/colors.js.map +0 -1
  131. package/dist/lib/cowork-extension.js +0 -143
  132. package/dist/lib/cowork-extension.js.map +0 -1
  133. package/dist/lib/dates.js +0 -21
  134. package/dist/lib/dates.js.map +0 -1
  135. package/dist/lib/dependencies.js +0 -145
  136. package/dist/lib/dependencies.js.map +0 -1
  137. package/dist/lib/dependency-install.js +0 -163
  138. package/dist/lib/dependency-install.js.map +0 -1
  139. package/dist/lib/duration.js +0 -5
  140. package/dist/lib/duration.js.map +0 -1
  141. package/dist/lib/exec-delegate.js +0 -218
  142. package/dist/lib/exec-delegate.js.map +0 -1
  143. package/dist/lib/exec-engines.js +0 -90
  144. package/dist/lib/exec-engines.js.map +0 -1
  145. package/dist/lib/exec-events.js +0 -87
  146. package/dist/lib/exec-events.js.map +0 -1
  147. package/dist/lib/exec-translators.js +0 -198
  148. package/dist/lib/exec-translators.js.map +0 -1
  149. package/dist/lib/file-merge.js +0 -33
  150. package/dist/lib/file-merge.js.map +0 -1
  151. package/dist/lib/git-exposure.js +0 -35
  152. package/dist/lib/git-exposure.js.map +0 -1
  153. package/dist/lib/harness.js +0 -127
  154. package/dist/lib/harness.js.map +0 -1
  155. package/dist/lib/hooks.js +0 -216
  156. package/dist/lib/hooks.js.map +0 -1
  157. package/dist/lib/patterns.js +0 -25
  158. package/dist/lib/patterns.js.map +0 -1
  159. package/dist/lib/pg-error.js +0 -53
  160. package/dist/lib/pg-error.js.map +0 -1
  161. package/dist/lib/plan-delegate.js +0 -117
  162. package/dist/lib/plan-delegate.js.map +0 -1
  163. package/dist/lib/project-context.js +0 -151
  164. package/dist/lib/project-context.js.map +0 -1
  165. package/dist/lib/prompts.js +0 -69
  166. package/dist/lib/prompts.js.map +0 -1
  167. package/dist/lib/provision-apply.js +0 -220
  168. package/dist/lib/provision-apply.js.map +0 -1
  169. package/dist/lib/provision-collect.js +0 -47
  170. package/dist/lib/provision-collect.js.map +0 -1
  171. package/dist/lib/provision.js +0 -45
  172. package/dist/lib/provision.js.map +0 -1
  173. package/dist/lib/release-logic.js +0 -10
  174. package/dist/lib/release-logic.js.map +0 -1
  175. package/dist/lib/repo-map.js +0 -176
  176. package/dist/lib/repo-map.js.map +0 -1
  177. package/dist/lib/require-config.js +0 -32
  178. package/dist/lib/require-config.js.map +0 -1
  179. package/dist/lib/rules.js +0 -146
  180. package/dist/lib/rules.js.map +0 -1
  181. package/dist/lib/sections.js +0 -89
  182. package/dist/lib/sections.js.map +0 -1
  183. package/dist/lib/skill-agent.js +0 -44
  184. package/dist/lib/skill-agent.js.map +0 -1
  185. package/dist/lib/skill-serve.js +0 -128
  186. package/dist/lib/skill-serve.js.map +0 -1
  187. package/dist/lib/skills-cache.js +0 -99
  188. package/dist/lib/skills-cache.js.map +0 -1
  189. package/dist/lib/skills.js +0 -237
  190. package/dist/lib/skills.js.map +0 -1
  191. package/dist/lib/sprint-deadline.js +0 -28
  192. package/dist/lib/sprint-deadline.js.map +0 -1
  193. package/dist/lib/sprint-logic.js +0 -31
  194. package/dist/lib/sprint-logic.js.map +0 -1
  195. package/dist/lib/targets.js +0 -150
  196. package/dist/lib/targets.js.map +0 -1
  197. package/dist/lib/task-history.js +0 -15
  198. package/dist/lib/task-history.js.map +0 -1
  199. package/dist/lib/telemetry.js +0 -51
  200. package/dist/lib/telemetry.js.map +0 -1
  201. package/dist/lib/tool-result.js +0 -15
  202. package/dist/lib/tool-result.js.map +0 -1
  203. package/dist/lib/validate-plan-delegate.js +0 -106
  204. package/dist/lib/validate-plan-delegate.js.map +0 -1
  205. package/dist/lib/version-check.js +0 -89
  206. package/dist/lib/version-check.js.map +0 -1
  207. package/dist/lib/wave-scheduler.js +0 -95
  208. package/dist/lib/wave-scheduler.js.map +0 -1
  209. package/dist/session-factory.js +0 -19
  210. package/dist/session-factory.js.map +0 -1
  211. package/dist/spinner.js +0 -12
  212. package/dist/spinner.js.map +0 -1
  213. package/dist/tools/activate-sprint.js +0 -44
  214. package/dist/tools/activate-sprint.js.map +0 -1
  215. package/dist/tools/add-checklist-item.js +0 -44
  216. package/dist/tools/add-checklist-item.js.map +0 -1
  217. package/dist/tools/add-checklist.js +0 -63
  218. package/dist/tools/add-checklist.js.map +0 -1
  219. package/dist/tools/add-holiday.js +0 -41
  220. package/dist/tools/add-holiday.js.map +0 -1
  221. package/dist/tools/add-home-office.js +0 -31
  222. package/dist/tools/add-home-office.js.map +0 -1
  223. package/dist/tools/add-vacation.js +0 -39
  224. package/dist/tools/add-vacation.js.map +0 -1
  225. package/dist/tools/attach-pr.js +0 -97
  226. package/dist/tools/attach-pr.js.map +0 -1
  227. package/dist/tools/comment-task.js +0 -72
  228. package/dist/tools/comment-task.js.map +0 -1
  229. package/dist/tools/create-release.js +0 -46
  230. package/dist/tools/create-release.js.map +0 -1
  231. package/dist/tools/create-sprint.js +0 -66
  232. package/dist/tools/create-sprint.js.map +0 -1
  233. package/dist/tools/create-task.js +0 -174
  234. package/dist/tools/create-task.js.map +0 -1
  235. package/dist/tools/delegate-exec.js +0 -63
  236. package/dist/tools/delegate-exec.js.map +0 -1
  237. package/dist/tools/end-allocation.js +0 -38
  238. package/dist/tools/end-allocation.js.map +0 -1
  239. package/dist/tools/end-sprint.js +0 -37
  240. package/dist/tools/end-sprint.js.map +0 -1
  241. package/dist/tools/end-task-allocation.js +0 -60
  242. package/dist/tools/end-task-allocation.js.map +0 -1
  243. package/dist/tools/exec-status.js +0 -45
  244. package/dist/tools/exec-status.js.map +0 -1
  245. package/dist/tools/finalize-release.js +0 -45
  246. package/dist/tools/finalize-release.js.map +0 -1
  247. package/dist/tools/get-active-allocation.js +0 -69
  248. package/dist/tools/get-active-allocation.js.map +0 -1
  249. package/dist/tools/get-calendar.js +0 -40
  250. package/dist/tools/get-calendar.js.map +0 -1
  251. package/dist/tools/get-context.js +0 -48
  252. package/dist/tools/get-context.js.map +0 -1
  253. package/dist/tools/get-sprint.js +0 -38
  254. package/dist/tools/get-sprint.js.map +0 -1
  255. package/dist/tools/get-task.js +0 -146
  256. package/dist/tools/get-task.js.map +0 -1
  257. package/dist/tools/index.js +0 -92
  258. package/dist/tools/index.js.map +0 -1
  259. package/dist/tools/list-my-allocations.js +0 -71
  260. package/dist/tools/list-my-allocations.js.map +0 -1
  261. package/dist/tools/list-projects.js +0 -38
  262. package/dist/tools/list-projects.js.map +0 -1
  263. package/dist/tools/list-releases.js +0 -32
  264. package/dist/tools/list-releases.js.map +0 -1
  265. package/dist/tools/list-sprints.js +0 -30
  266. package/dist/tools/list-sprints.js.map +0 -1
  267. package/dist/tools/list-tasks.js +0 -95
  268. package/dist/tools/list-tasks.js.map +0 -1
  269. package/dist/tools/move-task.js +0 -82
  270. package/dist/tools/move-task.js.map +0 -1
  271. package/dist/tools/plan.js +0 -56
  272. package/dist/tools/plan.js.map +0 -1
  273. package/dist/tools/record-delivery.js +0 -100
  274. package/dist/tools/record-delivery.js.map +0 -1
  275. package/dist/tools/remove-checklist-item.js +0 -42
  276. package/dist/tools/remove-checklist-item.js.map +0 -1
  277. package/dist/tools/remove-checklist.js +0 -42
  278. package/dist/tools/remove-checklist.js.map +0 -1
  279. package/dist/tools/remove-holiday.js +0 -31
  280. package/dist/tools/remove-holiday.js.map +0 -1
  281. package/dist/tools/remove-home-office.js +0 -32
  282. package/dist/tools/remove-home-office.js.map +0 -1
  283. package/dist/tools/remove-vacation.js +0 -31
  284. package/dist/tools/remove-vacation.js.map +0 -1
  285. package/dist/tools/set-project.js +0 -52
  286. package/dist/tools/set-project.js.map +0 -1
  287. package/dist/tools/set-review.js +0 -132
  288. package/dist/tools/set-review.js.map +0 -1
  289. package/dist/tools/sprint-common.js +0 -13
  290. package/dist/tools/sprint-common.js.map +0 -1
  291. package/dist/tools/start-allocation.js +0 -32
  292. package/dist/tools/start-allocation.js.map +0 -1
  293. package/dist/tools/start-task-allocation.js +0 -83
  294. package/dist/tools/start-task-allocation.js.map +0 -1
  295. package/dist/tools/update-checklist-item.js +0 -51
  296. package/dist/tools/update-checklist-item.js.map +0 -1
  297. package/dist/tools/update-release.js +0 -58
  298. package/dist/tools/update-release.js.map +0 -1
  299. package/dist/tools/update-sprint.js +0 -56
  300. package/dist/tools/update-sprint.js.map +0 -1
  301. package/dist/tools/update-task.js +0 -183
  302. package/dist/tools/update-task.js.map +0 -1
  303. package/dist/tools/validate-plan.js +0 -58
  304. package/dist/tools/validate-plan.js.map +0 -1
  305. package/dist/version.js +0 -16
  306. package/dist/version.js.map +0 -1
@@ -1,90 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import { spawnSync } from 'node:child_process';
3
- import { homedir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { envName } from '../brand.js';
6
- import { translateClaude, translateCodex } from './exec-translators.js';
7
- /**
8
- * Registro central dos engines da delegação headless. É o **único** lugar que conhece
9
- * nome de binário, candidatos de PATH, flags e — sob `--events` — como pedir a saída
10
- * estruturada e quem traduz o formato nativo. Adicionar engine = adicionar uma entrada.
11
- */
12
- export const ENGINES = ['codex', 'claude'];
13
- export const DEFAULT_ENGINE = 'codex';
14
- /** Planejar pede raciocínio; executar pede velocidade — daí o default por verbo. */
15
- export const PLAN_ENGINE = 'claude';
16
- // O MCP é spawnado por app GUI, com PATH mínimo — daí a busca em locais conhecidos.
17
- function knownPaths(bin, ...extra) {
18
- return [
19
- join(homedir(), '.local', 'bin', bin),
20
- '/opt/homebrew/bin/' + bin,
21
- '/usr/local/bin/' + bin,
22
- ...extra,
23
- ];
24
- }
25
- const SPECS = {
26
- codex: {
27
- bin: 'codex',
28
- candidates: knownPaths('codex'),
29
- binEnv: envName('CODEX_BIN'),
30
- argsEnv: envName('CODEX_ARGS'),
31
- args: (prompt) => ['exec', '--full-auto', prompt],
32
- structuredArgs: (prompt) => ['exec', '--full-auto', '--json', prompt],
33
- translate: translateCodex,
34
- missing: `codex não encontrado — instale/logue (\`codex login\`) ou defina ${envName('CODEX_BIN')}`,
35
- },
36
- claude: {
37
- bin: 'claude',
38
- candidates: knownPaths('claude', join(homedir(), '.claude', 'local', 'claude')),
39
- binEnv: envName('CLAUDE_BIN'),
40
- argsEnv: envName('CLAUDE_ARGS'),
41
- args: (prompt) => ['-p', prompt, '--permission-mode', 'acceptEdits'],
42
- // `stream-json` com `-p` exige `--verbose`, senão o claude recusa a combinação.
43
- structuredArgs: (prompt) => [
44
- '-p',
45
- prompt,
46
- '--permission-mode',
47
- 'acceptEdits',
48
- '--output-format',
49
- 'stream-json',
50
- '--verbose',
51
- ],
52
- translate: translateClaude,
53
- missing: `claude não encontrado — instale/logue (\`claude login\`) ou defina ${envName('CLAUDE_BIN')}`,
54
- },
55
- };
56
- export function isEngine(value) {
57
- return typeof value === 'string' && ENGINES.includes(value);
58
- }
59
- /** Normaliza o valor pedido; ausente → default do verbo; inválido → `null` (o caller reporta). */
60
- export function parseEngine(value, fallback = DEFAULT_ENGINE) {
61
- if (value === undefined || value === null || value === '')
62
- return fallback;
63
- return isEngine(value) ? value : null;
64
- }
65
- export function engineMissingError(engine) {
66
- return SPECS[engine].missing;
67
- }
68
- /** Args headless do engine; `NOCLAF_<ENGINE>_ARGS` sobrescreve (prompt vai no fim). */
69
- export function engineArgs(engine, prompt, structured = false) {
70
- const spec = SPECS[engine];
71
- const override = process.env[spec.argsEnv];
72
- if (override && override.trim())
73
- return [...override.trim().split(/\s+/), prompt];
74
- return structured ? spec.structuredArgs(prompt) : spec.args(prompt);
75
- }
76
- export function engineTranslator(engine) {
77
- return SPECS[engine].translate;
78
- }
79
- /** Acha o binário: override de env, depois PATH, depois os candidatos conhecidos. */
80
- export function resolveEngineBin(engine) {
81
- const spec = SPECS[engine];
82
- const override = process.env[spec.binEnv];
83
- if (override && existsSync(override))
84
- return override;
85
- const onPath = spawnSync(spec.bin, ['--version'], { stdio: 'ignore' });
86
- if (!onPath.error)
87
- return spec.bin;
88
- return spec.candidates.find((p) => existsSync(p)) ?? null;
89
- }
90
- //# sourceMappingURL=exec-engines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exec-engines.js","sourceRoot":"","sources":["../../src/lib/exec-engines.ts"],"names":[],"mappings":"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"}
@@ -1,87 +0,0 @@
1
- import { spawnSync } from 'node:child_process';
2
- export function formatEvent(event) {
3
- return `${JSON.stringify({ ...event, ts: new Date().toISOString() })}\n`;
4
- }
5
- export function emitEvent(event) {
6
- process.stderr.write(formatEvent(event));
7
- }
8
- /** Junta os chunks e entrega linha por linha — um chunk pode cortar um JSON no meio. */
9
- export function lineSink(onLine) {
10
- let buffer = '';
11
- return {
12
- onData: (chunk) => {
13
- buffer += chunk.toString();
14
- const lines = buffer.split('\n');
15
- buffer = lines.pop() ?? '';
16
- for (const line of lines)
17
- if (line.trim())
18
- onLine(line);
19
- },
20
- flush: () => {
21
- const rest = buffer;
22
- buffer = '';
23
- if (rest.trim())
24
- onLine(rest);
25
- },
26
- };
27
- }
28
- /** Toda falha de tradução (não-JSON, tipo desconhecido, tradutor quebrado) degrada pra `log`. */
29
- export function eventsFromLine(line, translate) {
30
- try {
31
- const events = translate(JSON.parse(line));
32
- if (events)
33
- return events;
34
- }
35
- catch {
36
- /* degrada */
37
- }
38
- return [{ type: 'log', line }];
39
- }
40
- /** stdout do engine em modo estruturado → eventos noclaf; `collect` acumula o texto do agente. */
41
- export function structuredSink(translate, collect) {
42
- const tokens = { input: 0, output: 0, total: 0 };
43
- const sink = lineSink((line) => {
44
- for (const event of eventsFromLine(line, translate)) {
45
- emitEvent(event);
46
- if (event.type === 'message')
47
- collect(`${event.markdown}\n`);
48
- if (event.type !== 'tokens')
49
- continue;
50
- tokens.input += event.input;
51
- tokens.output += event.output;
52
- tokens.total += event.total;
53
- }
54
- });
55
- return { ...sink, tokens };
56
- }
57
- /** stderr do engine: não é estruturado, então cada linha vira `log`. */
58
- export function logSink() {
59
- return lineSink((line) => emitEvent({ type: 'log', line }));
60
- }
61
- /** Contagem medida do diff — a fonte de `added`/`removed`; nenhum engine reporta linhas. */
62
- export function changedStats(worktree) {
63
- const r = spawnSync('git', ['diff', '--numstat', 'HEAD'], { cwd: worktree, encoding: 'utf8' });
64
- return (r.stdout ?? '')
65
- .split('\n')
66
- .map((line) => line.split('\t'))
67
- .filter((cols) => cols.length === 3 && cols[2])
68
- .map(([added, removed, path]) => ({
69
- path: path,
70
- added: Number(added) || 0,
71
- removed: Number(removed) || 0,
72
- }));
73
- }
74
- export function emitRunEvents(checks, changed, state) {
75
- for (const [id, result] of Object.entries(checks)) {
76
- emitEvent({
77
- type: 'check',
78
- id: id,
79
- status: result.ok ? 'pass' : 'fail',
80
- detail: result.ok ? undefined : result.output,
81
- });
82
- }
83
- for (const stat of changed)
84
- emitEvent({ type: 'changed', ...stat });
85
- emitEvent({ type: 'phase', value: state });
86
- }
87
- //# sourceMappingURL=exec-events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exec-events.js","sourceRoot":"","sources":["../../src/lib/exec-events.ts"],"names":[],"mappings":"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"}
@@ -1,198 +0,0 @@
1
- function asRecord(value) {
2
- return typeof value === 'object' && value !== null ? value : null;
3
- }
4
- function text(value) {
5
- return typeof value === 'string' ? value : '';
6
- }
7
- function num(value) {
8
- return typeof value === 'number' && Number.isFinite(value) ? value : 0;
9
- }
10
- /** Usage ausente/zerado é silêncio — a telemetria é aditiva e nunca inventa número. */
11
- function tokens(input, output) {
12
- return input || output ? [{ type: 'tokens', input, output, total: input + output }] : [];
13
- }
14
- // Bloco em branco (o claude emite thinking vazio) não é evento — silêncio em vez de ruído.
15
- function step(value, tool) {
16
- return value.trim() ? [{ type: 'step', text: value, tool }] : [];
17
- }
18
- function message(markdown) {
19
- return markdown.trim() ? [{ type: 'message', markdown }] : [];
20
- }
21
- /** Item do codex que representa "o agente está fazendo algo" → `step` com o rótulo do tool. */
22
- function codexStartedStep(item) {
23
- switch (item.type) {
24
- case 'command_execution':
25
- return step(text(item.command), 'shell');
26
- case 'file_change': {
27
- const changes = Array.isArray(item.changes) ? item.changes : [];
28
- const paths = changes.map((c) => text(asRecord(c)?.path)).filter(Boolean);
29
- return step(paths.join(', '), 'edit');
30
- }
31
- case 'mcp_tool_call':
32
- return step(text(item.tool), text(item.server) || 'mcp');
33
- case 'collab_tool_call':
34
- return step(text(item.tool), 'collab');
35
- case 'web_search':
36
- return step(text(item.query), 'web_search');
37
- // Só chegam como `item.completed`; aqui é silêncio, não desconhecido.
38
- case 'agent_message':
39
- case 'reasoning':
40
- case 'todo_list':
41
- case 'error':
42
- return [];
43
- default:
44
- return null;
45
- }
46
- }
47
- /** Falha de um item com ciclo de vida (comando, tool) vira `error` recuperável. */
48
- function codexItemFailure(item) {
49
- if (item.status !== 'failed')
50
- return [];
51
- const detail = text(asRecord(item.error)?.message) || text(item.aggregated_output);
52
- const label = text(item.command) || text(item.tool) || text(item.type);
53
- return [{ type: 'error', message: detail || `falhou: ${label}`, recoverable: true }];
54
- }
55
- function codexCompletedItem(item) {
56
- switch (item.type) {
57
- case 'agent_message':
58
- return message(text(item.text));
59
- case 'reasoning':
60
- return step(text(item.text));
61
- case 'error':
62
- return [{ type: 'error', message: text(item.message), recoverable: true }];
63
- case 'command_execution':
64
- case 'mcp_tool_call':
65
- case 'collab_tool_call':
66
- case 'file_change':
67
- return codexItemFailure(item);
68
- case 'todo_list':
69
- case 'web_search':
70
- return [];
71
- default:
72
- return null;
73
- }
74
- }
75
- /** `codex exec --json`: envelopes `thread.*`/`turn.*`/`item.*`/`error` em JSONL. */
76
- export function translateCodex(native) {
77
- const event = asRecord(native);
78
- if (!event)
79
- return null;
80
- const item = asRecord(event.item);
81
- switch (event.type) {
82
- case 'thread.started':
83
- case 'turn.started':
84
- case 'item.updated':
85
- return [];
86
- // `cached_input_tokens` do codex é subconjunto de `input_tokens` — somar duplicaria.
87
- case 'turn.completed': {
88
- const usage = asRecord(event.usage);
89
- return usage ? tokens(num(usage.input_tokens), num(usage.output_tokens)) : [];
90
- }
91
- case 'item.started':
92
- return item ? codexStartedStep(item) : null;
93
- case 'item.completed':
94
- return item ? codexCompletedItem(item) : null;
95
- case 'turn.failed':
96
- return [
97
- { type: 'error', message: text(asRecord(event.error)?.message), recoverable: false },
98
- ];
99
- case 'error':
100
- return [{ type: 'error', message: text(event.message), recoverable: true }];
101
- default:
102
- return null;
103
- }
104
- }
105
- /** O rótulo mais informativo que o input do tool oferece, sem inventar. */
106
- function claudeToolLabel(input, name) {
107
- const record = asRecord(input);
108
- if (!record)
109
- return name;
110
- for (const key of ['description', 'command', 'file_path', 'pattern', 'path', 'prompt']) {
111
- const value = text(record[key]);
112
- if (value)
113
- return value;
114
- }
115
- return name;
116
- }
117
- function claudeAssistantBlock(block) {
118
- switch (block.type) {
119
- case 'text':
120
- return message(text(block.text));
121
- case 'thinking':
122
- return step(text(block.thinking));
123
- case 'tool_use': {
124
- const name = text(block.name);
125
- return step(claudeToolLabel(block.input, name), name);
126
- }
127
- default:
128
- return null;
129
- }
130
- }
131
- function claudeBlocks(native, map) {
132
- const content = asRecord(native.message)?.content;
133
- if (!Array.isArray(content))
134
- return null;
135
- const events = [];
136
- for (const raw of content) {
137
- const block = asRecord(raw);
138
- const mapped = block ? map(block) : null;
139
- // Bloco desconhecido degrada sozinho — não descarta os irmãos já traduzidos.
140
- events.push(...(mapped ?? [{ type: 'log', line: JSON.stringify(raw) }]));
141
- }
142
- return events;
143
- }
144
- /** Só o `tool_result` que falhou interessa como evento; o resto é contexto do modelo. */
145
- function claudeUserBlock(block) {
146
- if (block.type !== 'tool_result')
147
- return null;
148
- if (block.is_error !== true)
149
- return [];
150
- const content = block.content;
151
- const message = typeof content === 'string' ? content : JSON.stringify(content);
152
- return [{ type: 'error', message, recoverable: true }];
153
- }
154
- /** No claude o cache é contado à parte de `input_tokens` — o custo real é a soma dos três. */
155
- function claudeUsage(native) {
156
- const usage = asRecord(native.usage);
157
- if (!usage)
158
- return [];
159
- const input = num(usage.input_tokens) +
160
- num(usage.cache_creation_input_tokens) +
161
- num(usage.cache_read_input_tokens);
162
- return tokens(input, num(usage.output_tokens));
163
- }
164
- function claudeResult(native) {
165
- const usage = claudeUsage(native);
166
- if (native.is_error !== true && native.subtype === 'success')
167
- return usage;
168
- return [
169
- ...usage,
170
- {
171
- type: 'error',
172
- code: text(native.subtype) || undefined,
173
- message: text(native.result) || text(native.subtype) || 'run falhou',
174
- recoverable: false,
175
- },
176
- ];
177
- }
178
- /** `claude --output-format stream-json`: envelopes `system`/`assistant`/`user`/`result`. */
179
- export function translateClaude(native) {
180
- const event = asRecord(native);
181
- if (!event)
182
- return null;
183
- switch (event.type) {
184
- case 'system':
185
- case 'rate_limit_event':
186
- case 'stream_event':
187
- return [];
188
- case 'assistant':
189
- return claudeBlocks(event, claudeAssistantBlock);
190
- case 'user':
191
- return claudeBlocks(event, claudeUserBlock);
192
- case 'result':
193
- return claudeResult(event);
194
- default:
195
- return null;
196
- }
197
- }
198
- //# sourceMappingURL=exec-translators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exec-translators.js","sourceRoot":"","sources":["../../src/lib/exec-translators.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync, } from 'node:fs';
2
- import { dirname } from 'node:path';
3
- import { parse as parseToml, stringify as stringifyToml } from 'smol-toml';
4
- export function backupFile(path) {
5
- const backupPath = `${path}.bak.${Date.now()}`;
6
- copyFileSync(path, backupPath);
7
- return backupPath;
8
- }
9
- export function readJson(path) {
10
- if (!existsSync(path))
11
- return null;
12
- const raw = readFileSync(path, 'utf-8');
13
- if (raw.trim().length === 0)
14
- return null;
15
- return JSON.parse(raw);
16
- }
17
- export function writeJson(path, data) {
18
- mkdirSync(dirname(path), { recursive: true });
19
- writeFileSync(path, JSON.stringify(data, null, 2) + '\n', 'utf-8');
20
- }
21
- export function readToml(path) {
22
- if (!existsSync(path))
23
- return null;
24
- const raw = readFileSync(path, 'utf-8');
25
- if (raw.trim().length === 0)
26
- return null;
27
- return parseToml(raw);
28
- }
29
- export function writeToml(path, data) {
30
- mkdirSync(dirname(path), { recursive: true });
31
- writeFileSync(path, stringifyToml(data) + '\n', 'utf-8');
32
- }
33
- //# sourceMappingURL=file-merge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-merge.js","sourceRoot":"","sources":["../../src/lib/file-merge.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3E,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,UAAU,GAAG,GAAG,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC/C,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAa;IACnD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,SAAS,CAAC,GAAG,CAA4B,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAA6B;IACnE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,35 +0,0 @@
1
- import { spawnSync } from "node:child_process";
2
- import { realpathSync } from "node:fs";
3
- import { dirname, join } from "node:path";
4
- /**
5
- * Detecta o destino "exposto": os arquivos provisionados caem dentro de um worktree
6
- * git (típico de `~/.claude/skills` ser symlink pra um repo de dotfiles) e **não estão
7
- * ignorados** lá. Nesse estado, um `git clean -fd`/`checkout`/`stash` no repo apaga ou
8
- * reverte tudo — e o usuário vê as skills "sumindo do nada", voltando só no próximo sync.
9
- *
10
- * Retorna a raiz do repo, ou `null` quando não há risco (fora de repo, ou ignorado).
11
- */
12
- export function gitExposedRoot(targetDir, relPaths) {
13
- // Uma amostra basta: os arquivos do mesmo destino compartilham o mesmo status.
14
- const sample = relPaths.slice(0, 5).map((p) => join(targetDir, p));
15
- if (sample.length === 0)
16
- return null;
17
- const real = (p) => {
18
- try {
19
- return realpathSync(p);
20
- }
21
- catch {
22
- return p;
23
- }
24
- };
25
- const cwd = real(dirname(sample[0]));
26
- const git = (args) => spawnSync("git", ["-C", cwd, ...args], { encoding: "utf-8" });
27
- const root = git(["rev-parse", "--show-toplevel"]);
28
- if (root.status !== 0)
29
- return null;
30
- // `check-ignore -q` sai 0 se **algum** path é ignorado — o caso "já protegido".
31
- if (git(["check-ignore", "-q", ...sample.map(real)]).status === 0)
32
- return null;
33
- return root.stdout.trim() || null;
34
- }
35
- //# sourceMappingURL=git-exposure.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-exposure.js","sourceRoot":"","sources":["../../src/lib/git-exposure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,QAAkB;IAElB,+EAA+E;IAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE;QACjC,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,IAAc,EAAE,EAAE,CAC7B,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,gFAAgF;IAChF,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/E,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;AACpC,CAAC"}
@@ -1,127 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
- import { brand } from '../brand.js';
3
- import { dirname, join } from 'node:path';
4
- import { extractSection } from './rules.js';
5
- import { generateRepoMap } from './repo-map.js';
6
- /**
7
- * Grava o **harness** de código no repo (versionado, do time): o arquivo de rules
8
- * concatenadas + as âncoras no `AGENTS.md` (com o bloco de overview do NOS) + um
9
- * `CLAUDE.md` fino. Idempotente e não-destrutivo: só reescreve o que é do noclaf; o
10
- * texto do time no `AGENTS.md` (fora do bloco marcado) é preservado.
11
- */
12
- export const HARNESS_RULES_REL = 'docs/_rules/noclaf.md';
13
- export const HARNESS_PATTERNS_REL = 'docs/_patterns.md';
14
- export const HARNESS_REVIEW_REL = 'docs/_review.md';
15
- const AGENTS_REL = 'AGENTS.md';
16
- const CLAUDE_REL = 'CLAUDE.md';
17
- const OV_START = '<!-- noclaf:overview:start -->';
18
- const OV_END = '<!-- noclaf:overview:end -->';
19
- /**
20
- * Corpo do `docs/_review.md`: os critérios das rules (do bundle, via `concatenateReviewCriteria`)
21
- * + a seção `## Critérios` do `docs/_patterns.md` do repo, se existir (padrões observados). Pura
22
- * quanto ao input `rulesCriteria`; lê o `_patterns.md` do `cwd` (determinístico pelo estado dele).
23
- */
24
- export function buildReviewMarkdown(cwd, rulesCriteria) {
25
- const blocks = [];
26
- if (rulesCriteria.trim())
27
- blocks.push(rulesCriteria.trim());
28
- const patternsPath = join(cwd, HARNESS_PATTERNS_REL);
29
- if (existsSync(patternsPath)) {
30
- const observed = extractSection(readFileSync(patternsPath, 'utf8'), 'Critérios');
31
- if (observed)
32
- blocks.push(`## Padrões observados (do repo)\n\n${observed}`);
33
- }
34
- return blocks.join('\n\n');
35
- }
36
- function escapeRe(s) {
37
- return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
38
- }
39
- function writeIfChanged(path, content) {
40
- if (!existsSync(path)) {
41
- mkdirSync(dirname(path), { recursive: true });
42
- writeFileSync(path, content, 'utf8');
43
- return 'created';
44
- }
45
- if (readFileSync(path, 'utf8') === content)
46
- return 'unchanged';
47
- writeFileSync(path, content, 'utf8');
48
- return 'updated';
49
- }
50
- /** Insere um bloco logo após o primeiro heading `# …`, ou no topo se não houver. */
51
- function insertAfterTitle(text, block) {
52
- const lines = text.split('\n');
53
- const i = lines.findIndex((l) => /^#\s/.test(l));
54
- if (i === -1)
55
- return `${block}\n${text}`;
56
- lines.splice(i + 1, 0, '', block);
57
- return lines.join('\n');
58
- }
59
- /** Garante o bloco de overview (marcado) + as âncoras `@` no `AGENTS.md`. */
60
- function ensureAgents(path, overview) {
61
- const anchors = [`@${HARNESS_RULES_REL}`, `@${HARNESS_PATTERNS_REL}`];
62
- const ovBlock = overview
63
- ? `${OV_START}\n## Sobre o projeto\n\n${overview.trim()}\n${OV_END}`
64
- : null;
65
- if (!existsSync(path)) {
66
- const ov = ovBlock ? `${ovBlock}\n\n` : '';
67
- const content = `# AGENTS.md\n\n${ov}## Harness\n\n${anchors.join('\n')}\n`;
68
- mkdirSync(dirname(path), { recursive: true });
69
- writeFileSync(path, content, 'utf8');
70
- return 'created';
71
- }
72
- let text = readFileSync(path, 'utf8');
73
- const before = text;
74
- if (ovBlock) {
75
- const re = new RegExp(`${escapeRe(OV_START)}[\\s\\S]*?${escapeRe(OV_END)}`);
76
- text = re.test(text) ? text.replace(re, ovBlock) : insertAfterTitle(text, ovBlock);
77
- }
78
- for (const line of anchors) {
79
- if (!text.split('\n').some((l) => l.trim() === line)) {
80
- text = `${text.trimEnd()}\n${line}\n`;
81
- }
82
- }
83
- if (text === before)
84
- return 'unchanged';
85
- writeFileSync(path, text, 'utf8');
86
- return 'updated';
87
- }
88
- /**
89
- * Escreve o harness no repo (`cwd`) — o versionado (rules/review/AGENTS/CLAUDE) mais o
90
- * `docs/_map.md` gerado, esse **não** versionado. `rulesMarkdown` vem do concatenador;
91
- * `overview` é o texto do NOS (opcional — ausente, o bloco de overview não é tocado).
92
- */
93
- export function writeRepoHarness(cwd, opts) {
94
- return { ...writeHarnessFiles(cwd, opts), map: generateRepoMap(cwd).action };
95
- }
96
- function writeHarnessFiles(cwd, opts) {
97
- const result = {
98
- rules: 'empty',
99
- review: 'empty',
100
- agents: 'unchanged',
101
- claude: 'unchanged',
102
- };
103
- // 1. docs/_rules/noclaf.md — totalmente do noclaf.
104
- if (opts.rulesMarkdown.trim()) {
105
- const header = `# Harness de código — ${brand.name}\n\n` +
106
- `<!-- Gerado por \`${brand.name} sync\`. Não edite à mão — rode \`${brand.name} sync\`. -->\n\n`;
107
- result.rules = writeIfChanged(join(cwd, HARNESS_RULES_REL), `${header}${opts.rulesMarkdown.trim()}\n`);
108
- }
109
- // 1b. docs/_review.md — rubrica de review (critérios das rules + padrões observados).
110
- const reviewBody = buildReviewMarkdown(cwd, opts.reviewMarkdown ?? '');
111
- if (reviewBody.trim()) {
112
- const header = `# Rubrica de review — ${brand.name}\n\n` +
113
- `<!-- Gerado por \`${brand.name} sync\`. Não edite à mão — rode \`${brand.name} sync\`. ` +
114
- `Fonte única de critérios pro gate interno e pro review externo (Visor). -->\n\n`;
115
- result.review = writeIfChanged(join(cwd, HARNESS_REVIEW_REL), `${header}${reviewBody.trim()}\n`);
116
- }
117
- // 2. AGENTS.md — overview (bloco marcado) + âncoras.
118
- result.agents = ensureAgents(join(cwd, AGENTS_REL), opts.overview ?? null);
119
- // 3. CLAUDE.md fino — scaffold-if-missing.
120
- const claudePath = join(cwd, CLAUDE_REL);
121
- if (!existsSync(claudePath)) {
122
- writeFileSync(claudePath, `@${AGENTS_REL}\n`, 'utf8');
123
- result.claude = 'created';
124
- }
125
- return result;
126
- }
127
- //# sourceMappingURL=harness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/lib/harness.ts"],"names":[],"mappings":"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"}