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.
- package/README.md +67 -0
- package/dist/cli/chat.d.ts +7 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +62 -14
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +23 -3
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts +9 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +85 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/gateway/channel-directory.d.ts +24 -0
- package/dist/gateway/channel-directory.d.ts.map +1 -1
- package/dist/gateway/channel-directory.js.map +1 -1
- package/dist/gateway/registry.d.ts +43 -1
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +70 -1
- package/dist/gateway/registry.js.map +1 -1
- package/dist/inference/tool-call-utils.d.ts +26 -0
- package/dist/inference/tool-call-utils.d.ts.map +1 -1
- package/dist/inference/tool-call-utils.js +69 -0
- package/dist/inference/tool-call-utils.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +41 -2
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +21 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/tools/coding-tools.d.ts +61 -8
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +303 -53
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/gateway-send.d.ts.map +1 -1
- package/dist/tools/gateway-send.js +67 -0
- package/dist/tools/gateway-send.js.map +1 -1
- package/dist/tools/git-digest.d.ts +25 -0
- package/dist/tools/git-digest.d.ts.map +1 -0
- package/dist/tools/git-digest.js +68 -0
- package/dist/tools/git-digest.js.map +1 -0
- package/dist/tools/loop-project-context.d.ts.map +1 -1
- package/dist/tools/loop-project-context.js +6 -39
- package/dist/tools/loop-project-context.js.map +1 -1
- package/dist/tools/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +22 -1
- package/dist/tools/loop-skill-hint.js.map +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +29 -9
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +25 -3
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +92 -5
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/unified-diff.d.ts +39 -0
- package/dist/tools/unified-diff.d.ts.map +1 -0
- package/dist/tools/unified-diff.js +182 -0
- package/dist/tools/unified-diff.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +6 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/project-context.d.ts +7 -0
- package/dist/web-dashboard/project-context.d.ts.map +1 -1
- package/dist/web-dashboard/project-context.js +3 -0
- package/dist/web-dashboard/project-context.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +11 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +11 -1
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +20 -0
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/web-dashboard/public/assets/index-Pzkg6L8v.js +207 -0
- package/src/web-dashboard/public/assets/{index-56yPnN_m.js.map → index-Pzkg6L8v.js.map} +1 -1
- package/src/web-dashboard/public/index.html +1 -1
- 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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
|
109
|
+
return { rel: gated.rel, error: `cannot stat '${gated.rel}': ${err.message}` };
|
|
93
110
|
}
|
|
94
111
|
if (info.isDirectory()) {
|
|
95
|
-
return
|
|
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
|
|
119
|
+
return { rel: gated.rel, error: `cannot read '${gated.rel}': ${err.message}` };
|
|
103
120
|
}
|
|
104
121
|
if (looksBinary(data)) {
|
|
105
|
-
return
|
|
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
|
|
116
|
-
let
|
|
117
|
-
if (numbered.length >
|
|
118
|
-
|
|
119
|
-
|
|
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
|
|
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: ${
|
|
124
|
-
`showing lines ${offset}–${
|
|
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${
|
|
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
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
172
|
-
|
|
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.
|
|
175
|
-
|
|
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
|
|
188
|
-
if (
|
|
189
|
-
|
|
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
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
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;
|
|
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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"}
|