@lawpath-tech/openclaw 2026.2.21-19 → 2026.2.21-20

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 (119) hide show
  1. package/dist/{agents-C9ij96eI.js → agents-C83RLKX2.js} +4 -4
  2. package/dist/{agents.config-PFAfbBID.js → agents.config-BVjazvnK.js} +1 -1
  3. package/dist/{agents.config-CBvMKGLh.js → agents.config-dnXbFv5H.js} +1 -1
  4. package/dist/{audio-preflight-omzaYFGD.js → audio-preflight-CLqoZYgI.js} +4 -4
  5. package/dist/{audio-preflight-CODznzqu.js → audio-preflight-Da7vejCH.js} +4 -4
  6. package/dist/{auth-choice-DH2T1E9c.js → auth-choice-BJNaxS-L.js} +1 -1
  7. package/dist/{auth-choice-CLiY8PdF.js → auth-choice-Hb6530su.js} +1 -1
  8. package/dist/{banner-CqQBBjKH.js → banner-dFAx4eE_.js} +1 -1
  9. package/dist/build-info.json +3 -3
  10. package/dist/bundled/boot-md/handler.js +6 -6
  11. package/dist/bundled/session-memory/handler.js +6 -6
  12. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  13. package/dist/{channel-options-e7Z9Smf2.js → channel-options--M8F-DHl.js} +1 -1
  14. package/dist/{channel-options-CLS27y1A.js → channel-options-D0Qjq83D.js} +1 -1
  15. package/dist/{channel-web-DHMbpU2p.js → channel-web-D8hSmcPF.js} +1 -1
  16. package/dist/{channels-cli-BDHLWbaU.js → channels-cli-6uwOEBM-.js} +4 -4
  17. package/dist/{channels-cli-CDwQerVi.js → channels-cli-BtZHPcBX.js} +4 -4
  18. package/dist/{chrome-BAv9fEiv.js → chrome-Bqbv_ZSj.js} +7 -7
  19. package/dist/{chrome-lRUqqgSD.js → chrome-CZuniMYN.js} +7 -7
  20. package/dist/{cli-BGJFLB0I.js → cli-CIImVBCM.js} +1 -1
  21. package/dist/{cli-C1nypCKP.js → cli-CijjdR37.js} +1 -1
  22. package/dist/{command-registry-pGuORBuB.js → command-registry-BtDC5Ll-.js} +9 -9
  23. package/dist/{completion-cli-Bf-Ojq_a.js → completion-cli-Bw5nZmTm.js} +2 -2
  24. package/dist/{completion-cli-C79-bpAx.js → completion-cli-CI6LWHg3.js} +1 -1
  25. package/dist/{config-cli-DLdH6zIF.js → config-cli-CgjgjWri.js} +1 -1
  26. package/dist/{config-cli-BcNHb4_E.js → config-cli-Dc0TQ1yE.js} +1 -1
  27. package/dist/{configure-BSt9S0yk.js → configure-CGqsSqXB.js} +3 -3
  28. package/dist/{configure-h1d7nrgR.js → configure-GUYUjx8A.js} +3 -3
  29. package/dist/{deliver-B2d2N8OJ.js → deliver-0ThKlzQo.js} +1 -1
  30. package/dist/{deliver-CLJRPnfx.js → deliver-CKH_FhS0.js} +1 -1
  31. package/dist/{doctor-completion-BB1f594d.js → doctor-completion-DgPc1rDZ.js} +1 -1
  32. package/dist/{doctor-completion-deY10x7w.js → doctor-completion-DipoVPSi.js} +1 -1
  33. package/dist/entry.js +1 -1
  34. package/dist/extensionAPI.js +6 -6
  35. package/dist/{gateway-cli-IziQis2t.js → gateway-cli-Ds3oN72Y.js} +8 -8
  36. package/dist/{gateway-cli-B-XwzYp2.js → gateway-cli-DuMINk2B.js} +8 -8
  37. package/dist/{health-DMrTgW8V.js → health-DQjqH1zU.js} +1 -1
  38. package/dist/{health-UmuJyu1Q.js → health-Dg0bAIKS.js} +1 -1
  39. package/dist/{hooks-cli-BparoMpt.js → hooks-cli-CEtCwdza.js} +2 -2
  40. package/dist/{hooks-cli-B6WCYLyG.js → hooks-cli-Cac2Ru8r.js} +2 -2
  41. package/dist/{image--DDZnw-F.js → image-88q3KE-C.js} +1 -1
  42. package/dist/{image-Ci28h-op.js → image-CxPjVob-.js} +1 -1
  43. package/dist/index.js +6 -6
  44. package/dist/llm-slug-generator.js +6 -6
  45. package/dist/{models-nhERae29.js → models-DnhANpnd.js} +2 -2
  46. package/dist/{models-cli-bfKNgoHD.js → models-cli-03noBf8W.js} +3 -3
  47. package/dist/{models-cli-BnbeEOCU.js → models-cli-CaP_rt4y.js} +2 -2
  48. package/dist/{onboard-D_VxXTXD.js → onboard-BMc-yUv5.js} +2 -2
  49. package/dist/{onboard-C3pJ0NU-.js → onboard-BZg2c27h.js} +2 -2
  50. package/dist/{onboard-channels-CyeyvIfw.js → onboard-channels-Lt2gG1e2.js} +1 -1
  51. package/dist/{onboard-channels-YvwszRaQ.js → onboard-channels-O6KvizE3.js} +1 -1
  52. package/dist/{onboarding-0zwx3Yv7.js → onboarding-CTgBlanm.js} +3 -3
  53. package/dist/{onboarding-D0_Q5m2W.js → onboarding-G28sv5Ms.js} +3 -3
  54. package/dist/{onboarding.finalize-CYb0_Q0z.js → onboarding.finalize-Cpt9Ymcn.js} +5 -5
  55. package/dist/{onboarding.finalize-CVeI23_g.js → onboarding.finalize-D2sylHDB.js} +6 -6
  56. package/dist/{pi-embedded-D7qD6fo-.js → pi-embedded-Dz24QZz9.js} +96 -17
  57. package/dist/{pi-embedded-CwQsXrVT.js → pi-embedded-ZvazjIyF.js} +96 -17
  58. package/dist/{pi-embedded-helpers-Cd0S0WfR.js → pi-embedded-helpers-B0Kht0I2.js} +4 -4
  59. package/dist/{pi-embedded-helpers-Ll4Lztu1.js → pi-embedded-helpers-CSE0v99A.js} +4 -4
  60. package/dist/{plugin-registry-83ThmVHf.js → plugin-registry-1pF4_jNl.js} +1 -1
  61. package/dist/{plugin-registry-D57lc9ob.js → plugin-registry-CHOacv01.js} +1 -1
  62. package/dist/plugin-sdk/{channel-web-XYtgc8aq.js → channel-web-BHNS_E7F.js} +1 -1
  63. package/dist/plugin-sdk/index.js +2 -2
  64. package/dist/plugin-sdk/plugins/runtime/types.d.ts +2 -0
  65. package/dist/plugin-sdk/{reply-BSOpvBX4.js → reply-DEepmBkT.js} +82 -3
  66. package/dist/plugin-sdk/tts/tts-core.d.ts +15 -0
  67. package/dist/plugin-sdk/tts/tts.d.ts +16 -0
  68. package/dist/plugin-sdk/{web-DiLYLsml.js → web-DBo-6RyH.js} +2 -2
  69. package/dist/{plugins-cli-BymsOcmR.js → plugins-cli-CflNTqmB.js} +2 -2
  70. package/dist/{plugins-cli-DOWA2F0z.js → plugins-cli-DW0TLzrq.js} +2 -2
  71. package/dist/{program-T05XIetU.js → program-DUkjf6lq.js} +7 -7
  72. package/dist/{program-context-CDmctW1L.js → program-context-C0-LzXoV.js} +17 -17
  73. package/dist/{prompt-select-styled-cR4-U64b.js → prompt-select-styled-CQUE1vow.js} +4 -4
  74. package/dist/{prompt-select-styled-BbzQhWF7.js → prompt-select-styled-CWNxdPrL.js} +4 -4
  75. package/dist/{provider-auth-helpers-BbnDoytN.js → provider-auth-helpers-D39L7fZC.js} +1 -1
  76. package/dist/{provider-auth-helpers-C4RNIRyy.js → provider-auth-helpers-bYUBBkmL.js} +1 -1
  77. package/dist/{push-apns-Dli4pG4y.js → push-apns-DGIqfAg5.js} +1 -1
  78. package/dist/{push-apns-DUeNpqyF.js → push-apns-Qfohz-Hs.js} +1 -1
  79. package/dist/{pw-ai-KrN0mqVH.js → pw-ai-D-_aGzdQ.js} +1 -1
  80. package/dist/{pw-ai-C-kqYO4L.js → pw-ai-S3cpSYOy.js} +1 -1
  81. package/dist/{register.agent-aY_6enDc.js → register.agent-BEM0_4uG.js} +5 -5
  82. package/dist/{register.agent-DNAtU5WP.js → register.agent-WQgVmACk.js} +6 -6
  83. package/dist/{register.configure-CwlwOMZ3.js → register.configure-CCpFmFPt.js} +6 -6
  84. package/dist/{register.configure-C_n9kIWJ.js → register.configure-CdW3aECy.js} +6 -6
  85. package/dist/{register.maintenance-DC40nnCm.js → register.maintenance-B8RZLSOe.js} +8 -8
  86. package/dist/{register.maintenance-Dddndcoo.js → register.maintenance-CM3QEdFz.js} +7 -7
  87. package/dist/{register.message-DiR6desB.js → register.message-BRLYHuVS.js} +2 -2
  88. package/dist/{register.message-CpEf0b15.js → register.message-XYm9NyDT.js} +2 -2
  89. package/dist/{register.onboard-bOeA39xj.js → register.onboard-BzAJbRpP.js} +4 -4
  90. package/dist/{register.onboard-VzVmqpEA.js → register.onboard-EwGHFUsd.js} +4 -4
  91. package/dist/{register.setup-CNLQzxl8.js → register.setup-33shhZje.js} +4 -4
  92. package/dist/{register.setup-D6iO5Xqa.js → register.setup-DpdZyiMv.js} +4 -4
  93. package/dist/{register.status-health-sessions-CoiaeduR.js → register.status-health-sessions-C8-iqepo.js} +3 -3
  94. package/dist/{register.status-health-sessions-BtJeTZnN.js → register.status-health-sessions-CK4f2nj_.js} +3 -3
  95. package/dist/{register.subclis-CFTYYdAQ.js → register.subclis-Mn68G5tp.js} +9 -9
  96. package/dist/{reply-Bv-RvRzs.js → reply-DuVUTFfT.js} +82 -3
  97. package/dist/{run-main-EzFOCEdp.js → run-main-CNB3qjRM.js} +14 -14
  98. package/dist/{runner-ChBxge-W.js → runner-D1eXJZ8T.js} +1 -1
  99. package/dist/{runner-Dq-qfrq7.js → runner-a43IsYad.js} +1 -1
  100. package/dist/{server-node-events-B9TqPvCI.js → server-node-events-B3o3P600.js} +2 -2
  101. package/dist/{server-node-events-syk21TN6.js → server-node-events-BPFwUGbS.js} +2 -2
  102. package/dist/{session-dirs-BAcQuXpY.js → session-dirs-Cw2efkey.js} +1 -1
  103. package/dist/{session-dirs-t0YpmrIL.js → session-dirs-DsU4kvIK.js} +1 -1
  104. package/dist/{status-keCWmejk.js → status-BSJIuIlN.js} +1 -1
  105. package/dist/{status-05251w21.js → status-BhHpKHQP.js} +2 -2
  106. package/dist/{status-BqDiXxwL.js → status-C2PvVLaW.js} +1 -1
  107. package/dist/{status-B8UVm7P3.js → status-CLKmcFCC.js} +2 -2
  108. package/dist/{subagent-registry-Lm4ps45z.js → subagent-registry-Da0a_Vka.js} +82 -3
  109. package/dist/{update-cli-BTF6TXGD.js → update-cli-BW3q5tFm.js} +7 -7
  110. package/dist/{update-cli-aW6jVJIJ.js → update-cli-D4EUMrX6.js} +8 -8
  111. package/dist/{web-BYZfljIx.js → web-BTbIFuWM.js} +2 -2
  112. package/dist/{web-BjxYv-hA.js → web-C7TQSVU0.js} +1 -1
  113. package/dist/{web-DPHo2cWX.js → web-CVSol55V.js} +6 -6
  114. package/dist/{web-Cs0IP-ZO.js → web-Y49Dumye.js} +6 -6
  115. package/extensions/voice-call/src/providers/twilio.ts +31 -13
  116. package/extensions/voice-call/src/response-generator.ts +3 -3
  117. package/extensions/voice-call/src/telephony-audio.ts +54 -0
  118. package/extensions/voice-call/src/telephony-tts.ts +40 -2
  119. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import "./paths-B4BZAPZh.js";
