@namzu/cli 7.0.0 → 8.1.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 (54) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +2 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/doctor.d.ts.map +1 -1
  5. package/dist/commands/doctor.js +27 -3
  6. package/dist/commands/doctor.js.map +1 -1
  7. package/dist/commands/drain.d.ts +59 -0
  8. package/dist/commands/drain.d.ts.map +1 -0
  9. package/dist/commands/drain.js +301 -0
  10. package/dist/commands/drain.js.map +1 -0
  11. package/dist/commands/run-flags.d.ts +35 -0
  12. package/dist/commands/run-flags.d.ts.map +1 -1
  13. package/dist/commands/run-flags.js +42 -0
  14. package/dist/commands/run-flags.js.map +1 -1
  15. package/dist/commands/run-stream.d.ts +37 -9
  16. package/dist/commands/run-stream.d.ts.map +1 -1
  17. package/dist/commands/run-stream.js +114 -19
  18. package/dist/commands/run-stream.js.map +1 -1
  19. package/dist/commands/run.d.ts.map +1 -1
  20. package/dist/commands/run.js +20 -1
  21. package/dist/commands/run.js.map +1 -1
  22. package/dist/doctor/checks/chain.d.ts.map +1 -1
  23. package/dist/doctor/checks/chain.js +11 -1
  24. package/dist/doctor/checks/chain.js.map +1 -1
  25. package/dist/doctor/checks/providers.d.ts +6 -1
  26. package/dist/doctor/checks/providers.d.ts.map +1 -1
  27. package/dist/doctor/checks/providers.js +7 -2
  28. package/dist/doctor/checks/providers.js.map +1 -1
  29. package/dist/doctor/checks/telemetry.d.ts +35 -1
  30. package/dist/doctor/checks/telemetry.d.ts.map +1 -1
  31. package/dist/doctor/checks/telemetry.js +64 -13
  32. package/dist/doctor/checks/telemetry.js.map +1 -1
  33. package/dist/doctor/checks/vault.d.ts +10 -1
  34. package/dist/doctor/checks/vault.d.ts.map +1 -1
  35. package/dist/doctor/checks/vault.js +11 -2
  36. package/dist/doctor/checks/vault.js.map +1 -1
  37. package/dist/doctor/registry.js +25 -1
  38. package/dist/doctor/registry.js.map +1 -1
  39. package/dist/exit-codes.d.ts +18 -1
  40. package/dist/exit-codes.d.ts.map +1 -1
  41. package/dist/exit-codes.js +17 -0
  42. package/dist/exit-codes.js.map +1 -1
  43. package/dist/tui/App.d.ts.map +1 -1
  44. package/dist/tui/App.js +224 -50
  45. package/dist/tui/App.js.map +1 -1
  46. package/dist/tui/agent.d.ts +71 -1
  47. package/dist/tui/agent.d.ts.map +1 -1
  48. package/dist/tui/agent.js +106 -7
  49. package/dist/tui/agent.js.map +1 -1
  50. package/dist/user-commands/store.d.ts +14 -1
  51. package/dist/user-commands/store.d.ts.map +1 -1
  52. package/dist/user-commands/store.js +6 -1
  53. package/dist/user-commands/store.js.map +1 -1
  54. package/package.json +5 -4
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+CH,MAAM,WAAW,aAAa;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAwGjE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgDH,MAAM,WAAW,aAAa;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAyGjE"}
package/dist/cli.js CHANGED
@@ -11,6 +11,7 @@ import { dirname, join } from 'node:path';
11
11
  import { fileURLToPath } from 'node:url';
12
12
  import { Command, CommanderError } from 'commander';
13
13
  import { doctorCommand } from './commands/doctor.js';
14
+ import { drainCommand } from './commands/drain.js';
14
15
  import { evalCommand } from './commands/eval.js';
15
16
  import { registerAll } from './commands/registry.js';
16
17
  import { historyCommand, providersJSONCommand, runStreamCommand, skillsJSONCommand, } from './commands/run-stream.js';
