agent-nuvira 3.0.0 → 3.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 (75) hide show
  1. package/README.md +67 -0
  2. package/dist/cli/chat.d.ts +7 -0
  3. package/dist/cli/chat.d.ts.map +1 -1
  4. package/dist/cli/chat.js +62 -14
  5. package/dist/cli/chat.js.map +1 -1
  6. package/dist/cli/cli-program.d.ts.map +1 -1
  7. package/dist/cli/cli-program.js +23 -3
  8. package/dist/cli/cli-program.js.map +1 -1
  9. package/dist/cli/config.d.ts +9 -0
  10. package/dist/cli/config.d.ts.map +1 -1
  11. package/dist/cli/config.js +85 -0
  12. package/dist/cli/config.js.map +1 -1
  13. package/dist/config/types.d.ts +2 -0
  14. package/dist/config/types.d.ts.map +1 -1
  15. package/dist/gateway/channel-directory.d.ts +24 -0
  16. package/dist/gateway/channel-directory.d.ts.map +1 -1
  17. package/dist/gateway/channel-directory.js.map +1 -1
  18. package/dist/gateway/registry.d.ts +43 -1
  19. package/dist/gateway/registry.d.ts.map +1 -1
  20. package/dist/gateway/registry.js +70 -1
  21. package/dist/gateway/registry.js.map +1 -1
  22. package/dist/inference/tool-call-utils.d.ts +26 -0
  23. package/dist/inference/tool-call-utils.d.ts.map +1 -1
  24. package/dist/inference/tool-call-utils.js +69 -0
  25. package/dist/inference/tool-call-utils.js.map +1 -1
  26. package/dist/learning/reasoning-trace.d.ts +41 -2
  27. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  28. package/dist/learning/reasoning-trace.js +21 -1
  29. package/dist/learning/reasoning-trace.js.map +1 -1
  30. package/dist/tools/coding-tools.d.ts +61 -8
  31. package/dist/tools/coding-tools.d.ts.map +1 -1
  32. package/dist/tools/coding-tools.js +303 -53
  33. package/dist/tools/coding-tools.js.map +1 -1
  34. package/dist/tools/gateway-send.d.ts.map +1 -1
  35. package/dist/tools/gateway-send.js +67 -0
  36. package/dist/tools/gateway-send.js.map +1 -1
  37. package/dist/tools/git-digest.d.ts +25 -0
  38. package/dist/tools/git-digest.d.ts.map +1 -0
  39. package/dist/tools/git-digest.js +68 -0
  40. package/dist/tools/git-digest.js.map +1 -0
  41. package/dist/tools/loop-project-context.d.ts.map +1 -1
  42. package/dist/tools/loop-project-context.js +6 -39
  43. package/dist/tools/loop-project-context.js.map +1 -1
  44. package/dist/tools/loop-skill-hint.d.ts.map +1 -1
  45. package/dist/tools/loop-skill-hint.js +22 -1
  46. package/dist/tools/loop-skill-hint.js.map +1 -1
  47. package/dist/tools/registry.d.ts.map +1 -1
  48. package/dist/tools/registry.js +29 -9
  49. package/dist/tools/registry.js.map +1 -1
  50. package/dist/tools/tool-loop.d.ts +25 -3
  51. package/dist/tools/tool-loop.d.ts.map +1 -1
  52. package/dist/tools/tool-loop.js +92 -5
  53. package/dist/tools/tool-loop.js.map +1 -1
  54. package/dist/tools/unified-diff.d.ts +39 -0
  55. package/dist/tools/unified-diff.d.ts.map +1 -0
  56. package/dist/tools/unified-diff.js +182 -0
  57. package/dist/tools/unified-diff.js.map +1 -0
  58. package/dist/web-dashboard/chat-console.d.ts +6 -0
  59. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  60. package/dist/web-dashboard/chat-console.js.map +1 -1
  61. package/dist/web-dashboard/project-context.d.ts +7 -0
  62. package/dist/web-dashboard/project-context.d.ts.map +1 -1
  63. package/dist/web-dashboard/project-context.js +3 -0
  64. package/dist/web-dashboard/project-context.js.map +1 -1
  65. package/dist/web-dashboard/server.d.ts +11 -0
  66. package/dist/web-dashboard/server.d.ts.map +1 -1
  67. package/dist/web-dashboard/server.js +11 -1
  68. package/dist/web-dashboard/server.js.map +1 -1
  69. package/dist/web-dashboard/src/types.d.ts +20 -0
  70. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  71. package/package.json +1 -1
  72. package/src/web-dashboard/public/assets/index-Pzkg6L8v.js +207 -0
  73. package/src/web-dashboard/public/assets/{index-56yPnN_m.js.map → index-Pzkg6L8v.js.map} +1 -1
  74. package/src/web-dashboard/public/index.html +1 -1
  75. package/src/web-dashboard/public/assets/index-56yPnN_m.js +0 -207
