@noclaf/cli 0.4.8 → 0.4.10

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.
package/dist/auth.js CHANGED
@@ -1,14 +1,20 @@
1
1
  import { mkdir, readFile, writeFile, chmod, rm } from 'node:fs/promises';
2
- import { CREDENTIALS_DIR, CREDENTIALS_FILE, PAT_REGEX, SUPABASE_ANON_KEY, TOKEN_EXCHANGE_URL, } from './constants.js';
3
- export async function loadCredentials() {
2
+ import { dirname } from 'node:path';
3
+ import { CREDENTIALS_FILE, PAT_REGEX, SUPABASE_ANON_KEY, TOKEN_EXCHANGE_URL, } from './constants.js';
4
+ export async function loadCredentials(file = CREDENTIALS_FILE) {
5
+ const stored = await readCredentialsFile(file);
4
6
  // Precedência pro ambiente: usado por Desktop Extensions / Cowork, onde o PAT
5
7
  // chega via user_config (NOCLAF_PAT) em vez de `noclaf login`.
6
8
  const envPat = process.env.NOCLAF_PAT?.trim();
7
9
  if (envPat) {
8
- return { pat: envPat };
10
+ // Cache do arquivo só serve se for do mesmo PAT.
11
+ return stored?.pat === envPat ? stored : { pat: envPat };
9
12
  }
13
+ return stored;
14
+ }
15
+ async function readCredentialsFile(file) {
10
16
  try {
11
- const raw = await readFile(CREDENTIALS_FILE, 'utf8');
17
+ const raw = await readFile(file, 'utf8');
12
18
  const parsed = JSON.parse(raw);
13
19
  if (!parsed || typeof parsed.pat !== 'string') {
14
20
  return null;
@@ -22,16 +28,59 @@ export async function loadCredentials() {
22
28
  throw err;
23
29
  }
24
30
  }
25
- export async function saveCredentials(creds) {
26
- await mkdir(CREDENTIALS_DIR, { recursive: true });
27
- await writeFile(CREDENTIALS_FILE, JSON.stringify(creds, null, 2) + '\n', 'utf8');
31
+ export async function saveCredentials(creds, file = CREDENTIALS_FILE) {
32
+ await mkdir(dirname(file), { recursive: true });
33
+ await writeFile(file, JSON.stringify(creds, null, 2) + '\n', 'utf8');
28
34
  try {
29
- await chmod(CREDENTIALS_FILE, 0o600);
35
+ await chmod(file, 0o600);
30
36
  }
31
37
  catch {
32
38
  // chmod pode falhar em Windows — ignoramos silenciosamente.
33
39
  }
34
40
  }
41
+ /**
42
+ * Identidade do cache quando houver; senão uma troca de PAT, populando o cache.
43
+ * 401/403 invalida o cache e propaga o erro (o chamador pede re-login).
44
+ */
45
+ export async function resolveIdentity(creds, opts = {}) {
46
+ const file = opts.file ?? CREDENTIALS_FILE;
47
+ if (!opts.refresh && creds.user && creds.fetched_at) {
48
+ return { ...creds.user, fetched_at: creds.fetched_at };
49
+ }
50
+ let result;
51
+ try {
52
+ result = await exchangePatForJwt(creds.pat);
53
+ }
54
+ catch (err) {
55
+ const status = err.status;
56
+ if (status === 401 || status === 403) {
57
+ await patchCachedUser(file, null);
58
+ }
59
+ throw err;
60
+ }
61
+ const identity = { ...result.user, fetched_at: new Date().toISOString() };
62
+ await patchCachedUser(file, identity);
63
+ return identity;
64
+ }
65
+ // Só mexe num arquivo já existente: ambiente com PAT via env e sem credencial
66
+ // gravada responde sem persistir nada.
67
+ async function patchCachedUser(file, identity) {
68
+ const creds = await readCredentialsFile(file).catch(() => null);
69
+ if (!creds)
70
+ return;
71
+ if (identity) {
72
+ const { fetched_at, ...user } = identity;
73
+ creds.user = user;
74
+ creds.fetched_at = fetched_at;
75
+ }
76
+ else {
77
+ delete creds.user;
78
+ delete creds.fetched_at;
79
+ }
80
+ await saveCredentials(creds, file).catch(() => {
81
+ // filesystem read-only — cache é conveniência, segue sem persistir.
82
+ });
83
+ }
35
84
  export async function clearCredentials() {
36
85
  await rm(CREDENTIALS_FILE, { force: true });
37
86
  }
@@ -59,7 +108,9 @@ export async function exchangePatForJwt(pat) {
59
108
  catch {
60
109
  // body não era JSON — mantém statusText
61
110
  }
62
- throw new Error(message);
111
+ const err = new Error(message);
112
+ err.status = response.status;
113
+ throw err;
63
114
  }
64
115
  return (await response.json());
65
116
  }
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { password } from "../../lib/prompts.js";
2
2
  import { LOGO } from "../../logo.js";
3
3
  import { startSpinner } from "../../spinner.js";
4
- import { clearCredentials, exchangePatForJwt, loadCredentials, saveCredentials, validatePatFormat, } from "../../auth.js";
4
+ import { clearCredentials, exchangePatForJwt, loadCredentials, resolveIdentity, saveCredentials, validatePatFormat, } from "../../auth.js";
5
5
  import { authCopy } from "../copy.js";
6
6
  export function registerAuthCommands(program) {
7
7
  program
@@ -26,7 +26,11 @@ export function registerAuthCommands(program) {
26
26
  const spinner = startSpinner("Autenticando...");
27
27
  try {
28
28
  const result = await exchangePatForJwt(pat);
29
- await saveCredentials({ pat });
29
+ await saveCredentials({
30
+ pat,
31
+ user: result.user,
32
+ fetched_at: new Date().toISOString(),
33
+ });
30
34
  spinner.stop();
31
35
  const u = result.user;
32
36
  console.log(LOGO);
@@ -50,17 +54,23 @@ export function registerAuthCommands(program) {
50
54
  program
51
55
  .command("whoami")
52
56
  .description("Mostra o usuário autenticado")
53
- .action(async () => {
57
+ .option("--json", "Emite a identidade como JSON")
58
+ .option("--refresh", "Ignora o cache e revalida o token")
59
+ .action(async (opts) => {
54
60
  const creds = await loadCredentials();
55
61
  if (!creds) {
56
62
  console.error("Não autenticado. Rode `noclaf login <PAT>`.");
57
63
  process.exit(1);
58
64
  }
59
- const spinner = startSpinner("Validando sessão...");
65
+ const cached = !opts.refresh && Boolean(creds.user && creds.fetched_at);
66
+ const spinner = cached || opts.json ? null : startSpinner("Validando sessão...");
60
67
  try {
61
- const result = await exchangePatForJwt(creds.pat);
62
- spinner.stop();
63
- const u = result.user;
68
+ const u = await resolveIdentity(creds, { refresh: opts.refresh });
69
+ spinner?.stop();
70
+ if (opts.json) {
71
+ console.log(JSON.stringify(u, null, 2));
72
+ return;
73
+ }
64
74
  console.log(LOGO);
65
75
  console.log(`Nome: ${u.full_name || "(sem nome)"}`);
66
76
  console.log(`Email: ${u.email}`);
@@ -68,7 +78,14 @@ export function registerAuthCommands(program) {
68
78
  console.log(`ID: ${u.id}`);
69
79
  }
70
80
  catch (err) {
71
- spinner.fail(`Falha ao validar token: ${err.message}`);
81
+ const status = err.status;
82
+ const message = status === 401 || status === 403
83
+ ? "Sessão inválida. Rode `noclaf login <PAT>` novamente."
84
+ : `Falha ao validar token: ${err.message}`;
85
+ if (spinner)
86
+ spinner.fail(message);
87
+ else
88
+ console.error(message);
72
89
  process.exit(1);
73
90
  }
74
91
  });
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { existsSync } from "node:fs";
2
+ import { runExec, getJob } from "../../lib/exec-delegate.js";
3
+ import { ENGINES, DEFAULT_ENGINE, parseEngine, } from "../../lib/exec-engines.js";
4
+ /**
5
+ * Superfície de CLI da delegação headless — o que o noclaf Studio (Tauri) chama.
6
+ * Contrato: **stdout = JSON** (parseável), **stderr = log ao vivo** (streamável).
7
+ */
8
+ function emit(payload) {
9
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
10
+ }
11
+ export function registerExecCommand(program) {
12
+ program
13
+ .command("exec")
14
+ .description("Delega a implementação a um agente headless num worktree e aguarda. " +
15
+ "stdout = JSON do resultado; stderr = log ao vivo.")
16
+ .requiredOption("--worktree <path>", "worktree onde implementar (criado pelo /implement)")
17
+ .requiredOption("--instruction <texto>", "o que implementar (ticket + critérios)")
18
+ .option("--engine <engine>", `agente de execução (${ENGINES.join(" | ")})`, DEFAULT_ENGINE)
19
+ .option("--quiet", "não streama o log do agente no stderr")
20
+ .action(async (opts) => {
21
+ const engine = parseEngine(opts.engine);
22
+ if (!engine) {
23
+ emit({
24
+ error: `engine inválido: ${opts.engine} — suportados: ${ENGINES.join(", ")}`,
25
+ });
26
+ process.exitCode = 1;
27
+ return;
28
+ }
29
+ if (!existsSync(opts.worktree)) {
30
+ emit({ error: `worktree não encontrado: ${opts.worktree}` });
31
+ process.exitCode = 1;
32
+ return;
33
+ }
34
+ const job = await runExec({
35
+ worktree: opts.worktree,
36
+ instruction: opts.instruction,
37
+ engine,
38
+ echo: opts.quiet !== true,
39
+ });
40
+ emit(job);
41
+ if (job.state !== "done")
42
+ process.exitCode = 1;
43
+ });
44
+ // Comando separado (não subcomando): opções `required` do pai bloqueariam o parse.
45
+ program
46
+ .command("exec-status <jobId>")
47
+ .description("Estado de um job de execução (`noclaf exec`), em JSON")
48
+ .action((jobId) => {
49
+ const job = getJob(jobId);
50
+ if (!job) {
51
+ emit({ error: `job não encontrado: ${jobId}` });
52
+ process.exitCode = 1;
53
+ return;
54
+ }
55
+ emit(job);
56
+ });
57
+ }
58
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,cAAc,EACd,WAAW,GACZ,MAAM,2BAA2B,CAAC;AAEnC;;;GAGG;AAEH,SAAS,IAAI,CAAC,OAAgB;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,sEAAsE;QACpE,mDAAmD,CACtD;SACA,cAAc,CACb,mBAAmB,EACnB,oDAAoD,CACrD;SACA,cAAc,CACb,uBAAuB,EACvB,wCAAwC,CACzC;SACA,MAAM,CACL,mBAAmB,EACnB,uBAAuB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAC7C,cAAc,CACf;SACA,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CACL,KAAK,EAAE,IAKN,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,KAAK,EAAE,oBAAoB,IAAI,CAAC,MAAM,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC7E,CAAC,CAAC;YACH,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,EAAE,KAAK,EAAE,4BAA4B,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACjD,CAAC,CACF,CAAC;IAEJ,mFAAmF;IACnF,OAAO;SACJ,OAAO,CAAC,qBAAqB,CAAC;SAC9B,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,CAAC,KAAa,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;AACP,CAAC"}
package/dist/cli.js CHANGED
@@ -8,6 +8,7 @@ import { registerInitCommand } from "./cli/commands/init.js";
8
8
  import { registerSyncCommand } from "./cli/commands/sync.js";
9
9
  import { registerSkillsCommands } from "./cli/commands/skills.js";
10
10
  import { registerCleanCommand } from "./cli/commands/clean.js";
11
+ import { registerExecCommand } from "./cli/commands/exec.js";
11
12
  notifyCliIfUpdate();
12
13
  const program = new Command();
13
14
  program
@@ -20,6 +21,7 @@ registerInitCommand(program);
20
21
  registerSyncCommand(program);
21
22
  registerSkillsCommands(program);
22
23
  registerCleanCommand(program);
24
+ registerExecCommand(program);
23
25
  program.parseAsync(process.argv).catch((err) => {
24
26
  console.error(`Erro: ${err.message}`);
25
27
  process.exit(1);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,iBAAiB,EAAE,CAAC;AAEpB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAElC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,iBAAiB,EAAE,CAAC;AAEpB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,sCAAsC,CAAC;KACnD,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAElC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -4,6 +4,7 @@ import { homedir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
  import { randomUUID } from 'node:crypto';
6
6
  import { skillsDir } from './skills.js';
7
+ import { DEFAULT_ENGINE, engineArgs, engineMissingError, resolveEngineBin, } from './exec-engines.js';
7
8
  const jobs = new Map();
8
9
  function jobsDir() {
9
10
  return join(homedir(), '.noclaf', 'exec-jobs');
@@ -34,21 +35,6 @@ export function getJob(id) {
34
35
  return null;
35
36
  }
36
37
  }
37
- const CODEX_CANDIDATES = [
38
- join(homedir(), '.local', 'bin', 'codex'),
39
- '/opt/homebrew/bin/codex',
40
- '/usr/local/bin/codex',
41
- ];
42
- /** Acha o `codex` — o MCP é spawnado por app GUI, com PATH mínimo. */
43
- export function resolveCodexBin() {
44
- const override = process.env.NOCLAF_CODEX_BIN;
45
- if (override && existsSync(override))
46
- return override;
47
- const onPath = spawnSync('codex', ['--version'], { stdio: 'ignore' });
48
- if (!onPath.error)
49
- return 'codex';
50
- return CODEX_CANDIDATES.find((p) => existsSync(p)) ?? null;
51
- }
52
38
  /** Preâmbulo que ancora o agente de execução no harness do repo. */
53
39
  function buildPrompt(instruction) {
54
40
  return [
@@ -114,51 +100,67 @@ function runChecks(worktree) {
114
100
  function finish(job) {
115
101
  return save({ ...job, finishedAt: new Date().toISOString() });
116
102
  }
117
- function spawnCodex(job, bin, prompt) {
118
- const args = (process.env.NOCLAF_CODEX_ARGS ?? 'exec --full-auto').split(/\s+/);
119
- const child = spawn(bin, [...args, prompt], {
103
+ function spawnEngine(job, bin, prompt, opts = {}) {
104
+ const child = spawn(bin, engineArgs(job.engine, prompt), {
120
105
  cwd: job.worktree,
121
106
  stdio: ['ignore', 'pipe', 'pipe'],
122
107
  });
123
108
  let out = '';
124
- child.stdout.on('data', (d) => {
125
- out += d.toString();
126
- });
127
- child.stderr.on('data', (d) => {
128
- out += d.toString();
129
- });
130
- child.on('error', (e) => finish({ ...job, state: 'failed', error: e.message }));
131
- child.on('close', (code) => finish({
109
+ const collect = (d) => {
110
+ const s = d.toString();
111
+ out += s;
112
+ if (opts.echo)
113
+ process.stderr.write(s); // stdout fica pro JSON final
114
+ };
115
+ child.stdout.on('data', collect);
116
+ child.stderr.on('data', collect);
117
+ child.on('error', (e) => opts.onDone?.(finish({ ...job, state: 'failed', error: e.message })));
118
+ child.on('close', (code) => opts.onDone?.(finish({
132
119
  ...job,
133
120
  state: code === 0 ? 'done' : 'failed',
134
121
  exitCode: code,
135
122
  summary: out.trim().slice(-2000),
136
123
  checks: runChecks(job.worktree),
137
124
  changed: changedFiles(job.worktree),
138
- }));
125
+ })));
139
126
  }
140
- /** Dispara o Codex em background e devolve o job (consulte com `noclaf_exec_status`). */
141
- export function startExec(opts) {
142
- const job = {
127
+ function newJob(worktree, engine) {
128
+ return {
143
129
  id: randomUUID().slice(0, 8),
144
130
  state: 'running',
145
- worktree: opts.worktree,
131
+ worktree,
132
+ engine,
146
133
  exitCode: null,
147
134
  summary: '',
148
135
  checks: {},
149
136
  changed: [],
150
137
  startedAt: new Date().toISOString(),
151
138
  };
152
- const bin = resolveCodexBin();
139
+ }
140
+ /** Prepara o job: resolve o binário e persiste. Devolve o job já falho se não achar. */
141
+ function prepare(worktree, engine) {
142
+ const job = newJob(worktree, engine);
143
+ const bin = resolveEngineBin(engine);
153
144
  if (!bin) {
154
- return finish({
155
- ...job,
156
- state: 'failed',
157
- error: 'codex não encontrado — instale/logue (`codex login`) ou defina NOCLAF_CODEX_BIN',
158
- });
145
+ return finish({ ...job, state: 'failed', error: engineMissingError(engine) });
159
146
  }
160
- save(job);
161
- spawnCodex(job, bin, buildPrompt(opts.instruction));
162
- return job;
147
+ return { job, bin: save(job) && bin };
148
+ }
149
+ /** Background: devolve na hora (uso do MCP, que é processo longo). */
150
+ export function startExec(opts) {
151
+ const p = prepare(opts.worktree, opts.engine ?? DEFAULT_ENGINE);
152
+ if ('state' in p)
153
+ return p;
154
+ spawnEngine(p.job, p.bin, buildPrompt(opts.instruction), { onDone: () => undefined });
155
+ return p.job;
156
+ }
157
+ /** Bloqueante: aguarda o fim (uso do CLI, que é processo curto). `echo` streama pro stderr. */
158
+ export function runExec(opts) {
159
+ return new Promise((resolve) => {
160
+ const p = prepare(opts.worktree, opts.engine ?? DEFAULT_ENGINE);
161
+ if ('state' in p)
162
+ return resolve(p);
163
+ spawnEngine(p.job, p.bin, buildPrompt(opts.instruction), { echo: opts.echo, onDone: resolve });
164
+ });
163
165
  }
164
166
  //# sourceMappingURL=exec-delegate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec-delegate.js","sourceRoot":"","sources":["../../src/lib/exec-delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exec-delegate.js","sourceRoot":"","sources":["../../src/lib/exec-delegate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
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
+ /**
6
+ * Registro central dos engines da delegação headless. É o **único** lugar que conhece
7
+ * nome de binário, candidatos de PATH e flags. Adicionar engine = adicionar uma entrada.
8
+ */
9
+ export const ENGINES = ['codex', 'claude'];
10
+ export const DEFAULT_ENGINE = 'codex';
11
+ // O MCP é spawnado por app GUI, com PATH mínimo — daí a busca em locais conhecidos.
12
+ function knownPaths(bin, ...extra) {
13
+ return [
14
+ join(homedir(), '.local', 'bin', bin),
15
+ '/opt/homebrew/bin/' + bin,
16
+ '/usr/local/bin/' + bin,
17
+ ...extra,
18
+ ];
19
+ }
20
+ const SPECS = {
21
+ codex: {
22
+ bin: 'codex',
23
+ candidates: knownPaths('codex'),
24
+ binEnv: 'NOCLAF_CODEX_BIN',
25
+ argsEnv: 'NOCLAF_CODEX_ARGS',
26
+ args: (prompt) => ['exec', '--full-auto', prompt],
27
+ missing: 'codex não encontrado — instale/logue (`codex login`) ou defina NOCLAF_CODEX_BIN',
28
+ },
29
+ claude: {
30
+ bin: 'claude',
31
+ candidates: knownPaths('claude', join(homedir(), '.claude', 'local', 'claude')),
32
+ binEnv: 'NOCLAF_CLAUDE_BIN',
33
+ argsEnv: 'NOCLAF_CLAUDE_ARGS',
34
+ args: (prompt) => ['-p', prompt, '--permission-mode', 'acceptEdits'],
35
+ missing: 'claude não encontrado — instale/logue (`claude login`) ou defina NOCLAF_CLAUDE_BIN',
36
+ },
37
+ };
38
+ export function isEngine(value) {
39
+ return typeof value === 'string' && ENGINES.includes(value);
40
+ }
41
+ /** Normaliza o valor pedido; ausente → default; inválido → `null` (o caller reporta). */
42
+ export function parseEngine(value) {
43
+ if (value === undefined || value === null || value === '')
44
+ return DEFAULT_ENGINE;
45
+ return isEngine(value) ? value : null;
46
+ }
47
+ export function engineMissingError(engine) {
48
+ return SPECS[engine].missing;
49
+ }
50
+ /** Args headless do engine; `NOCLAF_<ENGINE>_ARGS` sobrescreve (prompt vai no fim). */
51
+ export function engineArgs(engine, prompt) {
52
+ const spec = SPECS[engine];
53
+ const override = process.env[spec.argsEnv];
54
+ if (override && override.trim())
55
+ return [...override.trim().split(/\s+/), prompt];
56
+ return spec.args(prompt);
57
+ }
58
+ /** Acha o binário: override de env, depois PATH, depois os candidatos conhecidos. */
59
+ export function resolveEngineBin(engine) {
60
+ const spec = SPECS[engine];
61
+ const override = process.env[spec.binEnv];
62
+ if (override && existsSync(override))
63
+ return override;
64
+ const onPath = spawnSync(spec.bin, ['--version'], { stdio: 'ignore' });
65
+ if (!onPath.error)
66
+ return spec.bin;
67
+ return spec.candidates.find((p) => existsSync(p)) ?? null;
68
+ }
69
+ //# sourceMappingURL=exec-engines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec-engines.js","sourceRoot":"","sources":["../../src/lib/exec-engines.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,17 @@ import { z } from 'zod';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { jsonResult, errorResult } from '../lib/tool-result.js';
4
4
  import { startExec } from '../lib/exec-delegate.js';
5
+ import { ENGINES, DEFAULT_ENGINE } from '../lib/exec-engines.js';
5
6
  const ArgsSchema = z
6
7
  .object({
7
8
  worktree: z.string().min(1),
8
9
  instruction: z.string().min(1),
10
+ engine: z.enum(ENGINES).optional(),
9
11
  })
10
12
  .strict();
11
13
  export const definition = {
12
14
  name: 'noclaf_delegate_exec',
13
- description: 'Delega a IMPLEMENTAÇÃO a um agente de execução novo (Codex local, na assinatura — sem API) ' +
15
+ description: 'Delega a IMPLEMENTAÇÃO a um agente de execução novo (codex ou claude local, na assinatura — sem API) ' +
14
16
  'num worktree já criado pelo /implement. Roda em background e, ao terminar, mede o resultado ' +
15
17
  '(tamanho de arquivo/função, lint, build, testes). NÃO julga qualidade e NÃO commita — o ' +
16
18
  'review fica com você (code-reviewer + harness). Consulte o resultado com `noclaf_exec_status`.',
@@ -26,6 +28,11 @@ export const definition = {
26
28
  description: 'O que implementar: o ticket + critérios de aceitação. Numa re-tentativa, inclua as ' +
27
29
  'violações apontadas pelo review — o agente de execução é novo e não herda a conversa.',
28
30
  },
31
+ engine: {
32
+ type: 'string',
33
+ enum: [...ENGINES],
34
+ description: `Agente de execução a usar. Default: ${DEFAULT_ENGINE}.`,
35
+ },
29
36
  },
30
37
  required: ['worktree', 'instruction'],
31
38
  additionalProperties: false,
@@ -36,17 +43,18 @@ export async function handler(args, _ctx) {
36
43
  if (!parsed.success) {
37
44
  return errorResult(`Argumento inválido: ${parsed.error.message}`);
38
45
  }
39
- const { worktree, instruction } = parsed.data;
46
+ const { worktree, instruction, engine } = parsed.data;
40
47
  if (!existsSync(worktree)) {
41
48
  return errorResult(`Worktree não encontrado: ${worktree}`);
42
49
  }
43
- const job = startExec({ worktree, instruction });
50
+ const job = startExec({ worktree, instruction, engine });
44
51
  if (job.state === 'failed') {
45
52
  return errorResult(job.error ?? 'falha ao iniciar a execução');
46
53
  }
47
54
  return jsonResult({
48
55
  job_id: job.id,
49
56
  state: job.state,
57
+ engine: job.engine,
50
58
  worktree: job.worktree,
51
59
  hint: 'Consulte com `noclaf_exec_status` até state=done|failed.',
52
60
  });
@@ -1 +1 @@
1
- {"version":3,"file":"delegate-exec.js","sourceRoot":"","sources":["../../src/tools/delegate-exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,6FAA6F;QAC7F,8FAA8F;QAC9F,0FAA0F;QAC1F,gGAAgG;IAClG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yEAAyE;aACvF;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qFAAqF;oBACrF,uFAAuF;aAC1F;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;QACrC,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,IAAiB;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;IACjD,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,6BAA6B,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,EAAE;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,0DAA0D;KACjE,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"delegate-exec.js","sourceRoot":"","sources":["../../src/tools/delegate-exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,uGAAuG;QACvG,8FAA8F;QAC9F,0FAA0F;QAC1F,gGAAgG;IAClG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yEAAyE;aACvF;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qFAAqF;oBACrF,uFAAuF;aAC1F;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;gBAClB,WAAW,EAAE,uCAAuC,cAAc,GAAG;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;QACrC,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,IAAiB;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,6BAA6B,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,MAAM,EAAE,GAAG,CAAC,EAAE;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,0DAA0D;KACjE,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noclaf/cli",
3
- "version": "0.4.8",
3
+ "version": "0.4.10",
4
4
  "description": "MCP server e CLI pra controlar o NOS (Noclaf Operation System) a partir de assistentes de IA como Claude Code, Codex CLI e GitHub Copilot.",
5
5
  "type": "module",
6
6
  "bin": {