@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.
Files changed (109) hide show
  1. package/dist/{agents-qLMWAYwU.js → agents-Dm0V9Z2G.js} +4 -4
  2. package/dist/{agents.config-BmdFH4J5.js → agents.config-DP0CLvIA.js} +1 -1
  3. package/dist/{agents.config-BfjAwFCr.js → agents.config-WdkJjM2-.js} +1 -1
  4. package/dist/{audio-preflight-BVaaZWkg.js → audio-preflight-DHTaS5U1.js} +4 -4
  5. package/dist/{auth-choice-D1u_GPfQ.js → auth-choice-B9OnYICm.js} +1 -1
  6. package/dist/{auth-choice-zFq3WRQ0.js → auth-choice-CXHi61T5.js} +1 -1
  7. package/dist/{banner-DpH44qlJ.js → banner-ToxTMzfL.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +6 -6
  10. package/dist/bundled/session-memory/handler.js +6 -6
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-C8tKm8re.js → channel-options-CsGrHsjP.js} +1 -1
  13. package/dist/{channel-options-0iOfzVR3.js → channel-options-Jl8AKRLD.js} +1 -1
  14. package/dist/{channel-web-DYinYBz4.js → channel-web-qFGaLytG.js} +1 -1
  15. package/dist/{channels-cli-93tLT17t.js → channels-cli-BFyOmW-R.js} +4 -4
  16. package/dist/{channels-cli-C8HgSMTH.js → channels-cli-DQTl2Pk5.js} +4 -4
  17. package/dist/{chrome-DkaXoP36.js → chrome-DYZwl5Gv.js} +7 -7
  18. package/dist/{cli-BYJyRW2M.js → cli-B4biLt2z.js} +1 -1
  19. package/dist/{cli-DapZXGSB.js → cli-DQw_LEew.js} +1 -1
  20. package/dist/{command-registry-9EhYc6da.js → command-registry-D1OePePk.js} +9 -9
  21. package/dist/{completion-cli-BFZv3K5D.js → completion-cli-CI-0hC_u.js} +2 -2
  22. package/dist/{completion-cli-CCeQlMlC.js → completion-cli-DW8a1WYc.js} +1 -1
  23. package/dist/{config-cli-Dv2mtIeM.js → config-cli-CpiluXlO.js} +1 -1
  24. package/dist/{config-cli-DbWMIBUz.js → config-cli-DHXt5cQZ.js} +1 -1
  25. package/dist/{configure-CVQf2UJE.js → configure-CmVnpTNi.js} +3 -3
  26. package/dist/{configure-B8zV6Hxj.js → configure-Ha9cu8Bu.js} +3 -3
  27. package/dist/{deliver-C46-vyqg.js → deliver-dODxSv3b.js} +1 -1
  28. package/dist/{doctor-completion-BunqvoqZ.js → doctor-completion-CRNCOXcf.js} +1 -1
  29. package/dist/{doctor-completion-CLeX1kaN.js → doctor-completion-ve-JPlmN.js} +1 -1
  30. package/dist/entry.js +1 -1
  31. package/dist/extensionAPI.js +1 -1
  32. package/dist/{gateway-cli-Co-tp-WC.js → gateway-cli-BPsbjmUI.js} +9 -9
  33. package/dist/{gateway-cli-DMey_29a.js → gateway-cli-Cc7N8N_E.js} +9 -9
  34. package/dist/{glass-ui-ws-CKb1jTZR.js → glass-ui-ws-1O1O2xC6.js} +7 -7
  35. package/dist/{glass-ui-ws-C4O227UO.js → glass-ui-ws-CKwLnOwl.js} +7 -7
  36. package/dist/{health-CDGOsNeD.js → health-DTRWmRB8.js} +1 -1
  37. package/dist/{health-CM1asUG8.js → health-tYyUNVp5.js} +1 -1
  38. package/dist/{hooks-cli-DFKB3Z6X.js → hooks-cli-Cp81vqRc.js} +2 -2
  39. package/dist/{hooks-cli-Tx0TzSju.js → hooks-cli-eC03ywfG.js} +2 -2
  40. package/dist/{image-CuzFLQWC.js → image-CXu8W39c.js} +1 -1
  41. package/dist/index.js +6 -6
  42. package/dist/llm-slug-generator.js +6 -6
  43. package/dist/{models-CiqHYwje.js → models-CuhnCX2U.js} +2 -2
  44. package/dist/{models-cli-B4ATSsNS.js → models-cli-BzwGQUdn.js} +3 -3
  45. package/dist/{models-cli-B-b-gBKG.js → models-cli-CFr_ZP5y.js} +2 -2
  46. package/dist/{onboard-B_ECX48L.js → onboard-B2g2Q6dd.js} +2 -2
  47. package/dist/{onboard-DcnGZKZX.js → onboard-CcB6pmEy.js} +2 -2
  48. package/dist/{onboard-channels-pfSGhg_C.js → onboard-channels-CWd17q6h.js} +1 -1
  49. package/dist/{onboard-channels-FFQPpuEN.js → onboard-channels-DmRBC7VN.js} +1 -1
  50. package/dist/{onboarding-jhZxQcZ3.js → onboarding-DMqlt_p6.js} +3 -3
  51. package/dist/{onboarding-BU14cspo.js → onboarding-DwvQIqR8.js} +3 -3
  52. package/dist/{onboarding.finalize-ByZT4dF5.js → onboarding.finalize-BUSzTwhM.js} +5 -5
  53. package/dist/{onboarding.finalize-B8oOMfHc.js → onboarding.finalize-lJmZSE4C.js} +6 -6
  54. package/dist/{pi-embedded-BY9AnmoP.js → pi-embedded-CT2JDfQr.js} +147 -141
  55. package/dist/{pi-embedded-helpers-CfqDGQ9J.js → pi-embedded-helpers-pubKo8HQ.js} +4 -4
  56. package/dist/{plugin-registry-DXWJkJX6.js → plugin-registry-DZdPnpP_.js} +1 -1
  57. package/dist/{plugin-registry-CNf1_8hj.js → plugin-registry-vW2V1yCi.js} +1 -1
  58. package/dist/plugin-sdk/{channel-web-DZQQ0mzN.js → channel-web-38aqDKeT.js} +1 -1
  59. package/dist/plugin-sdk/index.js +2 -2
  60. package/dist/plugin-sdk/{reply-DvZeyOVA.js → reply-BjJZjZRr.js} +143 -137
  61. package/dist/plugin-sdk/{web-BCsJFuQu.js → web-BgKYnau3.js} +2 -2
  62. package/dist/{plugins-cli-BiedlZMy.js → plugins-cli-BTq9c2hZ.js} +2 -2
  63. package/dist/{plugins-cli-C9TYM40P.js → plugins-cli-DkAx9r3h.js} +2 -2
  64. package/dist/{program-bnWda72r.js → program-DZx9PtyT.js} +7 -7
  65. package/dist/{program-context-CY1jWc5A.js → program-context-DyfuToE1.js} +17 -17
  66. package/dist/{prompt-select-styled-B_lFTtqp.js → prompt-select-styled-CifWTOoY.js} +4 -4
  67. package/dist/{prompt-select-styled-BEnZY8wI.js → prompt-select-styled-DNbD3v3G.js} +4 -4
  68. package/dist/{provider-auth-helpers-DApJuzBd.js → provider-auth-helpers-BPIIDTwA.js} +1 -1
  69. package/dist/{provider-auth-helpers-DcNKxc7D.js → provider-auth-helpers-BzySaUp5.js} +1 -1
  70. package/dist/{push-apns-CKKHlj6j.js → push-apns-DbpeXPGR.js} +1 -1
  71. package/dist/{push-apns-DA7UMNQH.js → push-apns-IdD-dKZm.js} +1 -1
  72. package/dist/{pw-ai-m0mj2KWK.js → pw-ai-B5asscAD.js} +1 -1
  73. package/dist/{register.agent-ulu0VmOg.js → register.agent-CfFcSvM1.js} +6 -6
  74. package/dist/{register.agent-8lxVlmzQ.js → register.agent-TFUcxDGN.js} +5 -5
  75. package/dist/{register.configure-rq0h5r3X.js → register.configure-BwRTNCws.js} +6 -6
  76. package/dist/{register.configure-45--Sly1.js → register.configure-D3BJejOC.js} +6 -6
  77. package/dist/{register.maintenance-DyEJx7NY.js → register.maintenance-B5350ddh.js} +7 -7
  78. package/dist/{register.maintenance-CXbxRtWI.js → register.maintenance-DkdVYwbj.js} +8 -8
  79. package/dist/{register.message-CiN_pt6K.js → register.message-DTopCPGC.js} +2 -2
  80. package/dist/{register.message-C7Yh1uky.js → register.message-FbCBAfJO.js} +2 -2
  81. package/dist/{register.onboard-e_2hc2Rm.js → register.onboard-DITZn8dx.js} +4 -4
  82. package/dist/{register.onboard-BWaRkbei.js → register.onboard-GSv5xyA3.js} +4 -4
  83. package/dist/{register.setup-BIIFHtF7.js → register.setup-BI6lILMU.js} +4 -4
  84. package/dist/{register.setup-zwh90Vn-.js → register.setup-BuOeoBk0.js} +4 -4
  85. package/dist/{register.status-health-sessions-D6t5maEr.js → register.status-health-sessions-C1RhWKxN.js} +3 -3
  86. package/dist/{register.status-health-sessions-O-sVAFHE.js → register.status-health-sessions-EK4_odLb.js} +3 -3
  87. package/dist/{register.subclis-DOiZocR6.js → register.subclis-Bn_Mr_Wa.js} +9 -9
  88. package/dist/{reply-05js8eGB.js → reply-BGSd_cMI.js} +138 -132
  89. package/dist/{run-main-u-Eyc8Wm.js → run-main-Bu9IAm9E.js} +14 -14
  90. package/dist/{runner-CU9l0uJh.js → runner-WAG0M5s9.js} +1 -1
  91. package/dist/{server-methods-Dds-iEoY.js → server-methods-dxn6-zQz.js} +7 -7
  92. package/dist/{server-methods-Bvl1xubo.js → server-methods-tA9lkIQT.js} +7 -7
  93. package/dist/{server-node-events-Qp-gJMET.js → server-node-events-6jcJSpXA.js} +2 -2
  94. package/dist/{server-node-events-qGqpsPxm.js → server-node-events-CzcTGD9T.js} +2 -2
  95. package/dist/{status-BRSo-LY3.js → status-8176C-aV.js} +2 -2
  96. package/dist/{status-BqQ9mm64.js → status-CcQSl2sN.js} +1 -1
  97. package/dist/{status-BATOXGRi.js → status-DGKT6HnE.js} +2 -2
  98. package/dist/{status-CfYa1Q9K.js → status-DmPOSk-A.js} +1 -1
  99. package/dist/{subagent-registry-lbDgDwLy.js → subagent-registry-DqFKNTCX.js} +141 -135
  100. package/dist/{unified-runner-B4ICXRlg.js → unified-runner-BbanUEmo.js} +166 -160
  101. package/dist/{update-cli-BOaP4XyQ.js → update-cli-FMcGr7MA.js} +8 -8
  102. package/dist/{update-cli-R8-SSkbS.js → update-cli-YCXB_6jz.js} +7 -7
  103. package/dist/{update-runner-CWJ4pC1b.js → update-runner-C8OkrKjW.js} +1 -1
  104. package/dist/{update-runner-B8UmqtLI.js → update-runner-DMP1rCS1.js} +1 -1
  105. package/dist/{web-CQH9fSkH.js → web-BsS1ia0M.js} +6 -6
  106. package/dist/{web-CSrDbJJ7.js → web-CQ2F1f3a.js} +1 -1
  107. package/dist/{web-BWybtnEa.js → web-DoRGusTq.js} +2 -2
  108. package/dist/{web-DBFW0ejP.js → web-LUMjboLF.js} +1 -1
  109. 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$8 = createSubsystemLogger("process/supervisor");
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$8.warn(`spawn failed: runId=${runId} reason=${String(err)}`);
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$7 = createSubsystemLogger("agent/claude-cli");
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$7.warn(`[workspace-fallback] caller=runCliAgent reason=${workspaceResolution.fallbackReason} run=${params.runId} session=${redactedSessionId} sessionKey=${redactedSessionKey} agent=${workspaceResolution.agentId} workspace=${redactedWorkspace}`);
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$7.warn(message)
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$7.info(`cli exec: provider=${params.provider} model=${normalizedModel} promptChars=${params.prompt.length}`);
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$7.info(`cli argv: ${backend.command} ${logArgs.join(" ")}`);
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$7.info(`cli stdout:\n${stdout}`);
22023
- if (stderr) log$7.info(`cli stderr:\n${stderr}`);
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$7.debug(`cli stdout:\n${stdout}`);
22027
- if (stderr) log$7.debug(`cli stderr:\n${stderr}`);
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$7.warn(`cli watchdog timeout: provider=${params.provider} model=${modelId} session=${cliSessionIdToSend ?? params.sessionId} noOutputTimeoutMs=${noOutputTimeoutMs} pid=${managedRun.pid ?? "unknown"}`);
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$6 = createSubsystemLogger("agent/embedded");
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$5 = createSubsystemLogger("agent/anthropic-payload");
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$5.info("anthropic usage", {
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$5.info("anthropic payload logger enabled", { filePath: writer.filePath });
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$4 = createSubsystemLogger("agent/embedded");
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$4.debug(`compaction promise rejected (no waiter): ${String(err)}`);
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$4.debug(`Skipping block reply - already sent via messaging tool: ${chunk.slice(0, 50)}...`);
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$4,
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$4.debug(`unsubscribe: rejecting compaction wait runId=${params.runId}`);
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$4.debug(`unsubscribe: aborting in-flight compaction runId=${params.runId}`);
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$4.warn(`unsubscribe: compaction abort failed runId=${params.runId} err=${String(err)}`);
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$3 = createSubsystemLogger("agents/tools");
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$3.warn(`tool loop outcome tracking failed: tool=${args.toolName} error=${String(err)}`);
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$3.error(`Blocking ${toolName} due to critical loop: ${loopResult.message}`);
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$3.warn(`Loop warning for ${toolName}: ${loopResult.message}`);
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$3.warn(`before_tool_call hook failed: tool=${toolName}${toolCallId} error=${String(err)}`);
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") return originalExecute.call(tool, toolCallId, params, ...rest);
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) 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.` });
25536
- if (result.cleaned !== command) return originalExecute.call(tool, toolCallId, {
25537
- ...params,
25538
- command: result.cleaned
25539
- }, ...rest);
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$6.info(`[tool-result-truncation] Found oversized tool result: entry=${entry.id} chars=${textLength} maxChars=${maxChars} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
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$6.info(`[tool-result-truncation] Truncated tool result: originalEntry=${entry.id} newChars=${newLength} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
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$6.info(`[tool-result-truncation] Truncated ${truncatedCount} tool result(s) in session (contextWindow=${contextWindowTokens} maxChars=${maxChars}) sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
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$6.warn(`[tool-result-truncation] Failed to truncate: ${errMsg}`);
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$6.warn(`ignoring context1m for non-opus/sonnet model: ${provider}/${modelId}`);
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$6.info("google tool schema snapshot", {
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$6.warn("google tool schema has unsupported keywords", {
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$6.error(`Auto-compaction failed (unhandled): ${message}`);
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$6.warn(message)))(`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`);
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$6.warn(`Native image: dropped ${dropped} image(s) after sanitization (${label}).`);
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$6.debug(`Native image: rejecting remote URL (local-only): ${ref.resolved}`);
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$6.debug(`Native image: sandbox validation failed for ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
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$6.debug(`Native image: not an image file: ${targetPath} (got ${media.kind})`);
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$6.debug(`Native image: failed to load ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
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$6.debug(`Native image: detected ${allRefs.length} image refs (${promptRefs.length} in prompt, ${uniqueHistoryRefs.length} in history)`);
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$6.debug(`Native image: loaded ${ref.type} ${ref.resolved}`);
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$6.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"}`);
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$6.warn(message)
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$6.warn(message)
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$6.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
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" && toolName) {
29881
- if (isError && toolName === lastErrorToolName) consecutiveToolErrors++;
29882
- else if (isError) {
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
- log$6.error(`Agent-loop circuit breaker: ${toolName} failed ${consecutiveToolErrors} consecutive times. Aborting run ${params.runId}.`);
29891
- abortRun(false, /* @__PURE__ */ new Error(`Tool ${toolName} failed ${consecutiveToolErrors} consecutive times. The model may be generating corrupted tool arguments. Run aborted to prevent infinite loop.`));
29892
- } else if (consecutiveToolErrors === TOOL_ERROR_WARN_THRESHOLD) log$6.warn(`Agent-loop tool error warning: ${toolName} failed ${consecutiveToolErrors} times consecutively. runId=${params.runId}`);
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$6.debug(`stream monitor detection (log-only, no abort): runId=${params.runId} reason=${streamMonitor.getStopReason()}`);
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$6.warn(`embedded run timeout: runId=${params.runId} sessionId=${params.sessionId} timeoutMs=${params.timeoutMs}`);
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$6.warn(`embedded run abort still streaming: runId=${params.runId} sessionId=${params.sessionId}`);
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$6.warn(`symipulse timeout: runId=${params.runId} sessionId=${params.sessionId} symipulseMs=${symipulseMs} (no activity)`);
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$6.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
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$6.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
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$6.debug(`hooks: prepended context to prompt (${hookResult.prependContext.length} chars)`);
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$6.debug(`auto-recall: injected ${recallResults.length} snippets (${recallBlock.length} chars)`);
30015
+ log$7.debug(`auto-recall: injected ${recallResults.length} snippets (${recallBlock.length} chars)`);
30010
30016
  }
30011
30017
  }
30012
30018
  } catch (recallErr) {
30013
- log$6.debug(`auto-recall: skipped (${String(recallErr)})`);
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$6.info(`plan-mode: activated (${planResult.reason}) for runId=${params.runId}`);
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$6.debug(`embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`);
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$6.warn(`Removed orphaned user message to prevent consecutive user turns. runId=${params.runId} sessionId=${params.sessionId}`);
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$6.isEnabled("debug")) {
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$6.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}`);
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$6.warn(`llm_input hook failed: ${String(err)}`);
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$6.debug(`embedded run prompt end: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - promptStartedAt}`);
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$6.debug(`compaction wait aborted: runId=${params.runId} sessionId=${params.sessionId}`);
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$6.warn(`using ${snapshotSelection.source} snapshot: timed out during compaction runId=${params.runId} sessionId=${params.sessionId}`);
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$6.warn(`failed to persist prompt error entry: ${String(entryErr)}`);
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$6.warn(`agent_end hook failed: ${err}`);
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$6.debug(`run cleanup: runId=${params.runId} sessionId=${params.sessionId} aborted=${aborted} timedOut=${timedOut}`);
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$6.error(`CRITICAL: unsubscribe failed, possible resource leak: runId=${params.runId} ${String(err)}`);
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$6.warn(`llm_output hook failed: ${String(err)}`);
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$6.warn(`[workspace-fallback] caller=runEmbeddedPiAgent reason=${workspaceResolution.fallbackReason} run=${params.runId} session=${redactedSessionId} sessionKey=${redactedSessionKey} agent=${workspaceResolution.agentId} workspace=${redactedWorkspace}`);
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$6.warn(`before_model_resolve hook failed: ${String(hookErr)}`);
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$6.warn(`before_agent_start hook (legacy model resolve path) failed: ${String(hookErr)}`);
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$6.info(`[hooks] provider overridden to ${provider}`);
30494
+ log$7.info(`[hooks] provider overridden to ${provider}`);
30489
30495
  }
30490
30496
  if (modelResolveOverride?.modelOverride) {
30491
30497
  modelId = modelResolveOverride.modelOverride;
30492
- log$6.info(`[hooks] model overridden to ${modelId}`);
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$6.warn(`low context window: ${provider}/${modelId} ctx=${ctxGuard.tokens} (warn<${CONTEXT_WINDOW_WARN_BELOW_TOKENS}) source=${ctxGuard.source}`);
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$6.error(`blocked model (context window too small): ${provider}/${modelId} ctx=${ctxGuard.tokens} (min=${CONTEXT_WINDOW_HARD_MIN_TOKENS}) source=${ctxGuard.source}`);
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$6.error(`[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} attempts=${runLoopIterations} maxAttempts=${MAX_RUN_LOOP_ITERATIONS}`);
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$6.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)}`);
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$6.warn(`context overflow persisted after in-attempt compaction (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); retrying prompt without additional compaction for ${provider}/${modelId}`);
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$6.isEnabled("debug")) log$6.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=compact isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=unknown attempt=${overflowCompactionAttempts + 1} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
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$6.warn(`context overflow detected (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); attempting auto-compaction for ${provider}/${modelId}`);
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$6.info(`auto-compaction succeeded for ${provider}/${modelId}; retrying prompt`);
30811
+ log$7.info(`auto-compaction succeeded for ${provider}/${modelId}; retrying prompt`);
30806
30812
  continue;
