@symerian/symi 2.6.2 → 2.6.3
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/{agents-qLMWAYwU.js → agents-Dm0V9Z2G.js} +4 -4
- package/dist/{agents.config-BmdFH4J5.js → agents.config-DP0CLvIA.js} +1 -1
- package/dist/{agents.config-BfjAwFCr.js → agents.config-WdkJjM2-.js} +1 -1
- package/dist/{audio-preflight-BVaaZWkg.js → audio-preflight-DHTaS5U1.js} +4 -4
- package/dist/{auth-choice-D1u_GPfQ.js → auth-choice-B9OnYICm.js} +1 -1
- package/dist/{auth-choice-zFq3WRQ0.js → auth-choice-CXHi61T5.js} +1 -1
- package/dist/{banner-DpH44qlJ.js → banner-ToxTMzfL.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +6 -6
- package/dist/bundled/session-memory/handler.js +6 -6
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-C8tKm8re.js → channel-options-CsGrHsjP.js} +1 -1
- package/dist/{channel-options-0iOfzVR3.js → channel-options-Jl8AKRLD.js} +1 -1
- package/dist/{channel-web-DYinYBz4.js → channel-web-qFGaLytG.js} +1 -1
- package/dist/{channels-cli-93tLT17t.js → channels-cli-BFyOmW-R.js} +4 -4
- package/dist/{channels-cli-C8HgSMTH.js → channels-cli-DQTl2Pk5.js} +4 -4
- package/dist/{chrome-DkaXoP36.js → chrome-DYZwl5Gv.js} +7 -7
- package/dist/{cli-BYJyRW2M.js → cli-B4biLt2z.js} +1 -1
- package/dist/{cli-DapZXGSB.js → cli-DQw_LEew.js} +1 -1
- package/dist/{command-registry-9EhYc6da.js → command-registry-D1OePePk.js} +9 -9
- package/dist/{completion-cli-BFZv3K5D.js → completion-cli-CI-0hC_u.js} +2 -2
- package/dist/{completion-cli-CCeQlMlC.js → completion-cli-DW8a1WYc.js} +1 -1
- package/dist/{config-cli-Dv2mtIeM.js → config-cli-CpiluXlO.js} +1 -1
- package/dist/{config-cli-DbWMIBUz.js → config-cli-DHXt5cQZ.js} +1 -1
- package/dist/{configure-CVQf2UJE.js → configure-CmVnpTNi.js} +3 -3
- package/dist/{configure-B8zV6Hxj.js → configure-Ha9cu8Bu.js} +3 -3
- package/dist/{deliver-C46-vyqg.js → deliver-dODxSv3b.js} +1 -1
- package/dist/{doctor-completion-BunqvoqZ.js → doctor-completion-CRNCOXcf.js} +1 -1
- package/dist/{doctor-completion-CLeX1kaN.js → doctor-completion-ve-JPlmN.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{gateway-cli-Co-tp-WC.js → gateway-cli-BPsbjmUI.js} +9 -9
- package/dist/{gateway-cli-DMey_29a.js → gateway-cli-Cc7N8N_E.js} +9 -9
- package/dist/{glass-ui-ws-CKb1jTZR.js → glass-ui-ws-1O1O2xC6.js} +7 -7
- package/dist/{glass-ui-ws-C4O227UO.js → glass-ui-ws-CKwLnOwl.js} +7 -7
- package/dist/{health-CDGOsNeD.js → health-DTRWmRB8.js} +1 -1
- package/dist/{health-CM1asUG8.js → health-tYyUNVp5.js} +1 -1
- package/dist/{hooks-cli-DFKB3Z6X.js → hooks-cli-Cp81vqRc.js} +2 -2
- package/dist/{hooks-cli-Tx0TzSju.js → hooks-cli-eC03ywfG.js} +2 -2
- package/dist/{image-CuzFLQWC.js → image-CXu8W39c.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/llm-slug-generator.js +6 -6
- package/dist/{models-CiqHYwje.js → models-CuhnCX2U.js} +2 -2
- package/dist/{models-cli-B4ATSsNS.js → models-cli-BzwGQUdn.js} +3 -3
- package/dist/{models-cli-B-b-gBKG.js → models-cli-CFr_ZP5y.js} +2 -2
- package/dist/{onboard-B_ECX48L.js → onboard-B2g2Q6dd.js} +2 -2
- package/dist/{onboard-DcnGZKZX.js → onboard-CcB6pmEy.js} +2 -2
- package/dist/{onboard-channels-pfSGhg_C.js → onboard-channels-CWd17q6h.js} +1 -1
- package/dist/{onboard-channels-FFQPpuEN.js → onboard-channels-DmRBC7VN.js} +1 -1
- package/dist/{onboarding-jhZxQcZ3.js → onboarding-DMqlt_p6.js} +3 -3
- package/dist/{onboarding-BU14cspo.js → onboarding-DwvQIqR8.js} +3 -3
- package/dist/{onboarding.finalize-ByZT4dF5.js → onboarding.finalize-BUSzTwhM.js} +5 -5
- package/dist/{onboarding.finalize-B8oOMfHc.js → onboarding.finalize-lJmZSE4C.js} +6 -6
- package/dist/{pi-embedded-BY9AnmoP.js → pi-embedded-CT2JDfQr.js} +147 -141
- package/dist/{pi-embedded-helpers-CfqDGQ9J.js → pi-embedded-helpers-pubKo8HQ.js} +4 -4
- package/dist/{plugin-registry-DXWJkJX6.js → plugin-registry-DZdPnpP_.js} +1 -1
- package/dist/{plugin-registry-CNf1_8hj.js → plugin-registry-vW2V1yCi.js} +1 -1
- package/dist/plugin-sdk/{channel-web-DZQQ0mzN.js → channel-web-38aqDKeT.js} +1 -1
- package/dist/plugin-sdk/index.js +2 -2
- package/dist/plugin-sdk/{reply-DvZeyOVA.js → reply-BjJZjZRr.js} +143 -137
- package/dist/plugin-sdk/{web-BCsJFuQu.js → web-BgKYnau3.js} +2 -2
- package/dist/{plugins-cli-BiedlZMy.js → plugins-cli-BTq9c2hZ.js} +2 -2
- package/dist/{plugins-cli-C9TYM40P.js → plugins-cli-DkAx9r3h.js} +2 -2
- package/dist/{program-bnWda72r.js → program-DZx9PtyT.js} +7 -7
- package/dist/{program-context-CY1jWc5A.js → program-context-DyfuToE1.js} +17 -17
- package/dist/{prompt-select-styled-B_lFTtqp.js → prompt-select-styled-CifWTOoY.js} +4 -4
- package/dist/{prompt-select-styled-BEnZY8wI.js → prompt-select-styled-DNbD3v3G.js} +4 -4
- package/dist/{provider-auth-helpers-DApJuzBd.js → provider-auth-helpers-BPIIDTwA.js} +1 -1
- package/dist/{provider-auth-helpers-DcNKxc7D.js → provider-auth-helpers-BzySaUp5.js} +1 -1
- package/dist/{push-apns-CKKHlj6j.js → push-apns-DbpeXPGR.js} +1 -1
- package/dist/{push-apns-DA7UMNQH.js → push-apns-IdD-dKZm.js} +1 -1
- package/dist/{pw-ai-m0mj2KWK.js → pw-ai-B5asscAD.js} +1 -1
- package/dist/{register.agent-ulu0VmOg.js → register.agent-CfFcSvM1.js} +6 -6
- package/dist/{register.agent-8lxVlmzQ.js → register.agent-TFUcxDGN.js} +5 -5
- package/dist/{register.configure-rq0h5r3X.js → register.configure-BwRTNCws.js} +6 -6
- package/dist/{register.configure-45--Sly1.js → register.configure-D3BJejOC.js} +6 -6
- package/dist/{register.maintenance-DyEJx7NY.js → register.maintenance-B5350ddh.js} +7 -7
- package/dist/{register.maintenance-CXbxRtWI.js → register.maintenance-DkdVYwbj.js} +8 -8
- package/dist/{register.message-CiN_pt6K.js → register.message-DTopCPGC.js} +2 -2
- package/dist/{register.message-C7Yh1uky.js → register.message-FbCBAfJO.js} +2 -2
- package/dist/{register.onboard-e_2hc2Rm.js → register.onboard-DITZn8dx.js} +4 -4
- package/dist/{register.onboard-BWaRkbei.js → register.onboard-GSv5xyA3.js} +4 -4
- package/dist/{register.setup-BIIFHtF7.js → register.setup-BI6lILMU.js} +4 -4
- package/dist/{register.setup-zwh90Vn-.js → register.setup-BuOeoBk0.js} +4 -4
- package/dist/{register.status-health-sessions-D6t5maEr.js → register.status-health-sessions-C1RhWKxN.js} +3 -3
- package/dist/{register.status-health-sessions-O-sVAFHE.js → register.status-health-sessions-EK4_odLb.js} +3 -3
- package/dist/{register.subclis-DOiZocR6.js → register.subclis-Bn_Mr_Wa.js} +9 -9
- package/dist/{reply-05js8eGB.js → reply-BGSd_cMI.js} +138 -132
- package/dist/{run-main-u-Eyc8Wm.js → run-main-Bu9IAm9E.js} +14 -14
- package/dist/{runner-CU9l0uJh.js → runner-WAG0M5s9.js} +1 -1
- package/dist/{server-methods-Dds-iEoY.js → server-methods-dxn6-zQz.js} +7 -7
- package/dist/{server-methods-Bvl1xubo.js → server-methods-tA9lkIQT.js} +7 -7
- package/dist/{server-node-events-Qp-gJMET.js → server-node-events-6jcJSpXA.js} +2 -2
- package/dist/{server-node-events-qGqpsPxm.js → server-node-events-CzcTGD9T.js} +2 -2
- package/dist/{status-BRSo-LY3.js → status-8176C-aV.js} +2 -2
- package/dist/{status-BqQ9mm64.js → status-CcQSl2sN.js} +1 -1
- package/dist/{status-BATOXGRi.js → status-DGKT6HnE.js} +2 -2
- package/dist/{status-CfYa1Q9K.js → status-DmPOSk-A.js} +1 -1
- package/dist/{subagent-registry-lbDgDwLy.js → subagent-registry-DqFKNTCX.js} +141 -135
- package/dist/{unified-runner-B4ICXRlg.js → unified-runner-BbanUEmo.js} +166 -160
- package/dist/{update-cli-BOaP4XyQ.js → update-cli-FMcGr7MA.js} +8 -8
- package/dist/{update-cli-R8-SSkbS.js → update-cli-YCXB_6jz.js} +7 -7
- package/dist/{update-runner-CWJ4pC1b.js → update-runner-C8OkrKjW.js} +1 -1
- package/dist/{update-runner-B8UmqtLI.js → update-runner-DMP1rCS1.js} +1 -1
- package/dist/{web-CQH9fSkH.js → web-BsS1ia0M.js} +6 -6
- package/dist/{web-CSrDbJJ7.js → web-CQ2F1f3a.js} +1 -1
- package/dist/{web-BWybtnEa.js → web-DoRGusTq.js} +2 -2
- package/dist/{web-DBFW0ejP.js → web-LUMjboLF.js} +1 -1
- package/package.json +1 -1
|
@@ -11532,7 +11532,7 @@ function resolveMemoryBackendConfig(params) {
|
|
|
11532
11532
|
|
|
11533
11533
|
//#endregion
|
|
11534
11534
|
//#region src/memory/search-manager.ts
|
|
11535
|
-
const log$
|
|
11535
|
+
const log$10 = createSubsystemLogger("memory");
|
|
11536
11536
|
const QMD_MANAGER_CACHE = /* @__PURE__ */ new Map();
|
|
11537
11537
|
async function getMemorySearchManager(params) {
|
|
11538
11538
|
const resolved = resolveMemoryBackendConfig(params);
|
|
@@ -11565,7 +11565,7 @@ async function getMemorySearchManager(params) {
|
|
|
11565
11565
|
}
|
|
11566
11566
|
} catch (err) {
|
|
11567
11567
|
const message = err instanceof Error ? err.message : String(err);
|
|
11568
|
-
log$
|
|
11568
|
+
log$10.warn(`qmd memory unavailable; falling back to builtin: ${message}`);
|
|
11569
11569
|
}
|
|
11570
11570
|
}
|
|
11571
11571
|
try {
|
|
@@ -11592,7 +11592,7 @@ var FallbackMemoryManager = class {
|
|
|
11592
11592
|
} catch (err) {
|
|
11593
11593
|
this.primaryFailed = true;
|
|
11594
11594
|
this.lastError = err instanceof Error ? err.message : String(err);
|
|
11595
|
-
log$
|
|
11595
|
+
log$10.warn(`qmd memory failed; switching to builtin index: ${this.lastError}`);
|
|
11596
11596
|
await this.deps.primary.close?.().catch(() => {});
|
|
11597
11597
|
this.evictCacheEntry();
|
|
11598
11598
|
}
|
|
@@ -11672,12 +11672,12 @@ var FallbackMemoryManager = class {
|
|
|
11672
11672
|
try {
|
|
11673
11673
|
fallback = await this.deps.fallbackFactory();
|
|
11674
11674
|
if (!fallback) {
|
|
11675
|
-
log$
|
|
11675
|
+
log$10.warn("memory fallback requested but builtin index is unavailable");
|
|
11676
11676
|
return null;
|
|
11677
11677
|
}
|
|
11678
11678
|
} catch (err) {
|
|
11679
11679
|
const message = err instanceof Error ? err.message : String(err);
|
|
11680
|
-
log$
|
|
11680
|
+
log$10.warn(`memory fallback unavailable: ${message}`);
|
|
11681
11681
|
return null;
|
|
11682
11682
|
}
|
|
11683
11683
|
this.fallback = fallback;
|
|
@@ -25112,7 +25112,7 @@ function createRunRegistry(options) {
|
|
|
25112
25112
|
|
|
25113
25113
|
//#endregion
|
|
25114
25114
|
//#region src/process/supervisor/supervisor.ts
|
|
25115
|
-
const log$
|
|
25115
|
+
const log$9 = createSubsystemLogger("process/supervisor");
|
|
25116
25116
|
function clampTimeout(value) {
|
|
25117
25117
|
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) return;
|
|
25118
25118
|
return Math.max(1, Math.floor(value));
|
|
@@ -25298,7 +25298,7 @@ function createProcessSupervisor() {
|
|
|
25298
25298
|
exitCode: null,
|
|
25299
25299
|
exitSignal: null
|
|
25300
25300
|
});
|
|
25301
|
-
log$
|
|
25301
|
+
log$9.warn(`spawn failed: runId=${runId} reason=${String(err)}`);
|
|
25302
25302
|
throw err;
|
|
25303
25303
|
}
|
|
25304
25304
|
};
|
|
@@ -26597,7 +26597,7 @@ function resolveRunWorkspaceDir(params) {
|
|
|
26597
26597
|
|
|
26598
26598
|
//#endregion
|
|
26599
26599
|
//#region src/agents/cli-runner.ts
|
|
26600
|
-
const log$
|
|
26600
|
+
const log$8 = createSubsystemLogger("agent/claude-cli");
|
|
26601
26601
|
async function runCliAgent(params) {
|
|
26602
26602
|
const started = Date.now();
|
|
26603
26603
|
const workspaceResolution = resolveRunWorkspaceDir({
|
|
@@ -26610,7 +26610,7 @@ async function runCliAgent(params) {
|
|
|
26610
26610
|
const redactedSessionId = redactRunIdentifier(params.sessionId);
|
|
26611
26611
|
const redactedSessionKey = redactRunIdentifier(params.sessionKey);
|
|
26612
26612
|
const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
|
|
26613
|
-
if (workspaceResolution.usedFallback) log$
|
|
26613
|
+
if (workspaceResolution.usedFallback) log$8.warn(`[workspace-fallback] caller=runCliAgent reason=${workspaceResolution.fallbackReason} run=${params.runId} session=${redactedSessionId} sessionKey=${redactedSessionKey} agent=${workspaceResolution.agentId} workspace=${redactedWorkspace}`);
|
|
26614
26614
|
const workspaceDir = resolvedWorkspace;
|
|
26615
26615
|
const backendResolved = resolveCliBackendConfig(params.provider, params.config);
|
|
26616
26616
|
if (!backendResolved) throw new Error(`Unknown CLI backend: ${params.provider}`);
|
|
@@ -26627,7 +26627,7 @@ async function runCliAgent(params) {
|
|
|
26627
26627
|
sessionId: params.sessionId,
|
|
26628
26628
|
warn: makeBootstrapWarn({
|
|
26629
26629
|
sessionLabel,
|
|
26630
|
-
warn: (message) => log$
|
|
26630
|
+
warn: (message) => log$8.warn(message)
|
|
26631
26631
|
})
|
|
26632
26632
|
});
|
|
26633
26633
|
const { defaultAgentId, sessionAgentId } = resolveSessionAgentIds({
|
|
@@ -26693,7 +26693,7 @@ async function runCliAgent(params) {
|
|
|
26693
26693
|
const queueKey = backend.serialize ?? true ? backendResolved.id : `${backendResolved.id}:${params.runId}`;
|
|
26694
26694
|
try {
|
|
26695
26695
|
const output = await enqueueCliRun(queueKey, async () => {
|
|
26696
|
-
log$
|
|
26696
|
+
log$8.info(`cli exec: provider=${params.provider} model=${normalizedModel} promptChars=${params.prompt.length}`);
|
|
26697
26697
|
const logOutputText = isTruthyEnvValue(process.env.SYMI_CLAUDE_CLI_LOG_OUTPUT);
|
|
26698
26698
|
if (logOutputText) {
|
|
26699
26699
|
const logArgs = [];
|
|
@@ -26726,7 +26726,7 @@ async function runCliAgent(params) {
|
|
|
26726
26726
|
const promptIndex = logArgs.indexOf(argsPrompt);
|
|
26727
26727
|
if (promptIndex >= 0) logArgs[promptIndex] = `<prompt:${argsPrompt.length} chars>`;
|
|
26728
26728
|
}
|
|
26729
|
-
log$
|
|
26729
|
+
log$8.info(`cli argv: ${backend.command} ${logArgs.join(" ")}`);
|
|
26730
26730
|
}
|
|
26731
26731
|
const env = (() => {
|
|
26732
26732
|
const next = {
|
|
@@ -26764,17 +26764,17 @@ async function runCliAgent(params) {
|
|
|
26764
26764
|
const stdout = result.stdout.trim();
|
|
26765
26765
|
const stderr = result.stderr.trim();
|
|
26766
26766
|
if (logOutputText) {
|
|
26767
|
-
if (stdout) log$
|
|
26768
|
-
if (stderr) log$
|
|
26767
|
+
if (stdout) log$8.info(`cli stdout:\n${stdout}`);
|
|
26768
|
+
if (stderr) log$8.info(`cli stderr:\n${stderr}`);
|
|
26769
26769
|
}
|
|
26770
26770
|
if (shouldLogVerbose()) {
|
|
26771
|
-
if (stdout) log$
|
|
26772
|
-
if (stderr) log$
|
|
26771
|
+
if (stdout) log$8.debug(`cli stdout:\n${stdout}`);
|
|
26772
|
+
if (stderr) log$8.debug(`cli stderr:\n${stderr}`);
|
|
26773
26773
|
}
|
|
26774
26774
|
if (result.exitCode !== 0 || result.reason !== "exit") {
|
|
26775
26775
|
if (result.reason === "no-output-timeout" || result.noOutputTimedOut) {
|
|
26776
26776
|
const timeoutReason = `CLI produced no output for ${Math.round(noOutputTimeoutMs / 1e3)}s and was terminated.`;
|
|
26777
|
-
log$
|
|
26777
|
+
log$8.warn(`cli watchdog timeout: provider=${params.provider} model=${modelId} session=${cliSessionIdToSend ?? params.sessionId} noOutputTimeoutMs=${noOutputTimeoutMs} pid=${managedRun.pid ?? "unknown"}`);
|
|
26778
26778
|
throw new FailoverError(timeoutReason, {
|
|
26779
26779
|
reason: "timeout",
|
|
26780
26780
|
provider: params.provider,
|
|
@@ -27404,7 +27404,7 @@ function resolveEmbeddedSessionLane(key) {
|
|
|
27404
27404
|
|
|
27405
27405
|
//#endregion
|
|
27406
27406
|
//#region src/agents/pi-embedded-runner/logger.ts
|
|
27407
|
-
const log$
|
|
27407
|
+
const log$7 = createSubsystemLogger("agent/embedded");
|
|
27408
27408
|
|
|
27409
27409
|
//#endregion
|
|
27410
27410
|
//#region src/utils/safe-json.ts
|
|
@@ -27450,7 +27450,7 @@ function getQueuedFileWriter(writers, filePath) {
|
|
|
27450
27450
|
//#endregion
|
|
27451
27451
|
//#region src/agents/anthropic-payload-log.ts
|
|
27452
27452
|
const writers$1 = /* @__PURE__ */ new Map();
|
|
27453
|
-
const log$
|
|
27453
|
+
const log$6 = createSubsystemLogger("agent/anthropic-payload");
|
|
27454
27454
|
function resolvePayloadLogConfig(env) {
|
|
27455
27455
|
const enabled = parseBooleanValue$1(env.SYMI_ANTHROPIC_PAYLOAD_LOG) ?? false;
|
|
27456
27456
|
const fileOverride = env.SYMI_ANTHROPIC_PAYLOAD_LOG_FILE?.trim();
|
|
@@ -27540,13 +27540,13 @@ function createAnthropicPayloadLogger(params) {
|
|
|
27540
27540
|
usage,
|
|
27541
27541
|
error: errorMessage
|
|
27542
27542
|
});
|
|
27543
|
-
log$
|
|
27543
|
+
log$6.info("anthropic usage", {
|
|
27544
27544
|
runId: params.runId,
|
|
27545
27545
|
sessionId: params.sessionId,
|
|
27546
27546
|
usage
|
|
27547
27547
|
});
|
|
27548
27548
|
};
|
|
27549
|
-
log$
|
|
27549
|
+
log$6.info("anthropic payload logger enabled", { filePath: writer.filePath });
|
|
27550
27550
|
return {
|
|
27551
27551
|
enabled: true,
|
|
27552
27552
|
wrapStreamFn,
|
|
@@ -29428,7 +29428,7 @@ function createEmbeddedPiSessionEventHandler(ctx) {
|
|
|
29428
29428
|
//#region src/agents/pi-embedded-subscribe.ts
|
|
29429
29429
|
const THINKING_TAG_SCAN_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\s*>/gi;
|
|
29430
29430
|
const FINAL_TAG_SCAN_RE = /<\s*(\/?)\s*final\s*>/gi;
|
|
29431
|
-
const log$
|
|
29431
|
+
const log$5 = createSubsystemLogger("agent/embedded");
|
|
29432
29432
|
function subscribeEmbeddedPiSession(params) {
|
|
29433
29433
|
const reasoningMode = params.reasoningMode ?? "off";
|
|
29434
29434
|
const useMarkdown = (params.toolResultFormat ?? "markdown") === "markdown";
|
|
@@ -29585,7 +29585,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
29585
29585
|
state.compactionRetryReject = reject;
|
|
29586
29586
|
});
|
|
29587
29587
|
state.compactionRetryPromise.catch((err) => {
|
|
29588
|
-
log$
|
|
29588
|
+
log$5.debug(`compaction promise rejected (no waiter): ${String(err)}`);
|
|
29589
29589
|
});
|
|
29590
29590
|
}
|
|
29591
29591
|
};
|
|
@@ -29737,7 +29737,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
29737
29737
|
if (!chunk) return;
|
|
29738
29738
|
if (chunk === state.lastBlockReplyText) return;
|
|
29739
29739
|
if (isMessagingToolDuplicateNormalized(normalizeTextForComparison(chunk), messagingToolSentTextsNormalized)) {
|
|
29740
|
-
log$
|
|
29740
|
+
log$5.debug(`Skipping block reply - already sent via messaging tool: ${chunk.slice(0, 50)}...`);
|
|
29741
29741
|
return;
|
|
29742
29742
|
}
|
|
29743
29743
|
if (shouldSkipAssistantText(chunk)) return;
|
|
@@ -29815,7 +29815,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
29815
29815
|
const ctx = {
|
|
29816
29816
|
params,
|
|
29817
29817
|
state,
|
|
29818
|
-
log: log$
|
|
29818
|
+
log: log$5,
|
|
29819
29819
|
blockChunking,
|
|
29820
29820
|
blockChunker,
|
|
29821
29821
|
hookRunner: params.hookRunner,
|
|
@@ -29848,7 +29848,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
29848
29848
|
if (state.unsubscribed) return;
|
|
29849
29849
|
state.unsubscribed = true;
|
|
29850
29850
|
if (state.compactionRetryPromise) {
|
|
29851
|
-
log$
|
|
29851
|
+
log$5.debug(`unsubscribe: rejecting compaction wait runId=${params.runId}`);
|
|
29852
29852
|
const reject = state.compactionRetryReject;
|
|
29853
29853
|
state.compactionRetryResolve = void 0;
|
|
29854
29854
|
state.compactionRetryReject = void 0;
|
|
@@ -29858,11 +29858,11 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
29858
29858
|
reject?.(abortErr);
|
|
29859
29859
|
}
|
|
29860
29860
|
if (params.session.isCompacting) {
|
|
29861
|
-
log$
|
|
29861
|
+
log$5.debug(`unsubscribe: aborting in-flight compaction runId=${params.runId}`);
|
|
29862
29862
|
try {
|
|
29863
29863
|
params.session.abortCompaction();
|
|
29864
29864
|
} catch (err) {
|
|
29865
|
-
log$
|
|
29865
|
+
log$5.warn(`unsubscribe: compaction abort failed runId=${params.runId} err=${String(err)}`);
|
|
29866
29866
|
}
|
|
29867
29867
|
}
|
|
29868
29868
|
sessionUnsubscribe();
|
|
@@ -29911,7 +29911,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
29911
29911
|
|
|
29912
29912
|
//#endregion
|
|
29913
29913
|
//#region src/agents/pi-tools.before-tool-call.ts
|
|
29914
|
-
const log$
|
|
29914
|
+
const log$4 = createSubsystemLogger("agents/tools");
|
|
29915
29915
|
const BEFORE_TOOL_CALL_WRAPPED = Symbol("beforeToolCallWrapped");
|
|
29916
29916
|
const adjustedParamsByToolCallId = /* @__PURE__ */ new Map();
|
|
29917
29917
|
const MAX_TRACKED_ADJUSTED_PARAMS = 1024;
|
|
@@ -29945,7 +29945,7 @@ async function recordLoopOutcome(args) {
|
|
|
29945
29945
|
config: args.ctx.loopDetection
|
|
29946
29946
|
});
|
|
29947
29947
|
} catch (err) {
|
|
29948
|
-
log$
|
|
29948
|
+
log$4.warn(`tool loop outcome tracking failed: tool=${args.toolName} error=${String(err)}`);
|
|
29949
29949
|
}
|
|
29950
29950
|
}
|
|
29951
29951
|
async function runBeforeToolCallHook(args) {
|
|
@@ -29962,7 +29962,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
29962
29962
|
const loopResult = detectToolCallLoop(sessionState, toolName, params, args.ctx.loopDetection);
|
|
29963
29963
|
if (loopResult.stuck) {
|
|
29964
29964
|
if (loopResult.level === "critical") {
|
|
29965
|
-
log$
|
|
29965
|
+
log$4.error(`Blocking ${toolName} due to critical loop: ${loopResult.message}`);
|
|
29966
29966
|
logToolLoopAction({
|
|
29967
29967
|
sessionKey: args.ctx.sessionKey,
|
|
29968
29968
|
sessionId: args.ctx?.agentId,
|
|
@@ -29979,7 +29979,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
29979
29979
|
reason: loopResult.message
|
|
29980
29980
|
};
|
|
29981
29981
|
} else if (shouldEmitLoopWarning(sessionState, loopResult.warningKey ?? `${loopResult.detector}:${toolName}`, loopResult.count)) {
|
|
29982
|
-
log$
|
|
29982
|
+
log$4.warn(`Loop warning for ${toolName}: ${loopResult.message}`);
|
|
29983
29983
|
logToolLoopAction({
|
|
29984
29984
|
sessionKey: args.ctx.sessionKey,
|
|
29985
29985
|
sessionId: args.ctx?.agentId,
|
|
@@ -30029,7 +30029,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
30029
30029
|
}
|
|
30030
30030
|
} catch (err) {
|
|
30031
30031
|
const toolCallId = args.toolCallId ? ` toolCallId=${args.toolCallId}` : "";
|
|
30032
|
-
log$
|
|
30032
|
+
log$4.warn(`before_tool_call hook failed: tool=${toolName}${toolCallId} error=${String(err)}`);
|
|
30033
30033
|
}
|
|
30034
30034
|
return {
|
|
30035
30035
|
blocked: false,
|
|
@@ -30273,6 +30273,7 @@ function validateShellCommand(command) {
|
|
|
30273
30273
|
|
|
30274
30274
|
//#endregion
|
|
30275
30275
|
//#region src/agents/pi-tools.validate-wrapper.ts
|
|
30276
|
+
const log$3 = createSubsystemLogger("agents/tool-validate");
|
|
30276
30277
|
const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
|
|
30277
30278
|
const FILE_TOOL_NAMES = new Set([
|
|
30278
30279
|
"write",
|
|
@@ -30331,13 +30332,22 @@ function wrapToolWithArgValidation(tool) {
|
|
|
30331
30332
|
execute(toolCallId, params, ...rest) {
|
|
30332
30333
|
if (isExecTool) {
|
|
30333
30334
|
const command = params.command ?? params.cmd;
|
|
30334
|
-
if (typeof command !== "string")
|
|
30335
|
+
if (typeof command !== "string") {
|
|
30336
|
+
log$3.debug(`[validate] exec called without string command: keys=${Object.keys(params).join(",")}`);
|
|
30337
|
+
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
30338
|
+
}
|
|
30335
30339
|
const result = validateShellCommand(command);
|
|
30336
|
-
if (!result.valid)
|
|
30337
|
-
|
|
30338
|
-
|
|
30339
|
-
|
|
30340
|
-
|
|
30340
|
+
if (!result.valid) {
|
|
30341
|
+
log$3.warn(`[validate] exec command rejected: reason=${result.reason} raw=${command.slice(0, 100)}`);
|
|
30342
|
+
return Promise.resolve({ output: `Error: ${result.reason}. The command appears to contain model control tokens. Please provide a clean shell command without any <|, |>, or XML-like tags. Only valid shell syntax is accepted.` });
|
|
30343
|
+
}
|
|
30344
|
+
if (result.cleaned !== command) {
|
|
30345
|
+
log$3.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
|
|
30346
|
+
return originalExecute.call(tool, toolCallId, {
|
|
30347
|
+
...params,
|
|
30348
|
+
command: result.cleaned
|
|
30349
|
+
}, ...rest);
|
|
30350
|
+
}
|
|
30341
30351
|
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
30342
30352
|
}
|
|
30343
30353
|
const pathKey = FILE_PATH_KEYS.find((k) => typeof params[k] === "string");
|
|
@@ -30708,7 +30718,7 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
30708
30718
|
const textLength = getToolResultTextLength(msg);
|
|
30709
30719
|
if (textLength > maxChars) {
|
|
30710
30720
|
oversizedIndices.push(i);
|
|
30711
|
-
log$
|
|
30721
|
+
log$7.info(`[tool-result-truncation] Found oversized tool result: entry=${entry.id} chars=${textLength} maxChars=${maxChars} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
30712
30722
|
}
|
|
30713
30723
|
}
|
|
30714
30724
|
if (oversizedIndices.length === 0) return {
|
|
@@ -30730,7 +30740,7 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
30730
30740
|
message = truncateToolResultMessage(message, maxChars);
|
|
30731
30741
|
truncatedCount++;
|
|
30732
30742
|
const newLength = getToolResultTextLength(message);
|
|
30733
|
-
log$
|
|
30743
|
+
log$7.info(`[tool-result-truncation] Truncated tool result: originalEntry=${entry.id} newChars=${newLength} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
30734
30744
|
}
|
|
30735
30745
|
sessionManager.appendMessage(message);
|
|
30736
30746
|
} else if (entry.type === "compaction") sessionManager.appendCompaction(entry.summary, entry.firstKeptEntryId, entry.tokensBefore, entry.details, entry.fromHook);
|
|
@@ -30744,14 +30754,14 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
30744
30754
|
if (entry.name) sessionManager.appendSessionInfo(entry.name);
|
|
30745
30755
|
}
|
|
30746
30756
|
}
|
|
30747
|
-
log$
|
|
30757
|
+
log$7.info(`[tool-result-truncation] Truncated ${truncatedCount} tool result(s) in session (contextWindow=${contextWindowTokens} maxChars=${maxChars}) sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
30748
30758
|
return {
|
|
30749
30759
|
truncated: true,
|
|
30750
30760
|
truncatedCount
|
|
30751
30761
|
};
|
|
30752
30762
|
} catch (err) {
|
|
30753
30763
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
30754
|
-
log$
|
|
30764
|
+
log$7.warn(`[tool-result-truncation] Failed to truncate: ${errMsg}`);
|
|
30755
30765
|
return {
|
|
30756
30766
|
truncated: false,
|
|
30757
30767
|
truncatedCount: 0,
|
|
@@ -32527,7 +32537,7 @@ function resolveAnthropicBetas(extraParams, provider, modelId) {
|
|
|
32527
32537
|
for (const beta of configured) if (typeof beta === "string" && beta.trim()) betas.add(beta.trim());
|
|
32528
32538
|
}
|
|
32529
32539
|
if (extraParams?.context1m === true) if (isAnthropic1MModel(modelId)) betas.add(ANTHROPIC_CONTEXT_1M_BETA);
|
|
32530
|
-
else log$
|
|
32540
|
+
else log$7.warn(`ignoring context1m for non-opus/sonnet model: ${provider}/${modelId}`);
|
|
32531
32541
|
return betas.size > 0 ? [...betas] : void 0;
|
|
32532
32542
|
}
|
|
32533
32543
|
function mergeAnthropicBetaHeader(headers, betas) {
|
|
@@ -33138,14 +33148,14 @@ function logToolSchemasForGoogle(params) {
|
|
|
33138
33148
|
if (params.provider !== "google-antigravity" && params.provider !== "google-gemini-cli") return;
|
|
33139
33149
|
const toolNames = params.tools.map((tool, index) => `${index}:${tool.name}`);
|
|
33140
33150
|
const tools = sanitizeToolsForGoogle(params);
|
|
33141
|
-
log$
|
|
33151
|
+
log$7.info("google tool schema snapshot", {
|
|
33142
33152
|
provider: params.provider,
|
|
33143
33153
|
toolCount: tools.length,
|
|
33144
33154
|
tools: toolNames
|
|
33145
33155
|
});
|
|
33146
33156
|
for (const [index, tool] of tools.entries()) {
|
|
33147
33157
|
const violations = findUnsupportedSchemaKeywords(tool.parameters, `${tool.name}.parameters`);
|
|
33148
|
-
if (violations.length > 0) log$
|
|
33158
|
+
if (violations.length > 0) log$7.warn("google tool schema has unsupported keywords", {
|
|
33149
33159
|
index,
|
|
33150
33160
|
tool: tool.name,
|
|
33151
33161
|
violations: violations.slice(0, 12),
|
|
@@ -33157,7 +33167,7 @@ const compactionFailureEmitter = new EventEmitter();
|
|
|
33157
33167
|
registerUnhandledRejectionHandler((reason) => {
|
|
33158
33168
|
const message = describeUnknownError(reason);
|
|
33159
33169
|
if (!isCompactionFailureError(message)) return false;
|
|
33160
|
-
log$
|
|
33170
|
+
log$7.error(`Auto-compaction failed (unhandled): ${message}`);
|
|
33161
33171
|
compactionFailureEmitter.emit("failure", message);
|
|
33162
33172
|
return true;
|
|
33163
33173
|
});
|
|
@@ -33209,7 +33219,7 @@ function applyGoogleTurnOrderingFix(params) {
|
|
|
33209
33219
|
const sanitized = sanitizeGoogleTurnOrdering(params.messages);
|
|
33210
33220
|
const didPrepend = sanitized !== params.messages;
|
|
33211
33221
|
if (didPrepend && !hasGoogleTurnOrderingMarker(params.sessionManager)) {
|
|
33212
|
-
(params.warn ?? ((message) => log$
|
|
33222
|
+
(params.warn ?? ((message) => log$7.warn(message)))(`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`);
|
|
33213
33223
|
markGoogleTurnOrderingMarker(params.sessionManager);
|
|
33214
33224
|
}
|
|
33215
33225
|
return {
|
|
@@ -33829,7 +33839,7 @@ function isImageExtension(filePath) {
|
|
|
33829
33839
|
}
|
|
33830
33840
|
async function sanitizeImagesWithLog(images, label, imageSanitization) {
|
|
33831
33841
|
const { images: sanitized, dropped } = await sanitizeImageBlocks(images, label, imageSanitization);
|
|
33832
|
-
if (dropped > 0) log$
|
|
33842
|
+
if (dropped > 0) log$7.warn(`Native image: dropped ${dropped} image(s) after sanitization (${label}).`);
|
|
33833
33843
|
return sanitized;
|
|
33834
33844
|
}
|
|
33835
33845
|
/**
|
|
@@ -33904,7 +33914,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
33904
33914
|
try {
|
|
33905
33915
|
let targetPath = ref.resolved;
|
|
33906
33916
|
if (ref.type === "url") {
|
|
33907
|
-
log$
|
|
33917
|
+
log$7.debug(`Native image: rejecting remote URL (local-only): ${ref.resolved}`);
|
|
33908
33918
|
return null;
|
|
33909
33919
|
}
|
|
33910
33920
|
if (ref.type === "path") {
|
|
@@ -33914,7 +33924,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
33914
33924
|
cwd: options.sandbox.root
|
|
33915
33925
|
}).hostPath;
|
|
33916
33926
|
} catch (err) {
|
|
33917
|
-
log$
|
|
33927
|
+
log$7.debug(`Native image: sandbox validation failed for ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
33918
33928
|
return null;
|
|
33919
33929
|
}
|
|
33920
33930
|
else if (!path.isAbsolute(targetPath)) targetPath = path.resolve(workspaceDir, targetPath);
|
|
@@ -33928,7 +33938,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
33928
33938
|
})
|
|
33929
33939
|
}) : await loadWebMedia(targetPath, options?.maxBytes);
|
|
33930
33940
|
if (media.kind !== "image") {
|
|
33931
|
-
log$
|
|
33941
|
+
log$7.debug(`Native image: not an image file: ${targetPath} (got ${media.kind})`);
|
|
33932
33942
|
return null;
|
|
33933
33943
|
}
|
|
33934
33944
|
const mimeType = media.contentType ?? "image/jpeg";
|
|
@@ -33938,7 +33948,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
33938
33948
|
mimeType
|
|
33939
33949
|
};
|
|
33940
33950
|
} catch (err) {
|
|
33941
|
-
log$
|
|
33951
|
+
log$7.debug(`Native image: failed to load ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
33942
33952
|
return null;
|
|
33943
33953
|
}
|
|
33944
33954
|
}
|
|
@@ -34037,7 +34047,7 @@ async function detectAndLoadPromptImages(params) {
|
|
|
34037
34047
|
loadedCount: 0,
|
|
34038
34048
|
skippedCount: 0
|
|
34039
34049
|
};
|
|
34040
|
-
log$
|
|
34050
|
+
log$7.debug(`Native image: detected ${allRefs.length} image refs (${promptRefs.length} in prompt, ${uniqueHistoryRefs.length} in history)`);
|
|
34041
34051
|
const promptImages = [...params.existingImages ?? []];
|
|
34042
34052
|
const historyImagesByIndex = /* @__PURE__ */ new Map();
|
|
34043
34053
|
let loadedCount = 0;
|
|
@@ -34054,7 +34064,7 @@ async function detectAndLoadPromptImages(params) {
|
|
|
34054
34064
|
else historyImagesByIndex.set(ref.messageIndex, [image]);
|
|
34055
34065
|
} else promptImages.push(image);
|
|
34056
34066
|
loadedCount++;
|
|
34057
|
-
log$
|
|
34067
|
+
log$7.debug(`Native image: loaded ${ref.type} ${ref.resolved}`);
|
|
34058
34068
|
} else skippedCount++;
|
|
34059
34069
|
}
|
|
34060
34070
|
const imageSanitization = { maxDimensionPx: params.maxDimensionPx };
|
|
@@ -34150,7 +34160,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34150
34160
|
const resolvedWorkspace = resolveUserPath(params.workspaceDir);
|
|
34151
34161
|
const prevCwd = process.cwd();
|
|
34152
34162
|
const runAbortController = new AbortController();
|
|
34153
|
-
log$
|
|
34163
|
+
log$7.debug(`embedded run start: runId=${params.runId} sessionId=${params.sessionId} provider=${params.provider} model=${params.modelId} thinking=${params.thinkLevel} messageChannel=${params.messageChannel ?? params.messageProvider ?? "unknown"}`);
|
|
34154
34164
|
await fs$1.mkdir(resolvedWorkspace, { recursive: true });
|
|
34155
34165
|
const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
|
|
34156
34166
|
const sandbox = await resolveSandboxContext({
|
|
@@ -34186,7 +34196,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34186
34196
|
sessionId: params.sessionId,
|
|
34187
34197
|
warn: makeBootstrapWarn({
|
|
34188
34198
|
sessionLabel,
|
|
34189
|
-
warn: (message) => log$
|
|
34199
|
+
warn: (message) => log$7.warn(message)
|
|
34190
34200
|
})
|
|
34191
34201
|
});
|
|
34192
34202
|
const workspaceNotes = hookAdjustedBootstrapFiles.some((file) => file.name === DEFAULT_BOOTSTRAP_FILENAME && !file.missing) ? ["Reminder: commit your changes in this workspace after edits."] : void 0;
|
|
@@ -34385,7 +34395,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34385
34395
|
try {
|
|
34386
34396
|
await repairSessionFileIfNeeded({
|
|
34387
34397
|
sessionFile: params.sessionFile,
|
|
34388
|
-
warn: (message) => log$
|
|
34398
|
+
warn: (message) => log$7.warn(message)
|
|
34389
34399
|
});
|
|
34390
34400
|
const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
|
|
34391
34401
|
const transcriptPolicy = resolveTranscriptPolicy({
|
|
@@ -34394,7 +34404,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34394
34404
|
modelId: params.modelId
|
|
34395
34405
|
});
|
|
34396
34406
|
const versionCheck = await handleSessionVersion(params.sessionFile);
|
|
34397
|
-
if (versionCheck.archived) log$
|
|
34407
|
+
if (versionCheck.archived) log$7.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
|
|
34398
34408
|
await prewarmSessionFile(params.sessionFile);
|
|
34399
34409
|
sessionManager = guardSessionManager(SessionManager.open(params.sessionFile), {
|
|
34400
34410
|
agentId: sessionAgentId,
|
|
@@ -34649,7 +34659,6 @@ async function runEmbeddedAttempt(params) {
|
|
|
34649
34659
|
const TOOL_ERROR_ABORT_THRESHOLD = 5;
|
|
34650
34660
|
const TOOL_ERROR_WARN_THRESHOLD = 3;
|
|
34651
34661
|
let consecutiveToolErrors = 0;
|
|
34652
|
-
let lastErrorToolName = "";
|
|
34653
34662
|
const subscription = subscribeEmbeddedPiSession({
|
|
34654
34663
|
session: activeSession,
|
|
34655
34664
|
runId: params.runId,
|
|
@@ -34673,26 +34682,23 @@ async function runEmbeddedAttempt(params) {
|
|
|
34673
34682
|
params.onAgentEvent?.(evt);
|
|
34674
34683
|
if (evt.stream === "tool" && !aborted) {
|
|
34675
34684
|
const phase = typeof evt.data?.phase === "string" ? evt.data.phase : "";
|
|
34676
|
-
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "";
|
|
34677
34685
|
const isError = evt.data?.isError === true;
|
|
34678
|
-
if (phase === "result"
|
|
34679
|
-
if (isError
|
|
34680
|
-
else
|
|
34681
|
-
consecutiveToolErrors = 1;
|
|
34682
|
-
lastErrorToolName = toolName;
|
|
34683
|
-
} else {
|
|
34684
|
-
consecutiveToolErrors = 0;
|
|
34685
|
-
lastErrorToolName = "";
|
|
34686
|
-
}
|
|
34686
|
+
if (phase === "result") {
|
|
34687
|
+
if (isError) consecutiveToolErrors++;
|
|
34688
|
+
else consecutiveToolErrors = 0;
|
|
34687
34689
|
if (consecutiveToolErrors >= TOOL_ERROR_ABORT_THRESHOLD) {
|
|
34688
|
-
|
|
34689
|
-
|
|
34690
|
-
|
|
34690
|
+
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
|
|
34691
|
+
log$7.error(`Agent-loop circuit breaker: ${consecutiveToolErrors} consecutive tool errors (last: ${toolName}). Aborting run ${params.runId}.`);
|
|
34692
|
+
abortRun(false, /* @__PURE__ */ new Error(`${consecutiveToolErrors} consecutive tool errors. The model may be generating corrupted tool arguments. Run aborted to prevent infinite loop.`));
|
|
34693
|
+
} else if (consecutiveToolErrors === TOOL_ERROR_WARN_THRESHOLD) {
|
|
34694
|
+
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
|
|
34695
|
+
log$7.warn(`Agent-loop tool error warning: ${consecutiveToolErrors} consecutive failures (last: ${toolName}). runId=${params.runId}`);
|
|
34696
|
+
}
|
|
34691
34697
|
}
|
|
34692
34698
|
}
|
|
34693
34699
|
if (evt.stream === "assistant" && typeof evt.data?.text === "string" && !aborted) {
|
|
34694
34700
|
streamMonitor.onChunk(evt.data.text);
|
|
34695
|
-
if (streamMonitor.shouldStop()) log$
|
|
34701
|
+
if (streamMonitor.shouldStop()) log$7.debug(`stream monitor detection (log-only, no abort): runId=${params.runId} reason=${streamMonitor.getStopReason()}`);
|
|
34696
34702
|
}
|
|
34697
34703
|
},
|
|
34698
34704
|
enforceFinalTag: params.enforceFinalTag,
|
|
@@ -34712,7 +34718,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34712
34718
|
let abortWarnTimer;
|
|
34713
34719
|
const isProbeSession = params.sessionId?.startsWith("probe-") ?? false;
|
|
34714
34720
|
const abortTimer = setTimeout(() => {
|
|
34715
|
-
if (!isProbeSession) log$
|
|
34721
|
+
if (!isProbeSession) log$7.warn(`embedded run timeout: runId=${params.runId} sessionId=${params.sessionId} timeoutMs=${params.timeoutMs}`);
|
|
34716
34722
|
if (shouldFlagCompactionTimeout({
|
|
34717
34723
|
isTimeout: true,
|
|
34718
34724
|
isCompactionPendingOrRetrying: subscription.isCompacting(),
|
|
@@ -34721,7 +34727,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34721
34727
|
abortRun(true);
|
|
34722
34728
|
if (!abortWarnTimer) abortWarnTimer = setTimeout(() => {
|
|
34723
34729
|
if (!activeSession.isStreaming) return;
|
|
34724
|
-
if (!isProbeSession) log$
|
|
34730
|
+
if (!isProbeSession) log$7.warn(`embedded run abort still streaming: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
34725
34731
|
}, 1e4);
|
|
34726
34732
|
}, Math.max(1, params.timeoutMs));
|
|
34727
34733
|
armSymipulseTimer = () => {
|
|
@@ -34729,7 +34735,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34729
34735
|
clearSymipulseTimer();
|
|
34730
34736
|
symipulseTimer = setTimeout(() => {
|
|
34731
34737
|
if (aborted) return;
|
|
34732
|
-
if (!isProbeSession) log$
|
|
34738
|
+
if (!isProbeSession) log$7.warn(`symipulse timeout: runId=${params.runId} sessionId=${params.sessionId} symipulseMs=${symipulseMs} (no activity)`);
|
|
34733
34739
|
if (shouldFlagCompactionTimeout({
|
|
34734
34740
|
isTimeout: true,
|
|
34735
34741
|
isCompactionPendingOrRetrying: subscription.isCompacting(),
|
|
@@ -34773,13 +34779,13 @@ async function runEmbeddedAttempt(params) {
|
|
|
34773
34779
|
prompt: params.prompt,
|
|
34774
34780
|
messages: activeSession.messages
|
|
34775
34781
|
}, hookCtx).catch((hookErr) => {
|
|
34776
|
-
log$
|
|
34782
|
+
log$7.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
|
|
34777
34783
|
}) : void 0;
|
|
34778
34784
|
const legacyResult = hookRunner?.hasHooks("before_agent_start") ? await hookRunner.runBeforeAgentStart({
|
|
34779
34785
|
prompt: params.prompt,
|
|
34780
34786
|
messages: activeSession.messages
|
|
34781
34787
|
}, hookCtx).catch((hookErr) => {
|
|
34782
|
-
log$
|
|
34788
|
+
log$7.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
|
|
34783
34789
|
}) : void 0;
|
|
34784
34790
|
const hookResult = {
|
|
34785
34791
|
systemPrompt: promptBuildResult?.systemPrompt ?? legacyResult?.systemPrompt,
|
|
@@ -34787,7 +34793,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34787
34793
|
};
|
|
34788
34794
|
if (hookResult?.prependContext) {
|
|
34789
34795
|
effectivePrompt = `${hookResult.prependContext}\n\n${params.prompt}`;
|
|
34790
|
-
log$
|
|
34796
|
+
log$7.debug(`hooks: prepended context to prompt (${hookResult.prependContext.length} chars)`);
|
|
34791
34797
|
}
|
|
34792
34798
|
{
|
|
34793
34799
|
const autoRecallAgentId = normalizeAgentId(params.sessionKey);
|
|
@@ -34804,11 +34810,11 @@ async function runEmbeddedAttempt(params) {
|
|
|
34804
34810
|
if (recallResults.length > 0) {
|
|
34805
34811
|
const recallBlock = `<memory_context>\nThe following memory snippets were automatically retrieved as relevant context:\n\n${recallResults.map((r) => `[${r.path}#L${r.startLine}-L${r.endLine}]\n${r.snippet}`).join("\n---\n")}\n</memory_context>`;
|
|
34806
34812
|
effectivePrompt = `${recallBlock}\n\n${effectivePrompt}`;
|
|
34807
|
-
log$
|
|
34813
|
+
log$7.debug(`auto-recall: injected ${recallResults.length} snippets (${recallBlock.length} chars)`);
|
|
34808
34814
|
}
|
|
34809
34815
|
}
|
|
34810
34816
|
} catch (recallErr) {
|
|
34811
|
-
log$
|
|
34817
|
+
log$7.debug(`auto-recall: skipped (${String(recallErr)})`);
|
|
34812
34818
|
}
|
|
34813
34819
|
}
|
|
34814
34820
|
{
|
|
@@ -34820,10 +34826,10 @@ async function runEmbeddedAttempt(params) {
|
|
|
34820
34826
|
if (planResult.enter) {
|
|
34821
34827
|
if (planResult.stripped != null) effectivePrompt = planResult.stripped;
|
|
34822
34828
|
effectivePrompt = `${PLAN_MODE_SYSTEM_PROMPT}\n\n${effectivePrompt}`;
|
|
34823
|
-
log$
|
|
34829
|
+
log$7.info(`plan-mode: activated (${planResult.reason}) for runId=${params.runId}`);
|
|
34824
34830
|
} else if (planResult.stripped != null) effectivePrompt = planResult.stripped;
|
|
34825
34831
|
}
|
|
34826
|
-
log$
|
|
34832
|
+
log$7.debug(`embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
34827
34833
|
cacheTrace?.recordStage("prompt:before", {
|
|
34828
34834
|
prompt: effectivePrompt,
|
|
34829
34835
|
messages: activeSession.messages
|
|
@@ -34835,7 +34841,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34835
34841
|
const sessionContext = sessionManager.buildSessionContext();
|
|
34836
34842
|
const sanitizedOrphan = transcriptPolicy.sanitizeThinkingSignatures ? sanitizeAntigravityThinkingBlocks(sessionContext.messages) : sessionContext.messages;
|
|
34837
34843
|
activeSession.agent.replaceMessages(sanitizedOrphan);
|
|
34838
|
-
log$
|
|
34844
|
+
log$7.warn(`Removed orphaned user message to prevent consecutive user turns. runId=${params.runId} sessionId=${params.sessionId}`);
|
|
34839
34845
|
}
|
|
34840
34846
|
try {
|
|
34841
34847
|
const imageResult = await detectAndLoadPromptImages({
|
|
@@ -34857,12 +34863,12 @@ async function runEmbeddedAttempt(params) {
|
|
|
34857
34863
|
messages: activeSession.messages,
|
|
34858
34864
|
note: `images: prompt=${imageResult.images.length} history=${imageResult.historyImagesByIndex.size}`
|
|
34859
34865
|
});
|
|
34860
|
-
if (log$
|
|
34866
|
+
if (log$7.isEnabled("debug")) {
|
|
34861
34867
|
const msgCount = activeSession.messages.length;
|
|
34862
34868
|
const systemLen = systemPromptText?.length ?? 0;
|
|
34863
34869
|
const promptLen = effectivePrompt.length;
|
|
34864
34870
|
const sessionSummary = summarizeSessionContext(activeSession.messages);
|
|
34865
|
-
log$
|
|
34871
|
+
log$7.debug(`[context-diag] pre-prompt: sessionKey=${params.sessionKey ?? params.sessionId} messages=${msgCount} roleCounts=${sessionSummary.roleCounts} historyTextChars=${sessionSummary.totalTextChars} maxMessageTextChars=${sessionSummary.maxMessageTextChars} historyImageBlocks=${sessionSummary.totalImageBlocks} systemPromptChars=${systemLen} promptChars=${promptLen} promptImages=${imageResult.images.length} historyImageMessages=${imageResult.historyImagesByIndex.size} provider=${params.provider}/${params.modelId} sessionFile=${params.sessionFile}`);
|
|
34866
34872
|
}
|
|
34867
34873
|
if (hookRunner?.hasHooks("llm_input")) hookRunner.runLlmInput({
|
|
34868
34874
|
runId: params.runId,
|
|
@@ -34880,7 +34886,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34880
34886
|
workspaceDir: params.workspaceDir,
|
|
34881
34887
|
messageProvider: params.messageProvider ?? void 0
|
|
34882
34888
|
}).catch((err) => {
|
|
34883
|
-
log$
|
|
34889
|
+
log$7.warn(`llm_input hook failed: ${String(err)}`);
|
|
34884
34890
|
});
|
|
34885
34891
|
if (imageResult.images.length > 0) await abortable(activeSession.prompt(effectivePrompt, { images: imageResult.images }));
|
|
34886
34892
|
else await abortable(activeSession.prompt(effectivePrompt));
|
|
@@ -34888,7 +34894,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34888
34894
|
promptError = err;
|
|
34889
34895
|
promptErrorSource = "prompt";
|
|
34890
34896
|
} finally {
|
|
34891
|
-
log$
|
|
34897
|
+
log$7.debug(`embedded run prompt end: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - promptStartedAt}`);
|
|
34892
34898
|
}
|
|
34893
34899
|
const wasCompactingBefore = activeSession.isCompacting;
|
|
34894
34900
|
const snapshot = activeSession.messages.slice();
|
|
@@ -34903,7 +34909,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34903
34909
|
promptError = err;
|
|
34904
34910
|
promptErrorSource = "compaction";
|
|
34905
34911
|
}
|
|
34906
|
-
if (!isProbeSession) log$
|
|
34912
|
+
if (!isProbeSession) log$7.debug(`compaction wait aborted: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
34907
34913
|
} else throw err;
|
|
34908
34914
|
}
|
|
34909
34915
|
if (!timedOutDuringCompaction) {
|
|
@@ -34921,7 +34927,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34921
34927
|
currentSessionId: activeSession.sessionId
|
|
34922
34928
|
});
|
|
34923
34929
|
if (timedOutDuringCompaction) {
|
|
34924
|
-
if (!isProbeSession) log$
|
|
34930
|
+
if (!isProbeSession) log$7.warn(`using ${snapshotSelection.source} snapshot: timed out during compaction runId=${params.runId} sessionId=${params.sessionId}`);
|
|
34925
34931
|
}
|
|
34926
34932
|
messagesSnapshot = snapshotSelection.messagesSnapshot;
|
|
34927
34933
|
sessionIdUsed = snapshotSelection.sessionIdUsed;
|
|
@@ -34936,7 +34942,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34936
34942
|
error: describeUnknownError(promptError)
|
|
34937
34943
|
});
|
|
34938
34944
|
} catch (entryErr) {
|
|
34939
|
-
log$
|
|
34945
|
+
log$7.warn(`failed to persist prompt error entry: ${String(entryErr)}`);
|
|
34940
34946
|
}
|
|
34941
34947
|
cacheTrace?.recordStage("session:after", {
|
|
34942
34948
|
messages: messagesSnapshot,
|
|
@@ -34955,17 +34961,17 @@ async function runEmbeddedAttempt(params) {
|
|
|
34955
34961
|
workspaceDir: params.workspaceDir,
|
|
34956
34962
|
messageProvider: params.messageProvider ?? void 0
|
|
34957
34963
|
}).catch((err) => {
|
|
34958
|
-
log$
|
|
34964
|
+
log$7.warn(`agent_end hook failed: ${err}`);
|
|
34959
34965
|
});
|
|
34960
34966
|
} finally {
|
|
34961
34967
|
clearTimeout(abortTimer);
|
|
34962
34968
|
clearSymipulseTimer();
|
|
34963
34969
|
if (abortWarnTimer) clearTimeout(abortWarnTimer);
|
|
34964
|
-
if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$
|
|
34970
|
+
if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$7.debug(`run cleanup: runId=${params.runId} sessionId=${params.sessionId} aborted=${aborted} timedOut=${timedOut}`);
|
|
34965
34971
|
try {
|
|
34966
34972
|
unsubscribe();
|
|
34967
34973
|
} catch (err) {
|
|
34968
|
-
log$
|
|
34974
|
+
log$7.error(`CRITICAL: unsubscribe failed, possible resource leak: runId=${params.runId} ${String(err)}`);
|
|
34969
34975
|
}
|
|
34970
34976
|
clearActiveEmbeddedRun(params.sessionId, queueHandle, params.sessionKey);
|
|
34971
34977
|
params.abortSignal?.removeEventListener?.("abort", onAbort);
|
|
@@ -34990,7 +34996,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
34990
34996
|
workspaceDir: params.workspaceDir,
|
|
34991
34997
|
messageProvider: params.messageProvider ?? void 0
|
|
34992
34998
|
}).catch((err) => {
|
|
34993
|
-
log$
|
|
34999
|
+
log$7.warn(`llm_output hook failed: ${String(err)}`);
|
|
34994
35000
|
});
|
|
34995
35001
|
return {
|
|
34996
35002
|
aborted,
|
|
@@ -35251,7 +35257,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35251
35257
|
const redactedSessionId = redactRunIdentifier(params.sessionId);
|
|
35252
35258
|
const redactedSessionKey = redactRunIdentifier(params.sessionKey);
|
|
35253
35259
|
const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
|
|
35254
|
-
if (workspaceResolution.usedFallback) log$
|
|
35260
|
+
if (workspaceResolution.usedFallback) log$7.warn(`[workspace-fallback] caller=runEmbeddedPiAgent reason=${workspaceResolution.fallbackReason} run=${params.runId} session=${redactedSessionId} sessionKey=${redactedSessionKey} agent=${workspaceResolution.agentId} workspace=${redactedWorkspace}`);
|
|
35255
35261
|
const prevCwd = process.cwd();
|
|
35256
35262
|
let provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
35257
35263
|
let modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
|
@@ -35270,7 +35276,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35270
35276
|
if (hookRunner?.hasHooks("before_model_resolve")) try {
|
|
35271
35277
|
modelResolveOverride = await hookRunner.runBeforeModelResolve({ prompt: params.prompt }, hookCtx);
|
|
35272
35278
|
} catch (hookErr) {
|
|
35273
|
-
log$
|
|
35279
|
+
log$7.warn(`before_model_resolve hook failed: ${String(hookErr)}`);
|
|
35274
35280
|
}
|
|
35275
35281
|
if (hookRunner?.hasHooks("before_agent_start")) try {
|
|
35276
35282
|
const legacyResult = await hookRunner.runBeforeAgentStart({ prompt: params.prompt }, hookCtx);
|
|
@@ -35279,15 +35285,15 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35279
35285
|
modelOverride: modelResolveOverride?.modelOverride ?? legacyResult?.modelOverride
|
|
35280
35286
|
};
|
|
35281
35287
|
} catch (hookErr) {
|
|
35282
|
-
log$
|
|
35288
|
+
log$7.warn(`before_agent_start hook (legacy model resolve path) failed: ${String(hookErr)}`);
|
|
35283
35289
|
}
|
|
35284
35290
|
if (modelResolveOverride?.providerOverride) {
|
|
35285
35291
|
provider = modelResolveOverride.providerOverride;
|
|
35286
|
-
log$
|
|
35292
|
+
log$7.info(`[hooks] provider overridden to ${provider}`);
|
|
35287
35293
|
}
|
|
35288
35294
|
if (modelResolveOverride?.modelOverride) {
|
|
35289
35295
|
modelId = modelResolveOverride.modelOverride;
|
|
35290
|
-
log$
|
|
35296
|
+
log$7.info(`[hooks] model overridden to ${modelId}`);
|
|
35291
35297
|
}
|
|
35292
35298
|
const { model, error, authStorage, modelRegistry } = resolveModel(provider, modelId, agentDir, params.config);
|
|
35293
35299
|
if (!model) throw new FailoverError(error ?? `Unknown model: ${provider}/${modelId}`, {
|
|
@@ -35307,9 +35313,9 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35307
35313
|
warnBelowTokens: CONTEXT_WINDOW_WARN_BELOW_TOKENS,
|
|
35308
35314
|
hardMinTokens: CONTEXT_WINDOW_HARD_MIN_TOKENS
|
|
35309
35315
|
});
|
|
35310
|
-
if (ctxGuard.shouldWarn) log$
|
|
35316
|
+
if (ctxGuard.shouldWarn) log$7.warn(`low context window: ${provider}/${modelId} ctx=${ctxGuard.tokens} (warn<${CONTEXT_WINDOW_WARN_BELOW_TOKENS}) source=${ctxGuard.source}`);
|
|
35311
35317
|
if (ctxGuard.shouldBlock) {
|
|
35312
|
-
log$
|
|
35318
|
+
log$7.error(`blocked model (context window too small): ${provider}/${modelId} ctx=${ctxGuard.tokens} (min=${CONTEXT_WINDOW_HARD_MIN_TOKENS}) source=${ctxGuard.source}`);
|
|
35313
35319
|
throw new FailoverError(`Model context window too small (${ctxGuard.tokens} tokens). Minimum is ${CONTEXT_WINDOW_HARD_MIN_TOKENS}.`, {
|
|
35314
35320
|
reason: "unknown",
|
|
35315
35321
|
provider,
|
|
@@ -35439,7 +35445,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35439
35445
|
while (true) {
|
|
35440
35446
|
if (runLoopIterations >= MAX_RUN_LOOP_ITERATIONS) {
|
|
35441
35447
|
const message = `Exceeded retry limit after ${runLoopIterations} attempts (max=${MAX_RUN_LOOP_ITERATIONS}).`;
|
|
35442
|
-
log$
|
|
35448
|
+
log$7.error(`[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} attempts=${runLoopIterations} maxAttempts=${MAX_RUN_LOOP_ITERATIONS}`);
|
|
35443
35449
|
return {
|
|
35444
35450
|
payloads: [{
|
|
35445
35451
|
text: "Request failed after repeated internal retries. Please try again, or use /new to start a fresh session.",
|
|
@@ -35560,18 +35566,18 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35560
35566
|
const overflowDiagId = createCompactionDiagId$1();
|
|
35561
35567
|
const errorText = contextOverflowError.text;
|
|
35562
35568
|
const msgCount = attempt.messagesSnapshot?.length ?? 0;
|
|
35563
|
-
log$
|
|
35569
|
+
log$7.warn(`[context-overflow-diag] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} source=${contextOverflowError.source} messages=${msgCount} sessionFile=${params.sessionFile} diagId=${overflowDiagId} compactionAttempts=${overflowCompactionAttempts} error=${errorText.slice(0, 200)}`);
|
|
35564
35570
|
const isCompactionFailure = isCompactionFailureError(errorText);
|
|
35565
35571
|
const hadAttemptLevelCompaction = attemptCompactionCount > 0;
|
|
35566
35572
|
if (!isCompactionFailure && hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
|
|
35567
35573
|
overflowCompactionAttempts++;
|
|
35568
|
-
log$
|
|
35574
|
+
log$7.warn(`context overflow persisted after in-attempt compaction (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); retrying prompt without additional compaction for ${provider}/${modelId}`);
|
|
35569
35575
|
continue;
|
|
35570
35576
|
}
|
|
35571
35577
|
if (!isCompactionFailure && !hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
|
|
35572
|
-
if (log$
|
|
35578
|
+
if (log$7.isEnabled("debug")) log$7.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=compact isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=unknown attempt=${overflowCompactionAttempts + 1} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
35573
35579
|
overflowCompactionAttempts++;
|
|
35574
|
-
log$
|
|
35580
|
+
log$7.warn(`context overflow detected (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); attempting auto-compaction for ${provider}/${modelId}`);
|
|
35575
35581
|
const compactResult = await compactEmbeddedPiSessionDirect({
|
|
35576
35582
|
sessionId: params.sessionId,
|
|
35577
35583
|
sessionKey: params.sessionKey,
|
|
@@ -35600,10 +35606,10 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35600
35606
|
});
|
|
35601
35607
|
if (compactResult.compacted) {
|
|
35602
35608
|
autoCompactionCount += 1;
|
|
35603
|
-
log$
|
|
35609
|
+
log$7.info(`auto-compaction succeeded for ${provider}/${modelId}; retrying prompt`);
|
|
35604
35610
|
continue;
|
|
35605
35611
|
}
|
|
35606
|
-
log$
|
|
35612
|
+
log$7.warn(`auto-compaction failed for ${provider}/${modelId}: ${compactResult.reason ?? "nothing to compact"}`);
|
|
35607
35613
|
}
|
|
35608
35614
|
if (!toolResultTruncationAttempted) {
|
|
35609
35615
|
const contextWindowTokens = ctxInfo.tokens;
|
|
@@ -35612,9 +35618,9 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35612
35618
|
contextWindowTokens
|
|
35613
35619
|
}) : false;
|
|
35614
35620
|
if (hasOversized) {
|
|
35615
|
-
if (log$
|
|
35621
|
+
if (log$7.isEnabled("debug")) log$7.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=truncate_tool_results isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=${hasOversized} attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
35616
35622
|
toolResultTruncationAttempted = true;
|
|
35617
|
-
log$
|
|
35623
|
+
log$7.warn(`[context-overflow-recovery] Attempting tool result truncation for ${provider}/${modelId} (contextWindow=${contextWindowTokens} tokens)`);
|
|
35618
35624
|
const truncResult = await truncateOversizedToolResultsInSession({
|
|
35619
35625
|
sessionFile: params.sessionFile,
|
|
35620
35626
|
contextWindowTokens,
|
|
@@ -35622,13 +35628,13 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35622
35628
|
sessionKey: params.sessionKey
|
|
35623
35629
|
});
|
|
35624
35630
|
if (truncResult.truncated) {
|
|
35625
|
-
log$
|
|
35631
|
+
log$7.info(`[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`);
|
|
35626
35632
|
continue;
|
|
35627
35633
|
}
|
|
35628
|
-
log$
|
|
35629
|
-
} else if (log$
|
|
35634
|
+
log$7.warn(`[context-overflow-recovery] Tool result truncation did not help: ${truncResult.reason ?? "unknown"}`);
|
|
35635
|
+
} else if (log$7.isEnabled("debug")) log$7.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=give_up isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=${hasOversized} attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
35630
35636
|
}
|
|
35631
|
-
if ((isCompactionFailure || overflowCompactionAttempts >= MAX_OVERFLOW_COMPACTION_ATTEMPTS || toolResultTruncationAttempted) && log$
|
|
35637
|
+
if ((isCompactionFailure || overflowCompactionAttempts >= MAX_OVERFLOW_COMPACTION_ATTEMPTS || toolResultTruncationAttempted) && log$7.isEnabled("debug")) log$7.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=give_up isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=unknown attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
35632
35638
|
const kind = isCompactionFailure ? "compaction_failure" : "context_overflow";
|
|
35633
35639
|
return {
|
|
35634
35640
|
payloads: [{
|
|
@@ -35709,7 +35715,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35709
35715
|
attempted: attemptedThinking
|
|
35710
35716
|
});
|
|
35711
35717
|
if (fallbackThinking) {
|
|
35712
|
-
log$
|
|
35718
|
+
log$7.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
|
|
35713
35719
|
thinkLevel = fallbackThinking;
|
|
35714
35720
|
continue;
|
|
35715
35721
|
}
|
|
@@ -35727,7 +35733,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35727
35733
|
attempted: attemptedThinking
|
|
35728
35734
|
});
|
|
35729
35735
|
if (fallbackThinking && !aborted) {
|
|
35730
|
-
log$
|
|
35736
|
+
log$7.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
|
|
35731
35737
|
thinkLevel = fallbackThinking;
|
|
35732
35738
|
continue;
|
|
35733
35739
|
}
|
|
@@ -35744,7 +35750,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35744
35750
|
imageDimensionError.contentIndex !== void 0 ? `content=${imageDimensionError.contentIndex}` : null,
|
|
35745
35751
|
imageDimensionError.maxDimensionPx !== void 0 ? `limit=${imageDimensionError.maxDimensionPx}px` : null
|
|
35746
35752
|
].filter(Boolean).join(" ");
|
|
35747
|
-
log$
|
|
35753
|
+
log$7.warn(`Profile ${lastProfileId} rejected image payload${details ? ` (${details})` : ""}.`);
|
|
35748
35754
|
}
|
|
35749
35755
|
const isLocalOllamaTimeout = timedOut && model.api === "ollama";
|
|
35750
35756
|
if (!aborted && failoverFailure || timedOut && !timedOutDuringCompaction && !isLocalOllamaTimeout) {
|
|
@@ -35756,8 +35762,8 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35756
35762
|
cfg: params.config,
|
|
35757
35763
|
agentDir: params.agentDir
|
|
35758
35764
|
});
|
|
35759
|
-
if (timedOut && !isProbeSession) log$
|
|
35760
|
-
if (cloudCodeAssistFormatError) log$
|
|
35765
|
+
if (timedOut && !isProbeSession) log$7.warn(`Profile ${lastProfileId} timed out (possible rate limit). Trying next account...`);
|
|
35766
|
+
if (cloudCodeAssistFormatError) log$7.warn(`Profile ${lastProfileId} hit Cloud Code Assist format error. Tool calls will be sanitized on retry.`);
|
|
35761
35767
|
}
|
|
35762
35768
|
if (await advanceAuthProfile()) continue;
|
|
35763
35769
|
if (fallbackConfigured) {
|
|
@@ -35823,7 +35829,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35823
35829
|
const hasCodeBlocks = attempt.assistantTexts.some((text) => /```[\s\S]*?```/.test(text));
|
|
35824
35830
|
if (hasCodeToolUsage || hasCodeBlocks) {
|
|
35825
35831
|
verificationPassCompleted = true;
|
|
35826
|
-
log$
|
|
35832
|
+
log$7.debug(`[verification] starting verification pass: runId=${params.runId} sessionId=${params.sessionId} trigger=${hasCodeToolUsage ? "tool_usage" : "code_blocks"}`);
|
|
35827
35833
|
const verificationPrompt = "Review your response against the original user request. Check: (1) Did you address every requirement? (2) Did you include tests if requested? (3) Did you run and verify the code works? If you missed anything, fix it now. If everything looks correct, briefly confirm.";
|
|
35828
35834
|
try {
|
|
35829
35835
|
const verifyAttempt = await runEmbeddedAttempt({
|
|
@@ -35909,10 +35915,10 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35909
35915
|
payloads.length = 0;
|
|
35910
35916
|
payloads.push(...verifyPayloads);
|
|
35911
35917
|
}
|
|
35912
|
-
log$
|
|
35913
|
-
} else log$
|
|
35918
|
+
log$7.debug(`[verification] verification produced corrections: runId=${params.runId} tools=${verifyAttempt.toolMetas.length} texts=${verifyAttempt.assistantTexts.length}`);
|
|
35919
|
+
} else log$7.debug(`[verification] verification confirmed original response: runId=${params.runId}`);
|
|
35914
35920
|
} catch (verifyErr) {
|
|
35915
|
-
log$
|
|
35921
|
+
log$7.warn(`[verification] verification pass failed, keeping original response: runId=${params.runId} error=${String(verifyErr)}`);
|
|
35916
35922
|
}
|
|
35917
35923
|
}
|
|
35918
35924
|
}
|
|
@@ -35933,7 +35939,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
35933
35939
|
messagingToolSentTargets: attempt.messagingToolSentTargets,
|
|
35934
35940
|
successfulCronAdds: attempt.successfulCronAdds
|
|
35935
35941
|
};
|
|
35936
|
-
log$
|
|
35942
|
+
log$7.debug(`embedded run done: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - started} aborted=${aborted}`);
|
|
35937
35943
|
if (lastProfileId) {
|
|
35938
35944
|
await markAuthProfileGood({
|
|
35939
35945
|
store: authStore,
|
|
@@ -36185,7 +36191,7 @@ async function runAgentTurn(params) {
|
|
|
36185
36191
|
function createDefaultDeps() {
|
|
36186
36192
|
return {
|
|
36187
36193
|
sendMessageWhatsApp: async (...args) => {
|
|
36188
|
-
const { sendMessageWhatsApp } = await import("./web-
|
|
36194
|
+
const { sendMessageWhatsApp } = await import("./web-BgKYnau3.js");
|
|
36189
36195
|
return await sendMessageWhatsApp(...args);
|
|
36190
36196
|
},
|
|
36191
36197
|
sendMessageTelegram: async (...args) => {
|
|
@@ -53623,7 +53629,7 @@ function loadWebLoginQr() {
|
|
|
53623
53629
|
return webLoginQrPromise;
|
|
53624
53630
|
}
|
|
53625
53631
|
function loadWebChannel() {
|
|
53626
|
-
webChannelPromise ??= import("./web-
|
|
53632
|
+
webChannelPromise ??= import("./web-BgKYnau3.js");
|
|
53627
53633
|
return webChannelPromise;
|
|
53628
53634
|
}
|
|
53629
53635
|
function loadWhatsAppActions() {
|
|
@@ -69834,7 +69840,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
69834
69840
|
const provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
69835
69841
|
const modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
|
69836
69842
|
const fail = (reason) => {
|
|
69837
|
-
log$
|
|
69843
|
+
log$7.warn(`[compaction-diag] end runId=${runId} sessionKey=${params.sessionKey ?? params.sessionId} diagId=${diagId} trigger=${trigger} provider=${provider}/${modelId} attempt=${attempt} maxAttempts=${maxAttempts} outcome=failed reason=${classifyCompactionReason(reason)} durationMs=${Date.now() - startedAt}`);
|
|
69838
69844
|
return {
|
|
69839
69845
|
ok: false,
|
|
69840
69846
|
compacted: false,
|
|
@@ -69902,7 +69908,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
69902
69908
|
sessionId: params.sessionId,
|
|
69903
69909
|
warn: makeBootstrapWarn({
|
|
69904
69910
|
sessionLabel,
|
|
69905
|
-
warn: (message) => log$
|
|
69911
|
+
warn: (message) => log$7.warn(message)
|
|
69906
69912
|
})
|
|
69907
69913
|
});
|
|
69908
69914
|
const runAbortController = new AbortController();
|
|
@@ -70042,7 +70048,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
70042
70048
|
try {
|
|
70043
70049
|
await repairSessionFileIfNeeded({
|
|
70044
70050
|
sessionFile: params.sessionFile,
|
|
70045
|
-
warn: (message) => log$
|
|
70051
|
+
warn: (message) => log$7.warn(message)
|
|
70046
70052
|
});
|
|
70047
70053
|
await prewarmSessionFile(params.sessionFile);
|
|
70048
70054
|
const transcriptPolicy = resolveTranscriptPolicy({
|
|
@@ -70127,13 +70133,13 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
70127
70133
|
messages: preCompactionMessages,
|
|
70128
70134
|
sessionFile: params.sessionFile
|
|
70129
70135
|
}, hookCtx).catch((hookErr) => {
|
|
70130
|
-
log$
|
|
70136
|
+
log$7.warn(`before_compaction hook failed: ${String(hookErr)}`);
|
|
70131
70137
|
});
|
|
70132
|
-
const diagEnabled = log$
|
|
70138
|
+
const diagEnabled = log$7.isEnabled("debug");
|
|
70133
70139
|
const preMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
|
|
70134
70140
|
if (diagEnabled && preMetrics) {
|
|
70135
|
-
log$
|
|
70136
|
-
log$
|
|
70141
|
+
log$7.debug(`[compaction-diag] start runId=${runId} sessionKey=${params.sessionKey ?? params.sessionId} diagId=${diagId} trigger=${trigger} provider=${provider}/${modelId} attempt=${attempt} maxAttempts=${maxAttempts} pre.messages=${preMetrics.messages} pre.historyTextChars=${preMetrics.historyTextChars} pre.toolResultChars=${preMetrics.toolResultChars} pre.estTokens=${preMetrics.estTokens ?? "unknown"}`);
|
|
70142
|
+
log$7.debug(`[compaction-diag] contributors diagId=${diagId} top=${JSON.stringify(preMetrics.contributors)}`);
|
|
70137
70143
|
}
|
|
70138
70144
|
const compactStartedAt = Date.now();
|
|
70139
70145
|
const result = await compactWithSafetyTimeout(() => session.compact(params.customInstructions));
|
|
@@ -70151,10 +70157,10 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
70151
70157
|
compactedCount: limited.length - session.messages.length,
|
|
70152
70158
|
sessionFile: params.sessionFile
|
|
70153
70159
|
}, hookCtx).catch((hookErr) => {
|
|
70154
|
-
log$
|
|
70160
|
+
log$7.warn(`after_compaction hook failed: ${hookErr}`);
|
|
70155
70161
|
});
|
|
70156
70162
|
const postMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
|
|
70157
|
-
if (diagEnabled && preMetrics && postMetrics) log$
|
|
70163
|
+
if (diagEnabled && preMetrics && postMetrics) log$7.debug(`[compaction-diag] end runId=${runId} sessionKey=${params.sessionKey ?? params.sessionId} diagId=${diagId} trigger=${trigger} provider=${provider}/${modelId} attempt=${attempt} maxAttempts=${maxAttempts} outcome=compacted reason=none durationMs=${Date.now() - compactStartedAt} retrying=false post.messages=${postMetrics.messages} post.historyTextChars=${postMetrics.historyTextChars} post.toolResultChars=${postMetrics.toolResultChars} post.estTokens=${postMetrics.estTokens ?? "unknown"} delta.messages=${postMetrics.messages - preMetrics.messages} delta.historyTextChars=${postMetrics.historyTextChars - preMetrics.historyTextChars} delta.toolResultChars=${postMetrics.toolResultChars - preMetrics.toolResultChars} delta.estTokens=${typeof preMetrics.estTokens === "number" && typeof postMetrics.estTokens === "number" ? postMetrics.estTokens - preMetrics.estTokens : "unknown"}`);
|
|
70158
70164
|
return {
|
|
70159
70165
|
ok: true,
|
|
70160
70166
|
compacted: true,
|