@kenkaiiii/ggcoder 5.8.8 → 5.9.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/dist/core/bash-spawn-benchmark.d.ts +2 -0
- package/dist/core/bash-spawn-benchmark.d.ts.map +1 -0
- package/dist/core/bash-spawn-benchmark.js +139 -0
- package/dist/core/bash-spawn-benchmark.js.map +1 -0
- package/dist/core/hashline-edit-benchmark.d.ts +33 -1
- package/dist/core/hashline-edit-benchmark.d.ts.map +1 -1
- package/dist/core/hashline-edit-benchmark.js +193 -21
- package/dist/core/hashline-edit-benchmark.js.map +1 -1
- package/dist/core/hashline-edit-benchmark.test.js +51 -2
- package/dist/core/hashline-edit-benchmark.test.js.map +1 -1
- package/dist/core/persistent-shell.d.ts +27 -0
- package/dist/core/persistent-shell.d.ts.map +1 -0
- package/dist/core/persistent-shell.js +150 -0
- package/dist/core/persistent-shell.js.map +1 -0
- package/dist/core/persistent-shell.test.d.ts +2 -0
- package/dist/core/persistent-shell.test.d.ts.map +1 -0
- package/dist/core/persistent-shell.test.js +84 -0
- package/dist/core/persistent-shell.test.js.map +1 -0
- package/dist/tools/bash.d.ts +1 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +27 -2
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts +9 -2
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +91 -10
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +97 -0
- package/dist/tools/edit.test.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-spawn-benchmark.d.ts","sourceRoot":"","sources":["../../src/core/bash-spawn-benchmark.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-call spawn (what tools/bash.ts does today) vs a persistent shell session
|
|
3
|
+
* (what oh-my-pi's embedded "brush" bash gives them) — local measurement, no
|
|
4
|
+
* LLM calls needed.
|
|
5
|
+
*
|
|
6
|
+
* Strategy A — SPAWN (current): every command is `spawn("bash", ["-c", cmd])`,
|
|
7
|
+
* a fresh process with fresh env/cwd. Cost = fork/exec + shell startup per call.
|
|
8
|
+
*
|
|
9
|
+
* Strategy B — PERSISTENT: one long-lived `bash` process; commands are written
|
|
10
|
+
* to stdin and delimited with a sentinel echo. Cost ≈ pipe round-trip.
|
|
11
|
+
* Bonus property (qualitative): cd / env / shell state survive across calls.
|
|
12
|
+
*
|
|
13
|
+
* We run the same command list through both and report total + per-call wall
|
|
14
|
+
* time. Commands are trivial on purpose — we are measuring HARNESS overhead,
|
|
15
|
+
* not the commands themselves.
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* npx tsx src/core/bash-spawn-benchmark.ts
|
|
19
|
+
*
|
|
20
|
+
* Env overrides:
|
|
21
|
+
* GG_BASH_BENCH_N (commands per strategy, default 30)
|
|
22
|
+
*/
|
|
23
|
+
import { spawn } from "node:child_process";
|
|
24
|
+
import { randomUUID } from "node:crypto";
|
|
25
|
+
const COMMANDS = ["echo hello", "pwd", "ls / > /dev/null", "printf '%s' done", "true"];
|
|
26
|
+
function buildCommandList(n) {
|
|
27
|
+
const out = [];
|
|
28
|
+
for (let i = 0; i < n; i++)
|
|
29
|
+
out.push(COMMANDS[i % COMMANDS.length]);
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
// ── Strategy A: fresh spawn per call (mirrors tools/bash.ts) ──
|
|
33
|
+
function runSpawned(cmd) {
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const start = performance.now();
|
|
36
|
+
const child = spawn("bash", ["-c", cmd], { stdio: ["ignore", "pipe", "pipe"] });
|
|
37
|
+
child.stdout.on("data", () => { });
|
|
38
|
+
child.stderr.on("data", () => { });
|
|
39
|
+
child.on("error", reject);
|
|
40
|
+
child.on("close", () => resolve(performance.now() - start));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
// ── Strategy B: one persistent bash, sentinel-delimited ──
|
|
44
|
+
class PersistentShell {
|
|
45
|
+
child = spawn("bash", ["--norc", "--noprofile"], {
|
|
46
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
47
|
+
});
|
|
48
|
+
buffer = "";
|
|
49
|
+
waiter = null;
|
|
50
|
+
constructor() {
|
|
51
|
+
this.child.stdout.on("data", (d) => {
|
|
52
|
+
this.buffer += d.toString();
|
|
53
|
+
if (this.waiter && this.buffer.includes(this.waiter.sentinel)) {
|
|
54
|
+
const w = this.waiter;
|
|
55
|
+
this.waiter = null;
|
|
56
|
+
this.buffer = "";
|
|
57
|
+
w.resolve();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
this.child.stderr.on("data", () => { });
|
|
61
|
+
}
|
|
62
|
+
run(cmd) {
|
|
63
|
+
const start = performance.now();
|
|
64
|
+
const sentinel = `__GG_DONE_${randomUUID()}__`;
|
|
65
|
+
return new Promise((resolve) => {
|
|
66
|
+
this.waiter = { sentinel, resolve: () => resolve(performance.now() - start) };
|
|
67
|
+
this.child.stdin.write(`${cmd}\necho ${sentinel}\n`);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/** Prove state persistence: cd + env var survive across run() calls. */
|
|
71
|
+
async statePersists() {
|
|
72
|
+
await this.run("cd /tmp && export GG_BENCH_STATE=alive");
|
|
73
|
+
const sentinel = `__GG_STATE_${randomUUID()}__`;
|
|
74
|
+
const out = await new Promise((resolve) => {
|
|
75
|
+
let acc = "";
|
|
76
|
+
const onData = (d) => {
|
|
77
|
+
acc += d.toString();
|
|
78
|
+
if (acc.includes(sentinel)) {
|
|
79
|
+
this.child.stdout.off("data", onData);
|
|
80
|
+
resolve(acc);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
this.child.stdout.on("data", onData);
|
|
84
|
+
this.child.stdin.write(`pwd; echo "$GG_BENCH_STATE"; echo ${sentinel}\n`);
|
|
85
|
+
});
|
|
86
|
+
return out.includes("/tmp") && out.includes("alive");
|
|
87
|
+
}
|
|
88
|
+
close() {
|
|
89
|
+
this.child.stdin.end();
|
|
90
|
+
this.child.kill();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// ── Stats ──
|
|
94
|
+
function stats(samples) {
|
|
95
|
+
const sorted = [...samples].sort((a, b) => a - b);
|
|
96
|
+
const total = samples.reduce((s, x) => s + x, 0);
|
|
97
|
+
const at = (q) => sorted[Math.min(sorted.length - 1, Math.floor(q * sorted.length))];
|
|
98
|
+
return { total, mean: total / samples.length, p50: at(0.5), p95: at(0.95) };
|
|
99
|
+
}
|
|
100
|
+
function fmt(s) {
|
|
101
|
+
return (`total ${s.total.toFixed(0)}ms | mean ${s.mean.toFixed(1)}ms | ` +
|
|
102
|
+
`p50 ${s.p50.toFixed(1)}ms | p95 ${s.p95.toFixed(1)}ms`);
|
|
103
|
+
}
|
|
104
|
+
async function main() {
|
|
105
|
+
const n = Math.max(5, parseInt(process.env.GG_BASH_BENCH_N ?? "30", 10));
|
|
106
|
+
const cmds = buildCommandList(n);
|
|
107
|
+
console.log(`\n🐚 Bash harness overhead — ${n} commands per strategy\n`);
|
|
108
|
+
// Warm both paths once so first-touch costs don't skew either side.
|
|
109
|
+
await runSpawned("true");
|
|
110
|
+
const shell = new PersistentShell();
|
|
111
|
+
await shell.run("true");
|
|
112
|
+
const spawnTimes = [];
|
|
113
|
+
for (const c of cmds)
|
|
114
|
+
spawnTimes.push(await runSpawned(c));
|
|
115
|
+
const persistTimes = [];
|
|
116
|
+
for (const c of cmds)
|
|
117
|
+
persistTimes.push(await shell.run(c));
|
|
118
|
+
const persists = await shell.statePersists();
|
|
119
|
+
shell.close();
|
|
120
|
+
const a = stats(spawnTimes);
|
|
121
|
+
const b = stats(persistTimes);
|
|
122
|
+
console.log(`SPAWN-PER-CALL (current): ${fmt(a)}`);
|
|
123
|
+
console.log(`PERSISTENT SHELL (theirs): ${fmt(b)}`);
|
|
124
|
+
const saved = a.mean - b.mean;
|
|
125
|
+
console.log(`\nPer-call overhead saved: ${saved.toFixed(1)}ms ` +
|
|
126
|
+
`(${((saved / a.mean) * 100).toFixed(0)}% of mean call cost)`);
|
|
127
|
+
console.log(`State persistence across calls (cd/env): ${persists ? "YES" : "NO"}`);
|
|
128
|
+
console.log(`\nVerdict: persistent shell wins if per-call saving is meaningful at agent scale ` +
|
|
129
|
+
`(a long session runs hundreds of bash calls) AND state persistence is a UX win.\n`);
|
|
130
|
+
}
|
|
131
|
+
const isDirectRun = process.argv[1]?.endsWith("bash-spawn-benchmark.ts") ||
|
|
132
|
+
process.argv[1]?.endsWith("bash-spawn-benchmark.js");
|
|
133
|
+
if (isDirectRun) {
|
|
134
|
+
main().catch((err) => {
|
|
135
|
+
console.error("Benchmark failed:", err);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=bash-spawn-benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash-spawn-benchmark.js","sourceRoot":"","sources":["../../src/core/bash-spawn-benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,11 +21,16 @@
|
|
|
21
21
|
* the edit applied cleanly + produced the correct file, and an anchor-uniqueness
|
|
22
22
|
* / safety check. Edits are graded deterministically — no second model needed.
|
|
23
23
|
*
|
|
24
|
+
* The BASELINE apply path runs ggcoder's REAL edit ladder (fuzzy match +
|
|
25
|
+
* indent-flex + blank-edge strip + dotdotdots — the same edit-diff functions
|
|
26
|
+
* tools/edit.ts uses), so baseline numbers reflect what our tool actually
|
|
27
|
+
* recovers, not a naive exact-replace.
|
|
28
|
+
*
|
|
24
29
|
* Usage:
|
|
25
30
|
* npx tsx src/core/hashline-edit-benchmark.ts
|
|
26
31
|
*
|
|
27
32
|
* Env overrides:
|
|
28
|
-
* GG_HL_PROVIDER / GG_HL_MODEL (default
|
|
33
|
+
* GG_HL_PROVIDER / GG_HL_MODEL (default anthropic / claude-sonnet-5)
|
|
29
34
|
* GG_HL_REPEAT (runs per task, default 1 — raise to average noise)
|
|
30
35
|
*/
|
|
31
36
|
import { type AnchoredFile } from "./hashline.js";
|
|
@@ -38,8 +43,12 @@ export interface EditTask {
|
|
|
38
43
|
mustContain: string[];
|
|
39
44
|
/** Substrings that MUST still be present (unchanged anchors far from the edit). */
|
|
40
45
|
mustPreserve: string[];
|
|
46
|
+
/** Optional extra validator for tasks where substring checks are too weak. */
|
|
47
|
+
validate?: (file: string) => boolean;
|
|
41
48
|
}
|
|
42
49
|
export declare function genFile(lines: number): string;
|
|
50
|
+
/** Near-identical handler blocks — uniqueness pressure for string matching. */
|
|
51
|
+
export declare function genRepetitiveFile(blocks: number): string;
|
|
43
52
|
export declare function buildTasks(): EditTask[];
|
|
44
53
|
export interface ApplyOutcome {
|
|
45
54
|
applied: boolean;
|
|
@@ -49,7 +58,30 @@ export interface ApplyOutcome {
|
|
|
49
58
|
parsedEdits: number;
|
|
50
59
|
}
|
|
51
60
|
export declare function stripFence(s: string): string;
|
|
61
|
+
/**
|
|
62
|
+
* Parse the model's JSON envelope, tolerating literal (unescaped) newlines and
|
|
63
|
+
* tabs inside string values. In production, edits arrive as STRUCTURED
|
|
64
|
+
* tool-call arguments — the JSON envelope is a benchmark artifact — so both
|
|
65
|
+
* strategies get the same repair to keep the comparison about the EDIT FORMAT,
|
|
66
|
+
* not about JSON string-escaping discipline.
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseEnvelope<T>(raw: string): T | null;
|
|
52
69
|
export declare function checkAnchors(file: string, task: EditTask): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* ggcoder's REAL apply ladder, mirroring tools/edit.ts:
|
|
72
|
+
* 1. exact + smart-quote/dash fuzzy
|
|
73
|
+
* 2. indent-flex
|
|
74
|
+
* 3. blank-edge strip, retry 1+2
|
|
75
|
+
* 4. dotdotdots elision
|
|
76
|
+
* Returns the new working buffer or a failure reason.
|
|
77
|
+
*/
|
|
78
|
+
export declare function applyLadder(working: string, oldText: string, newText: string): {
|
|
79
|
+
ok: true;
|
|
80
|
+
working: string;
|
|
81
|
+
} | {
|
|
82
|
+
ok: false;
|
|
83
|
+
reason: "not_found" | "ambiguous";
|
|
84
|
+
};
|
|
53
85
|
export declare function applyBaseline(raw: string, task: EditTask): ApplyOutcome;
|
|
54
86
|
export declare function applyHashline(raw: string, task: EditTask, anchored: AnchoredFile): ApplyOutcome;
|
|
55
87
|
//# sourceMappingURL=hashline-edit-benchmark.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashline-edit-benchmark.d.ts","sourceRoot":"","sources":["../../src/core/hashline-edit-benchmark.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"hashline-edit-benchmark.d.ts","sourceRoot":"","sources":["../../src/core/hashline-edit-benchmark.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAW9D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,mFAAmF;IACnF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACtC;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqC7C;AAED,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAmBxD;AAED,wBAAgB,UAAU,IAAI,QAAQ,EAAE,CAwDvC;AA2CD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,wFAAwF;IACxF,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM5C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAkDtD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAKlE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAAA;CAAE,CAiClF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CA0BvE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,CAmC/F"}
|
|
@@ -21,16 +21,22 @@
|
|
|
21
21
|
* the edit applied cleanly + produced the correct file, and an anchor-uniqueness
|
|
22
22
|
* / safety check. Edits are graded deterministically — no second model needed.
|
|
23
23
|
*
|
|
24
|
+
* The BASELINE apply path runs ggcoder's REAL edit ladder (fuzzy match +
|
|
25
|
+
* indent-flex + blank-edge strip + dotdotdots — the same edit-diff functions
|
|
26
|
+
* tools/edit.ts uses), so baseline numbers reflect what our tool actually
|
|
27
|
+
* recovers, not a naive exact-replace.
|
|
28
|
+
*
|
|
24
29
|
* Usage:
|
|
25
30
|
* npx tsx src/core/hashline-edit-benchmark.ts
|
|
26
31
|
*
|
|
27
32
|
* Env overrides:
|
|
28
|
-
* GG_HL_PROVIDER / GG_HL_MODEL (default
|
|
33
|
+
* GG_HL_PROVIDER / GG_HL_MODEL (default anthropic / claude-sonnet-5)
|
|
29
34
|
* GG_HL_REPEAT (runs per task, default 1 — raise to average noise)
|
|
30
35
|
*/
|
|
31
36
|
import { stream } from "@kenkaiiii/gg-ai";
|
|
32
37
|
import { AuthStorage } from "./auth-storage.js";
|
|
33
38
|
import { anchorFile } from "./hashline.js";
|
|
39
|
+
import { fuzzyFindText, countOccurrences, applyMissingLeadingWhitespace, applyDotdotdots, stripBlankEdges, } from "../tools/edit-diff.js";
|
|
34
40
|
export function genFile(lines) {
|
|
35
41
|
const head = [
|
|
36
42
|
`import { EventEmitter } from "node:events";`,
|
|
@@ -62,13 +68,25 @@ export function genFile(lines) {
|
|
|
62
68
|
];
|
|
63
69
|
return [...head, ...body, ...tail].join("\n");
|
|
64
70
|
}
|
|
71
|
+
/** Near-identical handler blocks — uniqueness pressure for string matching. */
|
|
72
|
+
export function genRepetitiveFile(blocks) {
|
|
73
|
+
const out = [
|
|
74
|
+
`import { parse, ok, error, type Request, type Response } from "./http.js";`,
|
|
75
|
+
``,
|
|
76
|
+
];
|
|
77
|
+
for (let i = 0; i < blocks; i++) {
|
|
78
|
+
out.push(`export function handleCase${i}(req: Request): Response {`, ` const value = parse(req);`, ` if (!value) {`, ` return error(400);`, ` }`, ` return ok(value);`, `}`, ``);
|
|
79
|
+
}
|
|
80
|
+
out.push(`export const HANDLER_COUNT = ${blocks};`, ``);
|
|
81
|
+
return out.join("\n");
|
|
82
|
+
}
|
|
65
83
|
export function buildTasks() {
|
|
66
84
|
const sizes = [
|
|
67
85
|
{ name: "small", lines: 40 },
|
|
68
86
|
{ name: "medium", lines: 160 },
|
|
69
87
|
{ name: "large", lines: 420 },
|
|
70
88
|
];
|
|
71
|
-
|
|
89
|
+
const sized = sizes.map((s) => ({
|
|
72
90
|
name: s.name,
|
|
73
91
|
approxLines: s.lines,
|
|
74
92
|
file: genFile(s.lines),
|
|
@@ -78,6 +96,42 @@ export function buildTasks() {
|
|
|
78
96
|
mustContain: ["cfg.timeoutMs * cfg.retries", "30000", "computeTimeout"],
|
|
79
97
|
mustPreserve: ["DEFAULT_TIMEOUT = 3000", `SENTINEL_TAIL = "anchor_${s.lines}_end"`, "task0"],
|
|
80
98
|
}));
|
|
99
|
+
// Repetitive: 12 identical bodies; only handleCase7 must change.
|
|
100
|
+
const repFile = genRepetitiveFile(12);
|
|
101
|
+
const repetitive = {
|
|
102
|
+
name: "repeat",
|
|
103
|
+
approxLines: repFile.split("\n").length,
|
|
104
|
+
file: repFile,
|
|
105
|
+
instruction: "In `handleCase7` ONLY, change `error(400)` to `error(422)`. " +
|
|
106
|
+
"Every other handler must keep returning error(400).",
|
|
107
|
+
mustContain: ["error(422)"],
|
|
108
|
+
mustPreserve: ["HANDLER_COUNT = 12", "handleCase0", "handleCase11"],
|
|
109
|
+
validate: (file) => {
|
|
110
|
+
if (countOccurrences(file, "error(422)") !== 1)
|
|
111
|
+
return false;
|
|
112
|
+
if (countOccurrences(file, "error(400)") !== 11)
|
|
113
|
+
return false;
|
|
114
|
+
const seven = file.indexOf("export function handleCase7");
|
|
115
|
+
const eight = file.indexOf("export function handleCase8");
|
|
116
|
+
const idx = file.indexOf("error(422)");
|
|
117
|
+
return seven !== -1 && idx > seven && (eight === -1 || idx < eight);
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
// Multi-edit: three scattered changes in one response.
|
|
121
|
+
const multiFile = genFile(200);
|
|
122
|
+
const multi = {
|
|
123
|
+
name: "multi",
|
|
124
|
+
approxLines: 200,
|
|
125
|
+
file: multiFile,
|
|
126
|
+
instruction: "Make THREE changes: (1) rename the constant `DEFAULT_TIMEOUT` to `FALLBACK_TIMEOUT_MS` " +
|
|
127
|
+
"everywhere it appears, (2) add a `maxRetries: number;` field to the `Config` interface, " +
|
|
128
|
+
"(3) in `computeTimeout`, return `0` when `cfg.label` is the empty string (before the " +
|
|
129
|
+
"existing logic).",
|
|
130
|
+
mustContain: ["FALLBACK_TIMEOUT_MS", "maxRetries: number;", "cfg.label"],
|
|
131
|
+
mustPreserve: [`SENTINEL_TAIL = "anchor_200_end"`, "task0"],
|
|
132
|
+
validate: (file) => countOccurrences(file, "DEFAULT_TIMEOUT") === 0,
|
|
133
|
+
};
|
|
134
|
+
return [...sized, repetitive, multi];
|
|
81
135
|
}
|
|
82
136
|
// ── Hashline anchoring lives in ./hashline.ts (shared with the read/edit tools) ──
|
|
83
137
|
// ── Prompts ─────────────────────────────────────────────────
|
|
@@ -119,6 +173,67 @@ export function stripFence(s) {
|
|
|
119
173
|
.replace(/\n?```$/i, "")
|
|
120
174
|
.trim();
|
|
121
175
|
}
|
|
176
|
+
/**
|
|
177
|
+
* Parse the model's JSON envelope, tolerating literal (unescaped) newlines and
|
|
178
|
+
* tabs inside string values. In production, edits arrive as STRUCTURED
|
|
179
|
+
* tool-call arguments — the JSON envelope is a benchmark artifact — so both
|
|
180
|
+
* strategies get the same repair to keep the comparison about the EDIT FORMAT,
|
|
181
|
+
* not about JSON string-escaping discipline.
|
|
182
|
+
*/
|
|
183
|
+
export function parseEnvelope(raw) {
|
|
184
|
+
const text = stripFence(raw);
|
|
185
|
+
try {
|
|
186
|
+
return JSON.parse(text);
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Repair pass: escape raw control chars that appear inside string literals.
|
|
190
|
+
let out = "";
|
|
191
|
+
let inString = false;
|
|
192
|
+
let escaped = false;
|
|
193
|
+
for (const ch of text) {
|
|
194
|
+
if (inString) {
|
|
195
|
+
if (escaped) {
|
|
196
|
+
out += ch;
|
|
197
|
+
escaped = false;
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (ch === "\\") {
|
|
201
|
+
out += ch;
|
|
202
|
+
escaped = true;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (ch === '"') {
|
|
206
|
+
inString = false;
|
|
207
|
+
out += ch;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
if (ch === "\n") {
|
|
211
|
+
out += "\\n";
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if (ch === "\r") {
|
|
215
|
+
out += "\\r";
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (ch === "\t") {
|
|
219
|
+
out += "\\t";
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
out += ch;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (ch === '"')
|
|
226
|
+
inString = true;
|
|
227
|
+
out += ch;
|
|
228
|
+
}
|
|
229
|
+
try {
|
|
230
|
+
return JSON.parse(out);
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
return null;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
122
237
|
export function checkAnchors(file, task) {
|
|
123
238
|
for (const s of task.mustContain)
|
|
124
239
|
if (!file.includes(s))
|
|
@@ -126,14 +241,58 @@ export function checkAnchors(file, task) {
|
|
|
126
241
|
for (const s of task.mustPreserve)
|
|
127
242
|
if (!file.includes(s))
|
|
128
243
|
return false;
|
|
244
|
+
if (task.validate && !task.validate(file))
|
|
245
|
+
return false;
|
|
129
246
|
return true;
|
|
130
247
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
248
|
+
/**
|
|
249
|
+
* ggcoder's REAL apply ladder, mirroring tools/edit.ts:
|
|
250
|
+
* 1. exact + smart-quote/dash fuzzy
|
|
251
|
+
* 2. indent-flex
|
|
252
|
+
* 3. blank-edge strip, retry 1+2
|
|
253
|
+
* 4. dotdotdots elision
|
|
254
|
+
* Returns the new working buffer or a failure reason.
|
|
255
|
+
*/
|
|
256
|
+
export function applyLadder(working, oldText, newText) {
|
|
257
|
+
const occurrences = countOccurrences(working, oldText);
|
|
258
|
+
if (occurrences > 1)
|
|
259
|
+
return { ok: false, reason: "ambiguous" };
|
|
260
|
+
if (occurrences === 1) {
|
|
261
|
+
const match = fuzzyFindText(working, oldText);
|
|
262
|
+
if (match.found) {
|
|
263
|
+
return {
|
|
264
|
+
ok: true,
|
|
265
|
+
working: working.slice(0, match.index) + newText + working.slice(match.index + match.matchLength),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
135
268
|
}
|
|
136
|
-
|
|
269
|
+
// not_found → fallback ladder (ambiguous deliberately does not fall through)
|
|
270
|
+
const flexed = applyMissingLeadingWhitespace(working, oldText, newText);
|
|
271
|
+
if (flexed !== null)
|
|
272
|
+
return { ok: true, working: flexed };
|
|
273
|
+
const stripped = stripBlankEdges(oldText);
|
|
274
|
+
if (stripped !== null) {
|
|
275
|
+
const strippedFlexed = applyMissingLeadingWhitespace(working, stripped, newText);
|
|
276
|
+
if (strippedFlexed !== null)
|
|
277
|
+
return { ok: true, working: strippedFlexed };
|
|
278
|
+
if (countOccurrences(working, stripped) === 1) {
|
|
279
|
+
const m = fuzzyFindText(working, stripped);
|
|
280
|
+
if (m.found) {
|
|
281
|
+
return {
|
|
282
|
+
ok: true,
|
|
283
|
+
working: working.slice(0, m.index) + newText + working.slice(m.index + m.matchLength),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const elided = applyDotdotdots(working, oldText, newText);
|
|
289
|
+
if (elided !== null)
|
|
290
|
+
return { ok: true, working: elided };
|
|
291
|
+
return { ok: false, reason: "not_found" };
|
|
292
|
+
}
|
|
293
|
+
export function applyBaseline(raw, task) {
|
|
294
|
+
const parsed = parseEnvelope(raw);
|
|
295
|
+
if (parsed === null) {
|
|
137
296
|
return { applied: false, correct: false, ambiguousEdits: 0, parsedEdits: 0 };
|
|
138
297
|
}
|
|
139
298
|
const edits = parsed.edits ?? [];
|
|
@@ -141,12 +300,13 @@ export function applyBaseline(raw, task) {
|
|
|
141
300
|
let applied = edits.length > 0;
|
|
142
301
|
let ambiguous = 0;
|
|
143
302
|
for (const e of edits) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
303
|
+
// Run the REAL edit ladder (fuzzy + indent-flex + blank-strip + dotdotdots),
|
|
304
|
+
// so the baseline gets full credit for everything our tool recovers today.
|
|
305
|
+
const result = applyLadder(file, e.old_text ?? "", e.new_text ?? "");
|
|
306
|
+
if (result.ok) {
|
|
307
|
+
file = result.working;
|
|
147
308
|
}
|
|
148
309
|
else {
|
|
149
|
-
// 0 = not found (drift/paraphrase), >1 = non-unique → our real tool rejects both.
|
|
150
310
|
ambiguous++;
|
|
151
311
|
applied = false;
|
|
152
312
|
}
|
|
@@ -159,11 +319,8 @@ export function applyBaseline(raw, task) {
|
|
|
159
319
|
};
|
|
160
320
|
}
|
|
161
321
|
export function applyHashline(raw, task, anchored) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
parsed = JSON.parse(stripFence(raw));
|
|
165
|
-
}
|
|
166
|
-
catch {
|
|
322
|
+
const parsed = parseEnvelope(raw);
|
|
323
|
+
if (parsed === null) {
|
|
167
324
|
return { applied: false, correct: false, ambiguousEdits: 0, parsedEdits: 0 };
|
|
168
325
|
}
|
|
169
326
|
const edits = parsed.edits ?? [];
|
|
@@ -244,8 +401,8 @@ async function callOnce(provider, model, c, messages, maxTokens) {
|
|
|
244
401
|
};
|
|
245
402
|
}
|
|
246
403
|
async function main() {
|
|
247
|
-
const provider = process.env.GG_HL_PROVIDER ?? "
|
|
248
|
-
const model = process.env.GG_HL_MODEL ?? "
|
|
404
|
+
const provider = process.env.GG_HL_PROVIDER ?? "anthropic";
|
|
405
|
+
const model = process.env.GG_HL_MODEL ?? "claude-sonnet-5";
|
|
249
406
|
const repeat = Math.max(1, parseInt(process.env.GG_HL_REPEAT ?? "1", 10));
|
|
250
407
|
const auth = new AuthStorage();
|
|
251
408
|
await auth.load();
|
|
@@ -263,31 +420,43 @@ async function main() {
|
|
|
263
420
|
baseInTok: 0,
|
|
264
421
|
baseOk: true,
|
|
265
422
|
baseAmbiguous: 0,
|
|
423
|
+
baseMs: 0,
|
|
266
424
|
hlOutTok: 0,
|
|
267
425
|
hlInTok: 0,
|
|
268
426
|
hlOk: true,
|
|
269
427
|
hlAmbiguous: 0,
|
|
428
|
+
hlMs: 0,
|
|
270
429
|
};
|
|
271
430
|
let baseOkCount = 0;
|
|
272
431
|
let hlOkCount = 0;
|
|
273
432
|
for (let r = 0; r < repeat; r++) {
|
|
274
433
|
process.stdout.write(`▶ ${task.name} (${task.approxLines} lines) run ${r + 1}/${repeat}\n`);
|
|
275
434
|
await sleep(1500);
|
|
276
|
-
const base = await call(provider, model, creds, baselinePrompt(task.file, task.instruction),
|
|
435
|
+
const base = await call(provider, model, creds, baselinePrompt(task.file, task.instruction), 8192);
|
|
277
436
|
const baseOut = applyBaseline(base.text, task);
|
|
437
|
+
if (!baseOut.correct && process.env.GG_HL_DEBUG) {
|
|
438
|
+
process.stdout.write(` [debug] baseline raw:\n${base.text.slice(0, 1200)}\n`);
|
|
439
|
+
}
|
|
278
440
|
agg.baseOutTok += base.outputTokens;
|
|
279
441
|
agg.baseInTok += base.inputTokens;
|
|
280
442
|
agg.baseAmbiguous += baseOut.ambiguousEdits;
|
|
443
|
+
agg.baseMs += base.wallMs;
|
|
281
444
|
if (baseOut.correct)
|
|
282
445
|
baseOkCount++;
|
|
283
446
|
process.stdout.write(` baseline: ${base.outputTokens} out tok | ${baseOut.correct ? "OK" : "FAIL"}` +
|
|
284
447
|
`${baseOut.ambiguousEdits ? ` (${baseOut.ambiguousEdits} non-unique)` : ""}\n`);
|
|
285
448
|
await sleep(1500);
|
|
286
|
-
|
|
449
|
+
// Same cap as baseline — an asymmetric cap truncates multi-edit responses
|
|
450
|
+
// and shows up as a fake FAIL.
|
|
451
|
+
const hl = await call(provider, model, creds, hashlinePrompt(anchored.rendered, task.instruction), 8192);
|
|
287
452
|
const hlOut = applyHashline(hl.text, task, anchored);
|
|
453
|
+
if (!hlOut.correct && process.env.GG_HL_DEBUG) {
|
|
454
|
+
process.stdout.write(` [debug] hashline raw:\n${hl.text.slice(0, 1200)}\n`);
|
|
455
|
+
}
|
|
288
456
|
agg.hlOutTok += hl.outputTokens;
|
|
289
457
|
agg.hlInTok += hl.inputTokens;
|
|
290
458
|
agg.hlAmbiguous += hlOut.ambiguousEdits;
|
|
459
|
+
agg.hlMs += hl.wallMs;
|
|
291
460
|
if (hlOut.correct)
|
|
292
461
|
hlOkCount++;
|
|
293
462
|
process.stdout.write(` hashline: ${hl.outputTokens} out tok | ${hlOut.correct ? "OK" : "FAIL"}` +
|
|
@@ -295,21 +464,24 @@ async function main() {
|
|
|
295
464
|
}
|
|
296
465
|
agg.baseOutTok = Math.round(agg.baseOutTok / repeat);
|
|
297
466
|
agg.baseInTok = Math.round(agg.baseInTok / repeat);
|
|
467
|
+
agg.baseMs = Math.round(agg.baseMs / repeat);
|
|
298
468
|
agg.hlOutTok = Math.round(agg.hlOutTok / repeat);
|
|
299
469
|
agg.hlInTok = Math.round(agg.hlInTok / repeat);
|
|
470
|
+
agg.hlMs = Math.round(agg.hlMs / repeat);
|
|
300
471
|
agg.baseOk = baseOkCount === repeat;
|
|
301
472
|
agg.hlOk = hlOkCount === repeat;
|
|
302
473
|
rows.push(agg);
|
|
303
474
|
}
|
|
304
475
|
// ── Report ──
|
|
305
476
|
console.log("══════════════════════ RESULTS ══════════════════════\n");
|
|
306
|
-
console.log("Task Lines | base out-tok | hashline out-tok | Δ out | in-tok base/hl | OK base/hl");
|
|
477
|
+
console.log("Task Lines | base out-tok | hashline out-tok | Δ out | in-tok base/hl | ms base/hl | OK base/hl");
|
|
307
478
|
for (const r of rows) {
|
|
308
479
|
const delta = r.baseOutTok > 0 ? ((r.baseOutTok - r.hlOutTok) / r.baseOutTok) * 100 : 0;
|
|
309
480
|
console.log(`${r.task.padEnd(7)} ${String(r.lines).padStart(4)} | ` +
|
|
310
481
|
`${String(r.baseOutTok).padStart(12)} | ${String(r.hlOutTok).padStart(16)} | ` +
|
|
311
482
|
`${((delta >= 0 ? "-" : "+") + Math.abs(delta).toFixed(0) + "%").padStart(7)} | ` +
|
|
312
483
|
`${String(r.baseInTok).padStart(6)}/${String(r.hlInTok).padStart(6)} | ` +
|
|
484
|
+
`${String(r.baseMs).padStart(5)}/${String(r.hlMs).padStart(5)} | ` +
|
|
313
485
|
`${r.baseOk ? "OK" : "FAIL"}/${r.hlOk ? "OK" : "FAIL"}`);
|
|
314
486
|
}
|
|
315
487
|
const sum = (f) => rows.reduce((s, r) => s + f(r), 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashline-edit-benchmark.js","sourceRoot":"","sources":["../../src/core/hashline-edit-benchmark.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hashline-edit-benchmark.js","sourceRoot":"","sources":["../../src/core/hashline-edit-benchmark.ts"],"names":[],"mappings":"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"}
|