@kernlang/agon 0.1.6 → 0.1.7

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 (55) hide show
  1. package/dist/{chunk-XWHC6VAH.js → chunk-45YTXJWJ.js} +1 -1
  2. package/dist/chunk-45YTXJWJ.js.map +1 -0
  3. package/dist/{chunk-6IF2AV4Y.js → chunk-6WWOJXG4.js} +104 -47
  4. package/dist/chunk-6WWOJXG4.js.map +1 -0
  5. package/dist/{chunk-3PDYVGRS.js → chunk-AONHRJRW.js} +172 -14
  6. package/dist/chunk-AONHRJRW.js.map +1 -0
  7. package/dist/{chunk-TMNHJOKU.js → chunk-BPKY4OF2.js} +74 -3
  8. package/dist/chunk-BPKY4OF2.js.map +1 -0
  9. package/dist/{chunk-NBV37VMW.js → chunk-I2PMSXJ3.js} +2 -2
  10. package/dist/chunk-I2PMSXJ3.js.map +1 -0
  11. package/dist/{chunk-PUNBDLQO.js → chunk-RKXVKX25.js} +42 -8
  12. package/dist/chunk-RKXVKX25.js.map +1 -0
  13. package/dist/{chunk-HSPQEDHX.js → chunk-SUT2HDOY.js} +1 -1
  14. package/dist/chunk-SUT2HDOY.js.map +1 -0
  15. package/dist/{chunk-7WZ2O5WZ.js → chunk-WDT5NJOA.js} +4 -4
  16. package/dist/chunk-WDT5NJOA.js.map +1 -0
  17. package/dist/{dispatch-S3CR5HKX.js → dispatch-J4RSWLXM.js} +2 -2
  18. package/dist/dispatch-J4RSWLXM.js.map +1 -0
  19. package/dist/{forge-GUOEJ5DJ.js → forge-O2SJ5JIQ.js} +6 -6
  20. package/dist/forge-O2SJ5JIQ.js.map +1 -0
  21. package/dist/index.js +385 -53
  22. package/dist/index.js.map +1 -1
  23. package/dist/mcp/engines/agy.json +43 -0
  24. package/dist/mcp/engines/aider.json +40 -0
  25. package/dist/mcp/engines/claude.json +79 -0
  26. package/dist/mcp/engines/codex.json +77 -0
  27. package/dist/mcp/engines/minimax-coding-plan-minimax-m3.json +27 -0
  28. package/dist/mcp/engines/mistral.json +44 -0
  29. package/dist/mcp/engines/ollama.json +35 -0
  30. package/dist/mcp/engines/opencode.json +55 -0
  31. package/dist/mcp/engines/openrouter.json +54 -0
  32. package/dist/mcp/engines/qwen.json +40 -0
  33. package/dist/mcp/index.js +464 -0
  34. package/dist/mcp/index.js.map +1 -0
  35. package/dist/plan-mode-PFLUPGSY.js +17 -0
  36. package/dist/plan-mode-PFLUPGSY.js.map +1 -0
  37. package/dist/{src-3NWTITZM.js → src-253BUXEF.js} +5 -3
  38. package/dist/src-253BUXEF.js.map +1 -0
  39. package/dist/{update-H3LE4ZSI.js → update-ODAAXWOD.js} +6 -6
  40. package/dist/update-ODAAXWOD.js.map +1 -0
  41. package/package.json +2 -3
  42. package/dist/chunk-3PDYVGRS.js.map +0 -1
  43. package/dist/chunk-6IF2AV4Y.js.map +0 -1
  44. package/dist/chunk-7WZ2O5WZ.js.map +0 -1
  45. package/dist/chunk-HSPQEDHX.js.map +0 -1
  46. package/dist/chunk-NBV37VMW.js.map +0 -1
  47. package/dist/chunk-PUNBDLQO.js.map +0 -1
  48. package/dist/chunk-TMNHJOKU.js.map +0 -1
  49. package/dist/chunk-XWHC6VAH.js.map +0 -1
  50. package/dist/dispatch-S3CR5HKX.js.map +0 -1
  51. package/dist/forge-GUOEJ5DJ.js.map +0 -1
  52. package/dist/plan-mode-35BONR7S.js +0 -17
  53. package/dist/plan-mode-35BONR7S.js.map +0 -1
  54. package/dist/src-3NWTITZM.js.map +0 -1
  55. package/dist/update-H3LE4ZSI.js.map +0 -1
