@lawpath-tech/openclaw 2026.2.21-18 → 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 (113) 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-CODznzqu.js → audio-preflight-Da7vejCH.js} +4 -4
  5. package/dist/{auth-choice-DH2T1E9c.js → auth-choice-BJNaxS-L.js} +1 -1
  6. package/dist/{auth-choice-CLiY8PdF.js → auth-choice-Hb6530su.js} +1 -1
  7. package/dist/{banner-CqQBBjKH.js → banner-dFAx4eE_.js} +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/bundled/boot-md/handler.js +1 -1
  10. package/dist/bundled/session-memory/handler.js +1 -1
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{channel-options-e7Z9Smf2.js → channel-options--M8F-DHl.js} +1 -1
  13. package/dist/{channel-options-CLS27y1A.js → channel-options-D0Qjq83D.js} +1 -1
  14. package/dist/{channel-web-DHMbpU2p.js → channel-web-D8hSmcPF.js} +1 -1
  15. package/dist/{channels-cli-BDHLWbaU.js → channels-cli-6uwOEBM-.js} +4 -4
  16. package/dist/{channels-cli-CDwQerVi.js → channels-cli-BtZHPcBX.js} +4 -4
  17. package/dist/{chrome-lRUqqgSD.js → chrome-CZuniMYN.js} +7 -7
  18. package/dist/{cli-BGJFLB0I.js → cli-CIImVBCM.js} +1 -1
  19. package/dist/{cli-C1nypCKP.js → cli-CijjdR37.js} +1 -1
  20. package/dist/{command-registry-pGuORBuB.js → command-registry-BtDC5Ll-.js} +9 -9
  21. package/dist/{completion-cli-Bf-Ojq_a.js → completion-cli-Bw5nZmTm.js} +2 -2
  22. package/dist/{completion-cli-C79-bpAx.js → completion-cli-CI6LWHg3.js} +1 -1
  23. package/dist/{config-cli-DLdH6zIF.js → config-cli-CgjgjWri.js} +1 -1
  24. package/dist/{config-cli-BcNHb4_E.js → config-cli-Dc0TQ1yE.js} +1 -1
  25. package/dist/{configure-BSt9S0yk.js → configure-CGqsSqXB.js} +3 -3
  26. package/dist/{configure-h1d7nrgR.js → configure-GUYUjx8A.js} +3 -3
  27. package/dist/{deliver-B2d2N8OJ.js → deliver-0ThKlzQo.js} +1 -1
  28. package/dist/{doctor-completion-BB1f594d.js → doctor-completion-DgPc1rDZ.js} +1 -1
  29. package/dist/{doctor-completion-deY10x7w.js → doctor-completion-DipoVPSi.js} +1 -1
  30. package/dist/entry.js +1 -1
  31. package/dist/extensionAPI.js +6 -6
  32. package/dist/{gateway-cli-IziQis2t.js → gateway-cli-Ds3oN72Y.js} +8 -8
  33. package/dist/{gateway-cli-B-XwzYp2.js → gateway-cli-DuMINk2B.js} +8 -8
  34. package/dist/{health-DMrTgW8V.js → health-DQjqH1zU.js} +1 -1
  35. package/dist/{health-UmuJyu1Q.js → health-Dg0bAIKS.js} +1 -1
  36. package/dist/{hooks-cli-BparoMpt.js → hooks-cli-CEtCwdza.js} +2 -2
  37. package/dist/{hooks-cli-B6WCYLyG.js → hooks-cli-Cac2Ru8r.js} +2 -2
  38. package/dist/{image--DDZnw-F.js → image-88q3KE-C.js} +1 -1
  39. package/dist/index.js +6 -6
  40. package/dist/llm-slug-generator.js +1 -1
  41. package/dist/{models-nhERae29.js → models-DnhANpnd.js} +2 -2
  42. package/dist/{models-cli-bfKNgoHD.js → models-cli-03noBf8W.js} +3 -3
  43. package/dist/{models-cli-BnbeEOCU.js → models-cli-CaP_rt4y.js} +2 -2
  44. package/dist/{onboard-D_VxXTXD.js → onboard-BMc-yUv5.js} +2 -2
  45. package/dist/{onboard-C3pJ0NU-.js → onboard-BZg2c27h.js} +2 -2
  46. package/dist/{onboard-channels-CyeyvIfw.js → onboard-channels-Lt2gG1e2.js} +1 -1
  47. package/dist/{onboard-channels-YvwszRaQ.js → onboard-channels-O6KvizE3.js} +1 -1
  48. package/dist/{onboarding-0zwx3Yv7.js → onboarding-CTgBlanm.js} +3 -3
  49. package/dist/{onboarding-D0_Q5m2W.js → onboarding-G28sv5Ms.js} +3 -3
  50. package/dist/{onboarding.finalize-CYb0_Q0z.js → onboarding.finalize-Cpt9Ymcn.js} +5 -5
  51. package/dist/{onboarding.finalize-CVeI23_g.js → onboarding.finalize-D2sylHDB.js} +6 -6
  52. package/dist/{pi-embedded-Qfuh9XzI.js → pi-embedded-Dz24QZz9.js} +82 -3
  53. package/dist/{pi-embedded-CwQsXrVT.js → pi-embedded-ZvazjIyF.js} +96 -17
  54. package/dist/{pi-embedded-helpers-Cd0S0WfR.js → pi-embedded-helpers-B0Kht0I2.js} +4 -4
  55. package/dist/{plugin-registry-83ThmVHf.js → plugin-registry-1pF4_jNl.js} +1 -1
  56. package/dist/{plugin-registry-D57lc9ob.js → plugin-registry-CHOacv01.js} +1 -1
  57. package/dist/plugin-sdk/{channel-web-XYtgc8aq.js → channel-web-BHNS_E7F.js} +1 -1
  58. package/dist/plugin-sdk/index.js +2 -2
  59. package/dist/plugin-sdk/plugins/runtime/types.d.ts +2 -0
  60. package/dist/plugin-sdk/{reply-BSOpvBX4.js → reply-DEepmBkT.js} +82 -3
  61. package/dist/plugin-sdk/tts/tts-core.d.ts +15 -0
  62. package/dist/plugin-sdk/tts/tts.d.ts +16 -0
  63. package/dist/plugin-sdk/{web-DiLYLsml.js → web-DBo-6RyH.js} +2 -2
  64. package/dist/{plugins-cli-BymsOcmR.js → plugins-cli-CflNTqmB.js} +2 -2
  65. package/dist/{plugins-cli-DOWA2F0z.js → plugins-cli-DW0TLzrq.js} +2 -2
  66. package/dist/{program-T05XIetU.js → program-DUkjf6lq.js} +7 -7
  67. package/dist/{program-context-CDmctW1L.js → program-context-C0-LzXoV.js} +17 -17
  68. package/dist/{prompt-select-styled-cR4-U64b.js → prompt-select-styled-CQUE1vow.js} +4 -4
  69. package/dist/{prompt-select-styled-BbzQhWF7.js → prompt-select-styled-CWNxdPrL.js} +4 -4
  70. package/dist/{provider-auth-helpers-BbnDoytN.js → provider-auth-helpers-D39L7fZC.js} +1 -1
  71. package/dist/{provider-auth-helpers-C4RNIRyy.js → provider-auth-helpers-bYUBBkmL.js} +1 -1
  72. package/dist/{push-apns-Dli4pG4y.js → push-apns-DGIqfAg5.js} +1 -1
  73. package/dist/{push-apns-DUeNpqyF.js → push-apns-Qfohz-Hs.js} +1 -1
  74. package/dist/{pw-ai-C-kqYO4L.js → pw-ai-S3cpSYOy.js} +1 -1
  75. package/dist/{register.agent-aY_6enDc.js → register.agent-BEM0_4uG.js} +5 -5
  76. package/dist/{register.agent-DNAtU5WP.js → register.agent-WQgVmACk.js} +6 -6
  77. package/dist/{register.configure-CwlwOMZ3.js → register.configure-CCpFmFPt.js} +6 -6
  78. package/dist/{register.configure-C_n9kIWJ.js → register.configure-CdW3aECy.js} +6 -6
  79. package/dist/{register.maintenance-DC40nnCm.js → register.maintenance-B8RZLSOe.js} +8 -8
  80. package/dist/{register.maintenance-Dddndcoo.js → register.maintenance-CM3QEdFz.js} +7 -7
  81. package/dist/{register.message-DiR6desB.js → register.message-BRLYHuVS.js} +2 -2
  82. package/dist/{register.message-CpEf0b15.js → register.message-XYm9NyDT.js} +2 -2
  83. package/dist/{register.onboard-bOeA39xj.js → register.onboard-BzAJbRpP.js} +4 -4
  84. package/dist/{register.onboard-VzVmqpEA.js → register.onboard-EwGHFUsd.js} +4 -4
  85. package/dist/{register.setup-CNLQzxl8.js → register.setup-33shhZje.js} +4 -4
  86. package/dist/{register.setup-D6iO5Xqa.js → register.setup-DpdZyiMv.js} +4 -4
  87. package/dist/{register.status-health-sessions-CoiaeduR.js → register.status-health-sessions-C8-iqepo.js} +3 -3
  88. package/dist/{register.status-health-sessions-BtJeTZnN.js → register.status-health-sessions-CK4f2nj_.js} +3 -3
  89. package/dist/{register.subclis-CFTYYdAQ.js → register.subclis-Mn68G5tp.js} +9 -9
  90. package/dist/{reply-Bv-RvRzs.js → reply-DuVUTFfT.js} +82 -3
  91. package/dist/{run-main-EzFOCEdp.js → run-main-CNB3qjRM.js} +14 -14
  92. package/dist/{runner-Dq-qfrq7.js → runner-a43IsYad.js} +1 -1
  93. package/dist/{server-node-events-B9TqPvCI.js → server-node-events-B3o3P600.js} +2 -2
  94. package/dist/{server-node-events-syk21TN6.js → server-node-events-BPFwUGbS.js} +2 -2
  95. package/dist/{session-dirs-BAcQuXpY.js → session-dirs-Cw2efkey.js} +1 -1
  96. package/dist/{session-dirs-t0YpmrIL.js → session-dirs-DsU4kvIK.js} +1 -1
  97. package/dist/{status-keCWmejk.js → status-BSJIuIlN.js} +1 -1
  98. package/dist/{status-05251w21.js → status-BhHpKHQP.js} +2 -2
  99. package/dist/{status-BqDiXxwL.js → status-C2PvVLaW.js} +1 -1
  100. package/dist/{status-B8UVm7P3.js → status-CLKmcFCC.js} +2 -2
  101. package/dist/{subagent-registry-Lm4ps45z.js → subagent-registry-Da0a_Vka.js} +82 -3
  102. package/dist/{update-cli-BTF6TXGD.js → update-cli-BW3q5tFm.js} +7 -7
  103. package/dist/{update-cli-aW6jVJIJ.js → update-cli-D4EUMrX6.js} +8 -8
  104. package/dist/{web-BYZfljIx.js → web-BTbIFuWM.js} +2 -2
  105. package/dist/{web-BjxYv-hA.js → web-C7TQSVU0.js} +1 -1
  106. package/dist/{web-DPHo2cWX.js → web-CVSol55V.js} +6 -6
  107. package/dist/{web-BZ5kM4yO.js → web-Y49Dumye.js} +1 -1
  108. package/extensions/voice-call/src/providers/twilio.ts +31 -13
  109. package/extensions/voice-call/src/response-generator.ts +26 -5
  110. package/extensions/voice-call/src/telephony-audio.ts +54 -0
  111. package/extensions/voice-call/src/telephony-tts.ts +40 -2
  112. package/extensions/voice-call/src/webhook.ts +9 -0
  113. package/package.json +1 -1