30807
30813
  }
30808
- log$6.warn(`auto-compaction failed for ${provider}/${modelId}: ${compactResult.reason ?? "nothing to compact"}`);
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$6.isEnabled("debug")) log$6.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=truncate_tool_results isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=${hasOversized} attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
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$6.warn(`[context-overflow-recovery] Attempting tool result truncation for ${provider}/${modelId} (contextWindow=${contextWindowTokens} tokens)`);
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$6.info(`[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`);
30833
+ log$7.info(`[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`);
30828
30834
  continue;
30829
30835
  }
30830
- log$6.warn(`[context-overflow-recovery] Tool result truncation did not help: ${truncResult.reason ?? "unknown"}`);
30831
- } else if (log$6.isEnabled("debug")) log$6.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=give_up isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=${hasOversized} attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
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$6.isEnabled("debug")) log$6.debug(`[compaction-diag] decision diagId=${overflowDiagId} branch=give_up isCompactionFailure=${isCompactionFailure} hasOversizedToolResults=unknown attempt=${overflowCompactionAttempts} maxAttempts=${MAX_OVERFLOW_COMPACTION_ATTEMPTS}`);
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$6.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
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$6.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
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$6.warn(`Profile ${lastProfileId} rejected image payload${details ? ` (${details})` : ""}.`);
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$6.warn(`Profile ${lastProfileId} timed out (possible rate limit). Trying next account...`);
30962
- if (cloudCodeAssistFormatError) log$6.warn(`Profile ${lastProfileId} hit Cloud Code Assist format error. Tool calls will be sanitized on retry.`);
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$6.debug(`[verification] starting verification pass: runId=${params.runId} sessionId=${params.sessionId} trigger=${hasCodeToolUsage ? "tool_usage" : "code_blocks"}`);
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$6.debug(`[verification] verification produced corrections: runId=${params.runId} tools=${verifyAttempt.toolMetas.length} texts=${verifyAttempt.assistantTexts.length}`);
31115
- } else log$6.debug(`[verification] verification confirmed original response: runId=${params.runId}`);
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$6.warn(`[verification] verification pass failed, keeping original response: runId=${params.runId} error=${String(verifyErr)}`);
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$6.debug(`embedded run done: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - started} aborted=${aborted}`);
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-BWybtnEa.js");
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-BWybtnEa.js");
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$6.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}`);
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$6.warn(message)
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$6.warn(message)
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$6.warn(`before_compaction hook failed: ${String(hookErr)}`);
64971
+ log$7.warn(`before_compaction hook failed: ${String(hookErr)}`);
64966
64972
  });
64967
- const diagEnabled = log$6.isEnabled("debug");
64973
+ const diagEnabled = log$7.isEnabled("debug");
64968
64974
  const preMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
64969
64975
  if (diagEnabled && preMetrics) {
64970
- log$6.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"}`);
64971
- log$6.debug(`[compaction-diag] contributors diagId=${diagId} top=${JSON.stringify(preMetrics.contributors)}`);
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$6.warn(`after_compaction hook failed: ${hookErr}`);
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$6.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"}`);
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,