@kernlang/agon 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/{chunk-52VTWOLH.js → chunk-46WNYE4R.js} +118 -162
  2. package/dist/chunk-46WNYE4R.js.map +1 -0
  3. package/dist/{chunk-XOJPAFCJ.js → chunk-4NTH3EAR.js} +286 -541
  4. package/dist/chunk-4NTH3EAR.js.map +1 -0
  5. package/dist/{chunk-H7KZ34VX.js → chunk-73ETZFDH.js} +8 -27
  6. package/dist/chunk-73ETZFDH.js.map +1 -0
  7. package/dist/chunk-DGTU4UWQ.js +489 -0
  8. package/dist/chunk-DGTU4UWQ.js.map +1 -0
  9. package/dist/chunk-GPYWJO2Q.js +2924 -0
  10. package/dist/chunk-GPYWJO2Q.js.map +1 -0
  11. package/dist/{chunk-PFHGKBQT.js → chunk-HAJIKZGU.js} +912 -228
  12. package/dist/chunk-HAJIKZGU.js.map +1 -0
  13. package/dist/chunk-HSPQEDHX.js +102 -0
  14. package/dist/chunk-HSPQEDHX.js.map +1 -0
  15. package/dist/{chunk-5QMVQPHY.js → chunk-SOUF7XTW.js} +1 -1
  16. package/dist/{chunk-5QMVQPHY.js.map → chunk-SOUF7XTW.js.map} +1 -1
  17. package/dist/{dispatch-6LQSMMGI.js → dispatch-XHLJ44TF.js} +2 -2
  18. package/dist/{forge-6NV4WCMB.js → forge-ZI7NE73F.js} +6 -5
  19. package/dist/index.js +2070 -3551
  20. package/dist/index.js.map +1 -1
  21. package/dist/plan-mode-KIXDKD63.js +17 -0
  22. package/dist/{src-4VOZ6GIN.js → src-4A5FVACG.js} +53 -3
  23. package/dist/update-DLPMYTF3.js +30 -0
  24. package/dist/update-DLPMYTF3.js.map +1 -0
  25. package/package.json +4 -4
  26. package/dist/chunk-52VTWOLH.js.map +0 -1
  27. package/dist/chunk-H7KZ34VX.js.map +0 -1
  28. package/dist/chunk-PFHGKBQT.js.map +0 -1
  29. package/dist/chunk-XOJPAFCJ.js.map +0 -1
  30. package/dist/plan-mode-OSU42TOI.js +0 -15
  31. /package/dist/{dispatch-6LQSMMGI.js.map → dispatch-XHLJ44TF.js.map} +0 -0
  32. /package/dist/{forge-6NV4WCMB.js.map → forge-ZI7NE73F.js.map} +0 -0
  33. /package/dist/{plan-mode-OSU42TOI.js.map → plan-mode-KIXDKD63.js.map} +0 -0
  34. /package/dist/{src-4VOZ6GIN.js.map → src-4A5FVACG.js.map} +0 -0
