@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.
- package/dist/{chunk-XWHC6VAH.js → chunk-45YTXJWJ.js} +1 -1
- package/dist/chunk-45YTXJWJ.js.map +1 -0
- package/dist/{chunk-6IF2AV4Y.js → chunk-6WWOJXG4.js} +104 -47
- package/dist/chunk-6WWOJXG4.js.map +1 -0
- package/dist/{chunk-3PDYVGRS.js → chunk-AONHRJRW.js} +172 -14
- package/dist/chunk-AONHRJRW.js.map +1 -0
- package/dist/{chunk-TMNHJOKU.js → chunk-BPKY4OF2.js} +74 -3
- package/dist/chunk-BPKY4OF2.js.map +1 -0
- package/dist/{chunk-NBV37VMW.js → chunk-I2PMSXJ3.js} +2 -2
- package/dist/chunk-I2PMSXJ3.js.map +1 -0
- package/dist/{chunk-PUNBDLQO.js → chunk-RKXVKX25.js} +42 -8
- package/dist/chunk-RKXVKX25.js.map +1 -0
- package/dist/{chunk-HSPQEDHX.js → chunk-SUT2HDOY.js} +1 -1
- package/dist/chunk-SUT2HDOY.js.map +1 -0
- package/dist/{chunk-7WZ2O5WZ.js → chunk-WDT5NJOA.js} +4 -4
- package/dist/chunk-WDT5NJOA.js.map +1 -0
- package/dist/{dispatch-S3CR5HKX.js → dispatch-J4RSWLXM.js} +2 -2
- package/dist/dispatch-J4RSWLXM.js.map +1 -0
- package/dist/{forge-GUOEJ5DJ.js → forge-O2SJ5JIQ.js} +6 -6
- package/dist/forge-O2SJ5JIQ.js.map +1 -0
- package/dist/index.js +385 -53
- package/dist/index.js.map +1 -1
- package/dist/mcp/engines/agy.json +43 -0
- package/dist/mcp/engines/aider.json +40 -0
- package/dist/mcp/engines/claude.json +79 -0
- package/dist/mcp/engines/codex.json +77 -0
- package/dist/mcp/engines/minimax-coding-plan-minimax-m3.json +27 -0
- package/dist/mcp/engines/mistral.json +44 -0
- package/dist/mcp/engines/ollama.json +35 -0
- package/dist/mcp/engines/opencode.json +55 -0
- package/dist/mcp/engines/openrouter.json +54 -0
- package/dist/mcp/engines/qwen.json +40 -0
- package/dist/mcp/index.js +464 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/plan-mode-PFLUPGSY.js +17 -0
- package/dist/plan-mode-PFLUPGSY.js.map +1 -0
- package/dist/{src-3NWTITZM.js → src-253BUXEF.js} +5 -3
- package/dist/src-253BUXEF.js.map +1 -0
- package/dist/{update-H3LE4ZSI.js → update-ODAAXWOD.js} +6 -6
- package/dist/update-ODAAXWOD.js.map +1 -0
- package/package.json +2 -3
- package/dist/chunk-3PDYVGRS.js.map +0 -1
- package/dist/chunk-6IF2AV4Y.js.map +0 -1
- package/dist/chunk-7WZ2O5WZ.js.map +0 -1
- package/dist/chunk-HSPQEDHX.js.map +0 -1
- package/dist/chunk-NBV37VMW.js.map +0 -1
- package/dist/chunk-PUNBDLQO.js.map +0 -1
- package/dist/chunk-TMNHJOKU.js.map +0 -1
- package/dist/chunk-XWHC6VAH.js.map +0 -1
- package/dist/dispatch-S3CR5HKX.js.map +0 -1
- package/dist/forge-GUOEJ5DJ.js.map +0 -1
- package/dist/plan-mode-35BONR7S.js +0 -17
- package/dist/plan-mode-35BONR7S.js.map +0 -1
- package/dist/src-3NWTITZM.js.map +0 -1
- 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-
|
|
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-
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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-
|
|
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-
|
|
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:
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
11876
|
+
//# sourceMappingURL=chunk-AONHRJRW.js.map
|