@symerian/symi 3.0.6 → 3.0.7

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 (157) hide show
  1. package/dist/{agents-gbr-1Je_.js → agents-CFKyEJDh.js} +4 -4
  2. package/dist/{agents.config-CpxstSW7.js → agents.config-DSrQ0TM2.js} +1 -1
  3. package/dist/{agents.config-BfNlwhop.js → agents.config-JYh7a1x9.js} +1 -1
  4. package/dist/{auth-choice-54kgymsK.js → auth-choice-BPmdR0Zg.js} +1 -1
  5. package/dist/{auth-choice-D-6X8Ju1.js → auth-choice-BqParF2V.js} +1 -1
  6. package/dist/{banner-a-SFB2A_.js → banner-Lq52Hf1m.js} +1 -1
  7. package/dist/build-info.json +3 -3
  8. package/dist/bundled/boot-md/handler.js +2 -2
  9. package/dist/bundled/session-memory/handler.js +2 -2
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-options-LdOWOuGF.js → channel-options-DbwyNFsd.js} +1 -1
  12. package/dist/{channel-options-Gr9E4Kzw.js → channel-options-uukUHxrR.js} +1 -1
  13. package/dist/{channel-web-CegzhXtr.js → channel-web-CBUFAaN-.js} +1 -1
  14. package/dist/{channels-cli-yEaXg9E8.js → channels-cli-DUwg4n9o.js} +6 -6
  15. package/dist/{channels-cli-BqxfCcHJ.js → channels-cli-DwWkhoS-.js} +6 -6
  16. package/dist/{cli-frCx1q0g.js → cli-BK00_StG.js} +3 -3
  17. package/dist/{cli-CBgbuAgA.js → cli-DZZmysLn.js} +3 -3
  18. package/dist/{command-registry-BuNPoTgT.js → command-registry-DPjt2ua4.js} +10 -10
  19. package/dist/{completion-cli-CslG8pRZ.js → completion-cli-DUHXuBGj.js} +2 -2
  20. package/dist/{completion-cli-CtslzC-3.js → completion-cli-Jc5c91D9.js} +1 -1
  21. package/dist/{config-cli-DG0Q2opp.js → config-cli-CfqGGDZJ.js} +1 -1
  22. package/dist/{config-cli-Bne_ToTi.js → config-cli-Chi8-vDl.js} +1 -1
  23. package/dist/{configure-CrUroh9h.js → configure-CpVWXUGL.js} +3 -3
  24. package/dist/{configure-DVEumX9d.js → configure-n6QOImwq.js} +3 -3
  25. package/dist/{doctor-completion-BdPD9NXi.js → doctor-completion-DRSIyjR1.js} +1 -1
  26. package/dist/{doctor-completion-C7FYoFcz.js → doctor-completion-efxxrdhl.js} +1 -1
  27. package/dist/entry.js +1 -1
  28. package/dist/extensionAPI.js +2 -2
  29. package/dist/{gateway-cli-C01t6lTD.js → gateway-cli-5x14dzdY.js} +12 -12
  30. package/dist/{gateway-cli-C3pl_TOb.js → gateway-cli-C9oE1hBq.js} +12 -12
  31. package/dist/{glass-ui-ws-DdfAZRq2.js → glass-ui-ws-CSvguyD3.js} +10 -10
  32. package/dist/{glass-ui-ws-D4FpSEkk.js → glass-ui-ws-Dy9BMqps.js} +10 -10
  33. package/dist/{health-BJOdskDn.js → health-CMNaNxdO.js} +2 -2
  34. package/dist/{health-Ux1rRtE3.js → health-CcIuOt6-.js} +2 -2
  35. package/dist/{heartbeat-visibility-BOc3XHJM.js → heartbeat-visibility-C1vHOBwO.js} +1 -1
  36. package/dist/{heartbeat-visibility-DiKuGlXT.js → heartbeat-visibility-D7nLp3pi.js} +1 -1
  37. package/dist/{hooks-cli-QOqeVacd.js → hooks-cli-BJBRRQxq.js} +4 -4
  38. package/dist/{hooks-cli-C4qRn2e6.js → hooks-cli-Lu13tVB5.js} +4 -4
  39. package/dist/index.js +9 -9
  40. package/dist/llm-slug-generator.js +2 -2
  41. package/dist/{manager-H_Xir_av.js → manager-CpueNJtZ.js} +1 -1
  42. package/dist/{manager-OL6o99xD.js → manager-DrpXfTr8.js} +1 -1
  43. package/dist/{manager-DdfJ-DW0.js → manager-_IXN4-V8.js} +1 -1
  44. package/dist/{manager-D7uDkX3d.js → manager-ba9NOjzn.js} +1 -1
  45. package/dist/{memory-cli-CEvfDody.js → memory-cli-CFc9bXRp.js} +3 -3
  46. package/dist/{memory-cli-BFgNzW3D.js → memory-cli-LV7-59SK.js} +3 -3
  47. package/dist/{models-Bf1Qgxcd.js → models-BB9yLhYJ.js} +2 -2
  48. package/dist/{models-cli-C-yQI9uO.js → models-cli-RtPAmw2C.js} +4 -4
  49. package/dist/{models-cli-IPj8YpFi.js → models-cli-trgrhp5d.js} +5 -5
  50. package/dist/{onboard-D3RCwOQV.js → onboard-CQ-O5iJq.js} +2 -2
  51. package/dist/{onboard-DxD7tZro.js → onboard-DHXKRs-D.js} +2 -2
  52. package/dist/{onboard-channels-C9yhPSG7.js → onboard-channels-jMIN_VEb.js} +1 -1
  53. package/dist/{onboard-channels-DjyTcloL.js → onboard-channels-puKAWnzj.js} +1 -1
  54. package/dist/{onboarding-3Zmxzq_U.js → onboarding-B-gCsRKr.js} +3 -3
  55. package/dist/{onboarding-BT5x19Ld.js → onboarding-C0pJSLCL.js} +3 -3
  56. package/dist/{onboarding.finalize-Di8oo0E9.js → onboarding.finalize-CwYMMBek.js} +8 -8
  57. package/dist/{onboarding.finalize-DYIUxpai.js → onboarding.finalize-TzNrDgVI.js} +9 -9
  58. package/dist/{pi-embedded-DiktDTAb.js → pi-embedded-D9KmgdGY.js} +99 -5
  59. package/dist/{plugin-registry-Dv9QEb6z.js → plugin-registry-B33lS3i0.js} +1 -1
  60. package/dist/{plugin-registry-DSVGT3l_.js → plugin-registry-DzQCMRvf.js} +1 -1
  61. package/dist/plugin-sdk/agents/model-aware-stream.d.ts +21 -0
  62. package/dist/plugin-sdk/{channel-web-CQucEpek.js → channel-web-oG-aaS67.js} +1 -1
  63. package/dist/plugin-sdk/index.js +3 -3
  64. package/dist/plugin-sdk/{manager-DMMQnz2r.js → manager-hfHALsDs.js} +1 -1
  65. package/dist/plugin-sdk/{synthesis-B3oSNA87.js → synthesis-BWBeCBqa.js} +2 -2
  66. package/dist/plugin-sdk/{unified-runner-DPD66ppH.js → unified-runner-CZE3p9mg.js} +99 -5
  67. package/dist/plugin-sdk/{web-O8zxjM0h.js → web-CD_2TcPx.js} +3 -3
  68. package/dist/{plugins-cli-BKE00xaA.js → plugins-cli-BH-dPouA.js} +4 -4
  69. package/dist/{plugins-cli-Cudgx5xM.js → plugins-cli-D7SeopUy.js} +4 -4
  70. package/dist/{program-D6GycU7K.js → program-CbKSDUST.js} +9 -9
  71. package/dist/{program-context-DUf2HkNT.js → program-context-ClWlMpYr.js} +18 -18
  72. package/dist/{prompt-select-styled-MZgg9luq.js → prompt-select-styled-CM2KCKfA.js} +6 -6
  73. package/dist/{prompt-select-styled-9fffbtA8.js → prompt-select-styled-CdC8Q0fu.js} +6 -6
  74. package/dist/{provider-auth-helpers-CbjDDek6.js → provider-auth-helpers-Brx0zsB4.js} +1 -1
  75. package/dist/{provider-auth-helpers-CH_rD9Ck.js → provider-auth-helpers-Df50nCNL.js} +1 -1
  76. package/dist/{push-apns-D2xhFnz-.js → push-apns-CXP9q39j.js} +1 -1
  77. package/dist/{push-apns-zIsKDi4p.js → push-apns-jE3kPG6g.js} +1 -1
  78. package/dist/{register.agent-BkQdGAxf.js → register.agent-DGwbPjex.js} +7 -7
  79. package/dist/{register.agent-CR1I0Nxi.js → register.agent-DzQtVgfQ.js} +8 -8
  80. package/dist/{register.configure-CIbNs3Ys.js → register.configure-B56gsKYf.js} +9 -9
  81. package/dist/{register.configure-O5fmbHql.js → register.configure-BQ1gQQOO.js} +9 -9
  82. package/dist/{register.maintenance-B6o6Fdf-.js → register.maintenance-DLsCNL7g.js} +11 -11
  83. package/dist/{register.maintenance-BjE-lDkf.js → register.maintenance-mKHTp7uq.js} +10 -10
  84. package/dist/{register.message-DkZC56-E.js → register.message--QXkhXHQ.js} +4 -4
  85. package/dist/{register.message-CPV6KKj_.js → register.message-xW7Gic5V.js} +4 -4
  86. package/dist/{register.onboard-DPUx5H9I.js → register.onboard-Cd0kw_oz.js} +7 -7
  87. package/dist/{register.onboard-DB0X3H1H.js → register.onboard-Cxvbpqqb.js} +7 -7
  88. package/dist/{register.setup-BdfIHr44.js → register.setup-C63_l0Z_.js} +7 -7
  89. package/dist/{register.setup-BHGui0h8.js → register.setup-D-WYhPYF.js} +7 -7
  90. package/dist/{register.status-health-sessions-CAr_-YOR.js → register.status-health-sessions-BGA-7IT8.js} +6 -6
  91. package/dist/{register.status-health-sessions-Bx_x7PLI.js → register.status-health-sessions-CsjDghzj.js} +6 -6
  92. package/dist/{register.subclis-Bd9G7Uhk.js → register.subclis-BOf3y4FX.js} +9 -9
  93. package/dist/{run-main-DINwkweo.js → run-main-CG1sYHQC.js} +17 -17
  94. package/dist/{server-methods-D_HpHoWo.js → server-methods-C72ajlYe.js} +9 -9
  95. package/dist/{server-methods-BBiqjTnY.js → server-methods-C_TFp6B4.js} +9 -9
  96. package/dist/{server-node-events-D33Ivpdb.js → server-node-events-BTuwCzuB.js} +4 -4
  97. package/dist/{server-node-events-BBcYbve5.js → server-node-events-Cn5abeER.js} +4 -4
  98. package/dist/{status-CdRoRdX8.js → status-C5RXDLjI.js} +1 -1
  99. package/dist/{status-Do0t7I6P.js → status-CrxGjZwV.js} +3 -3
  100. package/dist/{status-B5SAsM15.js → status-CvJZLdWA.js} +1 -1
  101. package/dist/{status-E8bxgRbF.js → status-DIGJ8-hp.js} +3 -3
  102. package/dist/{subagent-registry-B4gg8TFc.js → subagent-registry-k0ZBnJuU.js} +98 -4
  103. package/dist/{synthesis-BzXl3DdN.js → synthesis-C-rsRpDw.js} +2 -2
  104. package/dist/{synthesis-BuXEOM51.js → synthesis-C3AKD3Nb.js} +2 -2
  105. package/dist/{synthesis-CmoAF3Ks.js → synthesis-D4qwtCYE.js} +3 -3
  106. package/dist/{synthesis-Camc_uQg.js → synthesis-cor0WJGI.js} +3 -3
  107. package/dist/{unified-runner-NjwIEpGt.js → unified-runner-CzxCpDUC.js} +98 -4
  108. package/dist/{unified-runner-Bvqbwaaa.js → unified-runner-Dv9LPnmm.js} +99 -5
  109. package/dist/{update-cli-BmxN561H.js → update-cli-D2Ou3_k5.js} +10 -10
  110. package/dist/{update-cli-DT51XdLt.js → update-cli-DGrOVmGg.js} +11 -11
  111. package/dist/{update-runner-BSHkPRya.js → update-runner-BSDKsvVP.js} +1 -1
  112. package/dist/{update-runner-DObjNXP5.js → update-runner-Bcmd0XnZ.js} +1 -1
  113. package/dist/{web-CWFF4V6q.js → web-CSPcQYqR.js} +2 -2
  114. package/dist/{web-DMJyGxn3.js → web-D9-D09LS.js} +4 -4
  115. package/dist/{web-DNwg0ZOA.js → web-DJqpgWuK.js} +5 -5
  116. package/dist/{web-BPiGXIj5.js → web-gqbdxJga.js} +2 -2
  117. package/extensions/bluebubbles/package.json +1 -1
  118. package/extensions/copilot-proxy/package.json +1 -1
  119. package/extensions/diagnostics-otel/package.json +1 -1
  120. package/extensions/discord/package.json +1 -1
  121. package/extensions/feishu/package.json +1 -1
  122. package/extensions/google-antigravity-auth/package.json +1 -1
  123. package/extensions/google-gemini-cli-auth/package.json +1 -1
  124. package/extensions/googlechat/package.json +1 -1
  125. package/extensions/imessage/package.json +1 -1
  126. package/extensions/irc/package.json +1 -1
  127. package/extensions/learning-loop/package.json +1 -1
  128. package/extensions/line/package.json +1 -1
  129. package/extensions/llm-task/package.json +1 -1
  130. package/extensions/matrix/CHANGELOG.md +6 -0
  131. package/extensions/matrix/package.json +1 -1
  132. package/extensions/mattermost/package.json +1 -1
  133. package/extensions/memory-core/package.json +1 -1
  134. package/extensions/memory-lancedb/package.json +1 -1
  135. package/extensions/minimax-portal-auth/package.json +1 -1
  136. package/extensions/msteams/CHANGELOG.md +6 -0
  137. package/extensions/msteams/package.json +1 -1
  138. package/extensions/nextcloud-talk/package.json +1 -1
  139. package/extensions/nostr/CHANGELOG.md +6 -0
  140. package/extensions/nostr/package.json +1 -1
  141. package/extensions/open-prose/package.json +1 -1
  142. package/extensions/outlook/package.json +1 -1
  143. package/extensions/pipeline/package.json +1 -1
  144. package/extensions/signal/package.json +1 -1
  145. package/extensions/slack/package.json +1 -1
  146. package/extensions/telegram/package.json +1 -1
  147. package/extensions/tlon/package.json +1 -1
  148. package/extensions/twitch/CHANGELOG.md +6 -0
  149. package/extensions/twitch/package.json +1 -1
  150. package/extensions/voice-call/CHANGELOG.md +6 -0
  151. package/extensions/voice-call/package.json +1 -1
  152. package/extensions/whatsapp/package.json +1 -1
  153. package/extensions/zalo/CHANGELOG.md +6 -0
  154. package/extensions/zalo/package.json +1 -1
  155. package/extensions/zalouser/CHANGELOG.md +6 -0
  156. package/extensions/zalouser/package.json +1 -1
  157. package/package.json +1 -1
