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

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 (93) hide show
  1. package/dist/{audio-preflight-Da7vejCH.js → audio-preflight-CODznzqu.js} +4 -4
  2. package/dist/{audio-preflight-CLqoZYgI.js → audio-preflight-omzaYFGD.js} +4 -4
  3. package/dist/build-info.json +3 -3
  4. package/dist/bundled/boot-md/handler.js +6 -6
  5. package/dist/bundled/session-memory/handler.js +6 -6
  6. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  7. package/dist/{chrome-Bqbv_ZSj.js → chrome-BAv9fEiv.js} +7 -7
  8. package/dist/{chrome-CZuniMYN.js → chrome-lRUqqgSD.js} +7 -7
  9. package/dist/{deliver-0ThKlzQo.js → deliver-B2d2N8OJ.js} +1 -1
  10. package/dist/{deliver-CKH_FhS0.js → deliver-CLJRPnfx.js} +1 -1
  11. package/dist/extensionAPI.js +6 -6
  12. package/dist/{image-88q3KE-C.js → image--DDZnw-F.js} +1 -1
  13. package/dist/{image-CxPjVob-.js → image-Ci28h-op.js} +1 -1
  14. package/dist/llm-slug-generator.js +6 -6
  15. package/dist/{pi-embedded-ZvazjIyF.js → pi-embedded-C_B8_quB.js} +16 -16
  16. package/dist/{pi-embedded-Dz24QZz9.js → pi-embedded-CoxlOLW5.js} +16 -16
  17. package/dist/{pi-embedded-helpers-B0Kht0I2.js → pi-embedded-helpers-Cd0S0WfR.js} +4 -4
  18. package/dist/{pi-embedded-helpers-CSE0v99A.js → pi-embedded-helpers-Ll4Lztu1.js} +4 -4
  19. package/dist/plugin-sdk/{accounts-DUBJHEgi.js → accounts-BcQo4OUu.js} +1 -1
  20. package/dist/plugin-sdk/{accounts-wSu5JyDM.js → accounts-DEsAwvaZ.js} +1 -1
  21. package/dist/plugin-sdk/{accounts-Ciwy7Yxd.js → accounts-fnLsjAOi.js} +3 -3
  22. package/dist/plugin-sdk/{active-listener-Bnau4oiu.js → active-listener-CeaKSm29.js} +1 -1
  23. package/dist/plugin-sdk/{agent-scope-cT7IxdHY.js → agent-scope-D5PlT0Z0.js} +2 -2
  24. package/dist/plugin-sdk/{api-key-rotation-ElOMCP9r.js → api-key-rotation-B3O1qn0m.js} +1 -1
  25. package/dist/plugin-sdk/{audio-preflight-DtozH3sJ.js → audio-preflight-CYSy3uuZ.js} +24 -24
  26. package/dist/plugin-sdk/{bindings-CKqdifyU.js → bindings-C0XEX0yK.js} +2 -2
  27. package/dist/plugin-sdk/{channel-activity-CCnr-9bS.js → channel-activity-WgE8Z4Bb.js} +1 -1
  28. package/dist/plugin-sdk/{channel-web-BHNS_E7F.js → channel-web-Nw-bUgtV.js} +22 -22
  29. package/dist/plugin-sdk/{chrome-BO7SUTgY.js → chrome-C1xnOQsc.js} +3 -3
  30. package/dist/plugin-sdk/{chunk-DyzO7IVo.js → chunk-CQk9vawA.js} +1 -1
  31. package/dist/plugin-sdk/{command-format-DcBXOX9Z.js → command-format-DHXa0Clc.js} +1 -1
  32. package/dist/plugin-sdk/{commands-registry-BsSKPwgj.js → commands-registry-yTZdwtLj.js} +4 -4
  33. package/dist/plugin-sdk/{config-9OZuRn0C.js → config--kW4R0el.js} +9 -9
  34. package/dist/plugin-sdk/{deliver-BO_wt0wd.js → deliver-C2gjA_UH.js} +10 -10
  35. package/dist/plugin-sdk/{diagnostic-DKyVS3IK.js → diagnostic-Up1aMyxZ.js} +1 -1
  36. package/dist/plugin-sdk/{image-C31B_R8P.js → image-Bcc99tVA.js} +4 -4
  37. package/dist/plugin-sdk/{image-ops-B8aJIly2.js → image-ops-C6RLbtSJ.js} +1 -1
  38. package/dist/plugin-sdk/index.js +53 -53
  39. package/dist/plugin-sdk/{ir-CD5VqKGg.js → ir-Cwi1KVG5.js} +4 -4
  40. package/dist/plugin-sdk/{local-roots-D4PCK2jj.js → local-roots-6BSl8AoA.js} +3 -3
  41. package/dist/plugin-sdk/{login-CW17h3xU.js → login-Cau5eVVj.js} +7 -7
  42. package/dist/plugin-sdk/{login-qr-CMdk06CS.js → login-qr-CLWtfA9m.js} +9 -9
  43. package/dist/plugin-sdk/{manager-CZPPxI6R.js → manager-C3Eb_8Hz.js} +8 -8
  44. package/dist/plugin-sdk/{manifest-registry-sgHvjA6E.js → manifest-registry-DvEm2HHf.js} +1 -1
  45. package/dist/plugin-sdk/{markdown-tables-Bo-r4msS.js → markdown-tables-cJqvQe9j.js} +1 -1
  46. package/dist/plugin-sdk/{message-channel-DmB4bGFh.js → message-channel-DY9wVB2A.js} +1 -1
  47. package/dist/plugin-sdk/{model-selection-CXooYLb2.js → model-selection-BjVTBZiY.js} +4 -4
  48. package/dist/plugin-sdk/{outbound-dAcQHyyr.js → outbound-Co1QSkdS.js} +7 -7
  49. package/dist/plugin-sdk/{outbound-attachment-CCxMtk8m.js → outbound-attachment-CsmRyZPI.js} +2 -2
  50. package/dist/plugin-sdk/{pi-auth-json-C-euHc3x.js → pi-auth-json-DfEOhoTK.js} +5 -5
  51. package/dist/plugin-sdk/{pi-embedded-helpers-DU0nLxRU.js → pi-embedded-helpers-D3EACnFn.js} +17 -17
  52. package/dist/plugin-sdk/{plugins-DIzw7Ncy.js → plugins-Dyz98ZJX.js} +4 -4
  53. package/dist/plugin-sdk/{pw-ai-CYmDAwXD.js → pw-ai-smoXiGqZ.js} +8 -8
  54. package/dist/plugin-sdk/{qmd-manager-DQiT4WTr.js → qmd-manager-CUhJ7WG2.js} +4 -4
  55. package/dist/plugin-sdk/{registry-O1yza0Vh.js → registry-DL-33c9X.js} +2 -2
  56. package/dist/plugin-sdk/{replies-Bnu7HnvW.js → replies-Bkaifx0j.js} +3 -3
  57. package/dist/plugin-sdk/{reply-DEepmBkT.js → reply-Cb54ddUA.js} +78 -78
  58. package/dist/plugin-sdk/{reply-prefix-BF0omhZE.js → reply-prefix-5vdbga0R.js} +1 -1
  59. package/dist/plugin-sdk/{resolve-outbound-target-DzZIT1V1.js → resolve-outbound-target-CP7QDN14.js} +2 -2
  60. package/dist/plugin-sdk/{resolve-route-B63ztF-V.js → resolve-route-eopifBrM.js} +3 -3
  61. package/dist/plugin-sdk/{retry-JFNwfUew.js → retry-5P3d0rYw.js} +1 -1
  62. package/dist/plugin-sdk/{runner-DztRiWhh.js → runner-DqwPn56n.js} +9 -9
  63. package/dist/plugin-sdk/{send-DEV4iiFj.js → send-C2NQjVF9.js} +10 -10
  64. package/dist/plugin-sdk/{send-D-spKwjf.js → send-D_X6p9H0.js} +10 -10
  65. package/dist/plugin-sdk/{send-CK3DCPv-.js → send-DnFB-v5n.js} +6 -6
  66. package/dist/plugin-sdk/{send-D1C2sJG1.js → send-PPtjKj-0.js} +7 -7
  67. package/dist/plugin-sdk/{send-DrYvH25B.js → send-_uj_NuFI.js} +6 -6
  68. package/dist/plugin-sdk/{session-DRJl5tKC.js → session-CZngPTYk.js} +4 -4
  69. package/dist/plugin-sdk/{skill-commands-Dv5AeOZQ.js → skill-commands-Cr54qPdy.js} +5 -5
  70. package/dist/plugin-sdk/{skills-5hEda4_Y.js → skills-Dcu4o-9l.js} +7 -7
  71. package/dist/plugin-sdk/{sqlite-DUu0dwic.js → sqlite-ulpcowfN.js} +1 -1
  72. package/dist/plugin-sdk/{store-DoRXD0QB.js → store-EUYCRBvs.js} +2 -2
  73. package/dist/plugin-sdk/{subsystem-C4Rh0kdL.js → subsystem-C9WnrKN8.js} +1 -1
  74. package/dist/plugin-sdk/{tables-C_81Ve2l.js → tables-CMdQECje.js} +1 -1
  75. package/dist/plugin-sdk/{target-errors-C638yp2-.js → target-errors-CrR2lAF7.js} +2 -2
  76. package/dist/plugin-sdk/{thinking-DexKPSsI.js → thinking-C7zYA2s9.js} +5 -5
  77. package/dist/plugin-sdk/{tokens-K9ITCatc.js → tokens-2475WU2Z.js} +1 -1
  78. package/dist/plugin-sdk/{tool-images-BvjD_HnR.js → tool-images-DCvC8yL7.js} +2 -2
  79. package/dist/plugin-sdk/{tool-loop-detection-BBRtoox8.js → tool-loop-detection-D0ADW0h2.js} +2 -2
  80. package/dist/plugin-sdk/web-BVkjyY4A.js +65 -0
  81. package/dist/plugin-sdk/{whatsapp-actions-D8i2vCxS.js → whatsapp-actions-DC4RRNqv.js} +21 -21
  82. package/dist/{pw-ai-S3cpSYOy.js → pw-ai-C-kqYO4L.js} +1 -1
  83. package/dist/{pw-ai-D-_aGzdQ.js → pw-ai-KrN0mqVH.js} +1 -1
  84. package/dist/{runner-D1eXJZ8T.js → runner-ChBxge-W.js} +1 -1
  85. package/dist/{runner-a43IsYad.js → runner-Dq-qfrq7.js} +1 -1
  86. package/dist/{web-Y49Dumye.js → web-Crj4x6uL.js} +6 -6
  87. package/dist/{web-CVSol55V.js → web-DiYh3u92.js} +6 -6
  88. package/extensions/voice-call/package.json +2 -0
  89. package/extensions/voice-call/src/config.ts +16 -3
  90. package/extensions/voice-call/src/providers/realtime-session.ts +210 -0
  91. package/extensions/voice-call/src/webhook.ts +172 -8
  92. package/package.json +3 -1
  93. package/dist/plugin-sdk/web-DBo-6RyH.js +0 -65
