@namzu/cli 0.5.1 → 0.6.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 (58) hide show
  1. package/dist/commands/__tests__/resume.test.d.ts +15 -0
  2. package/dist/commands/__tests__/resume.test.d.ts.map +1 -0
  3. package/dist/commands/__tests__/resume.test.js +116 -0
  4. package/dist/commands/__tests__/resume.test.js.map +1 -0
  5. package/dist/commands/__tests__/run-flags.test.d.ts +11 -0
  6. package/dist/commands/__tests__/run-flags.test.d.ts.map +1 -0
  7. package/dist/commands/__tests__/run-flags.test.js +190 -0
  8. package/dist/commands/__tests__/run-flags.test.js.map +1 -0
  9. package/dist/commands/__tests__/run-stream-flags.test.js +161 -11
  10. package/dist/commands/__tests__/run-stream-flags.test.js.map +1 -1
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/resume.d.ts +60 -0
  13. package/dist/commands/resume.d.ts.map +1 -0
  14. package/dist/commands/resume.js +107 -0
  15. package/dist/commands/resume.js.map +1 -0
  16. package/dist/commands/run-flags.d.ts +76 -0
  17. package/dist/commands/run-flags.d.ts.map +1 -0
  18. package/dist/commands/run-flags.js +163 -0
  19. package/dist/commands/run-flags.js.map +1 -0
  20. package/dist/commands/run-stream.d.ts +0 -36
  21. package/dist/commands/run-stream.d.ts.map +1 -1
  22. package/dist/commands/run-stream.js +71 -98
  23. package/dist/commands/run-stream.js.map +1 -1
  24. package/dist/commands/run.d.ts +25 -0
  25. package/dist/commands/run.d.ts.map +1 -1
  26. package/dist/commands/run.js +185 -16
  27. package/dist/commands/run.js.map +1 -1
  28. package/dist/config/schema.d.ts +9 -0
  29. package/dist/config/schema.d.ts.map +1 -1
  30. package/dist/config/schema.js.map +1 -1
  31. package/dist/permissions/__tests__/mode.test.d.ts +10 -0
  32. package/dist/permissions/__tests__/mode.test.d.ts.map +1 -0
  33. package/dist/permissions/__tests__/mode.test.js +115 -0
  34. package/dist/permissions/__tests__/mode.test.js.map +1 -0
  35. package/dist/permissions/__tests__/rules.test.d.ts +10 -0
  36. package/dist/permissions/__tests__/rules.test.d.ts.map +1 -0
  37. package/dist/permissions/__tests__/rules.test.js +196 -0
  38. package/dist/permissions/__tests__/rules.test.js.map +1 -0
  39. package/dist/permissions/mode.d.ts +64 -0
  40. package/dist/permissions/mode.d.ts.map +1 -0
  41. package/dist/permissions/mode.js +32 -0
  42. package/dist/permissions/mode.js.map +1 -0
  43. package/dist/permissions/rules.d.ts +105 -0
  44. package/dist/permissions/rules.d.ts.map +1 -0
  45. package/dist/permissions/rules.js +163 -0
  46. package/dist/permissions/rules.js.map +1 -0
  47. package/dist/tui/App.d.ts.map +1 -1
  48. package/dist/tui/App.js +8 -4
  49. package/dist/tui/App.js.map +1 -1
  50. package/dist/tui/__tests__/working-directory.test.d.ts +13 -0
  51. package/dist/tui/__tests__/working-directory.test.d.ts.map +1 -0
  52. package/dist/tui/__tests__/working-directory.test.js +115 -0
  53. package/dist/tui/__tests__/working-directory.test.js.map +1 -0
  54. package/dist/tui/agent.d.ts +30 -3
  55. package/dist/tui/agent.d.ts.map +1 -1
  56. package/dist/tui/agent.js +58 -14
  57. package/dist/tui/agent.js.map +1 -1
  58. package/package.json +4 -4
@@ -21,6 +21,9 @@
21
21
  */
22
22
  import { configureLogger } from '@namzu/sdk';
23
23
  import { appendMessages, loadConversation, openSessions, resolveConversation, } from '../integrations/sessions/store.js';