@@ -12,7 +12,7 @@ import { f as GATEWAY_CLIENT_CAPS, g as hasGatewayClientCap, i as isGatewayMessa
12
12
  import { c as writeJsonAtomic, o as createAsyncLock, s as readJsonFile } from "./pairing-token-Byh6drgn.js";
13
13
  import { s as pickPrimaryLanIPv4 } from "./net-DZ5Ayk-W.js";
14
14
  import { i as normalizeInputProvenance } from "./input-provenance-D0lNkCf6.js";
15
- import { $ as waitForEmbeddedPiRunEnd, C as resolveAgentDeliveryPlan, D as createOutboundSendDeps, Fn as isSystemEventContextChanged, G as buildGlassUiProfile, Hn as normalizeGroupActivation, Jn as formatZonedTimestamp, Mn as resolveAgentTimeoutMs, Mr as onAgentEvent, Mt as normalizeCronJobPatch, Nn as prepareAgentRun, Nr as registerAgentRunContext, Pn as enqueueSystemEvent, Qn as stopSubagentsForRequester, Sn as parseVerboseOverride, U as createReplyDispatcher, Vn as BARE_SESSION_RESET_PROMPT, Xt as persistBrowserProxyFiles, Y as runUnifiedTurn, Yt as applyBrowserProxyPaths, Z as abortEmbeddedPiRun, Zn as isAbortTrigger, a as listSubagentRunsForRequester, an as unbindThreadBindingsBySessionKey, ar as isTtsEnabled, at as buildAgentTurnParams, bn as applyModelOverrideToSessionEntry, c as clearSessionQueues, cr as resolveTtsAutoMode, ct as listTasksInWorkdir, dr as resolveTtsProviderOrder, fr as setTtsEnabled, ft as ensureOutboundSessionEntry, gr as OPENAI_TTS_VOICES, gt as resolveOutboundTarget, hn as resolveSendPolicy, hr as OPENAI_TTS_MODELS, i as listDescendantRunsForRequester, ir as getTtsProvider, jt as normalizeCronJobCreate, kt as writeRestartSentinel, lr as resolveTtsConfig, m as loadSymiPlugins, mn as normalizeSendPolicy, mr as textToSpeech, nn as scheduleGatewaySigusr1Restart, on as loadProviderUsageSummary, or as isTtsProviderConfigured, ot as prepareReplyTurn, pr as setTtsProvider, pt as resolveOutboundSessionRoute, rr as resolveUserTimezone, sr as resolveTtsApiKey, ur as resolveTtsPrefsPath, w as resolveAgentOutboundTarget, wt as formatDoctorNonInteractiveHint, x as agentCommand, xn as applyVerboseOverride } from "./subagent-registry-B4gg8TFc.js";
15
+ import { $ as waitForEmbeddedPiRunEnd, C as resolveAgentDeliveryPlan, D as createOutboundSendDeps, Fn as isSystemEventContextChanged, G as buildGlassUiProfile, Hn as normalizeGroupActivation, Jn as formatZonedTimestamp, Mn as resolveAgentTimeoutMs, Mr as onAgentEvent, Mt as normalizeCronJobPatch, Nn as prepareAgentRun, Nr as registerAgentRunContext, Pn as enqueueSystemEvent, Qn as stopSubagentsForRequester, Sn as parseVerboseOverride, U as createReplyDispatcher, Vn as BARE_SESSION_RESET_PROMPT, Xt as persistBrowserProxyFiles, Y as runUnifiedTurn, Yt as applyBrowserProxyPaths, Z as abortEmbeddedPiRun, Zn as isAbortTrigger, a as listSubagentRunsForRequester, an as unbindThreadBindingsBySessionKey, ar as isTtsEnabled, at as buildAgentTurnParams, bn as applyModelOverrideToSessionEntry, c as clearSessionQueues, cr as resolveTtsAutoMode, ct as listTasksInWorkdir, dr as resolveTtsProviderOrder, fr as setTtsEnabled, ft as ensureOutboundSessionEntry, gr as OPENAI_TTS_VOICES, gt as resolveOutboundTarget, hn as resolveSendPolicy, hr as OPENAI_TTS_MODELS, i as listDescendantRunsForRequester, ir as getTtsProvider, jt as normalizeCronJobCreate, kt as writeRestartSentinel, lr as resolveTtsConfig, m as loadSymiPlugins, mn as normalizeSendPolicy, mr as textToSpeech, nn as scheduleGatewaySigusr1Restart, on as loadProviderUsageSummary, or as isTtsProviderConfigured, ot as prepareReplyTurn, pr as setTtsProvider, pt as resolveOutboundSessionRoute, rr as resolveUserTimezone, sr as resolveTtsApiKey, ur as resolveTtsPrefsPath, w as resolveAgentOutboundTarget, wt as formatDoctorNonInteractiveHint, x as agentCommand, xn as applyVerboseOverride } from "./subagent-registry-k0ZBnJuU.js";
16
16
  import { F as resolveMainSessionKey, I as resolveMainSessionKeyFromConfig, J as normalizeSessionDeliveryFields, N as resolveAgentMainSessionKey, P as resolveExplicitAgentSessionKey, R as snapshotSessionOrigin, S as stripEnvelopeFromMessages, _ as capArrayByJsonBytes, d as updateSessionStore, g as archiveSessionTranscripts, h as archiveFileOnDisk, o as loadSessionStore, t as extractDeliveryInfo, v as readSessionMessages, x as resolveSessionTranscriptCandidates, y as readSessionPreviewItemsFromTranscript } from "./sessions-D94fC0u0.js";
17
17
  import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-DTKQE9kt.js";
18
18
  import { n as createBrowserRouteDispatcher } from "./with-timeout-Sf6xNmAk.js";
@@ -21,7 +21,7 @@ import { t as movePathToTrash } from "./trash-CWQQXWX3.js";
21
21
  import { c as resolveStorePath, n as resolveSessionFilePath, r as resolveSessionFilePathOptions, s as resolveSessionTranscriptsDirForAgent } from "./paths-DNdWAq7b.js";
22
22
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels } from "./thinking-8sKPnzpp.js";
23
23
  import { a as resolveAgentIdentity, t as createReplyPrefixOptions } from "./reply-prefix-Pz-5t5RS.js";
