@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
|
@@ -10695,7 +10695,7 @@ function createRunRegistry(options) {
|
|
|
10695
10695
|
|
|
10696
10696
|
//#endregion
|
|
10697
10697
|
//#region src/process/supervisor/supervisor.ts
|
|
10698
|
-
const log$
|
|
10698
|
+
const log$8 = createSubsystemLogger("process/supervisor");
|
|
10699
10699
|
function clampTimeout(value) {
|
|
10700
10700
|
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) return;
|
|
10701
10701
|
return Math.max(1, Math.floor(value));
|
|
@@ -10881,7 +10881,7 @@ function createProcessSupervisor() {
|
|
|
10881
10881
|
exitCode: null,
|
|
10882
10882
|
exitSignal: null
|
|
10883
10883
|
});
|
|
10884
|
-
log$
|
|
10884
|
+
log$8.warn(`spawn failed: runId=${runId} reason=${String(err)}`);
|
|
10885
10885
|
throw err;
|
|
10886
10886
|
}
|
|
10887
10887
|
};
|
|
@@ -28903,7 +28903,7 @@ async function resolveAnnounceTarget(params) {
|
|
|
28903
28903
|
|
|
28904
28904
|
//#endregion
|
|
28905
28905
|
//#region src/agents/tools/sessions-send-tool.a2a.ts
|
|
28906
|
-
const log$
|
|
28906
|
+
const log$7 = createSubsystemLogger("agents/sessions-send");
|
|
28907
28907
|
async function runSessionsSendA2AFlow(params) {
|
|
28908
28908
|
const runContextId = params.waitRunId ?? "unknown";
|
|
28909
28909
|
try {
|
|
@@ -28994,7 +28994,7 @@ async function runSessionsSendA2AFlow(params) {
|
|
|
28994
28994
|
timeoutMs: 1e4
|
|
28995
28995
|
});
|
|
28996
28996
|
} catch (err) {
|
|
28997
|
-
log$
|
|
28997
|
+
log$7.warn("sessions_send announce delivery failed", {
|
|
28998
28998
|
runId: runContextId,
|
|
28999
28999
|
channel: announceTarget.channel,
|
|
29000
29000
|
to: announceTarget.to,
|
|
@@ -29002,7 +29002,7 @@ async function runSessionsSendA2AFlow(params) {
|
|
|
29002
29002
|
});
|
|
29003
29003
|
}
|
|
29004
29004
|
} catch (err) {
|
|
29005
|
-
log$
|
|
29005
|
+
log$7.warn("sessions_send announce flow failed", {
|
|
29006
29006
|
runId: runContextId,
|
|
29007
29007
|
error: formatErrorMessage(err)
|
|
29008
29008
|
});
|
|
@@ -32032,7 +32032,7 @@ function resolveRunWorkspaceDir(params) {
|
|
|
32032
32032
|
|
|
32033
32033
|
//#endregion
|
|
32034
32034
|
//#region src/agents/cli-runner.ts
|
|
32035
|
-
const log$
|
|
32035
|
+
const log$6 = createSubsystemLogger("agent/claude-cli");
|
|
32036
32036
|
async function runCliAgent(params) {
|
|
32037
32037
|
const started = Date.now();
|
|
32038
32038
|
const workspaceResolution = resolveRunWorkspaceDir({
|
|
@@ -32045,7 +32045,7 @@ async function runCliAgent(params) {
|
|
|
32045
32045
|
const redactedSessionId = redactRunIdentifier(params.sessionId);
|
|
32046
32046
|
const redactedSessionKey = redactRunIdentifier(params.sessionKey);
|
|
32047
32047
|
const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
|
|
32048
|
-
if (workspaceResolution.usedFallback) log$
|
|
32048
|
+
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}`);
|
|
32049
32049
|
const workspaceDir = resolvedWorkspace;
|
|
32050
32050
|
const backendResolved = resolveCliBackendConfig(params.provider, params.config);
|
|
32051
32051
|
if (!backendResolved) throw new Error(`Unknown CLI backend: ${params.provider}`);
|
|
@@ -32062,7 +32062,7 @@ async function runCliAgent(params) {
|
|
|
32062
32062
|
sessionId: params.sessionId,
|
|
32063
32063
|
warn: makeBootstrapWarn({
|
|
32064
32064
|
sessionLabel,
|
|
32065
|
-
warn: (message) => log$
|
|
32065
|
+
warn: (message) => log$6.warn(message)
|
|
32066
32066
|
})
|
|
32067
32067
|
});
|
|
32068
32068
|
const { defaultAgentId, sessionAgentId } = resolveSessionAgentIds({
|
|
@@ -32128,7 +32128,7 @@ async function runCliAgent(params) {
|
|
|
32128
32128
|
const queueKey = backend.serialize ?? true ? backendResolved.id : `${backendResolved.id}:${params.runId}`;
|
|
32129
32129
|
try {
|
|
32130
32130
|
const output = await enqueueCliRun(queueKey, async () => {
|
|
32131
|
-
log$
|
|
32131
|
+
log$6.info(`cli exec: provider=${params.provider} model=${normalizedModel} promptChars=${params.prompt.length}`);
|
|
32132
32132
|
const logOutputText = isTruthyEnvValue(process.env.SYMI_CLAUDE_CLI_LOG_OUTPUT);
|
|
32133
32133
|
if (logOutputText) {
|
|
32134
32134
|
const logArgs = [];
|
|
@@ -32161,7 +32161,7 @@ async function runCliAgent(params) {
|
|
|
32161
32161
|
const promptIndex = logArgs.indexOf(argsPrompt);
|
|
32162
32162
|
if (promptIndex >= 0) logArgs[promptIndex] = `<prompt:${argsPrompt.length} chars>`;
|
|
32163
32163
|
}
|
|
32164
|
-
log$
|
|
32164
|
+
log$6.info(`cli argv: ${backend.command} ${logArgs.join(" ")}`);
|
|
32165
32165
|
}
|
|
32166
32166
|
const env = (() => {
|
|
32167
32167
|
const next = {
|
|
@@ -32199,17 +32199,17 @@ async function runCliAgent(params) {
|
|
|
32199
32199
|
const stdout = result.stdout.trim();
|
|
32200
32200
|
const stderr = result.stderr.trim();
|
|
32201
32201
|
if (logOutputText) {
|
|
32202
|
-
if (stdout) log$
|
|
32203
|
-
if (stderr) log$
|
|
32202
|
+
if (stdout) log$6.info(`cli stdout:\n${stdout}`);
|
|
32203
|
+
if (stderr) log$6.info(`cli stderr:\n${stderr}`);
|
|
32204
32204
|
}
|
|
32205
32205
|
if (shouldLogVerbose()) {
|
|
32206
|
-
if (stdout) log$
|
|
32207
|
-
if (stderr) log$
|
|
32206
|
+
if (stdout) log$6.debug(`cli stdout:\n${stdout}`);
|
|
32207
|
+
if (stderr) log$6.debug(`cli stderr:\n${stderr}`);
|
|
32208
32208
|
}
|
|
32209
32209
|
if (result.exitCode !== 0 || result.reason !== "exit") {
|
|
32210
32210
|
if (result.reason === "no-output-timeout" || result.noOutputTimedOut) {
|
|
32211
32211
|
const timeoutReason = `CLI produced no output for ${Math.round(noOutputTimeoutMs / 1e3)}s and was terminated.`;
|
|
32212
|
-
log$
|
|
32212
|
+
log$6.warn(`cli watchdog timeout: provider=${params.provider} model=${modelId} session=${cliSessionIdToSend ?? params.sessionId} noOutputTimeoutMs=${noOutputTimeoutMs} pid=${managedRun.pid ?? "unknown"}`);
|
|
32213
32213
|
throw new FailoverError(timeoutReason, {
|
|
32214
32214
|
reason: "timeout",
|
|
32215
32215
|
provider: params.provider,
|
|
@@ -32528,7 +32528,7 @@ function resolveEmbeddedSessionLane(key) {
|
|
|
32528
32528
|
|
|
32529
32529
|
//#endregion
|
|
32530
32530
|
//#region src/agents/pi-embedded-runner/logger.ts
|
|
32531
|
-
const log$
|
|
32531
|
+
const log$5 = createSubsystemLogger("agent/embedded");
|
|
32532
32532
|
|
|
32533
32533
|
//#endregion
|
|
32534
32534
|
//#region src/utils/safe-json.ts
|
|
@@ -32574,7 +32574,7 @@ function getQueuedFileWriter(writers, filePath) {
|
|
|
32574
32574
|
//#endregion
|
|
32575
32575
|
//#region src/agents/anthropic-payload-log.ts
|
|
32576
32576
|
const writers$1 = /* @__PURE__ */ new Map();
|
|
32577
|
-
const log$
|
|
32577
|
+
const log$4 = createSubsystemLogger("agent/anthropic-payload");
|
|
32578
32578
|
function resolvePayloadLogConfig(env) {
|
|
32579
32579
|
const enabled = parseBooleanValue$1(env.SYMI_ANTHROPIC_PAYLOAD_LOG) ?? false;
|
|
32580
32580
|
const fileOverride = env.SYMI_ANTHROPIC_PAYLOAD_LOG_FILE?.trim();
|
|
@@ -32664,13 +32664,13 @@ function createAnthropicPayloadLogger(params) {
|
|
|
32664
32664
|
usage,
|
|
32665
32665
|
error: errorMessage
|
|
32666
32666
|
});
|
|
32667
|
-
log$
|
|
32667
|
+
log$4.info("anthropic usage", {
|
|
32668
32668
|
runId: params.runId,
|
|
32669
32669
|
sessionId: params.sessionId,
|
|
32670
32670
|
usage
|
|
32671
32671
|
});
|
|
32672
32672
|
};
|
|
32673
|
-
log$
|
|
32673
|
+
log$4.info("anthropic payload logger enabled", { filePath: writer.filePath });
|
|
32674
32674
|
return {
|
|
32675
32675
|
enabled: true,
|
|
32676
32676
|
wrapStreamFn,
|
|
@@ -34762,7 +34762,7 @@ function createEmbeddedPiSessionEventHandler(ctx) {
|
|
|
34762
34762
|
//#region src/agents/pi-embedded-subscribe.ts
|
|
34763
34763
|
const THINKING_TAG_SCAN_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\s*>/gi;
|
|
34764
34764
|
const FINAL_TAG_SCAN_RE = /<\s*(\/?)\s*final\s*>/gi;
|
|
34765
|
-
const log$
|
|
34765
|
+
const log$3 = createSubsystemLogger("agent/embedded");
|
|
34766
34766
|
function subscribeEmbeddedPiSession(params) {
|
|
34767
34767
|
const reasoningMode = params.reasoningMode ?? "off";
|
|
34768
34768
|
const useMarkdown = (params.toolResultFormat ?? "markdown") === "markdown";
|
|
@@ -34919,7 +34919,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
34919
34919
|
state.compactionRetryReject = reject;
|
|
34920
34920
|
});
|
|
34921
34921
|
state.compactionRetryPromise.catch((err) => {
|
|
34922
|
-
log$
|
|
34922
|
+
log$3.debug(`compaction promise rejected (no waiter): ${String(err)}`);
|
|
34923
34923
|
});
|
|
34924
34924
|
}
|
|
34925
34925
|
};
|
|
@@ -35071,7 +35071,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
35071
35071
|
if (!chunk) return;
|
|
35072
35072
|
if (chunk === state.lastBlockReplyText) return;
|
|
35073
35073
|
if (isMessagingToolDuplicateNormalized(normalizeTextForComparison(chunk), messagingToolSentTextsNormalized)) {
|
|
35074
|
-
log$
|
|
35074
|
+
log$3.debug(`Skipping block reply - already sent via messaging tool: ${chunk.slice(0, 50)}...`);
|
|
35075
35075
|
return;
|
|
35076
35076
|
}
|
|
35077
35077
|
if (shouldSkipAssistantText(chunk)) return;
|
|
@@ -35149,7 +35149,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
35149
35149
|
const ctx = {
|
|
35150
35150
|
params,
|
|
35151
35151
|
state,
|
|
35152
|
-
log: log$
|
|
35152
|
+
log: log$3,
|
|
35153
35153
|
blockChunking,
|
|
35154
35154
|
blockChunker,
|
|
35155
35155
|
hookRunner: params.hookRunner,
|
|
@@ -35182,7 +35182,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
35182
35182
|
if (state.unsubscribed) return;
|
|
35183
35183
|
state.unsubscribed = true;
|
|
35184
35184
|
if (state.compactionRetryPromise) {
|
|
35185
|
-
log$
|
|
35185
|
+
log$3.debug(`unsubscribe: rejecting compaction wait runId=${params.runId}`);
|
|
35186
35186
|
const reject = state.compactionRetryReject;
|
|
35187
35187
|
state.compactionRetryResolve = void 0;
|
|
35188
35188
|
state.compactionRetryReject = void 0;
|
|
@@ -35192,11 +35192,11 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
35192
35192
|
reject?.(abortErr);
|
|
35193
35193
|
}
|
|
35194
35194
|
if (params.session.isCompacting) {
|
|
35195
|
-
log$
|
|
35195
|
+
log$3.debug(`unsubscribe: aborting in-flight compaction runId=${params.runId}`);
|
|
35196
35196
|
try {
|
|
35197
35197
|
params.session.abortCompaction();
|
|
35198
35198
|
} catch (err) {
|
|
35199
|
-
log$
|
|
35199
|
+
log$3.warn(`unsubscribe: compaction abort failed runId=${params.runId} err=${String(err)}`);
|
|
35200
35200
|
}
|
|
35201
35201
|
}
|
|
35202
35202
|
sessionUnsubscribe();
|
|
@@ -35245,7 +35245,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
35245
35245
|
|
|
35246
35246
|
//#endregion
|
|
35247
35247
|
//#region src/agents/pi-tools.before-tool-call.ts
|
|
35248
|
-
const log$
|
|
35248
|
+
const log$2 = createSubsystemLogger("agents/tools");
|
|
35249
35249
|
const BEFORE_TOOL_CALL_WRAPPED = Symbol("beforeToolCallWrapped");
|
|
35250
35250
|
const adjustedParamsByToolCallId = /* @__PURE__ */ new Map();
|
|
35251
35251
|
const MAX_TRACKED_ADJUSTED_PARAMS = 1024;
|
|
@@ -35279,7 +35279,7 @@ async function recordLoopOutcome(args) {
|
|
|
35279
35279
|
config: args.ctx.loopDetection
|
|
35280
35280
|
});
|
|
35281
35281
|
} catch (err) {
|
|
35282
|
-
log$
|
|
35282
|
+
log$2.warn(`tool loop outcome tracking failed: tool=${args.toolName} error=${String(err)}`);
|
|
35283
35283
|
}
|
|
35284
35284
|
}
|
|
35285
35285
|
async function runBeforeToolCallHook(args) {
|
|
@@ -35296,7 +35296,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
35296
35296
|
const loopResult = detectToolCallLoop(sessionState, toolName, params, args.ctx.loopDetection);
|
|
35297
35297
|
if (loopResult.stuck) {
|
|
35298
35298
|
if (loopResult.level === "critical") {
|
|
35299
|
-
log$
|
|
35299
|
+
log$2.error(`Blocking ${toolName} due to critical loop: ${loopResult.message}`);
|
|
35300
35300
|
logToolLoopAction({
|
|
35301
35301
|
sessionKey: args.ctx.sessionKey,
|
|
35302
35302
|
sessionId: args.ctx?.agentId,
|
|
@@ -35313,7 +35313,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
35313
35313
|
reason: loopResult.message
|
|
35314
35314
|
};
|
|
35315
35315
|
} else if (shouldEmitLoopWarning(sessionState, loopResult.warningKey ?? `${loopResult.detector}:${toolName}`, loopResult.count)) {
|
|
35316
|
-
log$
|
|
35316
|
+
log$2.warn(`Loop warning for ${toolName}: ${loopResult.message}`);
|
|
35317
35317
|
logToolLoopAction({
|
|
35318
35318
|
sessionKey: args.ctx.sessionKey,
|
|
35319
35319
|
sessionId: args.ctx?.agentId,
|
|
@@ -35363,7 +35363,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
35363
35363
|
}
|
|
35364
35364
|
} catch (err) {
|
|
35365
35365
|
const toolCallId = args.toolCallId ? ` toolCallId=${args.toolCallId}` : "";
|
|
35366
|
-
log$
|
|
35366
|
+
log$2.warn(`before_tool_call hook failed: tool=${toolName}${toolCallId} error=${String(err)}`);
|
|
35367
35367
|
}
|
|
35368
35368
|
return {
|
|
35369
35369
|
blocked: false,
|
|
@@ -35607,6 +35607,7 @@ function validateShellCommand(command) {
|
|
|
35607
35607
|
|
|
35608
35608
|
//#endregion
|
|
35609
35609
|
//#region src/agents/pi-tools.validate-wrapper.ts
|
|
35610
|
+
const log$1 = createSubsystemLogger("agents/tool-validate");
|
|
35610
35611
|
const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
|
|
35611
35612
|
const FILE_TOOL_NAMES = new Set([
|
|
35612
35613
|
"write",
|
|
@@ -35665,13 +35666,22 @@ function wrapToolWithArgValidation(tool) {
|
|
|
35665
35666
|
execute(toolCallId, params, ...rest) {
|
|
35666
35667
|
if (isExecTool) {
|
|
35667
35668
|
const command = params.command ?? params.cmd;
|
|
35668
|
-
if (typeof command !== "string")
|
|
35669
|
+
if (typeof command !== "string") {
|
|
35670
|
+
log$1.debug(`[validate] exec called without string command: keys=${Object.keys(params).join(",")}`);
|
|
35671
|
+
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
35672
|
+
}
|
|
35669
35673
|
const result = validateShellCommand(command);
|
|
35670
|
-
if (!result.valid)
|
|
35671
|
-
|
|
35672
|
-
|
|
35673
|
-
|
|
35674
|
-
|
|
35674
|
+
if (!result.valid) {
|
|
35675
|
+
log$1.warn(`[validate] exec command rejected: reason=${result.reason} raw=${command.slice(0, 100)}`);
|
|
35676
|
+
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.` });
|
|
35677
|
+
}
|
|
35678
|
+
if (result.cleaned !== command) {
|
|
35679
|
+
log$1.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
|
|
35680
|
+
return originalExecute.call(tool, toolCallId, {
|
|
35681
|
+
...params,
|
|
35682
|
+
command: result.cleaned
|
|
35683
|
+
}, ...rest);
|
|
35684
|
+
}
|
|
35675
35685
|
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
35676
35686
|
}
|
|
35677
35687
|
const pathKey = FILE_PATH_KEYS.find((k) => typeof params[k] === "string");
|
|
@@ -36042,7 +36052,7 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
36042
36052
|
const textLength = getToolResultTextLength(msg);
|
|
36043
36053
|
if (textLength > maxChars) {
|
|
36044
36054
|
oversizedIndices.push(i);
|
|
36045
|
-
log$
|
|
36055
|
+
log$5.info(`[tool-result-truncation] Found oversized tool result: entry=${entry.id} chars=${textLength} maxChars=${maxChars} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
36046
36056
|
}
|
|
36047
36057
|
}
|
|
36048
36058
|
if (oversizedIndices.length === 0) return {
|
|
@@ -36064,7 +36074,7 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
36064
36074
|
message = truncateToolResultMessage(message, maxChars);
|
|
36065
36075
|
truncatedCount++;
|
|
36066
36076
|
const newLength = getToolResultTextLength(message);
|
|
36067
|
-
log$
|
|
36077
|
+
log$5.info(`[tool-result-truncation] Truncated tool result: originalEntry=${entry.id} newChars=${newLength} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
36068
36078
|
}
|
|
36069
36079
|
sessionManager.appendMessage(message);
|
|
36070
36080
|
} else if (entry.type === "compaction") sessionManager.appendCompaction(entry.summary, entry.firstKeptEntryId, entry.tokensBefore, entry.details, entry.fromHook);
|
|
@@ -36078,14 +36088,14 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
36078
36088
|
if (entry.name) sessionManager.appendSessionInfo(entry.name);
|
|
36079
36089
|
}
|
|
36080
36090
|
}
|
|
36081
|
-
log$
|
|
36091
|
+
log$5.info(`[tool-result-truncation] Truncated ${truncatedCount} tool result(s) in session (contextWindow=${contextWindowTokens} maxChars=${maxChars}) sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
36082
36092
|
return {
|
|
36083
36093
|
truncated: true,
|
|
36084
36094
|
truncatedCount
|
|
36085
36095
|
};
|
|
36086
36096
|
} catch (err) {
|
|
36087
36097
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
36088
|
-
log$
|
|
36098
|
+
log$5.warn(`[tool-result-truncation] Failed to truncate: ${errMsg}`);
|
|
36089
36099
|
return {
|
|
36090
36100
|
truncated: false,
|
|
36091
36101
|
truncatedCount: 0,
|
|
@@ -37743,7 +37753,7 @@ function resolveAnthropicBetas(extraParams, provider, modelId) {
|
|
|
37743
37753
|
for (const beta of configured) if (typeof beta === "string" && beta.trim()) betas.add(beta.trim());
|
|
37744
37754
|
}
|
|
37745
37755
|
if (extraParams?.context1m === true) if (isAnthropic1MModel(modelId)) betas.add(ANTHROPIC_CONTEXT_1M_BETA);
|
|
37746
|
-
else log$
|
|
37756
|
+
else log$5.warn(`ignoring context1m for non-opus/sonnet model: ${provider}/${modelId}`);
|
|
37747
37757
|
return betas.size > 0 ? [...betas] : void 0;
|
|
37748
37758
|
}
|
|
37749
37759
|
function mergeAnthropicBetaHeader(headers, betas) {
|
|
@@ -38354,14 +38364,14 @@ function logToolSchemasForGoogle(params) {
|
|
|
38354
38364
|
if (params.provider !== "google-antigravity" && params.provider !== "google-gemini-cli") return;
|
|
38355
38365
|
const toolNames = params.tools.map((tool, index) => `${index}:${tool.name}`);
|
|
38356
38366
|
const tools = sanitizeToolsForGoogle(params);
|
|
38357
|
-
log$
|
|
38367
|
+
log$5.info("google tool schema snapshot", {
|
|
38358
38368
|
provider: params.provider,
|
|
38359
38369
|
toolCount: tools.length,
|
|
38360
38370
|
tools: toolNames
|
|
38361
38371
|
});
|
|
38362
38372
|
for (const [index, tool] of tools.entries()) {
|
|
38363
38373
|
const violations = findUnsupportedSchemaKeywords(tool.parameters, `${tool.name}.parameters`);
|
|
38364
|
-
if (violations.length > 0) log$
|
|
38374
|
+
if (violations.length > 0) log$5.warn("google tool schema has unsupported keywords", {
|
|
38365
38375
|
index,
|
|
38366
38376
|
tool: tool.name,
|
|
38367
38377
|
violations: violations.slice(0, 12),
|
|
@@ -38373,7 +38383,7 @@ const compactionFailureEmitter = new EventEmitter();
|
|
|
38373
38383
|
registerUnhandledRejectionHandler((reason) => {
|
|
38374
38384
|
const message = describeUnknownError(reason);
|
|
38375
38385
|
if (!isCompactionFailureError(message)) return false;
|
|
38376
|
-
log$
|
|
38386
|
+
log$5.error(`Auto-compaction failed (unhandled): ${message}`);
|
|
38377
38387
|
compactionFailureEmitter.emit("failure", message);
|
|
38378
38388
|
return true;
|
|
38379
38389
|
});
|
|
@@ -38425,7 +38435,7 @@ function applyGoogleTurnOrderingFix(params) {
|
|
|
38425
38435
|
const sanitized = sanitizeGoogleTurnOrdering(params.messages);
|
|
38426
38436
|
const didPrepend = sanitized !== params.messages;
|
|
38427
38437
|
if (didPrepend && !hasGoogleTurnOrderingMarker(params.sessionManager)) {
|
|
38428
|
-
(params.warn ?? ((message) => log$
|
|
38438
|
+
(params.warn ?? ((message) => log$5.warn(message)))(`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`);
|
|
38429
38439
|
markGoogleTurnOrderingMarker(params.sessionManager);
|
|
38430
38440
|
}
|
|
38431
38441
|
return {
|
|
@@ -39036,7 +39046,7 @@ function isImageExtension(filePath) {
|
|
|
39036
39046
|
}
|
|
39037
39047
|
async function sanitizeImagesWithLog(images, label, imageSanitization) {
|
|
39038
39048
|
const { images: sanitized, dropped } = await sanitizeImageBlocks(images, label, imageSanitization);
|
|
39039
|
-
if (dropped > 0) log$
|
|
39049
|
+
if (dropped > 0) log$5.warn(`Native image: dropped ${dropped} image(s) after sanitization (${label}).`);
|
|
39040
39050
|
return sanitized;
|
|
39041
39051
|
}
|
|
39042
39052
|
/**
|
|
@@ -39111,7 +39121,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
39111
39121
|
try {
|
|
39112
39122
|
let targetPath = ref.resolved;
|
|
39113
39123
|
if (ref.type === "url") {
|
|
39114
|
-
log$
|
|
39124
|
+
log$5.debug(`Native image: rejecting remote URL (local-only): ${ref.resolved}`);
|
|
39115
39125
|
return null;
|
|
39116
39126
|
}
|
|
39117
39127
|
if (ref.type === "path") {
|
|
@@ -39121,7 +39131,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
39121
39131
|
cwd: options.sandbox.root
|
|
39122
39132
|
}).hostPath;
|
|
39123
39133
|
} catch (err) {
|
|
39124
|
-
log$
|
|
39134
|
+
log$5.debug(`Native image: sandbox validation failed for ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
39125
39135
|
return null;
|
|
39126
39136
|
}
|
|
39127
39137
|
else if (!path.isAbsolute(targetPath)) targetPath = path.resolve(workspaceDir, targetPath);
|
|
@@ -39135,7 +39145,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
39135
39145
|
})
|
|
39136
39146
|
}) : await loadWebMedia(targetPath, options?.maxBytes);
|
|
39137
39147
|
if (media.kind !== "image") {
|
|
39138
|
-
log$
|
|
39148
|
+
log$5.debug(`Native image: not an image file: ${targetPath} (got ${media.kind})`);
|
|
39139
39149
|
return null;
|
|
39140
39150
|
}
|
|
39141
39151
|
const mimeType = media.contentType ?? "image/jpeg";
|
|
@@ -39145,7 +39155,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
39145
39155
|
mimeType
|
|
39146
39156
|
};
|
|
39147
39157
|
} catch (err) {
|
|
39148
|
-
log$
|
|
39158
|
+
log$5.debug(`Native image: failed to load ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
39149
39159
|
return null;
|
|
39150
39160
|
}
|
|
39151
39161
|
}
|
|
@@ -39244,7 +39254,7 @@ async function detectAndLoadPromptImages(params) {
|
|
|
39244
39254
|
loadedCount: 0,
|
|
39245
39255
|
skippedCount: 0
|
|
39246
39256
|
};
|
|
39247
|
-
log$
|
|
39257
|
+
log$5.debug(`Native image: detected ${allRefs.length} image refs (${promptRefs.length} in prompt, ${uniqueHistoryRefs.length} in history)`);
|
|
39248
39258
|
const promptImages = [...params.existingImages ?? []];
|
|
39249
39259
|
const historyImagesByIndex = /* @__PURE__ */ new Map();
|
|
39250
39260
|
let loadedCount = 0;
|
|
@@ -39261,7 +39271,7 @@ async function detectAndLoadPromptImages(params) {
|
|
|
39261
39271
|
else historyImagesByIndex.set(ref.messageIndex, [image]);
|
|
39262
39272
|
} else promptImages.push(image);
|
|
39263
39273
|
loadedCount++;
|
|
39264
|
-
log$
|
|
39274
|
+
log$5.debug(`Native image: loaded ${ref.type} ${ref.resolved}`);
|
|
39265
39275
|
} else skippedCount++;
|
|
39266
39276
|
}
|
|
39267
39277
|
const imageSanitization = { maxDimensionPx: params.maxDimensionPx };
|
|
@@ -39357,7 +39367,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
39357
39367
|
const resolvedWorkspace = resolveUserPath(params.workspaceDir);
|
|
39358
39368
|
const prevCwd = process.cwd();
|
|
39359
39369
|
const runAbortController = new AbortController();
|
|
39360
|
-
log$
|
|
39370
|
+
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"}`);
|
|
39361
39371
|
await fs$1.mkdir(resolvedWorkspace, { recursive: true });
|
|
39362
39372
|
const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
|
|
39363
39373
|
const sandbox = await resolveSandboxContext({
|
|
@@ -39393,7 +39403,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
39393
39403
|
sessionId: params.sessionId,
|
|
39394
39404
|
warn: makeBootstrapWarn({
|
|
39395
39405
|
sessionLabel,
|
|
39396
|
-
warn: (message) => log$
|
|
39406
|
+
warn: (message) => log$5.warn(message)
|
|
39397
39407
|
})
|
|
39398
39408
|
});
|
|
39399
39409
|
const workspaceNotes = hookAdjustedBootstrapFiles.some((file) => file.name === DEFAULT_BOOTSTRAP_FILENAME && !file.missing) ? ["Reminder: commit your changes in this workspace after edits."] : void 0;
|
|
@@ -39592,7 +39602,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
39592
39602
|
try {
|
|
39593
39603
|
await repairSessionFileIfNeeded({
|
|
39594
39604
|
sessionFile: params.sessionFile,
|
|
39595
|
-
warn: (message) => log$
|
|
39605
|
+
warn: (message) => log$5.warn(message)
|
|
39596
39606
|
});
|
|
39597
39607
|
const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
|
|
39598
39608
|
const transcriptPolicy = resolveTranscriptPolicy({
|
|
@@ -39601,7 +39611,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
39601
39611
|
modelId: params.modelId
|
|
39602
39612
|
});
|
|
39603
39613
|
const versionCheck = await handleSessionVersion(params.sessionFile);
|
|
39604
|
-
if (versionCheck.archived) log$
|
|
39614
|
+
if (versionCheck.archived) log$5.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
|
|
39605
39615
|
await prewarmSessionFile(params.sessionFile);
|
|
39606
39616
|
sessionManager = guardSessionManager(SessionManager.open(params.sessionFile), {
|
|
39607
39617
|
agentId: sessionAgentId,
|
|
@@ -39856,7 +39866,6 @@ async function runEmbeddedAttempt(params) {
|
|
|
39856
39866
|
const TOOL_ERROR_ABORT_THRESHOLD = 5;
|
|
39857
39867
|
const TOOL_ERROR_WARN_THRESHOLD = 3;
|
|
39858
39868
|
let consecutiveToolErrors = 0;
|
|
39859
|
-
let lastErrorToolName = "";
|
|
39860
39869
|
const subscription = subscribeEmbeddedPiSession({
|
|
39861
39870
|
session: activeSession,
|
|
39862
39871
|
runId: params.runId,
|
|
@@ -39880,26 +39889,23 @@ async function runEmbeddedAttempt(params) {
|
|
|
39880
39889
|
params.onAgentEvent?.(evt);
|
|
39881
39890
|
if (evt.stream === "tool" && !aborted) {
|
|
39882
39891
|
const phase = typeof evt.data?.phase === "string" ? evt.data.phase : "";
|
|
39883
|
-
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "";
|
|
39884
39892
|
const isError = evt.data?.isError === true;
|
|
39885
|
-
if (phase === "result"
|
|
39886
|
-
if (isError
|
|
39887
|
-
else
|
|
39888
|
-
consecutiveToolErrors = 1;
|
|
39889
|
-
lastErrorToolName = toolName;
|
|
39890
|
-
} else {
|
|
39891
|
-
consecutiveToolErrors = 0;
|
|
39892
|
-
lastErrorToolName = "";
|
|
39893
|
-
}
|
|
39893
|
+
if (phase === "result") {
|
|
39894
|
+
if (isError) consecutiveToolErrors++;
|
|
39895
|
+
else consecutiveToolErrors = 0;
|
|
39894
39896
|
if (consecutiveToolErrors >= TOOL_ERROR_ABORT_THRESHOLD) {
|
|
39895
|
-
|
|
39896
|
-
|
|
39897
|
-
|
|
39897
|
+
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
|
|
39898
|
+
log$5.error(`Agent-loop circuit breaker: ${consecutiveToolErrors} consecutive tool errors (last: ${toolName}). Aborting run ${params.runId}.`);
|
|
39899
|
+
abortRun(false, /* @__PURE__ */ new Error(`${consecutiveToolErrors} consecutive tool errors. The model may be generating corrupted tool arguments. Run aborted to prevent infinite loop.`));
|
|
39900
|
+
} else if (consecutiveToolErrors === TOOL_ERROR_WARN_THRESHOLD) {
|
|
39901
|
+
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
|
|
39902
|
+
log$5.warn(`Agent-loop tool error warning: ${consecutiveToolErrors} consecutive failures (last: ${toolName}). runId=${params.runId}`);
|
|
39903
|
+
}
|
|
39898
39904
|
}
|
|
39899
39905
|
}
|
|
39900
39906
|
if (evt.stream === "assistant" && typeof evt.data?.text === "string" && !aborted) {
|
|
39901
39907
|
streamMonitor.onChunk(evt.data.text);
|
|
39902
|
-
if (streamMonitor.shouldStop()) log$
|
|
39908
|
+
if (streamMonitor.shouldStop()) log$5.debug(`stream monitor detection (log-only, no abort): runId=${params.runId} reason=${streamMonitor.getStopReason()}`);
|
|
39903
39909
|
}
|
|
39904
39910
|
},
|
|
39905
39911
|
enforceFinalTag: params.enforceFinalTag,
|
|
@@ -39919,7 +39925,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
39919
39925
|
let abortWarnTimer;
|
|
39920
39926
|
const isProbeSession = params.sessionId?.startsWith("probe-") ?? false;
|
|
39921
39927
|
const abortTimer = setTimeout(() => {
|
|
39922
|
-
if (!isProbeSession) log$
|
|
39928
|
+
if (!isProbeSession) log$5.warn(`embedded run timeout: runId=${params.runId} sessionId=${params.sessionId} timeoutMs=${params.timeoutMs}`);
|
|
39923
39929
|
if (shouldFlagCompactionTimeout({
|
|
39924
39930
|
isTimeout: true,
|
|
39925
39931
|
isCompactionPendingOrRetrying: subscription.isCompacting(),
|
|
@@ -39928,7 +39934,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
39928
39934
|
abortRun(true);
|
|
39929
39935
|
if (!abortWarnTimer) abortWarnTimer = setTimeout(() => {
|
|
39930
39936
|
if (!activeSession.isStreaming) return;
|
|
39931
|
-
if (!isProbeSession) log$
|
|
39937
|
+
if (!isProbeSession) log$5.warn(`embedded run abort still streaming: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
39932
39938
|
}, 1e4);
|
|
39933
39939
|
}, Math.max(1, params.timeoutMs));
|
|
39934
39940
|
armSymipulseTimer = () => {
|
|
@@ -39936,7 +39942,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
39936
39942
|
clearSymipulseTimer();
|
|
39937
39943
|
symipulseTimer = setTimeout(() => {
|
|
39938
39944
|
if (aborted) return;
|
|
39939
|
-
if (!isProbeSession) log$
|
|
39945
|
+
if (!isProbeSession) log$5.warn(`symipulse timeout: runId=${params.runId} sessionId=${params.sessionId} symipulseMs=${symipulseMs} (no activity)`);
|
|
39940
39946
|
if (shouldFlagCompactionTimeout({
|
|
39941
39947
|
isTimeout: true,
|
|
39942
39948
|
isCompactionPendingOrRetrying: subscription.isCompacting(),
|
|
@@ -39980,13 +39986,13 @@ async function runEmbeddedAttempt(params) {
|
|
|
39980
39986
|
prompt: params.prompt,
|
|
39981
39987
|
messages: activeSession.messages
|
|
39982
39988
|
}, hookCtx).catch((hookErr) => {
|
|
39983
|
-
log$
|
|
39989
|
+
log$5.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
|
|
39984
39990
|
}) : void 0;
|
|
39985
39991
|
const legacyResult = hookRunner?.hasHooks("before_agent_start") ? await hookRunner.runBeforeAgentStart({
|
|
39986
39992
|
prompt: params.prompt,
|
|
39987
39993
|
messages: activeSession.messages
|
|
39988
39994
|
}, hookCtx).catch((hookErr) => {
|
|
39989
|
-
log$
|
|
39995
|
+
log$5.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
|
|
39990
39996
|
}) : void 0;
|
|
39991
39997
|
const hookResult = {
|
|
39992
39998
|
systemPrompt: promptBuildResult?.systemPrompt ?? legacyResult?.systemPrompt,
|
|
@@ -39994,7 +40000,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
39994
40000
|
};
|
|
39995
40001
|
if (hookResult?.prependContext) {
|
|
39996
40002
|
effectivePrompt = `${hookResult.prependContext}\n\n${params.prompt}`;
|
|
39997
|
-
log$
|
|
40003
|
+
log$5.debug(`hooks: prepended context to prompt (${hookResult.prependContext.length} chars)`);
|
|
39998
40004
|
}
|
|
39999
40005
|
{
|
|
40000
40006
|
const autoRecallAgentId = normalizeAgentId(params.sessionKey);
|
|
@@ -40011,11 +40017,11 @@ async function runEmbeddedAttempt(params) {
|
|
|
40011
40017
|
if (recallResults.length > 0) {
|
|
40012
40018
|
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>`;
|
|
40013
40019
|
effectivePrompt = `${recallBlock}\n\n${effectivePrompt}`;
|
|
40014
|
-
log$
|
|
40020
|
+
log$5.debug(`auto-recall: injected ${recallResults.length} snippets (${recallBlock.length} chars)`);
|
|
40015
40021
|
}
|
|
40016
40022
|
}
|
|
40017
40023
|
} catch (recallErr) {
|
|
40018
|
-
log$
|
|
40024
|
+
log$5.debug(`auto-recall: skipped (${String(recallErr)})`);
|
|
40019
40025
|
}
|
|
40020
40026
|
}
|
|
40021
40027
|
{
|
|
@@ -40027,10 +40033,10 @@ async function runEmbeddedAttempt(params) {
|
|
|
40027
40033
|
if (planResult.enter) {
|
|
40028
40034
|
if (planResult.stripped != null) effectivePrompt = planResult.stripped;
|
|
40029
40035
|
effectivePrompt = `${PLAN_MODE_SYSTEM_PROMPT}\n\n${effectivePrompt}`;
|
|
40030
|
-
log$
|
|
40036
|
+
log$5.info(`plan-mode: activated (${planResult.reason}) for runId=${params.runId}`);
|
|
40031
40037
|
} else if (planResult.stripped != null) effectivePrompt = planResult.stripped;
|
|
40032
40038
|
}
|
|
40033
|
-
log$
|
|
40039
|
+
log$5.debug(`embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
40034
40040
|
cacheTrace?.recordStage("prompt:before", {
|
|
40035
40041
|
prompt: effectivePrompt,
|
|
40036
40042
|
messages: activeSession.messages
|
|
@@ -40042,7 +40048,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
40042
40048
|
const sessionContext = sessionManager.buildSessionContext();
|
|
40043
40049
|
const sanitizedOrphan = transcriptPolicy.sanitizeThinkingSignatures ? sanitizeAntigravityThinkingBlocks(sessionContext.messages) : sessionContext.messages;
|
|
40044
40050
|
activeSession.agent.replaceMessages(sanitizedOrphan);
|
|
40045
|
-
log$
|
|
40051
|
+
log$5.warn(`Removed orphaned user message to prevent consecutive user turns. runId=${params.runId} sessionId=${params.sessionId}`);
|
|
40046
40052
|
}
|
|
40047
40053
|
try {
|
|
40048
40054
|
const imageResult = await detectAndLoadPromptImages({
|
|
@@ -40064,12 +40070,12 @@ async function runEmbeddedAttempt(params) {
|
|
|
40064
40070
|
messages: activeSession.messages,
|
|
40065
40071
|
note: `images: prompt=${imageResult.images.length} history=${imageResult.historyImagesByIndex.size}`
|
|
40066
40072
|
});
|
|
40067
|
-
if (log$
|
|
40073
|
+
if (log$5.isEnabled("debug")) {
|
|
40068
40074
|
const msgCount = activeSession.messages.length;
|
|
40069
40075
|
const systemLen = systemPromptText?.length ?? 0;
|
|
40070
40076
|
const promptLen = effectivePrompt.length;
|
|
40071
40077
|
const sessionSummary = summarizeSessionContext(activeSession.messages);
|
|
40072
|
-
log$
|
|
40078
|
+
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}`);
|
|
40073
40079
|
}
|
|
40074
40080
|
if (hookRunner?.hasHooks("llm_input")) hookRunner.runLlmInput({
|
|
40075
40081
|
runId: params.runId,
|
|
@@ -40087,7 +40093,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
40087
40093
|
workspaceDir: params.workspaceDir,
|
|
40088
40094
|
messageProvider: params.messageProvider ?? void 0
|
|
40089
40095
|
}).catch((err) => {
|
|
40090
|
-
log$
|
|
40096
|
+
log$5.warn(`llm_input hook failed: ${String(err)}`);
|
|
40091
40097
|
});
|
|
40092
40098
|
if (imageResult.images.length > 0) await abortable(activeSession.prompt(effectivePrompt, { images: imageResult.images }));
|
|
40093
40099
|
else await abortable(activeSession.prompt(effectivePrompt));
|
|
@@ -40095,7 +40101,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
40095
40101
|
promptError = err;
|
|
40096
40102
|
promptErrorSource = "prompt";
|
|
40097
40103
|
} finally {
|
|
40098
|
-
log$
|
|
40104
|
+
log$5.debug(`embedded run prompt end: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - promptStartedAt}`);
|
|
40099
40105
|
}
|
|
40100
40106
|
const wasCompactingBefore = activeSession.isCompacting;
|
|
40101
40107
|
const snapshot = activeSession.messages.slice();
|
|
@@ -40110,7 +40116,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
40110
40116
|
promptError = err;
|
|
40111
40117
|
promptErrorSource = "compaction";
|
|
40112
40118
|
}
|
|
40113
|
-
if (!isProbeSession) log$
|
|
40119
|
+
if (!isProbeSession) log$5.debug(`compaction wait aborted: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
40114
40120
|
} else throw err;
|
|
40115
40121
|
}
|
|
40116
40122
|
if (!timedOutDuringCompaction) {
|
|
@@ -40128,7 +40134,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
40128
40134
|
currentSessionId: activeSession.sessionId
|
|
40129
40135
|
});
|
|
40130
40136
|
if (timedOutDuringCompaction) {
|
|
40131
|
-
if (!isProbeSession) log$
|
|
40137
|
+
if (!isProbeSession) log$5.warn(`using ${snapshotSelection.source} snapshot: timed out during compaction runId=${params.runId} sessionId=${params.sessionId}`);
|
|
40132
40138
|
}
|
|
40133
40139
|
messagesSnapshot = snapshotSelection.messagesSnapshot;
|
|
40134
40140
|
sessionIdUsed = snapshotSelection.sessionIdUsed;
|
|
@@ -40143,7 +40149,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
40143
40149
|
error: describeUnknownError(promptError)
|
|
40144
40150
|
});
|
|
40145
40151
|
} catch (entryErr) {
|
|
40146
|
-
log$
|
|
40152
|
+
log$5.warn(`failed to persist prompt error entry: ${String(entryErr)}`);
|
|
40147
40153
|
}
|
|
40148
40154
|
cacheTrace?.recordStage("session:after", {
|
|
40149
40155
|
messages: messagesSnapshot,
|
|
@@ -40162,17 +40168,17 @@ async function runEmbeddedAttempt(params) {
|
|
|
40162
40168
|
workspaceDir: params.workspaceDir,
|
|
40163
40169
|
messageProvider: params.messageProvider ?? void 0
|
|
40164
40170
|
}).catch((err) => {
|
|
40165
|
-
log$
|
|
40171
|
+
log$5.warn(`agent_end hook failed: ${err}`);
|
|
40166
40172
|
});
|
|
40167
40173
|
} finally {
|
|
40168
40174
|
clearTimeout(abortTimer);
|
|
40169
40175
|
clearSymipulseTimer();
|
|
40170
40176
|
if (abortWarnTimer) clearTimeout(abortWarnTimer);
|
|
40171
|
-
if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$
|
|
40177
|
+
if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$5.debug(`run cleanup: runId=${params.runId} sessionId=${params.sessionId} aborted=${aborted} timedOut=${timedOut}`);
|
|
40172
40178
|
try {
|
|
40173
40179
|
unsubscribe();
|
|
40174
40180
|
} catch (err) {
|
|
40175
|
-
log$
|
|
40181
|
+
log$5.error(`CRITICAL: unsubscribe failed, possible resource leak: runId=${params.runId} ${String(err)}`);
|
|
40176
40182
|
}
|
|
40177
40183
|
clearActiveEmbeddedRun(params.sessionId, queueHandle, params.sessionKey);
|
|
40178
40184
|
params.abortSignal?.removeEventListener?.("abort", onAbort);
|
|
@@ -40197,7 +40203,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
40197
40203
|
workspaceDir: params.workspaceDir,
|
|
40198
40204
|
messageProvider: params.messageProvider ?? void 0
|
|
40199
40205
|
}).catch((err) => {
|
|
40200
|
-
log$
|
|
40206
|
+
log$5.warn(`llm_output hook failed: ${String(err)}`);
|
|
40201
40207
|
});
|
|
40202
40208
|
return {
|
|
40203
40209
|
aborted,
|
|
@@ -40458,7 +40464,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40458
40464
|
const redactedSessionId = redactRunIdentifier(params.sessionId);
|
|
40459
40465
|
const redactedSessionKey = redactRunIdentifier(params.sessionKey);
|
|
40460
40466
|
const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
|
|
40461
|
-
if (workspaceResolution.usedFallback) log$
|
|
40467
|
+
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}`);
|
|
40462
40468
|
const prevCwd = process.cwd();
|
|
40463
40469
|
let provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
40464
40470
|
let modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
|
@@ -40477,7 +40483,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40477
40483
|
if (hookRunner?.hasHooks("before_model_resolve")) try {
|
|
40478
40484
|
modelResolveOverride = await hookRunner.runBeforeModelResolve({ prompt: params.prompt }, hookCtx);
|
|
40479
40485
|
} catch (hookErr) {
|
|
40480
|
-
log$
|
|
40486
|
+
log$5.warn(`before_model_resolve hook failed: ${String(hookErr)}`);
|
|
40481
40487
|
}
|
|
40482
40488
|
if (hookRunner?.hasHooks("before_agent_start")) try {
|
|
40483
40489
|
const legacyResult = await hookRunner.runBeforeAgentStart({ prompt: params.prompt }, hookCtx);
|
|
@@ -40486,15 +40492,15 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40486
40492
|
modelOverride: modelResolveOverride?.modelOverride ?? legacyResult?.modelOverride
|
|
40487
40493
|
};
|
|
40488
40494
|
} catch (hookErr) {
|
|
40489
|
-
log$
|
|
40495
|
+
log$5.warn(`before_agent_start hook (legacy model resolve path) failed: ${String(hookErr)}`);
|
|
40490
40496
|
}
|
|
40491
40497
|
if (modelResolveOverride?.providerOverride) {
|
|
40492
40498
|
provider = modelResolveOverride.providerOverride;
|
|
40493
|
-
log$
|
|
40499
|
+
log$5.info(`[hooks] provider overridden to ${provider}`);
|
|
40494
40500
|
}
|
|
40495
40501
|
if (modelResolveOverride?.modelOverride) {
|
|
40496
40502
|
modelId = modelResolveOverride.modelOverride;
|
|
40497
|
-
log$
|
|
40503
|
+
log$5.info(`[hooks] model overridden to ${modelId}`);
|
|
40498
40504
|
}
|
|
40499
40505
|
const { model, error, authStorage, modelRegistry } = resolveModel(provider, modelId, agentDir, params.config);
|
|
40500
40506
|
if (!model) throw new FailoverError(error ?? `Unknown model: ${provider}/${modelId}`, {
|
|
@@ -40514,9 +40520,9 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40514
40520
|
warnBelowTokens: CONTEXT_WINDOW_WARN_BELOW_TOKENS,
|
|
40515
40521
|
hardMinTokens: CONTEXT_WINDOW_HARD_MIN_TOKENS
|
|
40516
40522
|
});
|
|
40517
|
-
if (ctxGuard.shouldWarn) log$
|
|
40523
|
+
if (ctxGuard.shouldWarn) log$5.warn(`low context window: ${provider}/${modelId} ctx=${ctxGuard.tokens} (warn<${CONTEXT_WINDOW_WARN_BELOW_TOKENS}) source=${ctxGuard.source}`);
|
|
40518
40524
|
if (ctxGuard.shouldBlock) {
|
|
40519
|
-
log$
|
|
40525
|
+
log$5.error(`blocked model (context window too small): ${provider}/${modelId} ctx=${ctxGuard.tokens} (min=${CONTEXT_WINDOW_HARD_MIN_TOKENS}) source=${ctxGuard.source}`);
|
|
40520
40526
|
throw new FailoverError(`Model context window too small (${ctxGuard.tokens} tokens). Minimum is ${CONTEXT_WINDOW_HARD_MIN_TOKENS}.`, {
|
|
40521
40527
|
reason: "unknown",
|
|
40522
40528
|
provider,
|
|
@@ -40646,7 +40652,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40646
40652
|
while (true) {
|
|
40647
40653
|
if (runLoopIterations >= MAX_RUN_LOOP_ITERATIONS) {
|
|
40648
40654
|
const message = `Exceeded retry limit after ${runLoopIterations} attempts (max=${MAX_RUN_LOOP_ITERATIONS}).`;
|
|
40649
|
-
log$
|
|
40655
|
+
log$5.error(`[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} attempts=${runLoopIterations} maxAttempts=${MAX_RUN_LOOP_ITERATIONS}`);
|
|
40650
40656
|
return {
|
|
40651
40657
|
payloads: [{
|
|
40652
40658
|
text: "Request failed after repeated internal retries. Please try again, or use /new to start a fresh session.",
|
|
@@ -40767,18 +40773,18 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40767
40773
|
const overflowDiagId = createCompactionDiagId$1();
|
|
40768
40774
|
const errorText = contextOverflowError.text;
|
|
40769
40775
|
const msgCount = attempt.messagesSnapshot?.length ?? 0;
|
|
40770
|
-
log$
|
|
40776
|
+
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)}`);
|
|
40771
40777
|
const isCompactionFailure = isCompactionFailureError(errorText);
|
|
40772
40778
|
const hadAttemptLevelCompaction = attemptCompactionCount > 0;
|
|
40773
40779
|
if (!isCompactionFailure && hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
|
|
40774
40780
|
overflowCompactionAttempts++;
|
|
40775
|
-
log$
|
|
40781
|
+
log$5.warn(`context overflow persisted after in-attempt compaction (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); retrying prompt without additional compaction for ${provider}/${modelId}`);
|
|
40776
40782
|
continue;
|
|
40777
40783
|
}
|
|
40778
40784
|
if (!isCompactionFailure && !hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
|
|
40779
|
-
if (log$
|
|
40785
|
+
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}`);
|
|
40780
40786
|
overflowCompactionAttempts++;
|
|
40781
|
-
log$
|
|
40787
|
+
log$5.warn(`context overflow detected (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); attempting auto-compaction for ${provider}/${modelId}`);
|
|
40782
40788
|
const compactResult = await compactEmbeddedPiSessionDirect({
|
|
40783
40789
|
sessionId: params.sessionId,
|
|
40784
40790
|
sessionKey: params.sessionKey,
|
|
@@ -40807,10 +40813,10 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40807
40813
|
});
|
|
40808
40814
|
if (compactResult.compacted) {
|
|
40809
40815
|
autoCompactionCount += 1;
|
|
40810
|
-
log$
|
|
40816
|
+
log$5.info(`auto-compaction succeeded for ${provider}/${modelId}; retrying prompt`);
|
|
40811
40817
|
continue;
|
|
40812
40818
|
}
|
|
40813
|
-
log$
|
|
40819
|
+
log$5.warn(`auto-compaction failed for ${provider}/${modelId}: ${compactResult.reason ?? "nothing to compact"}`);
|
|
40814
40820
|
}
|
|
40815
40821
|
if (!toolResultTruncationAttempted) {
|
|
40816
40822
|
const contextWindowTokens = ctxInfo.tokens;
|
|
@@ -40819,9 +40825,9 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40819
40825
|
contextWindowTokens
|
|
40820
40826
|
}) : false;
|
|
40821
40827
|
if (hasOversized) {
|
|
40822
|
-
if (log$
|
|
40828
|
+
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}`);
|
|
40823
40829
|
toolResultTruncationAttempted = true;
|
|
40824
|
-
log$
|
|
40830
|
+
log$5.warn(`[context-overflow-recovery] Attempting tool result truncation for ${provider}/${modelId} (contextWindow=${contextWindowTokens} tokens)`);
|
|
40825
40831
|
const truncResult = await truncateOversizedToolResultsInSession({
|
|
40826
40832
|
sessionFile: params.sessionFile,
|
|
40827
40833
|
contextWindowTokens,
|
|
@@ -40829,13 +40835,13 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40829
40835
|
sessionKey: params.sessionKey
|
|
40830
40836
|
});
|
|
40831
40837
|
if (truncResult.truncated) {
|
|
40832
|
-
log$
|
|
40838
|
+
log$5.info(`[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`);
|
|
40833
40839
|
continue;
|
|
40834
40840
|
}
|
|
40835
|
-
log$
|
|
40836
|
-
} else if (log$
|
|
40841
|
+
log$5.warn(`[context-overflow-recovery] Tool result truncation did not help: ${truncResult.reason ?? "unknown"}`);
|
|
40842
|
+
} 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}`);
|
|
40837
40843
|
}
|
|
40838
|
-
if ((isCompactionFailure || overflowCompactionAttempts >= MAX_OVERFLOW_COMPACTION_ATTEMPTS || toolResultTruncationAttempted) && log$
|
|
40844
|
+
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}`);
|
|
40839
40845
|
const kind = isCompactionFailure ? "compaction_failure" : "context_overflow";
|
|
40840
40846
|
return {
|
|
40841
40847
|
payloads: [{
|
|
@@ -40916,7 +40922,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40916
40922
|
attempted: attemptedThinking
|
|
40917
40923
|
});
|
|
40918
40924
|
if (fallbackThinking) {
|
|
40919
|
-
log$
|
|
40925
|
+
log$5.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
|
|
40920
40926
|
thinkLevel = fallbackThinking;
|
|
40921
40927
|
continue;
|
|
40922
40928
|
}
|
|
@@ -40934,7 +40940,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40934
40940
|
attempted: attemptedThinking
|
|
40935
40941
|
});
|
|
40936
40942
|
if (fallbackThinking && !aborted) {
|
|
40937
|
-
log$
|
|
40943
|
+
log$5.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
|
|
40938
40944
|
thinkLevel = fallbackThinking;
|
|
40939
40945
|
continue;
|
|
40940
40946
|
}
|
|
@@ -40951,7 +40957,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40951
40957
|
imageDimensionError.contentIndex !== void 0 ? `content=${imageDimensionError.contentIndex}` : null,
|
|
40952
40958
|
imageDimensionError.maxDimensionPx !== void 0 ? `limit=${imageDimensionError.maxDimensionPx}px` : null
|
|
40953
40959
|
].filter(Boolean).join(" ");
|
|
40954
|
-
log$
|
|
40960
|
+
log$5.warn(`Profile ${lastProfileId} rejected image payload${details ? ` (${details})` : ""}.`);
|
|
40955
40961
|
}
|
|
40956
40962
|
const isLocalOllamaTimeout = timedOut && model.api === "ollama";
|
|
40957
40963
|
if (!aborted && failoverFailure || timedOut && !timedOutDuringCompaction && !isLocalOllamaTimeout) {
|
|
@@ -40963,8 +40969,8 @@ async function runEmbeddedPiAgent(params) {
|
|
|
40963
40969
|
cfg: params.config,
|
|
40964
40970
|
agentDir: params.agentDir
|
|
40965
40971
|
});
|
|
40966
|
-
if (timedOut && !isProbeSession) log$
|
|
40967
|
-
if (cloudCodeAssistFormatError) log$
|
|
40972
|
+
if (timedOut && !isProbeSession) log$5.warn(`Profile ${lastProfileId} timed out (possible rate limit). Trying next account...`);
|
|
40973
|
+
if (cloudCodeAssistFormatError) log$5.warn(`Profile ${lastProfileId} hit Cloud Code Assist format error. Tool calls will be sanitized on retry.`);
|
|
40968
40974
|
}
|
|
40969
40975
|
if (await advanceAuthProfile()) continue;
|
|
40970
40976
|
if (fallbackConfigured) {
|
|
@@ -41030,7 +41036,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
41030
41036
|
const hasCodeBlocks = attempt.assistantTexts.some((text) => /```[\s\S]*?```/.test(text));
|
|
41031
41037
|
if (hasCodeToolUsage || hasCodeBlocks) {
|
|
41032
41038
|
verificationPassCompleted = true;
|
|
41033
|
-
log$
|
|
41039
|
+
log$5.debug(`[verification] starting verification pass: runId=${params.runId} sessionId=${params.sessionId} trigger=${hasCodeToolUsage ? "tool_usage" : "code_blocks"}`);
|
|
41034
41040
|
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.";
|
|
41035
41041
|
try {
|
|
41036
41042
|
const verifyAttempt = await runEmbeddedAttempt({
|
|
@@ -41116,10 +41122,10 @@ async function runEmbeddedPiAgent(params) {
|
|
|
41116
41122
|
payloads.length = 0;
|
|
41117
41123
|
payloads.push(...verifyPayloads);
|
|
41118
41124
|
}
|
|
41119
|
-
log$
|
|
41120
|
-
} else log$
|
|
41125
|
+
log$5.debug(`[verification] verification produced corrections: runId=${params.runId} tools=${verifyAttempt.toolMetas.length} texts=${verifyAttempt.assistantTexts.length}`);
|
|
41126
|
+
} else log$5.debug(`[verification] verification confirmed original response: runId=${params.runId}`);
|
|
41121
41127
|
} catch (verifyErr) {
|
|
41122
|
-
log$
|
|
41128
|
+
log$5.warn(`[verification] verification pass failed, keeping original response: runId=${params.runId} error=${String(verifyErr)}`);
|
|
41123
41129
|
}
|
|
41124
41130
|
}
|
|
41125
41131
|
}
|
|
@@ -41140,7 +41146,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
41140
41146
|
messagingToolSentTargets: attempt.messagingToolSentTargets,
|
|
41141
41147
|
successfulCronAdds: attempt.successfulCronAdds
|
|
41142
41148
|
};
|
|
41143
|
-
log$
|
|
41149
|
+
log$5.debug(`embedded run done: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - started} aborted=${aborted}`);
|
|
41144
41150
|
if (lastProfileId) {
|
|
41145
41151
|
await markAuthProfileGood({
|
|
41146
41152
|
store: authStore,
|
|
@@ -53012,7 +53018,7 @@ function isVoiceChannelType(type) {
|
|
|
53012
53018
|
function createDefaultDeps() {
|
|
53013
53019
|
return {
|
|
53014
53020
|
sendMessageWhatsApp: async (...args) => {
|
|
53015
|
-
const { sendMessageWhatsApp } = await import("./web-
|
|
53021
|
+
const { sendMessageWhatsApp } = await import("./web-CQ2F1f3a.js");
|
|
53016
53022
|
return await sendMessageWhatsApp(...args);
|
|
53017
53023
|
},
|
|
53018
53024
|
sendMessageTelegram: async (...args) => {
|
|
@@ -68326,7 +68332,7 @@ function loadWebLoginQr() {
|
|
|
68326
68332
|
return webLoginQrPromise;
|
|
68327
68333
|
}
|
|
68328
68334
|
function loadWebChannel() {
|
|
68329
|
-
webChannelPromise ??= import("./web-
|
|
68335
|
+
webChannelPromise ??= import("./web-CQ2F1f3a.js");
|
|
68330
68336
|
return webChannelPromise;
|
|
68331
68337
|
}
|
|
68332
68338
|
function loadWhatsAppActions() {
|
|
@@ -70464,7 +70470,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
70464
70470
|
const provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
70465
70471
|
const modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
|
70466
70472
|
const fail = (reason) => {
|
|
70467
|
-
log$
|
|
70473
|
+
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}`);
|
|
70468
70474
|
return {
|
|
70469
70475
|
ok: false,
|
|
70470
70476
|
compacted: false,
|
|
@@ -70532,7 +70538,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
70532
70538
|
sessionId: params.sessionId,
|
|
70533
70539
|
warn: makeBootstrapWarn({
|
|
70534
70540
|
sessionLabel,
|
|
70535
|
-
warn: (message) => log$
|
|
70541
|
+
warn: (message) => log$5.warn(message)
|
|
70536
70542
|
})
|
|
70537
70543
|
});
|
|
70538
70544
|
const runAbortController = new AbortController();
|
|
@@ -70672,7 +70678,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
70672
70678
|
try {
|
|
70673
70679
|
await repairSessionFileIfNeeded({
|
|
70674
70680
|
sessionFile: params.sessionFile,
|
|
70675
|
-
warn: (message) => log$
|
|
70681
|
+
warn: (message) => log$5.warn(message)
|
|
70676
70682
|
});
|
|
70677
70683
|
await prewarmSessionFile(params.sessionFile);
|
|
70678
70684
|
const transcriptPolicy = resolveTranscriptPolicy({
|
|
@@ -70757,13 +70763,13 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
70757
70763
|
messages: preCompactionMessages,
|
|
70758
70764
|
sessionFile: params.sessionFile
|
|
70759
70765
|
}, hookCtx).catch((hookErr) => {
|
|
70760
|
-
log$
|
|
70766
|
+
log$5.warn(`before_compaction hook failed: ${String(hookErr)}`);
|
|
70761
70767
|
});
|
|
70762
|
-
const diagEnabled = log$
|
|
70768
|
+
const diagEnabled = log$5.isEnabled("debug");
|
|
70763
70769
|
const preMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
|
|
70764
70770
|
if (diagEnabled && preMetrics) {
|
|
70765
|
-
log$
|
|
70766
|
-
log$
|
|
70771
|
+
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"}`);
|
|
70772
|
+
log$5.debug(`[compaction-diag] contributors diagId=${diagId} top=${JSON.stringify(preMetrics.contributors)}`);
|
|
70767
70773
|
}
|
|
70768
70774
|
const compactStartedAt = Date.now();
|
|
70769
70775
|
const result = await compactWithSafetyTimeout(() => session.compact(params.customInstructions));
|
|
@@ -70781,10 +70787,10 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
70781
70787
|
compactedCount: limited.length - session.messages.length,
|
|
70782
70788
|
sessionFile: params.sessionFile
|
|
70783
70789
|
}, hookCtx).catch((hookErr) => {
|
|
70784
|
-
log$
|
|
70790
|
+
log$5.warn(`after_compaction hook failed: ${hookErr}`);
|
|
70785
70791
|
});
|
|
70786
70792
|
const postMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
|
|
70787
|
-
if (diagEnabled && preMetrics && postMetrics) log$
|
|
70793
|
+
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"}`);
|
|
70788
70794
|
return {
|
|
70789
70795
|
ok: true,
|
|
70790
70796
|
compacted: true,
|