@kenkaiiii/ggcoder 5.8.8 → 5.9.1

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.
@@ -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 openai / gpt-5.5)
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAI9D,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;CACxB;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqC7C;AAED,wBAAgB,UAAU,IAAI,QAAQ,EAAE,CAiBvC;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,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAIlE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CA2BvE;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,CAmC/F"}
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 openai / gpt-5.5)
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
- return sizes.map((s) => ({
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
- export function applyBaseline(raw, task) {
132
- let parsed;
133
- try {
134
- parsed = JSON.parse(stripFence(raw));
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
- catch {
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
- const occ = file.split(e.old_text).length - 1;
145
- if (occ === 1) {
146
- file = file.replace(e.old_text, e.new_text);
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
- let parsed;
163
- try {
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 ?? "openai";
248
- const model = process.env.GG_HL_MODEL ?? "gpt-5.5";
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), 4096);
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
- const hl = await call(provider, model, creds, hashlinePrompt(anchored.rendered, task.instruction), 2048);
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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"}