@@ -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,
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { M as getActivePluginRegistry, o as createSubsystemLogger } from "./entry.js";
3
3
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-BVNQDedk.js";
4
4
  import { i as loadConfig } from "./config-P-vz8Nlc.js";
5
- import { g as loadOpenClawPlugins } from "./subagent-registry-Lm4ps45z.js";
5
+ import { g as loadOpenClawPlugins } from "./subagent-registry-Da0a_Vka.js";
6
6
 
7
7
  //#region src/cli/plugin-registry.ts
8
8
  var plugin_registry_exports = /* @__PURE__ */ __exportAll({ ensurePluginRegistryLoaded: () => ensurePluginRegistryLoaded });
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
- import { gt as loadOpenClawPlugins } from "./reply-Bv-RvRzs.js";
2
+ import { gt as loadOpenClawPlugins } from "./reply-DuVUTFfT.js";
3
3
  import { d as getActivePluginRegistry } from "./registry-Dygi7Azw.js";
4
4
  import { t as createSubsystemLogger } from "./subsystem-8bY95KEB.js";
5
5
  import { c as resolveAgentWorkspaceDir, l as resolveDefaultAgentId } from "./agent-scope-D9N91YsQ.js";
@@ -1,6 +1,6 @@
1
1
  import { a as buildGroupHistoryKey, n as DEFAULT_MAIN_KEY, r as buildAgentMainSessionKey, s as normalizeAgentId } from "./session-key-C_0eELjb.js";