@@ -0,0 +1,489 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ loadConfig
4
+ } from "./chunk-HAJIKZGU.js";
5
+
6
+ // src/generated/signals/icons.ts
7
+ var ROMAN_ICONS = { read: "\u039E", edit: "\u270E", write: "\u2712", bash: "\u03DF", search: "\u2609", find: "\u2295", tool: "\u2692", campfire: "\u2632", brainstorm: "\u2609", tribunal: "\u2696", image: "\u229E", queue: "\u231B", prompt: "\u25BB", winner: "\u2605", success: "\u2714", fail: "\u2718", warning: "\u26A0", header: "\u25B8", nero: "\u2020", dotOn: "\u25C6", dotOff: "\u25C7", play: "\u25B6", refresh: "\u21BB", flag: "\u2691", check: "\u2714", cross: "\u2718", spinner: "\u25D0" };
8
+ var CLASSIC_ICONS = { read: "\u{1F4C4}", edit: "\u270F\uFE0F", write: "\u{1F4DD}", bash: "\u26A1", search: "\u{1F50D}", find: "\u{1F4C2}", tool: "\u{1F527}", campfire: "\u{1F525}", brainstorm: "\u{1F4A1}", tribunal: "\u2696", image: "\u{1F4CE}", queue: "\u23F3", prompt: "\u276F", winner: "\u2605", success: "\u2714", fail: "\u2718", warning: "\u26A0", header: "\u25B8", nero: "\u2694", dotOn: "\u25CF", dotOff: "\u25CB", play: "\u25B6", refresh: "\u21BB", flag: "\u2691", check: "\u2714", cross: "\u2718", spinner: "\u25D0" };
9
+ function icons() {
10
+ const theme = loadConfig().iconTheme ?? "roman";
11
+ return theme === "classic" ? CLASSIC_ICONS : ROMAN_ICONS;
12
+ }
13
+
14
+ // src/generated/blocks/output-format.ts
15
+ var BOLD = "\x1B[1m";
16
+ var DIM = "\x1B[2m";
17
+ var GREEN = "\x1B[32m";
18
+ var RED = "\x1B[31m";
19
+ var YELLOW = "\x1B[33m";
20
+ var CYAN = "\x1B[36m";
21
+ var RESET = "\x1B[0m";
22
+ var ENGINE_COLORS = { claude: 208, codex: 34, agy: 33, ollama: 255, aider: 141, openrouter: 197, qwen: 45, mistral: 75, opencode: 156, minimax: 124, zai: 124 };
23
+ function bold(text) {
24
+ return `${BOLD}${text}${RESET}`;
25
+ }
26
+ function dim(text) {
27
+ return `${DIM}${text}${RESET}`;
28
+ }
29
+ function green(text) {
30
+ return `${GREEN}${text}${RESET}`;
31
+ }
32
+ function red(text) {
33
+ return `${RED}${text}${RESET}`;
34
+ }
35
+ function yellow(text) {
36
+ return `${YELLOW}${text}${RESET}`;
37
+ }
38
+ function cyan(text) {
39
+ return `${CYAN}${text}${RESET}`;
40
+ }
41
+ function stripAnsi(str) {
42
+ return str.replace(/\x1b\[[0-9;]*m/g, "");
43
+ }
44
+ function visibleLength(str) {
45
+ return stripAnsi(str).length;
46
+ }
47
+ function header(text) {
48
+ const { header: h } = icons();
49
+ console.log(`
50
+ ${BOLD}${CYAN}${h} ${text}${RESET}`);
51
+ }
52
+ function success(text) {
53
+ const { success: s } = icons();
54
+ console.log(`${GREEN}${s}${RESET} ${text}`);
55
+ }
56
+ function fail(text) {
57
+ const { fail: f } = icons();
58
+ console.log(`${RED}${f}${RESET} ${text}`);
59
+ }
60
+ function warn(text) {
61
+ const { warning: w } = icons();
62
+ console.log(`${YELLOW}${w}${RESET} ${text}`);
63
+ }
64
+ function info(text) {
65
+ console.log(`${DIM}${text}${RESET}`);
66
+ }
67
+ function table(headers, rows) {
68
+ const widths = headers.map(
69
+ (h, i) => Math.max(visibleLength(h), ...rows.map((r) => visibleLength(r[i] ?? "")))
70
+ );
71
+ const headerLine = headers.map((h, i) => h.padEnd(widths[i])).join(" ");
72
+ const separator = widths.map((w) => "\u2500".repeat(w)).join("\u2500\u2500");
73
+ console.log(` ${bold(headerLine)}`);
74
+ console.log(` ${dim(separator)}`);
75
+ for (const row of rows) {
76
+ const line = row.map((cell, i) => {
77
+ const pad = widths[i] - visibleLength(cell);
78
+ return cell + " ".repeat(Math.max(0, pad));
79
+ }).join(" ");
80
+ console.log(` ${line}`);
81
+ }
82
+ }
83
+ function shortToolPath(filePath) {
84
+ const home = process.env.HOME;
85
+ const stripped = String(filePath ?? "").replace(`${process.cwd()}/`, "");
86
+ return home ? stripped.replace(home, "~") : stripped;
87
+ }
88
+ function isCesarTelemetryLine(message) {
89
+ const text = String(message ?? "").trim();
90
+ return text.startsWith("Cesar route:") || text.startsWith("What happened:");
91
+ }
92
+ function formatConfidenceToolLabel(parsed, rawInput) {
93
+ const rawValue = parsed?.value ?? parsed?.confidence ?? parsed?.score;
94
+ let value = Number(rawValue);
95
+ if (!Number.isFinite(value)) {
96
+ const text = String(rawInput ?? "");
97
+ const match = text.match(/"value"\s*:\s*(\d{1,3}(?:\.\d+)?)/) || text.match(/(\d{1,3})\s*%/);
98
+ if (match) {
99
+ value = Number(match[1]);
100
+ }
101
+ }
102
+ if (Number.isFinite(value)) {
103
+ const pct = value <= 1 && value > 0 ? Math.round(value * 100) : Math.round(value);
104
+ if (pct >= 0 && pct <= 100) {
105
+ const reasoning = String(parsed?.reasoning ?? parsed?.reason ?? parsed?.thought ?? "").replace(/\s+/g, " ").trim();
106
+ const shortReasoning = reasoning.length > 180 ? `${reasoning.slice(0, 177)}\u2026` : reasoning;
107
+ return shortReasoning ? `${pct}% confidence \xB7 ${shortReasoning}` : `${pct}% confidence`;
108
+ }
109
+ }
110
+ return "confidence";
111
+ }
112
+
113
+ // src/generated/blocks/markdown.ts
114
+ var FENCE_OPEN = /^```(\w*)\s*$/;
115
+ var FENCE_CLOSE = /^```\s*$/;
116
+ function isTableSeparator(line) {
117
+ return /^\|[\s:_-]+(\|[\s:_-]+)*\|?\s*$/.test(line.trim());
118
+ }
119
+ function isTableRow(line) {
120
+ const t = line.trim();
121
+ return t.startsWith("|") && t.includes("|", 1);
122
+ }
123
+ function parseTableAlignment(sepLine) {
124
+ const cells = sepLine.trim().replace(/^\||\|$/g, "").split("|");
125
+ return cells.map((c) => {
126
+ const t = c.trim();
127
+ if (t.startsWith(":") && t.endsWith(":")) return "center";
128
+ if (t.endsWith(":")) return "right";
129
+ return "left";
130
+ });
131
+ }
132
+ function parseTableCells(line) {
133
+ return line.trim().replace(/^\||\|$/g, "").split("|").map((c) => c.trim());
134
+ }
135
+ function emitProseWithTables(proseLines, segments) {
136
+ let i = 0;
137
+ let buffered = [];
138
+ function flushProse() {
139
+ const text = buffered.join("\n");
140
+ if (text.trim()) {
141
+ segments.push({ type: "prose", text, language: void 0, code: void 0, index: void 0, headers: void 0, rows: void 0, alignments: void 0 });
142
+ }
143
+ buffered = [];
144
+ }
145
+ while (i < proseLines.length) {
146
+ if (isTableRow(proseLines[i]) && i + 1 < proseLines.length && isTableSeparator(proseLines[i + 1])) {
147
+ flushProse();
148
+ const headers = parseTableCells(proseLines[i]);
149
+ const alignments = parseTableAlignment(proseLines[i + 1]);
150
+ const rows = [];
151
+ i += 2;
152
+ while (i < proseLines.length && isTableRow(proseLines[i]) && !isTableSeparator(proseLines[i])) {
153
+ rows.push(parseTableCells(proseLines[i]));
154
+ i++;
155
+ }
156
+ segments.push({ type: "table", text: void 0, language: void 0, code: void 0, index: void 0, headers, rows, alignments });
157
+ continue;
158
+ }
159
+ buffered.push(proseLines[i]);
160
+ i++;
161
+ }
162
+ flushProse();
163
+ }
164
+ var _mdCache = /* @__PURE__ */ new Map();
165
+ var _MD_CACHE_MAX = 500;
166
+ function parseMarkdownBlocks(text) {
167
+ let key;
168
+ if (text.length < 500) {
169
+ key = text;
170
+ } else {
171
+ let hash = 5381;
172
+ for (let i = 0; i < text.length; i++) {
173
+ hash = (hash << 5) + hash + text.charCodeAt(i) | 0;
174
+ }
175
+ key = `h:${hash}:${text.length}`;
176
+ }
177
+ const cached = _mdCache.get(key);
178
+ if (cached) return cached;
179
+ const lines = text.split("\n");
180
+ const segments = [];
181
+ let inCode = false;
182
+ let codeLang = "";
183
+ let codeLines = [];
184
+ let proseLines = [];
185
+ let codeIndex = 0;
186
+ for (const line of lines) {
187
+ const trimmed = line.trimStart();
188
+ if (!inCode) {
189
+ const openMatch = trimmed.match(FENCE_OPEN);
190
+ if (openMatch) {
191
+ emitProseWithTables(proseLines, segments);
192
+ proseLines = [];
193
+ inCode = true;
194
+ codeLang = openMatch[1] ?? "";
195
+ codeLines = [];
196
+ continue;
197
+ }
198
+ proseLines.push(line);
199
+ } else {
200
+ if (FENCE_CLOSE.test(trimmed)) {
201
+ if (codeLines.length > 0) {
202
+ codeIndex++;
203
+ segments.push({ type: "code", language: codeLang, code: codeLines.join("\n"), text: void 0, index: codeIndex, headers: void 0, rows: void 0, alignments: void 0 });
204
+ }
205
+ inCode = false;
206
+ codeLang = "";
207
+ codeLines = [];
208
+ continue;
209
+ }
210
+ codeLines.push(line);
211
+ }
212
+ }
213
+ if (inCode && codeLines.length > 0) {
214
+ codeIndex++;
215
+ segments.push({ type: "code", language: codeLang, code: codeLines.join("\n"), text: void 0, index: codeIndex, headers: void 0, rows: void 0, alignments: void 0 });
216
+ } else if (proseLines.length > 0) {
217
+ emitProseWithTables(proseLines, segments);
218
+ }
219
+ if (_mdCache.size >= _MD_CACHE_MAX) {
220
+ const firstKey = _mdCache.keys().next().value;
221
+ if (firstKey !== void 0) _mdCache.delete(firstKey);
222
+ }
223
+ _mdCache.set(key, segments);
224
+ return segments;
225
+ }
226
+ function truncateCodeLine(line, maxWidth) {
227
+ if (line.length <= maxWidth) {
228
+ return line;
229
+ }
230
+ const overflow = line.length - maxWidth + 1;
231
+ return line.slice(0, maxWidth - 1) + `\u2026+${overflow}`;
232
+ }
233
+ function extractCodexStructured(text) {
234
+ const summaryMatch = text.match(/summary:\s*"([\s\S]*?)"\s*(?:sections\s*\{|$)/);
235
+ const contentMatches = [...text.matchAll(/content:\s*"([\s\S]*?)"\s*\}/g)];
236
+ if (!summaryMatch || contentMatches.length === 0) {
237
+ return null;
238
+ }
239
+ const parts = [summaryMatch[1]];
240
+ const sectionMatches = [...text.matchAll(/\d+:\s*"([^"]+)"\s*\{\s*content:\s*"([\s\S]*?)"\s*\}/g)];
241
+ for (const m of sectionMatches) {
242
+ parts.push(`
243
+ ## ${m[1]}
244
+ ${m[2]}`);
245
+ }
246
+ return parts.join("\n").replace(/\\n/g, "\n").trim();
247
+ }
248
+ function parseStreamJsonLine(trimmed) {
249
+ try {
250
+ const parsed = JSON.parse(trimmed);
251
+ if (!parsed.type) return { action: "keep" };
252
+ if (parsed.type === "assistant" && parsed.message?.content) {
253
+ const content = typeof parsed.message.content === "string" ? parsed.message.content : Array.isArray(parsed.message.content) ? parsed.message.content.filter((b) => b.type === "text").map((b) => b.text).join("\n") : "";
254
+ return content ? { action: "use", content } : { action: "skip" };
255
+ }
256
+ if (parsed.type === "text" && parsed.part?.text) {
257
+ return { action: "use", content: parsed.part.text };
258
+ }
259
+ if (parsed.type === "result") {
260
+ if (parsed.subtype === "error_max_turns" || parsed.is_error) return { action: "skip" };
261
+ if (parsed.result && typeof parsed.result === "string") return { action: "use", content: parsed.result };
262
+ return { action: "skip" };
263
+ }
264
+ const skipTypes = [
265
+ "system",
266
+ "hook_started",
267
+ "hook_response",
268
+ "tool_use",
269
+ "tool_result",
270
+ "user",
271
+ "rate_limit_event",
272
+ "message_start",
273
+ "message_stop",
274
+ "message_delta",
275
+ "content_block_start",
276
+ "content_block_stop",
277
+ "content_block_delta",
278
+ "step_start",
279
+ "step_finish",
280
+ "step-start",
281
+ "step-finish",
282
+ "ping",
283
+ "error",
284
+ "init",
285
+ "session_start",
286
+ "session_end"
287
+ ];
288
+ if (skipTypes.includes(parsed.type)) return { action: "skip" };
289
+ if (parsed.type?.startsWith("hook_")) return { action: "skip" };
290
+ if (parsed.type?.startsWith("step_")) return { action: "skip" };
291
+ if (parsed.subtype === "system") return { action: "skip" };
292
+ if (parsed.sessionID || parsed.session_id || parsed.uuid) return { action: "skip" };
293
+ } catch {
294
+ }
295
+ return { action: "keep" };
296
+ }
297
+ function deduplicateInline(line) {
298
+ const len = line.length;
299
+ if (len < 10) return line;
300
+ for (let half = Math.floor(len / 2); half >= 5; half--) {
301
+ const candidate = line.slice(0, half);
302
+ if (line.slice(half).startsWith(candidate)) {
303
+ return candidate + line.slice(half + candidate.length);
304
+ }
305
+ }
306
+ return line;
307
+ }
308
+ function deduplicateParagraphs(text) {
309
+ const lines = text.split("\n");
310
+ const dedupedLines = lines.map((l) => deduplicateInline(l));
311
+ const joined = dedupedLines.join("\n");
312
+ const paragraphs = joined.split(/\n{2,}/);
313
+ const seen = /* @__PURE__ */ new Set();
314
+ const deduped = [];
315
+ for (const para of paragraphs) {
316
+ const normalized = para.trim().replace(/\s+/g, " ");
317
+ if (!normalized) {
318
+ continue;
319
+ }
320
+ if (seen.has(normalized)) {
321
+ continue;
322
+ }
323
+ seen.add(normalized);
324
+ deduped.push(para.trim());
325
+ }
326
+ return deduped.join("\n\n");
327
+ }
328
+ function stripBuddyThinkingNoise(text) {
329
+ const lines = text.split("\n");
330
+ const result = [];
331
+ for (let i = 0; i < lines.length; i++) {
332
+ const line = lines[i];
333
+ const trimmed = line.trim();
334
+ if (trimmed.startsWith("Command:") && trimmed.includes("/bin/")) continue;
335
+ if (trimmed.startsWith("Chunk ID:")) continue;
336
+ if (trimmed.startsWith("Wall time:")) continue;
337
+ if (trimmed.startsWith("Process exited with code")) continue;
338
+ if (trimmed.startsWith("Original token count:")) continue;
339
+ if (trimmed === "Output:") continue;
340
+ if (i + 1 < lines.length) {
341
+ const next = lines[i + 1].trim();
342
+ if (trimmed.length > 20 && next.startsWith(trimmed)) continue;
343
+ }
344
+ result.push(line);
345
+ }
346
+ return result.join("\n");
347
+ }
348
+ function shortenFilePaths(text) {
349
+ const fenceRe = /^```[\s\S]*?^```/gm;
350
+ const fences = [];
351
+ let fm;
352
+ while ((fm = fenceRe.exec(text)) !== null) {
353
+ fences.push({ start: fm.index, end: fm.index + fm[0].length });
354
+ }
355
+ function insideFence(pos) {
356
+ return fences.some((f) => pos >= f.start && pos < f.end);
357
+ }
358
+ const cwd = process.cwd();
359
+ const home = process.env.HOME ?? "";
360
+ const exts = "tsx|jsx|ts|js|json|kern|md|py|rs|go|yaml|yml|toml|sh|css|html|svelte|vue|rb|java|cpp|c|h";
361
+ const pathRe = new RegExp("(?<!`)(?:~/|/)[A-Za-z0-9._\\-/]+\\.(?:" + exts + ")(?::[0-9]+(?::[0-9]+)?|#L[0-9]+)?(?!`)", "g");
362
+ return text.replace(pathRe, (match, offset) => {
363
+ if (insideFence(offset)) return match;
364
+ if (match.length < 10) return match;
365
+ if (!match.includes("/")) return match;
366
+ let shortened = match;
367
+ if (shortened.startsWith("~/") && home) {
368
+ shortened = home + shortened.slice(1);
369
+ }
370
+ if (shortened.startsWith(cwd + "/")) {
371
+ shortened = shortened.slice(cwd.length + 1);
372
+ } else if (home && shortened.startsWith(home + "/")) {
373
+ shortened = "~/" + shortened.slice(home.length + 1);
374
+ }
375
+ const parts = shortened.split("/");
376
+ if (parts.length > 2) {
377
+ shortened = parts[parts.length - 1];
378
+ }
379
+ return "`" + shortened + "`";
380
+ });
381
+ }
382
+ function addParagraphBreaks(text) {
383
+ const paragraphs = text.split(/\n{2,}/);
384
+ const result = [];
385
+ for (const para of paragraphs) {
386
+ const lines = para.split("\n");
387
+ const isStructured = lines.some((l) => /^(#{1,3}\s|[-*]\s+\w|\d+\.\s+\w|>\s)/.test(l.trimStart()));
388
+ const totalLen = lines.reduce((sum, l) => sum + l.length, 0);
389
+ if (isStructured || totalLen < 250) {
390
+ result.push(para);
391
+ continue;
392
+ }
393
+ const joined = lines.join(" ");
394
+ const sentences = joined.split(/(?<=\.\s)(?=[A-Z])/);
395
+ if (sentences.length <= 2) {
396
+ result.push(para);
397
+ continue;
398
+ }
399
+ const chunks = [];
400
+ let current = "";
401
+ let count = 0;
402
+ for (const sentence of sentences) {
403
+ current += sentence;
404
+ count++;
405
+ if (count >= 3 || current.length > 250) {
406
+ chunks.push(current.trim());
407
+ current = "";
408
+ count = 0;
409
+ }
410
+ }
411
+ if (current.trim()) chunks.push(current.trim());
412
+ result.push(chunks.join("\n\n"));
413
+ }
414
+ return result.join("\n\n");
415
+ }
416
+ var _cleanCache = /* @__PURE__ */ new Map();
417
+ function cleanEngineOutput(raw) {
418
+ const cached = _cleanCache.get(raw);
419
+ if (cached !== void 0) {
420
+ return cached;
421
+ }
422
+ const lines = raw.split("\n");
423
+ const cleaned = [];
424
+ for (const line of lines) {
425
+ const trimmed = line.trim();
426
+ if (cleaned.length === 0 && !trimmed) {
427
+ continue;
428
+ }
429
+ if (trimmed.startsWith("{") && trimmed.includes('"type"')) {
430
+ const result2 = parseStreamJsonLine(trimmed);
431
+ if (result2.action === "skip") {
432
+ continue;
433
+ }
434
+ if (result2.action === "use") {
435
+ cleaned.push(result2.content);
436
+ continue;
437
+ }
438
+ }
439
+ cleaned.push(line);
440
+ }
441
+ let result = cleaned.join("\n").trim();
442
+ const codexResult = extractCodexStructured(result);
443
+ if (codexResult) {
444
+ result = codexResult;
445
+ }
446
+ result = result.replace(/<tool\s+name="[^"]*">[\s\S]*?<\/tool>/g, "");
447
+ result = result.replace(/<tool\s+name="[^"]*">[\s\S]*?<\/invoke>(\s*<\/[a-zA-Z_:]+>)*/g, "");
448
+ result = result.replace(/<tool_result[\s\S]*?<\/tool_result>/g, "");
449
+ result = result.replace(/<\/minimax:tool_call>/g, "");
450
+ result = result.replace(/<parameter\s+name="[^"]*">[^<]*<\/parameter>/g, "");
451
+ result = result.replace(/<tool_calls>[\s\S]*?<\/tool_calls>/gi, "");
452
+ result = result.replace(/<(Read|Write|Edit|Bash|Grep|Glob|LS|ListPlans|Retrieve)\b[\s\S]*?<\/\1>/g, "");
453
+ result = result.replace(/<\/?(file_path|path|pattern|command|query|content|old_string|new_string|start_line|end_line|id)>\s*/g, "");
454
+ result = result.replace(/<think>[\s\S]*?<\/think>\s*/gi, "");
455
+ result = result.replace(/^(I'm checking|I'm looking|I'm reading|I'm searching|I'm inspecting|Let me check|Let me look|Let me read|Let me search|Let me inspect|I've confirmed|I've verified|I've checked|I'll now|I will now|Now I'm|Now let me|First,? I'll|First,? let me|Next,? I'll|Next,? let me)\b[^.\n]*[.\n]\s*/gim, "");
456
+ result = stripBuddyThinkingNoise(result);
457
+ result = deduplicateParagraphs(result);
458
+ result = addParagraphBreaks(result);
459
+ result = shortenFilePaths(result);
460
+ if (_cleanCache.size > 200) {
461
+ _cleanCache.clear();
462
+ }
463
+ _cleanCache.set(raw, result);
464
+ return result;
465
+ }
466
+
467
+ export {
468
+ icons,
469
+ ENGINE_COLORS,
470
+ bold,
471
+ dim,
472
+ green,
473
+ red,
474
+ yellow,
475
+ cyan,
476
+ header,
477
+ success,
478
+ fail,
479
+ warn,
480
+ info,
481
+ table,
482
+ shortToolPath,
483
+ isCesarTelemetryLine,
484
+ formatConfidenceToolLabel,
485
+ parseMarkdownBlocks,
486
+ truncateCodeLine,
487
+ cleanEngineOutput
488
+ };
489
+ //# sourceMappingURL=chunk-DGTU4UWQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/generated/signals/icons.ts","../src/generated/blocks/output-format.ts","../src/generated/blocks/markdown.ts"],"sourcesContent":["// @generated by kern v3.5.7 — DO NOT EDIT. Source: src/kern/signals/icons.kern\n\nimport { loadConfig } from '@kernlang/agon-core';\n\n// @kern-source: icons:3\nexport interface IconSet {\n read: string;\n edit: string;\n write: string;\n bash: string;\n search: string;\n find: string;\n tool: string;\n campfire: string;\n brainstorm: string;\n tribunal: string;\n image: string;\n queue: string;\n prompt: string;\n winner: string;\n success: string;\n fail: string;\n warning: string;\n header: string;\n nero: string;\n dotOn: string;\n dotOff: string;\n play: string;\n refresh: string;\n flag: string;\n check: string;\n cross: string;\n spinner: string;\n}\n\n// @kern-source: icons:32\nexport const ROMAN_ICONS: IconSet = ({ read: '\\u039e', edit: '\\u270e', write: '\\u2712', bash: '\\u03df', search: '\\u2609', find: '\\u2295', tool: '\\u2692', campfire: '\\u2632', brainstorm: '\\u2609', tribunal: '\\u2696', image: '\\u229e', queue: '\\u231b', prompt: '\\u25bb', winner: '\\u2605', success: '\\u2714', fail: '\\u2718', warning: '\\u26a0', header: '\\u25b8', nero: '\\u2020', dotOn: '\\u25c6', dotOff: '\\u25c7', play: '\\u25b6', refresh: '\\u21bb', flag: '\\u2691', check: '\\u2714', cross: '\\u2718', spinner: '\\u25d0' });\n\n// @kern-source: icons:34\nexport const CLASSIC_ICONS: IconSet = ({ read: '\\ud83d\\udcc4', edit: '\\u270f\\ufe0f', write: '\\ud83d\\udcdd', bash: '\\u26a1', search: '\\ud83d\\udd0d', find: '\\ud83d\\udcc2', tool: '\\ud83d\\udd27', campfire: '\\ud83d\\udd25', brainstorm: '\\ud83d\\udca1', tribunal: '\\u2696', image: '\\ud83d\\udcce', queue: '\\u23f3', prompt: '\\u276f', winner: '\\u2605', success: '\\u2714', fail: '\\u2718', warning: '\\u26a0', header: '\\u25b8', nero: '\\u2694', dotOn: '\\u25cf', dotOff: '\\u25cb', play: '\\u25b6', refresh: '\\u21bb', flag: '\\u2691', check: '\\u2714', cross: '\\u2718', spinner: '\\u25d0' });\n\n/**\n * Resolve icon set from config. Call once per render cycle.\n */\n// @kern-source: icons:36\nexport function icons(): IconSet {\n const theme = loadConfig().iconTheme ?? 'roman';\n return (theme === 'classic') ? CLASSIC_ICONS : ROMAN_ICONS;\n}\n","// @generated by kern v3.5.8 — DO NOT EDIT. Source: src/kern/blocks/output-format.kern\n\nimport { icons } from '../signals/icons.js';\n\n// ── Module: OutputFormatting ──\n\nexport const BOLD: string = '\\x1b[1m';\n\nexport const DIM: string = '\\x1b[2m';\n\nexport const ITALIC: string = '\\x1b[3m';\n\nexport const GREEN: string = '\\x1b[32m';\n\nexport const RED: string = '\\x1b[31m';\n\nexport const YELLOW: string = '\\x1b[33m';\n\nexport const BLUE: string = '\\x1b[34m';\n\nexport const MAGENTA: string = '\\x1b[35m';\n\nexport const CYAN: string = '\\x1b[36m';\n\nexport const WHITE: string = '\\x1b[37m';\n\nexport const RESET: string = '\\x1b[0m';\n\nexport const LOGO_COLORS: number[] = [208, 214, 220, 226, 228, 230, 255];\n\nexport const ENGINE_COLORS: Record<string, number> = { claude: 208, codex: 34, agy: 33, ollama: 255, aider: 141, openrouter: 197, qwen: 45, mistral: 75, opencode: 156, minimax: 124, zai: 124 };\n\nexport function fg256(code: number, text: string): string {\n return `\\x1b[38;5;${code}m${text}${RESET}`;\n}\n\nexport function bgFg(bg: number, fg: number, text: string): string {\n return `\\x1b[48;5;${bg};38;5;${fg}m${text}${RESET}`;\n}\n\nexport function bold(text: string): string {\n return `${BOLD}${text}${RESET}`;\n}\n\nexport function dim(text: string): string {\n return `${DIM}${text}${RESET}`;\n}\n\nexport function green(text: string): string {\n return `${GREEN}${text}${RESET}`;\n}\n\nexport function red(text: string): string {\n return `${RED}${text}${RESET}`;\n}\n\nexport function yellow(text: string): string {\n return `${YELLOW}${text}${RESET}`;\n}\n\nexport function cyan(text: string): string {\n return `${CYAN}${text}${RESET}`;\n}\n\nexport function blue(text: string): string {\n return `${BLUE}${text}${RESET}`;\n}\n\nexport function magenta(text: string): string {\n return `${MAGENTA}${text}${RESET}`;\n}\n\nexport function white(text: string): string {\n return `${WHITE}${text}${RESET}`;\n}\n\nexport function italic(text: string): string {\n return `${ITALIC}${text}${RESET}`;\n}\n\nfunction stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\nfunction visibleLength(str: string): number {\n return stripAnsi(str).length;\n}\n\nexport function gradientText(text: string, colors: number[]): string {\n let result = '';\n const step = Math.max(1, Math.floor(text.length / colors.length));\n for (let i = 0; i < text.length; i++) {\n const colorIdx = Math.min(Math.floor(i / step), colors.length - 1);\n result += fg256(colors[colorIdx], text[i]);\n }\n return result;\n}\n\nexport function header(text: string): void {\n const { header: h } = icons();\n console.log(`\\n${BOLD}${CYAN}${h} ${text}${RESET}`);\n}\n\nexport function success(text: string): void {\n const { success: s } = icons();\n console.log(`${GREEN}${s}${RESET} ${text}`);\n}\n\nexport function fail(text: string): void {\n const { fail: f } = icons();\n console.log(`${RED}${f}${RESET} ${text}`);\n}\n\nexport function warn(text: string): void {\n const { warning: w } = icons();\n console.log(`${YELLOW}${w}${RESET} ${text}`);\n}\n\nexport function info(text: string): void {\n console.log(`${DIM}${text}${RESET}`);\n}\n\nexport function scoreboard(title: string, engineIds: string[], metrics: Array<{label:string,values:string[]}>, winnerId?: string|null): void {\n const labelWidth = Math.max(14, ...metrics.map((m: {label:string}) => m.label.length));\n const colWidths = engineIds.map((id: string, col: number) =>\n Math.max(\n visibleLength(id) + 2,\n ...metrics.map((m: {values:string[]}) => visibleLength(m.values[col] ?? '') + 2),\n ),\n );\n console.log(`\\n ${BOLD}${WHITE}${title}${RESET}`);\n const headerCells = engineIds.map((id: string, i: number) => {\n const color = ENGINE_COLORS[id] ?? 124;\n const name = id === winnerId ? `${icons().winner} ${id}` : id;\n const styled = fg256(color, BOLD + name + RESET);\n const pad = colWidths[i] - visibleLength(name);\n return styled + ' '.repeat(Math.max(0, pad));\n });\n console.log(` ${''.padEnd(labelWidth)} ${headerCells.join(' ')}`);\n const sepWidth = labelWidth + colWidths.reduce((s: number, w: number) => s + w + 2, 0) + 2;\n console.log(` ${DIM}${'─'.repeat(sepWidth)}${RESET}`);\n for (const metric of metrics) {\n const label = `${BOLD}${metric.label.padEnd(labelWidth)}${RESET}`;\n const cells = metric.values.map((val: string, i: number) => {\n const pad = colWidths[i] - visibleLength(val);\n return val + ' '.repeat(Math.max(0, pad));\n });\n console.log(` ${label} ${cells.join(' ')}`);\n }\n console.log('');\n}\n\nexport function table(headers: string[], rows: string[][]): void {\n const widths = headers.map((h: string, i: number) =>\n Math.max(visibleLength(h), ...rows.map((r: string[]) => visibleLength(r[i] ?? ''))),\n );\n const headerLine = headers\n .map((h: string, i: number) => h.padEnd(widths[i]))\n .join(' ');\n const separator = widths.map((w: number) => '─'.repeat(w)).join('──');\n console.log(` ${bold(headerLine)}`);\n console.log(` ${dim(separator)}`);\n for (const row of rows) {\n const line = row.map((cell: string, i: number) => {\n const pad = widths[i] - visibleLength(cell);\n return cell + ' '.repeat(Math.max(0, pad));\n }).join(' ');\n console.log(` ${line}`);\n }\n}\n\nexport function shortToolPath(filePath: string): string {\n const home = process.env.HOME; const stripped = String(filePath ?? '').replace(`${process.cwd()}/`, ''); return home ? stripped.replace(home, '~') : stripped;\n}\n\nexport function isCesarTelemetryLine(message: string): boolean {\n const text = String(message ?? '').trim();\n return text.startsWith('Cesar route:') || text.startsWith('What happened:');\n}\n\nexport function formatConfidenceToolLabel(parsed: any, rawInput: string): string {\n const rawValue = parsed?.value ?? parsed?.confidence ?? parsed?.score;\n let value = Number(rawValue);\n if (!Number.isFinite(value)) {\n const text = String(rawInput ?? '');\n const match = text.match(/\"value\"\\s*:\\s*(\\d{1,3}(?:\\.\\d+)?)/) || text.match(/(\\d{1,3})\\s*%/);\n if (match) {\n value = Number(match[1]);\n }\n }\n if (Number.isFinite(value)) {\n const pct = (value <= 1 && value > 0) ? Math.round(value * 100) : Math.round(value);\n if (pct >= 0 && pct <= 100) {\n const reasoning = String(parsed?.reasoning ?? parsed?.reason ?? parsed?.thought ?? '').replace(/\\s+/g, ' ').trim();\n const shortReasoning = (reasoning.length > 180) ? `${reasoning.slice(0, 177)}…` : reasoning;\n return shortReasoning ? `${pct}% confidence · ${shortReasoning}` : `${pct}% confidence`;\n }\n }\n return 'confidence';\n}\n","// @generated by kern v3.5.8 — DO NOT EDIT. Source: src/kern/blocks/markdown.kern\n\n// ── Module: MarkdownParsing ──\n\n// @kern-source: markdown:2\nexport interface ContentSegment {\n type: 'prose'|'code'|'table';\n text: string|undefined;\n language: string|undefined;\n code: string|undefined;\n index: number|undefined;\n headers: string[]|undefined;\n rows: string[][]|undefined;\n alignments: ('left'|'center'|'right')[]|undefined;\n}\n\n// @kern-source: markdown:12\nexport const FENCE_OPEN: RegExp = /^```(\\w*)\\s*$/;\n\n// @kern-source: markdown:14\nexport const FENCE_CLOSE: RegExp = /^```\\s*$/;\n\n// @kern-source: markdown:16\nfunction isTableSeparator(line: string): boolean {\n return /^\\|[\\s:_-]+(\\|[\\s:_-]+)*\\|?\\s*$/.test(line.trim());\n}\n\n// @kern-source: markdown:18\nfunction isTableRow(line: string): boolean {\n const t = line.trim();\n return t.startsWith('|') && t.includes('|', 1);\n}\n\n// @kern-source: markdown:23\nfunction parseTableAlignment(sepLine: string): ('left'|'center'|'right')[] {\n const cells = sepLine.trim().replace(/^\\||\\|$/g, '').split('|');\n return cells.map((c: string) => {\n const t = c.trim();\n if (t.startsWith(':') && t.endsWith(':')) return 'center' as const;\n if (t.endsWith(':')) return 'right' as const;\n return 'left' as const;\n });\n}\n\n// @kern-source: markdown:34\nfunction parseTableCells(line: string): string[] {\n return line.trim().replace(/^\\||\\|$/g, '').split('|').map((c: string) => c.trim());\n}\n\n// @kern-source: markdown:36\nfunction emitProseWithTables(proseLines: string[], segments: ContentSegment[]): void {\n let i = 0;\n let buffered: string[] = [];\n\n function flushProse(): void {\n const text = buffered.join('\\n');\n if (text.trim()) {\n segments.push({ type: 'prose', text, language: undefined, code: undefined, index: undefined, headers: undefined, rows: undefined, alignments: undefined });\n }\n buffered = [];\n }\n\n while (i < proseLines.length) {\n // Check for table: current line is a table row AND next line is a separator\n if (isTableRow(proseLines[i]) && i + 1 < proseLines.length && isTableSeparator(proseLines[i + 1])) {\n flushProse();\n const headers = parseTableCells(proseLines[i]);\n const alignments = parseTableAlignment(proseLines[i + 1]);\n const rows: string[][] = [];\n i += 2; // skip header + separator\n while (i < proseLines.length && isTableRow(proseLines[i]) && !isTableSeparator(proseLines[i])) {\n rows.push(parseTableCells(proseLines[i]));\n i++;\n }\n segments.push({ type: 'table', text: undefined, language: undefined, code: undefined, index: undefined, headers, rows, alignments });\n continue;\n }\n\n buffered.push(proseLines[i]);\n i++;\n }\n flushProse();\n}\n\n// @kern-source: markdown:71\nexport const _mdCache: Map<string, ContentSegment[]> = new Map();\n\n// @kern-source: markdown:73\nexport const _MD_CACHE_MAX: number = 500;\n\n// @kern-source: markdown:75\nexport function parseMarkdownBlocks(text: string): ContentSegment[] {\n // LRU cache — avoid re-parsing identical content during streaming\n // Use djb2 hash for large strings to avoid collisions\n let key: string;\n if (text.length < 500) {\n key = text;\n } else {\n let hash = 5381;\n for (let i = 0; i < text.length; i++) {\n hash = ((hash << 5) + hash + text.charCodeAt(i)) | 0;\n }\n key = `h:${hash}:${text.length}`;\n }\n const cached = _mdCache.get(key);\n if (cached) return cached;\n\n const lines = text.split('\\n');\n const segments: ContentSegment[] = [];\n\n let inCode = false;\n let codeLang = '';\n let codeLines: string[] = [];\n let proseLines: string[] = [];\n let codeIndex = 0;\n\n for (const line of lines) {\n const trimmed = line.trimStart();\n\n if (!inCode) {\n const openMatch = trimmed.match(FENCE_OPEN);\n if (openMatch) {\n emitProseWithTables(proseLines, segments);\n proseLines = [];\n inCode = true;\n codeLang = openMatch[1] ?? '';\n codeLines = [];\n continue;\n }\n proseLines.push(line);\n } else {\n if (FENCE_CLOSE.test(trimmed)) {\n if (codeLines.length > 0) {\n codeIndex++;\n segments.push({ type: 'code', language: codeLang, code: codeLines.join('\\n'), text: undefined, index: codeIndex, headers: undefined, rows: undefined, alignments: undefined });\n }\n inCode = false;\n codeLang = '';\n codeLines = [];\n continue;\n }\n codeLines.push(line);\n }\n }\n\n if (inCode && codeLines.length > 0) {\n codeIndex++;\n segments.push({ type: 'code', language: codeLang, code: codeLines.join('\\n'), text: undefined, index: codeIndex, headers: undefined, rows: undefined, alignments: undefined });\n } else if (proseLines.length > 0) {\n emitProseWithTables(proseLines, segments);\n }\n\n // Store in cache, evict oldest if full\n if (_mdCache.size >= _MD_CACHE_MAX) {\n const firstKey = _mdCache.keys().next().value;\n if (firstKey !== undefined) _mdCache.delete(firstKey);\n }\n _mdCache.set(key, segments);\n\n return segments;\n}\n\n// @kern-source: markdown:147\nexport function truncateCodeLine(line: string, maxWidth: number): string {\n if (line.length <= maxWidth) {\n return line;\n }\n const overflow = line.length - maxWidth + 1;\n return line.slice(0, maxWidth - 1) + `…+${overflow}`;\n}\n\n// @kern-source: markdown:154\nfunction extractCodexStructured(text: string): string|null {\n const summaryMatch = text.match(/summary:\\s*\"([\\s\\S]*?)\"\\s*(?:sections\\s*\\{|$)/);\n const contentMatches = [...text.matchAll(/content:\\s*\"([\\s\\S]*?)\"\\s*\\}/g)];\n if (!summaryMatch || contentMatches.length === 0) {\n return null;\n }\n const parts: string[] = [summaryMatch[1]];\n const sectionMatches = [...text.matchAll(/\\d+:\\s*\"([^\"]+)\"\\s*\\{\\s*content:\\s*\"([\\s\\S]*?)\"\\s*\\}/g)];\n for (const m of sectionMatches) {\n parts.push(`\\n## ${m[1]}\\n${m[2]}`);\n }\n return parts.join('\\n').replace(/\\\\n/g, '\\n').trim();\n}\n\n// @kern-source: markdown:166\nfunction parseStreamJsonLine(trimmed: string): {action:'use'|'skip'|'keep', content?:string} {\n try {\n const parsed = JSON.parse(trimmed);\n if (!parsed.type) return { action: 'keep' };\n\n // Extract actual text content from streaming events\n if (parsed.type === 'assistant' && parsed.message?.content) {\n const content = typeof parsed.message.content === 'string'\n ? parsed.message.content\n : Array.isArray(parsed.message.content)\n ? parsed.message.content.filter((b: any) => b.type === 'text').map((b: any) => b.text).join('\\n')\n : '';\n return content ? { action: 'use', content } : { action: 'skip' };\n }\n\n // OpenCode: text events with actual content in part.text\n if (parsed.type === 'text' && parsed.part?.text) {\n return { action: 'use', content: parsed.part.text };\n }\n\n // Result events — extract content if present, skip error metadata\n if (parsed.type === 'result') {\n if (parsed.subtype === 'error_max_turns' || parsed.is_error) return { action: 'skip' };\n if (parsed.result && typeof parsed.result === 'string') return { action: 'use', content: parsed.result };\n return { action: 'skip' };\n }\n\n // Skip ALL known streaming metadata types (Claude, OpenCode, Codex, Gemini)\n const skipTypes = [\n 'system', 'hook_started', 'hook_response', 'tool_use', 'tool_result',\n 'user', 'rate_limit_event', 'message_start', 'message_stop', 'message_delta',\n 'content_block_start', 'content_block_stop', 'content_block_delta',\n 'step_start', 'step_finish', 'step-start', 'step-finish',\n 'ping', 'error', 'init', 'session_start', 'session_end',\n ];\n if (skipTypes.includes(parsed.type)) return { action: 'skip' };\n if (parsed.type?.startsWith('hook_')) return { action: 'skip' };\n if (parsed.type?.startsWith('step_')) return { action: 'skip' };\n if (parsed.subtype === 'system') return { action: 'skip' };\n\n // Any JSON with sessionID, session_id, or uuid is streaming metadata — skip\n if (parsed.sessionID || parsed.session_id || parsed.uuid) return { action: 'skip' };\n\n } catch {\n // Not valid JSON — keep as text\n }\n return { action: 'keep' };\n}\n\n/**\n * Remove inline sentence repetition like 'Hello.Hello.' within a single line.\n */\n// @kern-source: markdown:216\nfunction deduplicateInline(line: string): string {\n // Check if the line is a repeated substring (e.g. \"abcabc\" → \"abc\")\n const len = line.length;\n if (len < 10) return line;\n for (let half = Math.floor(len / 2); half >= 5; half--) {\n const candidate = line.slice(0, half);\n // Check if the rest of the line starts with the same candidate\n if (line.slice(half).startsWith(candidate)) {\n return candidate + line.slice(half + candidate.length);\n }\n }\n return line;\n}\n\n/**\n * Remove consecutive duplicate paragraphs/sentences from buddy streaming output.\n */\n// @kern-source: markdown:232\nfunction deduplicateParagraphs(text: string): string {\n // First: deduplicate within each line (streaming chunk concatenation artifacts)\n const lines = text.split('\\n');\n const dedupedLines = lines.map((l: string) => deduplicateInline(l));\n const joined = dedupedLines.join('\\n');\n // Then: deduplicate consecutive paragraphs\n const paragraphs = joined.split(/\\n{2,}/);\n const seen = new Set<string>();\n const deduped: string[] = [];\n for (const para of paragraphs) {\n const normalized = para.trim().replace(/\\s+/g, ' ');\n if (!normalized) {\n continue;\n }\n if (seen.has(normalized)) {\n continue;\n }\n seen.add(normalized);\n deduped.push(para.trim());\n }\n return deduped.join('\\n\\n');\n}\n\n/**\n * Strip progressive thinking/status updates that duplicate as streaming chunks.\n */\n// @kern-source: markdown:253\nfunction stripBuddyThinkingNoise(text: string): string {\n const lines = text.split('\\n');\n const result: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // Skip raw command output metadata from Codex\n if (trimmed.startsWith('Command:') && trimmed.includes('/bin/')) continue;\n if (trimmed.startsWith('Chunk ID:')) continue;\n if (trimmed.startsWith('Wall time:')) continue;\n if (trimmed.startsWith('Process exited with code')) continue;\n if (trimmed.startsWith('Original token count:')) continue;\n if (trimmed === 'Output:') continue;\n\n // Skip lines that are exact substrings of the next line (progressive thinking)\n if (i + 1 < lines.length) {\n const next = lines[i + 1].trim();\n if (trimmed.length > 20 && next.startsWith(trimmed)) continue;\n }\n\n result.push(line);\n }\n\n return result.join('\\n');\n}\n\n// @kern-source: markdown:283\nfunction shortenFilePaths(text: string): string {\n // Only shorten paths in prose — skip fenced code blocks\n const fenceRe = /^```[\\s\\S]*?^```/gm;\n const fences: Array<{ start: number; end: number }> = [];\n let fm: RegExpExecArray | null;\n while ((fm = fenceRe.exec(text)) !== null) {\n fences.push({ start: fm.index, end: fm.index + fm[0].length });\n }\n function insideFence(pos: number): boolean {\n return fences.some(f => pos >= f.start && pos < f.end);\n }\n\n const cwd = process.cwd();\n const home = process.env.HOME ?? '';\n\n const exts = 'tsx|jsx|ts|js|json|kern|md|py|rs|go|yaml|yml|toml|sh|css|html|svelte|vue|rb|java|cpp|c|h';\n const pathRe = new RegExp('(?<!`)(?:~/|/)[A-Za-z0-9._\\\\-/]+\\\\.(?:' + exts + ')(?::[0-9]+(?::[0-9]+)?|#L[0-9]+)?(?!`)', 'g');\n\n return text.replace(pathRe, (match, offset: number) => {\n // Never rewrite paths inside fenced code blocks\n if (insideFence(offset)) return match;\n // Skip if too short or doesn't look like a real path\n if (match.length < 10) return match;\n if (!match.includes('/')) return match;\n\n let shortened = match;\n\n // Expand ~/ to home\n if (shortened.startsWith('~/') && home) {\n shortened = home + shortened.slice(1);\n }\n\n // Strip cwd prefix → relative path\n if (shortened.startsWith(cwd + '/')) {\n shortened = shortened.slice(cwd.length + 1);\n }\n // Strip home prefix → ~/...\n else if (home && shortened.startsWith(home + '/')) {\n shortened = '~/' + shortened.slice(home.length + 1);\n }\n\n // Collapse to just filename:line for inline references\n // packages/cli/src/generated/handlers-cesar-brain.ts:91 → handlers-cesar-brain.ts:91\n const parts = shortened.split('/');\n if (parts.length > 2) {\n shortened = parts[parts.length - 1];\n }\n\n // Wrap in backticks for inline-code (purple) styling\n return '`' + shortened + '`';\n });\n}\n\n/**\n * Gently insert paragraph breaks in very dense text walls — only when truly needed.\n */\n// @kern-source: markdown:337\nfunction addParagraphBreaks(text: string): string {\n const paragraphs = text.split(/\\n{2,}/);\n const result: string[] = [];\n\n for (const para of paragraphs) {\n const lines = para.split('\\n');\n // Skip if already has markdown structure (headers, real lists) or is short\n const isStructured = lines.some(l => /^(#{1,3}\\s|[-*]\\s+\\w|\\d+\\.\\s+\\w|>\\s)/.test(l.trimStart()));\n const totalLen = lines.reduce((sum, l) => sum + l.length, 0);\n if (isStructured || totalLen < 250) {\n result.push(para);\n continue;\n }\n\n // Split dense blocks at sentence boundaries\n const joined = lines.join(' ');\n const sentences = joined.split(/(?<=\\.\\s)(?=[A-Z])/);\n if (sentences.length <= 2) {\n result.push(para);\n continue;\n }\n\n // Group into chunks of 3 sentences\n const chunks: string[] = [];\n let current = '';\n let count = 0;\n for (const sentence of sentences) {\n current += sentence;\n count++;\n if (count >= 3 || current.length > 250) {\n chunks.push(current.trim());\n current = '';\n count = 0;\n }\n }\n if (current.trim()) chunks.push(current.trim());\n result.push(chunks.join('\\n\\n'));\n }\n\n return result.join('\\n\\n');\n}\n\n// @kern-source: markdown:381\nexport const _cleanCache: Map<string, string> = new Map();\n\n// @kern-source: markdown:383\nexport function cleanEngineOutput(raw: string): string {\n // Key by raw content — different streams can share lengths, so length alone collides.\n const cached = _cleanCache.get(raw);\n if (cached !== undefined) {\n return cached;\n }\n const lines = raw.split('\\n');\n const cleaned: string[] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (cleaned.length === 0 && !trimmed) {\n continue;\n }\n if (trimmed.startsWith('{') && trimmed.includes('\"type\"')) {\n const result = parseStreamJsonLine(trimmed);\n if (result.action === 'skip') {\n continue;\n }\n if (result.action === 'use') {\n cleaned.push(result.content!);\n continue;\n }\n }\n cleaned.push(line);\n }\n let result = cleaned.join('\\n').trim();\n const codexResult = extractCodexStructured(result);\n if (codexResult) {\n result = codexResult;\n }\n // Strip XML tool tags — engines embed <tool>, <tool_result>, <invoke> in text\n result = result.replace(/<tool\\s+name=\"[^\"]*\">[\\s\\S]*?<\\/tool>/g, '');\n result = result.replace(/<tool\\s+name=\"[^\"]*\">[\\s\\S]*?<\\/invoke>(\\s*<\\/[a-zA-Z_:]+>)*/g, '');\n result = result.replace(/<tool_result[\\s\\S]*?<\\/tool_result>/g, '');\n result = result.replace(/<\\/minimax:tool_call>/g, '');\n result = result.replace(/<parameter\\s+name=\"[^\"]*\">[^<]*<\\/parameter>/g, '');\n result = result.replace(/<tool_calls>[\\s\\S]*?<\\/tool_calls>/gi, '');\n result = result.replace(/<(Read|Write|Edit|Bash|Grep|Glob|LS|ListPlans|Retrieve)\\b[\\s\\S]*?<\\/\\1>/g, '');\n result = result.replace(/<\\/?(file_path|path|pattern|command|query|content|old_string|new_string|start_line|end_line|id)>\\s*/g, '');\n // Strip reasoning tags from models that use <think>...</think> (MiniMax, DeepSeek, Qwen, etc.)\n result = result.replace(/<think>[\\s\\S]*?<\\/think>\\s*/gi, '');\n // R7: Strip narration stems — companion engines narrate their research process\n result = result.replace(/^(I'm checking|I'm looking|I'm reading|I'm searching|I'm inspecting|Let me check|Let me look|Let me read|Let me search|Let me inspect|I've confirmed|I've verified|I've checked|I'll now|I will now|Now I'm|Now let me|First,? I'll|First,? let me|Next,? I'll|Next,? let me)\\b[^.\\n]*[.\\n]\\s*/gim, '');\n // Clean buddy streaming artifacts\n result = stripBuddyThinkingNoise(result);\n result = deduplicateParagraphs(result);\n // Break dense walls of text into paragraphs at sentence boundaries\n result = addParagraphBreaks(result);\n // Shorten absolute file paths → relative, backtick-wrapped for purple styling\n result = shortenFilePaths(result);\n // Cache and evict old entries\n if (_cleanCache.size > 200) {\n _cleanCache.clear();\n }\n _cleanCache.set(raw, result);\n return result;\n}\n"],"mappings":"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","names":["result"]}