@@ -23,16 +23,31 @@
23
23
  * Output caps: a huge file must not flood the model context — line cap +
24
24
  * character cap with an explicit truncation note, so the model knows the
25
25
  * read was partial and can continue with offset/limit.
26
+ *
27
+ * Beyond parity (round-trip reduction):
28
+ * - `read_file` accepts `paths` to read MANY files in one call under a shared
29
+ * character budget, with per-file errors, dedup, and continuation offsets —
30
+ * one step instead of many.
31
+ * - `edit_file` accepts `replacements` to apply SEVERAL edits to one file in
32
+ * one call, TRANSACTIONALLY (all-or-nothing), written ATOMICALLY, and
33
+ * reported with a unified diff. `dry_run` previews without writing.
34
+ * Both keep the original single-item forms byte-for-byte, so nothing that
35
+ * called them before changes behavior.
26
36
  */
27
- import { mkdir, readFile, readdir, realpath, stat, writeFile } from 'node:fs/promises';
37
+ import { chmod, mkdir, readFile, readdir, realpath, rename, stat, unlink, writeFile } from 'node:fs/promises';
28
38
  import { existsSync } from 'node:fs';
29
- import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
39
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
40
+ import { formatUnifiedDiff } from './unified-diff.js';
30
41
  /** Max characters returned by read_file (a 40MB file must not flood context). */
31
42
  const MAX_READ_CHARS = 60000;
32
43
  /** Max lines returned per read_file call (mirrors the agent's own windowing). */
33
44
  const MAX_READ_LINES = 2000;
34
45
  /** Max glob matches returned (bounded walk). */
35
46
  const MAX_GLOB_RESULTS = 500;