2
2
  import { f as readWebSelfId, o as getWebAuthAgeMs, r as resolveWhatsAppAccount } from "./accounts-Ciwy7Yxd.js";
3
- import { E as enqueueSystemEvent, G as resolveMentionGating, W as shouldAckReactionForWhatsApp, X as buildHistoryContextFromEntries, Y as DEFAULT_GROUP_HISTORY_LIMIT, _ as resolveEnvelopeFormatOptions, c as computeBackoff, d as formatDurationPrecise, f as dispatchReplyWithBufferedBlockDispatcher, g as formatInboundEnvelope, h as resolveInboundDebounceMs, ht as createDedupeCache, l as sleepWithAbort, m as createInboundDebouncer, n as normalizeGroupActivation, nt as buildMentionRegexes, r as parseActivationCommand, rt as normalizeMentionText, t as getReplyFromConfig, tt as recordPendingHistoryEntryIfEnabled, u as buildPairingReply, v as hasControlCommand, y as shouldComputeCommandAuthorized } from "./reply-BSOpvBX4.js";
3
+ import { E as enqueueSystemEvent, G as resolveMentionGating, W as shouldAckReactionForWhatsApp, X as buildHistoryContextFromEntries, Y as DEFAULT_GROUP_HISTORY_LIMIT, _ as resolveEnvelopeFormatOptions, c as computeBackoff, d as formatDurationPrecise, f as dispatchReplyWithBufferedBlockDispatcher, g as formatInboundEnvelope, h as resolveInboundDebounceMs, ht as createDedupeCache, l as sleepWithAbort, m as createInboundDebouncer, n as normalizeGroupActivation, nt as buildMentionRegexes, r as parseActivationCommand, rt as normalizeMentionText, t as getReplyFromConfig, tt as recordPendingHistoryEntryIfEnabled, u as buildPairingReply, v as hasControlCommand, y as shouldComputeCommandAuthorized } from "./reply-DEepmBkT.js";
4
4
  import { A as normalizeE164, B as toWhatsappJid, K as logVerbose, N as resolveJidToE164, O as isSelfChatMode, R as sleep, Y as shouldLogVerbose, k as jidToE164, s as normalizeChatChannelId, tt as getChildLogger, x as clamp } from "./registry-O1yza0Vh.js";