@@ -75,6 +76,7 @@ export async function runCli(opts) {
75
76
  registerAll(program, [
76
77
  doctorCommand,
77
78
  runCommand,
79
+ drainCommand,
78
80
  evalCommand,
79
81
  runStreamCommand,
80
82
  historyCommand,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAyM5C,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC/E;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,UAK3B,CAAA"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAiO5C,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiC/E;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,UAK3B,CAAA"}
@@ -26,10 +26,18 @@ Options:
26
26
  -h, --help Show this help
27
27
 
28
28
  Exit codes:
29
- 0 all checks passed (or no failure produced)
29
+ 0 every check answered, and none of them failed
30
30
  1 one or more checks reported \`fail\`
31
31
  2 no checks registered (Namzu not configured here)
32
+ 69 a check could not answer — it timed out, was aborted, or what it
33
+ reads threw. Separate from 0 because a report that did not manage
34
+ to look tells you nothing about the part it did look at, and
35
+ separate from 1 because nothing was established to have failed.
32
36
  70 internal CLI error (sysexits EX_SOFTWARE)
37
+
38
+ A \`skipped\` check does not affect the exit code: it means there was
39
+ nothing here to check — an optional package absent, nothing configured
40
+ yet — which is an ordinary state of a healthy machine.
33
41
  `;
34
42
  function parseArgs(args) {
35
43
  let json = false;
@@ -133,9 +141,15 @@ function statusGlyph(status) {
133
141
  case 'fail':
134
142
  return '✗';
135
143
  case 'inconclusive':
136
- return '⊘';
144
+ return '?';
137
145
  case 'warn':
138
146
  return '!';
147
+ // The glyph `inconclusive` used to carry. It reads as "not applicable",
148
+ // which is what this status means and what that status never did — so
149
+ // the mark moves to the row it was describing all along, and the check
150
+ // that could not answer takes the question mark.
151
+ case 'skipped':
152
+ return '⊘';
139
153
  }
140
154
  }
141
155
  function formatHumanReport(report, verbose) {
@@ -167,8 +181,18 @@ function formatHumanReport(report, verbose) {
167
181
  }
168
182
  lines.push('');
169
183
  const s = report.summary;
170
- lines.push(` pass: ${s.pass} fail: ${s.fail} warn: ${s.warn} inconc: ${s.inconclusive} total: ${s.total}`);
184
+ // Every status is counted, so the row sums to `total`. `skipped` was folded
185
+ // into `inconc` while they were one word, which meant the line silently
186
+ // reported an optional package's absence in the same figure as a check that
187
+ // timed out — and a reader adding the numbers up got the right total for the
188
+ // wrong reason.
189
+ lines.push(` pass: ${s.pass} fail: ${s.fail} warn: ${s.warn} inconc: ${s.inconclusive} skipped: ${s.skipped} total: ${s.total}`);
171
190
  lines.push(` exit: ${report.exit}`);
191
+ // Named where the number is, because `69` is the one code here a reader will
192
+ // not recognise and the report is the only place they are looking.
193
+ if (report.exit === 69) {
194
+ lines.push(' (69: at least one check could not answer — see the ? rows above)');
195
+ }
172
196
  if (verbose) {
173
197
  const failed = report.checks.filter((c) => c.status === 'fail');
174
198
  if (failed.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * `namzu drain` — one pass over a queue of durable runs.
3
+ *
4
+ * namzu could park a run in one process and continue it in another, and no
5
+ * shipped surface ever did: `claimRun`, `listDurableRuns` and `resumeRun`
6
+ * all existed, and the only caller of any of them was a test. This is the
7
+ * caller. It lists the runs nobody holds under a scope, takes each one,
8
+ * continues it under that claim, and gives it back.
9
+ *
10
+ * **It is not a daemon, and `namzu serve` still says namzu has no daemon.**
11
+ * That refusal is not weakened by this command, it is the reason for its
12
+ * shape: one bounded pass, exit code says what happened, and whatever the
13
+ * operator already uses to run things periodically runs it again. A run is
14
+ * a process; a drain is a process that picks up processes somebody else's
15
+ * machine dropped.
16
+ *
17
+ * The store is named rather than assumed. namzu's own runs are not
18
+ * checkpointed to disk today, so every run this command can find was
19
+ * written by an SDK host — and a default path would have this command
20
+ * report "nothing parked" against a directory nobody writes to, which is
21
+ * the reading that makes an empty queue indistinguishable from a missing
22
+ * one.
23
+ */
24
+ import type { ProjectId, SessionId, TenantId } from '@namzu/sdk';
25
+ import type { CommandDef } from './types.js';
26
+ export interface DrainFlags {
27
+ store: string | null;
28
+ tenant: string | null;
29
+ project: string | null;
30
+ session: string | null;
31
+ cwd: string | null;
32
+ holder: string | null;
33
+ ttlMs: number | null;
34
+ maxConcurrent: number | null;
35
+ provider: string | null;
36
+ model: string | null;
37
+ trust: boolean;
38
+ unknown: string[];
39
+ }
40
+ /**
41
+ * Parse `namzu drain`'s flags.
42
+ *
43
+ * Exported and pure so the refusals below are testable without a provider,
44
+ * a store or a directory. Every one of them is a case where proceeding
45
+ * would act on a scope the operator did not name.
46
+ */
47
+ export declare function parseDrainFlags(rawArgs: readonly string[]): DrainFlags;
48
+ /** The scope refusal, or the scope. Contiguous prefix — see the store contract. */
49
+ export declare function resolveDrainScope(flags: Pick<DrainFlags, 'tenant' | 'project' | 'session'>): {
50
+ readonly error: string;
51
+ } | {
52
+ readonly tenantId: TenantId;
53
+ readonly projectId?: ProjectId;
54
+ readonly sessionId?: SessionId;
55
+ };
56
+ /** A per-process holder when the operator names none. */
57
+ export declare function defaultHolder(): string;
58
+ export declare const drainCommand: CommandDef;
59
+ //# sourceMappingURL=drain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain.d.ts","sourceRoot":"","sources":["../../src/commands/drain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAmB,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAOjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAgEtE;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,GACxF;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IACA,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAC7B,CAqBH;AAED,yDAAyD;AACzD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAcD,eAAO,MAAM,YAAY,EAAE,UAuK1B,CAAA"}
@@ -0,0 +1,301 @@
1
+ /**
2
+ * `namzu drain` — one pass over a queue of durable runs.
3
+ *
4
+ * namzu could park a run in one process and continue it in another, and no
5
+ * shipped surface ever did: `claimRun`, `listDurableRuns` and `resumeRun`
6
+ * all existed, and the only caller of any of them was a test. This is the
7
+ * caller. It lists the runs nobody holds under a scope, takes each one,
8
+ * continues it under that claim, and gives it back.
9
+ *
10
+ * **It is not a daemon, and `namzu serve` still says namzu has no daemon.**
11
+ * That refusal is not weakened by this command, it is the reason for its
12
+ * shape: one bounded pass, exit code says what happened, and whatever the
13
+ * operator already uses to run things periodically runs it again. A run is
14
+ * a process; a drain is a process that picks up processes somebody else's
15
+ * machine dropped.
16
+ *
17
+ * The store is named rather than assumed. namzu's own runs are not
18
+ * checkpointed to disk today, so every run this command can find was
19
+ * written by an SDK host — and a default path would have this command
20
+ * report "nothing parked" against a directory nobody writes to, which is
21
+ * the reading that makes an empty queue indistinguishable from a missing
22
+ * one.
23
+ */
24
+ import { DiskCheckpointStore, drainRuns } from '@namzu/sdk';
25
+ import { configureLogger } from '@namzu/sdk';
26
+ import { EXIT_UNTRUSTED, EXIT_USAGE } from '../exit-codes.js';
27
+ import { decideHeadlessTrust } from '../permissions/headless-trust.js';
28
+ import { applyProviderFlags, resolveWorkingDirectory } from './run-flags.js';
29
+ /** Lease length when the operator names none. Long enough for a real turn. */
30
+ const DEFAULT_TTL_MS = 600_000;
31
+ /**
32
+ * Parse `namzu drain`'s flags.
33
+ *
34
+ * Exported and pure so the refusals below are testable without a provider,
35
+ * a store or a directory. Every one of them is a case where proceeding
36
+ * would act on a scope the operator did not name.
37
+ */
38
+ export function parseDrainFlags(rawArgs) {
39
+ const out = {
40
+ store: null,
41
+ tenant: null,
42
+ project: null,
43
+ session: null,
44
+ cwd: null,
45
+ holder: null,
46
+ ttlMs: null,
47
+ maxConcurrent: null,
48
+ provider: null,
49
+ model: null,
50
+ trust: false,
51
+ unknown: [],
52
+ };
53
+ const value = (a, name, i) => {
54
+ if (a === `--${name}` && i.v + 1 < rawArgs.length)
55
+ return rawArgs[++i.v];
56
+ if (a.startsWith(`--${name}=`))
57
+ return a.slice(name.length + 3);
58
+ return undefined;
59
+ };
60
+ const strings = [
61
+ ['store', 'store'],
62
+ ['tenant', 'tenant'],
63
+ ['project', 'project'],
64
+ ['session', 'session'],
65
+ ['cwd', 'cwd'],
66
+ ['holder', 'holder'],
67
+ ['provider', 'provider'],
68
+ ['model', 'model'],
69
+ ];
70
+ for (const idx = { v: 0 }; idx.v < rawArgs.length; idx.v++) {
71
+ const a = rawArgs[idx.v];
72
+ if (a === '--trust') {
73
+ out.trust = true;
74
+ continue;
75
+ }
76
+ let matched = false;
77
+ for (const [flag, key] of strings) {
78
+ const v = value(a, flag, idx);
79
+ if (v !== undefined) {
80
+ out[key] = v.trim() || null;
81
+ matched = true;
82
+ break;
83
+ }
84
+ }
85
+ if (matched)
86
+ continue;
87
+ const ttl = value(a, 'ttl', idx);
88
+ if (ttl !== undefined) {
89
+ out.ttlMs = Number(ttl);
90
+ continue;
91
+ }
92
+ const conc = value(a, 'max-concurrent', idx);
93
+ if (conc !== undefined) {
94
+ out.maxConcurrent = Number(conc);
95
+ continue;
96
+ }
97
+ // Anything unrecognised is refused rather than ignored, positional
98
+ // arguments included — this command takes none. It acts on other
99
+ // people's runs; a typo'd `--tenant` that fell through would drain a
100
+ // scope nobody asked for.
101
+ out.unknown.push(a.split('=')[0]);
102
+ }
103
+ return out;
104
+ }
105
+ /** The scope refusal, or the scope. Contiguous prefix — see the store contract. */
106
+ export function resolveDrainScope(flags) {
107
+ if (!flags.tenant) {
108
+ return {
109
+ error: '--tenant is required. A run listing with no tenant is a cross-tenant read with a friendly name, so there is no default to fall back to.',
110
+ };
111
+ }
112
+ // The disk store keys checkpoints by directory and needs the project and
113
+ // session to attribute what it finds, so this command asks for the full
114
+ // prefix rather than the contract's minimum.
115
+ if (!flags.project || !flags.session) {
116
+ return {
117
+ error: '--project and --session are both required for a disk store: its layout carries no attribution, so it cannot say which project and session the runs it finds belong to.',
118
+ };
119
+ }
120
+ return {
121
+ tenantId: flags.tenant,
122
+ projectId: flags.project,
123
+ sessionId: flags.session,
124
+ };
125
+ }
126
+ /** A per-process holder when the operator names none. */
127
+ export function defaultHolder() {
128
+ return `namzu-drain-${process.pid}-${Date.now().toString(36)}`;
129
+ }
130
+ function describe(entry) {
131
+ const park = entry.park ? `${entry.park.state} ${entry.park.requestType}` : 'not parked';
132
+ return `${entry.runId} · ${entry.checkpointCount} checkpoints · ${park}`;
133
+ }
134
+ function defaultPrefs(detected) {
135
+ const first = detected[0];
136
+ return first
137
+ ? { version: 3, providers: [{ id: first.entry.id }], subagents: { active: [] } }
138
+ : null;
139
+ }
140
+ export const drainCommand = {
141
+ name: 'drain',
142
+ description: 'Continue runs another process left behind (one pass, then exit)',
143
+ passThrough: true,
144
+ help: [
145
+ 'Usage: namzu drain --store <dir> --tenant <id> --project <id> --session <id>',
146
+ '',
147
+ 'Take every run under that scope that no worker currently holds, continue',
148
+ 'it from its last checkpoint, and release it. One pass, then exit — namzu',
149
+ 'has no daemon, and this is a command your scheduler runs, not a service.',
150
+ '',
151
+ 'Options:',
152
+ ' --store <dir> The runs/ directory a checkpoint store writes to',
153
+ ' --tenant <id> Isolation boundary. Required; there is no default',
154
+ ' --project <id> Required — the disk layout carries no attribution',
155
+ ' --session <id> Required, same reason',
156
+ ' --holder <id> Who is taking the runs. Must be unique PER PROCESS',
157
+ ' --ttl <ms> Lease length (default 600000)',
158
+ ' --max-concurrent <n> Runs in flight at once (default 1)',
159
+ ' --cwd <path> Directory the resumed runs work in',
160
+ ' --provider <id> Provider to continue with',
161
+ ' --model <id> Model to continue with',
162
+ ' --trust Accept this folder for this pass',
163
+ '',
164
+ 'A run that is parked on a human decision is REPORTED, never resumed past.',
165
+ 'The answer belongs to a person; a drainer that continued without it would',
166
+ 'discard the question the run stopped to ask.',
167
+ '',
168
+ 'Exit codes: 0 when every run it took was continued, 1 when any run failed,',
169
+ '64 when an argument is wrong, 77 when the folder has not been trusted.',
170
+ ].join('\n'),
171
+ handler: async ({ ctx, rawArgs }) => {
172
+ const flags = parseDrainFlags(rawArgs);
173
+ if (flags.unknown.length > 0) {
174
+ ctx.formatter.error({ message: `unknown option(s): ${flags.unknown.join(', ')}` });
175
+ return EXIT_USAGE;
176
+ }
177
+ if (!flags.store) {
178
+ ctx.formatter.error({
179
+ message: '--store is required: name the runs/ directory the checkpoint store writes to. There is no default, because an empty queue and a directory nobody writes to would report the same thing.',
180
+ });
181
+ return EXIT_USAGE;
182
+ }
183
+ const scope = resolveDrainScope(flags);
184
+ if ('error' in scope) {
185
+ ctx.formatter.error({ message: scope.error });
186
+ return EXIT_USAGE;
187
+ }
188
+ const ttlMs = flags.ttlMs ?? DEFAULT_TTL_MS;
189
+ if (!Number.isFinite(ttlMs) || ttlMs <= 0) {
190
+ ctx.formatter.error({ message: `--ttl must be a positive number of ms, got ${flags.ttlMs}` });
191
+ return EXIT_USAGE;
192
+ }
193
+ const resolved = resolveWorkingDirectory(flags.cwd);
194
+ if ('error' in resolved) {
195
+ ctx.formatter.error({ message: resolved.error });
196
+ return EXIT_USAGE;
197
+ }
198
+ const trust = decideHeadlessTrust({ cwd: resolved.cwd, trustFlag: flags.trust });
199
+ if (!trust.allowed) {
200
+ ctx.formatter.error({ message: trust.message ?? 'folder not trusted' });
201
+ return EXIT_UNTRUSTED;
202
+ }
203
+ configureLogger({ level: 'silent' });
204
+ const { probeAgentSession, createAgentSession } = await import('../tui/agent.js');
205
+ const probe = await probeAgentSession();
206
+ let prefs = probe.preferences ?? defaultPrefs(probe.detected);
207
+ if (!prefs) {
208
+ ctx.formatter.error({
209
+ message: 'no LLM provider available — set a credential (e.g. ANTHROPIC_API_KEY) or run `namzu` to pick one',
210
+ });
211
+ return 1;
212
+ }
213
+ prefs = applyProviderFlags(prefs, flags);
214
+ const session = await createAgentSession(prefs, probe.detected, { cwd: resolved.cwd });
215
+ if (!session.hasProvider) {
216
+ await session.close();
217
+ ctx.formatter.error({ message: session.errorHint ?? 'agent is not ready' });
218
+ return 1;
219
+ }
220
+ // `resolveDrainScope` refuses a partial prefix above, so all three are
221
+ // present here; the store's attribution has no optional fields because
222
+ // a listing that guessed one would file runs under a project nobody
223
+ // named.
224
+ const store = new DiskCheckpointStore({ baseDir: flags.store }, {
225
+ tenantId: scope.tenantId,
226
+ projectId: scope.projectId,
227
+ sessionId: scope.sessionId,
228
+ });
229
+ const holder = flags.holder ?? defaultHolder();
230
+ const awaiting = [];
231
+ const empty = [];
232
+ try {
233
+ const result = await drainRuns({
234
+ store,
235
+ scope,
236
+ holder,
237
+ ttlMs,
238
+ ...(flags.maxConcurrent !== null ? { maxConcurrent: flags.maxConcurrent } : {}),
239
+ onRun: async (entry, claim) => {
240
+ ctx.formatter.info(`⏵ ${describe(entry)} · fence ${claim.fence}`);
241
+ const outcome = await session.resumeDurable({
242
+ entry,
243
+ checkpointStore: store,
244
+ // The reason the claim is handed over at all: every durable
245
+ // write this run makes carries it, so a drainer that stalled
246
+ // past its lease cannot overwrite whoever took over.
247
+ claimFence: claim.fence,
248
+ });
249
+ if (outcome.resumed) {
250
+ ctx.formatter.info(`✔ ${entry.runId} · ${outcome.run.status}`);
251
+ return;
252
+ }
253
+ // Reported, not resumed past. The two non-resumed outcomes mean
254
+ // opposite things and an operator has to be able to tell them
255
+ // apart: one is a question waiting on a person, the other is a
256
+ // run with nothing to continue.
257
+ if (outcome.reason === 'awaiting-decision') {
258
+ awaiting.push(entry.runId);
259
+ ctx.formatter.info(`⏸ ${entry.runId} · waiting on a human decision`);
260
+ }
261
+ else {
262
+ empty.push(entry.runId);
263
+ ctx.formatter.info(`∅ ${entry.runId} · no checkpoint to continue from`);
264
+ }
265
+ },
266
+ });
267
+ ctx.formatter.print({
268
+ listed: result.listed,
269
+ resumed: result.drained.filter((id) => !awaiting.includes(id) && !empty.includes(id))
270
+ .length,
271
+ awaitingDecision: awaiting,
272
+ noCheckpoint: empty,
273
+ heldByOthers: result.skipped,
274
+ alreadyHandled: result.stale,
275
+ failed: result.failed,
276
+ unreleased: result.unreleased,
277
+ });
278
+ for (const f of result.failed) {
279
+ ctx.formatter.error({ message: `${f.runId}: ${f.error}` });
280
+ }
281
+ // A drain that could not give a lease back is reported too. The work
282
+ // landed, but the run is unavailable to the next reader until the
283
+ // lease lapses, and an operator watching throughput needs to know.
284
+ for (const u of result.unreleased) {
285
+ ctx.formatter.error({ message: `${u.runId}: lease not released — ${u.error}` });
286
+ }
287
+ return result.failed.length > 0 ? 1 : 0;
288
+ }
289
+ catch (err) {
290
+ // The refusals from `drainRuns` land here: a store that cannot claim,
291
+ // a lease that cannot mean what it says. Reported rather than
292
+ // swallowed into an empty pass that reads as "nothing was parked".
293
+ ctx.formatter.error({ message: err instanceof Error ? err.message : String(err) });
294
+ return 1;
295
+ }
296
+ finally {
297
+ await session.close();
298
+ }
299
+ },
300
+ };
301
+ //# sourceMappingURL=drain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drain.js","sourceRoot":"","sources":["../../src/commands/drain.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@
18
18
  * a line-scanning host, so it emits an error event and exits 0. Each is the
19
19
  * only signal its caller is listening for.
20
20
  */
21
+ import type { ReviewAnswer } from '@namzu/sdk';
21
22
  import type { Preferences } from '../integrations/providers/index.js';
22
23
  export interface RunFlags {
23
24
  session: string | null;
@@ -45,6 +46,21 @@ export interface RunFlags {
45
46
  /** --resume <id>: pick up this conversation and no other. */
46
47
  resume: string | null;
47
48
  skills: string[];
49
+ /**
50
+ * `--gate '<command>'`, repeatable — commands that must pass before the
51
+ * run is allowed to settle.
52
+ *
53
+ * An ARRAY rather than a single value, and repeat-to-append rather than
54
+ * last-wins, because "typecheck AND test" is the ordinary case and a
55
+ * last-wins flag would silently drop the first one. Order is preserved:
56
+ * they run in the order given and stop at the first failure.
57
+ */
58
+ gates: string[];
59
+ /**
60
+ * `--gate-retries <n>`: how many times a failing gate may hand the answer
61
+ * back before the run stops with `answer_rejected`.
62
+ */
63
+ gateRetries: number | null;
48
64
  /**
49
65
  * `--flags` this parser does not know.
50
66
  *
@@ -83,6 +99,25 @@ export declare function resolveWorkingDirectory(raw: string | null): {
83
99
  * Best-effort: a skill that cannot be read costs its guidance, not the turn.
84
100
  */
85
101
  export declare function loadSkillsContext(cwd: string, names: readonly string[]): Promise<string | undefined>;
102
+ /**
103
+ * The `reviewAnswer` a `--gate` set implies, or `undefined` for no gates.
104
+ *
105
+ * Lives beside the parser for the reason at the top of this file: both
106
+ * headless commands take the same input, so both must build the same gate
107
+ * from it. A flag parsed by the shared parser and honoured by only one
108
+ * command is worse than a flag neither has — the operator gets a run that
109
+ * accepted `--gate` and settled on a red build, with nothing to read that
110
+ * says why.
111
+ *
112
+ * Returns the reviewer AND the rejection budget together, because the two
113
+ * have to agree: the gate stops executing after `maxRetries` and the run
114
+ * stops after `maxAnswerReviews`, and a run whose budget outlasts its gate
115
+ * spends its remaining turns being told the same thing.
116
+ */
117
+ export declare function buildGate(flags: Pick<RunFlags, 'gates' | 'gateRetries'>, cwd: string): {
118
+ reviewAnswer: ReviewAnswer;
119
+ maxAnswerReviews: number;
120
+ } | undefined;
86
121
  /** The `--flags` refusal message both commands use, so they word it the same. */
87
122
  export declare function unknownOptionMessage(unknown: readonly string[]): string;
88
123
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"run-flags.d.ts","sourceRoot":"","sources":["../../src/commands/run-flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,oCAAoC,CAAA;AAEjG,MAAM,WAAW,QAAQ;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,kFAAkF;IAClF,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,kFAAkF;IAClF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,yDAAyD;IACzD,eAAe,EAAE,OAAO,CAAA;IACxB;;;;;;;;;OASG;IACH,KAAK,EAAE,OAAO,CAAA;IACd,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAA;IACrB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,MAAM,EAAE,CAAA;CACd;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CA6IlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAS/F;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,MAAM,EAAE,GACtB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAc7B;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEvE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,GACzC,WAAW,CAiBb"}
1
+ {"version":3,"file":"run-flags.d.ts","sourceRoot":"","sources":["../../src/commands/run-flags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,OAAO,KAAK,EAAE,WAAW,EAA8B,MAAM,oCAAoC,CAAA;AAEjG,MAAM,WAAW,QAAQ;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,kFAAkF;IAClF,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,kFAAkF;IAClF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,yDAAyD;IACzD,eAAe,EAAE,OAAO,CAAA;IACxB;;;;;;;;;OASG;IACH,KAAK,EAAE,OAAO,CAAA;IACd,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAA;IACrB,6DAA6D;IAC7D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB;;;;;;;;OAQG;IACH,KAAK,EAAE,MAAM,EAAE,CAAA;IACf;;;OAGG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B;;;;;;;OAOG;IACH,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,IAAI,EAAE,MAAM,EAAE,CAAA;CACd;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAyKlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAS/F;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,SAAS,MAAM,EAAE,GACtB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAc7B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACxB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,CAAC,EAC9C,GAAG,EAAE,MAAM,GACT;IAAE,YAAY,EAAE,YAAY,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAUtE;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEvE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,GACzC,WAAW,CAiBb"}