47
+ /** Max file entries accepted in one batched read (bounds fs work per call). */
48
+ const MAX_BATCH_READ_ENTRIES = 40;
49
+ /** Shared character budget across a whole batched read (~30K tokens ≈ 120K chars). */
50
+ const MAX_BATCH_READ_CHARS = 120_000;
36
51
  /**
37
52
  * Deny-first workspace gate. Lexically resolves `p` against `root`; refuses
38
53
  * absolute paths elsewhere and `..` escapes. Realpath verification happens
@@ -78,31 +93,33 @@ function looksBinary(buf) {
78
93
  const probe = buf.subarray(0, 8192);
79
94
  return probe.includes(0);
80
95
  }
81
- export async function runReadFile(args, ctx) {
82
- const offset = Math.max(1, Math.floor(args.offset ?? 1));
83
- const limit = Math.min(MAX_READ_LINES, Math.max(1, Math.floor(args.limit ?? MAX_READ_LINES)));
84
- const gated = await gateReal(ctx.cwd, args.path);
85
- if (!gated.ok)
86
- return `read_file: ${gated.reason}`;
96
+ /**
97
+ * Read + number ONE already-gated file. `charCap` bounds the returned body so
98
+ * a batched read can allocate its remaining budget per file. Never throws —
99
+ * every failure is returned as an `error` string for the caller to embed.
100
+ */
101
+ async function readOneFile(gated, offsetRaw, limitRaw, charCap) {
102
+ const offset = Math.max(1, Math.floor(offsetRaw ?? 1));
103
+ const limit = Math.min(MAX_READ_LINES, Math.max(1, Math.floor(limitRaw ?? MAX_READ_LINES)));
87
104
  let info;
88
105
  try {
89
106
  info = await stat(gated.abs);
90
107
  }
91
108
  catch (err) {
92
- return `read_file: cannot stat '${gated.rel}': ${err.message}`;
109
+ return { rel: gated.rel, error: `cannot stat '${gated.rel}': ${err.message}` };
93
110
  }
94
111
  if (info.isDirectory()) {
95
- return `read_file: '${gated.rel}' is a directory — use list_dir to see its contents.`;
112
+ return { rel: gated.rel, error: `'${gated.rel}' is a directory — use list_dir to see its contents.` };
96
113
  }
97
114
  let data;
98
115
  try {
99
116
  data = await readFile(gated.abs);
100
117
  }
101
118
  catch (err) {
102
- return `read_file: cannot read '${gated.rel}': ${err.message}`;
119
+ return { rel: gated.rel, error: `cannot read '${gated.rel}': ${err.message}` };
103
120
  }
104
121
  if (looksBinary(data)) {
105
- return `read_file: '${gated.rel}' looks binary (${info.size} bytes) — reading it into context is not useful.`;
122
+ return { rel: gated.rel, error: `'${gated.rel}' looks binary (${info.size} bytes) — reading it into context is not useful.` };
106
123
  }
107
124
  // A trailing newline must not count as an extra empty line.
108
125
  const text = data.toString('utf-8').replace(/\n$/, '');
@@ -112,18 +129,106 @@ export async function runReadFile(args, ctx) {
112
129
  const slice = lines.slice(startIdx, startIdx + limit);
113
130
  // Number lines, then apply the char cap with a truncation note.
114
131
  const numbered = slice.map((l, i) => `${startIdx + i + 1}: ${l}`).join('\n');
115
- let out = numbered;
116
- let truncatedLines = false;
117
- if (numbered.length > MAX_READ_CHARS) {
118
- out = numbered.slice(0, MAX_READ_CHARS);
119
- truncatedLines = true;
132
+ let body = numbered;
133
+ let truncated = false;
134
+ if (numbered.length > charCap) {
135
+ body = numbered.slice(0, Math.max(0, charCap));
136
+ truncated = true;
137
+ }
138
+ return {
139
+ rel: gated.rel,
140
+ total,
141
+ bytes: info.size,
142
+ body,
143
+ offset,
144
+ endLine: offset + slice.length - 1,
145
+ truncated,
146
+ };
147
+ }
148
+ /**
149
+ * `read_file` — open one file (legacy form) or MANY files in one call
150
+ * (batched form). Batching is the round-trip reducer: reading N files is one
151
+ * tool call, one step, one result — instead of N of each. The single-file
152
+ * output is byte-for-byte the original so existing callers/tests are
153
+ * unaffected; only `paths` opts into the batched shape.
154
+ */
155
+ export async function runReadFile(args, ctx) {
156
+ if (Array.isArray(args.paths) && args.paths.length > 0) {
157
+ return runBatchedRead(args, ctx);
158
+ }
159
+ const rawPath = args.path;
160
+ if (!rawPath) {
161
+ return `read_file: no path given — pass 'path' (one file) or 'paths' (several in one call).`;
120
162
  }
121
- const truncatedTotal = offset + slice.length - 1;
163
+ const gated = await gateReal(ctx.cwd, rawPath);
164
+ if (!gated.ok)
165
+ return `read_file: ${gated.reason}`;
166
+ const r = await readOneFile(gated, args.offset, args.limit, MAX_READ_CHARS);
167
+ if (r.error)
168
+ return `read_file: ${r.error}`;
122
169
  const note = [
123
- `read_file: ${gated.rel} (${total} lines, ${info.size} bytes)`,
124
- `showing lines ${offset}–${truncatedTotal}${truncatedLines ? ' (truncated — pass offset/limit to continue)' : ''}:`,
170
+ `read_file: ${r.rel} (${r.total} lines, ${r.bytes} bytes)`,
171
+ `showing lines ${r.offset}–${r.endLine}${r.truncated ? ' (truncated — pass offset/limit to continue)' : ''}:`,
125
172
  ].join('\n');
126
- return `${note}\n${out}`;
173
+ return `${note}\n${r.body}`;
174
+ }
175
+ /**
176
+ * Batched read: gate + read each entry, dedup repeats, and enforce a SHARED
177
+ * character budget so a 20-file call cannot flood the context. Every entry
178
+ * produces its own labelled section — a missing/denied/binary file reports
179
+ * inline and the rest still read. Order is preserved (the result maps back to
180
+ * the caller's entry order).
181
+ */
182
+ async function runBatchedRead(args, ctx) {
183
+ const raw = [
184
+ ...(args.path ? [args.path] : []),
185
+ ...(Array.isArray(args.paths) ? args.paths : []),
186
+ ];
187
+ if (raw.length === 0) {
188
+ return `read_file: no paths given — pass 'paths' with at least one entry.`;
189
+ }
190
+ const overflow = raw.length > MAX_BATCH_READ_ENTRIES;
191
+ const entries = raw.slice(0, MAX_BATCH_READ_ENTRIES).map((e) => typeof e === 'string' ? { path: e } : { path: e.path, offset: e.offset, limit: e.limit });
192
+ const sections = [];
193
+ const seen = new Map(); // rel → first entry index (1-based)
194
+ let remaining = MAX_BATCH_READ_CHARS;
195
+ let readCount = 0;
196
+ for (let i = 0; i < entries.length; i += 1) {
197
+ const entry = entries[i];
198
+ if (!entry.path || entry.path === '') {
199
+ sections.push(`### (entry #${i + 1}) — not read (empty path)`);
200
+ continue;
201
+ }
202
+ const gated = await gateReal(ctx.cwd, entry.path);
203
+ if (!gated.ok) {
204
+ sections.push(`### ${entry.path} — not read (${gated.reason})`);
205
+ continue;
206
+ }
207
+ const prior = seen.get(gated.rel);
208
+ if (prior !== undefined) {
209
+ sections.push(`### ${gated.rel} — duplicate of entry #${prior} (skipped)`);
210
+ continue;
211
+ }
212
+ seen.set(gated.rel, i + 1);
213
+ if (remaining <= 0) {
214
+ sections.push(`### ${gated.rel} — not read (batch budget exhausted — read this file directly with read_file)`);
215
+ continue;
216
+ }
217
+ const r = await readOneFile(gated, entry.offset, entry.limit, Math.min(MAX_READ_CHARS, remaining));
218
+ if (r.error) {
219
+ sections.push(`### ${gated.rel} — not read (${r.error})`);
220
+ continue;
221
+ }
222
+ readCount += 1;
223
+ remaining -= r.body.length;
224
+ const cont = r.truncated ? ` (truncated — continue at offset ${r.endLine + 1})` : '';
225
+ sections.push(`### ${r.rel} (${r.total} lines, ${r.bytes} bytes) — lines ${r.offset}–${r.endLine}${cont}\n${r.body}`);
226
+ }
227
+ const header = [
228
+ `read_file: ${entries.length} file${entries.length === 1 ? '' : 's'} requested, ${readCount} read — ${MAX_BATCH_READ_CHARS - remaining} chars used`,
229
+ `(shared budget ${MAX_BATCH_READ_CHARS} chars; per-file cap ${MAX_READ_CHARS})${overflow ? ` (capped at ${MAX_BATCH_READ_ENTRIES} entries)` : ''}`,
230
+ ].join(' ');
231
+ return [header, ...sections].join('\n\n');
127
232
  }
128
233
  export async function runListDir(args, ctx) {
129
234
  const target = args.path && args.path !== '' ? args.path : '.';
@@ -160,19 +265,150 @@ export async function runListDir(args, ctx) {
160
265
  function confirmFirst(tool, path, what) {
161
266
  return `${tool}: state-changing — NOT applied. Ask the user first via ask_user ("Apply ${what} to ${path}?" with a one-line summary), then retry ${tool} with confirm:true once they approve.`;
162
267
  }
268
+ /** Normalize the legacy single pair and/or the batched array into one list. */
269
+ function normalizePairs(args) {
270
+ const pairs = [];
271
+ if (args.old_string !== undefined || args.new_string !== undefined) {
272
+ pairs.push({ old_string: args.old_string ?? '', new_string: args.new_string ?? '', allow_multiple: args.allow_multiple });
273
+ }
274
+ if (Array.isArray(args.replacements)) {
275
+ for (const r of args.replacements) {
276
+ pairs.push({ old_string: r.old_string, new_string: r.new_string, allow_multiple: r.allow_multiple });
277
+ }
278
+ }
279
+ return pairs;
280
+ }
281
+ /** Count non-overlapping occurrences of `needle` in `hay`. */
282
+ function countOccurrences(hay, needle) {
283
+ if (needle === '')
284
+ return 0;
285
+ let count = 0;
286
+ let idx = 0;
287
+ while ((idx = hay.indexOf(needle, idx)) !== -1) {
288
+ count += 1;
289
+ idx += needle.length;
290
+ }
291
+ return count;
292
+ }
293
+ /** 1-based line number of a character position. */
294
+ function lineAt(content, pos) {
295
+ return content.slice(0, pos).split('\n').length;
296
+ }
297
+ /** Logical line count — a trailing newline does not add an empty line. */
298
+ function logicalLineCount(text) {
299
+ if (text === '')
300
+ return 0;
301
+ return (text.endsWith('\n') ? text.slice(0, -1) : text).split('\n').length;
302
+ }
303
+ /**
304
+ * Apply every replacement in order against the EVOLVING content. Returns the
305
+ * fully-edited text plus per-pair outcomes; `failed` is true when any pair
306
+ * could not be applied (the caller then writes nothing).
307
+ */
308
+ function applyPairs(content, pairs) {
309
+ let working = content;
310
+ const outcomes = [];
311
+ let failed = false;
312
+ for (let i = 0; i < pairs.length; i += 1) {
313
+ const pair = pairs[i];
314
+ if (!pair.old_string || pair.old_string === '') {
315
+ outcomes.push({ index: i, ok: false, reason: 'old_string is empty (use write_file to replace the whole file)' });
316
+ failed = true;
317
+ continue;
318
+ }
319
+ const occurrences = countOccurrences(working, pair.old_string);
320
+ if (occurrences === 0) {
321
+ outcomes.push({ index: i, ok: false, reason: 'old_string not found — re-read the file; the match is literal, including whitespace' });
322
+ failed = true;
323
+ continue;
324
+ }
325
+ if (occurrences > 1 && !pair.allow_multiple) {
326
+ outcomes.push({ index: i, ok: false, reason: `ambiguous — occurs ${occurrences} times (set allow_multiple:true, or include more surrounding text)` });
327
+ failed = true;
328
+ continue;
329
+ }
330
+ const idx = working.indexOf(pair.old_string);
331
+ const startLine = lineAt(working, idx);
332
+ const endLine = lineAt(working, idx + pair.old_string.length);
333
+ working = pair.allow_multiple
334
+ ? working.split(pair.old_string).join(pair.new_string)
335
+ : working.slice(0, idx) + pair.new_string + working.slice(idx + pair.old_string.length);
336
+ outcomes.push({
337
+ index: i,
338
+ ok: true,
339
+ occurrences,
340
+ startLine,
341
+ endLine,
342
+ addedLines: pair.new_string === '' ? 0 : pair.new_string.split('\n').length,
343
+ removedLines: pair.old_string.split('\n').length,
344
+ });
345
+ }
346
+ return { working, outcomes, failed };
347
+ }
348
+ /** One-line human summary of an applied replacement. */
349
+ function formatOutcomeLine(o) {
350
+ const span = o.startLine === o.endLine ? `line ${o.startLine}` : `lines ${o.startLine}–${o.endLine}`;
351
+ const times = o.occurrences && o.occurrences > 1 ? ` (×${o.occurrences})` : '';
352
+ return ` ✓ #${o.index + 1} ${span}${times}: −${o.removedLines} +${o.addedLines} line(s)`;
353
+ }
163
354
  /**
164
- * A surgical exact-text replacement — the same edit primitive a human
165
- * AI agent uses: find the exact old text, replace with new. Refuses
166
- * ambiguous matches (multiple occurrences without allow_multiple) and
167
- * reports not-found distinctly so the model re-reads the file. Deny-first
168
- * on the path (gateReal — file must exist inside the workspace).
355
+ * Durable single-file write: write a sibling temp file, preserve the target's
356
+ * mode, then `rename` over the target. `rename` within a directory is atomic,
357
+ * so a crash can leave the OLD file or the NEW file — never a truncated one.
358
+ */
359
+ async function atomicWriteFile(abs, content) {
360
+ const tmp = join(dirname(abs), `.${basename(abs)}.${process.pid}.${Date.now().toString(36)}.${Math.random().toString(36).slice(2, 8)}.tmp`);
361
+ let mode;
362
+ try {
363
+ mode = (await stat(abs)).mode & 0o7777;
364
+ }
365
+ catch {
366
+ // Target missing/unreadable — proceed without mode preservation.
367
+ }
368
+ try {
369
+ await writeFile(tmp, content, 'utf-8');
370
+ if (mode !== undefined) {
371
+ try {
372
+ await chmod(tmp, mode);
373
+ }
374
+ catch {
375
+ // Best-effort mode preservation.
376
+ }
377
+ }
378
+ await rename(tmp, abs);
379
+ }
380
+ catch (err) {
381
+ try {
382
+ await unlink(tmp);
383
+ }
384
+ catch {
385
+ // Temp already gone.
386
+ }
387
+ throw err;
388
+ }
389
+ }
390
+ /**
391
+ * A surgical exact-text edit — the same primitive a human AI agent uses:
392
+ * find the exact old text, replace with new. Supports SEVERAL replacements in
393
+ * one call (batched), applied TRANSACTIONALLY (all-or-nothing), written
394
+ * ATOMICALLY, and reported with a real unified diff. Refuses ambiguous
395
+ * matches (multiple occurrences without allow_multiple) and reports
396
+ * not-found distinctly so the model re-reads the file. Deny-first on the path
397
+ * (gateReal — file must exist inside the workspace). `dry_run` validates +
398
+ * previews without writing and needs no confirmation.
169
399
  */
170
400
  export async function runEditFile(args, ctx) {
171
- if (!args.confirm) {
172
- return confirmFirst('edit_file', args.path, `this edit: replace "${abbrev(args.old_string)}" with "${abbrev(args.new_string)}"`);
401
+ const pairs = normalizePairs(args);
402
+ const multi = pairs.length > 1;
403
+ const dryRun = args.dry_run === true;
404
+ if (pairs.length === 0) {
405
+ return "edit_file: no replacement given — pass old_string/new_string (single) or replacements[] (batch).";
173
406
  }
174
- if (!args.old_string || args.old_string === '') {
175
- return 'edit_file: old_string must not be empty (use write_file to replace the whole file).';
407
+ if (!args.confirm && !dryRun) {
408
+ if (multi) {
409
+ return `edit_file: state-changing — NOT applied. Ask the user first via ask_user ("Apply ${pairs.length} replacements to ${args.path}?" with a one-line summary), then retry edit_file with confirm:true once they approve.`;
410
+ }
411
+ return confirmFirst('edit_file', args.path, `this edit: replace "${abbrev(pairs[0].old_string)}" with "${abbrev(pairs[0].new_string)}"`);
176
412
  }
177
413
  const gated = await gateReal(ctx.cwd, args.path);
178
414
  if (!gated.ok)
@@ -184,35 +420,49 @@ export async function runEditFile(args, ctx) {
184
420
  catch (err) {
185
421
  return `edit_file: cannot read '${gated.rel}': ${err.message}`;
186
422
  }
187
- const firstIdx = content.indexOf(args.old_string);
188
- if (firstIdx === -1) {
189
- return `edit_file: old_string not found in '${gated.rel}'. Re-read the file and retry with the exact text — the match is literal, including whitespace.`;
423
+ const { working, outcomes, failed } = applyPairs(content, pairs);
424
+ if (failed) {
425
+ const report = outcomes.map((o) => o.ok
426
+ ? ` ✓ #${o.index + 1}: would apply (line${o.startLine === o.endLine ? '' : `s`} ${o.startLine}${o.startLine === o.endLine ? '' : `–${o.endLine}`})`
427
+ : ` ✗ #${o.index + 1}: ${o.reason}`);
428
+ return [
429
+ `edit_file: NO changes applied — ${outcomes.filter((o) => !o.ok).length} of ${pairs.length} replacement(s) failed. All-or-nothing: nothing was written to '${gated.rel}'.`,
430
+ ...report,
431
+ `Re-read '${gated.rel}' and retry the whole batch with exact matches.`,
432
+ ].join('\n');
433
+ }
434
+ // Compute the diff once (used by dry_run and the multi-pair result).
435
+ const needDiff = multi || dryRun;
436
+ const diff = needDiff ? formatUnifiedDiff(content.split('\n'), working.split('\n'), { path: gated.rel }) : null;
437
+ if (dryRun) {
438
+ return [
439
+ `edit_file (dry_run): ${pairs.length} replacement(s) validated for '${gated.rel}' — nothing written.`,
440
+ ...outcomes.map(formatOutcomeLine),
441
+ diff ? `\n${diff}` : '\n(diff omitted — file too large to summarize inline)',
442
+ ].join('\n');
190
443
  }
191
- let occurrences = 0;
192
- let idx = 0;
193
- while ((idx = content.indexOf(args.old_string, idx)) !== -1) {
194
- occurrences += 1;
195
- idx += args.old_string.length;
196
- }
197
- if (occurrences > 1 && !args.allow_multiple) {
198
- return `edit_file: '${args.old_string}' occurs ${occurrences} times in '${gated.rel}' — ambiguous. Set allow_multiple:true to replace all, or include more surrounding text to narrow the match.`;
199
- }
200
- const lineAt = (pos) => content.slice(0, pos).split('\n').length;
201
- const startLine = lineAt(firstIdx);
202
- const endLine = lineAt(firstIdx + args.old_string.length);
203
- const next = args.allow_multiple
204
- ? content.split(args.old_string).join(args.new_string)
205
- : content.slice(0, firstIdx) + args.new_string + content.slice(firstIdx + args.old_string.length);
206
444
  try {
207
- await writeFile(gated.abs, next, 'utf-8');
445
+ await atomicWriteFile(gated.abs, working);
208
446
  }
209
447
  catch (err) {
210
448
  return `edit_file: write failed on '${gated.rel}': ${err.message}`;
211
449
  }
212
- const what = occurrences > 1 && args.allow_multiple
213
- ? `all ${occurrences} occurrences`
214
- : `lines ${startLine}${endLine !== startLine ? `–${endLine}` : ''}`;
215
- return `edit_file: applied to '${gated.rel}' (${what}). Written ${args.new_string.length} chars. Re-read the file to verify the change.`;
450
+ // Single-pair keeps its original, byte-compatible message.
451
+ if (!multi) {
452
+ const o = outcomes[0];
453
+ const what = o.occurrences > 1 && pairs[0].allow_multiple
454
+ ? `all ${o.occurrences} occurrences`
455
+ : `lines ${o.startLine}${o.endLine !== o.startLine ? `–${o.endLine}` : ''}`;
456
+ return `edit_file: applied to '${gated.rel}' (${what}). Written ${pairs[0].new_string.length} chars. Re-read the file to verify the change.`;
457
+ }
458
+ const oldLineCount = logicalLineCount(content);
459
+ const newLineCount = logicalLineCount(working);
460
+ const delta = newLineCount - oldLineCount;
461
+ return [
462
+ `edit_file: applied ${pairs.length} replacement(s) to '${gated.rel}' (${oldLineCount} → ${newLineCount} lines, ${delta >= 0 ? '+' : ''}${delta}).`,
463
+ ...outcomes.map(formatOutcomeLine),
464
+ diff ? `\n${diff}` : '\n(diff omitted — file too large to summarize inline)',
465
+ ].join('\n');
216
466
  }
217
467
  /**
218
468
  * Write the full content of a file (create or overwrite). Parent dirs are
@@ -1 +1 @@
1
- {"version":3,"file":"coding-tools.js","sourceRoot":"","sources":["../../src/tools/coding-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coding-tools.js","sourceRoot":"","sources":["../../src/tools/coding-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-send.d.ts","sourceRoot":"","sources":["../../src/tools/gateway-send.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAgHjD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA+DzF"}
1
+ {"version":3,"file":"gateway-send.d.ts","sourceRoot":"","sources":["../../src/tools/gateway-send.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAiLjD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA0EzF"}
@@ -123,6 +123,63 @@ async function sendMediaViaGateway(target, filePath, caption, liveGateway) {
123
123
  `does not support media or is not configured (WhatsApp/Telegram/Discord support media). ` +
124
124
  `The message was queued in the delivery ledger and will be retried.`);
125
125
  }
126
+ /**
127
+ * OUTBOUND AUTHORIZATION (the second gate — see `authorizeOutboundSend`).
128
+ *
129
+ * `allowedUsers` decides who may TRIGGER the agent. This decides who may then
130
+ * direct it to deliver to SOMEONE ELSE. Applied ONLY to gateway-triggered turns
131
+ * (`ctx.gateway.origin` set): a CLI/dashboard turn is the operator at the
132
+ * keyboard and is trusted by construction.
133
+ *
134
+ * Reading the policy is deferred-imported so the tools module stays
135
+ * import-light, and it NEVER throws — a policy read failure must not brick
136
+ * sending; it falls through to the (legacy) inherit behaviour.
137
+ */
138
+ async function authorizeGatewaySend(origin, target, ctx) {
139
+ try {
140
+ const { envPolicies, authorizeOutboundSend, normalizeSenderId } = await import('../gateway/registry.js');
141
+ const { ConfigManager } = await import('../config/manager.js');
142
+ const cfg = new ConfigManager().getAll();
143
+ const platform = origin.platform;
144
+ // Same merge order the running gateway uses: env < config.
145
+ const policy = {
146
+ ...(envPolicies()[platform] ?? {}),
147
+ ...(cfg.gateway?.policies?.[platform] ?? {}),
148
+ };
149
+ const ref = ctx.gateway?.directory?.resolve(target) ?? null;
150
+ const originNorm = normalizeSenderId(origin.channelId);
151
+ const ownConversation = !!ref &&
152
+ ref.platform === platform &&
153
+ originNorm.length > 0 &&
154
+ normalizeSenderId(ref.channelId) === originNorm;
155
+ const decision = authorizeOutboundSend({
156
+ policy,
157
+ senderId: origin.channelId,
158
+ ownConversation,
159
+ });
160
+ if (!decision.allowed) {
161
+ return { allowed: false, reason: decision.reason ?? 'not authorised to send to others.' };
162
+ }
163
+ // Optional target-approval: the recipient must be an APPROVED contact.
164
+ if (policy.requireApprovedTarget && !ownConversation && ref) {
165
+ const contacts = readGatewayContacts();
166
+ const hit = resolveContact(contacts, ref.platform, ref.channelId) ??
167
+ resolveContact(contacts, ref.platform, target);
168
+ if (!hit || hit.status !== 'approved') {
169
+ return {
170
+ allowed: false,
171
+ reason: `'${target}' is not an approved contact, and this platform requires approved recipients ` +
172
+ `(dashboard → Contacts → approve the person, or ask the admin to turn off 'require approved recipients').`,
173
+ };
174
+ }
175
+ }
176
+ return { allowed: true };
177
+ }
178
+ catch {
179
+ // Policy unavailable — never let an auth-read failure block a legitimate send.
180
+ return { allowed: true };
181
+ }
182
+ }
126
183
  /**
127
184
  * Run the gateway send tool — returns model-feedable text (never throws).
128
185
  * The input schema lives in the registry (single source, never hand-kept).
@@ -143,6 +200,16 @@ export async function runGatewaySendTool(args, ctx) {
143
200
  catch (err) {
144
201
  return `gateway_send: missing/invalid arguments — expected { target, text, image_path? }. ${err instanceof Error ? err.message.split('\n')[0] : ''}`.trim();
145
202
  }
203
+ // ── OUTBOUND AUTHORIZATION ── only for gateway-triggered turns (a remote
204
+ // sender asked the agent to message someone else). A CLI/dashboard turn has
205
+ // no origin and is the operator at the keyboard — always allowed.
206
+ const origin = ctx.gateway?.origin;
207
+ if (origin?.platform) {
208
+ const auth = await authorizeGatewaySend(origin, target, ctx);
209
+ if (!auth.allowed) {
210
+ return `gateway_send: 🚫 ${auth.reason ?? 'not authorised to send to others.'}`;
211
+ }
212
+ }
146
213
  // Image/media send path: read the file and send via sendMedia.
147
214
  if (image_path) {
148
215
  // The caption is: explicit caption → text (when text is provided) → undefined
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-send.js","sourceRoot":"","sources":["../../src/tools/gateway-send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-send.js","sourceRoot":"","sources":["../../src/tools/gateway-send.ts"],"names":[],"mappings":"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"}