@namzu/cli 27.0.0 → 28.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.
- package/CHANGELOG.md +76 -0
- package/README.md +24 -18
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +122 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/drain.js +2 -2
- package/dist/commands/drain.js.map +1 -1
- package/dist/commands/{run-flags.d.ts → exec-flags.d.ts} +29 -21
- package/dist/commands/exec-flags.d.ts.map +1 -0
- package/dist/commands/{run-flags.js → exec-flags.js} +31 -23
- package/dist/commands/exec-flags.js.map +1 -0
- package/dist/commands/{run-stream.d.ts → exec-json.d.ts} +20 -14
- package/dist/commands/exec-json.d.ts.map +1 -0
- package/dist/commands/exec-json.js +473 -0
- package/dist/commands/exec-json.js.map +1 -0
- package/dist/commands/{run.d.ts → exec.d.ts} +14 -13
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +683 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/host-queries.d.ts +12 -0
- package/dist/commands/host-queries.d.ts.map +1 -0
- package/dist/commands/host-queries.js +149 -0
- package/dist/commands/host-queries.js.map +1 -0
- package/dist/commands/prior-messages.js +1 -1
- package/dist/commands/prior-messages.js.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +2 -0
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/resident-flags.d.ts +2 -2
- package/dist/commands/resident-flags.d.ts.map +1 -1
- package/dist/commands/resident-flags.js +4 -2
- package/dist/commands/resident-flags.js.map +1 -1
- package/dist/commands/resident-learning.js +1 -1
- package/dist/commands/resident-learning.js.map +1 -1
- package/dist/commands/resident.js +1 -1
- package/dist/commands/resident.js.map +1 -1
- package/dist/commands/skills.js +1 -1
- package/dist/commands/skills.js.map +1 -1
- package/dist/commands/stdin.d.ts +5 -5
- package/dist/commands/stdin.js +5 -5
- package/dist/commands/types.d.ts +2 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +19 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +18 -4
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/config/{run-limits.d.ts → turn-guards.d.ts} +1 -1
- package/dist/config/turn-guards.d.ts.map +1 -0
- package/dist/config/{run-limits.js → turn-guards.js} +1 -1
- package/dist/config/turn-guards.js.map +1 -0
- package/dist/context/project.d.ts +1 -1
- package/dist/context/project.js +1 -1
- package/dist/doctor/checks/chain.js +2 -2
- package/dist/doctor/checks/chain.js.map +1 -1
- package/dist/integrations/providers/access.d.ts +4 -1
- package/dist/integrations/providers/access.d.ts.map +1 -1
- package/dist/integrations/providers/access.js +6 -3
- package/dist/integrations/providers/access.js.map +1 -1
- package/dist/integrations/providers/zen-catalogue.d.ts +100 -0
- package/dist/integrations/providers/zen-catalogue.d.ts.map +1 -0
- package/dist/integrations/providers/zen-catalogue.js +196 -0
- package/dist/integrations/providers/zen-catalogue.js.map +1 -0
- package/dist/integrations/resident/runner-launch.d.ts +3 -3
- package/dist/integrations/resident/runner-launch.d.ts.map +1 -1
- package/dist/integrations/resident/runner-worker.js +22 -0
- package/dist/integrations/resident/runner-worker.js.map +1 -1
- package/dist/integrations/resident/session-step.d.ts +2 -2
- package/dist/integrations/resident/session-step.d.ts.map +1 -1
- package/dist/integrations/resident/session-step.js +1 -1
- package/dist/integrations/resident/session-step.js.map +1 -1
- package/dist/integrations/sessions/transcript-export.js +3 -1
- package/dist/integrations/sessions/transcript-export.js.map +1 -1
- package/dist/integrations/subagents/runtime.d.ts.map +1 -1
- package/dist/integrations/subagents/runtime.js +1 -1
- package/dist/integrations/subagents/runtime.js.map +1 -1
- package/dist/integrations/web/search.d.ts +1 -1
- package/dist/logging.d.ts +5 -5
- package/dist/logging.js +6 -6
- package/dist/permissions/headless-trust.d.ts +2 -2
- package/dist/permissions/headless-trust.js +3 -3
- package/dist/permissions/headless-trust.js.map +1 -1
- package/dist/permissions/live-mode.d.ts +73 -0
- package/dist/permissions/live-mode.d.ts.map +1 -0
- package/dist/permissions/live-mode.js +62 -0
- package/dist/permissions/live-mode.js.map +1 -0
- package/dist/termination.d.ts +1 -1
- package/dist/termination.js +1 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +181 -79
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Checklist.d.ts +56 -0
- package/dist/tui/Checklist.d.ts.map +1 -0
- package/dist/tui/Checklist.js +90 -0
- package/dist/tui/Checklist.js.map +1 -0
- package/dist/tui/StatusBar.d.ts +10 -0
- package/dist/tui/StatusBar.d.ts.map +1 -1
- package/dist/tui/StatusBar.js +8 -1
- package/dist/tui/StatusBar.js.map +1 -1
- package/dist/tui/TaskList.d.ts +18 -25
- package/dist/tui/TaskList.d.ts.map +1 -1
- package/dist/tui/TaskList.js +34 -58
- package/dist/tui/TaskList.js.map +1 -1
- package/dist/tui/Transcript.d.ts.map +1 -1
- package/dist/tui/Transcript.js +8 -1
- package/dist/tui/Transcript.js.map +1 -1
- package/dist/tui/agent.d.ts +33 -7
- package/dist/tui/agent.d.ts.map +1 -1
- package/dist/tui/agent.js +51 -9
- package/dist/tui/agent.js.map +1 -1
- package/dist/tui/live-window.d.ts +22 -0
- package/dist/tui/live-window.d.ts.map +1 -1
- package/dist/tui/live-window.js +34 -0
- package/dist/tui/live-window.js.map +1 -1
- package/dist/tui/notices.d.ts +27 -0
- package/dist/tui/notices.d.ts.map +1 -0
- package/dist/tui/notices.js +27 -0
- package/dist/tui/notices.js.map +1 -0
- package/dist/tui/slashCommands.d.ts +1 -1
- package/dist/tui/slashCommands.js +5 -5
- package/dist/tui/slashCommands.js.map +1 -1
- package/dist/tui/status-panel-layout.js +1 -1
- package/dist/tui/status-panel-layout.js.map +1 -1
- package/dist/tui/task-activity.d.ts +71 -0
- package/dist/tui/task-activity.d.ts.map +1 -0
- package/dist/tui/task-activity.js +157 -0
- package/dist/tui/task-activity.js.map +1 -0
- package/dist/tui/turn-limits-settings.d.ts +1 -1
- package/dist/tui/turn-limits-settings.d.ts.map +1 -1
- package/dist/tui/turn-limits-settings.js +1 -1
- package/dist/tui/turn-limits-settings.js.map +1 -1
- package/dist/tui/types.d.ts +13 -0
- package/dist/tui/types.d.ts.map +1 -1
- package/dist/user-commands/store.d.ts +3 -3
- package/dist/user-commands/store.js +4 -4
- package/dist/user-commands/store.js.map +1 -1
- package/package.json +6 -6
- package/dist/commands/run-flags.d.ts.map +0 -1
- package/dist/commands/run-flags.js.map +0 -1
- package/dist/commands/run-stream.d.ts.map +0 -1
- package/dist/commands/run-stream.js +0 -647
- package/dist/commands/run-stream.js.map +0 -1
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -617
- package/dist/commands/run.js.map +0 -1
- package/dist/config/run-limits.d.ts.map +0 -1
- package/dist/config/run-limits.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-stream.js","sourceRoot":"","sources":["../../src/commands/run-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAmCH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMrE;AAoCD,eAAO,MAAM,UAAU,EAAE,UAuiBxB,CAAA"}
|
package/dist/commands/run.js
DELETED
|
@@ -1,617 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `namzu run "<prompt>"` — headless one-shot. Runs a single prompt through
|
|
3
|
-
* the same agent the TUI uses and prints the reply to stdout, for scripts
|
|
4
|
-
* and CI. The prompt comes from
|
|
5
|
-
* the arguments, or from stdin when piped. Status lines go to stderr (info,
|
|
6
|
-
* suppressed by `--quiet`); only the answer hits stdout.
|
|
7
|
-
*
|
|
8
|
-
* Non-interactive, so there's no approval prompt — tools auto-run, but the
|
|
9
|
-
* safety gate still hard-denies catastrophic commands. A one-shot is a
|
|
10
|
-
* conversation like any other: its session log is kept under the project in
|
|
11
|
-
* `NAMZU_HOME`, so `--continue` picks it up and `namzu drain` can finish a
|
|
12
|
-
* turn it parked.
|
|
13
|
-
*
|
|
14
|
-
* Options are parsed, not spoken: this command joined every argument into the
|
|
15
|
-
* prompt, so the flags its streaming sibling accepts — `--cwd` above all —
|
|
16
|
-
* were read aloud to the model while the turn used this directory anyway. Both
|
|
17
|
-
* commands now share one parser (`./run-flags.js`), because they are the same
|
|
18
|
-
* one-shot differing only in how they print.
|
|
19
|
-
*/
|
|
20
|
-
import { relative } from 'node:path';
|
|
21
|
-
import { BOOT_EVENT_NAMES, EVENT_NAME_ATTRIBUTE, TurnCancelled, asSessionId } from '@namzu/sdk';
|
|
22
|
-
import { resolveTrustedProjectContext } from '../config/trusted-project-context.js';
|
|
23
|
-
import { EXIT_UNTRUSTED, EXIT_USAGE } from '../exit-codes.js';
|
|
24
|
-
import { closeSessions, openSessions, startConversation } from '../integrations/sessions/store.js';
|
|
25
|
-
import { attachSessionExport, } from '../integrations/telemetry/session-export.js';
|
|
26
|
-
import { cliLogger, contextLogging, createStderrSink, installCliLogging } from '../logging.js';
|
|
27
|
-
import { decideHeadlessTrust } from '../permissions/headless-trust.js';
|
|
28
|
-
import { resolvePermissionMode } from '../permissions/mode.js';
|
|
29
|
-
import { compilePermissions } from '../permissions/rules.js';
|
|
30
|
-
import { withTerminationHandling } from '../termination.js';
|
|
31
|
-
import { hostCommandNames } from '../tui/slashCommands.js';
|
|
32
|
-
import { describeTurnInterruption, retryAfterMs } from '../tui/turn-interruption.js';
|
|
33
|
-
import { expandHeadlessCommand } from '../user-commands/store.js';
|
|
34
|
-
import { duration, pauseWait } from './provider-wait.js';
|
|
35
|
-
import { resolveResume } from './resume.js';
|
|
36
|
-
import { applyProviderFlags, buildGate, loadSkillsContext, parseRunFlags, resolveWorkingDirectory, unknownOptionMessage, } from './run-flags.js';
|
|
37
|
-
import { readStdin } from './stdin.js';
|
|
38
|
-
/**
|
|
39
|
-
* The prompt, from the arguments and the pipe together.
|
|
40
|
-
*
|
|
41
|
-
* Piped input used to be read only when there was no argument prompt, so
|
|
42
|
-
*
|
|
43
|
-
* cat notes.txt | namzu run "summarise this"
|
|
44
|
-
*
|
|
45
|
-
* sent the model three words and silently dropped the file. Nothing reported
|
|
46
|
-
* it: the turn succeeded, and the answer was about nothing. A pipe and a
|
|
47
|
-
* question are the ordinary way to ask about a document, and taking only one
|
|
48
|
-
* of the two is the worst reading of that command.
|
|
49
|
-
*
|
|
50
|
-
* The piped text is fenced in a tag so the model can tell the instruction from
|
|
51
|
-
* the material it is about — without a boundary, a long paste runs into the
|
|
52
|
-
* question and the last line of a file reads as part of the request.
|
|
53
|
-
*
|
|
54
|
-
* Pure so it can be tested without a pipe; the reading happens in the handler.
|
|
55
|
-
*/
|
|
56
|
-
export function composePrompt(fromArgs, piped) {
|
|
57
|
-
const question = fromArgs.trim();
|
|
58
|
-
const material = piped.trim();
|
|
59
|
-
if (!question)
|
|
60
|
-
return material;
|
|
61
|
-
if (!material)
|
|
62
|
-
return question;
|
|
63
|
-
return `${question}\n\n<stdin>\n${material}\n</stdin>`;
|
|
64
|
-
}
|
|
65
|
-
function defaultPrefs(detected) {
|
|
66
|
-
const first = detected[0];
|
|
67
|
-
return first
|
|
68
|
-
? {
|
|
69
|
-
version: 3,
|
|
70
|
-
providers: [{ id: first.entry.id }],
|
|
71
|
-
subagents: { active: [] },
|
|
72
|
-
}
|
|
73
|
-
: null;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* What `run` prints on stderr when a termination signal stops it, worded from
|
|
77
|
-
* where the signal found the turn (`termination.ts` has already given the
|
|
78
|
-
* conversation's lease back).
|
|
79
|
-
*/
|
|
80
|
-
function stoppedBy(signal, sessionId, phase, paused) {
|
|
81
|
-
switch (phase) {
|
|
82
|
-
case 'running':
|
|
83
|
-
return `stopped by ${signal}: the turn in conversation ${sessionId} was left interrupted — close it with /abandon in the TUI, or continue it with /resume or \`namzu drain\``;
|
|
84
|
-
case 'paused':
|
|
85
|
-
return `stopped by ${signal} while the turn was paused: it keeps checkpoint ${paused?.checkpointId ?? '(unknown)'} in conversation ${sessionId} — continue it with /resume or \`namzu drain\`, or close it with /abandon in the TUI`;
|
|
86
|
-
case 'ended':
|
|
87
|
-
return `stopped by ${signal} after the turn ended; it is recorded in conversation ${sessionId}, and nothing is left to close`;
|
|
88
|
-
case 'not-started':
|
|
89
|
-
return `stopped by ${signal}; no turn was started in conversation ${sessionId}`;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
export const runCommand = {
|
|
93
|
-
name: 'run',
|
|
94
|
-
description: 'Run a single prompt headlessly and print the reply (for scripts/CI)',
|
|
95
|
-
passThrough: true,
|
|
96
|
-
help: [
|
|
97
|
-
'Usage: namzu run [options] <prompt...>',
|
|
98
|
-
' echo "<prompt>" | namzu run',
|
|
99
|
-
' cat file.txt | namzu run "summarise this"',
|
|
100
|
-
'',
|
|
101
|
-
'Run a single prompt headlessly and print the reply. Everything that is',
|
|
102
|
-
'not an option is the prompt.',
|
|
103
|
-
'',
|
|
104
|
-
'Piped input is used too, not discarded: with no prompt argument it IS',
|
|
105
|
-
'the prompt, and alongside one it is appended as material the question',
|
|
106
|
-
'is about. `namzu run -` reads the prompt from stdin explicitly.',
|
|
107
|
-
'',
|
|
108
|
-
'Options (the same ones run-stream takes):',
|
|
109
|
-
' --cwd <path> Directory the agent works in (default: this one)',
|
|
110
|
-
' --provider <id> Provider to answer with',
|
|
111
|
-
' --model <id> Model to answer with',
|
|
112
|
-
' --skills <a,b,c> Load these skills as context for the turn',
|
|
113
|
-
' --continue, -c Resume the most recent conversation here',
|
|
114
|
-
' --resume <id> Resume that conversation, and no other',
|
|
115
|
-
' --gate <command> Verify proposed answers with this command; repeatable',
|
|
116
|
-
' --gate-retries <n> Fix attempts a failing gate allows (default 3)',
|
|
117
|
-
' --max-iterations <n> Main-loop iteration limit (default 50; 0 unlimited)',
|
|
118
|
-
' --token-budget <n> Tree token limit (default unlimited; 0 removes a configured cap)',
|
|
119
|
-
' --effort <level> Explicit reasoning effort (supported levels depend on the model)',
|
|
120
|
-
' --wait-for-provider <d> Wait out provider pauses (a rate limit, an outage)',
|
|
121
|
-
' for up to this long in total — 90s, 30m, 2h — resuming',
|
|
122
|
-
' from the checkpoint each time (default: none; exit 75)',
|
|
123
|
-
' --permission-mode <m> prompt | accept-edits | auto | strict | plan —',
|
|
124
|
-
' what happens to a call no [permissions] rule',
|
|
125
|
-
' decided (default: auto)',
|
|
126
|
-
' --trust Accept this folder for THIS turn',
|
|
127
|
-
' -- End of options; the rest is the prompt verbatim',
|
|
128
|
-
'',
|
|
129
|
-
'A folder has to be trusted before namzu will work in it, because namzu',
|
|
130
|
-
'reads its files, runs commands in it and executes its code. Run `namzu`',
|
|
131
|
-
'here once and accept the prompt to trust it permanently, or pass --trust',
|
|
132
|
-
'to accept it for one turn. --trust does not remember; that is the point.',
|
|
133
|
-
'',
|
|
134
|
-
'--yolo does NOT imply --trust: one is about which tools may run inside a',
|
|
135
|
-
'folder, the other about the folder.',
|
|
136
|
-
'',
|
|
137
|
-
'By default tools run without asking, because there is nobody to ask, and',
|
|
138
|
-
'the safety gate still refuses catastrophic commands. Use --permission-mode',
|
|
139
|
-
'strict for an unattended turn that must refuse anything no rule allowed.',
|
|
140
|
-
'',
|
|
141
|
-
'A mode only decides calls no rule decided: it can never reopen a deny.',
|
|
142
|
-
'',
|
|
143
|
-
'--gate checks proposed answers with operator-supplied commands. Every',
|
|
144
|
-
'command must complete successfully; a failure returns diagnostics to the',
|
|
145
|
-
'model for correction. Repeat the flag to check several commands in order.',
|
|
146
|
-
'Budget exhaustion or cancellation may stop a turn before verification.',
|
|
147
|
-
'',
|
|
148
|
-
'A failed gate may skip a retry when its Git change detector is unchanged.',
|
|
149
|
-
'The attempt still counts. Exhausted review attempts stop the turn with',
|
|
150
|
-
'answer_rejected and a non-zero exit.',
|
|
151
|
-
'',
|
|
152
|
-
"The working directory's AGENTS.md files — that directory and every one up",
|
|
153
|
-
'to the repository root — are loaded as standing instructions for the turn,',
|
|
154
|
-
'and the ones that were loaded are named on stderr.',
|
|
155
|
-
'',
|
|
156
|
-
'--continue and --resume refuse when the conversation cannot be reopened,',
|
|
157
|
-
'and say why. Neither ever falls back to starting a new one: run with no',
|
|
158
|
-
'flag if that is what you want.',
|
|
159
|
-
'',
|
|
160
|
-
'Needs a provider. Set a credential in the environment, or run namzu',
|
|
161
|
-
'once to pick one interactively.',
|
|
162
|
-
'',
|
|
163
|
-
'A run the provider pauses keeps a checkpoint. Without --wait-for-provider',
|
|
164
|
-
'it exits 75 at once and a wrapper decides when to run again; with it, the',
|
|
165
|
-
"run waits the provider's own delay when it named one (otherwise a minute,",
|
|
166
|
-
'doubling, at most fifteen) and resumes from the checkpoint in this process,',
|
|
167
|
-
'until the budget is spent. The `limits.waitForProviderMs` config key sets',
|
|
168
|
-
'the same budget for every turn in the folder.',
|
|
169
|
-
'',
|
|
170
|
-
'Exit codes: 0 on a reply, 1 on a failed or unfinished turn, 2 when no',
|
|
171
|
-
'prompt was supplied, 64 when an argument is wrong, 75 when the provider',
|
|
172
|
-
'paused the turn (a rate limit or an outage) and a checkpoint was kept —',
|
|
173
|
-
'wait, then run again — or when the conversation already has an active',
|
|
174
|
-
'turn (a paused one: finish it with `namzu drain`, or abandon it in the',
|
|
175
|
-
'TUI with /abandon), and 77 when the folder has not been trusted and',
|
|
176
|
-
'nothing ran.',
|
|
177
|
-
].join('\n'),
|
|
178
|
-
handler: withTerminationHandling(async ({ ctx: bootstrapCtx, rawArgs }, termination) => {
|
|
179
|
-
let ctx = bootstrapCtx;
|
|
180
|
-
const flags = parseRunFlags(rawArgs);
|
|
181
|
-
// The turn's leash: the config file's limits, with a flag overriding each.
|
|
182
|
-
const limitsFromFlags = {
|
|
183
|
-
...(flags.maxIterations !== null ? { maxIterations: flags.maxIterations } : {}),
|
|
184
|
-
...(flags.tokenBudget !== null ? { tokenBudget: flags.tokenBudget } : {}),
|
|
185
|
-
};
|
|
186
|
-
if (flags.unknown.length > 0) {
|
|
187
|
-
// A shell caller learns about a bad argument from `$?`, so this is 64
|
|
188
|
-
// rather than the in-band error event the streaming sibling emits.
|
|
189
|
-
ctx.formatter.error({ message: unknownOptionMessage(flags.unknown) });
|
|
190
|
-
return EXIT_USAGE;
|
|
191
|
-
}
|
|
192
|
-
// `-` on its own means "the prompt is on stdin", the usual spelling for
|
|
193
|
-
// it. Before, it was sent to the model as a one-character question.
|
|
194
|
-
const fromArgs = flags.rest.join(' ').trim() === '-' ? '' : flags.rest.join(' ').trim();
|
|
195
|
-
// With no prompt argument, piped input IS the prompt and is waited for
|
|
196
|
-
// as long as it takes — that is the existing contract for `echo … |
|
|
197
|
-
// namzu run` and for the `-` sentinel. Alongside a prompt it is extra
|
|
198
|
-
// material, so it gets the first-byte deadline instead: a caller who
|
|
199
|
-
// asked a complete question should never be left waiting on a pipe
|
|
200
|
-
// they did not mean to open.
|
|
201
|
-
const piped = await readStdin({ deadline: Boolean(fromArgs) });
|
|
202
|
-
const prompt = composePrompt(fromArgs, piped);
|
|
203
|
-
if (!prompt) {
|
|
204
|
-
ctx.formatter.error({
|
|
205
|
-
message: 'no prompt — pass it as an argument or pipe it via stdin',
|
|
206
|
-
});
|
|
207
|
-
return 2;
|
|
208
|
-
}
|
|
209
|
-
const resolved = resolveWorkingDirectory(flags.cwd);
|
|
210
|
-
if ('error' in resolved) {
|
|
211
|
-
ctx.formatter.error({ message: resolved.error });
|
|
212
|
-
return EXIT_USAGE;
|
|
213
|
-
}
|
|
214
|
-
// Before anything is read, run or constructed in that directory. The
|
|
215
|
-
// order is the gate: a check that happens after the session is built has
|
|
216
|
-
// already opened stores and walked the tree it was meant to protect.
|
|
217
|
-
const trust = decideHeadlessTrust({
|
|
218
|
-
cwd: resolved.cwd,
|
|
219
|
-
trustFlag: flags.trust,
|
|
220
|
-
});
|
|
221
|
-
if (!trust.allowed) {
|
|
222
|
-
ctx.formatter.error({ message: trust.message ?? 'folder not trusted' });
|
|
223
|
-
return EXIT_UNTRUSTED;
|
|
224
|
-
}
|
|
225
|
-
const cwd = trust.cwd;
|
|
226
|
-
ctx = resolveTrustedProjectContext(bootstrapCtx, cwd);
|
|
227
|
-
// Project commands are code-like launch authority: discover and expand
|
|
228
|
-
// them only after the target folder has crossed the same trust boundary
|
|
229
|
-
// as its config and instructions.
|
|
230
|
-
const expansion = expandHeadlessCommand(prompt, {
|
|
231
|
-
cwd,
|
|
232
|
-
builtins: hostCommandNames(),
|
|
233
|
-
});
|
|
234
|
-
if (expansion.kind === 'refused') {
|
|
235
|
-
ctx.formatter.error({ message: expansion.reason });
|
|
236
|
-
return EXIT_USAGE;
|
|
237
|
-
}
|
|
238
|
-
const finalPrompt = expansion.kind === 'expanded' ? expansion.prompt : prompt;
|
|
239
|
-
// The CLI owns stderr, not the kernel it drives (LOG-05) — a live sink
|
|
240
|
-
// at the level --verbose/--quiet/NAMZU_LOG_LEVEL named, instead of
|
|
241
|
-
// forcing the level to `silent` via `configureLogger`, which threw
|
|
242
|
-
// every diagnostic away regardless of what anyone asked for.
|
|
243
|
-
// `{ replace: true }`: a real invocation calls this once, but this
|
|
244
|
-
// package's own test suite calls a command's handler more than once
|
|
245
|
-
// per process, which a refusing second install would break for
|
|
246
|
-
// reasons that have nothing to do with what those tests are about.
|
|
247
|
-
const logging = contextLogging(ctx);
|
|
248
|
-
installCliLogging(createStderrSink(logging.format), logging.level);
|
|
249
|
-
const { probeAgentSession, createAgentSession } = await import('../tui/agent.js');
|
|
250
|
-
const probe = await probeAgentSession();
|
|
251
|
-
let prefs = probe.preferences ?? defaultPrefs(probe.detected);
|
|
252
|
-
if (!prefs) {
|
|
253
|
-
ctx.formatter.error({
|
|
254
|
-
message: 'no LLM provider available — set a credential (e.g. ANTHROPIC_API_KEY) or run `namzu` to pick one',
|
|
255
|
-
});
|
|
256
|
-
return 1;
|
|
257
|
-
}
|
|
258
|
-
prefs = applyProviderFlags(prefs, flags);
|
|
259
|
-
// A permission the operator wrote and which was silently dropped is the
|
|
260
|
-
// worst outcome available here: they believe a control is in force and it
|
|
261
|
-
// is not. So a bad line is reported and the rest still load.
|
|
262
|
-
const modeResult = resolvePermissionMode({
|
|
263
|
-
flag: flags.permissionMode,
|
|
264
|
-
skipPermissions: flags.skipPermissions,
|
|
265
|
-
// A headless run has nobody to ask, so `prompt` here would silently
|
|
266
|
-
// become `auto`. Resolving it as `auto` says so instead.
|
|
267
|
-
interactive: false,
|
|
268
|
-
});
|
|
269
|
-
if ('error' in modeResult) {
|
|
270
|
-
ctx.formatter.error({ message: modeResult.error });
|
|
271
|
-
return EXIT_USAGE;
|
|
272
|
-
}
|
|
273
|
-
const permissions = compilePermissions(ctx.config.permissions, ctx.config.permissionChecks);
|
|
274
|
-
for (const d of permissions.diagnostics) {
|
|
275
|
-
const where = d.pattern ? `permissions.${d.tool}."${d.pattern}"` : `permissions.${d.tool}`;
|
|
276
|
-
ctx.formatter.error({ message: `${where}: ${d.message}` });
|
|
277
|
-
}
|
|
278
|
-
const gate = buildGate(flags, cwd);
|
|
279
|
-
// Attached BEFORE the session, and its failure is fatal. An operator who
|
|
280
|
-
// configured `telemetry.sessionExport` asked for this turn to be
|
|
281
|
-
// recorded; continuing without it means the turn happens and the record
|
|
282
|
-
// they were counting on does not exist, which is a failure they only
|
|
283
|
-
// discover when they go looking for a session that was never written.
|
|
284
|
-
let sessionExport;
|
|
285
|
-
if (ctx.config.telemetry?.sessionExport) {
|
|
286
|
-
try {
|
|
287
|
-
sessionExport = await attachSessionExport({
|
|
288
|
-
config: ctx.config.telemetry.sessionExport,
|
|
289
|
-
});
|
|
290
|
-
// Under the same event name the boot narrative used for the
|
|
291
|
-
// boolean. This is the half that names the destination and the
|
|
292
|
-
// redactors, and it is emitted HERE because it describes what
|
|
293
|
-
// actually resolved rather than what was configured.
|
|
294
|
-
cliLogger().info(sessionExport.disclosure, {
|
|
295
|
-
[EVENT_NAME_ATTRIBUTE]: BOOT_EVENT_NAMES.TELEMETRY_STATUS,
|
|
296
|
-
'namzu.telemetry.session_export': true,
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
catch (err) {
|
|
300
|
-
ctx.formatter.error({
|
|
301
|
-
message: err instanceof Error ? err.message : String(err),
|
|
302
|
-
});
|
|
303
|
-
return 1;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
let sessions;
|
|
307
|
-
try {
|
|
308
|
-
sessions = await openSessions(cwd);
|
|
309
|
-
}
|
|
310
|
-
catch (error) {
|
|
311
|
-
await sessionExport?.shutdown();
|
|
312
|
-
ctx.formatter.error({
|
|
313
|
-
message: `workspace state is unavailable: ${error instanceof Error ? error.message : String(error)}`,
|
|
314
|
-
});
|
|
315
|
-
return 1;
|
|
316
|
-
}
|
|
317
|
-
const resume = await resolveResume(sessions, { continueLast: flags.continueLast, sessionId: flags.resume }, cwd);
|
|
318
|
-
if (resume.kind === 'error') {
|
|
319
|
-
ctx.formatter.error({ message: resume.message });
|
|
320
|
-
await sessionExport?.shutdown();
|
|
321
|
-
return EXIT_USAGE;
|
|
322
|
-
}
|
|
323
|
-
const prior = resume.kind === 'resumed' ? resume.messages : [];
|
|
324
|
-
// A new one-shot is a new conversation: its log starts here, so the turn
|
|
325
|
-
// the kernel records has somewhere to go and `--continue` can find it.
|
|
326
|
-
let sessionId;
|
|
327
|
-
try {
|
|
328
|
-
sessionId =
|
|
329
|
-
resume.kind === 'resumed'
|
|
330
|
-
? asSessionId(resume.sessionId)
|
|
331
|
-
: await startConversation(sessions);
|
|
332
|
-
}
|
|
333
|
-
catch (error) {
|
|
334
|
-
closeSessions(sessions);
|
|
335
|
-
await sessionExport?.shutdown();
|
|
336
|
-
ctx.formatter.error({
|
|
337
|
-
message: `could not start a conversation: ${error instanceof Error ? error.message : String(error)}`,
|
|
338
|
-
});
|
|
339
|
-
return 1;
|
|
340
|
-
}
|
|
341
|
-
const session = await createAgentSession(prefs, probe.detected, {
|
|
342
|
-
cwd,
|
|
343
|
-
scope: {
|
|
344
|
-
sessionId,
|
|
345
|
-
topicId: sessions.topicId,
|
|
346
|
-
projectId: sessions.projectId,
|
|
347
|
-
tenantId: sessions.tenantId,
|
|
348
|
-
},
|
|
349
|
-
stateRoot: sessions.root,
|
|
350
|
-
conversationSessions: sessions,
|
|
351
|
-
rules: permissions.rules,
|
|
352
|
-
...(sessionExport ? { onSessionEvent: sessionExport.listener } : {}),
|
|
353
|
-
// The operator's --gate commands, as a standing condition on the
|
|
354
|
-
// answer. Spread rather than passed as undefined so a turn without
|
|
355
|
-
// gates is byte-identical to the one that shipped before them.
|
|
356
|
-
...(gate ?? {}),
|
|
357
|
-
permissionMode: modeResult.mode,
|
|
358
|
-
...(ctx.config.mcpServers ? { mcpServers: ctx.config.mcpServers } : {}),
|
|
359
|
-
...(ctx.config.plugins ? { plugins: ctx.config.plugins } : {}),
|
|
360
|
-
...(ctx.config.web ? { web: ctx.config.web } : {}),
|
|
361
|
-
...(ctx.config.hooks ? { hooks: ctx.config.hooks } : {}),
|
|
362
|
-
...(ctx.config.compaction ? { compaction: ctx.config.compaction } : {}),
|
|
363
|
-
...(ctx.config.memory ? { memory: ctx.config.memory } : {}),
|
|
364
|
-
...(Object.keys({ ...ctx.config.limits, ...limitsFromFlags }).length > 0
|
|
365
|
-
? { limits: { ...ctx.config.limits, ...limitsFromFlags } }
|
|
366
|
-
: {}),
|
|
367
|
-
...(ctx.config.sandbox ? { sandbox: ctx.config.sandbox } : {}),
|
|
368
|
-
// `!== undefined`, not truthiness: an empty list is the operator
|
|
369
|
-
// turning the default screen OFF, and a falsy check would drop it.
|
|
370
|
-
...(ctx.config.toolResultScreens !== undefined
|
|
371
|
-
? { toolResultScreens: ctx.config.toolResultScreens }
|
|
372
|
-
: {}),
|
|
373
|
-
});
|
|
374
|
-
if (!session.hasProvider) {
|
|
375
|
-
await session.close();
|
|
376
|
-
closeSessions(sessions);
|
|
377
|
-
await sessionExport?.shutdown();
|
|
378
|
-
ctx.formatter.error({
|
|
379
|
-
message: session.errorHint ?? 'agent is not ready',
|
|
380
|
-
});
|
|
381
|
-
return 1;
|
|
382
|
-
}
|
|
383
|
-
// A configured tool server that is not here means the turn cannot do what
|
|
384
|
-
// the operator set it up to do, and there is nobody watching to notice.
|
|
385
|
-
// The TUI reports and carries on, because a person can read the line and
|
|
386
|
-
// decide; a script has no such reader, so it refuses. Same principle as
|
|
387
|
-
// the permission mode resolving differently when `interactive` is false.
|
|
388
|
-
if (session.mcpFailed.length > 0) {
|
|
389
|
-
for (const f of session.mcpFailed) {
|
|
390
|
-
ctx.formatter.error({
|
|
391
|
-
message: `tool server "${f.name}" is not available: ${f.reason}`,
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
await session.close();
|
|
395
|
-
closeSessions(sessions);
|
|
396
|
-
await sessionExport?.shutdown();
|
|
397
|
-
return 1;
|
|
398
|
-
}
|
|
399
|
-
// "Printed on every launch" has to mean every launch, not every launch of
|
|
400
|
-
// the TUI. A scripted run under an accepted capability limitation is
|
|
401
|
-
// exactly the case where nobody is watching, so the line has to be in the
|
|
402
|
-
// output the script keeps.
|
|
403
|
-
for (const notice of session.configNotices) {
|
|
404
|
-
ctx.formatter.info(notice);
|
|
405
|
-
}
|
|
406
|
-
for (const s of session.mcpConnected) {
|
|
407
|
-
ctx.formatter.info(`tool server ${s.name} · ${s.toolCount} tools`);
|
|
408
|
-
}
|
|
409
|
-
ctx.formatter.info(`namzu · ${session.providerSummary}${session.modelSummary ? ` · ${session.modelSummary}` : ''}`);
|
|
410
|
-
// stderr like every other status line, so a caller piping the answer is
|
|
411
|
-
// unaffected and a person watching can still tell which instructions the
|
|
412
|
-
// run is bound by. A script that reads AGENTS.md aloud is not a script
|
|
413
|
-
// whose output changed.
|
|
414
|
-
if (session.instructionFiles.length > 0) {
|
|
415
|
-
ctx.formatter.info(`project instructions: ${session.instructionFiles
|
|
416
|
-
.map((p) => relative(cwd, p) || p)
|
|
417
|
-
.join(', ')}`);
|
|
418
|
-
}
|
|
419
|
-
// A refusal that says nothing is indistinguishable from a project that
|
|
420
|
-
// declared nothing, and the two want opposite responses from the reader.
|
|
421
|
-
for (const skip of session.skippedInstructionFiles) {
|
|
422
|
-
ctx.formatter.error({
|
|
423
|
-
message: `skipped ${relative(cwd, skip.path) || skip.path}: ${skip.reason}`,
|
|
424
|
-
});
|
|
425
|
-
}
|
|
426
|
-
const extraSystem = await loadSkillsContext(cwd, flags.skills);
|
|
427
|
-
if (resume.kind === 'resumed') {
|
|
428
|
-
ctx.formatter.info(`resuming ${resume.sessionId} · ${prior.length} messages`);
|
|
429
|
-
}
|
|
430
|
-
let text = '';
|
|
431
|
-
const measured = {};
|
|
432
|
-
const jsonResult = (value) => ({
|
|
433
|
-
text: value,
|
|
434
|
-
...(measured.usage
|
|
435
|
-
? {
|
|
436
|
-
usage: {
|
|
437
|
-
totalTokens: measured.usage.totalTokens,
|
|
438
|
-
cost: measured.usage.cost,
|
|
439
|
-
},
|
|
440
|
-
}
|
|
441
|
-
: {}),
|
|
442
|
-
...(measured.budget ? { budget: measured.budget } : {}),
|
|
443
|
-
});
|
|
444
|
-
let stopReason;
|
|
445
|
-
// Written from inside `consume`, so held on an object: a `let` assigned
|
|
446
|
-
// only in a closure is `null` as far as the type checker can see, and
|
|
447
|
-
// every read after the loop would narrow it to `never`.
|
|
448
|
-
const stop = {
|
|
449
|
-
failed: null,
|
|
450
|
-
paused: null,
|
|
451
|
-
busy: false,
|
|
452
|
-
};
|
|
453
|
-
// Stopped from outside (SIGTERM, SIGHUP, Ctrl+C): the conversation's
|
|
454
|
-
// lease is already given back when this runs (`termination.ts`). Stop the
|
|
455
|
-
// turn, so its tools' processes go with it, and release what the session
|
|
456
|
-
// holds. What the operator is told depends on where the signal found the
|
|
457
|
-
// turn: mid-flight it is left interrupted; waiting out a provider pause it
|
|
458
|
-
// keeps its checkpoint; after it settled (the session still closing, a
|
|
459
|
-
// slow `session_end` hook) it is recorded, and there is nothing to close.
|
|
460
|
-
const turnAbort = new AbortController();
|
|
461
|
-
let stopped = false;
|
|
462
|
-
let phase = 'running';
|
|
463
|
-
const afterPhase = () => {
|
|
464
|
-
phase = stop.busy ? 'not-started' : stop.paused ? 'paused' : 'ended';
|
|
465
|
-
};
|
|
466
|
-
termination.onTerminate(async (signal) => {
|
|
467
|
-
stopped = true;
|
|
468
|
-
ctx.formatter.error({ message: stoppedBy(signal, sessionId, phase, stop.paused) });
|
|
469
|
-
turnAbort.abort(new TurnCancelled('user'));
|
|
470
|
-
await session.close();
|
|
471
|
-
closeSessions(sessions);
|
|
472
|
-
await sessionExport?.shutdown();
|
|
473
|
-
});
|
|
474
|
-
const consume = async (stream) => {
|
|
475
|
-
stop.failed = null;
|
|
476
|
-
stop.paused = null;
|
|
477
|
-
for await (const event of stream) {
|
|
478
|
-
if (event.kind === 'delta')
|
|
479
|
-
text += event.text;
|
|
480
|
-
else if (event.kind === 'tool-start')
|
|
481
|
-
ctx.formatter.info(`⏺ ${event.toolName} ${event.summary}`);
|
|
482
|
-
// stderr, like every other status line, so it reaches a person
|
|
483
|
-
// watching without contaminating the answer a caller piped.
|
|
484
|
-
else if (event.kind === 'context')
|
|
485
|
-
ctx.formatter.info(event.text);
|
|
486
|
-
else if (event.kind === 'error' || event.kind === 'paused') {
|
|
487
|
-
if (event.budget)
|
|
488
|
-
measured.budget = event.budget;
|
|
489
|
-
stop.failed = describeTurnInterruption(event);
|
|
490
|
-
if (event.kind === 'error' && event.turnInProgress) {
|
|
491
|
-
stop.busy = true;
|
|
492
|
-
stop.failed = `conversation ${event.turnInProgress.sessionId} already has a ${event.turnInProgress.state} turn ${event.turnInProgress.activeTurnId}; nothing was started. Finish it with \`namzu drain\`, or abandon it with /abandon in the TUI.`;
|
|
493
|
-
}
|
|
494
|
-
if (event.kind === 'paused')
|
|
495
|
-
stop.paused = event;
|
|
496
|
-
}
|
|
497
|
-
else if (event.kind === 'usage') {
|
|
498
|
-
measured.usage = event;
|
|
499
|
-
if (event.budget)
|
|
500
|
-
measured.budget = event.budget;
|
|
501
|
-
}
|
|
502
|
-
else if (event.kind === 'done') {
|
|
503
|
-
// Deltas include preliminary and rejected answers. Settlement
|
|
504
|
-
// supplies the final result after review and output guardrails;
|
|
505
|
-
// an explicit empty result must also replace earlier text.
|
|
506
|
-
if (event.text !== undefined)
|
|
507
|
-
text = event.text;
|
|
508
|
-
stopReason = event.stopReason;
|
|
509
|
-
if (event.budget)
|
|
510
|
-
measured.budget = event.budget;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
};
|
|
514
|
-
await consume(session.send([...prior, { role: 'user', content: finalPrompt, timestamp: Date.now() }], {
|
|
515
|
-
signal: turnAbort.signal,
|
|
516
|
-
...(extraSystem ? { extraSystem } : {}),
|
|
517
|
-
...(flags.effort !== null ? { effort: flags.effort } : {}),
|
|
518
|
-
}));
|
|
519
|
-
afterPhase();
|
|
520
|
-
// A provider pause is answered by waiting, when the caller gave time to
|
|
521
|
-
// wait with. The kernel kept a checkpoint; the turn resumes from it in
|
|
522
|
-
// this process, with its own context, rather than being re-prompted from
|
|
523
|
-
// notes by a wrapper that saw exit 75. A pause with no provider behind
|
|
524
|
-
// it is not waited on: that is a turn parked on something else.
|
|
525
|
-
const waitBudgetMs = flags.waitForProviderMs ?? ctx.config.limits?.waitForProviderMs ?? 0;
|
|
526
|
-
let waits = 0;
|
|
527
|
-
let waitedMs = 0;
|
|
528
|
-
while (!stopped &&
|
|
529
|
-
stop.paused &&
|
|
530
|
-
waitBudgetMs > 0 &&
|
|
531
|
-
(stop.paused.providerError || stop.paused.failure)) {
|
|
532
|
-
const paused = stop.paused;
|
|
533
|
-
const asked = retryAfterMs(paused);
|
|
534
|
-
const decision = pauseWait({
|
|
535
|
-
waited: waits,
|
|
536
|
-
...(asked !== undefined ? { retryAfterMs: asked } : {}),
|
|
537
|
-
waitedMs,
|
|
538
|
-
budgetMs: waitBudgetMs,
|
|
539
|
-
});
|
|
540
|
-
if (decision.kind === 'stop') {
|
|
541
|
-
stop.failed = `${stop.failed}\nNot resumed: ${decision.reason}.`;
|
|
542
|
-
break;
|
|
543
|
-
}
|
|
544
|
-
waits += 1;
|
|
545
|
-
ctx.formatter.info(`provider paused the turn: waiting ${duration(decision.delayMs)}, then resuming from ${paused.checkpointId} (wait ${waits}, ${duration(waitedMs)} of ${duration(waitBudgetMs)} spent)`);
|
|
546
|
-
await new Promise((resolve) => setTimeout(resolve, decision.delayMs));
|
|
547
|
-
// A signal during the wait: the process is on its way out, and the
|
|
548
|
-
// turn keeps its checkpoint for whoever resumes it next.
|
|
549
|
-
if (stopped)
|
|
550
|
-
break;
|
|
551
|
-
waitedMs += decision.delayMs;
|
|
552
|
-
phase = 'running';
|
|
553
|
-
await consume(session.resumePaused({
|
|
554
|
-
turnId: paused.turnId,
|
|
555
|
-
checkpointId: paused.checkpointId,
|
|
556
|
-
signal: turnAbort.signal,
|
|
557
|
-
}));
|
|
558
|
-
afterPhase();
|
|
559
|
-
}
|
|
560
|
-
// The signal handler closes the session and ends the process.
|
|
561
|
-
if (stopped)
|
|
562
|
-
return 1;
|
|
563
|
-
const failed = stop.failed;
|
|
564
|
-
// 75 (EX_TEMPFAIL) for both: a provider pause kept a checkpoint, and a
|
|
565
|
-
// conversation busy with another turn refused to start one. Either way
|
|
566
|
-
// running again later is the remedy, not a different invocation.
|
|
567
|
-
const paused = stop.paused !== null || stop.busy;
|
|
568
|
-
// Every exit below this point releases the session first. A stdio tool
|
|
569
|
-
// server is a child process, and a `run` that returns without closing
|
|
570
|
-
// leaves it behind.
|
|
571
|
-
await session.close();
|
|
572
|
-
closeSessions(sessions);
|
|
573
|
-
// Drained with the session, not at process exit: a buffering sink that
|
|
574
|
-
// only flushed on `beforeExit` loses its tail whenever the CLI is
|
|
575
|
-
// interrupted, which is exactly the turn somebody wanted the record of.
|
|
576
|
-
await sessionExport?.shutdown();
|
|
577
|
-
if (measured.budget) {
|
|
578
|
-
ctx.formatter.info(`Tokens: ${measured.budget.ownTokens} own · ${measured.budget.treeTokens} including descendants`);
|
|
579
|
-
}
|
|
580
|
-
if (failed) {
|
|
581
|
-
// A provider can pause or fail after producing useful text. The TUI
|
|
582
|
-
// keeps that partial answer and a shell caller deserves the same bytes;
|
|
583
|
-
// the non-zero verdict is what prevents it being mistaken for complete.
|
|
584
|
-
const partial = text.trim();
|
|
585
|
-
if (partial) {
|
|
586
|
-
ctx.formatter.print(ctx.formatter.name === 'json' ? jsonResult(partial) : partial);
|
|
587
|
-
}
|
|
588
|
-
ctx.formatter.error({
|
|
589
|
-
message: `${failed}${partial ? ' — the output above is partial' : ''}`,
|
|
590
|
-
});
|
|
591
|
-
// A pause is not a failure: the provider said "not now" (a rate
|
|
592
|
-
// limit, an outage) and the kernel kept a checkpoint. A wrapper that
|
|
593
|
-
// re-runs on 1 would hammer a limited provider and give up on a
|
|
594
|
-
// finished-looking failure alike; 75 (EX_TEMPFAIL, the sysexits
|
|
595
|
-
// convention for "try again later") lets it back off instead.
|
|
596
|
-
return paused ? 75 : 1;
|
|
597
|
-
}
|
|
598
|
-
// The text prints either way. Partial output is real output, and a
|
|
599
|
-
// caller who piped it wants what there is — but `$?` has to be able to
|
|
600
|
-
// tell them it is partial, which it could not: `turn_failed` is emitted
|
|
601
|
-
// only from the throw path, so a turn stopped by its token budget, its
|
|
602
|
-
// timeout, its iteration cap, a cancellation, or a blocking output
|
|
603
|
-
// guardrail all arrived as `turn_completed` and exited 0. Measured: a
|
|
604
|
-
// `max_iterations` stop reports `status: 'completed'`. The sharp case is
|
|
605
|
-
// the guardrail — a REFUSED answer exited 0 with empty text, so
|
|
606
|
-
// `namzu run … > out.txt && deploy` proceeded on the empty file.
|
|
607
|
-
ctx.formatter.print(ctx.formatter.name === 'json' ? jsonResult(text.trim()) : text.trim());
|
|
608
|
-
if (stopReason && stopReason !== 'end_turn') {
|
|
609
|
-
ctx.formatter.error({
|
|
610
|
-
message: `turn did not finish normally: ${stopReason}${text.trim() ? ' — the output above is partial' : ''}`,
|
|
611
|
-
});
|
|
612
|
-
return 1;
|
|
613
|
-
}
|
|
614
|
-
return 0;
|
|
615
|
-
}),
|
|
616
|
-
};
|
|
617
|
-
//# sourceMappingURL=run.js.map
|