@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
@@ -11532,7 +11532,7 @@ function resolveMemoryBackendConfig(params) {
11532
11532
 
11533
11533
  //#endregion
11534
11534
  //#region src/memory/search-manager.ts
11535
- const log$9 = createSubsystemLogger("memory");
11535
+ const log$10 = createSubsystemLogger("memory");
11536
11536
  const QMD_MANAGER_CACHE = /* @__PURE__ */ new Map();
11537
11537
  async function getMemorySearchManager(params) {
11538
11538
  const resolved = resolveMemoryBackendConfig(params);
@@ -11565,7 +11565,7 @@ async function getMemorySearchManager(params) {
11565
11565
  }
11566
11566
  } catch (err) {
11567
11567
  const message = err instanceof Error ? err.message : String(err);
11568
- log$9.warn(`qmd memory unavailable; falling back to builtin: ${message}`);
11568
+ log$10.warn(`qmd memory unavailable; falling back to builtin: ${message}`);
11569
11569
  }
11570
11570
  }
11571
11571
  try {
@@ -11592,7 +11592,7 @@ var FallbackMemoryManager = class {
11592
11592
  } catch (err) {
11593
11593
  this.primaryFailed = true;
11594
11594
  this.lastError = err instanceof Error ? err.message : String(err);
11595
- log$9.warn(`qmd memory failed; switching to builtin index: ${this.lastError}`);
11595
+ log$10.warn(`qmd memory failed; switching to builtin index: ${this.lastError}`);
11596
11596
  await this.deps.primary.close?.().catch(() => {});
11597
11597
  this.evictCacheEntry();
11598
11598
  }
@@ -11672,12 +11672,12 @@ var FallbackMemoryManager = class {
11672
11672
  try {
11673
11673
  fallback = await this.deps.fallbackFactory();
11674
11674
  if (!fallback) {
11675
- log$9.warn("memory fallback requested but builtin index is unavailable");
11675
+ log$10.warn("memory fallback requested but builtin index is unavailable");
11676
11676
  return null;
11677
11677
  }
11678
11678
  } catch (err) {
11679
11679
  const message = err instanceof Error ? err.message : String(err);
11680
- log$9.warn(`memory fallback unavailable: ${message}`);
11680
+ log$10.warn(`memory fallback unavailable: ${message}`);
11681
11681
  return null;
11682
11682
  }
11683
11683
  this.fallback = fallback;
@@ -25112,7 +25112,7 @@ function createRunRegistry(options) {
25112
25112
 
25113
25113
  //#endregion
25114
25114
  //#region src/process/supervisor/supervisor.ts
25115
- const log$8 = createSubsystemLogger("process/supervisor");
25115
+ const log$9 = createSubsystemLogger("process/supervisor");
25116
25116
  function clampTimeout(value) {
25117
25117
  if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) return;
25118
25118
  return Math.max(1, Math.floor(value));
@@ -25298,7 +25298,7 @@ function createProcessSupervisor() {
25298
25298
  exitCode: null,
25299
25299
  exitSignal: null
25300
25300
  });
25301
- log$8.warn(`spawn failed: runId=${runId} reason=${String(err)}`);
25301
+ log$9.warn(`spawn failed: runId=${runId} reason=${String(err)}`);
25302
25302
  throw err;
25303
25303
  }
25304
25304
  };