24
- import { r as getMemorySearchManager } from "./memory-cli-CEvfDody.js";
24
+ import { r as getMemorySearchManager } from "./memory-cli-CFc9bXRp.js";
25
25
  import { _ as requestNodePairing, g as renamePairedNode, h as rejectNodePairing, m as listNodePairing, o as getRemoteSkillEligibility, p as approveNodePairing, y as verifyNodeToken } from "./skill-commands-BLuiRgmy.js";
26
26
  import { t as listAgentWorkspaceDirs } from "./workspace-dirs-CFbo15ku.js";
27
27
  import { a as loadCombinedSessionStoreForGateway, c as resolveGatewaySessionStoreTarget, i as listSessionsFromStore, l as resolveSessionModelRef, o as loadSessionEntry, r as listAgentsForGateway, s as pruneLegacyStoreKeys, t as canonicalizeSpawnedByForAgent } from "./session-utils-BUK1eo6T.js";
@@ -32,20 +32,20 @@ import { n as normalizePollInput } from "./polls-Cm1-n4jF.js";
32
32
  import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-BvbXdY02.js";
33
33
  import { i as parseAbsoluteTimeMs } from "./stagger-BDqsqTKI.js";
34
34
  import { w as resolveAssistantAvatarUrl } from "./onboard-helpers-wWVzXusf.js";
35
- import { r as getLastHeartbeatEvent } from "./heartbeat-visibility-BOc3XHJM.js";
35
+ import { r as getLastHeartbeatEvent } from "./heartbeat-visibility-C1vHOBwO.js";
36
36
  import { t as buildChannelUiCatalog } from "./catalog-KcLvtTfa.js";
37
37
  import { t as WizardCancelledError } from "./prompts-DbHSz44H.js";
38
38
  import { t as resolveChannelDefaultAccountId } from "./helpers-gWnZ9zWR.js";
39
39
  import { t as buildChannelAccountSnapshot } from "./status-B8TZsG0t.js";
40
40
  import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-C7_mWfpH.js";
41
- import { r as getStatusSummary } from "./status-Do0t7I6P.js";
42
- import { c as setHeartbeatsEnabled, u as abortHeartbeatRunForSession } from "./health-BJOdskDn.js";
41
+ import { r as getStatusSummary } from "./status-CrxGjZwV.js";
42
+ import { c as setHeartbeatsEnabled, u as abortHeartbeatRunForSession } from "./health-CMNaNxdO.js";
43
43
  import { m as normalizeUpdateChannel } from "./update-check-BNjupSIM.js";
44
- import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-zIsKDi4p.js";
45
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-BfNlwhop.js";
44
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-jE3kPG6g.js";
45
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-JYh7a1x9.js";
46
46
  import { t as resolveSystemRunCommand } from "./system-run-command-B_qw8CXP.js";
47
47
  import { t as installSkill } from "./skills-install-DEq4Ey44.js";
48
- import { t as runGatewayUpdate } from "./update-runner-BSHkPRya.js";
48
+ import { t as runGatewayUpdate } from "./update-runner-BSDKsvVP.js";
49
49
  import { spawnSync } from "node:child_process";
50
50
  import * as os$1 from "node:os";
51
51
  import os from "node:os";