24
+ import { resolvePermissionMode } from '../permissions/mode.js';
25
+ import { compilePermissions } from '../permissions/rules.js';
26
+ import { loadSkillsContext, parseRunFlags, resolveWorkingDirectory, unknownOptionMessage, } from './run-flags.js';
24
27
  async function readStdin() {
25
28
  if (process.stdin.isTTY)
26
29
  return '';
@@ -33,78 +36,6 @@ function defaultPrefs(detected) {
33
36
  const first = detected[0];
34
37
  return first ? { version: 2, provider: first.entry.id, subagents: { active: [] } } : null;
35
38
  }
36
- /**
37
- * Exported for tests only — `src/index.ts` does not re-export it, so this is
38
- * module visibility rather than public surface. Driving the handler far enough
39
- * to observe a parse means reaching stdin and a provider probe, which is a
40
- * worse test of a pure function than calling it.
41
- */
42
- export function parseRunStreamFlags(rawArgs) {
43
- const out = {
44
- session: null,
45
- model: null,
46
- provider: null,
47
- instance: null,
48
- cwd: null,
49
- skills: [],
50
- unknown: [],
51
- rest: [],
52
- };
53
- const take = (a, name, set, i) => {
54
- if (a === `--${name}` && i.v + 1 < rawArgs.length) {
55
- set(rawArgs[++i.v]);
56
- return true;
57
- }
58
- if (a.startsWith(`--${name}=`)) {
59
- set(a.slice(name.length + 3));
60
- return true;
61
- }
62
- return false;
63
- };
64
- for (const idx = { v: 0 }; idx.v < rawArgs.length; idx.v++) {
65
- const a = rawArgs[idx.v];
66
- // End of options. Everything after it is prompt, verbatim — the escape
67
- // for a prompt that legitimately begins with a dash, which is the only
68
- // case the refusal below would otherwise take away.
69
- if (a === '--') {
70
- out.rest.push(...rawArgs.slice(idx.v + 1));
71
- break;
72
- }
73
- if (take(a, 'cwd', (v) => {
74
- out.cwd = v.trim() || null;
75
- }, idx))
76
- continue;
77
- if (take(a, 'session', (v) => {
78
- out.session = v.trim() || null;
79
- }, idx))
80
- continue;
81
- if (take(a, 'model', (v) => {
82
- out.model = v.trim() || null;
83
- }, idx))
84
- continue;
85
- if (take(a, 'provider', (v) => {
86
- out.provider = v.trim() || null;
87
- }, idx))
88
- continue;
89
- if (take(a, 'instance', (v) => {
90
- out.instance = v.trim() || null;
91
- }, idx))
92
- continue;
93
- if (take(a, 'skills', (v) => {
94
- out.skills = v
95
- .split(',')
96
- .map((s) => s.trim())
97
- .filter(Boolean);
98
- }, idx))
99
- continue;
100
- if (a.startsWith('--')) {
101
- out.unknown.push(a.split('=')[0]);
102
- continue;
103
- }
104
- out.rest.push(a);
105
- }
106
- return out;
107
- }
108
39
  /** Parse stdin as a prior Message[]; tolerate the UI's {role,content} shape. */
109
40
  function parsePriorMessages(raw) {
110
41
  const trimmed = raw.trim();
@@ -143,10 +74,13 @@ export const runStreamCommand = {
143
74
  'event. Built for a host UI that renders progress rather than waiting',
144
75
  'for a final string.',
145
76
  '',
77
+ 'Takes the same options as `namzu run`, including --permission-mode and',
78
+ 'the [permissions] table from the config file.',
79
+ '',
146
80
  'Needs a provider. Set a credential in the environment, or run namzu',
147
81
  'once to pick one interactively.',
148
82
  ].join('\n'),
149
- handler: async ({ rawArgs }) => {
83
+ handler: async ({ ctx, rawArgs }) => {
150
84
  const write = (o) => {
151
85
  process.stdout.write(`${JSON.stringify(o)}\n`);
152
86
  };
@@ -155,15 +89,17 @@ export const runStreamCommand = {
155
89
  write({ kind: 'done' });
156
90
  return 0;
157
91
  };
158
- const flags = parseRunStreamFlags(rawArgs);
159
- if (flags.unknown.length > 0) {
160
- return fail(`unknown option(s): ${flags.unknown.join(', ')} — pass \`--\` before a prompt that starts with a dash`);
161
- }
92
+ const flags = parseRunFlags(rawArgs);
93
+ if (flags.unknown.length > 0)
94
+ return fail(unknownOptionMessage(flags.unknown));
162
95
  const sessionKey = flags.session;
163
- const cwd = flags.cwd ?? process.cwd();
164
96
  const prompt = flags.rest.join(' ').trim();
165
97
  if (!prompt)
166
98
  return fail('no prompt — pass it as an argument');
99
+ const resolved = resolveWorkingDirectory(flags.cwd);
100
+ if ('error' in resolved)
101
+ return fail(resolved.error);
102
+ const cwd = resolved.cwd;
167
103
  // Resolve the persisted conversation (if a session key was given) so we
168
104
  // load prior turns as context and can append this turn afterward. Falls
169
105
  // back to stdin-supplied history when running stateless.
@@ -196,26 +132,39 @@ export const runStreamCommand = {
196
132
  prefs = { ...prefs, provider: flags.provider };
197
133
  if (flags.model)
198
134
  prefs = { ...prefs, model: flags.model };
199
- const session = await createAgentSession(prefs, probe.detected);
135
+ // The operator's rules and mode reach this command too. They did not:
136
+ // `[permissions]` was compiled for `run` and never for `run-stream`, so a
137
+ // host UI ran with an empty rule list whatever the config said — the same
138
+ // shape as a flag that parses and does nothing, one level larger, and
139
+ // silent in exactly the same way.
140
+ const modeResult = resolvePermissionMode({
141
+ flag: flags.permissionMode,
142
+ skipPermissions: flags.skipPermissions,
143
+ interactive: false,
144
+ });
145
+ if ('error' in modeResult)
146
+ return fail(modeResult.error);
147
+ const permissions = compilePermissions(ctx.config.permissions);
148
+ for (const d of permissions.diagnostics) {
149
+ const where = d.pattern ? `permissions.${d.tool}."${d.pattern}"` : `permissions.${d.tool}`;
150
+ // In band, because a host line-scanning stdout has no other channel —
151
+ // and a permission the operator believes is in force must never be
152
+ // dropped without saying so.
153
+ write({ kind: 'error', message: `${where}: ${d.message}` });
154
+ }
155
+ // The resolved `--cwd` is what the agent's tools resolve against, not just
156
+ // where the session store lives — a run told to work in another checkout
157
+ // has to glob, read and edit files there.
158
+ const session = await createAgentSession(prefs, probe.detected, {
159
+ cwd,
160
+ rules: permissions.rules,
161
+ permissionMode: modeResult.mode,
162
+ });
200
163
  if (!session.hasProvider)
201
164
  return fail(session.errorHint ?? 'agent is not ready');
202
165
  // --skills <a,b,c>: load the named skills' bodies and inject them as the
203
166
  // turn's extra system context (the same channel the TUI's /skill uses).
204
- let extraSystem;
205
- if (flags.skills.length > 0) {
206
- try {
207
- const { discoverSkills, loadSkillBody, composeSkillsPrompt } = await import('../skills/store.js');
208
- const all = discoverSkills({ cwd });
209
- const wanted = new Set(flags.skills);
210
- const active = all
211
- .filter((s) => wanted.has(s.name))
212
- .map((s) => ({ name: s.name, body: loadSkillBody(s) }));
213
- extraSystem = composeSkillsPrompt(active) ?? undefined;
214
- }
215
- catch {
216
- // skills unavailable — run without them rather than fail the turn.
217
- }
218
- }
167
+ const extraSystem = await loadSkillsContext(cwd, flags.skills);
219
168
  const userMessage = { role: 'user', content: prompt, timestamp: Date.now() };
220
169
  const messages = [...prior, userMessage];
221
170
  let assistantText = '';
@@ -263,7 +212,7 @@ export const historyCommand = {
263
212
  'is not an error.',
264
213
  ].join('\n'),
265
214
  handler: async ({ rawArgs }) => {
266
- const flags = parseRunStreamFlags(rawArgs);
215
+ const flags = parseRunFlags(rawArgs);
267
216
  const key = flags.session;
268
217
  if (!key) {
269
218
  process.stdout.write('[]\n');
@@ -274,7 +223,12 @@ export const historyCommand = {
274
223
  // the session is read from. Reading the process's own directory
275
224
  // instead means a host asking about a session in another checkout is
276
225
  // told `[]` — indistinguishable from a session with no messages.
277
- const cli = await openSessions(flags.cwd ?? process.cwd());
226
+ const resolved = resolveWorkingDirectory(flags.cwd);
227
+ if ('error' in resolved) {
228
+ process.stdout.write('[]\n');
229
+ return 0;
230
+ }
231
+ const cli = await openSessions(resolved.cwd);
278
232
  const map = await import('../integrations/sessions/store.js');
279
233
  // Resolve WITHOUT creating: only emit history for an existing mapping.
280
234
  const existing = await resolveExisting(cli, key);
@@ -304,10 +258,29 @@ export const skillsJSONCommand = {
304
258
  name: 'skills-json',
305
259
  description: 'Print discovered skills as JSON (for host UIs)',
306
260
  passThrough: true,
307
- handler: async () => {
261
+ help: [
262
+ 'Usage: namzu skills-json [--cwd <path>]',
263
+ '',
264
+ 'Print the skills discovered for a working directory as JSON. Project',
265
+ 'skills come from that directory; user skills come from the home',
266
+ 'directory either way.',
267
+ '',
268
+ 'An empty array means no skills were found — it is not an error.',
269
+ ].join('\n'),
270
+ handler: async ({ rawArgs }) => {
271
+ // Project skills live under the working directory, so a host listing the
272
+ // skills for one checkout while the process sits in another was shown
273
+ // the wrong project's chips — and then `run-stream --cwd <that
274
+ // checkout> --skills <name>` could not find the skill it had just
275
+ // offered. Same flag, same directory, both ends.
276
+ const resolved = resolveWorkingDirectory(parseRunFlags(rawArgs).cwd);
277
+ if ('error' in resolved) {
278
+ process.stdout.write('[]\n');
279
+ return 0;
280
+ }
308
281
  try {
309
282
  const { discoverSkills } = await import('../skills/store.js');
310
- const skills = discoverSkills({ cwd: process.cwd() }).map((s) => ({
283
+ const skills = discoverSkills({ cwd: resolved.cwd }).map((s) => ({
311
284
  name: s.name,
312
285
  description: s.description,
313
286
  source: s.source,
@@ -1 +1 @@
1
- {"version":3,"file":"run-stream.js","sourceRoot":"","sources":["../../src/commands/run-stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-stream.js","sourceRoot":"","sources":["../../src/commands/run-stream.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,32 @@
8
8
  * Non-interactive, so there's no approval prompt — tools auto-run, but the
9
9
  * safety gate still hard-denies catastrophic commands. One-shots use an
10
10
  * ephemeral session and are not added to `/resume` history.
11
+ *
12
+ * Options are parsed, not spoken: this command joined every argument into the
13
+ * prompt, so the flags its streaming sibling accepts — `--cwd` above all —
14
+ * were read aloud to the model while the run used this directory anyway. Both
15
+ * commands now share one parser (`./run-flags.js`), because they are the same
16
+ * one-shot differing only in how they print.
11
17
  */
12
18
  import type { CommandDef } from './types.js';
19
+ /**
20
+ * The prompt, from the arguments and the pipe together.
21
+ *
22
+ * Piped input used to be read only when there was no argument prompt, so
23
+ *
24
+ * cat notes.txt | namzu run "summarise this"
25
+ *
26
+ * sent the model three words and silently dropped the file. Nothing reported
27
+ * it: the run succeeded, and the answer was about nothing. A pipe and a
28
+ * question are the ordinary way to ask about a document, and taking only one
29
+ * of the two is the worst reading of that command.
30
+ *
31
+ * The piped text is fenced in a tag so the model can tell the instruction from
32
+ * the material it is about — without a boundary, a long paste runs into the
33
+ * question and the last line of a file reads as part of the request.
34
+ *
35
+ * Pure so it can be tested without a pipe; the reading happens in the handler.
36
+ */
37
+ export declare function composePrompt(fromArgs: string, piped: string): string;
13
38
  export declare const runCommand: CommandDef;
14
39
  //# sourceMappingURL=run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAc5C,eAAO,MAAM,UAAU,EAAE,UAkFxB,CAAA"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAiBH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA0C5C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMrE;AAOD,eAAO,MAAM,UAAU,EAAE,UA2LxB,CAAA"}
@@ -8,16 +8,89 @@
8
8
  * Non-interactive, so there's no approval prompt — tools auto-run, but the
9
9
  * safety gate still hard-denies catastrophic commands. One-shots use an
10
10
  * ephemeral session and are not added to `/resume` history.
11
+ *
12
+ * Options are parsed, not spoken: this command joined every argument into the
13
+ * prompt, so the flags its streaming sibling accepts — `--cwd` above all —
14
+ * were read aloud to the model while the run used this directory anyway. Both
15
+ * commands now share one parser (`./run-flags.js`), because they are the same
16
+ * one-shot differing only in how they print.
11
17
  */
12
18
  import { configureLogger } from '@namzu/sdk';
13
- async function readStdin() {
19
+ import { EXIT_USAGE } from '../exit-codes.js';
20
+ import { openSessions } from '../integrations/sessions/store.js';
21
+ import { resolvePermissionMode } from '../permissions/mode.js';
22
+ import { compilePermissions } from '../permissions/rules.js';
23
+ import { resolveResume } from './resume.js';
24
+ import { loadSkillsContext, parseRunFlags, resolveWorkingDirectory, unknownOptionMessage, } from './run-flags.js';
25
+ /**
26
+ * How long to wait for the FIRST byte of piped input when the prompt was
27
+ * already given as an argument.
28
+ *
29
+ * Once a byte arrives the read runs to end-of-input with no deadline, so a
30
+ * slow or large producer is never truncated. The bound only covers the case
31
+ * where nothing is coming at all.
32
+ *
33
+ * It exists because "is anything being piped in?" is not answerable without
34
+ * reading: on Windows a real pipe, an inherited-but-idle pipe, and a test
35
+ * runner's stdin are indistinguishable to `fstat` — all three report neither
36
+ * FIFO nor file. Measured. So a command that unconditionally waited for
37
+ * end-of-input would hang forever whenever stdin was open and silent, which is
38
+ * the ordinary state of a CI step or a test process. Waiting a quarter second
39
+ * is invisible to a person and instant for a pipe that has data ready.
40
+ */
41
+ const FIRST_BYTE_DEADLINE_MS = 250;
42
+ async function readStdin(opts = {}) {
14
43
  if (process.stdin.isTTY)
15
44
  return '';
16
45
  const chunks = [];
17
- for await (const chunk of process.stdin)
18
- chunks.push(chunk);
46
+ const collect = async () => {
47
+ for await (const chunk of process.stdin)
48
+ chunks.push(chunk);
49
+ };
50
+ if (!opts.deadline) {
51
+ await collect();
52
+ return Buffer.concat(chunks).toString('utf8');
53
+ }
54
+ let timer;
55
+ const firstByte = new Promise((resolve) => {
56
+ timer = setTimeout(() => resolve(), FIRST_BYTE_DEADLINE_MS);
57
+ process.stdin.once('readable', () => resolve());
58
+ process.stdin.once('end', () => resolve());
59
+ });
60
+ await firstByte;
61
+ if (timer)
62
+ clearTimeout(timer);
63
+ if (process.stdin.readableEnded || process.stdin.readableLength > 0)
64
+ await collect();
19
65
  return Buffer.concat(chunks).toString('utf8');
20
66
  }
67
+ /**
68
+ * The prompt, from the arguments and the pipe together.
69
+ *
70
+ * Piped input used to be read only when there was no argument prompt, so
71
+ *
72
+ * cat notes.txt | namzu run "summarise this"
73
+ *
74
+ * sent the model three words and silently dropped the file. Nothing reported
75
+ * it: the run succeeded, and the answer was about nothing. A pipe and a
76
+ * question are the ordinary way to ask about a document, and taking only one
77
+ * of the two is the worst reading of that command.
78
+ *
79
+ * The piped text is fenced in a tag so the model can tell the instruction from
80
+ * the material it is about — without a boundary, a long paste runs into the
81
+ * question and the last line of a file reads as part of the request.
82
+ *
83
+ * Pure so it can be tested without a pipe; the reading happens in the handler.
84
+ */
85
+ export function composePrompt(fromArgs, piped) {
86
+ const question = fromArgs.trim();
87
+ const material = piped.trim();
88
+ if (!question)
89
+ return material;
90
+ if (!material)
91
+ return question;
92
+ return `${question}\n\n<stdin>\n${material}\n</stdin>`;
93
+ }
21
94
  function defaultPrefs(detected) {
22
95
  const first = detected[0];
23
96
  return first ? { version: 2, provider: first.entry.id, subagents: { active: [] } } : null;
@@ -27,48 +100,144 @@ export const runCommand = {
27
100
  description: 'Run a single prompt headlessly and print the reply (for scripts/CI)',
28
101
  passThrough: true,
29
102
  help: [
30
- 'Usage: namzu run <prompt...>',
103
+ 'Usage: namzu run [options] <prompt...>',
31
104
  ' echo "<prompt>" | namzu run',
105
+ ' cat file.txt | namzu run "summarise this"',
32
106
  '',
33
- 'Run a single prompt headlessly and print the reply. Everything after',
34
- 'the command name is the prompt; when none is given it is read from',
35
- 'stdin, so this composes with a pipe.',
107
+ 'Run a single prompt headlessly and print the reply. Everything that is',
108
+ 'not an option is the prompt.',
109
+ '',
110
+ 'Piped input is used too, not discarded: with no prompt argument it IS',
111
+ 'the prompt, and alongside one it is appended as material the question',
112
+ 'is about. `namzu run -` reads the prompt from stdin explicitly.',
113
+ '',
114
+ 'Options (the same ones run-stream takes):',
115
+ ' --cwd <path> Directory the agent works in (default: this one)',
116
+ ' --provider <id> Provider to answer with',
117
+ ' --model <id> Model to answer with',
118
+ ' --skills <a,b,c> Load these skills as context for the turn',
119
+ ' --continue, -c Resume the most recent conversation here',
120
+ ' --resume <id> Resume that conversation, and no other',
121
+ ' --permission-mode <m> prompt | auto | strict — what happens to a call',
122
+ ' no [permissions] rule decided (default: auto)',
123
+ ' -- End of options; the rest is the prompt verbatim',
124
+ '',
125
+ 'By default tools run without asking, because there is nobody to ask, and',
126
+ 'the safety gate still refuses catastrophic commands. Use --permission-mode',
127
+ 'strict for an unattended run that must refuse anything no rule allowed.',
128
+ '',
129
+ 'A mode only decides calls no rule decided: it can never reopen a deny.',
130
+ '',
131
+ '--continue and --resume refuse when the conversation cannot be reopened,',
132
+ 'and say why. Neither ever falls back to starting a new one: run with no',
133
+ 'flag if that is what you want.',
36
134
  '',
37
135
  'Needs a provider. Set a credential in the environment, or run namzu',
38
136
  'once to pick one interactively.',
39
137
  '',
40
- 'Exit codes: 0 on a reply, 2 when no prompt was supplied.',
138
+ 'Exit codes: 0 on a reply, 1 on a failed or unfinished run, 2 when no',
139
+ 'prompt was supplied, 64 when an argument is wrong.',
41
140
  ].join('\n'),
42
141
  handler: async ({ ctx, rawArgs }) => {
43
- let prompt = rawArgs.join(' ').trim();
44
- if (!prompt)
45
- prompt = (await readStdin()).trim();
142
+ const flags = parseRunFlags(rawArgs);
143
+ if (flags.unknown.length > 0) {
144
+ // A shell caller learns about a bad argument from `$?`, so this is 64
145
+ // rather than the in-band error event the streaming sibling emits.
146
+ ctx.formatter.error({ message: unknownOptionMessage(flags.unknown) });
147
+ return EXIT_USAGE;
148
+ }
149
+ // `-` on its own means "the prompt is on stdin", the usual spelling for
150
+ // it. Before, it was sent to the model as a one-character question.
151
+ const fromArgs = flags.rest.join(' ').trim() === '-' ? '' : flags.rest.join(' ').trim();
152
+ // With no prompt argument, piped input IS the prompt and is waited for
153
+ // as long as it takes — that is the existing contract for `echo … |
154
+ // namzu run` and for the `-` sentinel. Alongside a prompt it is extra
155
+ // material, so it gets the first-byte deadline instead: a caller who
156
+ // asked a complete question should never be left waiting on a pipe
157
+ // they did not mean to open.
158
+ const piped = await readStdin({ deadline: Boolean(fromArgs) });
159
+ const prompt = composePrompt(fromArgs, piped);
46
160
  if (!prompt) {
47
161
  ctx.formatter.error({ message: 'no prompt — pass it as an argument or pipe it via stdin' });
48
162
  return 2;
49
163
  }
164
+ const resolved = resolveWorkingDirectory(flags.cwd);
165
+ if ('error' in resolved) {
166
+ ctx.formatter.error({ message: resolved.error });
167
+ return EXIT_USAGE;
168
+ }
50
169
  configureLogger({ level: 'silent' });
51
170
  const { probeAgentSession, createAgentSession } = await import('../tui/agent.js');
52
171
  const probe = await probeAgentSession();
53
- const prefs = probe.preferences ?? defaultPrefs(probe.detected);
172
+ let prefs = probe.preferences ?? defaultPrefs(probe.detected);
54
173
  if (!prefs) {
55
174
  ctx.formatter.error({
56
175
  message: 'no LLM provider available — set a credential (e.g. ANTHROPIC_API_KEY) or run `namzu` to pick one',
57
176
  });
58
177
  return 1;
59
178
  }
60
- const session = await createAgentSession(prefs, probe.detected);
179
+ if (flags.provider)
180
+ prefs = { ...prefs, provider: flags.provider };
181
+ if (flags.model)
182
+ prefs = { ...prefs, model: flags.model };
183
+ // A permission the operator wrote and which was silently dropped is the
184
+ // worst outcome available here: they believe a control is in force and it
185
+ // is not. So a bad line is reported and the rest still load.
186
+ const modeResult = resolvePermissionMode({
187
+ flag: flags.permissionMode,
188
+ skipPermissions: flags.skipPermissions,
189
+ // A headless run has nobody to ask, so `prompt` here would silently
190
+ // become `auto`. Resolving it as `auto` says so instead.
191
+ interactive: false,
192
+ });
193
+ if ('error' in modeResult) {
194
+ ctx.formatter.error({ message: modeResult.error });
195
+ return EXIT_USAGE;
196
+ }
197
+ const permissions = compilePermissions(ctx.config.permissions);
198
+ for (const d of permissions.diagnostics) {
199
+ const where = d.pattern ? `permissions.${d.tool}."${d.pattern}"` : `permissions.${d.tool}`;
200
+ ctx.formatter.error({ message: `${where}: ${d.message}` });
201
+ }
202
+ const session = await createAgentSession(prefs, probe.detected, {
203
+ cwd: resolved.cwd,
204
+ rules: permissions.rules,
205
+ permissionMode: modeResult.mode,
206
+ });
61
207
  if (!session.hasProvider) {
62
208
  ctx.formatter.error({ message: session.errorHint ?? 'agent is not ready' });
63
209
  return 1;
64
210
  }
65
211
  ctx.formatter.info(`namzu · ${session.providerSummary}${session.modelSummary ? ` · ${session.modelSummary}` : ''}`);
212
+ const extraSystem = await loadSkillsContext(resolved.cwd, flags.skills);
213
+ // A conversation the TUI could reopen could not be reopened from a
214
+ // script: the store, the reader and the picker all existed and only the
215
+ // entry point was missing.
216
+ let sessions = null;
217
+ if (flags.continueLast || flags.resume) {
218
+ try {
219
+ sessions = await openSessions(resolved.cwd);
220
+ }
221
+ catch {
222
+ sessions = null; // reported by resolveResume, which knows what was asked for
223
+ }
224
+ }
225
+ const resume = await resolveResume(sessions, { continueLast: flags.continueLast, sessionId: flags.resume }, resolved.cwd);
226
+ if (resume.kind === 'error') {
227
+ // Refused, never silently started fresh. Someone who asked for a
228
+ // specific conversation and got a new one that looks the same finds
229
+ // out several turns later, having already acted on it.
230
+ ctx.formatter.error({ message: resume.message });
231
+ return EXIT_USAGE;
232
+ }
233
+ const prior = resume.kind === 'resumed' ? resume.messages : [];
234
+ if (resume.kind === 'resumed') {
235
+ ctx.formatter.info(`resuming ${resume.sessionId} · ${prior.length} messages`);
236
+ }
66
237
  let text = '';
67
238
  let failed = null;
68
239
  let stopReason;
69
- for await (const event of session.send([
70
- { role: 'user', content: prompt, timestamp: Date.now() },
71
- ])) {
240
+ for await (const event of session.send([...prior, { role: 'user', content: prompt, timestamp: Date.now() }], extraSystem ? { extraSystem } : undefined)) {
72
241
  if (event.kind === 'delta')
73
242
  text += event.text;
74
243
  else if (event.kind === 'tool-start')
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EACN,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,oBAAoB,GACpB,MAAM,gBAAgB,CAAA;AAGvB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,sBAAsB,GAAG,GAAG,CAAA;AAElC,KAAK,UAAU,SAAS,CAAC,OAAwC,EAAE;IAClE,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IAClC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACzC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAA;IACtE,CAAC,CAAA;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,OAAO,EAAE,CAAA;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC9C,CAAC;IACD,IAAI,KAAiC,CAAA;IACrC,MAAM,SAAS,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC/C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAA;QAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IACF,MAAM,SAAS,CAAA;IACf,IAAI,KAAK;QAAE,YAAY,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC;QAAE,MAAM,OAAO,EAAE,CAAA;IACpF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,KAAa;IAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC9B,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC9B,OAAO,GAAG,QAAQ,gBAAgB,QAAQ,YAAY,CAAA;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,QAAqC;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACzB,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1F,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAe;IACrC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,qEAAqE;IAClF,WAAW,EAAE,IAAI;IACjB,IAAI,EAAE;QACL,wCAAwC;QACxC,oCAAoC;QACpC,kDAAkD;QAClD,EAAE;QACF,wEAAwE;QACxE,8BAA8B;QAC9B,EAAE;QACF,uEAAuE;QACvE,uEAAuE;QACvE,iEAAiE;QACjE,EAAE;QACF,2CAA2C;QAC3C,0EAA0E;QAC1E,iDAAiD;QACjD,8CAA8C;QAC9C,mEAAmE;QACnE,kEAAkE;QAClE,gEAAgE;QAChE,yEAAyE;QACzE,uEAAuE;QACvE,yEAAyE;QACzE,EAAE;QACF,0EAA0E;QAC1E,4EAA4E;QAC5E,yEAAyE;QACzE,EAAE;QACF,wEAAwE;QACxE,EAAE;QACF,0EAA0E;QAC1E,yEAAyE;QACzE,gCAAgC;QAChC,EAAE;QACF,qEAAqE;QACrE,iCAAiC;QACjC,EAAE;QACF,sEAAsE;QACtE,oDAAoD;KACpD,CAAC,IAAI,CAAC,IAAI,CAAC;IACZ,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,sEAAsE;YACtE,mEAAmE;YACnE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACrE,OAAO,UAAU,CAAA;QAClB,CAAC;QACD,wEAAwE;QACxE,oEAAoE;QACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;QACvF,uEAAuE;QACvE,oEAAoE;QACpE,sEAAsE;QACtE,qEAAqE;QACrE,mEAAmE;QACnE,6BAA6B;QAC7B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,yDAAyD,EAAE,CAAC,CAAA;YAC3F,OAAO,CAAC,CAAA;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACnD,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACzB,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;YAChD,OAAO,UAAU,CAAA;QAClB,CAAC;QAED,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QACpC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACjF,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACvC,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;gBACnB,OAAO,EACN,kGAAkG;aACnG,CAAC,CAAA;YACF,OAAO,CAAC,CAAA;QACT,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ;YAAE,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAsB,EAAE,CAAA;QAChF,IAAI,KAAK,CAAC,KAAK;YAAE,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAA;QAEzD,wEAAwE;QACxE,0EAA0E;QAC1E,6DAA6D;QAC7D,MAAM,UAAU,GAAG,qBAAqB,CAAC;YACxC,IAAI,EAAE,KAAK,CAAC,cAAc;YAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,oEAAoE;YACpE,yDAAyD;YACzD,WAAW,EAAE,KAAK;SAClB,CAAC,CAAA;QACF,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;YAC3B,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA;YAClD,OAAO,UAAU,CAAA;QAClB,CAAC;QAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAC9D,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAA;YAC1F,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;YAC/D,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,cAAc,EAAE,UAAU,CAAC,IAAI;SAC/B,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,oBAAoB,EAAE,CAAC,CAAA;YAC3E,OAAO,CAAC,CAAA;QACT,CAAC;QACD,GAAG,CAAC,SAAS,CAAC,IAAI,CACjB,WAAW,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/F,CAAA;QAED,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QAEvE,mEAAmE;QACnE,wEAAwE;QACxE,2BAA2B;QAC3B,IAAI,QAAQ,GAAoD,IAAI,CAAA;QACpE,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACxC,IAAI,CAAC;gBACJ,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACR,QAAQ,GAAG,IAAI,CAAA,CAAC,4DAA4D;YAC7E,CAAC;QACF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,aAAa,CACjC,QAAQ,EACR,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,EAC7D,QAAQ,CAAC,GAAG,CACZ,CAAA;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,iEAAiE;YACjE,oEAAoE;YACpE,uDAAuD;YACvD,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;YAChD,OAAO,UAAU,CAAA;QAClB,CAAC;QACD,MAAM,KAAK,GAAuB,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QAClF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,MAAM,KAAK,CAAC,MAAM,WAAW,CAAC,CAAA;QAC9E,CAAC;QAED,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,IAAI,MAAM,GAAkB,IAAI,CAAA;QAChC,IAAI,UAAkC,CAAA;QACtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CACrC,CAAC,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EACpE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CACzC,EAAE,CAAC;YACH,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,IAAI,IAAI,KAAK,CAAC,IAAI,CAAA;iBACzC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBACnC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;iBACtD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,MAAM,GAAG,KAAK,CAAC,OAAO,CAAA;iBAClD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QAC9D,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACZ,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;YACxC,OAAO,CAAC,CAAA;QACT,CAAC;QAED,mEAAmE;QACnE,uEAAuE;QACvE,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,qEAAqE;QACrE,yEAAyE;QACzE,gEAAgE;QAChE,iEAAiE;QACjE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACxF,IAAI,UAAU,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC7C,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;gBACnB,OAAO,EAAE,gCAAgC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,EAAE;aAC3G,CAAC,CAAA;YACF,OAAO,CAAC,CAAA;QACT,CAAC;QACD,OAAO,CAAC,CAAA;IACT,CAAC;CACD,CAAA"}
@@ -7,6 +7,7 @@
7
7
  * are worth enforcing at runtime — premature now.
8
8
  */
9
9
  import type { FormatName } from '../output/index.js';
10
+ import type { PermissionsConfig } from '../permissions/rules.js';
10
11
  export interface ClawtoolConfig {
11
12
  /** Absolute path to the clawtool binary; overrides PATH lookup. */
12
13
  readonly binary?: string;
@@ -24,6 +25,14 @@ export interface NamzuCliConfig {
24
25
  readonly quiet?: boolean;
25
26
  /** Clawtool integration overrides; defaults work zero-config. */
26
27
  readonly clawtool?: ClawtoolConfig;
28
+ /**
29
+ * Which tools may run without asking, keyed by tool name.
30
+ *
31
+ * A value is `"allow" | "ask" | "deny"`, or a table of argument patterns
32
+ * mapping to those. Absent means every mutating tool prompts, which is what
33
+ * it meant before this existed — the absence of a policy never widens one.
34
+ */
35
+ readonly permissions?: PermissionsConfig;
27
36
  }
28
37
  export declare const DEFAULT_CONFIG: NamzuCliConfig;
29
38
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,WAAW,cAAc;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAA;IAC5B,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAClC;AAED,eAAO,MAAM,cAAc,EAAE,cAG3B,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,cAAc;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAA;IAC5B,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CACxC;AAED,eAAO,MAAM,cAAc,EAAE,cAG3B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwBH,MAAM,CAAC,MAAM,cAAc,GAAmB,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,KAAK;CACZ,CAAC,CAAA"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiCH,MAAM,CAAC,MAAM,cAAc,GAAmB,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,KAAK;CACZ,CAAC,CAAA"}