@kenkaiiii/ggcoder 5.49.9 → 5.49.11
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/dist/core/agent-session.d.ts +12 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +58 -9
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/env-delta.d.ts +27 -0
- package/dist/core/env-delta.d.ts.map +1 -0
- package/dist/core/env-delta.js +60 -0
- package/dist/core/env-delta.js.map +1 -0
- package/dist/core/session-manager.d.ts +18 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +62 -23
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/verification-gate.d.ts +59 -1
- package/dist/core/verification-gate.d.ts.map +1 -1
- package/dist/core/verification-gate.js +165 -6
- package/dist/core/verification-gate.js.map +1 -1
- package/dist/tools/operations.d.ts +48 -0
- package/dist/tools/operations.d.ts.map +1 -1
- package/dist/tools/operations.js +92 -2
- package/dist/tools/operations.js.map +1 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +35 -3
- package/dist/tools/read.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/** Follow-ups per run. After this the gate is silent for the rest of the run. */
|
|
2
2
|
export const MAX_VERIFICATION_INJECTIONS = 1;
|
|
3
|
+
/** Tamper-disclosure demands per run. Same reasoning as above: one is enough. */
|
|
4
|
+
export const MAX_TAMPER_INJECTIONS = 1;
|
|
3
5
|
/** Words that may precede the real command without changing its shape. */
|
|
4
6
|
const SHELL_WRAPPERS = new Set([
|
|
5
7
|
"env",
|
|
@@ -219,6 +221,114 @@ const CODE_EXT_RE = /\.(?:[cm]?[jt]sx?|py|rb|go|rs|java|kt|kts|swift|c|h|cpp|cc|
|
|
|
219
221
|
export function isCodeFilePath(filePath) {
|
|
220
222
|
return CODE_EXT_RE.test(filePath);
|
|
221
223
|
}
|
|
224
|
+
/**
|
|
225
|
+
* Files that define what a check ASSERTS rather than what it tests: test files
|
|
226
|
+
* and test directories, test-runner configs, and the type/lint configs whose
|
|
227
|
+
* strictness the checks inherit. Editing one of these can turn a failing check
|
|
228
|
+
* green without touching the behaviour under test.
|
|
229
|
+
*
|
|
230
|
+
* Deliberately matched on path shape only. Both error directions are cheap: a
|
|
231
|
+
* miss leaves today's behavior, a false positive costs one disclosure sentence.
|
|
232
|
+
*/
|
|
233
|
+
export function isCheckOwnFile(filePath) {
|
|
234
|
+
const normalized = filePath.replace(/\\/g, "/");
|
|
235
|
+
const base = normalized.slice(normalized.lastIndexOf("/") + 1);
|
|
236
|
+
// A test/spec file, by suffix (foo.test.ts, foo_test.go, test_foo.py).
|
|
237
|
+
if (/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(base))
|
|
238
|
+
return true;
|
|
239
|
+
if (/_test\.(?:go|py|rb|rs)$/.test(base) || /^test_.+\.py$/.test(base))
|
|
240
|
+
return true;
|
|
241
|
+
if (/(?:^|\.)spec\.[cm]?[jt]sx?$/.test(base))
|
|
242
|
+
return true;
|
|
243
|
+
// Anything under a tests directory.
|
|
244
|
+
if (/(?:^|\/)(?:tests?|__tests__|spec|specs|e2e|testdata|fixtures)\//.test(normalized)) {
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
// Test-runner and check configuration.
|
|
248
|
+
if (/^(?:vitest|jest|playwright|cypress|karma|mocha|ava|nightwatch|wdio)\.config\.[cm]?[jt]s$/.test(base)) {
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
if (/^(?:jest|vitest|mocha|ava|nyc|c8)\.(?:config|setup)\./.test(base))
|
|
252
|
+
return true;
|
|
253
|
+
// Type / lint configuration whose strictness the checks inherit.
|
|
254
|
+
if (/^tsconfig(?:\.[\w-]+)?\.json$/.test(base))
|
|
255
|
+
return true;
|
|
256
|
+
if (/^(?:\.eslintrc(?:\.[\w-]+)?|eslint\.config\.[cm]?[jt]s)$/.test(base))
|
|
257
|
+
return true;
|
|
258
|
+
if (/^(?:biome|\.golangci|\.rubocop|phpstan|psalm)\.(?:jsonc?|ya?ml|neon|xml|toml)$/.test(base)) {
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
if (/^(?:pyproject\.toml|setup\.cfg|tox\.ini|pytest\.ini|mypy\.ini|\.flake8)$/.test(base)) {
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
if (/^conftest\.py$/.test(base))
|
|
265
|
+
return true;
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Markers that silence or skip a check rather than satisfy it. Matched only
|
|
270
|
+
* against text the model ADDED, so pre-existing suppressions in a file never
|
|
271
|
+
* trip the gate.
|
|
272
|
+
*
|
|
273
|
+
* Deliberately limited to unambiguous intent (an explicit suppression pragma, a
|
|
274
|
+
* skipped or narrowed test). Judgement calls that are ordinary in real test code
|
|
275
|
+
* — `as any`, a loosened assertion — are NOT matched: at one extra model turn
|
|
276
|
+
* per false positive, a noisy signal costs more than the rare miss.
|
|
277
|
+
*/
|
|
278
|
+
const SUPPRESSION_MARKERS = [
|
|
279
|
+
{ re: /@ts-(?:ignore|expect-error|nocheck)\b/, what: "TypeScript error suppression" },
|
|
280
|
+
{ re: /eslint-disable(?:-next-line|-line)?\b/, what: "ESLint rule suppression" },
|
|
281
|
+
{ re: /#\s*type:\s*ignore\b/, what: "mypy type-ignore" },
|
|
282
|
+
{ re: /#\s*noqa\b/, what: "flake8/ruff noqa" },
|
|
283
|
+
{ re: /#\s*(?:pylint|mypy|ruff):\s*disable\b/, what: "Python linter suppression" },
|
|
284
|
+
{ re: /#\[allow\(/, what: "Rust allow attribute" },
|
|
285
|
+
{ re: /\/\/\s*nolint\b/, what: "Go nolint directive" },
|
|
286
|
+
{ re: /@SuppressWarnings\b/, what: "Java warning suppression" },
|
|
287
|
+
{
|
|
288
|
+
re: /\b(?:it|test|describe|context)\s*\.\s*(?:skip|todo)\s*\(/,
|
|
289
|
+
what: "skipped test",
|
|
290
|
+
},
|
|
291
|
+
{ re: /\b(?:xit|xdescribe|xtest)\s*\(/, what: "skipped test" },
|
|
292
|
+
{
|
|
293
|
+
re: /\b(?:it|test|describe|context)\s*\.\s*only\s*\(/,
|
|
294
|
+
what: "test run narrowed to .only",
|
|
295
|
+
},
|
|
296
|
+
{ re: /@pytest\.mark\.(?:skip|xfail)\b/, what: "skipped pytest case" },
|
|
297
|
+
{ re: /\bt\.Skip\s*\(/, what: "skipped Go test" },
|
|
298
|
+
{ re: /#\[ignore\]/, what: "ignored Rust test" },
|
|
299
|
+
];
|
|
300
|
+
/** The `+` lines of a unified diff, with the marker stripped. */
|
|
301
|
+
export function extractAddedLines(diff) {
|
|
302
|
+
return diff
|
|
303
|
+
.split("\n")
|
|
304
|
+
.filter((line) => line.startsWith("+") && !line.startsWith("+++"))
|
|
305
|
+
.map((line) => line.slice(1))
|
|
306
|
+
.join("\n");
|
|
307
|
+
}
|
|
308
|
+
/** Suppression/skip markers present in newly added text, de-duplicated. */
|
|
309
|
+
export function detectCheckWeakening(addedText) {
|
|
310
|
+
const found = new Set();
|
|
311
|
+
for (const { re, what } of SUPPRESSION_MARKERS) {
|
|
312
|
+
if (re.test(addedText))
|
|
313
|
+
found.add(what);
|
|
314
|
+
}
|
|
315
|
+
return [...found];
|
|
316
|
+
}
|
|
317
|
+
export function buildTamperDisclosureMessage(suspects) {
|
|
318
|
+
return {
|
|
319
|
+
role: "user",
|
|
320
|
+
provenance: { source: "runtime", kind: "completion_gate", visibility: "hidden" },
|
|
321
|
+
content: "Verification gate: a check passed in this run, but this run also changed what the " +
|
|
322
|
+
"checks themselves assert:\n" +
|
|
323
|
+
suspects.map(({ filePath, reason }) => `- ${filePath} — ${reason}`).join("\n") +
|
|
324
|
+
"\nA check that was itself edited does not prove the code works. If these edits were " +
|
|
325
|
+
"legitimate (a new test, a test corrected against agreed behaviour, a suppression the " +
|
|
326
|
+
"user asked for), say so plainly in your final response and state why the fix stands " +
|
|
327
|
+
"without them. If instead the check was weakened, skipped, narrowed or silenced to get " +
|
|
328
|
+
"a green result, revert that now and fix the underlying code. This is the only time you " +
|
|
329
|
+
"will be asked — do not describe the change as verified without addressing this.",
|
|
330
|
+
};
|
|
331
|
+
}
|
|
222
332
|
export function buildVerificationFollowUpMessage(files) {
|
|
223
333
|
return {
|
|
224
334
|
role: "user",
|
|
@@ -243,11 +353,35 @@ export class VerificationGate {
|
|
|
243
353
|
lastMutationSeq = 0;
|
|
244
354
|
lastVerificationSeq = 0;
|
|
245
355
|
injections = 0;
|
|
356
|
+
tamperInjections = 0;
|
|
246
357
|
/** Code files mutated since the last verification — the gate's file list. */
|
|
247
358
|
mutatedFiles = new Set();
|
|
248
|
-
|
|
359
|
+
/**
|
|
360
|
+
* Mutations that changed what a check asserts. Keyed by path so repeated edits
|
|
361
|
+
* to one file disclose once. Deliberately NOT cleared by recordVerification():
|
|
362
|
+
* the whole point is that the passing check cannot clear the suspicion that it
|
|
363
|
+
* was the thing edited.
|
|
364
|
+
*/
|
|
365
|
+
suspects = new Map();
|
|
366
|
+
/**
|
|
367
|
+
* @param addedText Text the model ADDED in this mutation (the `+` lines of a
|
|
368
|
+
* diff, or a written file's full content). Scanned for suppression and skip
|
|
369
|
+
* markers; omit it and only the path check applies.
|
|
370
|
+
*/
|
|
371
|
+
recordMutation(filePath, addedText) {
|
|
249
372
|
this.lastMutationSeq = ++this.seq;
|
|
250
373
|
this.mutatedFiles.add(filePath);
|
|
374
|
+
const reasons = [];
|
|
375
|
+
if (isCheckOwnFile(filePath))
|
|
376
|
+
reasons.push("edits a test or check configuration");
|
|
377
|
+
if (addedText)
|
|
378
|
+
reasons.push(...detectCheckWeakening(addedText).map((what) => `adds ${what}`));
|
|
379
|
+
if (reasons.length === 0)
|
|
380
|
+
return;
|
|
381
|
+
// Keep the fullest reason seen for this file rather than the newest.
|
|
382
|
+
const existing = this.suspects.get(filePath);
|
|
383
|
+
const merged = [...new Set([...(existing?.split("; ") ?? []), ...reasons])].join("; ");
|
|
384
|
+
this.suspects.set(filePath, merged);
|
|
251
385
|
}
|
|
252
386
|
recordVerification() {
|
|
253
387
|
this.lastVerificationSeq = ++this.seq;
|
|
@@ -256,13 +390,29 @@ export class VerificationGate {
|
|
|
256
390
|
isOwed() {
|
|
257
391
|
return this.lastMutationSeq > this.lastVerificationSeq;
|
|
258
392
|
}
|
|
393
|
+
/**
|
|
394
|
+
* True when a check passed after the run altered what the checks assert —
|
|
395
|
+
* the false-green shape. Requires a verification to have completed: with none,
|
|
396
|
+
* the standard gate already demands one, and demanding disclosure of an
|
|
397
|
+
* unproven fix on top of it is noise.
|
|
398
|
+
*/
|
|
399
|
+
isTamperOwed() {
|
|
400
|
+
return this.suspects.size > 0 && this.lastVerificationSeq > 0;
|
|
401
|
+
}
|
|
402
|
+
/** Suspect mutations recorded this run, sorted for stable output. */
|
|
403
|
+
tamperSuspects() {
|
|
404
|
+
return [...this.suspects]
|
|
405
|
+
.map(([filePath, reason]) => ({ filePath, reason }))
|
|
406
|
+
.sort((a, b) => a.filePath.localeCompare(b.filePath));
|
|
407
|
+
}
|
|
259
408
|
/**
|
|
260
409
|
* Would a stop right now inject? Lets the session arm clients BEFORE the
|
|
261
410
|
* candidate final answer streams, so the draft the injection replaces is held
|
|
262
411
|
* rather than painted and then superseded.
|
|
263
412
|
*/
|
|
264
413
|
willInject() {
|
|
265
|
-
return this.isOwed() && this.injections < MAX_VERIFICATION_INJECTIONS
|
|
414
|
+
return ((this.isOwed() && this.injections < MAX_VERIFICATION_INJECTIONS) ||
|
|
415
|
+
(this.isTamperOwed() && this.tamperInjections < MAX_TAMPER_INJECTIONS));
|
|
266
416
|
}
|
|
267
417
|
/**
|
|
268
418
|
* The blocking message for the pre-stop hook, or null when nothing is owed
|
|
@@ -271,17 +421,26 @@ export class VerificationGate {
|
|
|
271
421
|
* and one more injection only costs the user another restated final answer.
|
|
272
422
|
*/
|
|
273
423
|
followUp() {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
this.injections
|
|
277
|
-
|
|
424
|
+
// "Nothing proved this" outranks "the proof may be rigged": with no check
|
|
425
|
+
// run at all there is not yet a false green to disclose.
|
|
426
|
+
if (this.isOwed() && this.injections < MAX_VERIFICATION_INJECTIONS) {
|
|
427
|
+
this.injections += 1;
|
|
428
|
+
return [buildVerificationFollowUpMessage([...this.mutatedFiles].sort())];
|
|
429
|
+
}
|
|
430
|
+
if (this.isTamperOwed() && this.tamperInjections < MAX_TAMPER_INJECTIONS) {
|
|
431
|
+
this.tamperInjections += 1;
|
|
432
|
+
return [buildTamperDisclosureMessage(this.tamperSuspects())];
|
|
433
|
+
}
|
|
434
|
+
return null;
|
|
278
435
|
}
|
|
279
436
|
reset() {
|
|
280
437
|
this.seq = 0;
|
|
281
438
|
this.lastMutationSeq = 0;
|
|
282
439
|
this.lastVerificationSeq = 0;
|
|
283
440
|
this.injections = 0;
|
|
441
|
+
this.tamperInjections = 0;
|
|
284
442
|
this.mutatedFiles.clear();
|
|
443
|
+
this.suspects.clear();
|
|
285
444
|
}
|
|
286
445
|
}
|
|
287
446
|
//# sourceMappingURL=verification-gate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-gate.js","sourceRoot":"","sources":["../../src/core/verification-gate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verification-gate.js","sourceRoot":"","sources":["../../src/core/verification-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,54 @@
|
|
|
1
1
|
import { type ChildProcess } from "node:child_process";
|
|
2
2
|
import { type ReadStream } from "node:fs";
|
|
3
3
|
import type { Dirent, Stats } from "node:fs";
|
|
4
|
+
/**
|
|
5
|
+
* Largest file any tool will pull into memory at once.
|
|
6
|
+
*
|
|
7
|
+
* We run ONE shared Node daemon per app process (see CLAUDE.md), so an
|
|
8
|
+
* unbounded `readFile` is not merely a slow read — it is every open window
|
|
9
|
+
* dying together when a multi-GB artifact lands in the heap. 20 MiB sits far
|
|
10
|
+
* above any source file (`read` itself only ever emits 50 KB of text) while
|
|
11
|
+
* still admitting a large image before the shrink pass.
|
|
12
|
+
*/
|
|
13
|
+
export declare const MAX_READ_BYTES: number;
|
|
14
|
+
/** The file exists but is too large to load; carries the numbers for the message. */
|
|
15
|
+
export declare class FileTooLargeError extends Error {
|
|
16
|
+
readonly filePath: string;
|
|
17
|
+
readonly size: number;
|
|
18
|
+
readonly limit: number;
|
|
19
|
+
constructor(filePath: string, size: number, limit: number);
|
|
20
|
+
}
|
|
21
|
+
/** The path resolved to something that is not a regular file (fifo, device, socket). */
|
|
22
|
+
export declare class NotRegularFileError extends Error {
|
|
23
|
+
readonly filePath: string;
|
|
24
|
+
constructor(filePath: string);
|
|
25
|
+
}
|
|
26
|
+
/** A symlink was found where a regular file was required. */
|
|
27
|
+
export declare class SymlinkRefusedError extends Error {
|
|
28
|
+
readonly filePath: string;
|
|
29
|
+
constructor(filePath: string);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read a whole file, refusing anything over `limit` bytes.
|
|
33
|
+
*
|
|
34
|
+
* Opens ONCE and judges the file from that same handle, so what we checked is
|
|
35
|
+
* what we read. The alternative — `lstat()` the path, then `readFile()` the
|
|
36
|
+
* path — inspects one file and reads whatever occupies the name a moment
|
|
37
|
+
* later, which is exactly how a swapped symlink gets its target read.
|
|
38
|
+
*
|
|
39
|
+
* Three flags, three different holes:
|
|
40
|
+
* - `O_NOFOLLOW` makes the kernel fail with ELOOP if the final component is a
|
|
41
|
+
* symlink, so the refusal happens atomically at open rather than in a
|
|
42
|
+
* separate syscall a caller could race.
|
|
43
|
+
* - `O_NONBLOCK` stops the open itself parking forever on a fifo (a named pipe
|
|
44
|
+
* called `x.png` would otherwise hang the tool call with no timeout); the
|
|
45
|
+
* non-regular check then rejects it, and regular files ignore the flag.
|
|
46
|
+
* - The size check bounds memory before a single byte is read.
|
|
47
|
+
*
|
|
48
|
+
* Windows defines neither flag (`?? 0` degrades to a plain read) and offers no
|
|
49
|
+
* path-reachable fifo here; `resolvePath` plus the sandbox still contain it.
|
|
50
|
+
*/
|
|
51
|
+
export declare function readFileBounded(filePath: string, limit?: number): Promise<Buffer>;
|
|
4
52
|
/**
|
|
5
53
|
* Abstraction over filesystem and process operations.
|
|
6
54
|
* Default implementation uses local Node.js APIs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAA8C,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,QAAmB,CAAC;AAE/C,qFAAqF;AACrF,qBAAa,iBAAkB,SAAQ,KAAK;IAExC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAFb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM;CAQzB;AAED,wFAAwF;AACxF,qBAAa,mBAAoB,SAAQ,KAAK;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CAItC;AAED,6DAA6D;AAC7D,qBAAa,mBAAoB,SAAQ,KAAK;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CAItC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAuB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExC,qEAAqE;IACrE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,gCAAgC;IAChC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAEnC,0CAA0C;IAC1C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAEpC,mDAAmD;IACnD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE3E,sCAAsC;IACtC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,2CAA2C;IAC3C,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,UAAU,CAAC;IAErE,8DAA8D;IAC9D,KAAK,CACH,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;KAClC,GACA,YAAY,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,cA6B7B,CAAC"}
|
package/dist/tools/operations.js
CHANGED
|
@@ -1,12 +1,102 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
2
|
import { spawn } from "node:child_process";
|
|
3
|
-
import { createReadStream } from "node:fs";
|
|
3
|
+
import { constants as fsConstants, createReadStream } from "node:fs";
|
|
4
|
+
/**
|
|
5
|
+
* Largest file any tool will pull into memory at once.
|
|
6
|
+
*
|
|
7
|
+
* We run ONE shared Node daemon per app process (see CLAUDE.md), so an
|
|
8
|
+
* unbounded `readFile` is not merely a slow read — it is every open window
|
|
9
|
+
* dying together when a multi-GB artifact lands in the heap. 20 MiB sits far
|
|
10
|
+
* above any source file (`read` itself only ever emits 50 KB of text) while
|
|
11
|
+
* still admitting a large image before the shrink pass.
|
|
12
|
+
*/
|
|
13
|
+
export const MAX_READ_BYTES = 20 * 1024 * 1024;
|
|
14
|
+
/** The file exists but is too large to load; carries the numbers for the message. */
|
|
15
|
+
export class FileTooLargeError extends Error {
|
|
16
|
+
filePath;
|
|
17
|
+
size;
|
|
18
|
+
limit;
|
|
19
|
+
constructor(filePath, size, limit) {
|
|
20
|
+
super(`File is ${(size / (1024 * 1024)).toFixed(1)} MB, over the ` +
|
|
21
|
+
`${Math.round(limit / (1024 * 1024))} MB read limit: ${filePath}`);
|
|
22
|
+
this.filePath = filePath;
|
|
23
|
+
this.size = size;
|
|
24
|
+
this.limit = limit;
|
|
25
|
+
this.name = "FileTooLargeError";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** The path resolved to something that is not a regular file (fifo, device, socket). */
|
|
29
|
+
export class NotRegularFileError extends Error {
|
|
30
|
+
filePath;
|
|
31
|
+
constructor(filePath) {
|
|
32
|
+
super(`Not a regular file: ${filePath}`);
|
|
33
|
+
this.filePath = filePath;
|
|
34
|
+
this.name = "NotRegularFileError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** A symlink was found where a regular file was required. */
|
|
38
|
+
export class SymlinkRefusedError extends Error {
|
|
39
|
+
filePath;
|
|
40
|
+
constructor(filePath) {
|
|
41
|
+
super(`Refusing to follow symlink: ${filePath}`);
|
|
42
|
+
this.filePath = filePath;
|
|
43
|
+
this.name = "SymlinkRefusedError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Read a whole file, refusing anything over `limit` bytes.
|
|
48
|
+
*
|
|
49
|
+
* Opens ONCE and judges the file from that same handle, so what we checked is
|
|
50
|
+
* what we read. The alternative — `lstat()` the path, then `readFile()` the
|
|
51
|
+
* path — inspects one file and reads whatever occupies the name a moment
|
|
52
|
+
* later, which is exactly how a swapped symlink gets its target read.
|
|
53
|
+
*
|
|
54
|
+
* Three flags, three different holes:
|
|
55
|
+
* - `O_NOFOLLOW` makes the kernel fail with ELOOP if the final component is a
|
|
56
|
+
* symlink, so the refusal happens atomically at open rather than in a
|
|
57
|
+
* separate syscall a caller could race.
|
|
58
|
+
* - `O_NONBLOCK` stops the open itself parking forever on a fifo (a named pipe
|
|
59
|
+
* called `x.png` would otherwise hang the tool call with no timeout); the
|
|
60
|
+
* non-regular check then rejects it, and regular files ignore the flag.
|
|
61
|
+
* - The size check bounds memory before a single byte is read.
|
|
62
|
+
*
|
|
63
|
+
* Windows defines neither flag (`?? 0` degrades to a plain read) and offers no
|
|
64
|
+
* path-reachable fifo here; `resolvePath` plus the sandbox still contain it.
|
|
65
|
+
*/
|
|
66
|
+
export async function readFileBounded(filePath, limit = MAX_READ_BYTES) {
|
|
67
|
+
const flags = fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | (fsConstants.O_NONBLOCK ?? 0);
|
|
68
|
+
let handle;
|
|
69
|
+
try {
|
|
70
|
+
handle = await fs.open(filePath, flags);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
// ELOOP here means O_NOFOLLOW refused a symlink — report that plainly
|
|
74
|
+
// rather than as a mystery open failure.
|
|
75
|
+
if (err.code === "ELOOP")
|
|
76
|
+
throw new SymlinkRefusedError(filePath);
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const stat = await handle.stat();
|
|
81
|
+
if (!stat.isFile())
|
|
82
|
+
throw new NotRegularFileError(filePath);
|
|
83
|
+
if (stat.size > limit)
|
|
84
|
+
throw new FileTooLargeError(filePath, stat.size, limit);
|
|
85
|
+
return await handle.readFile();
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
await handle.close();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
4
91
|
/**
|
|
5
92
|
* Default local filesystem + process operations.
|
|
6
93
|
* This is what tools use when running on the local machine.
|
|
7
94
|
*/
|
|
8
95
|
export const localOperations = {
|
|
9
|
-
|
|
96
|
+
// Bounded deliberately: this is the chokepoint every file-reading tool goes
|
|
97
|
+
// through (read, edit, code_search, code_nav), so the cap lives here once
|
|
98
|
+
// rather than in each caller. A remote implementation owns its own bound.
|
|
99
|
+
readFile: async (path) => (await readFileBounded(path)).toString("utf-8"),
|
|
10
100
|
writeFile: async (path, content) => {
|
|
11
101
|
const { dirname } = await import("node:path");
|
|
12
102
|
await fs.mkdir(dirname(path), { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/read.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAYjE,eAAO,MAAM,iBAAiB,aA+C5B,CAAC;AAEH,QAAA,MAAM,UAAU;;;;;iBAgBd,CAAC;AAyBH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,WAAW,EACvB,GAAG,GAAE,cAAgC,EACrC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AACvD;;;2DAG2D;AAC3D,cAAc,CAAC,EAAE,MAAM,GACtB,SAAS,CAAC,OAAO,UAAU,CAAC,CAoL9B"}
|
package/dist/tools/read.js
CHANGED
|
@@ -4,7 +4,7 @@ import { z } from "zod";
|
|
|
4
4
|
import { resolvePath, rejectSymlink } from "./path-utils.js";
|
|
5
5
|
import { truncateHead } from "./truncate.js";
|
|
6
6
|
import { writeOverflow } from "./overflow.js";
|
|
7
|
-
import { localOperations } from "./operations.js";
|
|
7
|
+
import { FileTooLargeError, NotRegularFileError, SymlinkRefusedError, localOperations, readFileBounded, } from "./operations.js";
|
|
8
8
|
import { recordRead } from "./read-tracker.js";
|
|
9
9
|
import { lineHash } from "../core/hashline.js";
|
|
10
10
|
import { IMAGE_EXTENSIONS, IMAGE_MEDIA_TYPES, VIDEO_EXTENSIONS, VIDEO_MEDIA_TYPES, compressVideoToFit, downscaleForPreview, shrinkToFit, } from "../utils/image.js";
|
|
@@ -71,6 +71,26 @@ const ReadParams = z.object({
|
|
|
71
71
|
.describe("Prefix each line with a stable `hash│` content anchor so a later `edit` can target lines " +
|
|
72
72
|
"by anchor and reject stale edits. Default false."),
|
|
73
73
|
});
|
|
74
|
+
/**
|
|
75
|
+
* Turn a refused bounded read into a message the model can act on.
|
|
76
|
+
*
|
|
77
|
+
* Both cases are dead ends for `read`, so the text names the tool that still
|
|
78
|
+
* works — otherwise the agent retries `read` with an offset and burns turns on
|
|
79
|
+
* a file it can never load.
|
|
80
|
+
*/
|
|
81
|
+
function describeBoundedReadError(err) {
|
|
82
|
+
if (err instanceof FileTooLargeError) {
|
|
83
|
+
return (`${err.message}. Use \`grep\` to search it, or \`bash\` with ` +
|
|
84
|
+
`\`sed -n '1,200p'\` / \`tail\` to view part of it.`);
|
|
85
|
+
}
|
|
86
|
+
if (err instanceof NotRegularFileError) {
|
|
87
|
+
return `${err.message}. Reading it could block forever; use \`bash\` if you really need its stream.`;
|
|
88
|
+
}
|
|
89
|
+
if (err instanceof SymlinkRefusedError) {
|
|
90
|
+
return `${err.message}. Read the file it points at directly, if that path is one you should be reading.`;
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
74
94
|
export function createReadTool(cwd, readFiles, ops = localOperations, onFileRead,
|
|
75
95
|
/** Max video payload (bytes) the active model accepts, or `undefined` for
|
|
76
96
|
* models without video support. When set, video files are returned as a
|
|
@@ -100,7 +120,10 @@ videoByteLimit) {
|
|
|
100
120
|
// structured content so the model can actually see the pixels.
|
|
101
121
|
if (IMAGE_EXTENSIONS.has(ext)) {
|
|
102
122
|
try {
|
|
103
|
-
|
|
123
|
+
// Bounded + opened once: an unbounded read here OOM-kills the shared
|
|
124
|
+
// daemon (every window's session with it) on a huge or non-regular
|
|
125
|
+
// file wearing an image extension.
|
|
126
|
+
const rawBuffer = await readFileBounded(resolved);
|
|
104
127
|
const mediaType = IMAGE_MEDIA_TYPES[ext] ?? "image/png";
|
|
105
128
|
const { buffer, mediaType: finalMediaType } = await shrinkToFit(rawBuffer, mediaType);
|
|
106
129
|
const resizedNote = buffer.length < rawBuffer.length
|
|
@@ -130,6 +153,9 @@ videoByteLimit) {
|
|
|
130
153
|
};
|
|
131
154
|
}
|
|
132
155
|
catch (err) {
|
|
156
|
+
const bounded = describeBoundedReadError(err);
|
|
157
|
+
if (bounded)
|
|
158
|
+
return bounded;
|
|
133
159
|
const code = err.code;
|
|
134
160
|
if (code === "ENOENT")
|
|
135
161
|
return `File not found: ${resolved}`;
|
|
@@ -168,7 +194,7 @@ videoByteLimit) {
|
|
|
168
194
|
` (auto-compressed from ${(result.originalBytes / (1024 * 1024)).toFixed(0)} MB to ` +
|
|
169
195
|
`${(result.compressedBytes / (1024 * 1024)).toFixed(0)} MB for analysis)`;
|
|
170
196
|
}
|
|
171
|
-
const rawBuffer = await
|
|
197
|
+
const rawBuffer = await readFileBounded(videoPath, videoByteLimit);
|
|
172
198
|
const mediaType = VIDEO_MEDIA_TYPES[ext] ?? "video/mp4";
|
|
173
199
|
return {
|
|
174
200
|
content: [
|
|
@@ -178,6 +204,9 @@ videoByteLimit) {
|
|
|
178
204
|
};
|
|
179
205
|
}
|
|
180
206
|
catch (err) {
|
|
207
|
+
const bounded = describeBoundedReadError(err);
|
|
208
|
+
if (bounded)
|
|
209
|
+
return bounded;
|
|
181
210
|
const code = err.code;
|
|
182
211
|
if (code === "ENOENT")
|
|
183
212
|
return `File not found: ${resolved}`;
|
|
@@ -201,6 +230,9 @@ videoByteLimit) {
|
|
|
201
230
|
raw = await ops.readFile(resolved);
|
|
202
231
|
}
|
|
203
232
|
catch (err) {
|
|
233
|
+
const bounded = describeBoundedReadError(err);
|
|
234
|
+
if (bounded)
|
|
235
|
+
return bounded;
|
|
204
236
|
const code = err.code;
|
|
205
237
|
if (code === "ENOENT")
|
|
206
238
|
return `File not found: ${resolved}`;
|
package/dist/tools/read.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kenkaiiii/ggcoder",
|
|
3
|
-
"version": "5.49.
|
|
3
|
+
"version": "5.49.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI coding agent with OAuth authentication for Anthropic, OpenAI, and Gemini",
|
|
6
6
|
"license": "MIT",
|
|
@@ -115,9 +115,9 @@
|
|
|
115
115
|
"typescript-language-server": "^5.3.0",
|
|
116
116
|
"wrap-ansi": "^10.0.0",
|
|
117
117
|
"zod": "^4.4.3",
|
|
118
|
-
"@kenkaiiii/gg-
|
|
119
|
-
"@kenkaiiii/gg-
|
|
120
|
-
"@kenkaiiii/gg-
|
|
118
|
+
"@kenkaiiii/gg-ai": "5.49.11",
|
|
119
|
+
"@kenkaiiii/gg-core": "5.49.11",
|
|
120
|
+
"@kenkaiiii/gg-agent": "5.49.11"
|
|
121
121
|
},
|
|
122
122
|
"optionalDependencies": {
|
|
123
123
|
"@huggingface/transformers": "^3.6.0",
|