2
2
  import { h as pathExists, y as resolveUserPath } from "./utils-BlC2Fskb.js";
3
3
  import "./thinking-EAliFiVK.js";
4
- import "./reply-Bv-RvRzs.js";
4
+ import "./reply-DuVUTFfT.js";
5
5
  import "./registry-Dygi7Azw.js";
6
6
  import { p as restoreTerminalState } from "./subsystem-8bY95KEB.js";
7
7
  import "./exec-BmMB8-Xs.js";
@@ -103,16 +103,16 @@ import "./stagger-B6VQyn1F.js";
103
103
  import "./channel-selection-ZfFyXtQ1.js";
104
104
  import "./pi-tools.policy-DZSlTC8Z.js";
105
105
  import "./runtime-guard-BYGIYhEa.js";
106
- import "./program-context-CDmctW1L.js";
106
+ import "./program-context-C0-LzXoV.js";
107
107
  import "./note-DRZSQe0n.js";
108
- import { r as installCompletion } from "./completion-cli-C79-bpAx.js";
108
+ import { r as installCompletion } from "./completion-cli-CI6LWHg3.js";
109
109
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-CcJb-H5N.js";
110
110
  import { r as isSystemdUserServiceAvailable } from "./systemd-Dq5fANx0.js";
111
111
  import { t as resolveGatewayService } from "./service-CJGWS46r.js";
112
- import { r as healthCommand } from "./health-DMrTgW8V.js";
112
+ import { r as healthCommand } from "./health-DQjqH1zU.js";
113
113
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-d_j0Pdnj.js";
114
114
  import { t as formatHealthCheckFailure } from "./health-format-D6i_RyWd.js";
115
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-BB1f594d.js";
115
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DgPc1rDZ.js";
116
116
  import { t as runTui } from "./tui-D0O7-y68.js";
117
117
  import os from "node:os";
118
118
  import path from "node:path";
@@ -14,7 +14,7 @@ import "./client-B5QR5Bi9.js";
14
14
  import "./call-D6ajQjvV.js";