@@ -4,7 +4,7 @@ import {
4
4
  cleanEngineOutput,
5
5
  icons,
6
6
  parseMarkdownBlocks
7
- } from "./chunk-NBV37VMW.js";
7
+ } from "./chunk-I2PMSXJ3.js";
8
8
  import {
9
9
  AGON_MODE_NAMES,
10
10
  CORPUS_PATH,
@@ -108,8 +108,9 @@ import {
108
108
  worktreeChangedDiff,
109
109
  worktreeCreate,
110
110
  worktreeDiff,
111
+ worktreePruneOrphaned,
111
112
  worktreeRemoveBestEffort
112
- } from "./chunk-TMNHJOKU.js";
113
+ } from "./chunk-BPKY4OF2.js";
113
114
 
114
115
  // ../forge/src/generated/forge.ts
115
116
  import { randomUUID as randomUUID2 } from "crypto";
@@ -2253,6 +2254,10 @@ ${role.specialization}`);
2253
2254
  for (const wt of worktrees) {
2254
2255
  worktreeRemoveBestEffort(wt.repoRoot, wt.path);
2255
2256
  }
2257
+ try {
2258
+ worktreePruneOrphaned(root);
2259
+ } catch (err) {
2260
+ }
2256
2261
  }
2257
2262
  return manifest;
2258
2263
  }
@@ -6893,6 +6898,112 @@ async function executeEagerTool(toolName, meta, toolRegistry, toolCtx, dispatch,
6893
6898
  return result;
6894
6899
  }
6895
6900
 
6901
+ // src/generated/blocks/narration-fold.ts
6902
+ var _NARR_STARTERS = "I will|I'll|I am going to|I'm going to|Let me|Let's|Now I|Now let|Next,? I|Next,? let|I need to|I should|I want to|Checking|Searching|Reading|Viewing|Opening|Running|Looking at|First,? I";
6903
+ var _NARR_INTENT_RE = new RegExp(`^(?:${_NARR_STARTERS})\\b`, "i");
6904
+ var _NARR_TOOL_VERB_RE = /\b(?:read|re-?read|view|inspect|examine|search(?:ing)?|grep|list|open(?:ing)?|check(?:ing)?|look(?:ing)?\s+at|see\s+(?:if|how|what|where)|locate|find(?:\s+(?:the|where|references|out))?|run(?:ning)?\s+(?:the\s+)?tests?|scan(?:ning)?|explore|navigate|understand\s+how|verify|map\s+out|trace)\b/i;
6905
+ var _NARR_SUBSTANCE_RE = /\b(?:recommend|the\s+(?:fix|issue|bug|root\s+cause|answer|problem|solution|reason)|because|therefore|so\s+that|found\s+that|in\s+(?:short|summary|conclusion)|here(?:'s|\s+is)|refers?\s+to|means?\b|works?\s+by|consists?\s+of|note\s+that|important(?:ly)?|warning|trade-?off|risk|failure\s+mode|you\s+(?:should|can|need)|we\s+(?:should|can|need)|confidence)\b/i;
6906
+ var _NARR_PROTECTED_RE = /^(?:#{1,6}\s|[-*+]\s|\d+[.)]\s|>\s|\||@@FENCE)/;
6907
+ function _isNarrationSegment(s) {
6908
+ const t = String(s ?? "").trim();
6909
+ if (!t) return false;
6910
+ if (_NARR_PROTECTED_RE.test(t)) return false;
6911
+ if (t.endsWith("?")) return false;
6912
+ if (!_NARR_INTENT_RE.test(t)) return false;
6913
+ if (_NARR_SUBSTANCE_RE.test(t)) return false;
6914
+ if (!_NARR_TOOL_VERB_RE.test(t)) return false;
6915
+ if (t.length > 240) return false;
6916
+ return true;
6917
+ }
6918
+ function foldNarration(text, policy) {
6919
+ const raw = String(text ?? "");
6920
+ const mode = policy ?? "safe";
6921
+ const noFold = { raw, visible: raw, foldedSteps: 0, didFold: false };
6922
+ if (mode === "off") return noFold;
6923
+ if (!raw.trim()) return noFold;
6924
+ const fences = [];
6925
+ const guarded = raw.replace(/```[\s\S]*?```/g, (m) => {
6926
+ fences.push(m);
6927
+ return `@@FENCE${fences.length - 1}@@`;
6928
+ });
6929
+ const seg = guarded.replace(/\r/g, "").replace(/\n+/g, "\n").replace(/([.!?])(?=[A-Z][a-z])/g, "$1\n").replace(new RegExp(`([\\s.;:!?)\\]])(?=(?:${_NARR_STARTERS})\\b)`, "g"), "$1\n");
6930
+ const sentences = seg.split("\n").map((s) => s.trim()).filter((s) => s.length > 0);
6931
+ const flags = sentences.map((s) => _isNarrationSegment(s));
6932
+ let tailStart = sentences.length;
6933
+ for (let i2 = sentences.length - 1; i2 >= 0; i2--) {
6934
+ if (flags[i2]) break;
6935
+ tailStart = i2;
6936
+ }
6937
+ if (tailStart >= sentences.length) return noFold;
6938
+ const FOLD_MIN_RUN = mode === "aggressive" ? 1 : 2;
6939
+ const out = [];
6940
+ let folded = 0;
6941
+ let i = 0;
6942
+ while (i < tailStart) {
6943
+ if (flags[i]) {
6944
+ let j = i;
6945
+ while (j < tailStart && flags[j]) j++;
6946
+ const runLen = j - i;
6947
+ if (runLen >= FOLD_MIN_RUN) {
6948
+ folded += runLen;
6949
+ } else {
6950
+ for (let k = i; k < j; k++) out.push(sentences[k]);
6951
+ }
6952
+ i = j;
6953
+ } else {
6954
+ out.push(sentences[i]);
6955
+ i++;
6956
+ }
6957
+ }
6958
+ for (let k = tailStart; k < sentences.length; k++) out.push(sentences[k]);
6959
+ if (folded === 0) return noFold;
6960
+ const visible = out.join("\n").replace(/@@FENCE(\d+)@@/g, (_m, n) => fences[Number(n)] ?? "").replace(/\n{3,}/g, "\n\n").trim();
6961
+ return { raw, visible, foldedSteps: folded, didFold: true };
6962
+ }
6963
+ function foldNarrationLines(text, policy) {
6964
+ const raw = String(text ?? "");
6965
+ const mode = policy ?? "safe";
6966
+ const noFold = { visible: raw, foldedSteps: 0, lastStep: "" };
6967
+ if (mode === "off" || !raw.trim()) return noFold;
6968
+ const lines = raw.split("\n");
6969
+ let inFence = false;
6970
+ const out = [];
6971
+ let folded = 0;
6972
+ let lastStep = "";
6973
+ for (const ln of lines) {
6974
+ if (/^\s*```/.test(ln)) {
6975
+ inFence = !inFence;
6976
+ out.push(ln);
6977
+ continue;
6978
+ }
6979
+ if (!inFence && _isNarrationSegment(ln)) {
6980
+ folded++;
6981
+ lastStep = ln.trim();
6982
+ continue;
6983
+ }
6984
+ out.push(ln);
6985
+ }
6986
+ if (folded === 0) return noFold;
6987
+ const visible = out.join("\n").replace(/\n{3,}/g, "\n\n").trim();
6988
+ return { visible, foldedSteps: folded, lastStep };
6989
+ }
6990
+ var _FOLD_RING_MAX = 20;
6991
+ var _foldedRaws = [];
6992
+ function setLastFoldedRaw(raw) {
6993
+ const r = String(raw ?? "");
6994
+ if (!r) return;
6995
+ _foldedRaws.push(r);
6996
+ while (_foldedRaws.length > _FOLD_RING_MAX) _foldedRaws.shift();
6997
+ }
6998
+ function getFoldedRawCount() {
6999
+ return _foldedRaws.length;
7000
+ }
7001
+ function getFoldedRaw(fromEnd) {
7002
+ const n = Math.max(1, Math.floor(Number(fromEnd) || 1));
7003
+ const idx = _foldedRaws.length - n;
7004
+ return idx >= 0 ? _foldedRaws[idx] : "";
7005
+ }
7006
+
6896
7007
  // src/generated/blocks/code-buffer.ts
