@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
|
@@ -20367,7 +20367,7 @@ function createRunRegistry(options) {
|
|
|
20367
20367
|
|
|
20368
20368
|
//#endregion
|
|
20369
20369
|
//#region src/process/supervisor/supervisor.ts
|
|
20370
|
-
const log$
|
|
20370
|
+
const log$9 = createSubsystemLogger("process/supervisor");
|
|
20371
20371
|
function clampTimeout(value) {
|
|
20372
20372
|
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) return;
|
|
20373
20373
|
return Math.max(1, Math.floor(value));
|
|
@@ -20553,7 +20553,7 @@ function createProcessSupervisor() {
|
|
|
20553
20553
|
exitCode: null,
|
|
20554
20554
|
exitSignal: null
|
|
20555
20555
|
});
|
|
20556
|
-
log$
|
|
20556
|
+
log$9.warn(`spawn failed: runId=${runId} reason=${String(err)}`);
|
|
20557
20557
|
throw err;
|
|
20558
20558
|
}
|
|
20559
20559
|
};
|
|
@@ -21852,7 +21852,7 @@ function resolveRunWorkspaceDir(params) {
|
|
|
21852
21852
|
|
|
21853
21853
|
//#endregion
|
|
21854
21854
|
//#region src/agents/cli-runner.ts
|
|
21855
|
-
const log$
|
|
21855
|
+
const log$8 = createSubsystemLogger("agent/claude-cli");
|
|
21856
21856
|
async function runCliAgent(params) {
|
|
21857
21857
|
const started = Date.now();
|
|
21858
21858
|
const workspaceResolution = resolveRunWorkspaceDir({
|
|
@@ -21865,7 +21865,7 @@ async function runCliAgent(params) {
|
|
|
21865
21865
|
const redactedSessionId = redactRunIdentifier(params.sessionId);
|
|
21866
21866
|
const redactedSessionKey = redactRunIdentifier(params.sessionKey);
|
|
21867
21867
|
const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
|
|
21868
|
-
if (workspaceResolution.usedFallback) log$
|
|
21868
|
+
if (workspaceResolution.usedFallback) log$8.warn(`[workspace-fallback] caller=runCliAgent reason=${workspaceResolution.fallbackReason} run=${params.runId} session=${redactedSessionId} sessionKey=${redactedSessionKey} agent=${workspaceResolution.agentId} workspace=${redactedWorkspace}`);
|
|
21869
21869
|
const workspaceDir = resolvedWorkspace;
|
|
21870
21870
|
const backendResolved = resolveCliBackendConfig(params.provider, params.config);
|
|
21871
21871
|
if (!backendResolved) throw new Error(`Unknown CLI backend: ${params.provider}`);
|
|
@@ -21882,7 +21882,7 @@ async function runCliAgent(params) {
|
|
|
21882
21882
|
sessionId: params.sessionId,
|
|
21883
21883
|
warn: makeBootstrapWarn({
|
|
21884
21884
|
sessionLabel,
|
|
21885
|
-
warn: (message) => log$
|
|
21885
|
+
warn: (message) => log$8.warn(message)
|
|
21886
21886
|
})
|
|
21887
21887
|
});
|
|
21888
21888
|
const { defaultAgentId, sessionAgentId } = resolveSessionAgentIds({
|
|
@@ -21948,7 +21948,7 @@ async function runCliAgent(params) {
|
|
|
21948
21948
|
const queueKey = backend.serialize ?? true ? backendResolved.id : `${backendResolved.id}:${params.runId}`;
|
|
21949
21949
|
try {
|
|
21950
21950
|
const output = await enqueueCliRun(queueKey, async () => {
|
|
21951
|
-
log$
|
|
21951
|
+
log$8.info(`cli exec: provider=${params.provider} model=${normalizedModel} promptChars=${params.prompt.length}`);
|
|
21952
21952
|
const logOutputText = isTruthyEnvValue(process.env.SYMI_CLAUDE_CLI_LOG_OUTPUT);
|
|
21953
21953
|
if (logOutputText) {
|
|
21954
21954
|
const logArgs = [];
|
|
@@ -21981,7 +21981,7 @@ async function runCliAgent(params) {
|
|
|
21981
21981
|
const promptIndex = logArgs.indexOf(argsPrompt);
|
|
21982
21982
|
if (promptIndex >= 0) logArgs[promptIndex] = `<prompt:${argsPrompt.length} chars>`;
|
|
21983
21983
|
}
|
|
21984
|
-
log$
|
|
21984
|
+
log$8.info(`cli argv: ${backend.command} ${logArgs.join(" ")}`);
|
|
21985
21985
|
}
|
|
21986
21986
|
const env = (() => {
|
|
21987
21987
|
const next = {
|
|
@@ -22019,17 +22019,17 @@ async function runCliAgent(params) {
|
|
|
22019
22019
|
const stdout = result.stdout.trim();
|
|
22020
22020
|
const stderr = result.stderr.trim();
|
|
22021
22021
|
if (logOutputText) {
|
|
22022
|
-
if (stdout) log$
|
|
22023
|
-
if (stderr) log$
|
|
22022
|
+
if (stdout) log$8.info(`cli stdout:\n${stdout}`);
|
|
22023
|
+
if (stderr) log$8.info(`cli stderr:\n${stderr}`);
|
|
22024
22024
|
}
|
|
22025
22025
|
if (shouldLogVerbose()) {
|
|
22026
|
-
if (stdout) log$
|
|
22027
|
-
if (stderr) log$
|
|
22026
|
+
if (stdout) log$8.debug(`cli stdout:\n${stdout}`);
|
|
22027
|
+
if (stderr) log$8.debug(`cli stderr:\n${stderr}`);
|
|
22028
22028
|
}
|
|
22029
22029
|
if (result.exitCode !== 0 || result.reason !== "exit") {
|
|
22030
22030
|
if (result.reason === "no-output-timeout" || result.noOutputTimedOut) {
|
|
22031
22031
|
const timeoutReason = `CLI produced no output for ${Math.round(noOutputTimeoutMs / 1e3)}s and was terminated.`;
|
|
22032
|
-
log$
|
|
22032
|
+
log$8.warn(`cli watchdog timeout: provider=${params.provider} model=${modelId} session=${cliSessionIdToSend ?? params.sessionId} noOutputTimeoutMs=${noOutputTimeoutMs} pid=${managedRun.pid ?? "unknown"}`);
|
|
22033
22033
|
throw new FailoverError(timeoutReason, {
|
|
22034
22034
|
reason: "timeout",
|
|
22035
22035
|
provider: params.provider,
|
|
@@ -22603,7 +22603,7 @@ function resolveEmbeddedSessionLane(key) {
|
|
|
22603
22603
|
|
|
22604
22604
|
//#endregion
|
|
22605
22605
|
//#region src/agents/pi-embedded-runner/logger.ts
|
|
22606
|
-
const log$
|
|
22606
|
+
const log$7 = createSubsystemLogger("agent/embedded");
|
|
22607
22607
|
|
|
22608
22608
|
//#endregion
|
|
22609
22609
|
//#region src/utils/safe-json.ts
|
|
@@ -22649,7 +22649,7 @@ function getQueuedFileWriter(writers, filePath) {
|
|
|
22649
22649
|
//#endregion
|
|
22650
22650
|
//#region src/agents/anthropic-payload-log.ts
|
|
22651
22651
|
const writers$1 = /* @__PURE__ */ new Map();
|
|
22652
|
-
const log$
|
|
22652
|
+
const log$6 = createSubsystemLogger("agent/anthropic-payload");
|
|
22653
22653
|
function resolvePayloadLogConfig(env) {
|
|
22654
22654
|
const enabled = parseBooleanValue$1(env.SYMI_ANTHROPIC_PAYLOAD_LOG) ?? false;
|
|
22655
22655
|
const fileOverride = env.SYMI_ANTHROPIC_PAYLOAD_LOG_FILE?.trim();
|
|
@@ -22739,13 +22739,13 @@ function createAnthropicPayloadLogger(params) {
|
|
|
22739
22739
|
usage,
|
|
22740
22740
|
error: errorMessage
|
|
22741
22741
|
});
|
|
22742
|
-
log$
|
|
22742
|
+
log$6.info("anthropic usage", {
|
|
22743
22743
|
runId: params.runId,
|
|
22744
22744
|
sessionId: params.sessionId,
|
|
22745
22745
|
usage
|
|
22746
22746
|
});
|
|
22747
22747
|
};
|
|
22748
|
-
log$
|
|
22748
|
+
log$6.info("anthropic payload logger enabled", { filePath: writer.filePath });
|
|
22749
22749
|
return {
|
|
22750
22750
|
enabled: true,
|
|
22751
22751
|
wrapStreamFn,
|
|
@@ -24627,7 +24627,7 @@ function createEmbeddedPiSessionEventHandler(ctx) {
|
|
|
24627
24627
|
//#region src/agents/pi-embedded-subscribe.ts
|
|
24628
24628
|
const THINKING_TAG_SCAN_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\s*>/gi;
|
|
24629
24629
|
const FINAL_TAG_SCAN_RE = /<\s*(\/?)\s*final\s*>/gi;
|
|
24630
|
-
const log$
|
|
24630
|
+
const log$5 = createSubsystemLogger("agent/embedded");
|
|
24631
24631
|
function subscribeEmbeddedPiSession(params) {
|
|
24632
24632
|
const reasoningMode = params.reasoningMode ?? "off";
|
|
24633
24633
|
const useMarkdown = (params.toolResultFormat ?? "markdown") === "markdown";
|
|
@@ -24784,7 +24784,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
24784
24784
|
state.compactionRetryReject = reject;
|
|
24785
24785
|
});
|
|
24786
24786
|
state.compactionRetryPromise.catch((err) => {
|
|
24787
|
-
log$
|
|
24787
|
+
log$5.debug(`compaction promise rejected (no waiter): ${String(err)}`);
|
|
24788
24788
|
});
|
|
24789
24789
|
}
|
|
24790
24790
|
};
|
|
@@ -24936,7 +24936,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
24936
24936
|
if (!chunk) return;
|
|
24937
24937
|
if (chunk === state.lastBlockReplyText) return;
|
|
24938
24938
|
if (isMessagingToolDuplicateNormalized(normalizeTextForComparison(chunk), messagingToolSentTextsNormalized)) {
|
|
24939
|
-
log$
|
|
24939
|
+
log$5.debug(`Skipping block reply - already sent via messaging tool: ${chunk.slice(0, 50)}...`);
|
|
24940
24940
|
return;
|
|
24941
24941
|
}
|
|
24942
24942
|
if (shouldSkipAssistantText(chunk)) return;
|
|
@@ -25014,7 +25014,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
25014
25014
|
const ctx = {
|
|
25015
25015
|
params,
|
|
25016
25016
|
state,
|
|
25017
|
-
log: log$
|
|
25017
|
+
log: log$5,
|
|
25018
25018
|
blockChunking,
|
|
25019
25019
|
blockChunker,
|
|
25020
25020
|
hookRunner: params.hookRunner,
|
|
@@ -25047,7 +25047,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
25047
25047
|
if (state.unsubscribed) return;
|
|
25048
25048
|
state.unsubscribed = true;
|
|
25049
25049
|
if (state.compactionRetryPromise) {
|
|
25050
|
-
log$
|
|
25050
|
+
log$5.debug(`unsubscribe: rejecting compaction wait runId=${params.runId}`);
|
|
25051
25051
|
const reject = state.compactionRetryReject;
|
|
25052
25052
|
state.compactionRetryResolve = void 0;
|
|
25053
25053
|
state.compactionRetryReject = void 0;
|
|
@@ -25057,11 +25057,11 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
25057
25057
|
reject?.(abortErr);
|
|
25058
25058
|
}
|
|
25059
25059
|
if (params.session.isCompacting) {
|
|
25060
|
-
log$
|
|
25060
|
+
log$5.debug(`unsubscribe: aborting in-flight compaction runId=${params.runId}`);
|
|
25061
25061
|
try {
|
|
25062
25062
|
params.session.abortCompaction();
|
|
25063
25063
|
} catch (err) {
|
|
25064
|
-
log$
|
|
25064
|
+
log$5.warn(`unsubscribe: compaction abort failed runId=${params.runId} err=${String(err)}`);
|
|
25065
25065
|
}
|
|
25066
25066
|
}
|
|
25067
25067
|
sessionUnsubscribe();
|
|
@@ -25110,7 +25110,7 @@ function subscribeEmbeddedPiSession(params) {
|
|
|
25110
25110
|
|
|
25111
25111
|
//#endregion
|
|
25112
25112
|
//#region src/agents/pi-tools.before-tool-call.ts
|
|
25113
|
-
const log$
|
|
25113
|
+
const log$4 = createSubsystemLogger("agents/tools");
|
|
25114
25114
|
const BEFORE_TOOL_CALL_WRAPPED = Symbol("beforeToolCallWrapped");
|
|
25115
25115
|
const adjustedParamsByToolCallId = /* @__PURE__ */ new Map();
|
|
25116
25116
|
const MAX_TRACKED_ADJUSTED_PARAMS = 1024;
|
|
@@ -25144,7 +25144,7 @@ async function recordLoopOutcome(args) {
|
|
|
25144
25144
|
config: args.ctx.loopDetection
|
|
25145
25145
|
});
|
|
25146
25146
|
} catch (err) {
|
|
25147
|
-
log$
|
|
25147
|
+
log$4.warn(`tool loop outcome tracking failed: tool=${args.toolName} error=${String(err)}`);
|
|
25148
25148
|
}
|
|
25149
25149
|
}
|
|
25150
25150
|
async function runBeforeToolCallHook(args) {
|
|
@@ -25161,7 +25161,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
25161
25161
|
const loopResult = detectToolCallLoop(sessionState, toolName, params, args.ctx.loopDetection);
|
|
25162
25162
|
if (loopResult.stuck) {
|
|
25163
25163
|
if (loopResult.level === "critical") {
|
|
25164
|
-
log$
|
|
25164
|
+
log$4.error(`Blocking ${toolName} due to critical loop: ${loopResult.message}`);
|
|
25165
25165
|
logToolLoopAction({
|
|
25166
25166
|
sessionKey: args.ctx.sessionKey,
|
|
25167
25167
|
sessionId: args.ctx?.agentId,
|
|
@@ -25178,7 +25178,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
25178
25178
|
reason: loopResult.message
|
|
25179
25179
|
};
|
|
25180
25180
|
} else if (shouldEmitLoopWarning(sessionState, loopResult.warningKey ?? `${loopResult.detector}:${toolName}`, loopResult.count)) {
|
|
25181
|
-
log$
|
|
25181
|
+
log$4.warn(`Loop warning for ${toolName}: ${loopResult.message}`);
|
|
25182
25182
|
logToolLoopAction({
|
|
25183
25183
|
sessionKey: args.ctx.sessionKey,
|
|
25184
25184
|
sessionId: args.ctx?.agentId,
|
|
@@ -25228,7 +25228,7 @@ async function runBeforeToolCallHook(args) {
|
|
|
25228
25228
|
}
|
|
25229
25229
|
} catch (err) {
|
|
25230
25230
|
const toolCallId = args.toolCallId ? ` toolCallId=${args.toolCallId}` : "";
|
|
25231
|
-
log$
|
|
25231
|
+
log$4.warn(`before_tool_call hook failed: tool=${toolName}${toolCallId} error=${String(err)}`);
|
|
25232
25232
|
}
|
|
25233
25233
|
return {
|
|
25234
25234
|
blocked: false,
|
|
@@ -25472,6 +25472,7 @@ function validateShellCommand(command) {
|
|
|
25472
25472
|
|
|
25473
25473
|
//#endregion
|
|
25474
25474
|
//#region src/agents/pi-tools.validate-wrapper.ts
|
|
25475
|
+
const log$3 = createSubsystemLogger("agents/tool-validate");
|
|
25475
25476
|
const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
|
|
25476
25477
|
const FILE_TOOL_NAMES = new Set([
|
|
25477
25478
|
"write",
|
|
@@ -25530,13 +25531,22 @@ function wrapToolWithArgValidation(tool) {
|
|
|
25530
25531
|
execute(toolCallId, params, ...rest) {
|
|
25531
25532
|
if (isExecTool) {
|
|
25532
25533
|
const command = params.command ?? params.cmd;
|
|
25533
|
-
if (typeof command !== "string")
|
|
25534
|
+
if (typeof command !== "string") {
|
|
25535
|
+
log$3.debug(`[validate] exec called without string command: keys=${Object.keys(params).join(",")}`);
|
|
25536
|
+
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
25537
|
+
}
|
|
25534
25538
|
const result = validateShellCommand(command);
|
|
25535
|
-
if (!result.valid)
|
|
25536
|
-
|
|
25537
|
-
|
|
25538
|
-
|
|
25539
|
-
|
|
25539
|
+
if (!result.valid) {
|
|
25540
|
+
log$3.warn(`[validate] exec command rejected: reason=${result.reason} raw=${command.slice(0, 100)}`);
|
|
25541
|
+
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.` });
|
|
25542
|
+
}
|
|
25543
|
+
if (result.cleaned !== command) {
|
|
25544
|
+
log$3.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
|
|
25545
|
+
return originalExecute.call(tool, toolCallId, {
|
|
25546
|
+
...params,
|
|
25547
|
+
command: result.cleaned
|
|
25548
|
+
}, ...rest);
|
|
25549
|
+
}
|
|
25540
25550
|
return originalExecute.call(tool, toolCallId, params, ...rest);
|
|
25541
25551
|
}
|
|
25542
25552
|
const pathKey = FILE_PATH_KEYS.find((k) => typeof params[k] === "string");
|
|
@@ -25907,7 +25917,7 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
25907
25917
|
const textLength = getToolResultTextLength(msg);
|
|
25908
25918
|
if (textLength > maxChars) {
|
|
25909
25919
|
oversizedIndices.push(i);
|
|
25910
|
-
log$
|
|
25920
|
+
log$7.info(`[tool-result-truncation] Found oversized tool result: entry=${entry.id} chars=${textLength} maxChars=${maxChars} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
25911
25921
|
}
|
|
25912
25922
|
}
|
|
25913
25923
|
if (oversizedIndices.length === 0) return {
|
|
@@ -25929,7 +25939,7 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
25929
25939
|
message = truncateToolResultMessage(message, maxChars);
|
|
25930
25940
|
truncatedCount++;
|
|
25931
25941
|
const newLength = getToolResultTextLength(message);
|
|
25932
|
-
log$
|
|
25942
|
+
log$7.info(`[tool-result-truncation] Truncated tool result: originalEntry=${entry.id} newChars=${newLength} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
25933
25943
|
}
|
|
25934
25944
|
sessionManager.appendMessage(message);
|
|
25935
25945
|
} else if (entry.type === "compaction") sessionManager.appendCompaction(entry.summary, entry.firstKeptEntryId, entry.tokensBefore, entry.details, entry.fromHook);
|
|
@@ -25943,14 +25953,14 @@ async function truncateOversizedToolResultsInSession(params) {
|
|
|
25943
25953
|
if (entry.name) sessionManager.appendSessionInfo(entry.name);
|
|
25944
25954
|
}
|
|
25945
25955
|
}
|
|
25946
|
-
log$
|
|
25956
|
+
log$7.info(`[tool-result-truncation] Truncated ${truncatedCount} tool result(s) in session (contextWindow=${contextWindowTokens} maxChars=${maxChars}) sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
|
|
25947
25957
|
return {
|
|
25948
25958
|
truncated: true,
|
|
25949
25959
|
truncatedCount
|
|
25950
25960
|
};
|
|
25951
25961
|
} catch (err) {
|
|
25952
25962
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
25953
|
-
log$
|
|
25963
|
+
log$7.warn(`[tool-result-truncation] Failed to truncate: ${errMsg}`);
|
|
25954
25964
|
return {
|
|
25955
25965
|
truncated: false,
|
|
25956
25966
|
truncatedCount: 0,
|
|
@@ -27726,7 +27736,7 @@ function resolveAnthropicBetas(extraParams, provider, modelId) {
|
|
|
27726
27736
|
for (const beta of configured) if (typeof beta === "string" && beta.trim()) betas.add(beta.trim());
|
|
27727
27737
|
}
|
|
27728
27738
|
if (extraParams?.context1m === true) if (isAnthropic1MModel(modelId)) betas.add(ANTHROPIC_CONTEXT_1M_BETA);
|
|
27729
|
-
else log$
|
|
27739
|
+
else log$7.warn(`ignoring context1m for non-opus/sonnet model: ${provider}/${modelId}`);
|
|
27730
27740
|
return betas.size > 0 ? [...betas] : void 0;
|
|
27731
27741
|
}
|
|
27732
27742
|
function mergeAnthropicBetaHeader(headers, betas) {
|
|
@@ -28337,14 +28347,14 @@ function logToolSchemasForGoogle(params) {
|
|
|
28337
28347
|
if (params.provider !== "google-antigravity" && params.provider !== "google-gemini-cli") return;
|
|
28338
28348
|
const toolNames = params.tools.map((tool, index) => `${index}:${tool.name}`);
|
|
28339
28349
|
const tools = sanitizeToolsForGoogle(params);
|
|
28340
|
-
log$
|
|
28350
|
+
log$7.info("google tool schema snapshot", {
|
|
28341
28351
|
provider: params.provider,
|
|
28342
28352
|
toolCount: tools.length,
|
|
28343
28353
|
tools: toolNames
|
|
28344
28354
|
});
|
|
28345
28355
|
for (const [index, tool] of tools.entries()) {
|
|
28346
28356
|
const violations = findUnsupportedSchemaKeywords(tool.parameters, `${tool.name}.parameters`);
|
|
28347
|
-
if (violations.length > 0) log$
|
|
28357
|
+
if (violations.length > 0) log$7.warn("google tool schema has unsupported keywords", {
|
|
28348
28358
|
index,
|
|
28349
28359
|
tool: tool.name,
|
|
28350
28360
|
violations: violations.slice(0, 12),
|
|
@@ -28356,7 +28366,7 @@ const compactionFailureEmitter = new EventEmitter();
|
|
|
28356
28366
|
registerUnhandledRejectionHandler((reason) => {
|
|
28357
28367
|
const message = describeUnknownError(reason);
|
|
28358
28368
|
if (!isCompactionFailureError(message)) return false;
|
|
28359
|
-
log$
|
|
28369
|
+
log$7.error(`Auto-compaction failed (unhandled): ${message}`);
|
|
28360
28370
|
compactionFailureEmitter.emit("failure", message);
|
|
28361
28371
|
return true;
|
|
28362
28372
|
});
|
|
@@ -28408,7 +28418,7 @@ function applyGoogleTurnOrderingFix(params) {
|
|
|
28408
28418
|
const sanitized = sanitizeGoogleTurnOrdering(params.messages);
|
|
28409
28419
|
const didPrepend = sanitized !== params.messages;
|
|
28410
28420
|
if (didPrepend && !hasGoogleTurnOrderingMarker(params.sessionManager)) {
|
|
28411
|
-
(params.warn ?? ((message) => log$
|
|
28421
|
+
(params.warn ?? ((message) => log$7.warn(message)))(`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`);
|
|
28412
28422
|
markGoogleTurnOrderingMarker(params.sessionManager);
|
|
28413
28423
|
}
|
|
28414
28424
|
return {
|
|
@@ -29031,7 +29041,7 @@ function isImageExtension(filePath) {
|
|
|
29031
29041
|
}
|
|
29032
29042
|
async function sanitizeImagesWithLog(images, label, imageSanitization) {
|
|
29033
29043
|
const { images: sanitized, dropped } = await sanitizeImageBlocks(images, label, imageSanitization);
|
|
29034
|
-
if (dropped > 0) log$
|
|
29044
|
+
if (dropped > 0) log$7.warn(`Native image: dropped ${dropped} image(s) after sanitization (${label}).`);
|
|
29035
29045
|
return sanitized;
|
|
29036
29046
|
}
|
|
29037
29047
|
/**
|
|
@@ -29106,7 +29116,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
29106
29116
|
try {
|
|
29107
29117
|
let targetPath = ref.resolved;
|
|
29108
29118
|
if (ref.type === "url") {
|
|
29109
|
-
log$
|
|
29119
|
+
log$7.debug(`Native image: rejecting remote URL (local-only): ${ref.resolved}`);
|
|
29110
29120
|
return null;
|
|
29111
29121
|
}
|
|
29112
29122
|
if (ref.type === "path") {
|
|
@@ -29116,7 +29126,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
29116
29126
|
cwd: options.sandbox.root
|
|
29117
29127
|
}).hostPath;
|
|
29118
29128
|
} catch (err) {
|
|
29119
|
-
log$
|
|
29129
|
+
log$7.debug(`Native image: sandbox validation failed for ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
29120
29130
|
return null;
|
|
29121
29131
|
}
|
|
29122
29132
|
else if (!path.isAbsolute(targetPath)) targetPath = path.resolve(workspaceDir, targetPath);
|
|
@@ -29130,7 +29140,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
29130
29140
|
})
|
|
29131
29141
|
}) : await loadWebMedia(targetPath, options?.maxBytes);
|
|
29132
29142
|
if (media.kind !== "image") {
|
|
29133
|
-
log$
|
|
29143
|
+
log$7.debug(`Native image: not an image file: ${targetPath} (got ${media.kind})`);
|
|
29134
29144
|
return null;
|
|
29135
29145
|
}
|
|
29136
29146
|
const mimeType = media.contentType ?? "image/jpeg";
|
|
@@ -29140,7 +29150,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
|
|
|
29140
29150
|
mimeType
|
|
29141
29151
|
};
|
|
29142
29152
|
} catch (err) {
|
|
29143
|
-
log$
|
|
29153
|
+
log$7.debug(`Native image: failed to load ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
|
|
29144
29154
|
return null;
|
|
29145
29155
|
}
|
|
29146
29156
|
}
|
|
@@ -29239,7 +29249,7 @@ async function detectAndLoadPromptImages(params) {
|
|
|
29239
29249
|
loadedCount: 0,
|
|
29240
29250
|
skippedCount: 0
|
|
29241
29251
|
};
|
|
29242
|
-
log$
|
|
29252
|
+
log$7.debug(`Native image: detected ${allRefs.length} image refs (${promptRefs.length} in prompt, ${uniqueHistoryRefs.length} in history)`);
|
|
29243
29253
|
const promptImages = [...params.existingImages ?? []];
|
|
29244
29254
|
const historyImagesByIndex = /* @__PURE__ */ new Map();
|
|
29245
29255
|
let loadedCount = 0;
|
|
@@ -29256,7 +29266,7 @@ async function detectAndLoadPromptImages(params) {
|
|
|
29256
29266
|
else historyImagesByIndex.set(ref.messageIndex, [image]);
|
|
29257
29267
|
} else promptImages.push(image);
|
|
29258
29268
|
loadedCount++;
|
|
29259
|
-
log$
|
|
29269
|
+
log$7.debug(`Native image: loaded ${ref.type} ${ref.resolved}`);
|
|
29260
29270
|
} else skippedCount++;
|
|
29261
29271
|
}
|
|
29262
29272
|
const imageSanitization = { maxDimensionPx: params.maxDimensionPx };
|
|
@@ -29352,7 +29362,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
29352
29362
|
const resolvedWorkspace = resolveUserPath(params.workspaceDir);
|
|
29353
29363
|
const prevCwd = process.cwd();
|
|
29354
29364
|
const runAbortController = new AbortController();
|
|
29355
|
-
log$
|
|
29365
|
+
log$7.debug(`embedded run start: runId=${params.runId} sessionId=${params.sessionId} provider=${params.provider} model=${params.modelId} thinking=${params.thinkLevel} messageChannel=${params.messageChannel ?? params.messageProvider ?? "unknown"}`);
|
|
29356
29366
|
await fs$1.mkdir(resolvedWorkspace, { recursive: true });
|
|
29357
29367
|
const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
|
|
29358
29368
|
const sandbox = await resolveSandboxContext({
|
|
@@ -29388,7 +29398,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
29388
29398
|
sessionId: params.sessionId,
|
|
29389
29399
|
warn: makeBootstrapWarn({
|
|
29390
29400
|
sessionLabel,
|
|
29391
|
-
warn: (message) => log$
|
|
29401
|
+
warn: (message) => log$7.warn(message)
|
|
29392
29402
|
})
|
|
29393
29403
|
});
|
|
29394
29404
|
const workspaceNotes = hookAdjustedBootstrapFiles.some((file) => file.name === DEFAULT_BOOTSTRAP_FILENAME && !file.missing) ? ["Reminder: commit your changes in this workspace after edits."] : void 0;
|
|
@@ -29587,7 +29597,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
29587
29597
|
try {
|
|
29588
29598
|
await repairSessionFileIfNeeded({
|
|
29589
29599
|
sessionFile: params.sessionFile,
|
|
29590
|
-
warn: (message) => log$
|
|
29600
|
+
warn: (message) => log$7.warn(message)
|
|
29591
29601
|
});
|
|
29592
29602
|
const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
|
|
29593
29603
|
const transcriptPolicy = resolveTranscriptPolicy({
|
|
@@ -29596,7 +29606,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
29596
29606
|
modelId: params.modelId
|
|
29597
29607
|
});
|
|
29598
29608
|
const versionCheck = await handleSessionVersion(params.sessionFile);
|
|
29599
|
-
if (versionCheck.archived) log$
|
|
29609
|
+
if (versionCheck.archived) log$7.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
|
|
29600
29610
|
await prewarmSessionFile(params.sessionFile);
|
|
29601
29611
|
sessionManager = guardSessionManager(SessionManager.open(params.sessionFile), {
|
|
29602
29612
|
agentId: sessionAgentId,
|
|
@@ -29851,7 +29861,6 @@ async function runEmbeddedAttempt(params) {
|
|
|
29851
29861
|
const TOOL_ERROR_ABORT_THRESHOLD = 5;
|
|
29852
29862
|
const TOOL_ERROR_WARN_THRESHOLD = 3;
|
|
29853
29863
|
let consecutiveToolErrors = 0;
|
|
29854
|
-
let lastErrorToolName = "";
|
|
29855
29864
|
const subscription = subscribeEmbeddedPiSession({
|
|
29856
29865
|
session: activeSession,
|
|
29857
29866
|
runId: params.runId,
|
|
@@ -29875,26 +29884,23 @@ async function runEmbeddedAttempt(params) {
|
|
|
29875
29884
|
params.onAgentEvent?.(evt);
|
|
29876
29885
|
if (evt.stream === "tool" && !aborted) {
|
|
29877
29886
|
const phase = typeof evt.data?.phase === "string" ? evt.data.phase : "";
|
|
29878
|
-
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "";
|
|
29879
29887
|
const isError = evt.data?.isError === true;
|
|
29880
|
-
if (phase === "result"
|
|
29881
|
-
if (isError
|
|
29882
|
-
else
|
|
29883
|
-
consecutiveToolErrors = 1;
|
|
29884
|
-
lastErrorToolName = toolName;
|
|
29885
|
-
} else {
|
|
29886
|
-
consecutiveToolErrors = 0;
|
|
29887
|
-
lastErrorToolName = "";
|
|
29888
|
-
}
|
|
29888
|
+
if (phase === "result") {
|
|
29889
|
+
if (isError) consecutiveToolErrors++;
|
|
29890
|
+
else consecutiveToolErrors = 0;
|
|
29889
29891
|
if (consecutiveToolErrors >= TOOL_ERROR_ABORT_THRESHOLD) {
|
|
29890
|
-
|
|
29891
|
-
|
|
29892
|
-
|
|
29892
|
+
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
|
|
29893
|
+
log$7.error(`Agent-loop circuit breaker: ${consecutiveToolErrors} consecutive tool errors (last: ${toolName}). Aborting run ${params.runId}.`);
|
|
29894
|
+
abortRun(false, /* @__PURE__ */ new Error(`${consecutiveToolErrors} consecutive tool errors. The model may be generating corrupted tool arguments. Run aborted to prevent infinite loop.`));
|
|
29895
|
+
} else if (consecutiveToolErrors === TOOL_ERROR_WARN_THRESHOLD) {
|
|
29896
|
+
const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
|
|
29897
|
+
log$7.warn(`Agent-loop tool error warning: ${consecutiveToolErrors} consecutive failures (last: ${toolName}). runId=${params.runId}`);
|
|
29898
|
+
}
|
|
29893
29899
|
}
|
|
29894
29900
|
}
|
|
29895
29901
|
if (evt.stream === "assistant" && typeof evt.data?.text === "string" && !aborted) {
|
|
29896
29902
|
streamMonitor.onChunk(evt.data.text);
|
|
29897
|
-
if (streamMonitor.shouldStop()) log$
|
|
29903
|
+
if (streamMonitor.shouldStop()) log$7.debug(`stream monitor detection (log-only, no abort): runId=${params.runId} reason=${streamMonitor.getStopReason()}`);
|
|
29898
29904
|
}
|
|
29899
29905
|
},
|
|
29900
29906
|
enforceFinalTag: params.enforceFinalTag,
|
|
@@ -29914,7 +29920,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
29914
29920
|
let abortWarnTimer;
|
|
29915
29921
|
const isProbeSession = params.sessionId?.startsWith("probe-") ?? false;
|
|
29916
29922
|
const abortTimer = setTimeout(() => {
|
|
29917
|
-
if (!isProbeSession) log$
|
|
29923
|
+
if (!isProbeSession) log$7.warn(`embedded run timeout: runId=${params.runId} sessionId=${params.sessionId} timeoutMs=${params.timeoutMs}`);
|
|
29918
29924
|
if (shouldFlagCompactionTimeout({
|
|
29919
29925
|
isTimeout: true,
|
|
29920
29926
|
isCompactionPendingOrRetrying: subscription.isCompacting(),
|
|
@@ -29923,7 +29929,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
29923
29929
|
abortRun(true);
|
|
29924
29930
|
if (!abortWarnTimer) abortWarnTimer = setTimeout(() => {
|
|
29925
29931
|
if (!activeSession.isStreaming) return;
|
|
29926
|
-
if (!isProbeSession) log$
|
|
29932
|
+
if (!isProbeSession) log$7.warn(`embedded run abort still streaming: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
29927
29933
|
}, 1e4);
|
|
29928
29934
|
}, Math.max(1, params.timeoutMs));
|
|
29929
29935
|
armSymipulseTimer = () => {
|
|
@@ -29931,7 +29937,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
29931
29937
|
clearSymipulseTimer();
|
|
29932
29938
|
symipulseTimer = setTimeout(() => {
|
|
29933
29939
|
if (aborted) return;
|
|
29934
|
-
if (!isProbeSession) log$
|
|
29940
|
+
if (!isProbeSession) log$7.warn(`symipulse timeout: runId=${params.runId} sessionId=${params.sessionId} symipulseMs=${symipulseMs} (no activity)`);
|
|
29935
29941
|
if (shouldFlagCompactionTimeout({
|
|
29936
29942
|
isTimeout: true,
|
|
29937
29943
|
isCompactionPendingOrRetrying: subscription.isCompacting(),
|
|
@@ -29975,13 +29981,13 @@ async function runEmbeddedAttempt(params) {
|
|
|
29975
29981
|
prompt: params.prompt,
|
|
29976
29982
|
messages: activeSession.messages
|
|
29977
29983
|
}, hookCtx).catch((hookErr) => {
|
|
29978
|
-
log$
|
|
29984
|
+
log$7.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
|
|
29979
29985
|
}) : void 0;
|
|
29980
29986
|
const legacyResult = hookRunner?.hasHooks("before_agent_start") ? await hookRunner.runBeforeAgentStart({
|
|
29981
29987
|
prompt: params.prompt,
|
|
29982
29988
|
messages: activeSession.messages
|
|
29983
29989
|
}, hookCtx).catch((hookErr) => {
|
|
29984
|
-
log$
|
|
29990
|
+
log$7.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
|
|
29985
29991
|
}) : void 0;
|
|
29986
29992
|
const hookResult = {
|
|
29987
29993
|
systemPrompt: promptBuildResult?.systemPrompt ?? legacyResult?.systemPrompt,
|
|
@@ -29989,7 +29995,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
29989
29995
|
};
|
|
29990
29996
|
if (hookResult?.prependContext) {
|
|
29991
29997
|
effectivePrompt = `${hookResult.prependContext}\n\n${params.prompt}`;
|
|
29992
|
-
log$
|
|
29998
|
+
log$7.debug(`hooks: prepended context to prompt (${hookResult.prependContext.length} chars)`);
|
|
29993
29999
|
}
|
|
29994
30000
|
{
|
|
29995
30001
|
const autoRecallAgentId = normalizeAgentId(params.sessionKey);
|
|
@@ -30006,11 +30012,11 @@ async function runEmbeddedAttempt(params) {
|
|
|
30006
30012
|
if (recallResults.length > 0) {
|
|
30007
30013
|
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>`;
|
|
30008
30014
|
effectivePrompt = `${recallBlock}\n\n${effectivePrompt}`;
|
|
30009
|
-
log$
|
|
30015
|
+
log$7.debug(`auto-recall: injected ${recallResults.length} snippets (${recallBlock.length} chars)`);
|
|
30010
30016
|
}
|
|
30011
30017
|
}
|
|
30012
30018
|
} catch (recallErr) {
|
|
30013
|
-
log$
|
|
30019
|
+
log$7.debug(`auto-recall: skipped (${String(recallErr)})`);
|
|
30014
30020
|
}
|
|
30015
30021
|
}
|
|
30016
30022
|
{
|
|
@@ -30022,10 +30028,10 @@ async function runEmbeddedAttempt(params) {
|
|
|
30022
30028
|
if (planResult.enter) {
|
|
30023
30029
|
if (planResult.stripped != null) effectivePrompt = planResult.stripped;
|
|
30024
30030
|
effectivePrompt = `${PLAN_MODE_SYSTEM_PROMPT}\n\n${effectivePrompt}`;
|
|
30025
|
-
log$
|
|
30031
|
+
log$7.info(`plan-mode: activated (${planResult.reason}) for runId=${params.runId}`);
|
|
30026
30032
|
} else if (planResult.stripped != null) effectivePrompt = planResult.stripped;
|
|
30027
30033
|
}
|
|
30028
|
-
log$
|
|
30034
|
+
log$7.debug(`embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
30029
30035
|
cacheTrace?.recordStage("prompt:before", {
|
|
30030
30036
|
prompt: effectivePrompt,
|
|
30031
30037
|
messages: activeSession.messages
|
|
@@ -30037,7 +30043,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
30037
30043
|
const sessionContext = sessionManager.buildSessionContext();
|
|
30038
30044
|
const sanitizedOrphan = transcriptPolicy.sanitizeThinkingSignatures ? sanitizeAntigravityThinkingBlocks(sessionContext.messages) : sessionContext.messages;
|
|
30039
30045
|
activeSession.agent.replaceMessages(sanitizedOrphan);
|
|
30040
|
-
log$
|
|
30046
|
+
log$7.warn(`Removed orphaned user message to prevent consecutive user turns. runId=${params.runId} sessionId=${params.sessionId}`);
|
|
30041
30047
|
}
|
|
30042
30048
|
try {
|
|
30043
30049
|
const imageResult = await detectAndLoadPromptImages({
|
|
@@ -30059,12 +30065,12 @@ async function runEmbeddedAttempt(params) {
|
|
|
30059
30065
|
messages: activeSession.messages,
|
|
30060
30066
|
note: `images: prompt=${imageResult.images.length} history=${imageResult.historyImagesByIndex.size}`
|
|
30061
30067
|
});
|
|
30062
|
-
if (log$
|
|
30068
|
+
if (log$7.isEnabled("debug")) {
|
|
30063
30069
|
const msgCount = activeSession.messages.length;
|
|
30064
30070
|
const systemLen = systemPromptText?.length ?? 0;
|
|
30065
30071
|
const promptLen = effectivePrompt.length;
|
|
30066
30072
|
const sessionSummary = summarizeSessionContext(activeSession.messages);
|
|
30067
|
-
log$
|
|
30073
|
+
log$7.debug(`[context-diag] pre-prompt: sessionKey=${params.sessionKey ?? params.sessionId} messages=${msgCount} roleCounts=${sessionSummary.roleCounts} historyTextChars=${sessionSummary.totalTextChars} maxMessageTextChars=${sessionSummary.maxMessageTextChars} historyImageBlocks=${sessionSummary.totalImageBlocks} systemPromptChars=${systemLen} promptChars=${promptLen} promptImages=${imageResult.images.length} historyImageMessages=${imageResult.historyImagesByIndex.size} provider=${params.provider}/${params.modelId} sessionFile=${params.sessionFile}`);
|
|
30068
30074
|
}
|
|
30069
30075
|
if (hookRunner?.hasHooks("llm_input")) hookRunner.runLlmInput({
|
|
30070
30076
|
runId: params.runId,
|
|
@@ -30082,7 +30088,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
30082
30088
|
workspaceDir: params.workspaceDir,
|
|
30083
30089
|
messageProvider: params.messageProvider ?? void 0
|
|
30084
30090
|
}).catch((err) => {
|
|
30085
|
-
log$
|
|
30091
|
+
log$7.warn(`llm_input hook failed: ${String(err)}`);
|
|
30086
30092
|
});
|
|
30087
30093
|
if (imageResult.images.length > 0) await abortable(activeSession.prompt(effectivePrompt, { images: imageResult.images }));
|
|
30088
30094
|
else await abortable(activeSession.prompt(effectivePrompt));
|
|
@@ -30090,7 +30096,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
30090
30096
|
promptError = err;
|
|
30091
30097
|
promptErrorSource = "prompt";
|
|
30092
30098
|
} finally {
|
|
30093
|
-
log$
|
|
30099
|
+
log$7.debug(`embedded run prompt end: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - promptStartedAt}`);
|
|
30094
30100
|
}
|
|
30095
30101
|
const wasCompactingBefore = activeSession.isCompacting;
|
|
30096
30102
|
const snapshot = activeSession.messages.slice();
|
|
@@ -30105,7 +30111,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
30105
30111
|
promptError = err;
|
|
30106
30112
|
promptErrorSource = "compaction";
|
|
30107
30113
|
}
|
|
30108
|
-
if (!isProbeSession) log$
|
|
30114
|
+
if (!isProbeSession) log$7.debug(`compaction wait aborted: runId=${params.runId} sessionId=${params.sessionId}`);
|
|
30109
30115
|
} else throw err;
|
|
30110
30116
|
}
|
|
30111
30117
|
if (!timedOutDuringCompaction) {
|
|
@@ -30123,7 +30129,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
30123
30129
|
currentSessionId: activeSession.sessionId
|
|
30124
30130
|
});
|
|
30125
30131
|
if (timedOutDuringCompaction) {
|
|
30126
|
-
if (!isProbeSession) log$
|
|
30132
|
+
if (!isProbeSession) log$7.warn(`using ${snapshotSelection.source} snapshot: timed out during compaction runId=${params.runId} sessionId=${params.sessionId}`);
|
|
30127
30133
|
}
|
|
30128
30134
|
messagesSnapshot = snapshotSelection.messagesSnapshot;
|
|
30129
30135
|
sessionIdUsed = snapshotSelection.sessionIdUsed;
|
|
@@ -30138,7 +30144,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
30138
30144
|
error: describeUnknownError(promptError)
|
|
30139
30145
|
});
|
|
30140
30146
|
} catch (entryErr) {
|
|
30141
|
-
log$
|
|
30147
|
+
log$7.warn(`failed to persist prompt error entry: ${String(entryErr)}`);
|
|
30142
30148
|
}
|
|
30143
30149
|
cacheTrace?.recordStage("session:after", {
|
|
30144
30150
|
messages: messagesSnapshot,
|
|
@@ -30157,17 +30163,17 @@ async function runEmbeddedAttempt(params) {
|
|
|
30157
30163
|
workspaceDir: params.workspaceDir,
|
|
30158
30164
|
messageProvider: params.messageProvider ?? void 0
|
|
30159
30165
|
}).catch((err) => {
|
|
30160
|
-
log$
|
|
30166
|
+
log$7.warn(`agent_end hook failed: ${err}`);
|
|
30161
30167
|
});
|
|
30162
30168
|
} finally {
|
|
30163
30169
|
clearTimeout(abortTimer);
|
|
30164
30170
|
clearSymipulseTimer();
|
|
30165
30171
|
if (abortWarnTimer) clearTimeout(abortWarnTimer);
|
|
30166
|
-
if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$
|
|
30172
|
+
if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$7.debug(`run cleanup: runId=${params.runId} sessionId=${params.sessionId} aborted=${aborted} timedOut=${timedOut}`);
|
|
30167
30173
|
try {
|
|
30168
30174
|
unsubscribe();
|
|
30169
30175
|
} catch (err) {
|
|
30170
|
-
log$
|
|
30176
|
+
log$7.error(`CRITICAL: unsubscribe failed, possible resource leak: runId=${params.runId} ${String(err)}`);
|
|
30171
30177
|
}
|
|
30172
30178
|
clearActiveEmbeddedRun(params.sessionId, queueHandle, params.sessionKey);
|
|
30173
30179
|
params.abortSignal?.removeEventListener?.("abort", onAbort);
|
|
@@ -30192,7 +30198,7 @@ async function runEmbeddedAttempt(params) {
|
|
|
30192
30198
|
workspaceDir: params.workspaceDir,
|
|
30193
30199
|
messageProvider: params.messageProvider ?? void 0
|
|
30194
30200
|
}).catch((err) => {
|
|
30195
|
-
log$
|
|
30201
|
+
log$7.warn(`llm_output hook failed: ${String(err)}`);
|
|
30196
30202
|
});
|
|
30197
30203
|
return {
|
|
30198
30204
|
aborted,
|
|
@@ -30453,7 +30459,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30453
30459
|
const redactedSessionId = redactRunIdentifier(params.sessionId);
|
|
30454
30460
|
const redactedSessionKey = redactRunIdentifier(params.sessionKey);
|
|
30455
30461
|
const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
|
|
30456
|
-
if (workspaceResolution.usedFallback) log$
|
|
30462
|
+
if (workspaceResolution.usedFallback) log$7.warn(`[workspace-fallback] caller=runEmbeddedPiAgent reason=${workspaceResolution.fallbackReason} run=${params.runId} session=${redactedSessionId} sessionKey=${redactedSessionKey} agent=${workspaceResolution.agentId} workspace=${redactedWorkspace}`);
|
|
30457
30463
|
const prevCwd = process.cwd();
|
|
30458
30464
|
let provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
30459
30465
|
let modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
|
@@ -30472,7 +30478,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30472
30478
|
if (hookRunner?.hasHooks("before_model_resolve")) try {
|
|
30473
30479
|
modelResolveOverride = await hookRunner.runBeforeModelResolve({ prompt: params.prompt }, hookCtx);
|
|
30474
30480
|
} catch (hookErr) {
|
|
30475
|
-
log$
|
|
30481
|
+
log$7.warn(`before_model_resolve hook failed: ${String(hookErr)}`);
|
|
30476
30482
|
}
|
|
30477
30483
|
if (hookRunner?.hasHooks("before_agent_start")) try {
|
|
30478
30484
|
const legacyResult = await hookRunner.runBeforeAgentStart({ prompt: params.prompt }, hookCtx);
|
|
@@ -30481,15 +30487,15 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30481
30487
|
modelOverride: modelResolveOverride?.modelOverride ?? legacyResult?.modelOverride
|
|
30482
30488
|
};
|
|
30483
30489
|
} catch (hookErr) {
|
|
30484
|
-
log$
|
|
30490
|
+
log$7.warn(`before_agent_start hook (legacy model resolve path) failed: ${String(hookErr)}`);
|
|
30485
30491
|
}
|
|
30486
30492
|
if (modelResolveOverride?.providerOverride) {
|
|
30487
30493
|
provider = modelResolveOverride.providerOverride;
|
|
30488
|
-
log$
|
|
30494
|
+
log$7.info(`[hooks] provider overridden to ${provider}`);
|
|
30489
30495
|
}
|
|
30490
30496
|
if (modelResolveOverride?.modelOverride) {
|
|
30491
30497
|
modelId = modelResolveOverride.modelOverride;
|
|
30492
|
-
log$
|
|
30498
|
+
log$7.info(`[hooks] model overridden to ${modelId}`);
|
|
30493
30499
|
}
|
|
30494
30500
|
const { model, error, authStorage, modelRegistry } = resolveModel(provider, modelId, agentDir, params.config);
|
|
30495
30501
|
if (!model) throw new FailoverError(error ?? `Unknown model: ${provider}/${modelId}`, {
|
|
@@ -30509,9 +30515,9 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30509
30515
|
warnBelowTokens: CONTEXT_WINDOW_WARN_BELOW_TOKENS,
|
|
30510
30516
|
hardMinTokens: CONTEXT_WINDOW_HARD_MIN_TOKENS
|
|
30511
30517
|
});
|
|
30512
|
-
if (ctxGuard.shouldWarn) log$
|
|
30518
|
+
if (ctxGuard.shouldWarn) log$7.warn(`low context window: ${provider}/${modelId} ctx=${ctxGuard.tokens} (warn<${CONTEXT_WINDOW_WARN_BELOW_TOKENS}) source=${ctxGuard.source}`);
|
|
30513
30519
|
if (ctxGuard.shouldBlock) {
|
|
30514
|
-
log$
|
|
30520
|
+
log$7.error(`blocked model (context window too small): ${provider}/${modelId} ctx=${ctxGuard.tokens} (min=${CONTEXT_WINDOW_HARD_MIN_TOKENS}) source=${ctxGuard.source}`);
|
|
30515
30521
|
throw new FailoverError(`Model context window too small (${ctxGuard.tokens} tokens). Minimum is ${CONTEXT_WINDOW_HARD_MIN_TOKENS}.`, {
|
|
30516
30522
|
reason: "unknown",
|
|
30517
30523
|
provider,
|
|
@@ -30641,7 +30647,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30641
30647
|
while (true) {
|
|
30642
30648
|
if (runLoopIterations >= MAX_RUN_LOOP_ITERATIONS) {
|
|
30643
30649
|
const message = `Exceeded retry limit after ${runLoopIterations} attempts (max=${MAX_RUN_LOOP_ITERATIONS}).`;
|
|
30644
|
-
log$
|
|
30650
|
+
log$7.error(`[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} attempts=${runLoopIterations} maxAttempts=${MAX_RUN_LOOP_ITERATIONS}`);
|
|
30645
30651
|
return {
|
|
30646
30652
|
payloads: [{
|
|
30647
30653
|
text: "Request failed after repeated internal retries. Please try again, or use /new to start a fresh session.",
|
|
@@ -30762,18 +30768,18 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30762
30768
|
const overflowDiagId = createCompactionDiagId$1();
|
|
30763
30769
|
const errorText = contextOverflowError.text;
|
|
30764
30770
|
const msgCount = attempt.messagesSnapshot?.length ?? 0;
|
|
30765
|
-
log$
|
|
30771
|
+
log$7.warn(`[context-overflow-diag] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} source=${contextOverflowError.source} messages=${msgCount} sessionFile=${params.sessionFile} diagId=${overflowDiagId} compactionAttempts=${overflowCompactionAttempts} error=${errorText.slice(0, 200)}`);
|
|
30766
30772
|
const isCompactionFailure = isCompactionFailureError(errorText);
|
|
30767
30773
|
const hadAttemptLevelCompaction = attemptCompactionCount > 0;
|
|
30768
30774
|
if (!isCompactionFailure && hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
|
|
30769
30775
|
overflowCompactionAttempts++;
|
|
30770
|
-
log$
|
|
30776
|
+
log$7.warn(`context overflow persisted after in-attempt compaction (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); retrying prompt without additional compaction for ${provider}/${modelId}`);
|
|
30771
30777
|
continue;
|
|
30772
30778
|
}
|
|
30773
30779
|
if (!isCompactionFailure && !hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
|
|
30774
|
-
if (log$
|
|
30780
|
+
if (log$7.isEnabled("debug")) log$7.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=compact isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=unknown attempt=${overflowCompactionAttempts + 1} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
30775
30781
|
overflowCompactionAttempts++;
|
|
30776
|
-
log$
|
|
30782
|
+
log$7.warn(`context overflow detected (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); attempting auto-compaction for ${provider}/${modelId}`);
|
|
30777
30783
|
const compactResult = await compactEmbeddedPiSessionDirect({
|
|
30778
30784
|
sessionId: params.sessionId,
|
|
30779
30785
|
sessionKey: params.sessionKey,
|
|
@@ -30802,10 +30808,10 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30802
30808
|
});
|
|
30803
30809
|
if (compactResult.compacted) {
|
|
30804
30810
|
autoCompactionCount += 1;
|
|
30805
|
-
log$
|
|
30811
|
+
log$7.info(`auto-compaction succeeded for ${provider}/${modelId}; retrying prompt`);
|
|
30806
30812
|
continue;
|
|
30807
30813
|
}
|
|
30808
|
-
log$
|
|
30814
|
+
log$7.warn(`auto-compaction failed for ${provider}/${modelId}: ${compactResult.reason ?? "nothing to compact"}`);
|
|
30809
30815
|
}
|
|
30810
30816
|
if (!toolResultTruncationAttempted) {
|
|
30811
30817
|
const contextWindowTokens = ctxInfo.tokens;
|
|
@@ -30814,9 +30820,9 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30814
30820
|
contextWindowTokens
|
|
30815
30821
|
}) : false;
|
|
30816
30822
|
if (hasOversized) {
|
|
30817
|
-
if (log$
|
|
30823
|
+
if (log$7.isEnabled("debug")) log$7.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=truncate_tool_results isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=${hasOversized} attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
30818
30824
|
toolResultTruncationAttempted = true;
|
|
30819
|
-
log$
|
|
30825
|
+
log$7.warn(`[context-overflow-recovery] Attempting tool result truncation for ${provider}/${modelId} (contextWindow=${contextWindowTokens} tokens)`);
|
|
30820
30826
|
const truncResult = await truncateOversizedToolResultsInSession({
|
|
30821
30827
|
sessionFile: params.sessionFile,
|
|
30822
30828
|
contextWindowTokens,
|
|
@@ -30824,13 +30830,13 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30824
30830
|
sessionKey: params.sessionKey
|
|
30825
30831
|
});
|
|
30826
30832
|
if (truncResult.truncated) {
|
|
30827
|
-
log$
|
|
30833
|
+
log$7.info(`[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`);
|
|
30828
30834
|
continue;
|
|
30829
30835
|
}
|
|
30830
|
-
log$
|
|
30831
|
-
} else if (log$
|
|
30836
|
+
log$7.warn(`[context-overflow-recovery] Tool result truncation did not help: ${truncResult.reason ?? "unknown"}`);
|
|
30837
|
+
} else if (log$7.isEnabled("debug")) log$7.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=give_up isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=${hasOversized} attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
30832
30838
|
}
|
|
30833
|
-
if ((isCompactionFailure || overflowCompactionAttempts >= MAX_OVERFLOW_COMPACTION_ATTEMPTS || toolResultTruncationAttempted) && log$
|
|
30839
|
+
if ((isCompactionFailure || overflowCompactionAttempts >= MAX_OVERFLOW_COMPACTION_ATTEMPTS || toolResultTruncationAttempted) && log$7.isEnabled("debug")) log$7.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=give_up isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=unknown attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
|
|
30834
30840
|
const kind = isCompactionFailure ? "compaction_failure" : "context_overflow";
|
|
30835
30841
|
return {
|
|
30836
30842
|
payloads: [{
|
|
@@ -30911,7 +30917,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30911
30917
|
attempted: attemptedThinking
|
|
30912
30918
|
});
|
|
30913
30919
|
if (fallbackThinking) {
|
|
30914
|
-
log$
|
|
30920
|
+
log$7.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
|
|
30915
30921
|
thinkLevel = fallbackThinking;
|
|
30916
30922
|
continue;
|
|
30917
30923
|
}
|
|
@@ -30929,7 +30935,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30929
30935
|
attempted: attemptedThinking
|
|
30930
30936
|
});
|
|
30931
30937
|
if (fallbackThinking && !aborted) {
|
|
30932
|
-
log$
|
|
30938
|
+
log$7.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
|
|
30933
30939
|
thinkLevel = fallbackThinking;
|
|
30934
30940
|
continue;
|
|
30935
30941
|
}
|
|
@@ -30946,7 +30952,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30946
30952
|
imageDimensionError.contentIndex !== void 0 ? `content=${imageDimensionError.contentIndex}` : null,
|
|
30947
30953
|
imageDimensionError.maxDimensionPx !== void 0 ? `limit=${imageDimensionError.maxDimensionPx}px` : null
|
|
30948
30954
|
].filter(Boolean).join(" ");
|
|
30949
|
-
log$
|
|
30955
|
+
log$7.warn(`Profile ${lastProfileId} rejected image payload${details ? ` (${details})` : ""}.`);
|
|
30950
30956
|
}
|
|
30951
30957
|
const isLocalOllamaTimeout = timedOut && model.api === "ollama";
|
|
30952
30958
|
if (!aborted && failoverFailure || timedOut && !timedOutDuringCompaction && !isLocalOllamaTimeout) {
|
|
@@ -30958,8 +30964,8 @@ async function runEmbeddedPiAgent(params) {
|
|
|
30958
30964
|
cfg: params.config,
|
|
30959
30965
|
agentDir: params.agentDir
|
|
30960
30966
|
});
|
|
30961
|
-
if (timedOut && !isProbeSession) log$
|
|
30962
|
-
if (cloudCodeAssistFormatError) log$
|
|
30967
|
+
if (timedOut && !isProbeSession) log$7.warn(`Profile ${lastProfileId} timed out (possible rate limit). Trying next account...`);
|
|
30968
|
+
if (cloudCodeAssistFormatError) log$7.warn(`Profile ${lastProfileId} hit Cloud Code Assist format error. Tool calls will be sanitized on retry.`);
|
|
30963
30969
|
}
|
|
30964
30970
|
if (await advanceAuthProfile()) continue;
|
|
30965
30971
|
if (fallbackConfigured) {
|
|
@@ -31025,7 +31031,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
31025
31031
|
const hasCodeBlocks = attempt.assistantTexts.some((text) => /```[\s\S]*?```/.test(text));
|
|
31026
31032
|
if (hasCodeToolUsage || hasCodeBlocks) {
|
|
31027
31033
|
verificationPassCompleted = true;
|
|
31028
|
-
log$
|
|
31034
|
+
log$7.debug(`[verification] starting verification pass: runId=${params.runId} sessionId=${params.sessionId} trigger=${hasCodeToolUsage ? "tool_usage" : "code_blocks"}`);
|
|
31029
31035
|
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.";
|
|
31030
31036
|
try {
|
|
31031
31037
|
const verifyAttempt = await runEmbeddedAttempt({
|
|
@@ -31111,10 +31117,10 @@ async function runEmbeddedPiAgent(params) {
|
|
|
31111
31117
|
payloads.length = 0;
|
|
31112
31118
|
payloads.push(...verifyPayloads);
|
|
31113
31119
|
}
|
|
31114
|
-
log$
|
|
31115
|
-
} else log$
|
|
31120
|
+
log$7.debug(`[verification] verification produced corrections: runId=${params.runId} tools=${verifyAttempt.toolMetas.length} texts=${verifyAttempt.assistantTexts.length}`);
|
|
31121
|
+
} else log$7.debug(`[verification] verification confirmed original response: runId=${params.runId}`);
|
|
31116
31122
|
} catch (verifyErr) {
|
|
31117
|
-
log$
|
|
31123
|
+
log$7.warn(`[verification] verification pass failed, keeping original response: runId=${params.runId} error=${String(verifyErr)}`);
|
|
31118
31124
|
}
|
|
31119
31125
|
}
|
|
31120
31126
|
}
|
|
@@ -31135,7 +31141,7 @@ async function runEmbeddedPiAgent(params) {
|
|
|
31135
31141
|
messagingToolSentTargets: attempt.messagingToolSentTargets,
|
|
31136
31142
|
successfulCronAdds: attempt.successfulCronAdds
|
|
31137
31143
|
};
|
|
31138
|
-
log$
|
|
31144
|
+
log$7.debug(`embedded run done: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - started} aborted=${aborted}`);
|
|
31139
31145
|
if (lastProfileId) {
|
|
31140
31146
|
await markAuthProfileGood({
|
|
31141
31147
|
store: authStore,
|
|
@@ -31387,7 +31393,7 @@ async function runAgentTurn(params) {
|
|
|
31387
31393
|
function createDefaultDeps() {
|
|
31388
31394
|
return {
|
|
31389
31395
|
sendMessageWhatsApp: async (...args) => {
|
|
31390
|
-
const { sendMessageWhatsApp } = await import("./web-
|
|
31396
|
+
const { sendMessageWhatsApp } = await import("./web-DoRGusTq.js");
|
|
31391
31397
|
return await sendMessageWhatsApp(...args);
|
|
31392
31398
|
},
|
|
31393
31399
|
sendMessageTelegram: async (...args) => {
|
|
@@ -49818,7 +49824,7 @@ function loadWebLoginQr() {
|
|
|
49818
49824
|
return webLoginQrPromise;
|
|
49819
49825
|
}
|
|
49820
49826
|
function loadWebChannel() {
|
|
49821
|
-
webChannelPromise ??= import("./web-
|
|
49827
|
+
webChannelPromise ??= import("./web-DoRGusTq.js");
|
|
49822
49828
|
return webChannelPromise;
|
|
49823
49829
|
}
|
|
49824
49830
|
function loadWhatsAppActions() {
|
|
@@ -64669,7 +64675,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
64669
64675
|
const provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
|
|
64670
64676
|
const modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
|
|
64671
64677
|
const fail = (reason) => {
|
|
64672
|
-
log$
|
|
64678
|
+
log$7.warn(`[compaction-diag] end runId=${runId} sessionKey=${params.sessionKey ?? params.sessionId} diagId=${diagId} trigger=${trigger} provider=${provider}/${modelId} attempt=${attempt} maxAttempts=${maxAttempts} outcome=failed reason=${classifyCompactionReason(reason)} durationMs=${Date.now() - startedAt}`);
|
|
64673
64679
|
return {
|
|
64674
64680
|
ok: false,
|
|
64675
64681
|
compacted: false,
|
|
@@ -64737,7 +64743,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
64737
64743
|
sessionId: params.sessionId,
|
|
64738
64744
|
warn: makeBootstrapWarn({
|
|
64739
64745
|
sessionLabel,
|
|
64740
|
-
warn: (message) => log$
|
|
64746
|
+
warn: (message) => log$7.warn(message)
|
|
64741
64747
|
})
|
|
64742
64748
|
});
|
|
64743
64749
|
const runAbortController = new AbortController();
|
|
@@ -64877,7 +64883,7 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
64877
64883
|
try {
|
|
64878
64884
|
await repairSessionFileIfNeeded({
|
|
64879
64885
|
sessionFile: params.sessionFile,
|
|
64880
|
-
warn: (message) => log$
|
|
64886
|
+
warn: (message) => log$7.warn(message)
|
|
64881
64887
|
});
|
|
64882
64888
|
await prewarmSessionFile(params.sessionFile);
|
|
64883
64889
|
const transcriptPolicy = resolveTranscriptPolicy({
|
|
@@ -64962,13 +64968,13 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
64962
64968
|
messages: preCompactionMessages,
|
|
64963
64969
|
sessionFile: params.sessionFile
|
|
64964
64970
|
}, hookCtx).catch((hookErr) => {
|
|
64965
|
-
log$
|
|
64971
|
+
log$7.warn(`before_compaction hook failed: ${String(hookErr)}`);
|
|
64966
64972
|
});
|
|
64967
|
-
const diagEnabled = log$
|
|
64973
|
+
const diagEnabled = log$7.isEnabled("debug");
|
|
64968
64974
|
const preMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
|
|
64969
64975
|
if (diagEnabled && preMetrics) {
|
|
64970
|
-
log$
|
|
64971
|
-
log$
|
|
64976
|
+
log$7.debug(`[compaction-diag] start runId=${runId} sessionKey=${params.sessionKey ?? params.sessionId} diagId=${diagId} trigger=${trigger} provider=${provider}/${modelId} attempt=${attempt} maxAttempts=${maxAttempts} pre.messages=${preMetrics.messages} pre.historyTextChars=${preMetrics.historyTextChars} pre.toolResultChars=${preMetrics.toolResultChars} pre.estTokens=${preMetrics.estTokens ?? "unknown"}`);
|
|
64977
|
+
log$7.debug(`[compaction-diag] contributors diagId=${diagId} top=${JSON.stringify(preMetrics.contributors)}`);
|
|
64972
64978
|
}
|
|
64973
64979
|
const compactStartedAt = Date.now();
|
|
64974
64980
|
const result = await compactWithSafetyTimeout(() => session.compact(params.customInstructions));
|
|
@@ -64986,10 +64992,10 @@ async function compactEmbeddedPiSessionDirect(params) {
|
|
|
64986
64992
|
compactedCount: limited.length - session.messages.length,
|
|
64987
64993
|
sessionFile: params.sessionFile
|
|
64988
64994
|
}, hookCtx).catch((hookErr) => {
|
|
64989
|
-
log$
|
|
64995
|
+
log$7.warn(`after_compaction hook failed: ${hookErr}`);
|
|
64990
64996
|
});
|
|
64991
64997
|
const postMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
|
|
64992
|
-
if (diagEnabled && preMetrics && postMetrics) log$
|
|
64998
|
+
if (diagEnabled && preMetrics && postMetrics) log$7.debug(`[compaction-diag] end runId=${runId} sessionKey=${params.sessionKey ?? params.sessionId} diagId=${diagId} trigger=${trigger} provider=${provider}/${modelId} attempt=${attempt} maxAttempts=${maxAttempts} outcome=compacted reason=none durationMs=${Date.now() - compactStartedAt} retrying=false post.messages=${postMetrics.messages} post.historyTextChars=${postMetrics.historyTextChars} post.toolResultChars=${postMetrics.toolResultChars} post.estTokens=${postMetrics.estTokens ?? "unknown"} delta.messages=${postMetrics.messages - preMetrics.messages} delta.historyTextChars=${postMetrics.historyTextChars - preMetrics.historyTextChars} delta.toolResultChars=${postMetrics.toolResultChars - preMetrics.toolResultChars} delta.estTokens=${typeof preMetrics.estTokens === "number" && typeof postMetrics.estTokens === "number" ? postMetrics.estTokens - preMetrics.estTokens : "unknown"}`);
|
|
64993
64999
|
return {
|
|
64994
65000
|
ok: true,
|
|
64995
65001
|
compacted: true,
|