@@ -1,12 +1,12 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { n as fetchWithTimeout } from "./fetch-timeout-ChYuW7LE.js";
3
3
  import { t as resolveFetch } from "./fetch-b2Zm8y7X.js";
4
- import { n as loadConfig } from "./config-9OZuRn0C.js";
5
- import { v as mediaKindFromMime } from "./image-ops-B8aJIly2.js";
6
- import { n as markdownToIR, t as chunkMarkdownIR } from "./ir-CD5VqKGg.js";
7
- import { n as resolveMarkdownTableMode } from "./markdown-tables-Bo-r4msS.js";
8
- import { i as resolveSignalAccount } from "./accounts-DUBJHEgi.js";
9
- import { t as resolveOutboundAttachmentFromUrl } from "./outbound-attachment-CCxMtk8m.js";
4
+ import { n as loadConfig } from "./config--kW4R0el.js";
5
+ import { v as mediaKindFromMime } from "./image-ops-C6RLbtSJ.js";
6
+ import { n as markdownToIR, t as chunkMarkdownIR } from "./ir-Cwi1KVG5.js";
7
+ import { n as resolveMarkdownTableMode } from "./markdown-tables-cJqvQe9j.js";
8
+ import { i as resolveSignalAccount } from "./accounts-BcQo4OUu.js";
9
+ import { t as resolveOutboundAttachmentFromUrl } from "./outbound-attachment-CsmRyZPI.js";
10
10
  import { randomUUID } from "node:crypto";