6897
7008
  var CodeBlockBuffer = class {
6898
7009
  blocks = [];
@@ -7055,6 +7166,14 @@ function _showNextPermission(actions) {
7055
7166
  }
7056
7167
  });
7057
7168
  }
7169
+ function foldEngineContent(content) {
7170
+ const cfg = loadConfig();
7171
+ const policy = String(cfg.narrationFold ?? "safe");
7172
+ const r = foldNarration(content, policy);
7173
+ if (!r.didFold) return { content };
7174
+ setLastFoldedRaw(r.raw);
7175
+ return { content: r.visible, foldedSteps: r.foldedSteps };
7176
+ }
7058
7177
  function handleOutputEvent(event, state, actions, mode, chatStartTime) {
7059
7178
  if (event.type !== "thinking-chunk" && _thinkingBuffer.content) {
7060
7179
  actions.addBlock({ type: "thinking-chunk", engineId: _thinkingBuffer.engineId, chunk: _thinkingBuffer.content });
@@ -7147,9 +7266,10 @@ function handleOutputEvent(event, state, actions, mode, chatStartTime) {
7147
7266
  return next;
7148
7267
  });
7149
7268
  if (cleaned.trim()) {
7150
- const segments = parseMarkdownBlocks(cleaned);
7269
+ const folded = foldEngineContent(cleaned);
7270
+ const segments = parseMarkdownBlocks(folded.content);
7151
7271
  codeBlockBuffer.recordFromSegments(segments);
7152
- actions.addBlock({ type: "engine-block", engineId: st.engineId, color, content: cleaned });
7272
+ actions.addBlock({ type: "engine-block", engineId: st.engineId, color, content: folded.content, foldedSteps: folded.foldedSteps });
7153
7273
  if (mode === "chat" && chatStartTime > 0) {
7154
7274
  actions.addBlock({ type: "response-meta", engineId: st.engineId, elapsed: Date.now() - chatStartTime });
7155
7275
  }
@@ -7504,9 +7624,11 @@ function handleOutputEvent(event, state, actions, mode, chatStartTime) {
7504
7624
  default:
7505
7625
  if (event.type === "engine-block") {
7506
7626
  const cleaned = cleanEngineOutput(event.content);
7507
- const segments = parseMarkdownBlocks(cleaned);
7627
+ const preFolded = event.foldedSteps != null;
7628
+ const folded = preFolded ? { content: cleaned, foldedSteps: event.foldedSteps } : foldEngineContent(cleaned);
7629
+ const segments = parseMarkdownBlocks(folded.content);
7508
7630
  codeBlockBuffer.recordFromSegments(segments);
7509
- event = { ...event, content: cleaned };
7631
+ event = { ...event, content: folded.content, foldedSteps: folded.foldedSteps };
7510
7632
  }
7511
7633
  if (event.type === "text" || event.type === "engine-block" || event.type === "separator") {
7512
7634
  actions.flushStream();
@@ -8166,6 +8288,14 @@ function detectMutationIntentStall(text) {
8166
8288
  const HANDBACK_RE = /\b(?:read-?only|can'?t (?:write|edit|apply|mutate|touch)|no (?:write|edit|bash) tool|(?:edit|write|bash)(?: tool)?(?: is)? (?:not enabled|disabled|not wired|not available|unavailable)|not (?:enabled|wired|reachable) in this (?:context|session|turn)|spawn (?:an? )?agent|dispatch (?:an? )?agent|paste (?:it|this|the\b)|apply (?:it|this)\b|git apply|you (?:can )?(?:run|apply|paste)|in your terminal|hand you the (?:patch|diff|commands?)|copy[- ]?paste)\b/i;
8167
8289
  return MUTATION_INTENT_RE.test(body) && HANDBACK_RE.test(body);
8168
8290
  }
8291
+ function detectFabricatedDelegation(text) {
8292
+ const body = String(text ?? "").trim();
8293
+ if (!body) return false;
8294
+ const TARGET_RE = /\b(?:review(?:er)?s?|forg(?:e|ing)|tribunal|brainstorm|campfire|agents?|engines?|jobs?)\b/i;
8295
+ if (!TARGET_RE.test(body)) return false;
8296
+ const DISPATCH_RE = /\b(?:kick(?:ed|ing)?\s*(?:it|them|that|the\s+\w+)?\s*off|fired?\s*(?:it|them|off)|dispatch(?:ed|ing)|delegat(?:ed|ing)|(?:is|are|now)\s+running|running\s+(?:in|now)|in\s+parallel|reading\s+the\s+(?:diff|changes|code)|working\s+(?:on\s+it|in\s+parallel)|in\s+progress|under\s*way|i'?ll\s+(?:get\s+back|report|let\s+you\s+know|surface|update)|report(?:s|ing)?\s+back|when\s+they\s+(?:report|land|return|finish|come\s+back)|still\s+(?:running|going|working|in\s+progress)|spun?\s+up|started\s+(?:the|a)\s+(?:review|forge|job|tribunal|brainstorm))\b/i;
8297
+ return DISPATCH_RE.test(body);
8298
+ }
8169
8299
  function eagerFailedToolNames(results) {
8170
8300
  const names = [];
8171
8301
  for (const result of results ?? []) {
@@ -9138,7 +9268,7 @@ ${cleaned}`;
9138
9268
  }
9139
9269
  }
9140
9270
  if (name === "ExitPlanMode") {
9141
- const { handleExitPlanMode } = await import("./plan-mode-35BONR7S.js");
9271
+ const { handleExitPlanMode } = await import("./plan-mode-PFLUPGSY.js");
9142
9272
  return "[DELEGATION_BREAK] " + handleExitPlanMode(String(args.reason ?? ""), ctx.cesar?.planDispatch ?? null, ctx);
9143
9273
  }
9144
9274
  if (name === "ProposePlan") {
@@ -9161,7 +9291,7 @@ ${cleaned}`;
9161
9291
  }
9162
9292
  }
9163
9293
  }
9164
- const { handleProposePlan } = await import("./plan-mode-35BONR7S.js");
9294
+ const { handleProposePlan } = await import("./plan-mode-PFLUPGSY.js");
9165
9295
  const dispatch = ctx.cesar.planDispatch;
9166
9296
  if (!dispatch) {
9167
9297
  return "[PLAN_ERROR] Internal plan display dispatch unavailable. Retry the plan request so Agon can render the approval panel.";
@@ -9499,6 +9629,8 @@ function mcpConfigFingerprint(config) {
9499
9629
  function resolveAgonMcpServerPath(fromUrl) {
9500
9630
  const raw = fromUrl ?? import.meta.url;
9501
9631
  const url = raw.startsWith("file:") ? raw : pathToFileURL(raw).href;
9632
+ const bundledSibling = join12(dirname5(fileURLToPath(url)), "mcp", "index.js");
9633
+ if (existsSync12(bundledSibling)) return bundledSibling;
9502
9634
  try {
9503
9635
  const req = createRequire(url);
9504
9636
  const resolved = req.resolve("@kernlang/agon-mcp");
@@ -10013,11 +10145,12 @@ async function handleCesarBrain(input, dispatch, ctx, images) {
10013
10145
  const outputDir = join14(RUNS_DIR, `cesar-fallback-${Date.now()}`);
10014
10146
  mkdirSync13(outputDir, { recursive: true });
10015
10147
  const primedPrompt = buildHistoryPrimedPrompt(ctx.chatSession, input);
10148
+ const fallbackMode = engine?.agent ? "agent" : "exec";
10016
10149
  const freshResult = await ctx.adapter.dispatch({
10017
10150
  engine,
10018
10151
  prompt: primedPrompt,
10019
10152
  cwd: resolveWorkingDir(),
10020
- mode: "exec",
10153
+ mode: fallbackMode,
10021
10154
  timeout: config.timeout ?? 120,
10022
10155
  outputDir,
10023
10156
  signal: abort.signal,
@@ -10719,7 +10852,7 @@ ${enrichedInput}`;
10719
10852
  });
10720
10853
  continue;
10721
10854
  }
10722
- const { handleProposePlan } = await import("./plan-mode-35BONR7S.js");
10855
+ const { handleProposePlan } = await import("./plan-mode-PFLUPGSY.js");
10723
10856
  const planDispatch = ctx.cesar.planDispatch ?? dispatch;
10724
10857
  if (planDispatch) {
10725
10858
  try {
@@ -10732,7 +10865,7 @@ ${enrichedInput}`;
10732
10865
  }
10733
10866
  } else if (signal.tool === "ExitPlanMode") {
10734
10867
  recordToolUse("ExitPlanMode", "mcp", JSON.stringify(signal.args ?? {}), "done");
10735
- const { handleExitPlanMode } = await import("./plan-mode-35BONR7S.js");
10868
+ const { handleExitPlanMode } = await import("./plan-mode-PFLUPGSY.js");
10736
10869
  const planDispatch = ctx.cesar.planDispatch ?? dispatch;
10737
10870
  try {
10738
10871
  const exitResult = handleExitPlanMode(String(signal.args?.reason ?? ""), planDispatch, ctx);
@@ -10948,7 +11081,7 @@ ${enrichedInput}`;
10948
11081
  output: "A Cesar plan is already active; nested plans are blocked. Resume or cancel the current plan before proposing another."
10949
11082
  });
10950
11083
  } else {
10951
- const { handleProposePlan } = await import("./plan-mode-35BONR7S.js");
11084
+ const { handleProposePlan } = await import("./plan-mode-PFLUPGSY.js");
10952
11085
  const planDispatch = ctx.cesar.planDispatch ?? dispatch;
10953
11086
  const plan = await handleProposePlan(ppArgs, planDispatch, ctx);
10954
11087
  if (ctx.setActivePlan) ctx.setActivePlan(plan);
@@ -10972,7 +11105,7 @@ ${enrichedInput}`;
10972
11105
  const epArgs = ctx.cesar._exitPlanModeArgs;
10973
11106
  delete ctx.cesar._exitPlanModeArgs;
10974
11107
  try {
10975
- const { handleExitPlanMode } = await import("./plan-mode-35BONR7S.js");
11108
+ const { handleExitPlanMode } = await import("./plan-mode-PFLUPGSY.js");
10976
11109
  const planDispatch = ctx.cesar.planDispatch ?? dispatch;
10977
11110
  const exitResult = handleExitPlanMode(String(epArgs?.reason ?? ""), planDispatch, ctx);
10978
11111
  dispatch({ type: "tool-call", engineId: cesarEngineId, tool: "ExitPlanMode", input: JSON.stringify(epArgs ?? {}), status: "done", output: exitResult });
@@ -11159,6 +11292,28 @@ ${qnResult.challengeText}` : ""
11159
11292
  dispatch({ type: "spinner-stop" });
11160
11293
  }
11161
11294
  }
11295
+ if (!ctx.cesar.pendingDelegation && session.alive && !abort.signal.aborted && detectFabricatedDelegation(response.trim())) {
11296
+ dispatch({ type: "warning", message: "Cesar claimed a job was running but never dispatched one \u2014 grounding..." });
11297
+ dispatch({ type: "spinner-start", message: "Cesar grounding\u2026", color });
11298
+ try {
11299
+ let groundResponse = "";
11300
+ const groundGen = session.send({
11301
+ message: '[SYSTEM] GROUNDING CHECK: You did NOT dispatch any review/forge/tribunal/brainstorm/agent/job this turn, and none is pending or running. Do NOT claim background work is "running", "in parallel", "kicked off", or that anyone "will report back" \u2014 that is false and misleads the user. If the user wants that work done, call the actual tool now (Review/Forge/Tribunal/Brainstorm/Agent). Otherwise tell the user plainly that nothing is currently running and ask whether to start it.',
11302
+ signal: abort.signal
11303
+ });
11304
+ for await (const chunk of groundGen) {
11305
+ if (chunk.type === "text") groundResponse += chunk.content;
11306
+ if (chunk.type === "done" || chunk.type === "error") break;
11307
+ }
11308
+ dispatch({ type: "spinner-stop" });
11309
+ if (groundResponse.trim()) {
11310
+ dispatch({ type: "engine-block", engineId: cesarEngineId, color, content: groundResponse.trim() });
11311
+ response = groundResponse.trim();
11312
+ }
11313
+ } catch {
11314
+ dispatch({ type: "spinner-stop" });
11315
+ }
11316
+ }
11162
11317
  const _trimmedResponse = response.trim();
11163
11318
  if (!hadToolActivity && !ranToolLoop && detectNarratedToolStall(_trimmedResponse)) {
11164
11319
  _narratedToolStalls++;
@@ -11699,6 +11854,9 @@ export {
11699
11854
  buildRoutingContext,
11700
11855
  shouldUseAgentTeam,
11701
11856
  codeBlockBuffer,
11857
+ foldNarrationLines,
11858
+ getFoldedRawCount,
11859
+ getFoldedRaw,
11702
11860
  todosFromPlanSteps,
11703
11861
  getSessionAllowList,
11704
11862
  clearPermissionQueue,
@@ -11715,4 +11873,4 @@ export {
11715
11873
  ensureCesarSession,
11716
11874
  handleCesarBrain
11717
11875
  };
11718
- //# sourceMappingURL=chunk-3PDYVGRS.js.map
11876
+ //# sourceMappingURL=chunk-AONHRJRW.js.map