@@ -7580,7 +7580,7 @@ const nodeHandlers = {
7580
7580
  const p = params;
7581
7581
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
7582
7582
  await respondUnavailableOnThrow(respond, async () => {
7583
- const { handleNodeEvent } = await import("./server-node-events-BBcYbve5.js");
7583
+ const { handleNodeEvent } = await import("./server-node-events-Cn5abeER.js");
7584
7584
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
7585
7585
  await handleNodeEvent({
7586
7586
  deps: context.deps,
@@ -1,6 +1,6 @@
1
1
  import { g as resolveStateDir, t as CONFIG_PATH } from "./paths-Cqn-zk3M.js";
2
2
  import { D as isPlainObject, U as getResolvedLoggerSettings, r as clamp, y as resolveUserPath } from "./utils-B-0b9bGM.js";
3
- import { $ as loadSessionEntry, Bt as persistBrowserProxyFiles, Cn as prepareAgentRun, H as runUnifiedTurn, Hn as stopSubagentsForRequester, I as createReplyDispatcher, J as canonicalizeSpawnedByForAgent, Jn as listDescendantRunsForRequester, K as listTasksInWorkdir, Kt as scheduleGatewaySigusr1Restart, Mn as normalizeGroupActivation, Mr as onAgentEvent, Nr as registerAgentRunContext, Q as loadCombinedSessionStoreForGateway, R as buildGlassUiProfile, Rn as formatZonedTimestamp, St as normalizeCronJobPatch, Tn as isSystemEventContextChanged, U as buildAgentTurnParams, Vn as isAbortTrigger, W as prepareReplyTurn, X as listAgentsForGateway, Xt as loadProviderUsageSummary, Yn as listSubagentRunsForRequester, Yt as unbindThreadBindingsBySessionKey, Z as listSessionsFromStore, Zn as resolveAgentTimeoutMs, _ as resolveAgentOutboundTarget, _r as setTtsProvider, an as resolveSendPolicy, at as resolveOutboundSessionRoute, b as createOutboundSendDeps, br as OPENAI_TTS_VOICES, cr as getTtsProvider, ct as resolveOutboundTarget, dn as applyModelOverrideToSessionEntry, dr as resolveTtsApiKey, er as clearSessionQueues, et as pruneLegacyStoreKeys, fn as applyVerboseOverride, fr as resolveTtsAutoMode, g as resolveAgentDeliveryPlan, gr as setTtsEnabled, hr as resolveTtsProviderOrder, in as normalizeSendPolicy, it as ensureOutboundSessionEntry, jn as BARE_SESSION_RESET_PROMPT, lr as isTtsEnabled, m as agentCommand, mr as resolveTtsPrefsPath, mt as formatDoctorNonInteractiveHint, nt as resolveSessionModelRef, pn as parseVerboseOverride, pr as resolveTtsConfig, rr as waitForEmbeddedPiRunEnd, s as loadSymiPlugins, sr as resolveUserTimezone, tr as abortEmbeddedPiRun, tt as resolveGatewaySessionStoreTarget, ur as isTtsProviderConfigured, vr as textToSpeech, wn as enqueueSystemEvent, xt as normalizeCronJobCreate, yr as OPENAI_TTS_MODELS, yt as writeRestartSentinel, zt as applyBrowserProxyPaths } from "./unified-runner-NjwIEpGt.js";
3
+ import { $ as loadSessionEntry, Bt as persistBrowserProxyFiles, Cn as prepareAgentRun, H as runUnifiedTurn, Hn as stopSubagentsForRequester, I as createReplyDispatcher, J as canonicalizeSpawnedByForAgent, Jn as listDescendantRunsForRequester, K as listTasksInWorkdir, Kt as scheduleGatewaySigusr1Restart, Mn as normalizeGroupActivation, Mr as onAgentEvent, Nr as registerAgentRunContext, Q as loadCombinedSessionStoreForGateway, R as buildGlassUiProfile, Rn as formatZonedTimestamp, St as normalizeCronJobPatch, Tn as isSystemEventContextChanged, U as buildAgentTurnParams, Vn as isAbortTrigger, W as prepareReplyTurn, X as listAgentsForGateway, Xt as loadProviderUsageSummary, Yn as listSubagentRunsForRequester, Yt as unbindThreadBindingsBySessionKey, Z as listSessionsFromStore, Zn as resolveAgentTimeoutMs, _ as resolveAgentOutboundTarget, _r as setTtsProvider, an as resolveSendPolicy, at as resolveOutboundSessionRoute, b as createOutboundSendDeps, br as OPENAI_TTS_VOICES, cr as getTtsProvider, ct as resolveOutboundTarget, dn as applyModelOverrideToSessionEntry, dr as resolveTtsApiKey, er as clearSessionQueues, et as pruneLegacyStoreKeys, fn as applyVerboseOverride, fr as resolveTtsAutoMode, g as resolveAgentDeliveryPlan, gr as setTtsEnabled, hr as resolveTtsProviderOrder, in as normalizeSendPolicy, it as ensureOutboundSessionEntry, jn as BARE_SESSION_RESET_PROMPT, lr as isTtsEnabled, m as agentCommand, mr as resolveTtsPrefsPath, mt as formatDoctorNonInteractiveHint, nt as resolveSessionModelRef, pn as parseVerboseOverride, pr as resolveTtsConfig, rr as waitForEmbeddedPiRunEnd, s as loadSymiPlugins, sr as resolveUserTimezone, tr as abortEmbeddedPiRun, tt as resolveGatewaySessionStoreTarget, ur as isTtsProviderConfigured, vr as textToSpeech, wn as enqueueSystemEvent, xt as normalizeCronJobCreate, yr as OPENAI_TTS_MODELS, yt as writeRestartSentinel, zt as applyBrowserProxyPaths } from "./unified-runner-CzxCpDUC.js";
4
4
  import { C as createInternalHookEvent, T as triggerInternalHook, d as getActivePluginRegistry, r as DEFAULT_CHAT_CHANNEL, t as CHANNEL_IDS } from "./registry-ClO_zVv-.js";
5
5
  import { f as defaultRuntime, t as createSubsystemLogger } from "./subsystem-zqierDLj.js";
6
6
  import { Et as normalizeSecretInput, G as resolveSubagentConfiguredModelSelection, H as resolveDefaultModelForAgent, q as resolveThinkingDefault, z as resolveAllowedModelRef } from "./auth-profiles-HXq6s5EV.js";
@@ -21,7 +21,7 @@ import { h as getGlobalHookRunner, o as normalizeReplyPayloadsForDelivery, t as
21
21
  import { i as loadSessionUsageTimeSeries, n as loadCostUsageSummary, r as loadSessionCostSummary, t as discoverAllSessions } from "./session-cost-usage-CfQCToqp.js";
22
22
  import { n as createBrowserRouteDispatcher } from "./with-timeout-DLkDCwhx.js";
23
23
  import { a as resolveAgentIdentity, t as createReplyPrefixOptions } from "./reply-prefix-DnXliXio.js";
24
- import { r as getMemorySearchManager } from "./memory-cli-BFgNzW3D.js";
24
+ import { r as getMemorySearchManager } from "./memory-cli-LV7-59SK.js";
25
25
  import { $ as validateNodePairRejectParams, A as validateCronStatusParams, At as validateWebLoginWaitParams, B as validateExecApprovalsGetParams, C as validateConfigSetParams, Ct as validateSkillsUpdateParams, D as validateCronRemoveParams, Dt as validateUpdateRunParams, E as validateCronListParams, Et as validateTasksListParams, F as validateDevicePairRemoveParams, G as validateModelsListParams, Gt as rejectDevicePairing, H as validateExecApprovalsNodeSetParams, I as validateDeviceTokenRevokeParams, It as ErrorCodes, J as validateNodeInvokeParams, Jt as revokeDeviceToken, K as validateNodeDescribeParams, Kt as removePairedDevice, L as validateDeviceTokenRotateParams, Lt as errorShape, M as validateDevicePairApproveParams, Mt as validateWizardNextParams, N as validateDevicePairListParams, Nt as validateWizardStartParams, O as validateCronRunParams, Ot as validateWakeParams, P as validateDevicePairRejectParams, Pt as validateWizardStatusParams, Q as validateNodePairListParams, S as validateConfigSchemaParams, St as validateSkillsStatusParams, T as validateCronAddParams, Tt as validateTalkModeParams, U as validateExecApprovalsSetParams, V as validateExecApprovalsNodeGetParams, Vt as approveDevicePairing, W as validateLogsTailParams, Wt as listDevicePairing, X as validateNodeListParams, Xt as summarizeDeviceTokens, Y as validateNodeInvokeResultParams, Yt as rotateDeviceToken, Z as validateNodePairApproveParams, _ as validateChatInjectParams, _t as validateSessionsRestoreParams, a as validateAgentWaitParams, b as validateConfigGetParams, bt as validateSkillsBinsParams, c as validateAgentsFilesGetParams, ct as validateSessionsCompactParams, d as validateAgentsListParams, dt as validateSessionsFavoriteFileParams, et as validateNodePairRequestParams, f as validateAgentsUpdateParams, ft as validateSessionsListParams, g as validateChatHistoryParams, gt as validateSessionsResolveParams, h as validateChatAbortParams, ht as validateSessionsResetParams, i as validateAgentParams, it as validatePushTestParams, j as validateCronUpdateParams, jt as validateWizardCancelParams, k as validateCronRunsParams, kt as validateWebLoginStartParams, l as validateAgentsFilesListParams, lt as validateSessionsDeleteFileParams, m as validateChannelsStatusParams, mt as validateSessionsPreviewParams, n as formatValidationErrors, nt as validateNodeRenameParams, o as validateAgentsCreateParams, ot as validateSendParams, p as validateChannelsLogoutParams, pt as validateSessionsPatchParams, q as validateNodeEventParams, r as validateAgentIdentityParams, rt as validatePollParams, s as validateAgentsDeleteParams, st as validateSessionsAdoptFileParams, tt as validateNodePairVerifyParams, u as validateAgentsFilesSetParams, ut as validateSessionsDeleteParams, v as validateChatSendParams, vt as validateSessionsSearchParams, wt as validateTalkConfigParams, x as validateConfigPatchParams, xt as validateSkillsInstallParams, y as validateConfigApplyParams, yt as validateSessionsUsageParams, zt as parseSessionLabel } from "./client-CZSkE50e.js";
26
26
  import { l as authorizeOperatorScopesForMethod, s as ADMIN_SCOPE$2, u as isNodeRoleMethod } from "./call-CCvj2tKV.js";
27
27
  import { c as writeJsonAtomic, o as createAsyncLock, s as readJsonFile } from "./pairing-token-CTHqnrDZ.js";
@@ -33,21 +33,21 @@ import { n as normalizePollInput } from "./polls-C5iuAHi5.js";
33
33
  import { n as createBrowserControlContext, r as startBrowserControlServiceFromConfig } from "./control-service-DqxWEvk3.js";
34
34
  import { i as parseAbsoluteTimeMs } from "./stagger-BEsczMsw.js";
35
35
  import { w as resolveAssistantAvatarUrl } from "./onboard-helpers-B-ZzwyS1.js";
36
- import { r as getLastHeartbeatEvent } from "./heartbeat-visibility-DiKuGlXT.js";
36
+ import { r as getLastHeartbeatEvent } from "./heartbeat-visibility-D7nLp3pi.js";
37
37
  import { t as buildChannelUiCatalog } from "./catalog-pt1jhhyb.js";
38
38
  import { t as buildWorkspaceSkillStatus } from "./skills-status-DzvtNke3.js";
39
39
  import { t as WizardCancelledError } from "./prompts-NOUgk6FH.js";
40
40
  import { t as resolveChannelDefaultAccountId } from "./helpers-CYGbI-uz.js";
41
41
  import { t as buildChannelAccountSnapshot } from "./status-TtGsgDjP.js";
42
42
  import { o as isNodeCommandAllowed, s as resolveNodeCommandAllowlist } from "./audit-SikqG3KB.js";
43
- import { n as getStatusSummary } from "./status-E8bxgRbF.js";
44
- import { l as abortHeartbeatRunForSession, s as setHeartbeatsEnabled } from "./health-Ux1rRtE3.js";
43
+ import { n as getStatusSummary } from "./status-DIGJ8-hp.js";
44
+ import { l as abortHeartbeatRunForSession, s as setHeartbeatsEnabled } from "./health-CcIuOt6-.js";
45
45
  import { m as normalizeUpdateChannel } from "./update-check-BIE5FLmi.js";
46
- import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-D2xhFnz-.js";
47
- import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-CpxstSW7.js";
46
+ import { a as sendApnsAlert, c as parseMessageWithAttachments, i as resolveApnsAuthConfigFromEnv, l as formatForLog, n as normalizeApnsEnvironment, o as sendApnsBackgroundWake, s as normalizeRpcAttachmentsToChatAttachments, t as loadApnsRegistration } from "./push-apns-CXP9q39j.js";
47
+ import { a as pruneAgentConfig, i as loadAgentIdentity, r as findAgentEntryIndex, t as applyAgentConfig } from "./agents.config-DSrQ0TM2.js";
48
48
  import { t as resolveSystemRunCommand } from "./system-run-command-DKiCEPJc.js";
49
49
  import { t as installSkill } from "./skills-install-ClMBHyh2.js";
50
- import { t as runGatewayUpdate } from "./update-runner-DObjNXP5.js";
50
+ import { t as runGatewayUpdate } from "./update-runner-Bcmd0XnZ.js";
51
51
  import crypto, { randomUUID } from "node:crypto";
52
52
  import * as fs$2 from "node:fs";
53
53
  import fs from "node:fs";
@@ -7582,7 +7582,7 @@ const nodeHandlers = {
7582
7582
  const p = params;
7583
7583
  const payloadJSON = typeof p.payloadJSON === "string" ? p.payloadJSON : p.payload !== void 0 ? JSON.stringify(p.payload) : null;
7584
7584
  await respondUnavailableOnThrow(respond, async () => {
7585
- const { handleNodeEvent } = await import("./server-node-events-D33Ivpdb.js");
7585
+ const { handleNodeEvent } = await import("./server-node-events-BTuwCzuB.js");
7586
7586
  const nodeId = client?.connect?.device?.id ?? client?.connect?.client?.id ?? "node";
7587
7587
  await handleNodeEvent({
7588
7588
  deps: context.deps,
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import "./utils-B-0b9bGM.js";
3
3
  import "./tokens-Cz6cgZ7r.js";
4
- import { $ as loadSessionEntry, ct as resolveOutboundTarget, et as pruneLegacyStoreKeys, m as agentCommand, tn as requestHeartbeatNow, tt as resolveGatewaySessionStoreTarget, v as createOutboundSendDeps, wn as enqueueSystemEvent } from "./unified-runner-NjwIEpGt.js";
4
+ import { $ as loadSessionEntry, ct as resolveOutboundTarget, et as pruneLegacyStoreKeys, m as agentCommand, tn as requestHeartbeatNow, tt as resolveGatewaySessionStoreTarget, v as createOutboundSendDeps, wn as enqueueSystemEvent } from "./unified-runner-CzxCpDUC.js";
5
5
  import "./registry-ClO_zVv-.js";
6
6
  import { f as defaultRuntime } from "./subsystem-zqierDLj.js";
7
7
  import "./auth-profiles-HXq6s5EV.js";
@@ -56,8 +56,8 @@ import "./send-DNJPCiwf.js";
56
56
  import "./model-DIO3dH08.js";
57
57
  import "./pi-model-discovery-CXXH7biP.js";
58
58
  import "./reply-prefix-DnXliXio.js";
59
- import "./memory-cli-BFgNzW3D.js";
60
- import "./manager-DdfJ-DW0.js";
59
+ import "./memory-cli-LV7-59SK.js";
60
+ import "./manager-_IXN4-V8.js";
61
61
  import "./gemini-auth-D7Wqp9Ma.js";
62
62
  import "./retry-DYICeae5.js";
63
63
  import "./sqlite-CRogFEk1.js";
@@ -103,7 +103,7 @@ import "./onboard-helpers-B-ZzwyS1.js";
103
103
  import "./prompt-style-CSNJI4MG.js";
104
104
  import "./pairing-labels-6wdVkxUt.js";
105
105
  import "./pi-tools.policy-CQ0NqaBl.js";
106
- import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-D2xhFnz-.js";
106
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-CXP9q39j.js";
107
107
  import { randomUUID } from "node:crypto";
108
108
 
109
109
  //#region src/gateway/server-node-events.ts
@@ -15,7 +15,7 @@ import "./client-CJIMV1WD.js";
15
15
  import "./call-DgBbW7bk.js";
16
16
  import "./message-channel-C9dERklz.js";
17
17
  import "./pairing-token-Byh6drgn.js";
18
- import { Pn as enqueueSystemEvent, T as createOutboundSendDeps, dn as requestHeartbeatNow, gt as resolveOutboundTarget, x as agentCommand } from "./subagent-registry-B4gg8TFc.js";
18
+ import { Pn as enqueueSystemEvent, T as createOutboundSendDeps, dn as requestHeartbeatNow, gt as resolveOutboundTarget, x as agentCommand } from "./subagent-registry-k0ZBnJuU.js";
19
19
  import { d as updateSessionStore } from "./sessions-D94fC0u0.js";
20
20
  import "./tokens-BEvOiQ65.js";
21
21
  import { r as normalizeChannelId } from "./plugins-DTKQE9kt.js";
@@ -53,8 +53,8 @@ import "./tool-images-CVLISeRT.js";
53
53
  import "./thinking-8sKPnzpp.js";
54
54
  import "./models-config-BEX8iiQb.js";
55
55
  import "./reply-prefix-Pz-5t5RS.js";
56
- import "./memory-cli-CEvfDody.js";
57
- import "./manager-OL6o99xD.js";
56
+ import "./memory-cli-CFc9bXRp.js";
57
+ import "./manager-DrpXfTr8.js";
58
58
  import "./gemini-auth-48fFOTO4.js";
59
59
  import "./retry-C4Q_VPOo.js";
60
60
  import "./sqlite-BP8tiuca.js";
@@ -99,7 +99,7 @@ import "./onboard-helpers-wWVzXusf.js";
99
99
  import "./prompt-style-BxVdnrLq.js";
100
100
  import "./pairing-labels-D5bj-6hr.js";
101
101
  import "./pi-tools.policy-Dcon0Kdw.js";
102
- import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-zIsKDi4p.js";
102
+ import { c as parseMessageWithAttachments, l as formatForLog, r as registerApnsToken, s as normalizeRpcAttachmentsToChatAttachments } from "./push-apns-jE3kPG6g.js";
103
103
  import { randomUUID } from "node:crypto";
104
104
 
105
105
  //#region src/gateway/server-node-events.ts
@@ -1,4 +1,4 @@
1
- import { o as createPluginLoaderLogger, s as loadSymiPlugins } from "./unified-runner-NjwIEpGt.js";
1
+ import { o as createPluginLoaderLogger, s as loadSymiPlugins } from "./unified-runner-CzxCpDUC.js";
2
2
  import { t as createSubsystemLogger } from "./subsystem-zqierDLj.js";
3
3
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-BajBuriF.js";
4
4
  import { i as loadConfig } from "./config-B4cq-LO4.js";
@@ -9,13 +9,13 @@ import { c as resolveAgentWorkspaceDir } from "./agent-scope-xM36I1Em.js";
9
9
  import { t as buildWorkspaceSkillStatus } from "./skills-status-BNfHkto8.js";
10
10
  import { H as VERSION, i as loadConfig, o as readConfigFileSnapshot } from "./config-CE_yCGtB.js";
11
11
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-DgBbW7bk.js";
12
- import { Bn as formatChannelAllowFrom, Dt as summarizeRestartSentinel, Et as readRestartSentinel, Ln as peekSystemEvents, Rn as buildChannelSummary, on as loadProviderUsageSummary, sn as formatUsageReportLines, tt as sha256HexPrefix, zn as buildChannelAccountSnapshot } from "./subagent-registry-B4gg8TFc.js";
12
+ import { Bn as formatChannelAllowFrom, Dt as summarizeRestartSentinel, Et as readRestartSentinel, Ln as peekSystemEvents, Rn as buildChannelSummary, on as loadProviderUsageSummary, sn as formatUsageReportLines, tt as sha256HexPrefix, zn as buildChannelAccountSnapshot } from "./subagent-registry-k0ZBnJuU.js";
13
13
  import { F as resolveMainSessionKey, j as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-D94fC0u0.js";
14
14
  import { n as listChannelPlugins } from "./plugins-DTKQE9kt.js";
15
15
  import { o as getTailnetHostname, s as readTailscaleStatusJson } from "./tailscale-CbbvYNVw.js";
16
16
  import { i as formatPortDiagnostics, n as inspectPortUsage } from "./ports-2xFXbwLq.js";
17
17
  import { c as resolveStorePath } from "./paths-DNdWAq7b.js";
18
- import { r as getMemorySearchManager } from "./memory-cli-CEvfDody.js";
18
+ import { r as getMemorySearchManager } from "./memory-cli-CFc9bXRp.js";
19
19
  import { n as formatTimeAgo } from "./format-relative-BDwAggS5.js";
20
20
  import { o as getRemoteSkillEligibility } from "./skill-commands-BLuiRgmy.js";
21
21
  import { l as resolveSessionModelRef, n as classifySessionKey, r as listAgentsForGateway, u as lookupContextTokens } from "./session-utils-BUK1eo6T.js";
@@ -29,7 +29,7 @@ import { t as formatRuntimeStatusWithDetails } from "./runtime-status-DJYthOLz.j
29
29
  import { t as readLastGatewayErrorLine } from "./diagnostics-C6xPE2ln.js";
30
30
  import { t as renderTable } from "./table-Bka4fasy.js";
31
31
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-C7_mWfpH.js";
32
- import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-BJOdskDn.js";
32
+ import { o as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-CMNaNxdO.js";
33
33
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-BNjupSIM.js";
34
34
  import { t as resolveNodeService } from "./node-service-B-qdOCNb.js";
35
35
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-yQZNwAF2.js";
@@ -1,7 +1,7 @@
1
1
  import { o as createSubsystemLogger } from "./entry.js";
2
2
  import { D as resolveDefaultAgentWorkspaceDir, c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-xM36I1Em.js";
3
3
  import { i as loadConfig } from "./config-CE_yCGtB.js";
4
- import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-B4gg8TFc.js";
4
+ import { m as loadSymiPlugins, p as createPluginLoaderLogger } from "./subagent-registry-k0ZBnJuU.js";
5
5
 
6
6
  //#region src/plugins/status.ts
7
7
  const log = createSubsystemLogger("plugins");
@@ -1,6 +1,6 @@
1
1
  import { u as resolveGatewayPort } from "./paths-Cqn-zk3M.js";
2
2
  import { B as theme, k as info, z as isRich } from "./utils-B-0b9bGM.js";
3
- import { An as formatChannelAllowFrom, Dn as peekSystemEvents, On as buildChannelSummary, X as listAgentsForGateway, Xt as loadProviderUsageSummary, Y as classifySessionKey, Zt as formatUsageReportLines, _t as summarizeRestartSentinel, gt as readRestartSentinel, kn as buildChannelAccountSnapshot, nt as resolveSessionModelRef, on as lookupContextTokens, xr as sha256HexPrefix } from "./unified-runner-NjwIEpGt.js";
3
+ import { An as formatChannelAllowFrom, Dn as peekSystemEvents, On as buildChannelSummary, X as listAgentsForGateway, Xt as loadProviderUsageSummary, Y as classifySessionKey, Zt as formatUsageReportLines, _t as summarizeRestartSentinel, gt as readRestartSentinel, kn as buildChannelAccountSnapshot, nt as resolveSessionModelRef, on as lookupContextTokens, xr as sha256HexPrefix } from "./unified-runner-CzxCpDUC.js";
4
4
  import { Ht as DEFAULT_MODEL, Ut as DEFAULT_PROVIDER, V as resolveConfiguredModelRef, Vt as DEFAULT_CONTEXT_TOKENS } from "./auth-profiles-HXq6s5EV.js";
5
5
  import { t as formatCliCommand } from "./command-format-CyXZlazG.js";
6
6
  import { S as parseAgentSessionKey } from "./session-key-oOB32jSB.js";
@@ -13,7 +13,7 @@ import { a as inspectPortUsage, s as formatPortDiagnostics } from "./ports-VTIa2
13
13
  import { H as resolveMainSessionKey, R as resolveFreshSessionTotalTokens, o as loadSessionStore } from "./sessions-CRVLhjOR.js";
14
14
  import { n as listChannelPlugins } from "./plugins-BL5D1_sT.js";
15
15
  import { c as resolveStorePath } from "./paths-BtFfPm8h.js";
16
- import { r as getMemorySearchManager } from "./memory-cli-BFgNzW3D.js";
16
+ import { r as getMemorySearchManager } from "./memory-cli-LV7-59SK.js";
17
17
  import { n as callGateway, t as buildGatewayConnectionDetails } from "./call-CCvj2tKV.js";
18
18
  import { n as formatTimeAgo } from "./format-relative-BXoxEQVN.js";
19
19
  import { o as getRemoteSkillEligibility } from "./skill-commands-Cph46COl.js";
@@ -28,7 +28,7 @@ import { t as formatRuntimeStatusWithDetails } from "./runtime-status-D0P5lDGf.j
28
28
  import { t as readLastGatewayErrorLine } from "./diagnostics-D40jPn_9.js";
29
29
  import { t as renderTable } from "./table-Cg6YZXv9.js";
30
30
  import { a as resolveGatewayProbeAuth$1, c as probeGateway, t as runSecurityAudit } from "./audit-SikqG3KB.js";
31
- import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-Ux1rRtE3.js";
31
+ import { a as resolveHeartbeatSummaryForAgent, t as formatHealthChannelLines } from "./health-CcIuOt6-.js";
32
32
  import { g as resolveUpdateChannelDisplay, i as formatGitInstallLabel, m as normalizeUpdateChannel, t as checkUpdateStatus } from "./update-check-BIE5FLmi.js";
33
33
  import { t as resolveNodeService } from "./node-service-DiZDC-T7.js";
34
34
  import { n as redactSecrets, t as formatGatewayAuthUsed } from "./format-DNqZrSx7.js";
@@ -51,8 +51,8 @@ import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as san
51
51
  import { a as normalizeElevatedLevel, c as normalizeUsageDisplay, d as supportsXHighThinking, l as normalizeVerboseLevel, n as formatXHighModelHint, o as normalizeReasoningLevel, s as normalizeThinkLevel, t as formatThinkingLevels, u as resolveResponseUsageMode } from "./thinking-8sKPnzpp.js";
52
52
  import { t as ensureSymiModelsJson } from "./models-config-BEX8iiQb.js";
53
53
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-Pz-5t5RS.js";
54
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-CEvfDody.js";
55
- import { i as resolveMemorySearchConfig } from "./manager-OL6o99xD.js";
54
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-CFc9bXRp.js";
55
+ import { i as resolveMemorySearchConfig } from "./manager-DrpXfTr8.js";
56
56
  import { f as runTasksWithConcurrency } from "./internal-C2jxeHS9.js";
57
57
  import { n as retryAsync } from "./retry-C4Q_VPOo.js";
58
58
  import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-Co0LcWKH.js";
@@ -16194,6 +16194,11 @@ function buildAgentSystemPrompt(params) {
16194
16194
  "- Never narrate or quote tool output you did not actually receive from a real tool result. Writing \"I ran X and got Y\" without a corresponding tool invocation is fabrication and breaks user trust.",
16195
16195
  "- For factual local-system lookups (hostname, file contents, process state, env vars, current dir, system info), the answer comes from invoking the appropriate tool — not from priors. Always invoke.",
16196
16196
  "",
16197
+ "Example — when the user explicitly names a tool:",
16198
+ " User: \"Use the exec tool to run: echo hi\"",
16199
+ " Correct: call exec with command=\"echo hi\", then summarise the actual stdout you received.",
16200
+ " Wrong: emit \"hi\" as text without calling exec — that's fabrication.",
16201
+ "",
16197
16202
  ...compactMode ? [] : [
16198
16203
  "## Tool Call Style",
16199
16204
  "Default: do not narrate routine, low-risk tool calls (just call the tool).",
@@ -34938,6 +34943,91 @@ function createOutputNormalizer(profile, modelId) {
34938
34943
  //#endregion
34939
34944
  //#region src/agents/model-aware-stream.ts
34940
34945
  /**
34946
+ * Match imperative tool requests:
34947
+ * "Use the exec tool to run X"
34948
+ * "use exec to ..."
34949
+ * "Please invoke the read tool"
34950
+ * "call memory_search with ..."
34951
+ *
34952
+ * Anchored to start-of-string, start-of-line, or after a closing-bracket
34953
+ * delimiter `] ` (covers Symi's `[Thu 2026-04-30 20:48 EDT] ` timestamp
34954
+ * envelope, the `[Outlook 365] ` plugin banner, and similar prefixes that
34955
+ * gateway middleware can inject before the user's actual prompt — verified
34956
+ * live: `chat.send` from Glass UI ships content like
34957
+ *
34958
+ * Conversation info (untrusted metadata):
34959
+ * ```json
34960
+ * { "message_id": "...", ... }
34961
+ * ```
34962
+ *
34963
+ * [Thu 2026-04-30 20:48 EDT] Use the exec tool to run: hostname
34964
+ *
34965
+ * so the `Use` is preceded by `] ` not by `\n` or `^`).
34966
+ *
34967
+ * Verb list is conservative (use/invoke/call/please-{use,call}) — pure
34968
+ * imperative verbs that read unambiguously as "do this for me." Tool name
34969
+ * must match EXPLICIT_TOOL_NAMES exactly to keep "use poetic language" /
34970
+ * "use clear writing" / etc. from triggering.
34971
+ */
34972
+ const EXPLICIT_TOOL_REQUEST_PATTERN = new RegExp(String.raw`(?:^|\n|\]\s)\s*(?:please\s+)?(?:use|invoke|call)\s+(?:the\s+)?(?:` + [
34973
+ "exec",
34974
+ "bash",
34975
+ "read",
34976
+ "write",
34977
+ "edit",
34978
+ "patch",
34979
+ "web_search",
34980
+ "web_fetch",
34981
+ "browser",
34982
+ "browser_navigate",
34983
+ "browser_snapshot",
34984
+ "browser_click",
34985
+ "browser_type",
34986
+ "memory_search",
34987
+ "memory_get",
34988
+ "memory_pin",
34989
+ "memory_unpin",
34990
+ "spawn_agent",
34991
+ "message",
34992
+ "task_list",
34993
+ "task_cancel",
34994
+ "cron",
34995
+ "fetch",
34996
+ "skill_search"
34997
+ ].map((n) => n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|") + String.raw`)(?:\s+tool)?\b`, "i");
34998
+ /**
34999
+ * Extract the user-role text ONLY when it's the LAST message in the
35000
+ * conversation (i.e., we're at the start of a fresh turn, not in the
35001
+ * middle of an agent loop). Returns "" when:
35002
+ * - messages isn't an array
35003
+ * - the last message isn't user-role (= we're after a tool_call /
35004
+ * tool_result and the model is continuing — forcing tool_choice
35005
+ * "required" here would loop the agent: model must call a tool →
35006
+ * tool result → model must call ANOTHER tool → tool result → ...)
35007
+ *
35008
+ * Verified live on 3.0.7 dev: with the original "find any prior user
35009
+ * message" implementation, every agent-loop iteration saw the same
35010
+ * matching userText and re-forced tool_choice="required", spinning the
35011
+ * model in an infinite tool-call loop and timing out at 180s.
35012
+ */
35013
+ function extractLastUserText(messages) {
35014
+ if (!Array.isArray(messages) || messages.length === 0) return "";
35015
+ const last = messages[messages.length - 1];
35016
+ if (!last || typeof last !== "object") return "";
35017
+ const msg = last;
35018
+ if (msg.role !== "user") return "";
35019
+ if (typeof msg.content === "string") return msg.content;
35020
+ if (Array.isArray(msg.content)) {
35021
+ const parts = [];
35022
+ for (const part of msg.content) if (part && typeof part === "object") {
35023
+ const block = part;
35024
+ if (block.type === "text" && typeof block.text === "string") parts.push(block.text);
35025
+ }
35026
+ return parts.join("\n");
35027
+ }
35028
+ return "";
35029
+ }
35030
+ /**
34941
35031
  * Create a single stream function wrapper that handles all provider-specific
34942
35032
  * param injection via one onPayload hook.
34943
35033
  *
@@ -34985,6 +35075,10 @@ function createModelAwareStreamFn(opts) {
34985
35075
  delete p.store;
34986
35076
  }
34987
35077
  if (Array.isArray(p.tools) && p.tools.length > 0 && p.tool_choice === void 0) p.tool_choice = "auto";
35078
+ if (Array.isArray(p.tools) && p.tools.length > 0 && p.tool_choice === "auto") {
35079
+ const userText = extractLastUserText(p.messages);
35080
+ if (userText && EXPLICIT_TOOL_REQUEST_PATTERN.test(userText)) p.tool_choice = "required";
35081
+ }
34988
35082
  }
34989
35083
  callerOnPayload?.(payload);
34990
35084
  };
@@ -53352,7 +53446,7 @@ function setCliSessionId(entry, provider, sessionId) {
53352
53446
  function createDefaultDeps() {
53353
53447
  return {
53354
53448
  sendMessageWhatsApp: async (...args) => {
53355
- const { sendMessageWhatsApp } = await import("./web-DMJyGxn3.js");
53449
+ const { sendMessageWhatsApp } = await import("./web-D9-D09LS.js");
53356
53450
  return await sendMessageWhatsApp(...args);
53357
53451
  },
53358
53452
  sendMessageTelegram: async (...args) => {
@@ -68666,7 +68760,7 @@ function loadWebLoginQr() {
68666
68760
  return webLoginQrPromise;
68667
68761
  }
68668
68762
  function loadWebChannel() {
68669
- webChannelPromise ??= import("./web-DMJyGxn3.js");
68763
+ webChannelPromise ??= import("./web-D9-D09LS.js");
68670
68764
  return webChannelPromise;
68671
68765
  }
68672
68766
  function loadWhatsAppActions() {
@@ -7,7 +7,7 @@ import "./reply-prefix-C7ZwCr7X.js";
7
7
  import "./github-copilot-token-BbsJ0Qbo.js";
8
8
  import "./env-CQ_DQOwT.js";
9
9
  import "./tokens-DRIIdGfF.js";
10
- import { f as runAgentTurn } from "./pi-embedded-DiktDTAb.js";
10
+ import { f as runAgentTurn } from "./pi-embedded-D9KmgdGY.js";
11
11
  import "./plugins-CpxUKuIt.js";
12
12
  import "./accounts-DDEyGwby.js";
13
13
  import "./bindings-pK-Lzohb.js";
@@ -35,7 +35,7 @@ import "./accounts-DImOt9jX.js";
35
35
  import "./paths-DkMamAQ-.js";
36
36
  import "./tool-images-CdTyeTEN.js";
37
37
  import "./image-BwUdkv5g.js";
38
- import "./manager-D7uDkX3d.js";
38
+ import "./manager-ba9NOjzn.js";
39
39
  import "./gemini-auth-Drot-Pd7.js";
40
40
  import "./retry-QGp0jvVi.js";
41
41
  import "./sqlite-Bo4pHfp8.js";
@@ -4,7 +4,7 @@ import "./agent-scope-Ddr0Ws7u.js";
4
4
  import { t as createSubsystemLogger } from "./subsystem-BjyjJF-d.js";
5
5
  import "./workspace-CarmeCYN.js";
6
6
  import "./tokens-DLGDtW5r.js";
7
- import { t as runAgentTurn } from "./unified-runner-Bvqbwaaa.js";
7
+ import { t as runAgentTurn } from "./unified-runner-Dv9LPnmm.js";
8
8
  import "./auth-profiles-D4Yfd-KL.js";
9
9
  import "./env-BDXYbTKj.js";
10
10
  import "./github-copilot-token-cCYzSU9h.js";
@@ -39,7 +39,7 @@ import "./pi-auth-json-BmjnXR7W.js";
39
39
  import "./send-DqDuxaGt.js";
40
40
  import "./pi-model-discovery-CuZX_Q4t.js";
41
41
  import "./reply-prefix-C1Tw2ERK.js";
42
- import "./manager-H_Xir_av.js";
42
+ import "./manager-CpueNJtZ.js";
43
43
  import "./gemini-auth-CN9Q-uXv.js";
44
44
  import "./retry-B-y5suGA.js";
45
45
  import "./sqlite-VBmM_OHS.js";
@@ -14,7 +14,7 @@ import "./client-CJIMV1WD.js";
14
14
  import "./call-DgBbW7bk.js";
15
15
  import "./message-channel-C9dERklz.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import { X as runAgentTurn } from "./subagent-registry-B4gg8TFc.js";
17
+ import { X as runAgentTurn } from "./subagent-registry-k0ZBnJuU.js";
18
18
  import "./sessions-D94fC0u0.js";
19
19
  import "./tokens-BEvOiQ65.js";
20
20
  import "./plugins-DTKQE9kt.js";
@@ -52,8 +52,8 @@ import "./tool-images-CVLISeRT.js";
52
52
  import "./thinking-8sKPnzpp.js";
53
53
  import "./models-config-BEX8iiQb.js";
54
54
  import "./reply-prefix-Pz-5t5RS.js";
55
- import "./memory-cli-CEvfDody.js";
56
- import "./manager-OL6o99xD.js";
55
+ import "./memory-cli-CFc9bXRp.js";
56
+ import "./manager-DrpXfTr8.js";
57
57
  import "./gemini-auth-48fFOTO4.js";
58
58
  import "./retry-C4Q_VPOo.js";
59
59
  import "./sqlite-BP8tiuca.js";
@@ -1,7 +1,7 @@
1
1
  import "./paths-Cqn-zk3M.js";
2
2
  import "./utils-B-0b9bGM.js";
3
3
  import "./tokens-Cz6cgZ7r.js";
4
- import { t as runAgentTurn } from "./unified-runner-NjwIEpGt.js";
4
+ import { t as runAgentTurn } from "./unified-runner-CzxCpDUC.js";
5
5
  import "./registry-ClO_zVv-.js";
6
6
  import { t as createSubsystemLogger } from "./subsystem-zqierDLj.js";
7
7
  import "./auth-profiles-HXq6s5EV.js";
@@ -55,8 +55,8 @@ import "./send-DNJPCiwf.js";
55
55
  import "./model-DIO3dH08.js";
56
56
  import "./pi-model-discovery-CXXH7biP.js";
57
57
  import "./reply-prefix-DnXliXio.js";
58
- import "./memory-cli-BFgNzW3D.js";
59
- import "./manager-DdfJ-DW0.js";
58
+ import "./memory-cli-LV7-59SK.js";
59
+ import "./manager-_IXN4-V8.js";
60
60
  import "./gemini-auth-D7Wqp9Ma.js";
61
61
  import "./retry-DYICeae5.js";
62
62
  import "./sqlite-CRogFEk1.js";
@@ -54,8 +54,8 @@ import { A as extractTelegramLocation, B as normalizeAllowFromWithStore$1, C as
54
54
  import { a as buildModelAliasLines, n as resolveModel } from "./model-DIO3dH08.js";
55
55
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-CXXH7biP.js";
56
56
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-DnXliXio.js";
57
- import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-BFgNzW3D.js";
58
- import { i as resolveMemorySearchConfig } from "./manager-DdfJ-DW0.js";
57
+ import { i as resolveMemoryBackendConfig, n as registerMemoryCli, r as getMemorySearchManager } from "./memory-cli-LV7-59SK.js";
58
+ import { i as resolveMemorySearchConfig } from "./manager-_IXN4-V8.js";
59
59
  import { f as runTasksWithConcurrency } from "./internal-7ow_5D0m.js";
60
60
  import { n as retryAsync } from "./retry-DYICeae5.js";
61
61
  import { c as imageResultFromFile, d as readNumberParam, f as readReactionParams, h as readStringParam, l as jsonResult, m as readStringOrNumberParam, n as missingTargetError, o as createActionGate, p as readStringArrayParam, r as unknownTargetError, s as imageResult, t as ambiguousTargetError, u as parseAvailableTags } from "./target-errors-T0R2wR5q.js";
@@ -6836,6 +6836,11 @@ function buildAgentSystemPrompt(params) {
6836
6836
  "- Never narrate or quote tool output you did not actually receive from a real tool result. Writing \"I ran X and got Y\" without a corresponding tool invocation is fabrication and breaks user trust.",
6837
6837
  "- For factual local-system lookups (hostname, file contents, process state, env vars, current dir, system info), the answer comes from invoking the appropriate tool — not from priors. Always invoke.",
6838
6838
  "",
6839
+ "Example — when the user explicitly names a tool:",
6840
+ " User: \"Use the exec tool to run: echo hi\"",
6841
+ " Correct: call exec with command=\"echo hi\", then summarise the actual stdout you received.",
6842
+ " Wrong: emit \"hi\" as text without calling exec — that's fabrication.",
6843
+ "",
6839
6844
  ...compactMode ? [] : [
6840
6845
  "## Tool Call Style",
6841
6846
  "Default: do not narrate routine, low-risk tool calls (just call the tool).",
@@ -48486,7 +48491,7 @@ function setCliSessionId(entry, provider, sessionId) {
48486
48491
  function createDefaultDeps() {
48487
48492
  return {
48488
48493
  sendMessageWhatsApp: async (...args) => {
48489
- const { sendMessageWhatsApp } = await import("./web-DNwg0ZOA.js");
48494
+ const { sendMessageWhatsApp } = await import("./web-DJqpgWuK.js");
48490
48495
  return await sendMessageWhatsApp(...args);
48491
48496
  },
48492
48497
  sendMessageTelegram: async (...args) => {
@@ -63800,7 +63805,7 @@ function loadWebLoginQr() {
63800
63805
  return webLoginQrPromise;
63801
63806
  }
63802
63807
  function loadWebChannel() {
63803
- webChannelPromise ??= import("./web-DNwg0ZOA.js");
63808
+ webChannelPromise ??= import("./web-DJqpgWuK.js");
63804
63809
  return webChannelPromise;
63805
63810
  }
63806
63811
  function loadWhatsAppActions() {
@@ -68281,6 +68286,91 @@ function createOutputNormalizer(profile, modelId) {
68281
68286
  //#endregion
68282
68287
  //#region src/agents/model-aware-stream.ts
68283
68288
  /**
68289
+ * Match imperative tool requests:
68290
+ * "Use the exec tool to run X"
68291
+ * "use exec to ..."
68292
+ * "Please invoke the read tool"
68293
+ * "call memory_search with ..."
68294
+ *
68295
+ * Anchored to start-of-string, start-of-line, or after a closing-bracket
68296
+ * delimiter `] ` (covers Symi's `[Thu 2026-04-30 20:48 EDT] ` timestamp
68297
+ * envelope, the `[Outlook 365] ` plugin banner, and similar prefixes that
68298
+ * gateway middleware can inject before the user's actual prompt — verified
68299
+ * live: `chat.send` from Glass UI ships content like
68300
+ *
68301
+ * Conversation info (untrusted metadata):
68302
+ * ```json
68303
+ * { "message_id": "...", ... }
68304
+ * ```
68305
+ *
68306
+ * [Thu 2026-04-30 20:48 EDT] Use the exec tool to run: hostname
68307
+ *
68308
+ * so the `Use` is preceded by `] ` not by `\n` or `^`).
68309
+ *
68310
+ * Verb list is conservative (use/invoke/call/please-{use,call}) — pure
68311
+ * imperative verbs that read unambiguously as "do this for me." Tool name
68312
+ * must match EXPLICIT_TOOL_NAMES exactly to keep "use poetic language" /
68313
+ * "use clear writing" / etc. from triggering.
68314
+ */
68315
+ const EXPLICIT_TOOL_REQUEST_PATTERN = new RegExp(String.raw`(?:^|\n|\]\s)\s*(?:please\s+)?(?:use|invoke|call)\s+(?:the\s+)?(?:` + [
68316
+ "exec",
68317
+ "bash",
68318
+ "read",
68319
+ "write",
68320
+ "edit",
68321
+ "patch",
68322
+ "web_search",
68323
+ "web_fetch",
68324
+ "browser",
68325
+ "browser_navigate",
68326
+ "browser_snapshot",
68327
+ "browser_click",
68328
+ "browser_type",
68329
+ "memory_search",
68330
+ "memory_get",
68331
+ "memory_pin",
68332
+ "memory_unpin",
68333
+ "spawn_agent",
68334
+ "message",
68335
+ "task_list",
68336
+ "task_cancel",
68337
+ "cron",
68338
+ "fetch",
68339
+ "skill_search"
68340
+ ].map((n) => n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|") + String.raw`)(?:\s+tool)?\b`, "i");
68341
+ /**
68342
+ * Extract the user-role text ONLY when it's the LAST message in the
68343
+ * conversation (i.e., we're at the start of a fresh turn, not in the
68344
+ * middle of an agent loop). Returns "" when:
68345
+ * - messages isn't an array
68346
+ * - the last message isn't user-role (= we're after a tool_call /
68347
+ * tool_result and the model is continuing — forcing tool_choice
68348
+ * "required" here would loop the agent: model must call a tool →
68349
+ * tool result → model must call ANOTHER tool → tool result → ...)
68350
+ *
68351
+ * Verified live on 3.0.7 dev: with the original "find any prior user
68352
+ * message" implementation, every agent-loop iteration saw the same
68353
+ * matching userText and re-forced tool_choice="required", spinning the
68354
+ * model in an infinite tool-call loop and timing out at 180s.
68355
+ */
68356
+ function extractLastUserText(messages) {
68357
+ if (!Array.isArray(messages) || messages.length === 0) return "";
68358
+ const last = messages[messages.length - 1];
68359
+ if (!last || typeof last !== "object") return "";
68360
+ const msg = last;
68361
+ if (msg.role !== "user") return "";
68362
+ if (typeof msg.content === "string") return msg.content;
68363
+ if (Array.isArray(msg.content)) {
68364
+ const parts = [];
68365
+ for (const part of msg.content) if (part && typeof part === "object") {
68366
+ const block = part;
68367
+ if (block.type === "text" && typeof block.text === "string") parts.push(block.text);
68368
+ }
68369
+ return parts.join("\n");
68370
+ }
68371
+ return "";
68372
+ }
68373
+ /**
68284
68374
  * Create a single stream function wrapper that handles all provider-specific
68285
68375
  * param injection via one onPayload hook.
68286
68376
  *
@@ -68328,6 +68418,10 @@ function createModelAwareStreamFn(opts) {
68328
68418
  delete p.store;
68329
68419
  }
68330
68420
  if (Array.isArray(p.tools) && p.tools.length > 0 && p.tool_choice === void 0) p.tool_choice = "auto";
68421
+ if (Array.isArray(p.tools) && p.tools.length > 0 && p.tool_choice === "auto") {
68422
+ const userText = extractLastUserText(p.messages);
68423
+ if (userText && EXPLICIT_TOOL_REQUEST_PATTERN.test(userText)) p.tool_choice = "required";
68424
+ }
68331
68425
  }
68332
68426
  callerOnPayload?.(payload);
68333
68427
  };