11
11
 
12
12
  //#region src/signal/client.ts
@@ -1,7 +1,7 @@
1
- import { d as readCredsJsonRaw, h as resolveWebCredsPath, l as maybeRestoreCredsFromBackup, m as resolveWebCredsBackupPath, p as resolveDefaultWebAuthDir } from "./accounts-Ciwy7Yxd.js";
2
- import { P as resolveUserPath, U as danger, X as success, at as toPinoLikeLogger, tt as getChildLogger, w as ensureDir } from "./registry-O1yza0Vh.js";
3
- import { Z as VERSION } from "./config-9OZuRn0C.js";
4
- import { t as formatCliCommand } from "./command-format-DcBXOX9Z.js";
1
+ import { d as readCredsJsonRaw, h as resolveWebCredsPath, l as maybeRestoreCredsFromBackup, m as resolveWebCredsBackupPath, p as resolveDefaultWebAuthDir } from "./accounts-fnLsjAOi.js";
2
+ import { P as resolveUserPath, U as danger, X as success, at as toPinoLikeLogger, tt as getChildLogger, w as ensureDir } from "./registry-DL-33c9X.js";
3
+ import { Z as VERSION } from "./config--kW4R0el.js";
4
+ import { t as formatCliCommand } from "./command-format-DHXa0Clc.js";
5
5
  import fs from "node:fs";
6
6
  import { randomUUID } from "node:crypto";
7
7
  import { DisconnectReason, fetchLatestBaileysVersion, makeCacheableSignalKeyStore, makeWASocket, useMultiFileAuthState } from "@whiskeysockets/baileys";
@@ -1,10 +1,10 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { s as resolveStateDir } from "./paths-DVWx7USN.js";
3
- import { P as resolveUserPath, b as CONFIG_DIR } from "./registry-O1yza0Vh.js";
4
- import { t as createSubsystemLogger } from "./subsystem-C4Rh0kdL.js";
5
- import { s as resolveAgentWorkspaceDir, t as listAgentIds } from "./agent-scope-cT7IxdHY.js";
6
- import { o as resolvePluginSkillDirs, t as buildWorkspaceSkillCommandSpecs } from "./skills-5hEda4_Y.js";
7
- import { i as listChatCommands } from "./commands-registry-BsSKPwgj.js";
3
+ import { P as resolveUserPath, b as CONFIG_DIR } from "./registry-DL-33c9X.js";
4
+ import { t as createSubsystemLogger } from "./subsystem-C9WnrKN8.js";
5
+ import { s as resolveAgentWorkspaceDir, t as listAgentIds } from "./agent-scope-D5PlT0Z0.js";
6
+ import { o as resolvePluginSkillDirs, t as buildWorkspaceSkillCommandSpecs } from "./skills-Dcu4o-9l.js";
7
+ import { i as listChatCommands } from "./commands-registry-yTZdwtLj.js";
8
8
  import fs from "node:fs";
9
9
  import path from "node:path";
10
10
  import os from "node:os";
