@symerian/symi 2.6.1 → 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-DQIz-_on.js → agents-Dm0V9Z2G.js} +4 -4
- package/dist/{agents.config-CIJRaVWl.js → agents.config-DP0CLvIA.js} +1 -1
- package/dist/{agents.config-D8WPDf-m.js → agents.config-WdkJjM2-.js} +1 -1
- package/dist/{audio-preflight-BVaaZWkg.js → audio-preflight-DHTaS5U1.js} +4 -4
- package/dist/{auth-choice-DTDyJL1r.js → auth-choice-B9OnYICm.js} +1 -1
- package/dist/{auth-choice-BqFbNDuP.js → auth-choice-CXHi61T5.js} +1 -1
- package/dist/{banner-DYDCxnDL.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-CvHSm_Kx.js → channel-options-CsGrHsjP.js} +1 -1
- package/dist/{channel-options-vBCJhJB7.js → channel-options-Jl8AKRLD.js} +1 -1
- package/dist/{channel-web-CM2LyWZW.js → channel-web-qFGaLytG.js} +1 -1
- package/dist/{channels-cli-DzOjNNFn.js → channels-cli-BFyOmW-R.js} +4 -4
- package/dist/{channels-cli-D5H3Wcho.js → channels-cli-DQTl2Pk5.js} +4 -4
- package/dist/{chrome-DkaXoP36.js → chrome-DYZwl5Gv.js} +7 -7
- package/dist/{cli-8hqssnRJ.js → cli-B4biLt2z.js} +1 -1
- package/dist/{cli-DNZwCDRe.js → cli-DQw_LEew.js} +1 -1
- package/dist/{command-registry-CHtN2HeK.js → command-registry-D1OePePk.js} +9 -9
- package/dist/{completion-cli-Cov6N3BO.js → completion-cli-CI-0hC_u.js} +2 -2
- package/dist/{completion-cli-C8y_J5KC.js → completion-cli-DW8a1WYc.js} +1 -1
- package/dist/{config-cli-BwO0xAbV.js → config-cli-CpiluXlO.js} +1 -1
- package/dist/{config-cli-B2REEd2l.js → config-cli-DHXt5cQZ.js} +1 -1
- package/dist/{configure-C6yNe33U.js → configure-CmVnpTNi.js} +3 -3
- package/dist/{configure-BWSYSi2-.js → configure-Ha9cu8Bu.js} +3 -3
- package/dist/{deliver-C46-vyqg.js → deliver-dODxSv3b.js} +1 -1
- package/dist/{doctor-completion-BKKzstt6.js → doctor-completion-CRNCOXcf.js} +1 -1
- package/dist/{doctor-completion-D7CDLFLg.js → doctor-completion-ve-JPlmN.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{gateway-cli-Datohp3m.js → gateway-cli-BPsbjmUI.js} +9 -9
- package/dist/{gateway-cli-BhFM4Bkm.js → gateway-cli-Cc7N8N_E.js} +9 -9
- package/dist/{glass-ui-ws-BzqfD_wX.js → glass-ui-ws-1O1O2xC6.js} +7 -7
- package/dist/{glass-ui-ws-D9yvYULL.js → glass-ui-ws-CKwLnOwl.js} +7 -7
- package/dist/{health-BjwDRAdd.js → health-DTRWmRB8.js} +1 -1
- package/dist/{health-C5XJPwpt.js → health-tYyUNVp5.js} +1 -1
- package/dist/{hooks-cli-U12oVyLH.js → hooks-cli-Cp81vqRc.js} +2 -2
- package/dist/{hooks-cli-CafMq9Vr.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-Bo4iHJy-.js → models-CuhnCX2U.js} +2 -2
- package/dist/{models-cli-B5vh-XK8.js → models-cli-BzwGQUdn.js} +3 -3
- package/dist/{models-cli-6aNi3eN9.js → models-cli-CFr_ZP5y.js} +2 -2
- package/dist/{onboard-f-GJ26Ix.js → onboard-B2g2Q6dd.js} +2 -2
- package/dist/{onboard-Bm-pmstf.js → onboard-CcB6pmEy.js} +2 -2
- package/dist/{onboard-channels-BRd1cXye.js → onboard-channels-CWd17q6h.js} +1 -1
- package/dist/{onboard-channels-CUl5U8kV.js → onboard-channels-DmRBC7VN.js} +1 -1
- package/dist/{onboarding-CvBDWlBJ.js → onboarding-DMqlt_p6.js} +3 -3
- package/dist/{onboarding-DIVKvosg.js → onboarding-DwvQIqR8.js} +3 -3
- package/dist/{onboarding.finalize-WSac-JKd.js → onboarding.finalize-BUSzTwhM.js} +5 -5
- package/dist/{onboarding.finalize-DJX6mSLa.js → onboarding.finalize-lJmZSE4C.js} +6 -6
- package/dist/{pi-embedded-BmbbC1Sb.js → pi-embedded-CT2JDfQr.js} +208 -132
- package/dist/{pi-embedded-helpers-CfqDGQ9J.js → pi-embedded-helpers-pubKo8HQ.js} +4 -4
- package/dist/{plugin-registry-5yf-hu_W.js → plugin-registry-DZdPnpP_.js} +1 -1
- package/dist/{plugin-registry-2zUJMasm.js → plugin-registry-vW2V1yCi.js} +1 -1
- package/dist/plugin-sdk/agents/pi-tools.validate-wrapper.d.ts +6 -6
- package/dist/plugin-sdk/{channel-web-DPyyTvFo.js → channel-web-38aqDKeT.js} +1 -1
- package/dist/plugin-sdk/index.js +2 -2
- package/dist/plugin-sdk/{reply-QAcAd9ev.js → reply-BjJZjZRr.js} +204 -128
- package/dist/plugin-sdk/{web-DaTTL9M0.js → web-BgKYnau3.js} +2 -2
- package/dist/{plugins-cli-D4eRESV2.js → plugins-cli-BTq9c2hZ.js} +2 -2
- package/dist/{plugins-cli-DksVl33N.js → plugins-cli-DkAx9r3h.js} +2 -2
- package/dist/{program-BjORH7Cc.js → program-DZx9PtyT.js} +7 -7
- package/dist/{program-context-DaNGrTOm.js → program-context-DyfuToE1.js} +17 -17
- package/dist/{prompt-select-styled-QaS2zul_.js → prompt-select-styled-CifWTOoY.js} +4 -4
- package/dist/{prompt-select-styled-YOj4xigd.js → prompt-select-styled-DNbD3v3G.js} +4 -4
- package/dist/{provider-auth-helpers-DCEbm2hz.js → provider-auth-helpers-BPIIDTwA.js} +1 -1
- package/dist/{provider-auth-helpers-BAGT_RXV.js → provider-auth-helpers-BzySaUp5.js} +1 -1
- package/dist/{push-apns-Bek3ANJa.js → push-apns-DbpeXPGR.js} +1 -1
- package/dist/{push-apns-BECodU1i.js → push-apns-IdD-dKZm.js} +1 -1
- package/dist/{pw-ai-m0mj2KWK.js → pw-ai-B5asscAD.js} +1 -1
- package/dist/{register.agent-DJHQo-Iq.js → register.agent-CfFcSvM1.js} +6 -6
- package/dist/{register.agent-B34lxx7F.js → register.agent-TFUcxDGN.js} +5 -5
- package/dist/{register.configure-DC_-t5kj.js → register.configure-BwRTNCws.js} +6 -6
- package/dist/{register.configure-BdhhIzb0.js → register.configure-D3BJejOC.js} +6 -6
- package/dist/{register.maintenance-cs-A4kHF.js → register.maintenance-B5350ddh.js} +7 -7
- package/dist/{register.maintenance-CITur3O_.js → register.maintenance-DkdVYwbj.js} +8 -8
- package/dist/{register.message-PIaHm2pZ.js → register.message-DTopCPGC.js} +2 -2
- package/dist/{register.message--RhtnEYn.js → register.message-FbCBAfJO.js} +2 -2
- package/dist/{register.onboard-DucZgrF7.js → register.onboard-DITZn8dx.js} +4 -4
- package/dist/{register.onboard-CTJQoDcK.js → register.onboard-GSv5xyA3.js} +4 -4
- package/dist/{register.setup-2ZiUN7ui.js → register.setup-BI6lILMU.js} +4 -4
- package/dist/{register.setup-DD4Rgkt9.js → register.setup-BuOeoBk0.js} +4 -4
- package/dist/{register.status-health-sessions-BqD7L8XL.js → register.status-health-sessions-C1RhWKxN.js} +3 -3
- package/dist/{register.status-health-sessions-sLgA92t7.js → register.status-health-sessions-EK4_odLb.js} +3 -3
- package/dist/{register.subclis-B2dGWFur.js → register.subclis-Bn_Mr_Wa.js} +9 -9
- package/dist/{reply-DYnTEYoa.js → reply-BGSd_cMI.js} +199 -123
- package/dist/{run-main-DWmu2b6D.js → run-main-Bu9IAm9E.js} +14 -14
- package/dist/{runner-CU9l0uJh.js → runner-WAG0M5s9.js} +1 -1
- package/dist/{server-methods-vDGoM3xL.js → server-methods-dxn6-zQz.js} +7 -7
- package/dist/{server-methods-C8EWZt2g.js → server-methods-tA9lkIQT.js} +7 -7
- package/dist/{server-node-events-CKi12bol.js → server-node-events-6jcJSpXA.js} +2 -2
- package/dist/{server-node-events-DFwGbkcO.js → server-node-events-CzcTGD9T.js} +2 -2
- package/dist/{status-B1_iHrOg.js → status-8176C-aV.js} +2 -2
- package/dist/{status-DiX0DAtH.js → status-CcQSl2sN.js} +1 -1
- package/dist/{status--iNVOTMO.js → status-DGKT6HnE.js} +2 -2
- package/dist/{status-BQcdARV4.js → status-DmPOSk-A.js} +1 -1
- package/dist/{subagent-registry-CXrOOgPW.js → subagent-registry-DqFKNTCX.js} +202 -126
- package/dist/{unified-runner-CulJZMxc.js → unified-runner-BbanUEmo.js} +227 -151
- package/dist/{update-cli-D1pLX3eo.js → update-cli-FMcGr7MA.js} +8 -8
- package/dist/{update-cli-560gprSp.js → update-cli-YCXB_6jz.js} +7 -7
- package/dist/{update-runner-CLKHrONW.js → update-runner-C8OkrKjW.js} +1 -1
- package/dist/{update-runner-BQxFFCGc.js → update-runner-DMP1rCS1.js} +1 -1
- package/dist/{web-hHX9a9YO.js → web-BsS1ia0M.js} +6 -6
- package/dist/{web-Bqrgp43v.js → web-CQ2F1f3a.js} +1 -1
- package/dist/{web-Dr5cOn-1.js → web-DoRGusTq.js} +2 -2
- package/dist/{web-D4qJ9XKP.js → web-LUMjboLF.js} +1 -1
- package/package.json +1 -1
|
@@ -3448,7 +3448,7 @@ function resolveMemoryBackendConfig(params) {
|
|
|
3448
3448
|
|
|
3449
3449
|
//#endregion
|
|
3450
3450
|
//#region src/memory/search-manager.ts
|
|
3451
|
-
const log$
|
|
3451
|
+
const log$10 = createSubsystemLogger("memory");
|
|
3452
3452
|
const QMD_MANAGER_CACHE = /* @__PURE__ */ new Map();
|
|
3453
3453
|
async function getMemorySearchManager(params) {
|
|
3454
3454
|
const resolved = resolveMemoryBackendConfig(params);
|
|
@@ -3481,7 +3481,7 @@ async function getMemorySearchManager(params) {
|
|
|
3481
3481
|
}
|
|
3482
3482
|
} catch (err) {
|
|
3483
3483
|
const message = err instanceof Error ? err.message : String(err);
|
|
3484
|
-
log$
|
|
3484
|
+
log$10.warn(`qmd memory unavailable; falling back to builtin: ${message}`);
|
|
3485
3485
|
}
|
|
3486
3486
|
}
|
|
3487
3487
|
try {
|
|
@@ -3508,7 +3508,7 @@ var FallbackMemoryManager = class {
|
|
|
3508
3508
|
} catch (err) {
|
|
3509
3509
|
this.primaryFailed = true;
|
|
3510
3510
|
this.lastError = err instanceof Error ? err.message : String(err);
|
|
3511
|
-
log$
|
|
3511
|
+
log$10.warn(`qmd memory failed; switching to builtin index: ${this.lastError}`);
|
|
3512
3512
|
await this.deps.primary.close?.().catch(() => {});
|
|
3513
3513
|
this.evictCacheEntry();
|
|
3514
3514
|
}
|
|
@@ -3588,12 +3588,12 @@ var FallbackMemoryManager = class {
|
|
|
3588
3588
|
try {
|
|
3589
3589
|
fallback = await this.deps.fallbackFactory();
|
|
3590
3590
|
if (!fallback) {
|
|
3591
|
-
log$
|
|
3591
|
+
log$10.warn("memory fallback requested but builtin index is unavailable");
|
|
3592
3592
|
return null;
|
|
3593
3593
|
}
|
|
3594
3594
|
} catch (err) {
|
|
3595
3595
|
const message = err instanceof Error ? err.message : String(err);
|
|
3596
|
-
log$
|
|
3596
|
+
log$10.warn(`memory fallback unavailable: ${message}`);
|
|
3597
3597
|
return null;
|
|
3598
3598
|
}
|
|
3599
3599
|
this.fallback = fallback;
|
|
@@ -17253,7 +17253,7 @@ function createRunRegistry(options) {
|
|
|
17253
17253
|
|
|
17254
17254
|
//#endregion
|
|
17255
17255
|
//#region src/process/supervisor/supervisor.ts
|
|
17256
|
-
const log$
|
|
17256
|
+
const log$9 = createSubsystemLogger("process/supervisor");
|
|
17257
17257
|
function clampTimeout(value) {
|
|
17258
17258
|
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) return;
|
|
17259
17259
|
return Math.max(1, Math.floor(value));
|
|
@@ -17439,7 +17439,7 @@ function createProcessSupervisor() {
|
|
|
17439
17439
|
exitCode: null,
|
|
17440
17440
|
exitSignal: null
|
|
17441
17441
|
});
|
|
17442
|
-
log$
|
|
17442
|
+
log$9.warn(`spawn failed: runId=${runId} reason=${String(err)}`);
|
|
17443
17443
|
throw err;
|
|
17444
17444
|
}
|
|
17445
17445
|
};
|
|
@@ -34770,7 +34770,7 @@ function createNodesTool(options) {
|
|
|
34770
34770
|
|
|
34771
34771
|
//#endregion
|
|
34772
34772
|
//#region src/gateway/session-utils.ts
|
|
34773
|
-
const log$
|
|
34773
|
+
const log$8 = createSubsystemLogger("session-utils");
|
|
34774
34774
|
const AVATAR_MAX_BYTES = 2 * 1024 * 1024;
|
|
34775
34775
|
function isStorePathTemplate(store) {
|
|
34776
34776
|
return typeof store === "string" && store.includes("{agentId}");
|
|
@@ -35633,7 +35633,7 @@ async function resolveAnnounceTarget(params) {
|
|
|
35633
35633
|
|
|
35634
35634
|
//#endregion
|
|
35635
35635
|
//#region src/agents/tools/sessions-send-tool.a2a.ts
|
|
35636
|
-
const log$
|
|
35636
|
+
const log$7 = createSubsystemLogger("agents/sessions-send");
|
|
35637
35637
|
async function runSessionsSendA2AFlow(params) {
|
|
35638
35638
|
const runContextId = params.waitRunId ?? "unknown";
|
|
35639
35639
|
try {
|
|
@@ -35724,7 +35724,7 @@ async function runSessionsSendA2AFlow(params) {
|
|
|
35724
35724
|
timeoutMs: 1e4
|
|
35725
35725
|
});
|
|
35726
35726
|
} catch (err) {
|
|
35727
|
-
log$
|
|
35727
|
+
log$7.warn("sessions_send announce delivery failed", {
|
|
35728
35728
|
runId: runContextId,
|
|
35729
35729
|
channel: announceTarget.channel,
|
|
35730
35730
|
to: announceTarget.to,
|
|
@@ -35732,7 +35732,7 @@ async function runSessionsSendA2AFlow(params) {
|
|
|
35732
35732
|
});
|
|
35733
35733
|
}
|
|
35734
35734
|
} catch (err) {
|
|
35735
|
-
log$
|
|
35735
|
+
log$7.warn("sessions_send announce flow failed", {
|
|
35736
35736
|
runId: runContextId,
|
|
35737
35737
|
error: formatErrorMessage(err)
|
|
35738
35738
|
});
|
|
@@ -38762,7 +38762,7 @@ function resolveRunWorkspaceDir(params) {
|
|
|
38762
38762
|
|
|
38763
38763
|
//#endregion
|
|
38764
38764
|
//#region src/agents/cli-runner.ts
|
|
38765
|
-
const log$
|
|
38765
|
+
const log$6 = createSubsystemLogger("agent/claude-cli");
|
|
38766
38766
|
async function runCliAgent(params) {
|
|
38767
38767
|
const started = Date.now();
|
|
38768
38768
|
const workspaceResolution = resolveRunWorkspaceDir({
|
|
@@ -38775,7 +38775,7 @@ async function runCliAgent(params) {
|
|
|
38775
38775
|
const redactedSessionId = redactRunIdentifier(params.sessionId);
|
|
38776
38776
|
const redactedSessionKey = redactRunIdentifier(params.sessionKey);
|
|
38777
38777
|
const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
|
|
38778
|
-
if (workspaceResolution.usedFallback) log$
|
|
38778
|
+
if (workspaceResolution.usedFallback) log$6.warn(`[workspace-fallback] caller=runCliAgent reason=${workspaceResolution.fallbackReason} run=${params.runId} session=${redactedSessionId} sessionKey=${redactedSessionKey} agent=${workspaceResolution.agentId} workspace=${redactedWorkspace}`);
|
|
38779
38779
|
const workspaceDir = resolvedWorkspace;
|
|
38780
38780
|
const backendResolved = resolveCliBackendConfig(params.provider, params.config);
|
|
38781
38781
|
if (!backendResolved) throw new Error(`Unknown CLI backend: ${params.provider}`);
|
|
@@ -38792,7 +38792,7 @@ async function runCliAgent(params) {
|
|
|
38792
38792
|
sessionId: params.sessionId,
|
|
38793
38793
|
warn: makeBootstrapWarn({
|
|
38794
38794
|
sessionLabel,
|
|
38795
|
-
warn: (message) => log$
|
|
38795
|
+
warn: (message) => log$6.warn(message)
|
|
38796
38796
|
})
|
|
38797
38797
|
});
|
|
38798
38798
|
const { defaultAgentId, sessionAgentId } = resolveSessionAgentIds({
|
|
@@ -38858,7 +38858,7 @@ async function runCliAgent(params) {
|
|
|
38858
38858
|
const queueKey = backend.serialize ?? true ? backendResolved.id : `${backendResolved.id}:${params.runId}`;
|
|
38859
38859
|
try {
|
|
38860
38860
|
const output = await enqueueCliRun(queueKey, async () => {
|
|
38861
|
-
log$
|
|
38861
|
+
log$6.info(`cli exec: provider=${params.provider} model=${normalizedModel} promptChars=${params.prompt.length}`);
|
|
38862
38862
|
const logOutputText = isTruthyEnvValue(process.env.SYMI_CLAUDE_CLI_LOG_OUTPUT);
|
|
38863
38863
|
if (logOutputText) {
|
|
38864
38864
|
const logArgs = [];
|
|
@@ -38891,7 +38891,7 @@ async function runCliAgent(params) {
|
|
|
38891
38891
|
const promptIndex = logArgs.indexOf(argsPrompt);
|
|
38892
38892
|
if (promptIndex >= 0) logArgs[promptIndex] = `<prompt:${argsPrompt.length} chars>`;
|
|
38893
38893
|
}
|
|
38894
|
-
log$
|
|
38894
|
+
log$6.info(`cli argv: ${backend.command} ${logArgs.join(" ")}`);
|
|
38895
38895
|
}
|
|
38896
38896
|
const env = (() => {
|
|
38897
38897
|
const next = {
|
|
@@ -38929,17 +38929,17 @@ async function runCliAgent(params) {
|
|
|
38929
38929
|
const stdout = result.stdout.trim();
|
|
38930
38930
|
const stderr = result.stderr.trim();
|
|
38931
38931
|
if (logOutputText) {
|
|
38932
|
-
if (stdout) log$
|
|
38933
|
-
if (stderr) log$
|
|
38932
|
+
if (stdout) log$6.info(`cli stdout:\n${stdout}`);
|
|
38933
|
+
if (stderr) log$6.info(`cli stderr:\n${stderr}`);
|
|
38934
38934
|
}
|
|
38935
38935
|
if (shouldLogVerbose()) {
|
|
38936
|
-
if (stdout) log$
|
|
38937
|
-
if (stderr) log$
|
|
38936
|
+
if (stdout) log$6.debug(`cli stdout:\n${stdout}`);
|
|
38937
|
+
if (stderr) log$6.debug(`cli stderr:\n${stderr}`);
|
|
38938
38938
|
}
|
|
38939
38939
|
if (result.exitCode !== 0 || result.reason !== "exit") {
|
|
38940
38940
|
if (result.reason === "no-output-timeout" || result.noOutputTimedOut) {
|
|
38941
38941
|
const timeoutReason = `CLI produced no output for ${Math.round(noOutputTimeoutMs / 1e3)}s and was terminated.`;
|
|
38942
|
-
log$
|
|
38942
|
+
log$6.warn(`cli watchdog timeout: provider=${params.provider} model=${modelId} session=${cliSessionIdToSend ?? params.sessionId} noOutputTimeoutMs=${noOutputTimeoutMs} pid=${managedRun.pid ?? "unknown"}`);
|
|
38943
38943
|
throw new FailoverError(timeoutReason, {
|
|
38944
38944
|
reason: "timeout",
|
|
38945
38945
|
provider: params.provider,
|
|
@@ -39258,7 +39258,7 @@ function resolveEmbeddedSessionLane(key) {
|
|
|
39258
39258
|
|
|
39259
39259
|
//#endregion
|
|
39260
39260
|
//#region src/agents/pi-embedded-runner/logger.ts
|
|
39261
|
-
const log$
|
|
39261
|
+
const log$5 = createSubsystemLogger("agent/embedded");
|
|
39262
39262
|
|
|
39263
39263
|
//#endregion
|
|
39264
39264
|
//#region src/utils/safe-json.ts
|
|
@@ -39304,7 +39304,7 @@ function getQueuedFileWriter(writers, filePath) {
|
|
|
39304
39304
|
//#endregion
|
|
39305
39305
|
//#region src/agents/anthropic-payload-log.ts
|
|
39306
39306
|
const writers$1 = /* @__PURE__ */ new Map();
|
|
39307
|
-
const log$
|
|
39307
|
+
const log$4 = createSubsystemLogger("agent/anthropic-payload");
|
|
39308
39308
|
function resolvePayloadLogConfig(env) {
|
|
39309
39309
|
const enabled = parseBooleanValue$1(env.SYMI_ANTHROPIC_PAYLOAD_LOG) ?? false;
|
|
39310
39310
|
const fileOverride = env.SYMI_ANTHROPIC_PAYLOAD_LOG_FILE?.trim();
|
|
@@ -39394,13 +39394,13 @@ function createAnthropicPayloadLogger(params) {
|
|
|
39394
39394
|
usage,
|
|
39395
39395
|
error: errorMessage
|
|
39396
39396
|
});
|
|
39397
|
-
log$
|
|
39397
|
+
log$4.info("anthropic usage", {
|
|
39398
39398
|
runId: params.runId,
|
|
39399
39399
|
sessionId: params.sessionId,
|
|
39400
39400
|
usage
|
|
39401
39401
|
});
|
|
39402
39402
|
};
|
|
39403
|
-
log$
|
|
39403
|
+
log$4.info("anthropic payload logger enabled", { filePath: writer.filePath });
|
|
39404
39404
|
return {
|
|
39405
39405
|
enabled: true,
|
|
39406
39406
|
wrapStreamFn,
|
|
@@ -41492,7 +41492,7 @@ function createEmbeddedPiSessionEventHandler(ctx) {
|
|
|
41492
41492
|
//#region src/agents/pi-embedded-subscribe.ts
|
|
41493
41493
|
const THINKING_TAG_SCAN_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\s*>/gi;
|
|
41494
41494
|
const FINAL_TAG_SCAN_RE = /<\s*(\/?)\s*final\s*>/gi;
|
|
41495
|
-
const log$
|
|
41495
|
+
const log$3 = createSubsystemLogger("agent/embedded");
|
|
41496
41496
|
function subscribeEmbeddedPiSession(params) {
|
|
41497
41497
|
const reasoningMode = params.reasoningMode ?? "off";
|
|
41498
41498
|
const useMarkdown = (params.toolResultFormat ?? "markdown") === "markdown";
|
|
@@ -41649,7 +41649,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
41649
41649
|
state.compactionRetryReject = reject;
|
|
41650
41650
|
});
|
|
41651
41651
|
state.compactionRetryPromise.catch((err) => {
|
|
41652
|
-
log$
|
|
41652
|
+
log$3.debug(`compaction promise rejected (no waiter): ${String(err)}`);
|
|
41653
41653
|
});
|
|
41654
41654
|
}
|
|
41655
41655
|
};
|
|
@@ -41801,7 +41801,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
41801
41801
|
if (!chunk) return;
|
|
41802
41802
|
if (chunk === state.lastBlockReplyText) return;
|
|
41803
41803
|
if (isMessagingToolDuplicateNormalized(normalizeTextForComparison(chunk), messagingToolSentTextsNormalized)) {
|
|
41804
|
-
log$
|
|
41804
|
+
log$3.debug(`Skipping block reply - already sent via messaging tool: ${chunk.slice(0, 50)}...`);
|
|
41805
41805
|
return;
|
|
41806
41806
|
}
|
|
41807
41807
|
if (shouldSkipAssistantText(chunk)) return;
|
|
@@ -41879,7 +41879,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
41879
41879
|
const ctx = {
|
|
41880
41880
|
params,
|
|
41881
41881
|
state,
|
|
41882
|
-
log: log$
|
|
41882
|
+
log: log$3,
|
|
41883
41883
|
blockChunking,
|
|
41884
41884
|
blockChunker,
|
|
41885
41885
|
hookRunner: params.hookRunner,
|
|
@@ -41912,7 +41912,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
41912
41912
|
if (state.unsubscribed) return;
|
|
41913
41913
|
state.unsubscribed = true;
|
|
41914
41914
|
if (state.compactionRetryPromise) {
|
|
41915
|
-
log$
|
|
41915
|
+
log$3.debug(`unsubscribe: rejecting compaction wait runId=${params.runId}`);
|
|
41916
41916
|
const reject = state.compactionRetryReject;
|
|
41917
41917
|
state.compactionRetryResolve = void 0;
|
|
41918
41918
|
state.compactionRetryReject = void 0;
|
|
@@ -41922,11 +41922,11 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
41922
41922
|
reject?.(abortErr);
|
|
41923
41923
|
}
|
|
41924
41924
|
if (params.session.isCompacting) {
|
|
41925
|
-
log$
|
|
41925
|
+
log$3.debug(`unsubscribe: aborting in-flight compaction runId=${params.runId}`);
|
|
41926
41926
|
try {
|
|
41927
41927
|
params.session.abortCompaction();
|
|
41928
41928
|
} catch (err) {
|
|
41929
|
-
log$
|
|
41929
|
+
log$3.warn(`unsubscribe: compaction abort failed runId=${params.runId} err=${String(err)}`);
|
|
41930
41930
|
}
|
|
41931
41931
|
}
|
|
41932
41932
|
sessionUnsubscribe();
|
|
@@ -41975,7 +41975,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
41975
41975
|
|
|
41976
41976
|
//#endregion
|
|
41977
41977
|
//#region src/agents/pi-tools.before-tool-call.ts
|
|
41978
|
-
const log$
|
|
41978
|
+
const log$2 = createSubsystemLogger("agents/tools");
|
|
41979
41979
|
const BEFORE_TOOL_CALL_WRAPPED = Symbol("beforeToolCallWrapped");
|
|
41980
41980
|
const adjustedParamsByToolCallId = /* @__PURE__ */ new Map();
|
|
41981
41981
|
const MAX_TRACKED_ADJUSTED_PARAMS = 1024;
|
|
@@ -42009,7 +42009,7 @@ async function recordLoopOutcome(args) {
|
|
|
42009
42009
|
config: args.ctx.loopDetection
|
|
42010
42010
|
});
|
|
42011
42011
|
} catch (err) {
|
|
42012
|
-
log$
|
|
42012
|
+
log$2.warn(`tool loop outcome tracking failed: tool=${args.toolName} error=${String(err)}`);
|
|
42013
42013
|
}
|
|
42014
42014
|
}
|
|
42015
42015
|
async function runBeforeToolCallHook(args) {
|
|
@@ -42026,7 +42026,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
42026
42026
|
const loopResult = detectToolCallLoop(sessionState, toolName, params, args.ctx.loopDetection);
|
|
42027
42027
|
if (loopResult.stuck) {
|
|
42028
42028
|
if (loopResult.level === "critical") {
|
|
42029
|
-
log$
|
|
42029
|
+
log$2.error(`Blocking ${toolName} due to critical loop: ${loopResult.message}`);
|
|
42030
42030
|
logToolLoopAction({
|
|
42031
42031
|
sessionKey: args.ctx.sessionKey,
|
|
42032
42032
|
sessionId: args.ctx?.agentId,
|
|
@@ -42043,7 +42043,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
42043
42043
|
reason: loopResult.message
|
|
42044
42044
|
};
|
|
42045
42045
|
} else if (shouldEmitLoopWarning(sessionState, loopResult.warningKey ?? `${loopResult.detector}:${toolName}`, loopResult.count)) {
|
|
42046
|
-
log$
|
|
42046
|
+
log$2.warn(`Loop warning for ${toolName}: ${loopResult.message}`);
|
|
42047
42047
|
logToolLoopAction({
|
|
42048
42048
|
sessionKey: args.ctx.sessionKey,
|
|
42049
42049
|
sessionId: args.ctx?.agentId,
|
|
@@ -42093,7 +42093,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
42093
42093
|
}
|
|
42094
42094
|
} catch (err) {
|
|
42095
42095
|
const toolCallId = args.toolCallId ? ` toolCallId=${args.toolCallId}` : "";
|
|
42096
|
-
log$
|
|
42096
|
+
log$2.warn(`before_tool_call hook failed: tool=${toolName}${toolCallId} error=${String(err)}`);
|
|
42097
42097
|
}
|
|
42098
42098
|
return {
|
|
42099
42099
|
blocked: false,
|
|
@@ -42337,10 +42337,27 @@ function validateShellCommand(command) {
|
|
|
42337
42337
|
|
|
42338
42338
|
//#endregion
|
|
42339
42339
|
//#region src/agents/pi-tools.validate-wrapper.ts
|
|
42340
|
+
const log$1 = createSubsystemLogger("agents/tool-validate");
|
|
42340
42341
|
const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
|
|
42342
|
+
const FILE_TOOL_NAMES = new Set([
|
|
42343
|
+
"write",
|
|
42344
|
+
"read",
|
|
42345
|
+
"edit",
|
|
42346
|
+
"patch",
|
|
42347
|
+
"file_write",
|
|
42348
|
+
"file_edit",
|
|
42349
|
+
"write_file",
|
|
42350
|
+
"edit_file",
|
|
42351
|
+
"create_file"
|
|
42352
|
+
]);
|
|
42353
|
+
const FILE_PATH_KEYS = [
|
|
42354
|
+
"file_path",
|
|
42355
|
+
"path",
|
|
42356
|
+
"filePath"
|
|
42357
|
+
];
|
|
42341
42358
|
/**
|
|
42342
|
-
* Wrap tools with argument validation.
|
|
42343
|
-
* Other tools pass through unchanged.
|
|
42359
|
+
* Wrap tools with argument validation. Exec/bash commands and file paths
|
|
42360
|
+
* are validated. Other tools pass through unchanged.
|
|
42344
42361
|
*
|
|
42345
42362
|
* Call this AFTER tools are created and the model profile is resolved.
|
|
42346
42363
|
*/
|
|
@@ -42349,24 +42366,64 @@ function wrapToolsWithArgValidation(tools, profile) {
|
|
|
42349
42366
|
return tools.map((tool) => wrapToolWithArgValidation(tool));
|
|
42350
42367
|
}
|
|
42351
42368
|
/**
|
|
42352
|
-
*
|
|
42369
|
+
* Clean a file path by stripping control token fragments.
|
|
42370
|
+
* Returns null if the path is irreparably corrupted (empty after cleanup).
|
|
42371
|
+
*/
|
|
42372
|
+
function cleanFilePath(filePath) {
|
|
42373
|
+
let cleaned = filePath.replace(/<\|[^|>]*(?:\|>)?/g, "");
|
|
42374
|
+
cleaned = cleanResidualTokenFragments(cleaned);
|
|
42375
|
+
cleaned = cleaned.trim();
|
|
42376
|
+
if (!cleaned || !/[a-zA-Z0-9/._~-]/.test(cleaned)) return {
|
|
42377
|
+
valid: false,
|
|
42378
|
+
cleaned
|
|
42379
|
+
};
|
|
42380
|
+
return {
|
|
42381
|
+
valid: true,
|
|
42382
|
+
cleaned
|
|
42383
|
+
};
|
|
42384
|
+
}
|
|
42385
|
+
/**
|
|
42386
|
+
* Wrap a single tool with argument validation.
|
|
42353
42387
|
*/
|
|
42354
42388
|
function wrapToolWithArgValidation(tool) {
|
|
42355
42389
|
const toolName = (tool.name ?? "").toLowerCase().trim();
|
|
42356
|
-
|
|
42390
|
+
const isExecTool = EXEC_TOOL_NAMES.has(toolName);
|
|
42391
|
+
const isFileTool = FILE_TOOL_NAMES.has(toolName);
|
|
42392
|
+
if (!isExecTool && !isFileTool) return tool;
|
|
42357
42393
|
const originalExecute = tool.execute;
|
|
42358
42394
|
return {
|
|
42359
42395
|
...tool,
|
|
42360
42396
|
execute(toolCallId, params, ...rest) {
|
|
42361
|
-
|
|
42362
|
-
|
|
42363
|
-
|
|
42364
|
-
|
|
42365
|
-
|
|
42397
|
+
if (isExecTool) {
|
|
42398
|
+
const command = params.command ?? params.cmd;
|
|
42399
|
+
if (typeof command !== "string") {
|
|
42400
|
+
log$1.debug(`[validate] exec called without string command: keys=${Object.keys(params).join(",")}`);
|
|
42401
|
+
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
42402
|
+
}
|
|
42403
|
+
const result = validateShellCommand(command);
|
|
42404
|
+
if (!result.valid) {
|
|
42405
|
+
log$1.warn(`[validate] exec command rejected: reason=${result.reason} raw=${command.slice(0, 100)}`);
|
|
42406
|
+
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.` });
|
|
42407
|
+
}
|
|
42408
|
+
if (result.cleaned !== command) {
|
|
42409
|
+
log$1.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
|
|
42410
|
+
return originalExecute.call(tool, toolCallId, {
|
|
42411
|
+
...params,
|
|
42412
|
+
command: result.cleaned
|
|
42413
|
+
}, ...rest);
|
|
42414
|
+
}
|
|
42415
|
+
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
42416
|
+
}
|
|
42417
|
+
const pathKey = FILE_PATH_KEYS.find((k) => typeof params[k] === "string");
|
|
42418
|
+
if (!pathKey) return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
42419
|
+
const rawPath = params[pathKey];
|
|
42420
|
+
if (!rawPath.includes("<|") && !rawPath.includes("|>") && !/^[<"|]/.test(rawPath)) return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
42421
|
+
const pathResult = cleanFilePath(rawPath);
|
|
42422
|
+
if (!pathResult.valid) return Promise.resolve({ output: `Error: file path "${rawPath}" contains model control tokens and could not be cleaned. Please provide a clean file path without any <|, |>, or XML-like tags.` });
|
|
42423
|
+
return originalExecute.call(tool, toolCallId, {
|
|
42366
42424
|
...params,
|
|
42367
|
-
|
|
42425
|
+
[pathKey]: pathResult.cleaned
|
|
42368
42426
|
}, ...rest);
|
|
42369
|
-
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
42370
42427
|
}
|
|
42371
42428
|
};
|
|
42372
42429
|
}
|
|
@@ -42725,7 +42782,7 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
42725
42782
|
const textLength = getToolResultTextLength(msg);
|
|
42726
42783
|
if (textLength > maxChars) {
|
|
42727
42784
|
oversizedIndices.push(i);
|
|
42728
|
-
log$
|
|
42785
|
+
log$5.info(`[tool-result-truncation] Found oversized tool result: entry=${entry.id} chars=${textLength} maxChars=${maxChars} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
42729
42786
|
}
|
|
42730
42787
|
}
|
|
42731
42788
|
if (oversizedIndices.length === 0) return {
|
|
@@ -42747,7 +42804,7 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
42747
42804
|
message = truncateToolResultMessage(message, maxChars);
|
|
42748
42805
|
truncatedCount++;
|
|
42749
42806
|
const newLength = getToolResultTextLength(message);
|
|
42750
|
-
log$
|
|
42807
|
+
log$5.info(`[tool-result-truncation] Truncated tool result: originalEntry=${entry.id} newChars=${newLength} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
42751
42808
|
}
|
|
42752
42809
|
sessionManager.appendMessage(message);
|
|
42753
42810
|
} else if (entry.type === "compaction") sessionManager.appendCompaction(entry.summary, entry.firstKeptEntryId, entry.tokensBefore, entry.details, entry.fromHook);
|
|
@@ -42761,14 +42818,14 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
42761
42818
|
if (entry.name) sessionManager.appendSessionInfo(entry.name);
|
|
42762
42819
|
}
|
|
42763
42820
|
}
|
|
42764
|
-
log$
|
|
42821
|
+
log$5.info(`[tool-result-truncation] Truncated ${truncatedCount} tool result(s) in session (contextWindow=${contextWindowTokens} maxChars=${maxChars}) sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
42765
42822
|
return {
|
|
42766
42823
|
truncated: true,
|
|
42767
42824
|
truncatedCount
|
|
42768
42825
|
};
|
|
42769
42826
|
} catch (err) {
|
|
42770
42827
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
42771
|
-
log$
|
|
42828
|
+
log$5.warn(`[tool-result-truncation] Failed to truncate: ${errMsg}`);
|
|
42772
42829
|
return {
|
|
42773
42830
|
truncated: false,
|
|
42774
42831
|
truncatedCount: 0,
|
|
@@ -44426,7 +44483,7 @@ function resolveAnthropicBetas(extraParams, provider, modelId) {
|
|
|
44426
44483
|
for (const beta of configured) if (typeof beta === "string" && beta.trim()) betas.add(beta.trim());
|
|
44427
44484
|
}
|
|
44428
44485
|
if (extraParams?.context1m === true) if (isAnthropic1MModel(modelId)) betas.add(ANTHROPIC_CONTEXT_1M_BETA);
|
|
44429
|
-
else log$
|
|
44486
|
+
else log$5.warn(`ignoring context1m for non-opus/sonnet model: ${provider}/${modelId}`);
|
|
44430
44487
|
return betas.size > 0 ? [...betas] : void 0;
|
|
44431
44488
|
}
|
|
44432
44489
|
function mergeAnthropicBetaHeader(headers, betas) {
|
|
@@ -45037,14 +45094,14 @@ function logToolSchemasForGoogle(params) {
|
|
|
45037
45094
|
if (params.provider !== "google-antigravity" && params.provider !== "google-gemini-cli") return;
|
|
45038
45095
|
const toolNames = params.tools.map((tool, index) => `${index}:${tool.name}`);
|
|
45039
45096
|
const tools = sanitizeToolsForGoogle(params);
|
|
45040
|
-
log$
|
|
45097
|
+
log$5.info("google tool schema snapshot", {
|
|
45041
45098
|
provider: params.provider,
|
|
45042
45099
|
toolCount: tools.length,
|
|
45043
45100
|
tools: toolNames
|
|
45044
45101
|
});
|
|
45045
45102
|
for (const [index, tool] of tools.entries()) {
|
|
45046
45103
|
const violations = findUnsupportedSchemaKeywords(tool.parameters, `${tool.name}.parameters`);
|
|
45047
|
-
if (violations.length > 0) log$
|
|
45104
|
+
if (violations.length > 0) log$5.warn("google tool schema has unsupported keywords", {
|
|
45048
45105
|
index,
|
|
45049
45106
|
tool: tool.name,
|
|
45050
45107
|
violations: violations.slice(0, 12),
|
|
@@ -45056,7 +45113,7 @@ const compactionFailureEmitter = new EventEmitter();
|
|
|
45056
45113
|
registerUnhandledRejectionHandler((reason) => {
|
|
45057
45114
|
const message = describeUnknownError(reason);
|
|
45058
45115
|
if (!isCompactionFailureError(message)) return false;
|
|
45059
|
-
log$
|
|
45116
|
+
log$5.error(`Auto-compaction failed (unhandled): ${message}`);
|
|
45060
45117
|
compactionFailureEmitter.emit("failure", message);
|
|
45061
45118
|
return true;
|
|
45062
45119
|
});
|
|
@@ -45108,7 +45165,7 @@ function applyGoogleTurnOrderingFix(params) {
|
|
|
45108
45165
|
const sanitized = sanitizeGoogleTurnOrdering(params.messages);
|
|
45109
45166
|
const didPrepend = sanitized !== params.messages;
|
|
45110
45167
|
if (didPrepend && !hasGoogleTurnOrderingMarker(params.sessionManager)) {
|
|
45111
|
-
(params.warn ?? ((message) => log$
|
|
45168
|
+
(params.warn ?? ((message) => log$5.warn(message)))(`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`);
|
|
45112
45169
|
markGoogleTurnOrderingMarker(params.sessionManager);
|
|
45113
45170
|
}
|
|
45114
45171
|
return {
|
|
@@ -45716,7 +45773,7 @@ function isImageExtension(filePath) {
|
|
|
45716
45773
|
}
|
|
45717
45774
|
async function sanitizeImagesWithLog(images, label, imageSanitization) {
|
|
45718
45775
|
const { images: sanitized, dropped } = await sanitizeImageBlocks(images, label, imageSanitization);
|
|
45719
|
-
if (dropped > 0) log$
|
|
45776
|
+
if (dropped > 0) log$5.warn(`Native image: dropped ${dropped} image(s) after sanitization (${label}).`);
|
|
45720
45777
|
return sanitized;
|
|
45721
45778
|
}
|
|
45722
45779
|
/**
|
|
@@ -45791,7 +45848,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
45791
45848
|
try {
|
|
45792
45849
|
let targetPath = ref.resolved;
|
|
45793
45850
|
if (ref.type === "url") {
|
|
45794
|
-
log$
|
|
45851
|
+
log$5.debug(`Native image: rejecting remote URL (local-only): ${ref.resolved}`);
|
|
45795
45852
|
return null;
|
|
45796
45853
|
}
|
|
45797
45854
|
if (ref.type === "path") {
|
|
@@ -45801,7 +45858,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
45801
45858
|
cwd: options.sandbox.root
|
|
45802
45859
|
}).hostPath;
|
|
45803
45860
|
} catch (err) {
|
|
45804
|
-
log$
|
|
45861
|
+
log$5.debug(`Native image: sandbox validation failed for ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
45805
45862
|
return null;
|
|
45806
45863
|
}
|
|
45807
45864
|
else if (!path.isAbsolute(targetPath)) targetPath = path.resolve(workspaceDir, targetPath);
|
|
@@ -45815,7 +45872,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
45815
45872
|
})
|
|
45816
45873
|
}) : await loadWebMedia(targetPath, options?.maxBytes);
|
|
45817
45874
|
if (media.kind !== "image") {
|
|
45818
|
-
log$
|
|
45875
|
+
log$5.debug(`Native image: not an image file: ${targetPath} (got ${media.kind})`);
|
|
45819
45876
|
return null;
|
|
45820
45877
|
}
|
|
45821
45878
|
const mimeType = media.contentType ?? "image/jpeg";
|
|
@@ -45825,7 +45882,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
45825
45882
|
mimeType
|
|
45826
45883
|
};
|
|
45827
45884
|
} catch (err) {
|
|
45828
|
-
log$
|
|
45885
|
+
log$5.debug(`Native image: failed to load ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
45829
45886
|
return null;
|
|
45830
45887
|
}
|
|
45831
45888
|
}
|
|
@@ -45924,7 +45981,7 @@ async function detectAndLoadPromptImages(params) {
|
|
|
45924
45981
|
loadedCount: 0,
|
|
45925
45982
|
skippedCount: 0
|
|
45926
45983
|
};
|
|
45927
|
-
log$
|
|
45984
|
+
log$5.debug(`Native image: detected ${allRefs.length} image refs (${promptRefs.length} in prompt, ${uniqueHistoryRefs.length} in history)`);
|
|
45928
45985
|
const promptImages = [...params.existingImages ?? []];
|
|
45929
45986
|
const historyImagesByIndex = /* @__PURE__ */ new Map();
|
|
45930
45987
|
let loadedCount = 0;
|
|
@@ -45941,7 +45998,7 @@ async function detectAndLoadPromptImages(params) {
|
|
|
45941
45998
|
else historyImagesByIndex.set(ref.messageIndex, [image]);
|
|
45942
45999
|
} else promptImages.push(image);
|
|
45943
46000
|
loadedCount++;
|
|
45944
|
-
log$
|
|
46001
|
+
log$5.debug(`Native image: loaded ${ref.type} ${ref.resolved}`);
|
|
45945
46002
|
} else skippedCount++;
|
|
45946
46003
|
}
|
|
45947
46004
|
const imageSanitization = { maxDimensionPx: params.maxDimensionPx };
|
|
@@ -46037,7 +46094,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46037
46094
|
const resolvedWorkspace = resolveUserPath(params.workspaceDir);
|
|
46038
46095
|
const prevCwd = process.cwd();
|
|
46039
46096
|
const runAbortController = new AbortController();
|
|
46040
|
-
log$
|
|
46097
|
+
log$5.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"}`);
|
|
46041
46098
|
await fs$1.mkdir(resolvedWorkspace, { recursive: true });
|
|
46042
46099
|
const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
|
|
46043
46100
|
const sandbox = await resolveSandboxContext({
|
|
@@ -46073,7 +46130,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46073
46130
|
sessionId: params.sessionId,
|
|
46074
46131
|
warn: makeBootstrapWarn({
|
|
46075
46132
|
sessionLabel,
|
|
46076
|
-
warn: (message) => log$
|
|
46133
|
+
warn: (message) => log$5.warn(message)
|
|
46077
46134
|
})
|
|
46078
46135
|
});
|
|
46079
46136
|
const workspaceNotes = hookAdjustedBootstrapFiles.some((file) => file.name === DEFAULT_BOOTSTRAP_FILENAME && !file.missing) ? ["Reminder: commit your changes in this workspace after edits."] : void 0;
|
|
@@ -46272,7 +46329,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46272
46329
|
try {
|
|
46273
46330
|
await repairSessionFileIfNeeded({
|
|
46274
46331
|
sessionFile: params.sessionFile,
|
|
46275
|
-
warn: (message) => log$
|
|
46332
|
+
warn: (message) => log$5.warn(message)
|
|
46276
46333
|
});
|
|
46277
46334
|
const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
|
|
46278
46335
|
const transcriptPolicy = resolveTranscriptPolicy({
|
|
@@ -46281,7 +46338,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46281
46338
|
modelId: params.modelId
|
|
46282
46339
|
});
|
|
46283
46340
|
const versionCheck = await handleSessionVersion(params.sessionFile);
|
|
46284
|
-
if (versionCheck.archived) log$
|
|
46341
|
+
if (versionCheck.archived) log$5.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
|
|
46285
46342
|
await prewarmSessionFile(params.sessionFile);
|
|
46286
46343
|
sessionManager = guardSessionManager(SessionManager.open(params.sessionFile), {
|
|
46287
46344
|
agentId: sessionAgentId,
|
|
@@ -46533,6 +46590,9 @@ async function runEmbeddedAttempt(params) {
|
|
|
46533
46590
|
});
|
|
46534
46591
|
};
|
|
46535
46592
|
const streamMonitor = createStreamMonitor(modelProfile);
|
|
46593
|
+
const TOOL_ERROR_ABORT_THRESHOLD = 5;
|
|
46594
|
+
const TOOL_ERROR_WARN_THRESHOLD = 3;
|
|
46595
|
+
let consecutiveToolErrors = 0;
|
|
46536
46596
|
const subscription = subscribeEmbeddedPiSession({
|
|
46537
46597
|
session: activeSession,
|
|
46538
46598
|
runId: params.runId,
|
|
@@ -46554,9 +46614,25 @@ async function runEmbeddedAttempt(params) {
|
|
|
46554
46614
|
onAgentEvent: (evt) => {
|
|
46555
46615
|
armSymipulseTimer();
|
|
46556
46616
|
params.onAgentEvent?.(evt);
|
|
46617
|
+
if (evt.stream === "tool" && !aborted) {
|
|
46618
|
+
const phase = typeof evt.data?.phase === "string" ? evt.data.phase : "";
|
|
46619
|
+
const isError = evt.data?.isError === true;
|
|
46620
|
+
if (phase === "result") {
|
|
46621
|
+
if (isError) consecutiveToolErrors++;
|
|
46622
|
+
else consecutiveToolErrors = 0;
|
|
46623
|
+
if (consecutiveToolErrors >= TOOL_ERROR_ABORT_THRESHOLD) {
|
|
46624
|
+
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
|
|
46625
|
+
log$5.error(`Agent-loop circuit breaker: ${consecutiveToolErrors} consecutive tool errors (last: ${toolName}). Aborting run ${params.runId}.`);
|
|
46626
|
+
abortRun(false, /* @__PURE__ */ new Error(`${consecutiveToolErrors} consecutive tool errors. The model may be generating corrupted tool arguments. Run aborted to prevent infinite loop.`));
|
|
46627
|
+
} else if (consecutiveToolErrors === TOOL_ERROR_WARN_THRESHOLD) {
|
|
46628
|
+
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
|
|
46629
|
+
log$5.warn(`Agent-loop tool error warning: ${consecutiveToolErrors} consecutive failures (last: ${toolName}). runId=${params.runId}`);
|
|
46630
|
+
}
|
|
46631
|
+
}
|
|
46632
|
+
}
|
|
46557
46633
|
if (evt.stream === "assistant" && typeof evt.data?.text === "string" && !aborted) {
|
|
46558
46634
|
streamMonitor.onChunk(evt.data.text);
|
|
46559
|
-
if (streamMonitor.shouldStop()) log$
|
|
46635
|
+
if (streamMonitor.shouldStop()) log$5.debug(`stream monitor detection (log-only, no abort): runId=${params.runId} reason=${streamMonitor.getStopReason()}`);
|
|
46560
46636
|
}
|
|
46561
46637
|
},
|
|
46562
46638
|
enforceFinalTag: params.enforceFinalTag,
|
|
@@ -46576,7 +46652,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46576
46652
|
let abortWarnTimer;
|
|
46577
46653
|
const isProbeSession = params.sessionId?.startsWith("probe-") ?? false;
|
|
46578
46654
|
const abortTimer = setTimeout(() => {
|
|
46579
|
-
if (!isProbeSession) log$
|
|
46655
|
+
if (!isProbeSession) log$5.warn(`embedded run timeout: runId=${params.runId} sessionId=${params.sessionId} timeoutMs=${params.timeoutMs}`);
|
|
46580
46656
|
if (shouldFlagCompactionTimeout({
|
|
46581
46657
|
isTimeout: true,
|
|
46582
46658
|
isCompactionPendingOrRetrying: subscription.isCompacting(),
|
|
@@ -46585,7 +46661,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46585
46661
|
abortRun(true);
|
|
46586
46662
|
if (!abortWarnTimer) abortWarnTimer = setTimeout(() => {
|
|
46587
46663
|
if (!activeSession.isStreaming) return;
|
|
46588
|
-
if (!isProbeSession) log$
|
|
46664
|
+
if (!isProbeSession) log$5.warn(`embedded run abort still streaming: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
46589
46665
|
}, 1e4);
|
|
46590
46666
|
}, Math.max(1, params.timeoutMs));
|
|
46591
46667
|
armSymipulseTimer = () => {
|
|
@@ -46593,7 +46669,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46593
46669
|
clearSymipulseTimer();
|
|
46594
46670
|
symipulseTimer = setTimeout(() => {
|
|
46595
46671
|
if (aborted) return;
|
|
46596
|
-
if (!isProbeSession) log$
|
|
46672
|
+
if (!isProbeSession) log$5.warn(`symipulse timeout: runId=${params.runId} sessionId=${params.sessionId} symipulseMs=${symipulseMs} (no activity)`);
|
|
46597
46673
|
if (shouldFlagCompactionTimeout({
|
|
46598
46674
|
isTimeout: true,
|
|
46599
46675
|
isCompactionPendingOrRetrying: subscription.isCompacting(),
|
|
@@ -46637,13 +46713,13 @@ async function runEmbeddedAttempt(params) {
|
|
|
46637
46713
|
prompt: params.prompt,
|
|
46638
46714
|
messages: activeSession.messages
|
|
46639
46715
|
}, hookCtx).catch((hookErr) => {
|
|
46640
|
-
log$
|
|
46716
|
+
log$5.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
|
|
46641
46717
|
}) : void 0;
|
|
46642
46718
|
const legacyResult = hookRunner?.hasHooks("before_agent_start") ? await hookRunner.runBeforeAgentStart({
|
|
46643
46719
|
prompt: params.prompt,
|
|
46644
46720
|
messages: activeSession.messages
|
|
46645
46721
|
}, hookCtx).catch((hookErr) => {
|
|
46646
|
-
log$
|
|
46722
|
+
log$5.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
|
|
46647
46723
|
}) : void 0;
|
|
46648
46724
|
const hookResult = {
|
|
46649
46725
|
systemPrompt: promptBuildResult?.systemPrompt ?? legacyResult?.systemPrompt,
|
|
@@ -46651,7 +46727,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46651
46727
|
};
|
|
46652
46728
|
if (hookResult?.prependContext) {
|
|
46653
46729
|
effectivePrompt = `${hookResult.prependContext}\n\n${params.prompt}`;
|
|
46654
|
-
log$
|
|
46730
|
+
log$5.debug(`hooks: prepended context to prompt (${hookResult.prependContext.length} chars)`);
|
|
46655
46731
|
}
|
|
46656
46732
|
{
|
|
46657
46733
|
const autoRecallAgentId = normalizeAgentId(params.sessionKey);
|
|
@@ -46668,11 +46744,11 @@ async function runEmbeddedAttempt(params) {
|
|
|
46668
46744
|
if (recallResults.length > 0) {
|
|
46669
46745
|
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>`;
|
|
46670
46746
|
effectivePrompt = `${recallBlock}\n\n${effectivePrompt}`;
|
|
46671
|
-
log$
|
|
46747
|
+
log$5.debug(`auto-recall: injected ${recallResults.length} snippets (${recallBlock.length} chars)`);
|
|
46672
46748
|
}
|
|
46673
46749
|
}
|
|
46674
46750
|
} catch (recallErr) {
|
|
46675
|
-
log$
|
|
46751
|
+
log$5.debug(`auto-recall: skipped (${String(recallErr)})`);
|
|
46676
46752
|
}
|
|
46677
46753
|
}
|
|
46678
46754
|
{
|
|
@@ -46684,10 +46760,10 @@ async function runEmbeddedAttempt(params) {
|
|
|
46684
46760
|
if (planResult.enter) {
|
|
46685
46761
|
if (planResult.stripped != null) effectivePrompt = planResult.stripped;
|
|
46686
46762
|
effectivePrompt = `${PLAN_MODE_SYSTEM_PROMPT}\n\n${effectivePrompt}`;
|
|
46687
|
-
log$
|
|
46763
|
+
log$5.info(`plan-mode: activated (${planResult.reason}) for runId=${params.runId}`);
|
|
46688
46764
|
} else if (planResult.stripped != null) effectivePrompt = planResult.stripped;
|
|
46689
46765
|
}
|
|
46690
|
-
log$
|
|
46766
|
+
log$5.debug(`embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
46691
46767
|
cacheTrace?.recordStage("prompt:before", {
|
|
46692
46768
|
prompt: effectivePrompt,
|
|
46693
46769
|
messages: activeSession.messages
|
|
@@ -46699,7 +46775,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46699
46775
|
const sessionContext = sessionManager.buildSessionContext();
|
|
46700
46776
|
const sanitizedOrphan = transcriptPolicy.sanitizeThinkingSignatures ? sanitizeAntigravityThinkingBlocks(sessionContext.messages) : sessionContext.messages;
|
|
46701
46777
|
activeSession.agent.replaceMessages(sanitizedOrphan);
|
|
46702
|
-
log$
|
|
46778
|
+
log$5.warn(`Removed orphaned user message to prevent consecutive user turns. runId=${params.runId} sessionId=${params.sessionId}`);
|
|
46703
46779
|
}
|
|
46704
46780
|
try {
|
|
46705
46781
|
const imageResult = await detectAndLoadPromptImages({
|
|
@@ -46721,12 +46797,12 @@ async function runEmbeddedAttempt(params) {
|
|
|
46721
46797
|
messages: activeSession.messages,
|
|
46722
46798
|
note: `images: prompt=${imageResult.images.length} history=${imageResult.historyImagesByIndex.size}`
|
|
46723
46799
|
});
|
|
46724
|
-
if (log$
|
|
46800
|
+
if (log$5.isEnabled("debug")) {
|
|
46725
46801
|
const msgCount = activeSession.messages.length;
|
|
46726
46802
|
const systemLen = systemPromptText?.length ?? 0;
|
|
46727
46803
|
const promptLen = effectivePrompt.length;
|
|
46728
46804
|
const sessionSummary = summarizeSessionContext(activeSession.messages);
|
|
46729
|
-
log$
|
|
46805
|
+
log$5.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}`);
|
|
46730
46806
|
}
|
|
46731
46807
|
if (hookRunner?.hasHooks("llm_input")) hookRunner.runLlmInput({
|
|
46732
46808
|
runId: params.runId,
|
|
@@ -46744,7 +46820,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46744
46820
|
workspaceDir: params.workspaceDir,
|
|
46745
46821
|
messageProvider: params.messageProvider ?? void 0
|
|
46746
46822
|
}).catch((err) => {
|
|
46747
|
-
log$
|
|
46823
|
+
log$5.warn(`llm_input hook failed: ${String(err)}`);
|
|
46748
46824
|
});
|
|
46749
46825
|
if (imageResult.images.length > 0) await abortable(activeSession.prompt(effectivePrompt, { images: imageResult.images }));
|
|
46750
46826
|
else await abortable(activeSession.prompt(effectivePrompt));
|
|
@@ -46752,7 +46828,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46752
46828
|
promptError = err;
|
|
46753
46829
|
promptErrorSource = "prompt";
|
|
46754
46830
|
} finally {
|
|
46755
|
-
log$
|
|
46831
|
+
log$5.debug(`embedded run prompt end: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - promptStartedAt}`);
|
|
46756
46832
|
}
|
|
46757
46833
|
const wasCompactingBefore = activeSession.isCompacting;
|
|
46758
46834
|
const snapshot = activeSession.messages.slice();
|
|
@@ -46767,7 +46843,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46767
46843
|
promptError = err;
|
|
46768
46844
|
promptErrorSource = "compaction";
|
|
46769
46845
|
}
|
|
46770
|
-
if (!isProbeSession) log$
|
|
46846
|
+
if (!isProbeSession) log$5.debug(`compaction wait aborted: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
46771
46847
|
} else throw err;
|
|
46772
46848
|
}
|
|
46773
46849
|
if (!timedOutDuringCompaction) {
|
|
@@ -46785,7 +46861,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46785
46861
|
currentSessionId: activeSession.sessionId
|
|
46786
46862
|
});
|
|
46787
46863
|
if (timedOutDuringCompaction) {
|
|
46788
|
-
if (!isProbeSession) log$
|
|
46864
|
+
if (!isProbeSession) log$5.warn(`using ${snapshotSelection.source} snapshot: timed out during compaction runId=${params.runId} sessionId=${params.sessionId}`);
|
|
46789
46865
|
}
|
|
46790
46866
|
messagesSnapshot = snapshotSelection.messagesSnapshot;
|
|
46791
46867
|
sessionIdUsed = snapshotSelection.sessionIdUsed;
|
|
@@ -46800,7 +46876,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46800
46876
|
error: describeUnknownError(promptError)
|
|
46801
46877
|
});
|
|
46802
46878
|
} catch (entryErr) {
|
|
46803
|
-
log$
|
|
46879
|
+
log$5.warn(`failed to persist prompt error entry: ${String(entryErr)}`);
|
|
46804
46880
|
}
|
|
46805
46881
|
cacheTrace?.recordStage("session:after", {
|
|
46806
46882
|
messages: messagesSnapshot,
|
|
@@ -46819,17 +46895,17 @@ async function runEmbeddedAttempt(params) {
|
|
|
46819
46895
|
workspaceDir: params.workspaceDir,
|
|
46820
46896
|
messageProvider: params.messageProvider ?? void 0
|
|
46821
46897
|
}).catch((err) => {
|
|
46822
|
-
log$
|
|
46898
|
+
log$5.warn(`agent_end hook failed: ${err}`);
|
|
46823
46899
|
});
|
|
46824
46900
|
} finally {
|
|
46825
46901
|
clearTimeout(abortTimer);
|
|
46826
46902
|
clearSymipulseTimer();
|
|
46827
46903
|
if (abortWarnTimer) clearTimeout(abortWarnTimer);
|
|
46828
|
-
if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$
|
|
46904
|
+
if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$5.debug(`run cleanup: runId=${params.runId} sessionId=${params.sessionId} aborted=${aborted} timedOut=${timedOut}`);
|
|
46829
46905
|
try {
|
|
46830
46906
|
unsubscribe();
|
|
46831
46907
|
} catch (err) {
|
|
46832
|
-
log$
|
|
46908
|
+
log$5.error(`CRITICAL: unsubscribe failed, possible resource leak: runId=${params.runId} ${String(err)}`);
|
|
46833
46909
|
}
|
|
46834
46910
|
clearActiveEmbeddedRun(params.sessionId, queueHandle, params.sessionKey);
|
|
46835
46911
|
params.abortSignal?.removeEventListener?.("abort", onAbort);
|
|
@@ -46854,7 +46930,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
46854
46930
|
workspaceDir: params.workspaceDir,
|
|
46855
46931
|
messageProvider: params.messageProvider ?? void 0
|
|
46856
46932
|
}).catch((err) => {
|
|
46857
|
-
log$
|
|
46933
|
+
log$5.warn(`llm_output hook failed: ${String(err)}`);
|
|
46858
46934
|
});
|
|
46859
46935
|
return {
|
|
46860
46936
|
aborted,
|
|
@@ -47115,7 +47191,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47115
47191
|
const redactedSessionId = redactRunIdentifier(params.sessionId);
|
|
47116
47192
|
const redactedSessionKey = redactRunIdentifier(params.sessionKey);
|
|
47117
47193
|
const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
|
|
47118
|
-
if (workspaceResolution.usedFallback) log$
|
|
47194
|
+
if (workspaceResolution.usedFallback) log$5.warn(`[workspace-fallback] caller=runEmbeddedPiAgent reason=${workspaceResolution.fallbackReason} run=${params.runId} session=${redactedSessionId} sessionKey=${redactedSessionKey} agent=${workspaceResolution.agentId} workspace=${redactedWorkspace}`);
|
|
47119
47195
|
const prevCwd = process.cwd();
|
|
47120
47196
|
let provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
47121
47197
|
let modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
|
@@ -47134,7 +47210,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47134
47210
|
if (hookRunner?.hasHooks("before_model_resolve")) try {
|
|
47135
47211
|
modelResolveOverride = await hookRunner.runBeforeModelResolve({ prompt: params.prompt }, hookCtx);
|
|
47136
47212
|
} catch (hookErr) {
|
|
47137
|
-
log$
|
|
47213
|
+
log$5.warn(`before_model_resolve hook failed: ${String(hookErr)}`);
|
|
47138
47214
|
}
|
|
47139
47215
|
if (hookRunner?.hasHooks("before_agent_start")) try {
|
|
47140
47216
|
const legacyResult = await hookRunner.runBeforeAgentStart({ prompt: params.prompt }, hookCtx);
|
|
@@ -47143,15 +47219,15 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47143
47219
|
modelOverride: modelResolveOverride?.modelOverride ?? legacyResult?.modelOverride
|
|
47144
47220
|
};
|
|
47145
47221
|
} catch (hookErr) {
|
|
47146
|
-
log$
|
|
47222
|
+
log$5.warn(`before_agent_start hook (legacy model resolve path) failed: ${String(hookErr)}`);
|
|
47147
47223
|
}
|
|
47148
47224
|
if (modelResolveOverride?.providerOverride) {
|
|
47149
47225
|
provider = modelResolveOverride.providerOverride;
|
|
47150
|
-
log$
|
|
47226
|
+
log$5.info(`[hooks] provider overridden to ${provider}`);
|
|
47151
47227
|
}
|
|
47152
47228
|
if (modelResolveOverride?.modelOverride) {
|
|
47153
47229
|
modelId = modelResolveOverride.modelOverride;
|
|
47154
|
-
log$
|
|
47230
|
+
log$5.info(`[hooks] model overridden to ${modelId}`);
|
|
47155
47231
|
}
|
|
47156
47232
|
const { model, error, authStorage, modelRegistry } = resolveModel(provider, modelId, agentDir, params.config);
|
|
47157
47233
|
if (!model) throw new FailoverError(error ?? `Unknown model: ${provider}/${modelId}`, {
|
|
@@ -47171,9 +47247,9 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47171
47247
|
warnBelowTokens: CONTEXT_WINDOW_WARN_BELOW_TOKENS,
|
|
47172
47248
|
hardMinTokens: CONTEXT_WINDOW_HARD_MIN_TOKENS
|
|
47173
47249
|
});
|
|
47174
|
-
if (ctxGuard.shouldWarn) log$
|
|
47250
|
+
if (ctxGuard.shouldWarn) log$5.warn(`low context window: ${provider}/${modelId} ctx=${ctxGuard.tokens} (warn<${CONTEXT_WINDOW_WARN_BELOW_TOKENS}) source=${ctxGuard.source}`);
|
|
47175
47251
|
if (ctxGuard.shouldBlock) {
|
|
47176
|
-
log$
|
|
47252
|
+
log$5.error(`blocked model (context window too small): ${provider}/${modelId} ctx=${ctxGuard.tokens} (min=${CONTEXT_WINDOW_HARD_MIN_TOKENS}) source=${ctxGuard.source}`);
|
|
47177
47253
|
throw new FailoverError(`Model context window too small (${ctxGuard.tokens} tokens). Minimum is ${CONTEXT_WINDOW_HARD_MIN_TOKENS}.`, {
|
|
47178
47254
|
reason: "unknown",
|
|
47179
47255
|
provider,
|
|
@@ -47303,7 +47379,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47303
47379
|
while (true) {
|
|
47304
47380
|
if (runLoopIterations >= MAX_RUN_LOOP_ITERATIONS) {
|
|
47305
47381
|
const message = `Exceeded retry limit after ${runLoopIterations} attempts (max=${MAX_RUN_LOOP_ITERATIONS}).`;
|
|
47306
|
-
log$
|
|
47382
|
+
log$5.error(`[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} attempts=${runLoopIterations} maxAttempts=${MAX_RUN_LOOP_ITERATIONS}`);
|
|
47307
47383
|
return {
|
|
47308
47384
|
payloads: [{
|
|
47309
47385
|
text: "Request failed after repeated internal retries. Please try again, or use /new to start a fresh session.",
|
|
@@ -47424,18 +47500,18 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47424
47500
|
const overflowDiagId = createCompactionDiagId$1();
|
|
47425
47501
|
const errorText = contextOverflowError.text;
|
|
47426
47502
|
const msgCount = attempt.messagesSnapshot?.length ?? 0;
|
|
47427
|
-
log$
|
|
47503
|
+
log$5.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)}`);
|
|
47428
47504
|
const isCompactionFailure = isCompactionFailureError(errorText);
|
|
47429
47505
|
const hadAttemptLevelCompaction = attemptCompactionCount > 0;
|
|
47430
47506
|
if (!isCompactionFailure && hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
|
|
47431
47507
|
overflowCompactionAttempts++;
|
|
47432
|
-
log$
|
|
47508
|
+
log$5.warn(`context overflow persisted after in-attempt compaction (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); retrying prompt without additional compaction for ${provider}/${modelId}`);
|
|
47433
47509
|
continue;
|
|
47434
47510
|
}
|
|
47435
47511
|
if (!isCompactionFailure && !hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
|
|
47436
|
-
if (log$
|
|
47512
|
+
if (log$5.isEnabled("debug")) log$5.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=compact isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=unknown attempt=${overflowCompactionAttempts + 1} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
47437
47513
|
overflowCompactionAttempts++;
|
|
47438
|
-
log$
|
|
47514
|
+
log$5.warn(`context overflow detected (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); attempting auto-compaction for ${provider}/${modelId}`);
|
|
47439
47515
|
const compactResult = await compactEmbeddedPiSessionDirect({
|
|
47440
47516
|
sessionId: params.sessionId,
|
|
47441
47517
|
sessionKey: params.sessionKey,
|
|
@@ -47464,10 +47540,10 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47464
47540
|
});
|
|
47465
47541
|
if (compactResult.compacted) {
|
|
47466
47542
|
autoCompactionCount += 1;
|
|
47467
|
-
log$
|
|
47543
|
+
log$5.info(`auto-compaction succeeded for ${provider}/${modelId}; retrying prompt`);
|
|
47468
47544
|
continue;
|
|
47469
47545
|
}
|
|
47470
|
-
log$
|
|
47546
|
+
log$5.warn(`auto-compaction failed for ${provider}/${modelId}: ${compactResult.reason ?? "nothing to compact"}`);
|
|
47471
47547
|
}
|
|
47472
47548
|
if (!toolResultTruncationAttempted) {
|
|
47473
47549
|
const contextWindowTokens = ctxInfo.tokens;
|
|
@@ -47476,9 +47552,9 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47476
47552
|
contextWindowTokens
|
|
47477
47553
|
}) : false;
|
|
47478
47554
|
if (hasOversized) {
|
|
47479
|
-
if (log$
|
|
47555
|
+
if (log$5.isEnabled("debug")) log$5.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=truncate_tool_results isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=${hasOversized} attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
47480
47556
|
toolResultTruncationAttempted = true;
|
|
47481
|
-
log$
|
|
47557
|
+
log$5.warn(`[context-overflow-recovery] Attempting tool result truncation for ${provider}/${modelId} (contextWindow=${contextWindowTokens} tokens)`);
|
|
47482
47558
|
const truncResult = await truncateOversizedToolResultsInSession({
|
|
47483
47559
|
sessionFile: params.sessionFile,
|
|
47484
47560
|
contextWindowTokens,
|
|
@@ -47486,13 +47562,13 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47486
47562
|
sessionKey: params.sessionKey
|
|
47487
47563
|
});
|
|
47488
47564
|
if (truncResult.truncated) {
|
|
47489
|
-
log$
|
|
47565
|
+
log$5.info(`[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`);
|
|
47490
47566
|
continue;
|
|
47491
47567
|
}
|
|
47492
|
-
log$
|
|
47493
|
-
} else if (log$
|
|
47568
|
+
log$5.warn(`[context-overflow-recovery] Tool result truncation did not help: ${truncResult.reason ?? "unknown"}`);
|
|
47569
|
+
} else if (log$5.isEnabled("debug")) log$5.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=give_up isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=${hasOversized} attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
47494
47570
|
}
|
|
47495
|
-
if ((isCompactionFailure || overflowCompactionAttempts >= MAX_OVERFLOW_COMPACTION_ATTEMPTS || toolResultTruncationAttempted) && log$
|
|
47571
|
+
if ((isCompactionFailure || overflowCompactionAttempts >= MAX_OVERFLOW_COMPACTION_ATTEMPTS || toolResultTruncationAttempted) && log$5.isEnabled("debug")) log$5.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=give_up isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=unknown attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
47496
47572
|
const kind = isCompactionFailure ? "compaction_failure" : "context_overflow";
|
|
47497
47573
|
return {
|
|
47498
47574
|
payloads: [{
|
|
@@ -47573,7 +47649,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47573
47649
|
attempted: attemptedThinking
|
|
47574
47650
|
});
|
|
47575
47651
|
if (fallbackThinking) {
|
|
47576
|
-
log$
|
|
47652
|
+
log$5.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
|
|
47577
47653
|
thinkLevel = fallbackThinking;
|
|
47578
47654
|
continue;
|
|
47579
47655
|
}
|
|
@@ -47591,7 +47667,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47591
47667
|
attempted: attemptedThinking
|
|
47592
47668
|
});
|
|
47593
47669
|
if (fallbackThinking && !aborted) {
|
|
47594
|
-
log$
|
|
47670
|
+
log$5.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
|
|
47595
47671
|
thinkLevel = fallbackThinking;
|
|
47596
47672
|
continue;
|
|
47597
47673
|
}
|
|
@@ -47608,7 +47684,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47608
47684
|
imageDimensionError.contentIndex !== void 0 ? `content=${imageDimensionError.contentIndex}` : null,
|
|
47609
47685
|
imageDimensionError.maxDimensionPx !== void 0 ? `limit=${imageDimensionError.maxDimensionPx}px` : null
|
|
47610
47686
|
].filter(Boolean).join(" ");
|
|
47611
|
-
log$
|
|
47687
|
+
log$5.warn(`Profile ${lastProfileId} rejected image payload${details ? ` (${details})` : ""}.`);
|
|
47612
47688
|
}
|
|
47613
47689
|
const isLocalOllamaTimeout = timedOut && model.api === "ollama";
|
|
47614
47690
|
if (!aborted && failoverFailure || timedOut && !timedOutDuringCompaction && !isLocalOllamaTimeout) {
|
|
@@ -47620,8 +47696,8 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47620
47696
|
cfg: params.config,
|
|
47621
47697
|
agentDir: params.agentDir
|
|
47622
47698
|
});
|
|
47623
|
-
if (timedOut && !isProbeSession) log$
|
|
47624
|
-
if (cloudCodeAssistFormatError) log$
|
|
47699
|
+
if (timedOut && !isProbeSession) log$5.warn(`Profile ${lastProfileId} timed out (possible rate limit). Trying next account...`);
|
|
47700
|
+
if (cloudCodeAssistFormatError) log$5.warn(`Profile ${lastProfileId} hit Cloud Code Assist format error. Tool calls will be sanitized on retry.`);
|
|
47625
47701
|
}
|
|
47626
47702
|
if (await advanceAuthProfile()) continue;
|
|
47627
47703
|
if (fallbackConfigured) {
|
|
@@ -47687,7 +47763,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47687
47763
|
const hasCodeBlocks = attempt.assistantTexts.some((text) => /```[\s\S]*?```/.test(text));
|
|
47688
47764
|
if (hasCodeToolUsage || hasCodeBlocks) {
|
|
47689
47765
|
verificationPassCompleted = true;
|
|
47690
|
-
log$
|
|
47766
|
+
log$5.debug(`[verification] starting verification pass: runId=${params.runId} sessionId=${params.sessionId} trigger=${hasCodeToolUsage ? "tool_usage" : "code_blocks"}`);
|
|
47691
47767
|
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.";
|
|
47692
47768
|
try {
|
|
47693
47769
|
const verifyAttempt = await runEmbeddedAttempt({
|
|
@@ -47773,10 +47849,10 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47773
47849
|
payloads.length = 0;
|
|
47774
47850
|
payloads.push(...verifyPayloads);
|
|
47775
47851
|
}
|
|
47776
|
-
log$
|
|
47777
|
-
} else log$
|
|
47852
|
+
log$5.debug(`[verification] verification produced corrections: runId=${params.runId} tools=${verifyAttempt.toolMetas.length} texts=${verifyAttempt.assistantTexts.length}`);
|
|
47853
|
+
} else log$5.debug(`[verification] verification confirmed original response: runId=${params.runId}`);
|
|
47778
47854
|
} catch (verifyErr) {
|
|
47779
|
-
log$
|
|
47855
|
+
log$5.warn(`[verification] verification pass failed, keeping original response: runId=${params.runId} error=${String(verifyErr)}`);
|
|
47780
47856
|
}
|
|
47781
47857
|
}
|
|
47782
47858
|
}
|
|
@@ -47797,7 +47873,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
47797
47873
|
messagingToolSentTargets: attempt.messagingToolSentTargets,
|
|
47798
47874
|
successfulCronAdds: attempt.successfulCronAdds
|
|
47799
47875
|
};
|
|
47800
|
-
log$
|
|
47876
|
+
log$5.debug(`embedded run done: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - started} aborted=${aborted}`);
|
|
47801
47877
|
if (lastProfileId) {
|
|
47802
47878
|
await markAuthProfileGood({
|
|
47803
47879
|
store: authStore,
|
|
@@ -60518,7 +60594,7 @@ function isVoiceChannelType(type) {
|
|
|
60518
60594
|
function createDefaultDeps() {
|
|
60519
60595
|
return {
|
|
60520
60596
|
sendMessageWhatsApp: async (...args) => {
|
|
60521
|
-
const { sendMessageWhatsApp } = await import("./web-
|
|
60597
|
+
const { sendMessageWhatsApp } = await import("./web-LUMjboLF.js");
|
|
60522
60598
|
return await sendMessageWhatsApp(...args);
|
|
60523
60599
|
},
|
|
60524
60600
|
sendMessageTelegram: async (...args) => {
|
|
@@ -75798,7 +75874,7 @@ function loadWebLoginQr() {
|
|
|
75798
75874
|
return webLoginQrPromise;
|
|
75799
75875
|
}
|
|
75800
75876
|
function loadWebChannel() {
|
|
75801
|
-
webChannelPromise ??= import("./web-
|
|
75877
|
+
webChannelPromise ??= import("./web-LUMjboLF.js");
|
|
75802
75878
|
return webChannelPromise;
|
|
75803
75879
|
}
|
|
75804
75880
|
function loadWhatsAppActions() {
|
|
@@ -78154,7 +78230,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
78154
78230
|
const provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
78155
78231
|
const modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
|
78156
78232
|
const fail = (reason) => {
|
|
78157
|
-
log$
|
|
78233
|
+
log$5.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}`);
|
|
78158
78234
|
return {
|
|
78159
78235
|
ok: false,
|
|
78160
78236
|
compacted: false,
|
|
@@ -78222,7 +78298,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
78222
78298
|
sessionId: params.sessionId,
|
|
78223
78299
|
warn: makeBootstrapWarn({
|
|
78224
78300
|
sessionLabel,
|
|
78225
|
-
warn: (message) => log$
|
|
78301
|
+
warn: (message) => log$5.warn(message)
|
|
78226
78302
|
})
|
|
78227
78303
|
});
|
|
78228
78304
|
const runAbortController = new AbortController();
|
|
@@ -78362,7 +78438,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
78362
78438
|
try {
|
|
78363
78439
|
await repairSessionFileIfNeeded({
|
|
78364
78440
|
sessionFile: params.sessionFile,
|
|
78365
|
-
warn: (message) => log$
|
|
78441
|
+
warn: (message) => log$5.warn(message)
|
|
78366
78442
|
});
|
|
78367
78443
|
await prewarmSessionFile(params.sessionFile);
|
|
78368
78444
|
const transcriptPolicy = resolveTranscriptPolicy({
|
|
@@ -78447,13 +78523,13 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
78447
78523
|
messages: preCompactionMessages,
|
|
78448
78524
|
sessionFile: params.sessionFile
|
|
78449
78525
|
}, hookCtx).catch((hookErr) => {
|
|
78450
|
-
log$
|
|
78526
|
+
log$5.warn(`before_compaction hook failed: ${String(hookErr)}`);
|
|
78451
78527
|
});
|
|
78452
|
-
const diagEnabled = log$
|
|
78528
|
+
const diagEnabled = log$5.isEnabled("debug");
|
|
78453
78529
|
const preMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
|
|
78454
78530
|
if (diagEnabled && preMetrics) {
|
|
78455
|
-
log$
|
|
78456
|
-
log$
|
|
78531
|
+
log$5.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"}`);
|
|
78532
|
+
log$5.debug(`[compaction-diag] contributors diagId=${diagId} top=${JSON.stringify(preMetrics.contributors)}`);
|
|
78457
78533
|
}
|
|
78458
78534
|
const compactStartedAt = Date.now();
|
|
78459
78535
|
const result = await compactWithSafetyTimeout(() => session.compact(params.customInstructions));
|
|
@@ -78471,10 +78547,10 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
78471
78547
|
compactedCount: limited.length - session.messages.length,
|
|
78472
78548
|
sessionFile: params.sessionFile
|
|
78473
78549
|
}, hookCtx).catch((hookErr) => {
|
|
78474
|
-
log$
|
|
78550
|
+
log$5.warn(`after_compaction hook failed: ${hookErr}`);
|
|
78475
78551
|
});
|
|
78476
78552
|
const postMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
|
|
78477
|
-
if (diagEnabled && preMetrics && postMetrics) log$
|
|
78553
|
+
if (diagEnabled && preMetrics && postMetrics) log$5.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"}`);
|
|
78478
78554
|
return {
|
|
78479
78555
|
ok: true,
|
|
78480
78556
|
compacted: true,
|