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