@@ -1,12 +1,12 @@
1
- import { P as resolveUserPath, b as CONFIG_DIR } from "./registry-O1yza0Vh.js";
2
- import { t as createSubsystemLogger } from "./subsystem-C4Rh0kdL.js";
3
- import { i as parseBooleanValue } from "./command-format-DcBXOX9Z.js";
4
- import { M as normalizeSkillFilter, w as resolveOpenClawPackageRootSync } from "./agent-scope-cT7IxdHY.js";
5
- import { a as LEGACY_MANIFEST_KEYS, c as normalizePluginsConfig, l as resolveEnableState, o as MANIFEST_KEY, p as isDangerousHostEnvVarName, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-sgHvjA6E.js";
1
+ import { P as resolveUserPath, b as CONFIG_DIR } from "./registry-DL-33c9X.js";
2
+ import { t as createSubsystemLogger } from "./subsystem-C9WnrKN8.js";
3
+ import { i as parseBooleanValue } from "./command-format-DHXa0Clc.js";
4
+ import { M as normalizeSkillFilter, w as resolveOpenClawPackageRootSync } from "./agent-scope-D5PlT0Z0.js";
5
+ import { a as LEGACY_MANIFEST_KEYS, c as normalizePluginsConfig, l as resolveEnableState, o as MANIFEST_KEY, p as isDangerousHostEnvVarName, t as loadPluginManifestRegistry, u as resolveMemorySlotDecision } from "./manifest-registry-DvEm2HHf.js";
6
6
  import fs from "node:fs";
7
7
  import path from "node:path";
8
8
  import os from "node:os";
9
- import JSON5 from "json5";
9
+ import json5 from "json5";
10
10
  import { createHash, timingSafeEqual } from "node:crypto";
11
11
  import fs$1 from "node:fs/promises";
12
12
  import { fileURLToPath } from "node:url";
@@ -226,7 +226,7 @@ function resolveOpenClawManifestBlock(params) {
226
226
  const raw = getFrontmatterString(params.frontmatter, params.key ?? "metadata");
227
227
  if (!raw) return;
228
228
  try {
229
- const parsed = JSON5.parse(raw);
229
+ const parsed = json5.parse(raw);
230
230
  if (!parsed || typeof parsed !== "object") return;
231
231
  const manifestKeys = [MANIFEST_KEY, ...LEGACY_MANIFEST_KEYS];
232
232
  for (const key of manifestKeys) {
@@ -1,4 +1,4 @@
1
- import { t as createSubsystemLogger } from "./subsystem-C4Rh0kdL.js";
1
+ import { t as createSubsystemLogger } from "./subsystem-C9WnrKN8.js";
2
2
  import { t as redactSensitiveText } from "./redact-DPnDWsnT.js";
3
3
  import { o as resolveSessionTranscriptsDirForAgent } from "./paths-BNQjLbn7.js";
4
4
  import { createRequire } from "node:module";
@@ -1,5 +1,5 @@
1
- import { M as resolveConfigDir } from "./registry-O1yza0Vh.js";
2
- import { c as detectMime, l as extensionForMime } from "./image-ops-B8aJIly2.js";
1
+ import { M as resolveConfigDir } from "./registry-DL-33c9X.js";
2
+ import { c as detectMime, l as extensionForMime } from "./image-ops-C6RLbtSJ.js";
3
3
  import { createWriteStream } from "node:fs";
4
4
  import path from "node:path";
5
5
  import crypto from "node:crypto";
@@ -1,4 +1,4 @@
1
- import { G as isVerbose, ct as normalizeLogLevel, lt as readLoggingConfig, n as CHAT_CHANNEL_ORDER, ot as loggingState, rt as isFileLogLevelEnabled, st as levelToMinLevel, tt as getChildLogger } from "./registry-O1yza0Vh.js";
1
+ import { G as isVerbose, ct as normalizeLogLevel, lt as readLoggingConfig, n as CHAT_CHANNEL_ORDER, ot as loggingState, rt as isFileLogLevelEnabled, st as levelToMinLevel, tt as getChildLogger } from "./registry-DL-33c9X.js";
2
2
  import { Chalk } from "chalk";
3
3
 
4
4
  //#region src/terminal/progress-line.ts
@@ -1,4 +1,4 @@
1
- import { r as markdownToIRWithMeta } from "./ir-CD5VqKGg.js";
1
+ import { r as markdownToIRWithMeta } from "./ir-Cwi1KVG5.js";
2
2
  import { t as renderMarkdownWithMarkers } from "./render-BiJZ5W4Z.js";
3
3
 
4
4
  //#region src/markdown/tables.ts
@@ -1,5 +1,5 @@
1
- import { c as detectMime } from "./image-ops-B8aJIly2.js";
2
- import { r as sanitizeToolResultImages } from "./tool-images-BvjD_HnR.js";
1
+ import { c as detectMime } from "./image-ops-C6RLbtSJ.js";
2
+ import { r as sanitizeToolResultImages } from "./tool-images-DCvC8yL7.js";
3
3
  import fs from "node:fs/promises";
4
4
 
5
5
  //#region src/agents/tools/common.ts
@@ -1,9 +1,9 @@
1
1
  import { p as normalizeAccountId } from "./session-key-C_0eELjb.js";
2
- import { r as resolveWhatsAppAccount } from "./accounts-Ciwy7Yxd.js";
3
- import { D as resolveSlackAccount, F as resolveDiscordAccount, O as resolveSlackReplyToMode, S as resolveTelegramAccount, _ as normalizeWhatsAppTarget } from "./plugins-DIzw7Ncy.js";
4
- import { A as normalizeE164, T as escapeRegExp, i as getChatChannelMeta, l as requireActivePluginRegistry, n as CHAT_CHANNEL_ORDER } from "./registry-O1yza0Vh.js";
5
- import { r as resolveIMessageAccount } from "./accounts-wSu5JyDM.js";
6
- import { i as resolveSignalAccount } from "./accounts-DUBJHEgi.js";
2
+ import { r as resolveWhatsAppAccount } from "./accounts-fnLsjAOi.js";
3
+ import { D as resolveSlackAccount, F as resolveDiscordAccount, O as resolveSlackReplyToMode, S as resolveTelegramAccount, _ as normalizeWhatsAppTarget } from "./plugins-Dyz98ZJX.js";
4
+ import { A as normalizeE164, T as escapeRegExp, i as getChatChannelMeta, l as requireActivePluginRegistry, n as CHAT_CHANNEL_ORDER } from "./registry-DL-33c9X.js";
5
+ import { r as resolveIMessageAccount } from "./accounts-DEsAwvaZ.js";
6
+ import { i as resolveSignalAccount } from "./accounts-BcQo4OUu.js";
7
7
 
8
8
  //#region src/config/group-policy.ts
9
9
  function resolveChannelGroupConfig(groups, groupId, caseInsensitive = false) {
@@ -1,4 +1,4 @@
1
- import { T as escapeRegExp } from "./registry-O1yza0Vh.js";
1
+ import { T as escapeRegExp } from "./registry-DL-33c9X.js";
2
2
 
3
3
  //#region src/auto-reply/tokens.ts
4
4
  const HEARTBEAT_TOKEN = "HEARTBEAT_OK";
@@ -1,5 +1,5 @@
1
- import { t as createSubsystemLogger } from "./subsystem-C4Rh0kdL.js";
2
- import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-B8aJIly2.js";
1
+ import { t as createSubsystemLogger } from "./subsystem-C9WnrKN8.js";
2
+ import { i as getImageMetadata, n as buildImageResizeSideGrid, s as resizeToJpeg, t as IMAGE_REDUCE_QUALITY_STEPS } from "./image-ops-C6RLbtSJ.js";
3
3
 
4
4
  //#region src/agents/image-sanitization.ts
5
5
  const DEFAULT_IMAGE_MAX_DIMENSION_PX = 1200;
@@ -1,6 +1,6 @@
1
1
  import "./paths-DVWx7USN.js";
2
- import { H as isPlainObject } from "./registry-O1yza0Vh.js";
3
- import { t as createSubsystemLogger } from "./subsystem-C4Rh0kdL.js";
2
+ import { H as isPlainObject } from "./registry-DL-33c9X.js";
3
+ import { t as createSubsystemLogger } from "./subsystem-C9WnrKN8.js";
4
4
  import { createHash } from "node:crypto";
5
5
 
6
6
  //#region src/agents/tool-loop-detection.ts
@@ -0,0 +1,65 @@
1
+ import { a as WA_WEB_AUTH_DIR, g as webAuthExists, s as logWebSelfId, u as pickWebChannel } from "./accounts-fnLsjAOi.js";
2
+ import "./reply-Cb54ddUA.js";
3
+ import "./paths-DVWx7USN.js";
4
+ import "./github-copilot-token-Cg0YPPSu.js";
5
+ import "./plugins-Dyz98ZJX.js";
6
+ import "./fetch-b2Zm8y7X.js";
7
+ import "./registry-DL-33c9X.js";
8
+ import "./retry-5P3d0rYw.js";
9
+ import "./send-C2NQjVF9.js";
10
+ import "./config--kW4R0el.js";
11
+ import "./subsystem-C9WnrKN8.js";
12
+ import "./command-format-DHXa0Clc.js";
13
+ import "./model-selection-BjVTBZiY.js";
14
+ import "./agent-scope-D5PlT0Z0.js";
15
+ import "./manifest-registry-DvEm2HHf.js";
16
+ import "./redact-DPnDWsnT.js";
17
+ import "./errors-Bv8oZiTO.js";
18
+ import "./channel-activity-WgE8Z4Bb.js";
19
+ import "./image-ops-C6RLbtSJ.js";
20
+ import "./ssrf-DKZ8eBrk.js";
21
+ import "./local-roots-6BSl8AoA.js";
22
+ import "./ir-Cwi1KVG5.js";
23
+ import "./chunk-CQk9vawA.js";
24
+ import "./message-channel-DY9wVB2A.js";
25
+ import "./bindings-C0XEX0yK.js";
26
+ import "./markdown-tables-cJqvQe9j.js";
27
+ import "./render-BiJZ5W4Z.js";
28
+ import "./tables-CMdQECje.js";
29
+ import "./send-PPtjKj-0.js";
30
+ import "./tool-images-DCvC8yL7.js";
31
+ import "./target-errors-CrR2lAF7.js";
32
+ import "./send-DnFB-v5n.js";
33
+ import "./send-D_X6p9H0.js";
34
+ import "./runner-DqwPn56n.js";
35
+ import "./reply-prefix-5vdbga0R.js";
36
+ import "./tokens-2475WU2Z.js";
37
+ import "./skill-commands-Cr54qPdy.js";
38
+ import "./skills-Dcu4o-9l.js";
39
+ import "./chrome-C1xnOQsc.js";
40
+ import "./thinking-C7zYA2s9.js";
41
+ import "./accounts-DEsAwvaZ.js";
42
+ import "./accounts-BcQo4OUu.js";
43
+ import "./deliver-C2gjA_UH.js";
44
+ import "./pi-embedded-helpers-D3EACnFn.js";
45
+ import "./paths-BNQjLbn7.js";
46
+ import "./diagnostic-Up1aMyxZ.js";
47
+ import "./store-EUYCRBvs.js";
48
+ import { n as monitorWebInbox, t as monitorWebChannel } from "./channel-web-Nw-bUgtV.js";
49
+ import "./image-Bcc99tVA.js";
50
+ import "./pi-model-discovery-LbcEa65a.js";
51
+ import "./api-key-rotation-B3O1qn0m.js";
52
+ import "./sqlite-ulpcowfN.js";
53
+ import "./diagnostic-session-state-Wd5tNeQG.js";
54
+ import "./manager-C3Eb_8Hz.js";
55
+ import "./commands-registry-yTZdwtLj.js";
56
+ import "./send-_uj_NuFI.js";
57
+ import "./proxy-MquBDehr.js";
58
+ import "./resolve-route-eopifBrM.js";
59
+ import "./replies-Bkaifx0j.js";
60
+ import "./outbound-attachment-CsmRyZPI.js";
61
+ import { n as sendMessageWhatsApp } from "./outbound-Co1QSkdS.js";
62
+ import { i as waitForWaConnection, t as createWaSocket } from "./session-CZngPTYk.js";
63
+ import { t as loginWeb } from "./login-Cau5eVVj.js";
64
+
65
+ export { WA_WEB_AUTH_DIR, createWaSocket, logWebSelfId, loginWeb, monitorWebChannel, monitorWebInbox, pickWebChannel, sendMessageWhatsApp, waitForWaConnection, webAuthExists };
@@ -1,28 +1,28 @@
1
- import { r as resolveWhatsAppAccount } from "./accounts-Ciwy7Yxd.js";
1
+ import { r as resolveWhatsAppAccount } from "./accounts-fnLsjAOi.js";
2
2
  import "./paths-DVWx7USN.js";
3
3
  import "./github-copilot-token-Cg0YPPSu.js";
4
- import "./plugins-DIzw7Ncy.js";
5
- import "./registry-O1yza0Vh.js";
6
- import "./config-9OZuRn0C.js";
7
- import "./subsystem-C4Rh0kdL.js";
8
- import "./command-format-DcBXOX9Z.js";
9
- import "./model-selection-CXooYLb2.js";
10
- import "./agent-scope-cT7IxdHY.js";
11
- import "./manifest-registry-sgHvjA6E.js";
12
- import "./image-ops-B8aJIly2.js";
4
+ import "./plugins-Dyz98ZJX.js";
5
+ import "./registry-DL-33c9X.js";
6
+ import "./config--kW4R0el.js";
7
+ import "./subsystem-C9WnrKN8.js";
8
+ import "./command-format-DHXa0Clc.js";
9
+ import "./model-selection-BjVTBZiY.js";
10
+ import "./agent-scope-D5PlT0Z0.js";
11
+ import "./manifest-registry-DvEm2HHf.js";
12
+ import "./image-ops-C6RLbtSJ.js";
13
13
  import "./ssrf-DKZ8eBrk.js";
14
- import "./local-roots-D4PCK2jj.js";
15
- import "./ir-CD5VqKGg.js";
16
- import "./chunk-DyzO7IVo.js";
17
- import "./message-channel-DmB4bGFh.js";
18
- import "./bindings-CKqdifyU.js";
19
- import "./markdown-tables-Bo-r4msS.js";
14
+ import "./local-roots-6BSl8AoA.js";
15
+ import "./ir-Cwi1KVG5.js";
16
+ import "./chunk-CQk9vawA.js";
17
+ import "./message-channel-DY9wVB2A.js";
18
+ import "./bindings-C0XEX0yK.js";
19
+ import "./markdown-tables-cJqvQe9j.js";
20
20
  import "./render-BiJZ5W4Z.js";
21
- import "./tables-C_81Ve2l.js";
22
- import "./tool-images-BvjD_HnR.js";
23
- import { a as createActionGate, c as jsonResult, d as readReactionParams, i as ToolAuthorizationError, m as readStringParam } from "./target-errors-C638yp2-.js";
24
- import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-DzZIT1V1.js";
25
- import { r as sendReactionWhatsApp } from "./outbound-dAcQHyyr.js";
21
+ import "./tables-CMdQECje.js";
22
+ import "./tool-images-DCvC8yL7.js";
23
+ import { a as createActionGate, c as jsonResult, d as readReactionParams, i as ToolAuthorizationError, m as readStringParam } from "./target-errors-CrR2lAF7.js";
24
+ import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-CP7QDN14.js";
25
+ import { r as sendReactionWhatsApp } from "./outbound-Co1QSkdS.js";
26
26
 
27
27
  //#region src/agents/tools/whatsapp-target-auth.ts
28
28
  function resolveAuthorizedWhatsAppOutboundTarget(params) {
@@ -7,7 +7,7 @@ import "./github-copilot-token-ttqQRqMA.js";
7
7
  import { r as formatCliCommand } from "./env-DulyEJtM.js";
8
8
  import "./config-KL7847B1.js";
9
9
  import "./manifest-registry-sze5OW-s.js";
10
- import { _ as fetchJson, b as withCdpSocket, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as getHeadersWithAuth } from "./chrome-CZuniMYN.js";
10
+ import { _ as fetchJson, b as withCdpSocket, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as getHeadersWithAuth } from "./chrome-lRUqqgSD.js";
11
11
  import "./redact-1NGYV_8p.js";
12
12
  import { n as formatErrorMessage } from "./errors-CPfngF0S.js";
13
13
  import "./ssrf-CxfFyMRZ.js";
@@ -9,7 +9,7 @@ import "./model-auth-vtNH8C4P.js";
9
9
  import "./github-copilot-token-Dgb9dAHW.js";
10
10
  import "./config-Du_-inxH.js";
11
11
  import "./manifest-registry-Dhk4A5vb.js";
12
- import { _ as fetchJson, b as withCdpSocket, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as getHeadersWithAuth } from "./chrome-Bqbv_ZSj.js";
12
+ import { _ as fetchJson, b as withCdpSocket, d as normalizeCdpWsUrl, g as appendCdpPath, h as withBrowserNavigationPolicy, m as assertBrowserNavigationAllowed, t as getChromeWebSocketUrl, u as formatAriaSnapshot, y as getHeadersWithAuth } from "./chrome-BAv9fEiv.js";
13
13
  import "./redact-jSxx6Ep2.js";
14
14
  import { n as formatErrorMessage } from "./errors-BoQgnc8X.js";
15
15
  import "./ssrf-BTMDZjHT.js";
@@ -4,7 +4,7 @@ import { t as normalizeChatType } from "./chat-type-C_KiWNAH.js";
4
4
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-BGmpOcey.js";
5
5
  import { A as normalizeProviderId, L as normalizeGoogleModelId, i as resolveApiKeyForProvider, r as requireApiKey, y as resolveOpenClawAgentDir } from "./model-auth-vtNH8C4P.js";
6
6
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-Du_-inxH.js";
7
- import { S as ensureOpenClawModelsJson, t as describeImageWithModel } from "./image-CxPjVob-.js";
7
+ import { S as ensureOpenClawModelsJson, t as describeImageWithModel } from "./image-Ci28h-op.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-A2JaRMHH.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-DL3f_O53.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-JqlMsAYY.js";
@@ -4,7 +4,7 @@ import { G as resolveOpenClawAgentDir, T as resolveApiKeyForProvider, c as norma
4
4
  import { t as normalizeChatType } from "./chat-type-DFDuk3FY.js";
5
5
  import { _ as kindFromMime, d as detectMime, h as isAudioFileName, p as getFileExtension } from "./image-ops-BfqdVNxh.js";
6
6
  import { d as DEFAULT_IMESSAGE_ATTACHMENT_ROOTS, f as isInboundPathAllowed, m as resolveIMessageAttachmentRoots, n as loadConfig, p as mergeInboundPathRoots } from "./config-KL7847B1.js";
7
- import { S as ensureOpenClawModelsJson, t as describeImageWithModel } from "./image-88q3KE-C.js";
7
+ import { S as ensureOpenClawModelsJson, t as describeImageWithModel } from "./image--DDZnw-F.js";
8
8
  import { n as collectProviderApiKeysForExecution, r as executeWithApiKeyRotation, t as parseGeminiAuth } from "./gemini-auth-BF6ZCNOV.js";
9
9
  import { n as fetchWithTimeout } from "./fetch-timeout-BheTNyes.js";
10
10
  import { i as fetchRemoteMedia, n as getDefaultMediaLocalRoots, o as fetchWithSsrFGuard, r as MediaFetchError } from "./local-roots-C4BHj9W8.js";
@@ -5,7 +5,7 @@ import "./agent-scope-DSUeV7-g.js";
5
5
  import { r as defaultRuntime, t as createSubsystemLogger } from "./subsystem-BF9jT_Nw.js";
6
6
  import "./workspace-DYx5Dxtw.js";
7
7
  import "./tokens-B-c56SkM.js";
8
- import { C as resolveEnvelopeFormatOptions, D as normalizeMentionText, E as buildMentionRegexes, S as formatInboundEnvelope, T as shouldComputeCommandAuthorized, _ as parseActivationCommand, b as createInboundDebouncer, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as normalizeGroupActivation, h as getReplyFromConfig, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as formatDurationPrecise, w as hasControlCommand, x as resolveInboundDebounceMs, y as enqueueSystemEvent } from "./pi-embedded-Dz24QZz9.js";
8
+ import { C as resolveEnvelopeFormatOptions, D as normalizeMentionText, E as buildMentionRegexes, S as formatInboundEnvelope, T as shouldComputeCommandAuthorized, _ as parseActivationCommand, b as createInboundDebouncer, c as DEFAULT_GROUP_HISTORY_LIMIT, d as shouldAckReactionForWhatsApp, f as dispatchReplyWithBufferedBlockDispatcher, g as normalizeGroupActivation, h as getReplyFromConfig, l as buildHistoryContextFromEntries, m as createDedupeCache, n as computeBackoff, o as buildPairingReply, r as sleepWithAbort, s as resolveMentionGating, u as recordPendingHistoryEntryIfEnabled, v as formatDurationPrecise, w as hasControlCommand, x as resolveInboundDebounceMs, y as enqueueSystemEvent } from "./pi-embedded-CoxlOLW5.js";
9
9
  import "./plugins-DIrNa311.js";
10
10
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-C8m4ADkw.js";
11
11
  import "./boolean-B8-BqKGQ.js";
@@ -13,7 +13,7 @@ import { t as formatCliCommand } from "./command-format-BOHIfoCX.js";
13
13
  import "./bindings-BKEEBdsb.js";
14
14
  import "./send-Byt_wJDK.js";
15
15
  import "./send-BEFzSOoD.js";
16
- import "./deliver-CKH_FhS0.js";
16
+ import "./deliver-CLJRPnfx.js";
17
17
  import "./diagnostic-DriDPU6M.js";
18
18
  import "./diagnostic-session-state-Bxo4UHOL.js";
19
19
  import "./accounts-CQT5u65w.js";
@@ -23,10 +23,10 @@ import "./model-auth-vtNH8C4P.js";
23
23
  import "./github-copilot-token-Dgb9dAHW.js";
24
24
  import "./pi-model-discovery-DaNAekda.js";
25
25
  import "./message-channel-CHYSjmbr.js";
26
- import { Ct as resolveGroupSessionKey, G as updateLastRoute, H as loadSessionStore, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-CSE0v99A.js";
26
+ import { Ct as resolveGroupSessionKey, G as updateLastRoute, H as loadSessionStore, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-Ll4Lztu1.js";
27
27
  import { n as loadConfig } from "./config-Du_-inxH.js";
28
28
  import "./manifest-registry-Dhk4A5vb.js";
29
- import "./chrome-Bqbv_ZSj.js";
29
+ import "./chrome-BAv9fEiv.js";
30
30
  import "./frontmatter-CdkBcBAo.js";
31
31
  import "./skills-DSZuhFx9.js";
32
32
  import "./redact-jSxx6Ep2.js";
@@ -37,7 +37,7 @@ import { h as resolveChannelGroupRequireMention, m as resolveChannelGroupPolicy
37
37
  import "./accounts-DFrH9IVU.js";
38
38
  import { s as resolveStorePath } from "./paths-BEAbheM8.js";
39
39
  import "./tool-images-C1rdDr34.js";
40
- import "./image-CxPjVob-.js";
40
+ import "./image-Ci28h-op.js";
41
41
  import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createReplyPrefixOptions } from "./reply-prefix-DZrS3Kf7.js";
42
42
  import "./manager-D7SRrHxT.js";
43
43
  import "./gemini-auth-A2JaRMHH.js";
@@ -52,7 +52,7 @@ import "./render-CDCvpfhh.js";
52
52
  import "./commands-registry-BzlB3qtZ.js";
53
53
  import "./skill-commands-CqyVDpti.js";
54
54
  import { t as finalizeInboundContext } from "./inbound-context-BlHX0H3E.js";
55
- import { p as registerUnhandledRejectionHandler } from "./runner-D1eXJZ8T.js";
55
+ import { p as registerUnhandledRejectionHandler } from "./runner-ChBxge-W.js";
56
56
  import "./fetch-DtI0mtzx.js";
57
57
  import { n as recordChannelActivity } from "./channel-activity-BgsTqLau.js";
58
58
  import { t as convertMarkdownTables } from "./tables-C3clT_iA.js";
@@ -8,13 +8,13 @@ import { c as resolveIdentityNamePrefix, l as resolveMessagePrefix, t as createR
8
8
  import "./github-copilot-token-ttqQRqMA.js";
9
9
  import { r as formatCliCommand } from "./env-DulyEJtM.js";
10
10
  import "./tokens-DnMmat9I.js";
11
- import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as enqueueSystemEvent, a as resolveMentionGating, b as formatInboundEnvelope, c as recordPendingHistoryEntryIfEnabled, f as createDedupeCache, g as formatDurationPrecise, h as parseActivationCommand, i as buildPairingReply, l as shouldAckReactionForWhatsApp, m as normalizeGroupActivation, n as computeBackoff, o as DEFAULT_GROUP_HISTORY_LIMIT, p as getReplyFromConfig, r as sleepWithAbort, s as buildHistoryContextFromEntries, u as dispatchReplyWithBufferedBlockDispatcher, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-ZvazjIyF.js";
11
+ import { C as shouldComputeCommandAuthorized, S as hasControlCommand, T as normalizeMentionText, _ as enqueueSystemEvent, a as resolveMentionGating, b as formatInboundEnvelope, c as recordPendingHistoryEntryIfEnabled, f as createDedupeCache, g as formatDurationPrecise, h as parseActivationCommand, i as buildPairingReply, l as shouldAckReactionForWhatsApp, m as normalizeGroupActivation, n as computeBackoff, o as DEFAULT_GROUP_HISTORY_LIMIT, p as getReplyFromConfig, r as sleepWithAbort, s as buildHistoryContextFromEntries, u as dispatchReplyWithBufferedBlockDispatcher, v as createInboundDebouncer, w as buildMentionRegexes, x as resolveEnvelopeFormatOptions, y as resolveInboundDebounceMs } from "./pi-embedded-C_B8_quB.js";
12
12
  import "./plugins-B90TBXkV.js";
13
13
  import { i as logWebSelfId, l as readWebSelfId, n as WA_WEB_AUTH_DIR, p as webAuthExists, r as getWebAuthAgeMs, s as pickWebChannel, t as resolveWhatsAppAccount } from "./accounts-Cxza2UXO.js";
14
14
  import "./bindings-q3EHMdG1.js";
15
15
  import "./send-Chks8Sx_.js";
16
16
  import "./send-D4cCHXzJ.js";
17
- import "./deliver-0ThKlzQo.js";
17
+ import "./deliver-B2d2N8OJ.js";
18
18
  import "./diagnostic-DzmNBZt3.js";
19
19
  import "./diagnostic-session-state-C1vRJs5w.js";
20
20
  import "./accounts-sr0G5UOe.js";
@@ -22,10 +22,10 @@ import { G as formatLocationText, J as readChannelAllowFromStore, K as toLocatio
22
22
  import "./image-ops-BfqdVNxh.js";
23
23
  import "./pi-model-discovery-j5tVLINv.js";
24
24
  import "./message-channel-DNOtJsL1.js";
25
- import { Ct as resolveGroupSessionKey, H as loadSessionStore, K as updateLastRoute, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-B0Kht0I2.js";
25
+ import { Ct as resolveGroupSessionKey, H as loadSessionStore, K as updateLastRoute, U as readSessionUpdatedAt, W as recordSessionMetaFromInbound } from "./pi-embedded-helpers-Cd0S0WfR.js";
26
26
  import { n as loadConfig } from "./config-KL7847B1.js";
27
27
  import "./manifest-registry-sze5OW-s.js";
28
- import "./chrome-CZuniMYN.js";
28
+ import "./chrome-lRUqqgSD.js";
29
29
  import "./skills-DGNBryo1.js";
30
30
  import "./redact-1NGYV_8p.js";
31
31
  import "./errors-CPfngF0S.js";
@@ -35,7 +35,7 @@ import { h as resolveChannelGroupRequireMention, m as resolveChannelGroupPolicy
35
35
  import "./accounts-DAZL5b5o.js";
36
36
  import { s as resolveStorePath } from "./paths-5iQF9bSz.js";
37
37
  import "./tool-images-TQiVqsOc.js";
38
- import "./image-88q3KE-C.js";
38
+ import "./image--DDZnw-F.js";
39
39
  import "./manager-CsXJuzK4.js";
40
40
  import "./gemini-auth-BF6ZCNOV.js";
41
41
  import "./sqlite-CmTvWxxq.js";
@@ -49,7 +49,7 @@ import "./render-B1VqYyvo.js";
49
49
  import "./commands-registry-DEXQtgBS.js";
50
50
  import "./skill-commands-CGvIAIiQ.js";
51
51
  import { t as finalizeInboundContext } from "./inbound-context-QOi5vzUt.js";
52
- import { p as registerUnhandledRejectionHandler } from "./runner-a43IsYad.js";
52
+ import { p as registerUnhandledRejectionHandler } from "./runner-Dq-qfrq7.js";
53
53
  import "./fetch-BMa0enEg.js";
54
54
  import { n as recordChannelActivity } from "./channel-activity-7fb2OxTV.js";
55
55
  import { t as convertMarkdownTables } from "./tables-Ds9lRo34.js";
@@ -4,6 +4,8 @@
4
4
  "description": "OpenClaw voice-call plugin",
5
5
  "type": "module",
6
6
  "dependencies": {
7
+ "@openai/agents": "^0.8.1",
8
+ "@openai/agents-extensions": "^0.8.1",
7
9
  "@sinclair/typebox": "0.34.48",
8
10
  "ws": "^8.19.0",
9
11
  "zod": "^4.3.6"
@@ -213,8 +213,8 @@ export const VoiceCallStreamingConfigSchema = z
213
213
  openaiApiKey: z.string().min(1).optional(),
214
214
  /** OpenAI transcription model (default: gpt-4o-transcribe) */
215
215
  sttModel: z.string().min(1).default("gpt-4o-transcribe"),
216
- /** VAD silence duration in ms before considering speech ended */
217
- silenceDurationMs: z.number().int().positive().default(800),
216
+ /** VAD silence duration in ms before considering speech ended (lower = snappier turn detection) */
217
+ silenceDurationMs: z.number().int().positive().default(500),
218
218
  /** VAD threshold 0-1 (higher = less sensitive) */
219
219
  vadThreshold: z.number().min(0).max(1).default(0.5),
220
220
  /** WebSocket path for media stream connections */
@@ -225,7 +225,7 @@ export const VoiceCallStreamingConfigSchema = z
225
225
  enabled: false,
226
226
  sttProvider: "openai-realtime",
227
227
  sttModel: "gpt-4o-transcribe",
228
- silenceDurationMs: 800,
228
+ silenceDurationMs: 500,
229
229
  vadThreshold: 0.5,
230
230
  streamPath: "/voice/stream",
231
231
  });
@@ -331,6 +331,19 @@ export const VoiceCallConfigSchema = z
331
331
 
332
332
  /** Timeout for response generation in ms (default 30s) */
333
333
  responseTimeoutMs: z.number().int().positive().default(30000),
334
+
335
+ /**
336
+ * Response mode:
337
+ * - "embedded": Use the embedded Pi agent (STT → LLM → TTS chain). Full tool support but higher latency.
338
+ * - "realtime": Use OpenAI Realtime API for native speech-to-speech. Much lower latency (~200-500ms).
339
+ */
340
+ responseMode: z.enum(["embedded", "realtime"]).default("embedded"),
341
+
342
+ /** Model for realtime speech-to-speech mode (only used when responseMode is "realtime") */
343
+ realtimeModel: z.string().default("gpt-4o-realtime-preview"),
344
+
345
+ /** Voice for realtime mode (only used when responseMode is "realtime") */
346
+ realtimeVoice: z.string().default("verse"),
334
347
  })
335
348
  .strict();
336
349