5
5
  import { n as loadConfig } from "./config-9OZuRn0C.js";
6
6
  import { i as defaultRuntime, t as createSubsystemLogger } from "./subsystem-C4Rh0kdL.js";
@@ -1,6 +1,6 @@
1
1
  import { f as DEFAULT_ACCOUNT_ID, p as normalizeAccountId } from "./session-key-C_0eELjb.js";
2
2
  import { _ as createAccountListHelpers, i as resolveWhatsAppAuthDir, n as resolveDefaultWhatsAppAccountId, r as resolveWhatsAppAccount, t as listWhatsAppAccountIds } from "./accounts-Ciwy7Yxd.js";
3
- import { $ as clearHistoryEntriesIfEnabled, A as resolveDiscordUserAllowlist, B as logTypingFailure, C as stripMarkdown, Ct as unbindThreadBindingsBySessionKey, D as resolveSlackUserAllowlist, Dt as BLUEBUBBLES_ACTION_NAMES, Et as BLUEBUBBLES_ACTIONS, F as stringEnum, G as resolveMentionGating, H as removeAckReactionAfterReply, I as recordInboundSession, J as summarizeMapping, K as resolveMentionGatingWithBypass, L as resolveControlCommandGate, M as collectDiscordAuditChannelIds, N as formatDocsLink, O as resolveSlackChannelAllowlist, Ot as BLUEBUBBLES_GROUP_ACTIONS, P as optionalStringEnum, Q as clearHistoryEntries, R as logAckFailure, S as processLineMessage, St as listThreadBindingsBySessionKey, T as attachFooterText, Tt as resolveAllowlistMatchSimple, U as shouldAckReaction, V as createTypingCallbacks, W as shouldAckReactionForWhatsApp, Y as DEFAULT_GROUP_HISTORY_LIMIT, Z as buildPendingHistoryContextFromMap, _t as listDevicePairing, a as normalizeAccountId$1, at as isWSLEnv, bt as registerPluginHttpRoute, ct as DEFAULT_WEBHOOK_MAX_BODY_BYTES, dt as isRequestBodyLimitError, et as recordPendingHistoryEntry, ft as readJsonBodyWithLimit, gt as approveDevicePairing, ht as createDedupeCache, i as listLineAccountIds, it as isWSL2Sync, j as resolveDiscordChannelAllowlist, k as detectBinary, kt as CHANNEL_MESSAGE_ACTION_NAMES, lt as RequestBodyLimitError, mt as requestBodyErrorToText, o as resolveDefaultLineAccountId, ot as isWSLSync, pt as readRequestBodyWithLimit, q as mergeAllowlist, s as resolveLineAccount, st as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, tt as recordPendingHistoryEntryIfEnabled, ut as installRequestBodyLimitGuard, vt as rejectDevicePairing, w as createReceiptCard, wt as formatAllowlistMatchMeta, x as hasMarkdownToConvert, xt as autoBindSpawnedDiscordSubagent, yt as extractToolSend, z as logInboundDrop } from "./reply-BSOpvBX4.js";
3
+ import { $ as clearHistoryEntriesIfEnabled, A as resolveDiscordUserAllowlist, B as logTypingFailure, C as stripMarkdown, Ct as unbindThreadBindingsBySessionKey, D as resolveSlackUserAllowlist, Dt as BLUEBUBBLES_ACTION_NAMES, Et as BLUEBUBBLES_ACTIONS, F as stringEnum, G as resolveMentionGating, H as removeAckReactionAfterReply, I as recordInboundSession, J as summarizeMapping, K as resolveMentionGatingWithBypass, L as resolveControlCommandGate, M as collectDiscordAuditChannelIds, N as formatDocsLink, O as resolveSlackChannelAllowlist, Ot as BLUEBUBBLES_GROUP_ACTIONS, P as optionalStringEnum, Q as clearHistoryEntries, R as logAckFailure, S as processLineMessage, St as listThreadBindingsBySessionKey, T as attachFooterText, Tt as resolveAllowlistMatchSimple, U as shouldAckReaction, V as createTypingCallbacks, W as shouldAckReactionForWhatsApp, Y as DEFAULT_GROUP_HISTORY_LIMIT, Z as buildPendingHistoryContextFromMap, _t as listDevicePairing, a as normalizeAccountId$1, at as isWSLEnv, bt as registerPluginHttpRoute, ct as DEFAULT_WEBHOOK_MAX_BODY_BYTES, dt as isRequestBodyLimitError, et as recordPendingHistoryEntry, ft as readJsonBodyWithLimit, gt as approveDevicePairing, ht as createDedupeCache, i as listLineAccountIds, it as isWSL2Sync, j as resolveDiscordChannelAllowlist, k as detectBinary, kt as CHANNEL_MESSAGE_ACTION_NAMES, lt as RequestBodyLimitError, mt as requestBodyErrorToText, o as resolveDefaultLineAccountId, ot as isWSLSync, pt as readRequestBodyWithLimit, q as mergeAllowlist, s as resolveLineAccount, st as DEFAULT_WEBHOOK_BODY_TIMEOUT_MS, tt as recordPendingHistoryEntryIfEnabled, ut as installRequestBodyLimitGuard, vt as rejectDevicePairing, w as createReceiptCard, wt as formatAllowlistMatchMeta, x as hasMarkdownToConvert, xt as autoBindSpawnedDiscordSubagent, yt as extractToolSend, z as logInboundDrop } from "./reply-DEepmBkT.js";
4
4
  import "./paths-DVWx7USN.js";