@@ -26597,7 +26597,7 @@ function resolveRunWorkspaceDir(params) {
26597
26597
 
26598
26598
  //#endregion
26599
26599
  //#region src/agents/cli-runner.ts
26600
- const log$7 = createSubsystemLogger("agent/claude-cli");
26600
+ const log$8 = createSubsystemLogger("agent/claude-cli");
26601
26601
  async function runCliAgent(params) {
26602
26602
  const started = Date.now();
26603
26603
  const workspaceResolution = resolveRunWorkspaceDir({
@@ -26610,7 +26610,7 @@ async function runCliAgent(params) {
26610
26610
  const redactedSessionId = redactRunIdentifier(params.sessionId);
26611
26611
  const redactedSessionKey = redactRunIdentifier(params.sessionKey);
26612
26612
  const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
26613
- 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}`);
26613
+ 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}`);
26614
26614
  const workspaceDir = resolvedWorkspace;
26615
26615
  const backendResolved = resolveCliBackendConfig(params.provider, params.config);
26616
26616
  if (!backendResolved) throw new Error(`Unknown CLI backend: ${params.provider}`);
@@ -26627,7 +26627,7 @@ async function runCliAgent(params) {
26627
26627
  sessionId: params.sessionId,
26628
26628
  warn: makeBootstrapWarn({
26629
26629
  sessionLabel,
26630
- warn: (message) => log$7.warn(message)
26630
+ warn: (message) => log$8.warn(message)
26631
26631
  })
26632
26632
  });
26633
26633
  const { defaultAgentId, sessionAgentId } = resolveSessionAgentIds({
@@ -26693,7 +26693,7 @@ async function runCliAgent(params) {
26693
26693
  const queueKey = backend.serialize ?? true ? backendResolved.id : `${backendResolved.id}:${params.runId}`;
26694
26694
  try {
26695
26695
  const output = await enqueueCliRun(queueKey, async () => {
26696
- log$7.info(`cli exec: provider=${params.provider} model=${normalizedModel} promptChars=${params.prompt.length}`);
26696
+ log$8.info(`cli exec: provider=${params.provider} model=${normalizedModel} promptChars=${params.prompt.length}`);
26697
26697
  const logOutputText = isTruthyEnvValue(process.env.SYMI_CLAUDE_CLI_LOG_OUTPUT);
26698
26698
  if (logOutputText) {
26699
26699
  const logArgs = [];
@@ -26726,7 +26726,7 @@ async function runCliAgent(params) {
26726
26726
  const promptIndex = logArgs.indexOf(argsPrompt);
26727
26727
  if (promptIndex >= 0) logArgs[promptIndex] = `<prompt:${argsPrompt.length} chars>`;
26728
26728
  }
26729
- log$7.info(`cli argv: ${backend.command} ${logArgs.join(" ")}`);
26729
+ log$8.info(`cli argv: ${backend.command} ${logArgs.join(" ")}`);
26730
26730
  }
26731
26731
  const env = (() => {
26732
26732
  const next = {
@@ -26764,17 +26764,17 @@ async function runCliAgent(params) {
26764
26764
  const stdout = result.stdout.trim();
26765
26765
  const stderr = result.stderr.trim();
26766
26766
  if (logOutputText) {
26767
- if (stdout) log$7.info(`cli stdout:\n${stdout}`);
26768
- if (stderr) log$7.info(`cli stderr:\n${stderr}`);
26767
+ if (stdout) log$8.info(`cli stdout:\n${stdout}`);
26768
+ if (stderr) log$8.info(`cli stderr:\n${stderr}`);
26769
26769
  }
26770
26770
  if (shouldLogVerbose()) {
26771
- if (stdout) log$7.debug(`cli stdout:\n${stdout}`);
26772
- if (stderr) log$7.debug(`cli stderr:\n${stderr}`);
26771
+ if (stdout) log$8.debug(`cli stdout:\n${stdout}`);
26772
+ if (stderr) log$8.debug(`cli stderr:\n${stderr}`);
26773
26773
  }
26774
26774
  if (result.exitCode !== 0 || result.reason !== "exit") {
26775
26775
  if (result.reason === "no-output-timeout" || result.noOutputTimedOut) {
26776
26776
  const timeoutReason = `CLI produced no output for ${Math.round(noOutputTimeoutMs / 1e3)}s and was terminated.`;
26777
- log$7.warn(`cli watchdog timeout: provider=${params.provider} model=${modelId} session=${cliSessionIdToSend ?? params.sessionId} noOutputTimeoutMs=${noOutputTimeoutMs} pid=${managedRun.pid ?? "unknown"}`);
26777
+ log$8.warn(`cli watchdog timeout: provider=${params.provider} model=${modelId} session=${cliSessionIdToSend ?? params.sessionId} noOutputTimeoutMs=${noOutputTimeoutMs} pid=${managedRun.pid ?? "unknown"}`);
26778
26778
  throw new FailoverError(timeoutReason, {
26779
26779
  reason: "timeout",
26780
26780
  provider: params.provider,
@@ -27404,7 +27404,7 @@ function resolveEmbeddedSessionLane(key) {
27404
27404
 
27405
27405
  //#endregion
27406
27406
  //#region src/agents/pi-embedded-runner/logger.ts
27407
- const log$6 = createSubsystemLogger("agent/embedded");
27407
+ const log$7 = createSubsystemLogger("agent/embedded");
27408
27408
 
27409
27409
  //#endregion
27410
27410
  //#region src/utils/safe-json.ts
@@ -27450,7 +27450,7 @@ function getQueuedFileWriter(writers, filePath) {
27450
27450
  //#endregion
27451
27451
  //#region src/agents/anthropic-payload-log.ts
27452
27452
  const writers$1 = /* @__PURE__ */ new Map();
27453
- const log$5 = createSubsystemLogger("agent/anthropic-payload");
27453
+ const log$6 = createSubsystemLogger("agent/anthropic-payload");
27454
27454
  function resolvePayloadLogConfig(env) {
27455
27455
  const enabled = parseBooleanValue$1(env.SYMI_ANTHROPIC_PAYLOAD_LOG) ?? false;
27456
27456
  const fileOverride = env.SYMI_ANTHROPIC_PAYLOAD_LOG_FILE?.trim();
@@ -27540,13 +27540,13 @@ function createAnthropicPayloadLogger(params) {
27540
27540
  usage,
27541
27541
  error: errorMessage
27542
27542
  });
27543
- log$5.info("anthropic usage", {
27543
+ log$6.info("anthropic usage", {
27544
27544
  runId: params.runId,
27545
27545
  sessionId: params.sessionId,
27546
27546
  usage
27547
27547
  });
27548
27548
  };
27549
- log$5.info("anthropic payload logger enabled", { filePath: writer.filePath });
27549
+ log$6.info("anthropic payload logger enabled", { filePath: writer.filePath });
27550
27550
  return {
27551
27551
  enabled: true,
27552
27552
  wrapStreamFn,
@@ -29428,7 +29428,7 @@ function createEmbeddedPiSessionEventHandler(ctx) {
29428
29428
  //#region src/agents/pi-embedded-subscribe.ts
29429
29429
  const THINKING_TAG_SCAN_RE = /<\s*(\/?)\s*(?:think(?:ing)?|thought|antthinking)\s*>/gi;
29430
29430
  const FINAL_TAG_SCAN_RE = /<\s*(\/?)\s*final\s*>/gi;
29431
- const log$4 = createSubsystemLogger("agent/embedded");
29431
+ const log$5 = createSubsystemLogger("agent/embedded");
29432
29432
  function subscribeEmbeddedPiSession(params) {
29433
29433
  const reasoningMode = params.reasoningMode ?? "off";
29434
29434
  const useMarkdown = (params.toolResultFormat ?? "markdown") === "markdown";
@@ -29585,7 +29585,7 @@ function subscribeEmbeddedPiSession(params) {
29585
29585
  state.compactionRetryReject = reject;
29586
29586
  });
29587
29587
  state.compactionRetryPromise.catch((err) => {
29588
- log$4.debug(`compaction promise rejected (no waiter): ${String(err)}`);
29588
+ log$5.debug(`compaction promise rejected (no waiter): ${String(err)}`);
29589
29589
  });
29590
29590
  }
29591
29591
  };
@@ -29737,7 +29737,7 @@ function subscribeEmbeddedPiSession(params) {
29737
29737
  if (!chunk) return;
29738
29738
  if (chunk === state.lastBlockReplyText) return;
29739
29739
  if (isMessagingToolDuplicateNormalized(normalizeTextForComparison(chunk), messagingToolSentTextsNormalized)) {
29740
- log$4.debug(`Skipping block reply - already sent via messaging tool: ${chunk.slice(0, 50)}...`);
29740
+ log$5.debug(`Skipping block reply - already sent via messaging tool: ${chunk.slice(0, 50)}...`);
29741
29741
  return;
29742
29742
  }
29743
29743
  if (shouldSkipAssistantText(chunk)) return;
@@ -29815,7 +29815,7 @@ function subscribeEmbeddedPiSession(params) {
29815
29815
  const ctx = {
29816
29816
  params,
29817
29817
  state,
29818
- log: log$4,
29818
+ log: log$5,
29819
29819
  blockChunking,
29820
29820
  blockChunker,
29821
29821
  hookRunner: params.hookRunner,
@@ -29848,7 +29848,7 @@ function subscribeEmbeddedPiSession(params) {
29848
29848
  if (state.unsubscribed) return;
29849
29849
  state.unsubscribed = true;
29850
29850
  if (state.compactionRetryPromise) {
29851
- log$4.debug(`unsubscribe: rejecting compaction wait runId=${params.runId}`);
29851
+ log$5.debug(`unsubscribe: rejecting compaction wait runId=${params.runId}`);
29852
29852
  const reject = state.compactionRetryReject;
29853
29853
  state.compactionRetryResolve = void 0;
29854
29854
  state.compactionRetryReject = void 0;
@@ -29858,11 +29858,11 @@ function subscribeEmbeddedPiSession(params) {
29858
29858
  reject?.(abortErr);
29859
29859
  }
29860
29860
  if (params.session.isCompacting) {
29861
- log$4.debug(`unsubscribe: aborting in-flight compaction runId=${params.runId}`);
29861
+ log$5.debug(`unsubscribe: aborting in-flight compaction runId=${params.runId}`);
29862
29862
  try {
29863
29863
  params.session.abortCompaction();
29864
29864
  } catch (err) {
29865
- log$4.warn(`unsubscribe: compaction abort failed runId=${params.runId} err=${String(err)}`);
29865
+ log$5.warn(`unsubscribe: compaction abort failed runId=${params.runId} err=${String(err)}`);
29866
29866
  }
29867
29867
  }
29868
29868
  sessionUnsubscribe();
@@ -29911,7 +29911,7 @@ function subscribeEmbeddedPiSession(params) {
29911
29911
 
29912
29912
  //#endregion
29913
29913
  //#region src/agents/pi-tools.before-tool-call.ts
29914
- const log$3 = createSubsystemLogger("agents/tools");
29914
+ const log$4 = createSubsystemLogger("agents/tools");
29915
29915
  const BEFORE_TOOL_CALL_WRAPPED = Symbol("beforeToolCallWrapped");
29916
29916
  const adjustedParamsByToolCallId = /* @__PURE__ */ new Map();
29917
29917
  const MAX_TRACKED_ADJUSTED_PARAMS = 1024;
@@ -29945,7 +29945,7 @@ async function recordLoopOutcome(args) {
29945
29945
  config: args.ctx.loopDetection
29946
29946
  });
29947
29947
  } catch (err) {
29948
- log$3.warn(`tool loop outcome tracking failed: tool=${args.toolName} error=${String(err)}`);
29948
+ log$4.warn(`tool loop outcome tracking failed: tool=${args.toolName} error=${String(err)}`);
29949
29949
  }
29950
29950
  }
29951
29951
  async function runBeforeToolCallHook(args) {
@@ -29962,7 +29962,7 @@ async function runBeforeToolCallHook(args) {
29962
29962
  const loopResult = detectToolCallLoop(sessionState, toolName, params, args.ctx.loopDetection);
29963
29963
  if (loopResult.stuck) {
29964
29964
  if (loopResult.level === "critical") {
29965
- log$3.error(`Blocking ${toolName} due to critical loop: ${loopResult.message}`);
29965
+ log$4.error(`Blocking ${toolName} due to critical loop: ${loopResult.message}`);
29966
29966
  logToolLoopAction({
29967
29967
  sessionKey: args.ctx.sessionKey,
29968
29968
  sessionId: args.ctx?.agentId,
@@ -29979,7 +29979,7 @@ async function runBeforeToolCallHook(args) {
29979
29979
  reason: loopResult.message
29980
29980
  };
29981
29981
  } else if (shouldEmitLoopWarning(sessionState, loopResult.warningKey ?? `${loopResult.detector}:${toolName}`, loopResult.count)) {
29982
- log$3.warn(`Loop warning for ${toolName}: ${loopResult.message}`);
29982
+ log$4.warn(`Loop warning for ${toolName}: ${loopResult.message}`);
29983
29983
  logToolLoopAction({
29984
29984
  sessionKey: args.ctx.sessionKey,
29985
29985
  sessionId: args.ctx?.agentId,
@@ -30029,7 +30029,7 @@ async function runBeforeToolCallHook(args) {
30029
30029
  }
30030
30030
  } catch (err) {
30031
30031
  const toolCallId = args.toolCallId ? ` toolCallId=${args.toolCallId}` : "";
30032
- log$3.warn(`before_tool_call hook failed: tool=${toolName}${toolCallId} error=${String(err)}`);
30032
+ log$4.warn(`before_tool_call hook failed: tool=${toolName}${toolCallId} error=${String(err)}`);
30033
30033
  }
30034
30034
  return {
30035
30035
  blocked: false,
@@ -30273,6 +30273,7 @@ function validateShellCommand(command) {
30273
30273
 
30274
30274
  //#endregion
30275
30275
  //#region src/agents/pi-tools.validate-wrapper.ts
30276
+ const log$3 = createSubsystemLogger("agents/tool-validate");
30276
30277
  const EXEC_TOOL_NAMES = new Set(["exec", "bash"]);
30277
30278
  const FILE_TOOL_NAMES = new Set([
30278
30279
  "write",
@@ -30331,13 +30332,22 @@ function wrapToolWithArgValidation(tool) {
30331
30332
  execute(toolCallId, params, ...rest) {
30332
30333
  if (isExecTool) {
30333
30334
  const command = params.command ?? params.cmd;
30334
- if (typeof command !== "string") return originalExecute.call(tool, toolCallId, params, ...rest);
30335
+ if (typeof command !== "string") {
30336
+ log$3.debug(`[validate] exec called without string command: keys=${Object.keys(params).join(",")}`);
30337
+ return originalExecute.call(tool, toolCallId, params, ...rest);
30338
+ }
30335
30339
  const result = validateShellCommand(command);
30336
- 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.` });
30337
- if (result.cleaned !== command) return originalExecute.call(tool, toolCallId, {
30338
- ...params,
30339
- command: result.cleaned
30340
- }, ...rest);
30340
+ if (!result.valid) {
30341
+ log$3.warn(`[validate] exec command rejected: reason=${result.reason} raw=${command.slice(0, 100)}`);
30342
+ 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.` });
30343
+ }
30344
+ if (result.cleaned !== command) {
30345
+ log$3.debug(`[validate] exec command cleaned: raw=${command.slice(0, 80)} → cleaned=${result.cleaned.slice(0, 80)}`);
30346
+ return originalExecute.call(tool, toolCallId, {
30347
+ ...params,
30348
+ command: result.cleaned
30349
+ }, ...rest);
30350
+ }
30341
30351
  return originalExecute.call(tool, toolCallId, params, ...rest);
30342
30352
  }
30343
30353
  const pathKey = FILE_PATH_KEYS.find((k) => typeof params[k] === "string");
@@ -30708,7 +30718,7 @@ async function truncateOversizedToolResultsInSession(params) {
30708
30718
  const textLength = getToolResultTextLength(msg);
30709
30719
  if (textLength > maxChars) {
30710
30720
  oversizedIndices.push(i);
30711
- log$6.info(`[tool-result-truncation] Found oversized tool result: entry=${entry.id} chars=${textLength} maxChars=${maxChars} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
30721
+ log$7.info(`[tool-result-truncation] Found oversized tool result: entry=${entry.id} chars=${textLength} maxChars=${maxChars} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
30712
30722
  }
30713
30723
  }
30714
30724
  if (oversizedIndices.length === 0) return {
@@ -30730,7 +30740,7 @@ async function truncateOversizedToolResultsInSession(params) {
30730
30740
  message = truncateToolResultMessage(message, maxChars);
30731
30741
  truncatedCount++;
30732
30742
  const newLength = getToolResultTextLength(message);
30733
- log$6.info(`[tool-result-truncation] Truncated tool result: originalEntry=${entry.id} newChars=${newLength} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
30743
+ log$7.info(`[tool-result-truncation] Truncated tool result: originalEntry=${entry.id} newChars=${newLength} sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
30734
30744
  }
30735
30745
  sessionManager.appendMessage(message);
30736
30746
  } else if (entry.type === "compaction") sessionManager.appendCompaction(entry.summary, entry.firstKeptEntryId, entry.tokensBefore, entry.details, entry.fromHook);
@@ -30744,14 +30754,14 @@ async function truncateOversizedToolResultsInSession(params) {
30744
30754
  if (entry.name) sessionManager.appendSessionInfo(entry.name);
30745
30755
  }
30746
30756
  }
30747
- log$6.info(`[tool-result-truncation] Truncated ${truncatedCount} tool result(s) in session (contextWindow=${contextWindowTokens} maxChars=${maxChars}) sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
30757
+ log$7.info(`[tool-result-truncation] Truncated ${truncatedCount} tool result(s) in session (contextWindow=${contextWindowTokens} maxChars=${maxChars}) sessionKey=${params.sessionKey ?? params.sessionId ?? "unknown"}`);
30748
30758
  return {
30749
30759
  truncated: true,
30750
30760
  truncatedCount
30751
30761
  };
30752
30762
  } catch (err) {
30753
30763
  const errMsg = err instanceof Error ? err.message : String(err);
30754
- log$6.warn(`[tool-result-truncation] Failed to truncate: ${errMsg}`);
30764
+ log$7.warn(`[tool-result-truncation] Failed to truncate: ${errMsg}`);
30755
30765
  return {
30756
30766
  truncated: false,
30757
30767
  truncatedCount: 0,
@@ -32527,7 +32537,7 @@ function resolveAnthropicBetas(extraParams, provider, modelId) {
32527
32537
  for (const beta of configured) if (typeof beta === "string" && beta.trim()) betas.add(beta.trim());
32528
32538
  }
32529
32539
  if (extraParams?.context1m === true) if (isAnthropic1MModel(modelId)) betas.add(ANTHROPIC_CONTEXT_1M_BETA);
32530
- else log$6.warn(`ignoring context1m for non-opus/sonnet model: ${provider}/${modelId}`);
32540
+ else log$7.warn(`ignoring context1m for non-opus/sonnet model: ${provider}/${modelId}`);
32531
32541
  return betas.size > 0 ? [...betas] : void 0;
32532
32542
  }
32533
32543
  function mergeAnthropicBetaHeader(headers, betas) {
@@ -33138,14 +33148,14 @@ function logToolSchemasForGoogle(params) {
33138
33148
  if (params.provider !== "google-antigravity" && params.provider !== "google-gemini-cli") return;
33139
33149
  const toolNames = params.tools.map((tool, index) => `${index}:${tool.name}`);
33140
33150
  const tools = sanitizeToolsForGoogle(params);
33141
- log$6.info("google tool schema snapshot", {
33151
+ log$7.info("google tool schema snapshot", {
33142
33152
  provider: params.provider,
33143
33153
  toolCount: tools.length,
33144
33154
  tools: toolNames
33145
33155
  });
33146
33156
  for (const [index, tool] of tools.entries()) {
33147
33157
  const violations = findUnsupportedSchemaKeywords(tool.parameters, `${tool.name}.parameters`);
33148
- if (violations.length > 0) log$6.warn("google tool schema has unsupported keywords", {
33158
+ if (violations.length > 0) log$7.warn("google tool schema has unsupported keywords", {
33149
33159
  index,
33150
33160
  tool: tool.name,
33151
33161
  violations: violations.slice(0, 12),
@@ -33157,7 +33167,7 @@ const compactionFailureEmitter = new EventEmitter();
33157
33167
  registerUnhandledRejectionHandler((reason) => {
33158
33168
  const message = describeUnknownError(reason);
33159
33169
  if (!isCompactionFailureError(message)) return false;
33160
- log$6.error(`Auto-compaction failed (unhandled): ${message}`);
33170
+ log$7.error(`Auto-compaction failed (unhandled): ${message}`);
33161
33171
  compactionFailureEmitter.emit("failure", message);
33162
33172
  return true;
33163
33173
  });
@@ -33209,7 +33219,7 @@ function applyGoogleTurnOrderingFix(params) {
33209
33219
  const sanitized = sanitizeGoogleTurnOrdering(params.messages);
33210
33220
  const didPrepend = sanitized !== params.messages;
33211
33221
  if (didPrepend && !hasGoogleTurnOrderingMarker(params.sessionManager)) {
33212
- (params.warn ?? ((message) => log$6.warn(message)))(`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`);
33222
+ (params.warn ?? ((message) => log$7.warn(message)))(`google turn ordering fixup: prepended user bootstrap (sessionId=${params.sessionId})`);
33213
33223
  markGoogleTurnOrderingMarker(params.sessionManager);
33214
33224
  }
33215
33225
  return {
@@ -33829,7 +33839,7 @@ function isImageExtension(filePath) {
33829
33839
  }
33830
33840
  async function sanitizeImagesWithLog(images, label, imageSanitization) {
33831
33841
  const { images: sanitized, dropped } = await sanitizeImageBlocks(images, label, imageSanitization);
33832
- if (dropped > 0) log$6.warn(`Native image: dropped ${dropped} image(s) after sanitization (${label}).`);
33842
+ if (dropped > 0) log$7.warn(`Native image: dropped ${dropped} image(s) after sanitization (${label}).`);
33833
33843
  return sanitized;
33834
33844
  }
33835
33845
  /**
@@ -33904,7 +33914,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
33904
33914
  try {
33905
33915
  let targetPath = ref.resolved;
33906
33916
  if (ref.type === "url") {
33907
- log$6.debug(`Native image: rejecting remote URL (local-only): ${ref.resolved}`);
33917
+ log$7.debug(`Native image: rejecting remote URL (local-only): ${ref.resolved}`);
33908
33918
  return null;
33909
33919
  }
33910
33920
  if (ref.type === "path") {
@@ -33914,7 +33924,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
33914
33924
  cwd: options.sandbox.root
33915
33925
  }).hostPath;
33916
33926
  } catch (err) {
33917
- log$6.debug(`Native image: sandbox validation failed for ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
33927
+ log$7.debug(`Native image: sandbox validation failed for ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
33918
33928
  return null;
33919
33929
  }
33920
33930
  else if (!path.isAbsolute(targetPath)) targetPath = path.resolve(workspaceDir, targetPath);
@@ -33928,7 +33938,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
33928
33938
  })
33929
33939
  }) : await loadWebMedia(targetPath, options?.maxBytes);
33930
33940
  if (media.kind !== "image") {
33931
- log$6.debug(`Native image: not an image file: ${targetPath} (got ${media.kind})`);
33941
+ log$7.debug(`Native image: not an image file: ${targetPath} (got ${media.kind})`);
33932
33942
  return null;
33933
33943
  }
33934
33944
  const mimeType = media.contentType ?? "image/jpeg";
@@ -33938,7 +33948,7 @@ async function loadImageFromRef(ref, workspaceDir, options) {
33938
33948
  mimeType
33939
33949
  };
33940
33950
  } catch (err) {
33941
- log$6.debug(`Native image: failed to load ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
33951
+ log$7.debug(`Native image: failed to load ${ref.resolved}: ${err instanceof Error ? err.message : String(err)}`);
33942
33952
  return null;
33943
33953
  }
33944
33954
  }
@@ -34037,7 +34047,7 @@ async function detectAndLoadPromptImages(params) {
34037
34047
  loadedCount: 0,
34038
34048
  skippedCount: 0
34039
34049
  };
34040
- log$6.debug(`Native image: detected ${allRefs.length} image refs (${promptRefs.length} in prompt, ${uniqueHistoryRefs.length} in history)`);
34050
+ log$7.debug(`Native image: detected ${allRefs.length} image refs (${promptRefs.length} in prompt, ${uniqueHistoryRefs.length} in history)`);
34041
34051
  const promptImages = [...params.existingImages ?? []];
34042
34052
  const historyImagesByIndex = /* @__PURE__ */ new Map();
34043
34053
  let loadedCount = 0;
@@ -34054,7 +34064,7 @@ async function detectAndLoadPromptImages(params) {
34054
34064
  else historyImagesByIndex.set(ref.messageIndex, [image]);
34055
34065
  } else promptImages.push(image);
34056
34066
  loadedCount++;
34057
- log$6.debug(`Native image: loaded ${ref.type} ${ref.resolved}`);
34067
+ log$7.debug(`Native image: loaded ${ref.type} ${ref.resolved}`);
34058
34068
  } else skippedCount++;
34059
34069
  }
34060
34070
  const imageSanitization = { maxDimensionPx: params.maxDimensionPx };
@@ -34150,7 +34160,7 @@ async function runEmbeddedAttempt(params) {
34150
34160
  const resolvedWorkspace = resolveUserPath(params.workspaceDir);
34151
34161
  const prevCwd = process.cwd();
34152
34162
  const runAbortController = new AbortController();
34153
- 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"}`);
34163
+ 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"}`);
34154
34164
  await fs$1.mkdir(resolvedWorkspace, { recursive: true });
34155
34165
  const sandboxSessionKey = params.sessionKey?.trim() || params.sessionId;
34156
34166
  const sandbox = await resolveSandboxContext({
@@ -34186,7 +34196,7 @@ async function runEmbeddedAttempt(params) {
34186
34196
  sessionId: params.sessionId,
34187
34197
  warn: makeBootstrapWarn({
34188
34198
  sessionLabel,
34189
- warn: (message) => log$6.warn(message)
34199
+ warn: (message) => log$7.warn(message)
34190
34200
  })
34191
34201
  });
34192
34202
  const workspaceNotes = hookAdjustedBootstrapFiles.some((file) => file.name === DEFAULT_BOOTSTRAP_FILENAME && !file.missing) ? ["Reminder: commit your changes in this workspace after edits."] : void 0;
@@ -34385,7 +34395,7 @@ async function runEmbeddedAttempt(params) {
34385
34395
  try {
34386
34396
  await repairSessionFileIfNeeded({
34387
34397
  sessionFile: params.sessionFile,
34388
- warn: (message) => log$6.warn(message)
34398
+ warn: (message) => log$7.warn(message)
34389
34399
  });
34390
34400
  const hadSessionFile = await fs$1.stat(params.sessionFile).then(() => true).catch(() => false);
34391
34401
  const transcriptPolicy = resolveTranscriptPolicy({
@@ -34394,7 +34404,7 @@ async function runEmbeddedAttempt(params) {
34394
34404
  modelId: params.modelId
34395
34405
  });
34396
34406
  const versionCheck = await handleSessionVersion(params.sessionFile);
34397
- if (versionCheck.archived) log$6.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
34407
+ if (versionCheck.archived) log$7.warn(`session archived: created by ${versionCheck.poisonVersion}, known corruption range → ${versionCheck.archivePath}`);
34398
34408
  await prewarmSessionFile(params.sessionFile);
34399
34409
  sessionManager = guardSessionManager(SessionManager.open(params.sessionFile), {
34400
34410
  agentId: sessionAgentId,
@@ -34649,7 +34659,6 @@ async function runEmbeddedAttempt(params) {
34649
34659
  const TOOL_ERROR_ABORT_THRESHOLD = 5;
34650
34660
  const TOOL_ERROR_WARN_THRESHOLD = 3;
34651
34661
  let consecutiveToolErrors = 0;
34652
- let lastErrorToolName = "";
34653
34662
  const subscription = subscribeEmbeddedPiSession({
34654
34663
  session: activeSession,
34655
34664
  runId: params.runId,
@@ -34673,26 +34682,23 @@ async function runEmbeddedAttempt(params) {
34673
34682
  params.onAgentEvent?.(evt);
34674
34683
  if (evt.stream === "tool" && !aborted) {
34675
34684
  const phase = typeof evt.data?.phase === "string" ? evt.data.phase : "";
34676
- const toolName = typeof evt.data?.name === "string" ? evt.data.name : "";
34677
34685
  const isError = evt.data?.isError === true;
34678
- if (phase === "result" && toolName) {
34679
- if (isError && toolName === lastErrorToolName) consecutiveToolErrors++;
34680
- else if (isError) {
34681
- consecutiveToolErrors = 1;
34682
- lastErrorToolName = toolName;
34683
- } else {
34684
- consecutiveToolErrors = 0;
34685
- lastErrorToolName = "";
34686
- }
34686
+ if (phase === "result") {
34687
+ if (isError) consecutiveToolErrors++;
34688
+ else consecutiveToolErrors = 0;
34687
34689
  if (consecutiveToolErrors >= TOOL_ERROR_ABORT_THRESHOLD) {
34688
- log$6.error(`Agent-loop circuit breaker: ${toolName} failed ${consecutiveToolErrors} consecutive times. Aborting run ${params.runId}.`);
34689
- 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.`));
34690
- } else if (consecutiveToolErrors === TOOL_ERROR_WARN_THRESHOLD) log$6.warn(`Agent-loop tool error warning: ${toolName} failed ${consecutiveToolErrors} times consecutively. runId=${params.runId}`);
34690
+ const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
34691
+ log$7.error(`Agent-loop circuit breaker: ${consecutiveToolErrors} consecutive tool errors (last: ${toolName}). Aborting run ${params.runId}.`);
34692
+ abortRun(false, /* @__PURE__ */ new Error(`${consecutiveToolErrors} consecutive tool errors. The model may be generating corrupted tool arguments. Run aborted to prevent infinite loop.`));
34693
+ } else if (consecutiveToolErrors === TOOL_ERROR_WARN_THRESHOLD) {
34694
+ const toolName = typeof evt.data?.name === "string" ? evt.data.name : "unknown";
34695
+ log$7.warn(`Agent-loop tool error warning: ${consecutiveToolErrors} consecutive failures (last: ${toolName}). runId=${params.runId}`);
34696
+ }
34691
34697
  }
34692
34698
  }
34693
34699
  if (evt.stream === "assistant" && typeof evt.data?.text === "string" && !aborted) {
34694
34700
  streamMonitor.onChunk(evt.data.text);
34695
- if (streamMonitor.shouldStop()) log$6.debug(`stream monitor detection (log-only, no abort): runId=${params.runId} reason=${streamMonitor.getStopReason()}`);
34701
+ if (streamMonitor.shouldStop()) log$7.debug(`stream monitor detection (log-only, no abort): runId=${params.runId} reason=${streamMonitor.getStopReason()}`);
34696
34702
  }
34697
34703
  },
34698
34704
  enforceFinalTag: params.enforceFinalTag,
@@ -34712,7 +34718,7 @@ async function runEmbeddedAttempt(params) {
34712
34718
  let abortWarnTimer;
34713
34719
  const isProbeSession = params.sessionId?.startsWith("probe-") ?? false;
34714
34720
  const abortTimer = setTimeout(() => {
34715
- if (!isProbeSession) log$6.warn(`embedded run timeout: runId=${params.runId} sessionId=${params.sessionId} timeoutMs=${params.timeoutMs}`);
34721
+ if (!isProbeSession) log$7.warn(`embedded run timeout: runId=${params.runId} sessionId=${params.sessionId} timeoutMs=${params.timeoutMs}`);
34716
34722
  if (shouldFlagCompactionTimeout({
34717
34723
  isTimeout: true,
34718
34724
  isCompactionPendingOrRetrying: subscription.isCompacting(),
@@ -34721,7 +34727,7 @@ async function runEmbeddedAttempt(params) {
34721
34727
  abortRun(true);
34722
34728
  if (!abortWarnTimer) abortWarnTimer = setTimeout(() => {
34723
34729
  if (!activeSession.isStreaming) return;
34724
- if (!isProbeSession) log$6.warn(`embedded run abort still streaming: runId=${params.runId} sessionId=${params.sessionId}`);
34730
+ if (!isProbeSession) log$7.warn(`embedded run abort still streaming: runId=${params.runId} sessionId=${params.sessionId}`);
34725
34731
  }, 1e4);
34726
34732
  }, Math.max(1, params.timeoutMs));
34727
34733
  armSymipulseTimer = () => {
@@ -34729,7 +34735,7 @@ async function runEmbeddedAttempt(params) {
34729
34735
  clearSymipulseTimer();
34730
34736
  symipulseTimer = setTimeout(() => {
34731
34737
  if (aborted) return;
34732
- if (!isProbeSession) log$6.warn(`symipulse timeout: runId=${params.runId} sessionId=${params.sessionId} symipulseMs=${symipulseMs} (no activity)`);
34738
+ if (!isProbeSession) log$7.warn(`symipulse timeout: runId=${params.runId} sessionId=${params.sessionId} symipulseMs=${symipulseMs} (no activity)`);
34733
34739
  if (shouldFlagCompactionTimeout({
34734
34740
  isTimeout: true,
34735
34741
  isCompactionPendingOrRetrying: subscription.isCompacting(),
@@ -34773,13 +34779,13 @@ async function runEmbeddedAttempt(params) {
34773
34779
  prompt: params.prompt,
34774
34780
  messages: activeSession.messages
34775
34781
  }, hookCtx).catch((hookErr) => {
34776
- log$6.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
34782
+ log$7.warn(`before_prompt_build hook failed: ${String(hookErr)}`);
34777
34783
  }) : void 0;
34778
34784
  const legacyResult = hookRunner?.hasHooks("before_agent_start") ? await hookRunner.runBeforeAgentStart({
34779
34785
  prompt: params.prompt,
34780
34786
  messages: activeSession.messages
34781
34787
  }, hookCtx).catch((hookErr) => {
34782
- log$6.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
34788
+ log$7.warn(`before_agent_start hook (legacy prompt build path) failed: ${String(hookErr)}`);
34783
34789
  }) : void 0;
34784
34790
  const hookResult = {
34785
34791
  systemPrompt: promptBuildResult?.systemPrompt ?? legacyResult?.systemPrompt,
@@ -34787,7 +34793,7 @@ async function runEmbeddedAttempt(params) {
34787
34793
  };
34788
34794
  if (hookResult?.prependContext) {
34789
34795
  effectivePrompt = `${hookResult.prependContext}\n\n${params.prompt}`;
34790
- log$6.debug(`hooks: prepended context to prompt (${hookResult.prependContext.length} chars)`);
34796
+ log$7.debug(`hooks: prepended context to prompt (${hookResult.prependContext.length} chars)`);
34791
34797
  }
34792
34798
  {
34793
34799
  const autoRecallAgentId = normalizeAgentId(params.sessionKey);
@@ -34804,11 +34810,11 @@ async function runEmbeddedAttempt(params) {
34804
34810
  if (recallResults.length > 0) {
34805
34811
  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>`;
34806
34812
  effectivePrompt = `${recallBlock}\n\n${effectivePrompt}`;
34807
- log$6.debug(`auto-recall: injected ${recallResults.length} snippets (${recallBlock.length} chars)`);
34813
+ log$7.debug(`auto-recall: injected ${recallResults.length} snippets (${recallBlock.length} chars)`);
34808
34814
  }
34809
34815
  }
34810
34816
  } catch (recallErr) {
34811
- log$6.debug(`auto-recall: skipped (${String(recallErr)})`);
34817
+ log$7.debug(`auto-recall: skipped (${String(recallErr)})`);
34812
34818
  }
34813
34819
  }
34814
34820
  {
@@ -34820,10 +34826,10 @@ async function runEmbeddedAttempt(params) {
34820
34826
  if (planResult.enter) {
34821
34827
  if (planResult.stripped != null) effectivePrompt = planResult.stripped;
34822
34828
  effectivePrompt = `${PLAN_MODE_SYSTEM_PROMPT}\n\n${effectivePrompt}`;
34823
- log$6.info(`plan-mode: activated (${planResult.reason}) for runId=${params.runId}`);
34829
+ log$7.info(`plan-mode: activated (${planResult.reason}) for runId=${params.runId}`);
34824
34830
  } else if (planResult.stripped != null) effectivePrompt = planResult.stripped;
34825
34831
  }
34826
- log$6.debug(`embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`);
34832
+ log$7.debug(`embedded run prompt start: runId=${params.runId} sessionId=${params.sessionId}`);
34827
34833
  cacheTrace?.recordStage("prompt:before", {
34828
34834
  prompt: effectivePrompt,
34829
34835
  messages: activeSession.messages
@@ -34835,7 +34841,7 @@ async function runEmbeddedAttempt(params) {
34835
34841
  const sessionContext = sessionManager.buildSessionContext();
34836
34842
  const sanitizedOrphan = transcriptPolicy.sanitizeThinkingSignatures ? sanitizeAntigravityThinkingBlocks(sessionContext.messages) : sessionContext.messages;
34837
34843
  activeSession.agent.replaceMessages(sanitizedOrphan);
34838
- log$6.warn(`Removed orphaned user message to prevent consecutive user turns. runId=${params.runId} sessionId=${params.sessionId}`);
34844
+ log$7.warn(`Removed orphaned user message to prevent consecutive user turns. runId=${params.runId} sessionId=${params.sessionId}`);
34839
34845
  }
34840
34846
  try {
34841
34847
  const imageResult = await detectAndLoadPromptImages({
@@ -34857,12 +34863,12 @@ async function runEmbeddedAttempt(params) {
34857
34863
  messages: activeSession.messages,
34858
34864
  note: `images: prompt=${imageResult.images.length} history=${imageResult.historyImagesByIndex.size}`
34859
34865
  });
34860
- if (log$6.isEnabled("debug")) {
34866
+ if (log$7.isEnabled("debug")) {
34861
34867
  const msgCount = activeSession.messages.length;
34862
34868
  const systemLen = systemPromptText?.length ?? 0;
34863
34869
  const promptLen = effectivePrompt.length;
34864
34870
  const sessionSummary = summarizeSessionContext(activeSession.messages);
34865
- 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}`);
34871
+ 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}`);
34866
34872
  }
34867
34873
  if (hookRunner?.hasHooks("llm_input")) hookRunner.runLlmInput({
34868
34874
  runId: params.runId,
@@ -34880,7 +34886,7 @@ async function runEmbeddedAttempt(params) {
34880
34886
  workspaceDir: params.workspaceDir,
34881
34887
  messageProvider: params.messageProvider ?? void 0
34882
34888
  }).catch((err) => {
34883
- log$6.warn(`llm_input hook failed: ${String(err)}`);
34889
+ log$7.warn(`llm_input hook failed: ${String(err)}`);
34884
34890
  });
34885
34891
  if (imageResult.images.length > 0) await abortable(activeSession.prompt(effectivePrompt, { images: imageResult.images }));
34886
34892
  else await abortable(activeSession.prompt(effectivePrompt));
@@ -34888,7 +34894,7 @@ async function runEmbeddedAttempt(params) {
34888
34894
  promptError = err;
34889
34895
  promptErrorSource = "prompt";
34890
34896
  } finally {
34891
- log$6.debug(`embedded run prompt end: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - promptStartedAt}`);
34897
+ log$7.debug(`embedded run prompt end: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - promptStartedAt}`);
34892
34898
  }
34893
34899
  const wasCompactingBefore = activeSession.isCompacting;
34894
34900
  const snapshot = activeSession.messages.slice();
@@ -34903,7 +34909,7 @@ async function runEmbeddedAttempt(params) {
34903
34909
  promptError = err;
34904
34910
  promptErrorSource = "compaction";
34905
34911
  }
34906
- if (!isProbeSession) log$6.debug(`compaction wait aborted: runId=${params.runId} sessionId=${params.sessionId}`);
34912
+ if (!isProbeSession) log$7.debug(`compaction wait aborted: runId=${params.runId} sessionId=${params.sessionId}`);
34907
34913
  } else throw err;
34908
34914
  }
34909
34915
  if (!timedOutDuringCompaction) {
@@ -34921,7 +34927,7 @@ async function runEmbeddedAttempt(params) {
34921
34927
  currentSessionId: activeSession.sessionId
34922
34928
  });
34923
34929
  if (timedOutDuringCompaction) {
34924
- if (!isProbeSession) log$6.warn(`using ${snapshotSelection.source} snapshot: timed out during compaction runId=${params.runId} sessionId=${params.sessionId}`);
34930
+ if (!isProbeSession) log$7.warn(`using ${snapshotSelection.source} snapshot: timed out during compaction runId=${params.runId} sessionId=${params.sessionId}`);
34925
34931
  }
34926
34932
  messagesSnapshot = snapshotSelection.messagesSnapshot;
34927
34933
  sessionIdUsed = snapshotSelection.sessionIdUsed;
@@ -34936,7 +34942,7 @@ async function runEmbeddedAttempt(params) {
34936
34942
  error: describeUnknownError(promptError)
34937
34943
  });
34938
34944
  } catch (entryErr) {
34939
- log$6.warn(`failed to persist prompt error entry: ${String(entryErr)}`);
34945
+ log$7.warn(`failed to persist prompt error entry: ${String(entryErr)}`);
34940
34946
  }
34941
34947
  cacheTrace?.recordStage("session:after", {
34942
34948
  messages: messagesSnapshot,
@@ -34955,17 +34961,17 @@ async function runEmbeddedAttempt(params) {
34955
34961
  workspaceDir: params.workspaceDir,
34956
34962
  messageProvider: params.messageProvider ?? void 0
34957
34963
  }).catch((err) => {
34958
- log$6.warn(`agent_end hook failed: ${err}`);
34964
+ log$7.warn(`agent_end hook failed: ${err}`);
34959
34965
  });
34960
34966
  } finally {
34961
34967
  clearTimeout(abortTimer);
34962
34968
  clearSymipulseTimer();
34963
34969
  if (abortWarnTimer) clearTimeout(abortWarnTimer);
34964
- if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$6.debug(`run cleanup: runId=${params.runId} sessionId=${params.sessionId} aborted=${aborted} timedOut=${timedOut}`);
34970
+ if (!isProbeSession && (aborted || timedOut) && !timedOutDuringCompaction) log$7.debug(`run cleanup: runId=${params.runId} sessionId=${params.sessionId} aborted=${aborted} timedOut=${timedOut}`);
34965
34971
  try {
34966
34972
  unsubscribe();
34967
34973
  } catch (err) {
34968
- log$6.error(`CRITICAL: unsubscribe failed, possible resource leak: runId=${params.runId} ${String(err)}`);
34974
+ log$7.error(`CRITICAL: unsubscribe failed, possible resource leak: runId=${params.runId} ${String(err)}`);
34969
34975
  }
34970
34976
  clearActiveEmbeddedRun(params.sessionId, queueHandle, params.sessionKey);
34971
34977
  params.abortSignal?.removeEventListener?.("abort", onAbort);
@@ -34990,7 +34996,7 @@ async function runEmbeddedAttempt(params) {
34990
34996
  workspaceDir: params.workspaceDir,
34991
34997
  messageProvider: params.messageProvider ?? void 0
34992
34998
  }).catch((err) => {
34993
- log$6.warn(`llm_output hook failed: ${String(err)}`);
34999
+ log$7.warn(`llm_output hook failed: ${String(err)}`);
34994
35000
  });
34995
35001
  return {
34996
35002
  aborted,
@@ -35251,7 +35257,7 @@ async function runEmbeddedPiAgent(params) {
35251
35257
  const redactedSessionId = redactRunIdentifier(params.sessionId);
35252
35258
  const redactedSessionKey = redactRunIdentifier(params.sessionKey);
35253
35259
  const redactedWorkspace = redactRunIdentifier(resolvedWorkspace);
35254
- 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}`);
35260
+ 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}`);
35255
35261
  const prevCwd = process.cwd();
35256
35262
  let provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
35257
35263
  let modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
@@ -35270,7 +35276,7 @@ async function runEmbeddedPiAgent(params) {
35270
35276
  if (hookRunner?.hasHooks("before_model_resolve")) try {
35271
35277
  modelResolveOverride = await hookRunner.runBeforeModelResolve({ prompt: params.prompt }, hookCtx);
35272
35278
  } catch (hookErr) {
35273
- log$6.warn(`before_model_resolve hook failed: ${String(hookErr)}`);
35279
+ log$7.warn(`before_model_resolve hook failed: ${String(hookErr)}`);
35274
35280
  }
35275
35281
  if (hookRunner?.hasHooks("before_agent_start")) try {
35276
35282
  const legacyResult = await hookRunner.runBeforeAgentStart({ prompt: params.prompt }, hookCtx);
@@ -35279,15 +35285,15 @@ async function runEmbeddedPiAgent(params) {
35279
35285
  modelOverride: modelResolveOverride?.modelOverride ?? legacyResult?.modelOverride
35280
35286
  };
35281
35287
  } catch (hookErr) {
35282
- log$6.warn(`before_agent_start hook (legacy model resolve path) failed: ${String(hookErr)}`);
35288
+ log$7.warn(`before_agent_start hook (legacy model resolve path) failed: ${String(hookErr)}`);
35283
35289
  }
35284
35290
  if (modelResolveOverride?.providerOverride) {
35285
35291
  provider = modelResolveOverride.providerOverride;
35286
- log$6.info(`[hooks] provider overridden to ${provider}`);
35292
+ log$7.info(`[hooks] provider overridden to ${provider}`);
35287
35293
  }
35288
35294
  if (modelResolveOverride?.modelOverride) {
35289
35295
  modelId = modelResolveOverride.modelOverride;
35290
- log$6.info(`[hooks] model overridden to ${modelId}`);
35296
+ log$7.info(`[hooks] model overridden to ${modelId}`);
35291
35297
  }
35292
35298
  const { model, error, authStorage, modelRegistry } = resolveModel(provider, modelId, agentDir, params.config);
35293
35299
  if (!model) throw new FailoverError(error ?? `Unknown model: ${provider}/${modelId}`, {
@@ -35307,9 +35313,9 @@ async function runEmbeddedPiAgent(params) {
35307
35313
  warnBelowTokens: CONTEXT_WINDOW_WARN_BELOW_TOKENS,
35308
35314
  hardMinTokens: CONTEXT_WINDOW_HARD_MIN_TOKENS
35309
35315
  });
35310
- if (ctxGuard.shouldWarn) log$6.warn(`low context window: ${provider}/${modelId} ctx=${ctxGuard.tokens} (warn<${CONTEXT_WINDOW_WARN_BELOW_TOKENS}) source=${ctxGuard.source}`);
35316
+ if (ctxGuard.shouldWarn) log$7.warn(`low context window: ${provider}/${modelId} ctx=${ctxGuard.tokens} (warn<${CONTEXT_WINDOW_WARN_BELOW_TOKENS}) source=${ctxGuard.source}`);
35311
35317
  if (ctxGuard.shouldBlock) {
35312
- log$6.error(`blocked model (context window too small): ${provider}/${modelId} ctx=${ctxGuard.tokens} (min=${CONTEXT_WINDOW_HARD_MIN_TOKENS}) source=${ctxGuard.source}`);
35318
+ log$7.error(`blocked model (context window too small): ${provider}/${modelId} ctx=${ctxGuard.tokens} (min=${CONTEXT_WINDOW_HARD_MIN_TOKENS}) source=${ctxGuard.source}`);
35313
35319
  throw new FailoverError(`Model context window too small (${ctxGuard.tokens} tokens). Minimum is ${CONTEXT_WINDOW_HARD_MIN_TOKENS}.`, {
35314
35320
  reason: "unknown",
35315
35321
  provider,
@@ -35439,7 +35445,7 @@ async function runEmbeddedPiAgent(params) {
35439
35445
  while (true) {
35440
35446
  if (runLoopIterations >= MAX_RUN_LOOP_ITERATIONS) {
35441
35447
  const message = `Exceeded retry limit after ${runLoopIterations} attempts (max=${MAX_RUN_LOOP_ITERATIONS}).`;
35442
- log$6.error(`[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} attempts=${runLoopIterations} maxAttempts=${MAX_RUN_LOOP_ITERATIONS}`);
35448
+ log$7.error(`[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} provider=${provider}/${modelId} attempts=${runLoopIterations} maxAttempts=${MAX_RUN_LOOP_ITERATIONS}`);
35443
35449
  return {
35444
35450
  payloads: [{
35445
35451
  text: "Request failed after repeated internal retries. Please try again, or use /new to start a fresh session.",
@@ -35560,18 +35566,18 @@ async function runEmbeddedPiAgent(params) {
35560
35566
  const overflowDiagId = createCompactionDiagId$1();
35561
35567
  const errorText = contextOverflowError.text;
35562
35568
  const msgCount = attempt.messagesSnapshot?.length ?? 0;
35563
- 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)}`);
35569
+ 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)}`);
35564
35570
  const isCompactionFailure = isCompactionFailureError(errorText);
35565
35571
  const hadAttemptLevelCompaction = attemptCompactionCount > 0;
35566
35572
  if (!isCompactionFailure && hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
35567
35573
  overflowCompactionAttempts++;
35568
- log$6.warn(`context overflow persisted after in-attempt compaction (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); retrying prompt without additional compaction for ${provider}/${modelId}`);
35574
+ log$7.warn(`context overflow persisted after in-attempt compaction (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); retrying prompt without additional compaction for ${provider}/${modelId}`);
35569
35575
  continue;
35570
35576
  }
35571
35577
  if (!isCompactionFailure && !hadAttemptLevelCompaction && overflowCompactionAttempts < MAX_OVERFLOW_COMPACTION_ATTEMPTS) {
35572
- 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}`);
35578
+ 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}`);
35573
35579
  overflowCompactionAttempts++;
35574
- log$6.warn(`context overflow detected (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); attempting auto-compaction for ${provider}/${modelId}`);
35580
+ log$7.warn(`context overflow detected (attempt ${overflowCompactionAttempts}/${MAX_OVERFLOW_COMPACTION_ATTEMPTS}); attempting auto-compaction for ${provider}/${modelId}`);
35575
35581
  const compactResult = await compactEmbeddedPiSessionDirect({
35576
35582
  sessionId: params.sessionId,
35577
35583
  sessionKey: params.sessionKey,
@@ -35600,10 +35606,10 @@ async function runEmbeddedPiAgent(params) {
35600
35606
  });
35601
35607
  if (compactResult.compacted) {
35602
35608
  autoCompactionCount += 1;
35603
- log$6.info(`auto-compaction succeeded for ${provider}/${modelId}; retrying prompt`);
35609
+ log$7.info(`auto-compaction succeeded for ${provider}/${modelId}; retrying prompt`);
35604
35610
  continue;
35605
35611
  }
35606
- log$6.warn(`auto-compaction failed for ${provider}/${modelId}: ${compactResult.reason ?? "nothing to compact"}`);
35612
+ log$7.warn(`auto-compaction failed for ${provider}/${modelId}: ${compactResult.reason ?? "nothing to compact"}`);
35607
35613
  }
35608
35614
  if (!toolResultTruncationAttempted) {
35609
35615
  const contextWindowTokens = ctxInfo.tokens;
@@ -35612,9 +35618,9 @@ async function runEmbeddedPiAgent(params) {
35612
35618
  contextWindowTokens
35613
35619
  }) : false;
35614
35620
  if (hasOversized) {
35615
- 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}`);
35621
+ 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}`);
35616
35622
  toolResultTruncationAttempted = true;
35617
- log$6.warn(`[context-overflow-recovery] Attempting tool result truncation for ${provider}/${modelId} (contextWindow=${contextWindowTokens} tokens)`);
35623
+ log$7.warn(`[context-overflow-recovery] Attempting tool result truncation for ${provider}/${modelId} (contextWindow=${contextWindowTokens} tokens)`);
35618
35624
  const truncResult = await truncateOversizedToolResultsInSession({
35619
35625
  sessionFile: params.sessionFile,
35620
35626
  contextWindowTokens,
@@ -35622,13 +35628,13 @@ async function runEmbeddedPiAgent(params) {
35622
35628
  sessionKey: params.sessionKey
35623
35629
  });
35624
35630
  if (truncResult.truncated) {
35625
- log$6.info(`[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`);
35631
+ log$7.info(`[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`);
35626
35632
  continue;
35627
35633
  }
35628
- log$6.warn(`[context-overflow-recovery] Tool result truncation did not help: ${truncResult.reason ?? "unknown"}`);
35629
- } 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}`);
35634
+ log$7.warn(`[context-overflow-recovery] Tool result truncation did not help: ${truncResult.reason ?? "unknown"}`);
35635
+ } 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}`);
35630
35636
  }
35631
- 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}`);
35637
+ 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}`);
35632
35638
  const kind = isCompactionFailure ? "compaction_failure" : "context_overflow";
35633
35639
  return {
35634
35640
  payloads: [{
@@ -35709,7 +35715,7 @@ async function runEmbeddedPiAgent(params) {
35709
35715
  attempted: attemptedThinking
35710
35716
  });
35711
35717
  if (fallbackThinking) {
35712
- log$6.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
35718
+ log$7.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
35713
35719
  thinkLevel = fallbackThinking;
35714
35720
  continue;
35715
35721
  }
@@ -35727,7 +35733,7 @@ async function runEmbeddedPiAgent(params) {
35727
35733
  attempted: attemptedThinking
35728
35734
  });
35729
35735
  if (fallbackThinking && !aborted) {
35730
- log$6.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
35736
+ log$7.warn(`unsupported thinking level for ${provider}/${modelId}; retrying with ${fallbackThinking}`);
35731
35737
  thinkLevel = fallbackThinking;
35732
35738
  continue;
35733
35739
  }
@@ -35744,7 +35750,7 @@ async function runEmbeddedPiAgent(params) {
35744
35750
  imageDimensionError.contentIndex !== void 0 ? `content=${imageDimensionError.contentIndex}` : null,
35745
35751
  imageDimensionError.maxDimensionPx !== void 0 ? `limit=${imageDimensionError.maxDimensionPx}px` : null
35746
35752
  ].filter(Boolean).join(" ");
35747
- log$6.warn(`Profile ${lastProfileId} rejected image payload${details ? ` (${details})` : ""}.`);
35753
+ log$7.warn(`Profile ${lastProfileId} rejected image payload${details ? ` (${details})` : ""}.`);
35748
35754
  }
35749
35755
  const isLocalOllamaTimeout = timedOut && model.api === "ollama";
35750
35756
  if (!aborted && failoverFailure || timedOut && !timedOutDuringCompaction && !isLocalOllamaTimeout) {
@@ -35756,8 +35762,8 @@ async function runEmbeddedPiAgent(params) {
35756
35762
  cfg: params.config,
35757
35763
  agentDir: params.agentDir
35758
35764
  });
35759
- if (timedOut && !isProbeSession) log$6.warn(`Profile ${lastProfileId} timed out (possible rate limit). Trying next account...`);
35760
- if (cloudCodeAssistFormatError) log$6.warn(`Profile ${lastProfileId} hit Cloud Code Assist format error. Tool calls will be sanitized on retry.`);
35765
+ if (timedOut && !isProbeSession) log$7.warn(`Profile ${lastProfileId} timed out (possible rate limit). Trying next account...`);
35766
+ if (cloudCodeAssistFormatError) log$7.warn(`Profile ${lastProfileId} hit Cloud Code Assist format error. Tool calls will be sanitized on retry.`);
35761
35767
  }
35762
35768
  if (await advanceAuthProfile()) continue;
35763
35769
  if (fallbackConfigured) {
@@ -35823,7 +35829,7 @@ async function runEmbeddedPiAgent(params) {
35823
35829
  const hasCodeBlocks = attempt.assistantTexts.some((text) => /```[\s\S]*?```/.test(text));
35824
35830
  if (hasCodeToolUsage || hasCodeBlocks) {
35825
35831
  verificationPassCompleted = true;
35826
- log$6.debug(`[verification] starting verification pass: runId=${params.runId} sessionId=${params.sessionId} trigger=${hasCodeToolUsage ? "tool_usage" : "code_blocks"}`);
35832
+ log$7.debug(`[verification] starting verification pass: runId=${params.runId} sessionId=${params.sessionId} trigger=${hasCodeToolUsage ? "tool_usage" : "code_blocks"}`);
35827
35833
  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.";
35828
35834
  try {
35829
35835
  const verifyAttempt = await runEmbeddedAttempt({
@@ -35909,10 +35915,10 @@ async function runEmbeddedPiAgent(params) {
35909
35915
  payloads.length = 0;
35910
35916
  payloads.push(...verifyPayloads);
35911
35917
  }
35912
- log$6.debug(`[verification] verification produced corrections: runId=${params.runId} tools=${verifyAttempt.toolMetas.length} texts=${verifyAttempt.assistantTexts.length}`);
35913
- } else log$6.debug(`[verification] verification confirmed original response: runId=${params.runId}`);
35918
+ log$7.debug(`[verification] verification produced corrections: runId=${params.runId} tools=${verifyAttempt.toolMetas.length} texts=${verifyAttempt.assistantTexts.length}`);
35919
+ } else log$7.debug(`[verification] verification confirmed original response: runId=${params.runId}`);
35914
35920
  } catch (verifyErr) {
35915
- log$6.warn(`[verification] verification pass failed, keeping original response: runId=${params.runId} error=${String(verifyErr)}`);
35921
+ log$7.warn(`[verification] verification pass failed, keeping original response: runId=${params.runId} error=${String(verifyErr)}`);
35916
35922
  }
35917
35923
  }
35918
35924
  }
@@ -35933,7 +35939,7 @@ async function runEmbeddedPiAgent(params) {
35933
35939
  messagingToolSentTargets: attempt.messagingToolSentTargets,
35934
35940
  successfulCronAdds: attempt.successfulCronAdds
35935
35941
  };
35936
- log$6.debug(`embedded run done: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - started} aborted=${aborted}`);
35942
+ log$7.debug(`embedded run done: runId=${params.runId} sessionId=${params.sessionId} durationMs=${Date.now() - started} aborted=${aborted}`);
35937
35943
  if (lastProfileId) {
35938
35944
  await markAuthProfileGood({
35939
35945
  store: authStore,
@@ -36185,7 +36191,7 @@ async function runAgentTurn(params) {
36185
36191
  function createDefaultDeps() {
36186
36192
  return {
36187
36193
  sendMessageWhatsApp: async (...args) => {
36188
- const { sendMessageWhatsApp } = await import("./web-BCsJFuQu.js");
36194
+ const { sendMessageWhatsApp } = await import("./web-BgKYnau3.js");
36189
36195
  return await sendMessageWhatsApp(...args);
36190
36196
  },
36191
36197
  sendMessageTelegram: async (...args) => {
@@ -53623,7 +53629,7 @@ function loadWebLoginQr() {
53623
53629
  return webLoginQrPromise;
53624
53630
  }
53625
53631
  function loadWebChannel() {
53626
- webChannelPromise ??= import("./web-BCsJFuQu.js");
53632
+ webChannelPromise ??= import("./web-BgKYnau3.js");
53627
53633
  return webChannelPromise;
53628
53634
  }
53629
53635
  function loadWhatsAppActions() {
@@ -69834,7 +69840,7 @@ async function compactEmbeddedPiSessionDirect(params) {
69834
69840
  const provider = (params.provider ?? DEFAULT_PROVIDER).trim() || DEFAULT_PROVIDER;
69835
69841
  const modelId = (params.model ?? DEFAULT_MODEL).trim() || DEFAULT_MODEL;
69836
69842
  const fail = (reason) => {
69837
- 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}`);
69843
+ 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}`);
69838
69844
  return {
69839
69845
  ok: false,
69840
69846
  compacted: false,
@@ -69902,7 +69908,7 @@ async function compactEmbeddedPiSessionDirect(params) {
69902
69908
  sessionId: params.sessionId,
69903
69909
  warn: makeBootstrapWarn({
69904
69910
  sessionLabel,
69905
- warn: (message) => log$6.warn(message)
69911
+ warn: (message) => log$7.warn(message)
69906
69912
  })
69907
69913
  });
69908
69914
  const runAbortController = new AbortController();
@@ -70042,7 +70048,7 @@ async function compactEmbeddedPiSessionDirect(params) {
70042
70048
  try {
70043
70049
  await repairSessionFileIfNeeded({
70044
70050
  sessionFile: params.sessionFile,
70045
- warn: (message) => log$6.warn(message)
70051
+ warn: (message) => log$7.warn(message)
70046
70052
  });
70047
70053
  await prewarmSessionFile(params.sessionFile);
70048
70054
  const transcriptPolicy = resolveTranscriptPolicy({
@@ -70127,13 +70133,13 @@ async function compactEmbeddedPiSessionDirect(params) {
70127
70133
  messages: preCompactionMessages,
70128
70134
  sessionFile: params.sessionFile
70129
70135
  }, hookCtx).catch((hookErr) => {
70130
- log$6.warn(`before_compaction hook failed: ${String(hookErr)}`);
70136
+ log$7.warn(`before_compaction hook failed: ${String(hookErr)}`);
70131
70137
  });
70132
- const diagEnabled = log$6.isEnabled("debug");
70138
+ const diagEnabled = log$7.isEnabled("debug");
70133
70139
  const preMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
70134
70140
  if (diagEnabled && preMetrics) {
70135
- 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"}`);
70136
- log$6.debug(`[compaction-diag] contributors diagId=${diagId} top=${JSON.stringify(preMetrics.contributors)}`);
70141
+ 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"}`);
70142
+ log$7.debug(`[compaction-diag] contributors diagId=${diagId} top=${JSON.stringify(preMetrics.contributors)}`);
70137
70143
  }
70138
70144
  const compactStartedAt = Date.now();
70139
70145
  const result = await compactWithSafetyTimeout(() => session.compact(params.customInstructions));
@@ -70151,10 +70157,10 @@ async function compactEmbeddedPiSessionDirect(params) {
70151
70157
  compactedCount: limited.length - session.messages.length,
70152
70158
  sessionFile: params.sessionFile
70153
70159
  }, hookCtx).catch((hookErr) => {
70154
- log$6.warn(`after_compaction hook failed: ${hookErr}`);
70160
+ log$7.warn(`after_compaction hook failed: ${hookErr}`);
70155
70161
  });
70156
70162
  const postMetrics = diagEnabled ? summarizeCompactionMessages(session.messages) : void 0;
70157
- 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"}`);
70163
+ 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"}`);
70158
70164
  return {
70159
70165
  ok: true,
70160
70166
  compacted: true,