15
15
  import "./message-channel-CVHJDItx.js";
16
16
  import "./pairing-token-Byh6drgn.js";
17
- import "./subagent-registry-Lm4ps45z.js";
17
+ import "./subagent-registry-Da0a_Vka.js";
18
18
  import "./sessions-BJnLP6OJ.js";
19
19
  import "./tokens-ANnYrShl.js";
20
20
  import "./plugins-DStDwRz0.js";
@@ -99,18 +99,18 @@ import "./prompt-style-DwCXob2h.js";
99
99
  import "./pairing-labels-D2jdEFFZ.js";
100
100
  import "./pi-tools.policy-BQwEWAuL.js";
101
101
  import "./note-DDecZomM.js";
102
- import "./register.subclis-CFTYYdAQ.js";
103
- import "./command-registry-pGuORBuB.js";
102
+ import "./register.subclis-Mn68G5tp.js";
103
+ import "./command-registry-BtDC5Ll-.js";
104
104
  import "./program-context-5q-A0wbP.js";
105
- import { r as installCompletion } from "./completion-cli-Bf-Ojq_a.js";
105
+ import { r as installCompletion } from "./completion-cli-Bw5nZmTm.js";
106
106
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-Rig_aj9Q.js";
107
107
  import "./runtime-guard-Cs_ClFhP.js";
108
108
  import { r as isSystemdUserServiceAvailable } from "./systemd-BrybH4HV.js";
109
109
  import { t as resolveGatewayService } from "./service-DcFI40_W.js";
110
- import { r as healthCommand } from "./health-UmuJyu1Q.js";
110
+ import { r as healthCommand } from "./health-Dg0bAIKS.js";
111
111
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Yp3N6NZ_.js";
112
112
  import { t as formatHealthCheckFailure } from "./health-format-DkjSgkDx.js";
113
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-deY10x7w.js";
113
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DipoVPSi.js";
114
114
  import { t as runTui } from "./tui-D9Hy9ggA.js";
115
115
  import os from "node:os";
116
116
  import path from "node:path";
@@ -13,7 +13,7 @@ import { t as parseBooleanValue$1 } from "./boolean-B8-BqKGQ.js";
13
13
  import { n as resolveCliName, r as isTruthyEnvValue, t as formatCliCommand } from "./command-format-BOHIfoCX.js";
14
14
  import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-Byt_wJDK.js";