5
5
  import "./github-copilot-token-Cg0YPPSu.js";
6
6
  import { D as resolveSlackAccount, E as resolveDefaultSlackAccountId, F as resolveDiscordAccount, M as listDiscordAccountIds, O as resolveSlackReplyToMode, P as resolveDefaultDiscordAccountId, S as resolveTelegramAccount, T as listSlackAccountIds, _ as normalizeWhatsAppTarget, a as listDiscordDirectoryPeersFromConfig, b as listTelegramAccountIds, c as listTelegramDirectoryGroupsFromConfig, d as listWhatsAppDirectoryPeersFromConfig, f as looksLikeSlackTargetId, g as isWhatsAppGroupJid, i as listDiscordDirectoryGroupsFromConfig, l as listTelegramDirectoryPeersFromConfig, o as listSlackDirectoryGroupsFromConfig, p as normalizeSlackMessagingTarget, s as listSlackDirectoryPeersFromConfig, u as listWhatsAppDirectoryGroupsFromConfig, w as listEnabledSlackAccounts, x as resolveDefaultTelegramAccountId } from "./plugins-DIzw7Ncy.js";
@@ -47,7 +47,7 @@ import "./paths-BNQjLbn7.js";
47
47
  import { h as onDiagnosticEvent, m as isDiagnosticsEnabled, p as emitDiagnosticEvent } from "./diagnostic-DKyVS3IK.js";
48
48
  import { n as extractOriginalFilename } from "./store-DoRXD0QB.js";
49
49
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-DzZIT1V1.js";
50
- import { r as resolveWhatsAppHeartbeatRecipients } from "./channel-web-XYtgc8aq.js";
50
+ import { r as resolveWhatsAppHeartbeatRecipients } from "./channel-web-BHNS_E7F.js";
51
51
  import "./image-C31B_R8P.js";
52
52
  import "./pi-model-discovery-LbcEa65a.js";
53
53
  import "./api-key-rotation-ElOMCP9r.js";
@@ -11,6 +11,7 @@ type UpsertChannelPairingRequest = typeof import("../../pairing/pairing-store.js
11
11
  type FetchRemoteMedia = typeof import("../../media/fetch.js").fetchRemoteMedia;
12
12
  type SaveMediaBuffer = typeof import("../../media/store.js").saveMediaBuffer;
13
13
  type TextToSpeechTelephony = typeof import("../../tts/tts.js").textToSpeechTelephony;
14
+ type TextToSpeechTelephonyStream = typeof import("../../tts/tts.js").textToSpeechTelephonyStream;
14
15
  type BuildMentionRegexes = typeof import("../../auto-reply/reply/mentions.js").buildMentionRegexes;
15
16
  type MatchesMentionPatterns = typeof import("../../auto-reply/reply/mentions.js").matchesMentionPatterns;
16
17
  type MatchesMentionWithExplicit = typeof import("../../auto-reply/reply/mentions.js").matchesMentionWithExplicit;
@@ -150,6 +151,7 @@ export type PluginRuntime = {
150
151
  };
151
152
  tts: {
152
153
  textToSpeechTelephony: TextToSpeechTelephony;
154
+ textToSpeechTelephonyStream?: TextToSpeechTelephonyStream;
153
155
  };
154
156
  tools: {
155
157
  createMemoryGetTool: CreateMemoryGetTool;
@@ -10486,6 +10486,43 @@ async function openaiTTS(params) {
10486
10486
  clearTimeout(timeout);
10487
10487
  }
10488
10488
  }
10489
+ /**
10490
+ * Streaming variant of openaiTTS. Returns the response body as a ReadableStream
10491
+ * so callers can process PCM chunks as they arrive instead of buffering the entire response.
10492
+ */
10493
+ async function openaiTTSStream(params) {
10494
+ const { text, apiKey, model, voice, responseFormat, timeoutMs } = params;
10495
+ if (!isValidOpenAIModel(model)) throw new Error(`Invalid model: ${model}`);
10496
+ if (!isValidOpenAIVoice(voice)) throw new Error(`Invalid voice: ${voice}`);
10497
+ const controller = new AbortController();
10498
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
10499
+ const response = await fetch(`${getOpenAITtsBaseUrl()}/audio/speech`, {
10500
+ method: "POST",
10501
+ headers: {
10502
+ Authorization: `Bearer ${apiKey}`,
10503
+ "Content-Type": "application/json"
10504
+ },
10505
+ body: JSON.stringify({
10506
+ model,
10507
+ input: text,
10508
+ voice,
10509
+ response_format: responseFormat
10510
+ }),
10511
+ signal: controller.signal
10512
+ });
10513
+ if (!response.ok) {
10514
+ clearTimeout(timeout);
10515
+ throw new Error(`OpenAI TTS API error (${response.status})`);
10516
+ }
10517
+ if (!response.body) {
10518
+ clearTimeout(timeout);
10519
+ throw new Error("OpenAI TTS response has no body");
10520
+ }
10521
+ return {
10522
+ body: response.body,
10523
+ cleanup: () => clearTimeout(timeout)
10524
+ };
10525
+ }
10489
10526
  function inferEdgeExtension(outputFormat) {
10490
10527
  const normalized = outputFormat.toLowerCase();
10491
10528
  if (normalized.includes("webm")) return ".webm";
@@ -11011,6 +11048,45 @@ async function textToSpeechTelephony(params) {
11011
11048
  error: `TTS conversion failed: ${errors.join("; ") || "no providers available"}`
11012
11049
  };
11013
11050
  }
11051
+ /**
11052
+ * Streaming variant of textToSpeechTelephony.
11053
+ * Returns a ReadableStream of PCM audio chunks for incremental processing.
11054
+ * Only supports OpenAI provider (PCM format required for streaming).
11055
+ */
11056
+ async function textToSpeechTelephonyStream(params) {
11057
+ const config = resolveTtsConfig(params.cfg);
11058
+ if ((config.provider ?? "openai") !== "openai") return {
11059
+ success: false,
11060
+ error: "Streaming TTS only supported for OpenAI"
11061
+ };
11062
+ const apiKey = resolveTtsApiKey(config, "openai");
11063
+ if (!apiKey) return {
11064
+ success: false,
11065
+ error: "No OpenAI API key for streaming TTS"
11066
+ };
11067
+ try {
11068
+ const output = TELEPHONY_OUTPUT.openai;
11069
+ const result = await openaiTTSStream({
11070
+ text: params.text,
11071
+ apiKey,
11072
+ model: config.openai.model,
11073
+ voice: config.openai.voice,
11074
+ responseFormat: "pcm",
11075
+ timeoutMs: config.timeoutMs
11076
+ });
11077
+ return {
11078
+ success: true,
11079
+ stream: result.body,
11080
+ sampleRate: output.sampleRate,
11081
+ cleanup: result.cleanup
11082
+ };
11083
+ } catch (err) {
11084
+ return {
11085
+ success: false,
11086
+ error: err instanceof Error ? err.message : String(err)
11087
+ };
11088
+ }
11089
+ }
11014
11090
  async function maybeApplyTtsToPayload(params) {
11015
11091
  const config = resolveTtsConfig(params.cfg);
11016
11092
  const prefsPath = resolveTtsPrefsPath(config);
@@ -26836,7 +26912,7 @@ async function runWithImageModelFallback(params) {
26836
26912
  function createDefaultDeps() {
26837
26913
  return {
26838
26914
  sendMessageWhatsApp: async (...args) => {
26839
- const { sendMessageWhatsApp } = await import("./web-DiLYLsml.js");
26915
+ const { sendMessageWhatsApp } = await import("./web-DBo-6RyH.js");
26840
26916
  return await sendMessageWhatsApp(...args);
26841
26917
  },
26842
26918
  sendMessageTelegram: async (...args) => {
@@ -44523,7 +44599,7 @@ function loadWebLoginQr() {
44523
44599
  return webLoginQrPromise;
44524
44600
  }
44525
44601
  function loadWebChannel() {
44526
- webChannelPromise ??= import("./web-DiLYLsml.js");
44602
+ webChannelPromise ??= import("./web-DBo-6RyH.js");
44527
44603
  return webChannelPromise;
44528
44604
  }
44529
44605
  function loadWhatsAppActions() {
@@ -44536,7 +44612,10 @@ function createPluginRuntime() {
44536
44612
  config: createRuntimeConfig(),
44537
44613
  system: createRuntimeSystem(),
44538
44614
  media: createRuntimeMedia(),
44539
- tts: { textToSpeechTelephony },
44615
+ tts: {
44616
+ textToSpeechTelephony,
44617
+ textToSpeechTelephonyStream
44618
+ },
44540
44619
  tools: createRuntimeTools(),
44541
44620
  channel: createRuntimeChannel(),
44542
44621
  logging: createRuntimeLogging(),
@@ -42,6 +42,21 @@ export declare function openaiTTS(params: {
42
42
  responseFormat: "mp3" | "opus" | "pcm";
43
43
  timeoutMs: number;
44
44
  }): Promise<Buffer>;
45
+ /**
46
+ * Streaming variant of openaiTTS. Returns the response body as a ReadableStream
47
+ * so callers can process PCM chunks as they arrive instead of buffering the entire response.
48
+ */
49
+ export declare function openaiTTSStream(params: {
50
+ text: string;
51
+ apiKey: string;
52
+ model: string;
53
+ voice: string;
54
+ responseFormat: "pcm";
55
+ timeoutMs: number;
56
+ }): Promise<{
57
+ body: ReadableStream<Uint8Array>;
58
+ cleanup: () => void;
59
+ }>;
45
60
  export declare function inferEdgeExtension(outputFormat: string): string;
46
61
  export declare function edgeTTS(params: {
47
62
  text: string;
@@ -157,6 +157,22 @@ export declare function textToSpeechTelephony(params: {
157
157
  cfg: OpenClawConfig;
158
158
  prefsPath?: string;
159
159
  }): Promise<TtsTelephonyResult>;
160
+ export type TtsTelephonyStreamResult = {
161
+ success: boolean;
162
+ stream?: ReadableStream<Uint8Array>;
163
+ sampleRate?: number;
164
+ cleanup?: () => void;
165
+ error?: string;
166
+ };
167
+ /**
168
+ * Streaming variant of textToSpeechTelephony.
169
+ * Returns a ReadableStream of PCM audio chunks for incremental processing.
170
+ * Only supports OpenAI provider (PCM format required for streaming).
171
+ */
172
+ export declare function textToSpeechTelephonyStream(params: {
173
+ text: string;
174
+ cfg: OpenClawConfig;
175
+ }): Promise<TtsTelephonyStreamResult>;
160
176
  export declare function maybeApplyTtsToPayload(params: {
161
177
  payload: ReplyPayload;
162
178
  cfg: OpenClawConfig;
@@ -1,5 +1,5 @@
1
1
  import { a as WA_WEB_AUTH_DIR, g as webAuthExists, s as logWebSelfId, u as pickWebChannel } from "./accounts-Ciwy7Yxd.js";
2
- import "./reply-BSOpvBX4.js";
2
+ import "./reply-DEepmBkT.js";
3
3
  import "./paths-DVWx7USN.js";
4
4
  import "./github-copilot-token-Cg0YPPSu.js";
5
5
  import "./plugins-DIzw7Ncy.js";
@@ -45,7 +45,7 @@ import "./pi-embedded-helpers-DU0nLxRU.js";
45
45
  import "./paths-BNQjLbn7.js";
46
46
  import "./diagnostic-DKyVS3IK.js";
47
47
  import "./store-DoRXD0QB.js";
48
- import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-XYtgc8aq.js";
48
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-BHNS_E7F.js";
49
49
  import "./image-C31B_R8P.js";
50
50
  import "./pi-model-discovery-LbcEa65a.js";
51
51
  import "./api-key-rotation-ElOMCP9r.js";
@@ -1,7 +1,7 @@
1
1
  import { g as resolveStateDir } from "./paths-B4BZAPZh.js";
2
2
  import { B as theme, S as shortenHomePath, g as resolveConfigDir, x as shortenHomeInString, 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 { f as defaultRuntime } from "./subsystem-8bY95KEB.js";
7
7
  import "./exec-BmMB8-Xs.js";
@@ -106,7 +106,7 @@ import "./npm-registry-spec-DVXqd4Pf.js";
106
106
  import "./skill-scanner-CMBwwxis.js";
107
107
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-B9skpWIo.js";
108
108
  import { t as renderTable } from "./table-i7J9YlN5.js";
109
- import { t as buildPluginStatusReport } from "./status-BqDiXxwL.js";
109
+ import { t as buildPluginStatusReport } from "./status-C2PvVLaW.js";
110
110
  import { n as updateNpmInstalledPlugins } from "./update-BS8h2lwA.js";
111
111
  import fs from "node:fs";
112
112
  import os from "node:os";
@@ -13,7 +13,7 @@ import "./client-B5QR5Bi9.js";
13
13
  import "./call-D6ajQjvV.js";
14
14
  import "./message-channel-CVHJDItx.js";
15
15
  import "./pairing-token-Byh6drgn.js";
16
- import "./subagent-registry-Lm4ps45z.js";
16
+ import "./subagent-registry-Da0a_Vka.js";
17
17
  import "./sessions-BJnLP6OJ.js";
18
18
  import "./tokens-ANnYrShl.js";
19
19
  import "./plugins-DStDwRz0.js";
@@ -102,7 +102,7 @@ import "./npm-registry-spec-DkaZNHAW.js";
102
102
  import "./skill-scanner-Cb7mXGIR.js";
103
103
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-DDy4Ij7L.js";
104
104
  import { t as renderTable } from "./table-C9BoE_4p.js";
105
- import { t as buildPluginStatusReport } from "./status-keCWmejk.js";
105
+ import { t as buildPluginStatusReport } from "./status-BSJIuIlN.js";
106
106
  import { n as updateNpmInstalledPlugins } from "./update-ChO83Ek6.js";
107
107
  import os from "node:os";
108
108
  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,13 +99,13 @@ import "./prompt-style-DwCXob2h.js";
99
99
  import "./pairing-labels-D2jdEFFZ.js";
100
100
  import "./pi-tools.policy-BQwEWAuL.js";
101
101
  import "./catalog-Da8o-cxw.js";
102
- import "./plugin-registry-83ThmVHf.js";
103
- import { n as resolveCliChannelOptions } from "./channel-options-CLS27y1A.js";
104
- import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-CFTYYdAQ.js";
105
- import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-pGuORBuB.js";
102
+ import "./plugin-registry-1pF4_jNl.js";
103
+ import { n as resolveCliChannelOptions } from "./channel-options-D0Qjq83D.js";
104
+ import { t as getSubCliCommandsWithSubcommands } from "./register.subclis-Mn68G5tp.js";
105
+ import { a as registerProgramCommands, r as getCoreCliCommandsWithSubcommands } from "./command-registry-BtDC5Ll-.js";
106
106
  import { r as setProgramContext } from "./program-context-5q-A0wbP.js";
107
107
  import { t as forceFreePort } from "./ports-BxzJ3ENr.js";
108
- import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-CqQBBjKH.js";
108
+ import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-dFAx4eE_.js";
109
109
  import { Command } from "commander";
110
110
 
111
111
  //#region src/cli/program/context.ts
@@ -213,7 +213,7 @@ function registerPreActionHooks(program, programVersion) {
213
213
  commandPath
214
214
  });
215
215
  if (PLUGIN_REQUIRED_COMMANDS.has(commandPath[0])) {
216
- const { ensurePluginRegistryLoaded } = await import("./plugin-registry-83ThmVHf.js").then((n) => n.n);
216
+ const { ensurePluginRegistryLoaded } = await import("./plugin-registry-1pF4_jNl.js").then((n) => n.n);
217
217
  ensurePluginRegistryLoaded();
218
218
  }
219
219
  });