15
15
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-BEFzSOoD.js";
16
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-CLJRPnfx.js";
16
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-CKH_FhS0.js";
17
17
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-DriDPU6M.js";
18
18
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-Bxo4UHOL.js";
19
19
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-CQT5u65w.js";
@@ -23,10 +23,10 @@ import { A as normalizeProviderId, C as buildAllowedModelSet, D as isCliProvider
23
23
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-Dgb9dAHW.js";
24
24
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-DaNAekda.js";
25
25
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-CHYSjmbr.js";
26
- import { $ as normalizeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, G as updateLastRoute, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as isCacheEnabled, Jt as ensureSessionHeader, K as updateSessionStore, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as mergeDeliveryContext, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as deliveryContextFromSession, Xt as resolveBootstrapTotalMaxChars, Y as resolveCacheTtlMs$1, Yt as resolveBootstrapMaxChars, Z as deliveryContextKey, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as resolveFreshSessionTotalTokens, a as isMessagingToolDuplicateNormalized, at as extractToolCallNames, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as hasInterSessionUserProvenance, d as isAntigravityClaude, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as isGoogleModelApi, ft as resolveChannelResetConfig, g as formatBillingErrorMessage, gt as DEFAULT_RESET_TRIGGERS, h as formatAssistantErrorText, ht as resolveThreadFlag, it as countToolResults, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as normalizeInputProvenance, m as classifyFailoverReason, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as normalizeTextForComparison, ot as INPUT_PROVENANCE_KIND_VALUES, p as BILLING_ERROR_USER_MESSAGE, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as sanitizeSessionMessagesImages, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as downgradeOpenAIReasoningBlocks, ut as resolveSessionKey, v as getApiErrorPayloadFingerprint, vt as canonicalizeMainSessionAlias, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-Ll4Lztu1.js";
26
+ import { $ as normalizeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, G as updateLastRoute, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as isCacheEnabled, Jt as ensureSessionHeader, K as updateSessionStore, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as mergeDeliveryContext, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as deliveryContextFromSession, Xt as resolveBootstrapTotalMaxChars, Y as resolveCacheTtlMs$1, Yt as resolveBootstrapMaxChars, Z as deliveryContextKey, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as resolveFreshSessionTotalTokens, a as isMessagingToolDuplicateNormalized, at as extractToolCallNames, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as hasInterSessionUserProvenance, d as isAntigravityClaude, dt as evaluateSessionFreshness, et as normalizeSessionDeliveryFields, f as isGoogleModelApi, ft as resolveChannelResetConfig, g as formatBillingErrorMessage, gt as DEFAULT_RESET_TRIGGERS, h as formatAssistantErrorText, ht as resolveThreadFlag, it as countToolResults, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as normalizeInputProvenance, m as classifyFailoverReason, mt as resolveSessionResetType, n as validateGeminiTurns, nt as archiveSessionTranscripts, o as normalizeTextForComparison, ot as INPUT_PROVENANCE_KIND_VALUES, p as BILLING_ERROR_USER_MESSAGE, pt as resolveSessionResetPolicy, q as updateSessionStoreEntry, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as capArrayByJsonBytes, s as sanitizeSessionMessagesImages, st as applyInputProvenanceToUserMessage, t as validateAnthropicTurns, tt as normalizeAccountId$3, u as downgradeOpenAIReasoningBlocks, ut as resolveSessionKey, v as getApiErrorPayloadFingerprint, vt as canonicalizeMainSessionAlias, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-CSE0v99A.js";
27
27
  import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-Du_-inxH.js";
28
28
  import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, i as safeStatSync, n as discoverOpenClawPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-Dhk4A5vb.js";
29
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-BAv9fEiv.js";
29
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-Bqbv_ZSj.js";
30
30
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-DSZuhFx9.js";
31
31
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-BoQgnc8X.js";
32
32
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-BTMDZjHT.js";
@@ -37,7 +37,7 @@ import { t as resolveIMessageAccount } from "./accounts-DFrH9IVU.js";
37
37
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-BEAbheM8.js";
38
38
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-DDYvbmRV.js";
39
39
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-C1rdDr34.js";
40
- import { S as ensureOpenClawModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-Ci28h-op.js";
40
+ import { S as ensureOpenClawModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-CxPjVob-.js";
41
41
  import { a as resolveAgentIdentity, i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-DZrS3Kf7.js";
42
42
  import { n as resolveMemorySearchConfig } from "./manager-D7SRrHxT.js";
43
43
  import { d as listMemoryFiles, f as normalizeExtraMemoryPaths, g as runTasksWithConcurrency } from "./sqlite-C3XxSzBN.js";
@@ -51,7 +51,7 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-DJPm0a4k.js";
51
51
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-BzlB3qtZ.js";
52
52
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-CqyVDpti.js";
53
53
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-BlHX0H3E.js";
54
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-ChBxge-W.js";
54
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-D1eXJZ8T.js";
55
55
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-DtI0mtzx.js";
56
56
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-Bup9wS1y.js";
57
57
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-BgsTqLau.js";
@@ -81,7 +81,7 @@ import { EdgeTTS } from "node-edge-tts";
81
81
  import AjvPkg from "ajv";
82
82
  import { createServer } from "node:http";
83
83
  import { ProxyAgent, fetch as fetch$1 } from "undici";
84
- import WebSocket$1, { WebSocket } from "ws";
84
+ import WebSocket, { WebSocket as WebSocket$1 } from "ws";
85
85
  import { Buffer as Buffer$1 } from "node:buffer";
86
86
  import { createJiti } from "jiti";
87
87
  import { Type } from "@sinclair/typebox";
@@ -2292,6 +2292,43 @@ async function openaiTTS(params) {
2292
2292
  clearTimeout(timeout);
2293
2293
  }
2294
2294
  }
2295
+ /**
2296
+ * Streaming variant of openaiTTS. Returns the response body as a ReadableStream
2297
+ * so callers can process PCM chunks as they arrive instead of buffering the entire response.
2298
+ */
2299
+ async function openaiTTSStream(params) {
2300
+ const { text, apiKey, model, voice, responseFormat, timeoutMs } = params;
2301
+ if (!isValidOpenAIModel(model)) throw new Error(`Invalid model: ${model}`);
2302
+ if (!isValidOpenAIVoice(voice)) throw new Error(`Invalid voice: ${voice}`);
2303
+ const controller = new AbortController();
2304
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
2305
+ const response = await fetch(`${getOpenAITtsBaseUrl()}/audio/speech`, {
2306
+ method: "POST",
2307
+ headers: {
2308
+ Authorization: `Bearer ${apiKey}`,
2309
+ "Content-Type": "application/json"
2310
+ },
2311
+ body: JSON.stringify({
2312
+ model,
2313
+ input: text,
2314
+ voice,
2315
+ response_format: responseFormat
2316
+ }),
2317
+ signal: controller.signal
2318
+ });
2319
+ if (!response.ok) {
2320
+ clearTimeout(timeout);
2321
+ throw new Error(`OpenAI TTS API error (${response.status})`);
2322
+ }
2323
+ if (!response.body) {
2324
+ clearTimeout(timeout);
2325
+ throw new Error("OpenAI TTS response has no body");
2326
+ }
2327
+ return {
2328
+ body: response.body,
2329
+ cleanup: () => clearTimeout(timeout)
2330
+ };
2331
+ }
2295
2332
  function inferEdgeExtension(outputFormat) {
2296
2333
  const normalized = outputFormat.toLowerCase();
2297
2334
  if (normalized.includes("webm")) return ".webm";
@@ -2817,6 +2854,45 @@ async function textToSpeechTelephony(params) {
2817
2854
  error: `TTS conversion failed: ${errors.join("; ") || "no providers available"}`
2818
2855
  };
2819
2856
  }
2857
+ /**
2858
+ * Streaming variant of textToSpeechTelephony.
2859
+ * Returns a ReadableStream of PCM audio chunks for incremental processing.
2860
+ * Only supports OpenAI provider (PCM format required for streaming).
2861
+ */
2862
+ async function textToSpeechTelephonyStream(params) {
2863
+ const config = resolveTtsConfig(params.cfg);
2864
+ if ((config.provider ?? "openai") !== "openai") return {
2865
+ success: false,
2866
+ error: "Streaming TTS only supported for OpenAI"
2867
+ };
2868
+ const apiKey = resolveTtsApiKey(config, "openai");
2869
+ if (!apiKey) return {
2870
+ success: false,
2871
+ error: "No OpenAI API key for streaming TTS"
2872
+ };
2873
+ try {
2874
+ const output = TELEPHONY_OUTPUT.openai;
2875
+ const result = await openaiTTSStream({
2876
+ text: params.text,
2877
+ apiKey,
2878
+ model: config.openai.model,
2879
+ voice: config.openai.voice,
2880
+ responseFormat: "pcm",
2881
+ timeoutMs: config.timeoutMs
2882
+ });
2883
+ return {
2884
+ success: true,
2885
+ stream: result.body,
2886
+ sampleRate: output.sampleRate,
2887
+ cleanup: result.cleanup
2888
+ };
2889
+ } catch (err) {
2890
+ return {
2891
+ success: false,
2892
+ error: err instanceof Error ? err.message : String(err)
2893
+ };
2894
+ }
2895
+ }
2820
2896
  async function maybeApplyTtsToPayload(params) {
2821
2897
  const config = resolveTtsConfig(params.cfg);
2822
2898
  const prefsPath = resolveTtsPrefsPath(config);
@@ -5715,7 +5791,7 @@ var GatewayClient = class {
5715
5791
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
5716
5792
  });
5717
5793
  }
5718
- this.ws = new WebSocket(url, wsOptions);
5794
+ this.ws = new WebSocket$1(url, wsOptions);
5719
5795
  this.ws.on("open", () => {
5720
5796
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
5721
5797
  const tlsError = this.validateTlsFingerprint();
@@ -5934,7 +6010,7 @@ var GatewayClient = class {
5934
6010
  return null;
5935
6011
  }
5936
6012
  async request(method, params, opts) {
5937
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
6013
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
5938
6014
  const id = randomUUID();
5939
6015
  const frame = {
5940
6016
  type: "req",
@@ -7198,7 +7274,7 @@ async function routeReply(params) {
7198
7274
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7199
7275
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7200
7276
  try {
7201
- const { deliverOutboundPayloads } = await import("./deliver-CLJRPnfx.js").then((n) => n.n);
7277
+ const { deliverOutboundPayloads } = await import("./deliver-CKH_FhS0.js").then((n) => n.n);
7202
7278
  return {
7203
7279
  ok: true,
7204
7280
  messageId: (await deliverOutboundPayloads({
@@ -41571,7 +41647,7 @@ async function deliverSessionMaintenanceWarning(params) {
41571
41647
  return;
41572
41648
  }
41573
41649
  try {
41574
- const { deliverOutboundPayloads } = await import("./deliver-CLJRPnfx.js").then((n) => n.n);
41650
+ const { deliverOutboundPayloads } = await import("./deliver-CKH_FhS0.js").then((n) => n.n);
41575
41651
  await deliverOutboundPayloads({
41576
41652
  cfg: params.cfg,
41577
41653
  channel,
@@ -45018,7 +45094,7 @@ async function describeStickerImage(params) {
45018
45094
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
45019
45095
  try {
45020
45096
  const buffer = await fs.readFile(imagePath);
45021
- const { describeImageWithModel } = await import("./image-Ci28h-op.js").then((n) => n.n);
45097
+ const { describeImageWithModel } = await import("./image-CxPjVob-.js").then((n) => n.n);
45022
45098
  return (await describeImageWithModel({
45023
45099
  buffer,
45024
45100
  fileName: "sticker.webp",
@@ -47479,7 +47555,7 @@ async function preflightDiscordMessage(params) {
47479
47555
  let preflightTranscript;
47480
47556
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
47481
47557
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
47482
- const { transcribeFirstAudio } = await import("./audio-preflight-omzaYFGD.js");
47558
+ const { transcribeFirstAudio } = await import("./audio-preflight-CLqoZYgI.js");
47483
47559
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
47484
47560
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
47485
47561
  ctx: {
@@ -51485,7 +51561,7 @@ function isVoiceChannelType(type) {
51485
51561
  function createDefaultDeps() {
51486
51562
  return {
51487
51563
  sendMessageWhatsApp: async (...args) => {
51488
- const { sendMessageWhatsApp } = await import("./web-Cs0IP-ZO.js");
51564
+ const { sendMessageWhatsApp } = await import("./web-Y49Dumye.js");
51489
51565
  return await sendMessageWhatsApp(...args);
51490
51566
  },
51491
51567
  sendMessageTelegram: async (...args) => {
@@ -54398,7 +54474,7 @@ function createDiscordGatewayPlugin(params) {
54398
54474
  super(options);
54399
54475
  }
54400
54476
  createWebSocket(url) {
54401
- return new WebSocket$1(url, { agent });
54477
+ return new WebSocket(url, { agent });
54402
54478
  }
54403
54479
  }
54404
54480
  return new ProxyGatewayPlugin();
@@ -64671,7 +64747,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
64671
64747
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
64672
64748
  let preflightTranscript;
64673
64749
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
64674
- const { transcribeFirstAudio } = await import("./audio-preflight-omzaYFGD.js");
64750
+ const { transcribeFirstAudio } = await import("./audio-preflight-CLqoZYgI.js");
64675
64751
  preflightTranscript = await transcribeFirstAudio({
64676
64752
  ctx: {
64677
64753
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -66828,7 +66904,7 @@ function loadWebLoginQr() {
66828
66904
  return webLoginQrPromise;
66829
66905
  }
66830
66906
  function loadWebChannel() {
66831
- webChannelPromise ??= import("./web-Cs0IP-ZO.js");
66907
+ webChannelPromise ??= import("./web-Y49Dumye.js");
66832
66908
  return webChannelPromise;
66833
66909
  }
66834
66910
  function loadWhatsAppActions() {
@@ -66841,7 +66917,10 @@ function createPluginRuntime() {
66841
66917
  config: createRuntimeConfig(),
66842
66918
  system: createRuntimeSystem(),
66843
66919
  media: createRuntimeMedia(),
66844
- tts: { textToSpeechTelephony },
66920
+ tts: {
66921
+ textToSpeechTelephony,
66922
+ textToSpeechTelephonyStream
66923
+ },
66845
66924
  tools: createRuntimeTools(),
66846
66925
  channel: createRuntimeChannel(),
66847
66926
  logging: createRuntimeLogging(),
@@ -14,7 +14,7 @@ import { a as logoutWeb, i as logWebSelfId, l as readWebSelfId, p as webAuthExis
14
14
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
15
15
  import { a as resolveSlackWebClientOptions, c as buildSlackBlocksFallbackText, i as createSlackWebClient, l as parseSlackTarget, o as parseSlackBlocksInput, s as validateSlackBlocksArray, t as sendMessageSlack, u as resolveSlackChannelId } from "./send-Chks8Sx_.js";
16
16
  import { $ as fetchChannelPermissionsDiscord, A as unpinMessageDiscord, B as listScheduledEventsDiscord, C as editMessageDiscord, Ct as resolveTimestampMs, D as pinMessageDiscord, Dt as normalizeChannelSlug, E as listThreadsDiscord, Et as buildChannelKeyCandidates, F as fetchMemberInfoDiscord, G as uploadStickerDiscord, H as timeoutMemberDiscord, I as fetchRoleInfoDiscord, J as editChannelDiscord, K as createChannelDiscord, L as fetchVoiceStatusDiscord, M as banMemberDiscord, N as createScheduledEventDiscord, O as readMessagesDiscord, Ot as resolveChannelEntryMatchWithFallback, P as fetchChannelInfoDiscord, Q as stripUndefinedFields, R as kickMemberDiscord, S as deleteMessageDiscord, St as resolveDiscordSystemLocation, T as listPinsDiscord, Tt as applyChannelMatchMeta, U as listGuildEmojisDiscord, V as removeRoleDiscord, W as uploadEmojiDiscord, X as removeChannelPermissionDiscord, Y as moveChannelDiscord, Z as setChannelPermissionDiscord, _ as sendPollDiscord, _t as resolveDiscordShouldRequireMention, a as removeReactionDiscord, at as resolveDiscordChannelId, b as sendWebhookMessageDiscord, bt as formatDiscordReactionEmoji, c as formatDiscordComponentEventText, ct as allowListMatches$1, d as parseDiscordModalCustomId, dt as normalizeDiscordSlug, et as hasAnyGuildPermissionDiscord, f as parseDiscordModalCustomIdForCarbon, ft as resolveDiscordAllowListMatch, g as sendMessageDiscord, gt as resolveDiscordOwnerAllowFrom, h as resolveDiscordModalEntry, ht as resolveDiscordMemberAccessState, i as removeOwnReactionsDiscord, it as parseDiscordTarget, j as addRoleDiscord, k as searchMessagesDiscord, l as parseDiscordComponentCustomId, lt as isDiscordGroupAllowedByPolicy, m as resolveDiscordComponentEntry, mt as resolveDiscordGuildEntry, n as fetchReactionsDiscord, nt as createDiscordClient, o as sendDiscordComponentMessage, ot as listDiscordDirectoryGroupsLive, p as readDiscordComponentSpec, pt as resolveDiscordChannelConfigWithFallback, q as deleteChannelDiscord, r as reactMessageDiscord, rt as createDiscordRestClient, s as createDiscordFormModal, st as listDiscordDirectoryPeersLive, tt as chunkDiscordTextWithMode, u as parseDiscordComponentCustomIdForCarbon, ut as normalizeDiscordAllowList, v as sendStickerDiscord, vt as resolveGroupDmAllow, w as fetchMessageDiscord, wt as fetchDiscord, x as createThreadDiscord, xt as formatDiscordUserTag, y as sendVoiceMessageDiscord, yt as shouldEmitDiscordReactionNotification, z as listGuildChannelsDiscord } from "./send-D4cCHXzJ.js";
17
- import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-B2d2N8OJ.js";
17
+ import { C as getGlobalHookRunner, S as parseInlineDirectives$1, _ as normalizeTargetForProvider, a as normalizeOutboundPayloadsForJson, b as MEDIA_TOKEN_RE, c as applyReplyThreading, d as isRenderablePayload, f as shouldSuppressMessagingToolReplies, g as normalizeChannelTargetInput, h as buildTargetResolverSignature, i as normalizeOutboundPayloads, l as filterMessagingToolDuplicates, m as resolveReplyToMode, o as normalizeReplyPayloadsForDelivery, p as createReplyToModeFilterForChannel, r as formatOutboundPayloadLog, s as applyReplyTagsToPayload, t as deliverOutboundPayloads, u as filterMessagingToolMediaDuplicates, v as throwIfAborted, w as initializeGlobalHookRunner, x as splitMediaFromOutput, y as parseReplyDirectives } from "./deliver-0ThKlzQo.js";
18
18
  import { a as logMessageProcessed, c as logWebhookError, d as startDiagnosticHeartbeat, f as stopDiagnosticHeartbeat, i as logLaneEnqueue, l as logWebhookProcessed, m as isDiagnosticsEnabled, o as logMessageQueued, p as emitDiagnosticEvent, r as logLaneDequeue, s as logSessionStateChange, t as diag, u as logWebhookReceived } from "./diagnostic-DzmNBZt3.js";
19
19
  import { r as getDiagnosticSessionState } from "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import { n as resolveSignalAccount, t as listEnabledSignalAccounts } from "./accounts-sr0G5UOe.js";
@@ -22,10 +22,10 @@ import { $ as isVoiceCompatibleAudio, A as extractTelegramLocation, B as normali
22
22
  import { d as detectMime, f as extensionForMime, g as isGifMedia, h as isAudioFileName, i as getImageMetadata, m as imageMimeFromFormat, s as resizeToJpeg, x as mediaKindFromMime, y as MAX_IMAGE_BYTES } from "./image-ops-BfqdVNxh.js";
23
23
  import { n as discoverModels, t as discoverAuthStorage } from "./pi-model-discovery-j5tVLINv.js";
24
24
  import { a as isMarkdownCapableMessageChannel, c as resolveGatewayMessageChannel, d as GATEWAY_CLIENT_MODES, f as GATEWAY_CLIENT_NAMES, i as isInternalMessageChannel, l as resolveMessageChannel, n as isDeliverableMessageChannel, o as listDeliverableMessageChannels, r as isGatewayMessageChannel, s as normalizeMessageChannel, t as INTERNAL_MESSAGE_CHANNEL, u as GATEWAY_CLIENT_IDS } from "./message-channel-DNOtJsL1.js";
25
- import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-Cd0S0WfR.js";
25
+ import { $ as mergeDeliveryContext, A as isTransientHttpError, At as DEFAULT_UPLOAD_DIR, Bt as expandToolGroups, C as isContextOverflowError, Ct as resolveGroupSessionKey, D as isRateLimitAssistantError, Dt as registerBrowserRoutes, E as isLikelyContextOverflowError, Et as createBrowserRouteContext, F as resolveSandboxContext, Ft as resolveSandboxConfigForAgent, Gt as compileGlobPatterns, H as loadSessionStore, Ht as normalizeToolName, I as resolveSandboxRuntimeStatus, It as applyOwnerOnlyToolPolicy, J as updateSessionStoreEntry, Jt as ensureSessionHeader, K as updateLastRoute, Kt as matchesAnyGlobPattern, L as extractDeliveryInfo, Lt as buildPluginToolGroups, M as parseImageSizeError, Mt as getBridgeAuthForPort, N as sanitizeUserFacingText, Nt as ensureBrowserControlAuth, O as isRawApiErrorPayload, Ot as resolveBrowserConfig, P as ensureSandboxWorkspaceForSession, Pt as resolveBrowserControlAuth, Q as deliveryContextKey, R as parseSessionThreadInfo, Rt as collectExplicitAllowlist, S as isCompactionFailureError, St as deriveSessionMetaPatch, T as isFailoverErrorMessage, Tt as resolveSessionLockMaxHoldFromTimeout, U as readSessionUpdatedAt, Ut as resolveToolProfilePolicy, V as resolveAndPersistSessionFile, Vt as mergeAlsoAllowPolicy, W as recordSessionMetaFromInbound, Wt as stripPluginOnlyAllowlist, X as resolveCacheTtlMs$1, Xt as resolveBootstrapTotalMaxChars, Y as isCacheEnabled, Yt as resolveBootstrapMaxChars, Z as deliveryContextFromSession, Zt as sanitizeGoogleTurnOrdering, _ as formatRawAssistantErrorForUi, _t as DEFAULT_RESET_TRIGGERS, a as isMessagingToolDuplicateNormalized, at as countToolResults, b as isBillingAssistantError, bt as resolveExplicitAgentSessionKey, c as extractToolCallsFromAssistant, ct as applyInputProvenanceToUserMessage, d as isAntigravityClaude, dt as resolveSessionKey, et as normalizeDeliveryContext, f as isGoogleModelApi, ft as evaluateSessionFreshness, g as formatBillingErrorMessage, gt as resolveThreadFlag, h as formatAssistantErrorText, ht as resolveSessionResetType, it as capArrayByJsonBytes, j as parseImageDimensionError, jt as resolveExistingPathsWithinRoot, k as isTimeoutErrorMessage, kt as resolveProfile, l as extractToolResultId, lt as hasInterSessionUserProvenance, m as classifyFailoverReason, mt as resolveSessionResetPolicy, n as validateGeminiTurns, nt as normalizeAccountId$3, o as normalizeTextForComparison, ot as extractToolCallNames, p as BILLING_ERROR_USER_MESSAGE, pt as resolveChannelResetConfig, q as updateSessionStore, qt as buildBootstrapContextFiles, r as pickFallbackThinkingLevel, rt as archiveSessionTranscripts, s as sanitizeSessionMessagesImages, st as INPUT_PROVENANCE_KIND_VALUES, t as validateAnthropicTurns, tt as normalizeSessionDeliveryFields, u as downgradeOpenAIReasoningBlocks, ut as normalizeInputProvenance, v as getApiErrorPayloadFingerprint, vt as resolveFreshSessionTotalTokens, w as isFailoverAssistantError, wt as acquireSessionWriteLock, x as isCloudCodeAssistFormatError, xt as resolveMainSessionKey, y as isAuthAssistantError, yt as canonicalizeMainSessionAlias, z as appendAssistantMessageToSessionTranscript, zt as expandPolicyWithPluginGroups } from "./pi-embedded-helpers-B0Kht0I2.js";
26
26
  import { A as VERSION, C as getConfigValueAtPath, D as isSafeExecutableValue, E as unsetConfigValueAtPath, O as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, S as unsetConfigOverride, T as setConfigValueAtPath, _ as parseDurationMs, a as writeConfigFile, b as resetConfigOverrides, c as TELEGRAM_COMMAND_NAME_PATTERN, f as isInboundPathAllowed, g as normalizeScpRemoteHost, h as resolveIMessageRemoteAttachmentRoots, i as resolveConfigSnapshotHash, k as resolveAgentMaxConcurrent, l as normalizeTelegramCommandName, m as resolveIMessageAttachmentRoots, n as loadConfig, o as validateConfigObjectWithPlugins, r as readConfigFileSnapshot, u as resolveTelegramCustomCommands, v as validateJsonSchemaValue, w as parseConfigPath, x as setConfigOverride, y as getConfigOverrides } from "./config-KL7847B1.js";
27
27
  import { c as normalizePluginsConfig, f as isPathInsideWithRealpath, i as safeStatSync, l as resolveEnableState, n as discoverOpenClawPlugins, p as isDangerousHostEnvVarName, r as isPathInside, s as applyTestPluginDefaults, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-sze5OW-s.js";
28
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-lRUqqgSD.js";
28
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-CZuniMYN.js";
29
29
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-DGNBryo1.js";
30
30
  import { n as formatErrorMessage, r as formatUncaughtError } from "./errors-CPfngF0S.js";
31
31
  import { i as isBlockedHostnameOrIp, o as normalizeHostname, t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
@@ -36,7 +36,7 @@ import { t as resolveIMessageAccount } from "./accounts-DAZL5b5o.js";
36
36
  import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as resolveSessionTranscriptsDirForAgent, r as resolveSessionFilePathOptions, s as resolveStorePath, t as resolveDefaultSessionStorePath } from "./paths-5iQF9bSz.js";
37
37
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
38
38
  import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-TQiVqsOc.js";
39
- import { S as ensureOpenClawModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image--DDZnw-F.js";
39
+ import { S as ensureOpenClawModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-88q3KE-C.js";
40
40
  import { n as resolveMemorySearchConfig } from "./manager-CsXJuzK4.js";
41
41
  import { d as listMemoryFiles, f as normalizeExtraMemoryPaths, g as runTasksWithConcurrency } from "./sqlite-CmTvWxxq.js";
42
42
  import { n as retryAsync } from "./retry-CFbmOHr4.js";
@@ -49,7 +49,7 @@ import { a as loadWebMedia, i as getDefaultLocalRoots } from "./ir-D-lkkPU3.js";
49
49
  import { _ as resolveNativeCommandsEnabled, a as listChatCommandsForConfig, c as normalizeCommandBody, d as resolveCommandArgMenu, f as serializeCommandArgs, g as isRestartEnabled, h as isNativeCommandsExplicitlyDisabled, i as listChatCommands, l as parseCommandArgs, m as isCommandFlagEnabled, o as listNativeCommandSpecs, p as shouldHandleTextCommands, r as findCommandByNativeName, s as listNativeCommandSpecsForConfig, t as buildCommandTextFromArgs, u as resolveCommandArgChoices, v as resolveNativeSkillsEnabled } from "./commands-registry-DEXQtgBS.js";
50
50
  import { c as getSkillsSnapshotVersion, d as createAsyncLock, f as readJsonFile, i as resolveSkillCommandInvocation, l as pruneExpiredPending, n as listSkillCommandsForAgents, o as getRemoteSkillEligibility, p as writeJsonAtomic, r as listSkillCommandsForWorkspace, s as ensureSkillsWatcher, t as listReservedChatSlashCommandNames, u as resolvePairingPaths } from "./skill-commands-CGvIAIiQ.js";
51
51
  import { r as normalizeInboundTextNewlines, t as finalizeInboundContext } from "./inbound-context-QOi5vzUt.js";
52
- import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-Dq-qfrq7.js";
52
+ import { _ as resolveMediaUnderstandingScope, a as resolveMediaAttachmentLocalRoots, c as loadModelCatalog, d as resolveAttachmentKind, f as buildRandomTempFilePath, g as normalizeMediaUnderstandingChatType, h as resolveTimeoutMs$1, i as resolveAutoImageModel, l as modelSupportsVision, m as resolveConcurrency, n as createMediaAttachmentCache, o as runCapability, p as registerUnhandledRejectionHandler, r as normalizeMediaAttachments, s as findModelInCatalog, t as buildProviderRegistry, v as CLI_OUTPUT_MAX_BUFFER, y as applyTemplate } from "./runner-a43IsYad.js";
53
53
  import { n as wrapFetchWithAbortSignal, t as resolveFetch } from "./fetch-BMa0enEg.js";
54
54
  import { n as recordCommandPoll, r as resetCommandPollCount } from "./command-poll-backoff-DtXYsHEc.js";
55
55
  import { n as recordChannelActivity, r as createDiscordRetryRunner, t as getChannelActivity } from "./channel-activity-7fb2OxTV.js";
@@ -79,7 +79,7 @@ import { EdgeTTS } from "node-edge-tts";
79
79
  import AjvPkg from "ajv";
80
80
  import { createServer } from "node:http";
81
81
  import { ProxyAgent, fetch as fetch$1 } from "undici";
82
- import WebSocket, { WebSocket as WebSocket$1 } from "ws";
82
+ import WebSocket$1, { WebSocket } from "ws";
83
83
  import { Buffer as Buffer$1 } from "node:buffer";
84
84
  import { createJiti } from "jiti";
85
85
  import { Type } from "@sinclair/typebox";
@@ -2290,6 +2290,43 @@ async function openaiTTS(params) {
2290
2290
  clearTimeout(timeout);
2291
2291
  }
2292
2292
  }
2293
+ /**
2294
+ * Streaming variant of openaiTTS. Returns the response body as a ReadableStream
2295
+ * so callers can process PCM chunks as they arrive instead of buffering the entire response.
2296
+ */
2297
+ async function openaiTTSStream(params) {
2298
+ const { text, apiKey, model, voice, responseFormat, timeoutMs } = params;
2299
+ if (!isValidOpenAIModel(model)) throw new Error(`Invalid model: ${model}`);
2300
+ if (!isValidOpenAIVoice(voice)) throw new Error(`Invalid voice: ${voice}`);
2301
+ const controller = new AbortController();
2302
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
2303
+ const response = await fetch(`${getOpenAITtsBaseUrl()}/audio/speech`, {
2304
+ method: "POST",
2305
+ headers: {
2306
+ Authorization: `Bearer ${apiKey}`,
2307
+ "Content-Type": "application/json"
2308
+ },
2309
+ body: JSON.stringify({
2310
+ model,
2311
+ input: text,
2312
+ voice,
2313
+ response_format: responseFormat
2314
+ }),
2315
+ signal: controller.signal
2316
+ });
2317
+ if (!response.ok) {
2318
+ clearTimeout(timeout);
2319
+ throw new Error(`OpenAI TTS API error (${response.status})`);
2320
+ }
2321
+ if (!response.body) {
2322
+ clearTimeout(timeout);
2323
+ throw new Error("OpenAI TTS response has no body");
2324
+ }
2325
+ return {
2326
+ body: response.body,
2327
+ cleanup: () => clearTimeout(timeout)
2328
+ };
2329
+ }
2293
2330
  function inferEdgeExtension(outputFormat) {
2294
2331
  const normalized = outputFormat.toLowerCase();
2295
2332
  if (normalized.includes("webm")) return ".webm";
@@ -2815,6 +2852,45 @@ async function textToSpeechTelephony(params) {
2815
2852
  error: `TTS conversion failed: ${errors.join("; ") || "no providers available"}`
2816
2853
  };
2817
2854
  }
2855
+ /**
2856
+ * Streaming variant of textToSpeechTelephony.
2857
+ * Returns a ReadableStream of PCM audio chunks for incremental processing.
2858
+ * Only supports OpenAI provider (PCM format required for streaming).
2859
+ */
2860
+ async function textToSpeechTelephonyStream(params) {
2861
+ const config = resolveTtsConfig(params.cfg);
2862
+ if ((config.provider ?? "openai") !== "openai") return {
2863
+ success: false,
2864
+ error: "Streaming TTS only supported for OpenAI"
2865
+ };
2866
+ const apiKey = resolveTtsApiKey(config, "openai");
2867
+ if (!apiKey) return {
2868
+ success: false,
2869
+ error: "No OpenAI API key for streaming TTS"
2870
+ };
2871
+ try {
2872
+ const output = TELEPHONY_OUTPUT.openai;
2873
+ const result = await openaiTTSStream({
2874
+ text: params.text,
2875
+ apiKey,
2876
+ model: config.openai.model,
2877
+ voice: config.openai.voice,
2878
+ responseFormat: "pcm",
2879
+ timeoutMs: config.timeoutMs
2880
+ });
2881
+ return {
2882
+ success: true,
2883
+ stream: result.body,
2884
+ sampleRate: output.sampleRate,
2885
+ cleanup: result.cleanup
2886
+ };
2887
+ } catch (err) {
2888
+ return {
2889
+ success: false,
2890
+ error: err instanceof Error ? err.message : String(err)
2891
+ };
2892
+ }
2893
+ }
2818
2894
  async function maybeApplyTtsToPayload(params) {
2819
2895
  const config = resolveTtsConfig(params.cfg);
2820
2896
  const prefsPath = resolveTtsPrefsPath(config);
@@ -5713,7 +5789,7 @@ var GatewayClient = class {
5713
5789
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
5714
5790
  });
5715
5791
  }
5716
- this.ws = new WebSocket$1(url, wsOptions);
5792
+ this.ws = new WebSocket(url, wsOptions);
5717
5793
  this.ws.on("open", () => {
5718
5794
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
5719
5795
  const tlsError = this.validateTlsFingerprint();
@@ -5932,7 +6008,7 @@ var GatewayClient = class {
5932
6008
  return null;
5933
6009
  }
5934
6010
  async request(method, params, opts) {
5935
- if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
6011
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
5936
6012
  const id = randomUUID();
5937
6013
  const frame = {
5938
6014
  type: "req",
@@ -7196,7 +7272,7 @@ async function routeReply(params) {
7196
7272
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
7197
7273
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
7198
7274
  try {
7199
- const { deliverOutboundPayloads } = await import("./deliver-B2d2N8OJ.js").then((n) => n.n);
7275
+ const { deliverOutboundPayloads } = await import("./deliver-0ThKlzQo.js").then((n) => n.n);
7200
7276
  return {
7201
7277
  ok: true,
7202
7278
  messageId: (await deliverOutboundPayloads({
@@ -41569,7 +41645,7 @@ async function deliverSessionMaintenanceWarning(params) {
41569
41645
  return;
41570
41646
  }
41571
41647
  try {
41572
- const { deliverOutboundPayloads } = await import("./deliver-B2d2N8OJ.js").then((n) => n.n);
41648
+ const { deliverOutboundPayloads } = await import("./deliver-0ThKlzQo.js").then((n) => n.n);
41573
41649
  await deliverOutboundPayloads({
41574
41650
  cfg: params.cfg,
41575
41651
  channel,
@@ -45016,7 +45092,7 @@ async function describeStickerImage(params) {
45016
45092
  logVerbose(`telegram: describing sticker with ${provider}/${model}`);
45017
45093
  try {
45018
45094
  const buffer = await fs$1.readFile(imagePath);
45019
- const { describeImageWithModel } = await import("./image--DDZnw-F.js").then((n) => n.n);
45095
+ const { describeImageWithModel } = await import("./image-88q3KE-C.js").then((n) => n.n);
45020
45096
  return (await describeImageWithModel({
45021
45097
  buffer,
45022
45098
  fileName: "sticker.webp",
@@ -47477,7 +47553,7 @@ async function preflightDiscordMessage(params) {
47477
47553
  let preflightTranscript;
47478
47554
  const hasAudioAttachment = message.attachments?.some((att) => att.contentType?.startsWith("audio/"));
47479
47555
  if (!isDirectMessage && shouldRequireMention && hasAudioAttachment && !baseText && mentionRegexes.length > 0) try {
47480
- const { transcribeFirstAudio } = await import("./audio-preflight-CODznzqu.js");
47556
+ const { transcribeFirstAudio } = await import("./audio-preflight-Da7vejCH.js");
47481
47557
  const audioPaths = message.attachments?.filter((att) => att.contentType?.startsWith("audio/")).map((att) => att.url) ?? [];
47482
47558
  if (audioPaths.length > 0) preflightTranscript = await transcribeFirstAudio({
47483
47559
  ctx: {
@@ -51483,7 +51559,7 @@ function isVoiceChannelType(type) {
51483
51559
  function createDefaultDeps() {
51484
51560
  return {
51485
51561
  sendMessageWhatsApp: async (...args) => {
51486
- const { sendMessageWhatsApp } = await import("./web-DPHo2cWX.js");
51562
+ const { sendMessageWhatsApp } = await import("./web-CVSol55V.js");
51487
51563
  return await sendMessageWhatsApp(...args);
51488
51564
  },
51489
51565
  sendMessageTelegram: async (...args) => {
@@ -54396,7 +54472,7 @@ function createDiscordGatewayPlugin(params) {
54396
54472
  super(options);
54397
54473
  }
54398
54474
  createWebSocket(url) {
54399
- return new WebSocket(url, { agent });
54475
+ return new WebSocket$1(url, { agent });
54400
54476
  }
54401
54477
  }
54402
54478
  return new ProxyGatewayPlugin();
@@ -64669,7 +64745,7 @@ const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeAllowFro
64669
64745
  const hasAudio = allMedia.some((media) => media.contentType?.startsWith("audio/"));
64670
64746
  let preflightTranscript;
64671
64747
  if (isGroup && requireMention && hasAudio && !hasUserText && mentionRegexes.length > 0) try {
64672
- const { transcribeFirstAudio } = await import("./audio-preflight-CODznzqu.js");
64748
+ const { transcribeFirstAudio } = await import("./audio-preflight-Da7vejCH.js");
64673
64749
  preflightTranscript = await transcribeFirstAudio({
64674
64750
  ctx: {
64675
64751
  MediaPaths: allMedia.length > 0 ? allMedia.map((m) => m.path) : void 0,
@@ -66826,7 +66902,7 @@ function loadWebLoginQr() {
66826
66902
  return webLoginQrPromise;
66827
66903
  }
66828
66904
  function loadWebChannel() {
66829
- webChannelPromise ??= import("./web-DPHo2cWX.js");
66905
+ webChannelPromise ??= import("./web-CVSol55V.js");
66830
66906
  return webChannelPromise;
66831
66907
  }
66832
66908
  function loadWhatsAppActions() {
@@ -66839,7 +66915,10 @@ function createPluginRuntime() {
66839
66915
  config: createRuntimeConfig(),
66840
66916
  system: createRuntimeSystem(),
66841
66917
  media: createRuntimeMedia(),
66842
- tts: { textToSpeechTelephony },
66918
+ tts: {
66919
+ textToSpeechTelephony,
66920
+ textToSpeechTelephonyStream
66921
+ },
66843
66922
  tools: createRuntimeTools(),
66844
66923
  channel: createRuntimeChannel(),
66845
66924
  logging: createRuntimeLogging(),
@@ -10,7 +10,7 @@ import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
10
10
  import { c as SafeOpenError, i as getImageMetadata, l as openFileWithinRoot, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-BfqdVNxh.js";
11
11
  import { o as listDeliverableMessageChannels, s as normalizeMessageChannel } from "./message-channel-DNOtJsL1.js";
12
12
  import { _ as parseDurationMs, a as writeConfigFile, n as loadConfig, s as parseByteSize, t as createConfigIO } from "./config-KL7847B1.js";
13
- import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_OPENCLAW_BROWSER_ENABLED, N as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveOpenClawUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchOpenClawChrome, j as DEFAULT_OPENCLAW_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopOpenClawChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-lRUqqgSD.js";
13
+ import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_OPENCLAW_BROWSER_ENABLED, N as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveOpenClawUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchOpenClawChrome, j as DEFAULT_OPENCLAW_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopOpenClawChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-CZuniMYN.js";
14
14
  import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-DGNBryo1.js";
15
15
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-CPfngF0S.js";
16
16
  import { t as SsrFBlockedError } from "./ssrf-CxfFyMRZ.js";
@@ -931,7 +931,7 @@ function isModuleNotFoundError(err) {
931
931
  }
932
932
  async function loadPwAiModule(mode) {
933
933
  try {
934
- return await import("./pw-ai-C-kqYO4L.js");
934
+ return await import("./pw-ai-S3cpSYOy.js");
935
935
  } catch (err) {
936
936
  if (mode === "soft") return null;
937
937
  if (isModuleNotFoundError(err)) return null;
@@ -3471,11 +3471,11 @@ function createProfileContext(opts, profile) {
3471
3471
  const userDataDir = resolveOpenClawUserDataDir(profile.name);
3472
3472
  const profileState = getProfileState();
3473
3473
  if (await isHttpReachable(300) && !profileState.running) try {
3474
- await (await import("./pw-ai-C-kqYO4L.js")).closePlaywrightBrowserConnection();
3474
+ await (await import("./pw-ai-S3cpSYOy.js")).closePlaywrightBrowserConnection();
3475
3475
  } catch {}
3476
3476
  if (profileState.running) await stopRunningBrowser();
3477
3477
  try {
3478
- await (await import("./pw-ai-C-kqYO4L.js")).closePlaywrightBrowserConnection();
3478
+ await (await import("./pw-ai-S3cpSYOy.js")).closePlaywrightBrowserConnection();
3479
3479
  } catch {}
3480
3480
  if (!fs.existsSync(userDataDir)) return {
3481
3481
  moved: false,