@runtypelabs/persona 4.24.0 → 4.26.0

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 (237) hide show
  1. package/dist/animations/glyph-cycle.d.cts +1 -1
  2. package/dist/animations/glyph-cycle.d.ts +1 -1
  3. package/dist/animations/{types-Db61aI9J.d.cts → types-BwKTZhg9.d.cts} +14 -0
  4. package/dist/animations/{types-Db61aI9J.d.ts → types-BwKTZhg9.d.ts} +14 -0
  5. package/dist/animations/wipe.d.cts +1 -1
  6. package/dist/animations/wipe.d.ts +1 -1
  7. package/dist/animations-extra.d.cts +14 -0
  8. package/dist/animations-extra.d.ts +14 -0
  9. package/dist/approval-ui-QAKWNFNM.js +1 -0
  10. package/dist/approval-ui.cjs +2 -2
  11. package/dist/approval-ui.d.cts +243 -8
  12. package/dist/approval-ui.d.ts +243 -8
  13. package/dist/approval-ui.js +2 -2
  14. package/dist/{artifacts-ui-IGB5YKLO.js → artifacts-ui-NJGMM27I.js} +1 -1
  15. package/dist/artifacts-ui.cjs +4 -4
  16. package/dist/artifacts-ui.d.cts +243 -8
  17. package/dist/artifacts-ui.d.ts +243 -8
  18. package/dist/artifacts-ui.js +5 -5
  19. package/dist/chunk-2ANTRKTV.js +1 -0
  20. package/dist/chunk-4HPTPUC6.js +1 -0
  21. package/dist/chunk-6V3MNEKB.js +1 -0
  22. package/dist/chunk-HGUCGM3K.js +9 -0
  23. package/dist/chunk-IO5VVUKP.js +3 -0
  24. package/dist/chunk-J4J3Y2P2.js +1 -0
  25. package/dist/chunk-K6HKIP5K.js +1 -0
  26. package/dist/chunk-K7NA7G7J.js +1 -0
  27. package/dist/chunk-MXUTS3LB.js +1 -0
  28. package/dist/chunk-PDPVORUF.js +1 -0
  29. package/dist/chunk-QPPJUSZH.js +1 -0
  30. package/dist/chunk-QRKGQPU7.js +1 -0
  31. package/dist/chunk-S6PBWE75.js +1 -0
  32. package/dist/chunk-T7QM7YMF.js +1 -0
  33. package/dist/chunk-TR2H475E.js +1 -0
  34. package/dist/chunk-UPO4GUFC.js +1 -0
  35. package/dist/chunk-ZC66NAIR.js +1 -0
  36. package/dist/client-history-YPEG45Q4.js +1 -0
  37. package/dist/client-history.js +1 -0
  38. package/dist/client-stream-42FOI3EC.js +4 -0
  39. package/dist/client-stream.js +5 -0
  40. package/dist/codegen.cjs +1 -1
  41. package/dist/codegen.js +1 -1
  42. package/dist/context-mentions-E7HJYWO6.js +161 -0
  43. package/dist/{context-mentions-inline-I2RDEBAK.js → context-mentions-inline-QVESLW55.js} +1 -1
  44. package/dist/context-mentions.cjs +7 -7
  45. package/dist/context-mentions.d.cts +243 -8
  46. package/dist/context-mentions.d.ts +243 -8
  47. package/dist/context-mentions.js +8 -8
  48. package/dist/event-stream-view-FOIJHFQO.js +1 -0
  49. package/dist/event-stream-view.cjs +1 -1
  50. package/dist/event-stream-view.d.cts +246 -31
  51. package/dist/event-stream-view.d.ts +246 -31
  52. package/dist/event-stream-view.js +1 -1
  53. package/dist/forms-ui.d.cts +295 -667
  54. package/dist/forms-ui.d.ts +295 -667
  55. package/dist/history-shell-QDQ44PSE.js +3 -0
  56. package/dist/history-shell.js +3 -0
  57. package/dist/{history-view-BD6OXLNA.js → history-view-NCFBI5GR.js} +2 -2
  58. package/dist/history-view.cjs +2 -2
  59. package/dist/history-view.d.cts +35 -1
  60. package/dist/history-view.d.ts +35 -1
  61. package/dist/history-view.js +2 -2
  62. package/dist/index.cjs +80 -74
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.cts +301 -738
  65. package/dist/index.d.ts +301 -738
  66. package/dist/index.global.js +3 -215
  67. package/dist/index.global.js.map +1 -1
  68. package/dist/index.js +81 -75
  69. package/dist/index.js.map +1 -1
  70. package/dist/install.global.js +1 -1
  71. package/dist/install.global.js.map +1 -1
  72. package/dist/launcher.global.js +3 -67
  73. package/dist/launcher.global.js.map +1 -1
  74. package/dist/markdown-parsers.js +22 -22
  75. package/dist/runtype-tts-entry-NFBVWR7N.js +1 -0
  76. package/dist/runtype-tts.js +1 -1
  77. package/dist/session-actions-ISSKSI66.js +1 -0
  78. package/dist/session-actions.js +1 -0
  79. package/dist/session-reconnect.d.cts +243 -8
  80. package/dist/session-reconnect.d.ts +243 -8
  81. package/dist/smart-dom-reader.cjs +13 -13
  82. package/dist/smart-dom-reader.d.cts +243 -8
  83. package/dist/smart-dom-reader.d.ts +243 -8
  84. package/dist/smart-dom-reader.js +11 -11
  85. package/dist/theme-editor-preview.cjs +116 -98
  86. package/dist/theme-editor-preview.d.cts +245 -8
  87. package/dist/theme-editor-preview.d.ts +245 -8
  88. package/dist/theme-editor-preview.js +49 -54
  89. package/dist/theme-editor.cjs +2 -2
  90. package/dist/theme-editor.d.cts +244 -23
  91. package/dist/theme-editor.d.ts +244 -23
  92. package/dist/theme-editor.js +2 -2
  93. package/dist/theme-reference.d.cts +14 -0
  94. package/dist/theme-reference.d.ts +14 -0
  95. package/dist/ui-extras-entry-WAYFKVNW.js +3 -0
  96. package/dist/ui-extras.js +72 -0
  97. package/dist/voice-runtime-UOQOFAFY.js +17 -0
  98. package/dist/voice-runtime.cjs +17 -1
  99. package/dist/voice-runtime.d.cts +11643 -192
  100. package/dist/voice-runtime.d.ts +11643 -192
  101. package/dist/voice-runtime.js +17 -1
  102. package/dist/voice-worklet-player.cjs +19 -4
  103. package/dist/voice-worklet-player.d.cts +9 -10
  104. package/dist/voice-worklet-player.d.ts +9 -10
  105. package/dist/voice-worklet-player.js +19 -4
  106. package/dist/webmcp-polyfill.js +1 -1
  107. package/dist/webmcp-runtime-V6ZWW3PI.js +6 -0
  108. package/dist/webmcp-runtime.cjs +2 -2
  109. package/dist/webmcp-runtime.d.cts +1 -33
  110. package/dist/webmcp-runtime.d.ts +1 -33
  111. package/dist/webmcp-runtime.js +2 -2
  112. package/dist/widget.css +1 -1
  113. package/package.json +11 -5
  114. package/src/approval-paused-tool-settle.test.ts +221 -0
  115. package/src/client-approve.test.ts +311 -0
  116. package/src/client-history-eager.ts +9 -0
  117. package/src/client-history-loader.ts +23 -0
  118. package/src/client-history.ts +579 -0
  119. package/src/client-resume.ts +177 -0
  120. package/src/client-stream-eager.ts +12 -0
  121. package/src/client-stream-loader.ts +25 -0
  122. package/src/client-stream.ts +1880 -0
  123. package/src/client.test.ts +31 -1
  124. package/src/client.ts +293 -2607
  125. package/src/components/approval-actions.test.ts +27 -0
  126. package/src/components/approval-actions.ts +27 -3
  127. package/src/components/message-bubble.test.ts +19 -0
  128. package/src/components/message-bubble.ts +2 -0
  129. package/src/components/registry.ts +6 -6
  130. package/src/components/tool-bubble.test.ts +9 -0
  131. package/src/components/tool-bubble.ts +1 -0
  132. package/src/history-shell-bundle.test.ts +54 -0
  133. package/src/history-shell-eager.ts +12 -0
  134. package/src/history-shell-loader.ts +27 -0
  135. package/src/history-shell.ts +2362 -0
  136. package/src/history-view-loader.ts +2 -0
  137. package/src/history-view.ts +3 -0
  138. package/src/index-core.ts +8 -0
  139. package/src/index-global.ts +90 -248
  140. package/src/index.ts +13 -0
  141. package/src/install.ts +6 -4
  142. package/src/internal/runtype-history-provider.test.ts +1 -0
  143. package/src/internal/runtype-history-provider.ts +28 -13
  144. package/src/plugins/registry.ts +8 -8
  145. package/src/session-actions-chunk.test.ts +55 -0
  146. package/src/session-actions-eager.ts +11 -0
  147. package/src/session-actions-loader.ts +37 -0
  148. package/src/session-actions.ts +909 -0
  149. package/src/session-history.test.ts +3 -1
  150. package/src/session.ts +875 -1530
  151. package/src/session.voice.test.ts +1241 -5
  152. package/src/styles/widget.css +58 -0
  153. package/src/theme-editor/state.ts +91 -91
  154. package/src/types.ts +269 -5
  155. package/src/ui-ask-user-sheet.ts +382 -0
  156. package/src/ui-extras-eager.ts +10 -0
  157. package/src/ui-extras-entry.ts +9 -0
  158. package/src/ui-extras-loader.ts +26 -0
  159. package/src/ui.artifact-rail-resize.test.ts +2 -1
  160. package/src/ui.ask-user-chunk.test.ts +93 -0
  161. package/src/ui.history-chunk.test.ts +2 -1
  162. package/src/ui.history-config-provider.test.ts +2 -1
  163. package/src/ui.history-confirm-fallback.test.ts +142 -0
  164. package/src/ui.history-controller.test.ts +2 -1
  165. package/src/ui.history-lifecycle.test.ts +2 -1
  166. package/src/ui.history-render-hooks.test.ts +2 -1
  167. package/src/ui.history-shell.test.ts +2 -1
  168. package/src/ui.rail-overlay.test.ts +2 -1
  169. package/src/ui.rail-resize.test.ts +2 -1
  170. package/src/ui.rail-trigger-pending.test.ts +2 -1
  171. package/src/ui.ts +399 -2770
  172. package/src/ui.voice-prewarm.test.ts +222 -0
  173. package/src/utils/attachment-manager.ts +67 -67
  174. package/src/utils/constants.ts +3 -0
  175. package/src/utils/context-mention-controller.ts +323 -323
  176. package/src/utils/context-mention-manager.ts +40 -40
  177. package/src/utils/context-mention-orchestrator.ts +28 -0
  178. package/src/utils/event-stream-buffer.ts +50 -50
  179. package/src/utils/event-stream-store.ts +43 -43
  180. package/src/utils/throughput-tracker.ts +34 -34
  181. package/src/utils/virtual-scroller.ts +67 -67
  182. package/src/utils/visitor-store.test.ts +50 -0
  183. package/src/utils/visitor-store.ts +23 -5
  184. package/src/voice/__fixtures__/voice-wire/README.md +1 -0
  185. package/src/voice/__fixtures__/voice-wire/client/cancel.json +3 -0
  186. package/src/voice/__fixtures__/voice-wire/client/context.json +4 -0
  187. package/src/voice/__fixtures__/voice-wire/client/delegation_result.json +6 -0
  188. package/src/voice/__fixtures__/voice-wire/client/delegation_update.json +6 -0
  189. package/src/voice/__fixtures__/voice-wire/client/ping.json +3 -0
  190. package/src/voice/__fixtures__/voice-wire/client/playback_progress.json +5 -0
  191. package/src/voice/__fixtures__/voice-wire/client/start.json +3 -0
  192. package/src/voice/__fixtures__/voice-wire/server/artifact.json +11 -0
  193. package/src/voice/__fixtures__/voice-wire/server/attached.json +4 -0
  194. package/src/voice/__fixtures__/voice-wire/server/audio_clear.json +4 -0
  195. package/src/voice/__fixtures__/voice-wire/server/audio_end.json +3 -0
  196. package/src/voice/__fixtures__/voice-wire/server/delegation_cancelled.json +5 -0
  197. package/src/voice/__fixtures__/voice-wire/server/delegation_completed.json +8 -0
  198. package/src/voice/__fixtures__/voice-wire/server/delegation_started.json +15 -0
  199. package/src/voice/__fixtures__/voice-wire/server/error.json +6 -0
  200. package/src/voice/__fixtures__/voice-wire/server/metrics.json +10 -0
  201. package/src/voice/__fixtures__/voice-wire/server/pong.json +3 -0
  202. package/src/voice/__fixtures__/voice-wire/server/session_config.json +16 -0
  203. package/src/voice/__fixtures__/voice-wire/server/transcript_final.json +7 -0
  204. package/src/voice/__fixtures__/voice-wire/server/transcript_interim.json +4 -0
  205. package/src/voice/__fixtures__/voice-wire/server/transcript_partial.json +6 -0
  206. package/src/voice/__fixtures__/voice-wire/server/transcript_update.json +10 -0
  207. package/src/voice/__fixtures__/voice-wire/server/warning.json +5 -0
  208. package/src/voice/audio-playback-manager.test.ts +57 -0
  209. package/src/voice/audio-playback-manager.ts +120 -98
  210. package/src/voice/browser-voice-provider.ts +37 -37
  211. package/src/voice/fallback-speech-engine.ts +22 -16
  212. package/src/voice/keyed-voice-transcript.ts +314 -0
  213. package/src/voice/mic-state-styles.ts +182 -0
  214. package/src/voice/read-aloud-controller.ts +46 -44
  215. package/src/voice/runtype-speech-engine.ts +35 -33
  216. package/src/voice/runtype-voice-provider.ts +856 -164
  217. package/src/voice/session-voice-wiring.ts +266 -0
  218. package/src/voice/voice-delegation.test.ts +71 -0
  219. package/src/voice/voice-delegation.ts +364 -0
  220. package/src/voice/voice-turn-tracker.ts +6 -6
  221. package/src/voice/voice.test.ts +1250 -7
  222. package/src/voice/worklet-playback-engine.test.ts +81 -0
  223. package/src/voice/worklet-playback-engine.ts +21 -3
  224. package/src/voice-runtime-loader.ts +4 -1
  225. package/src/voice-runtime.ts +7 -0
  226. package/src/webmcp-runtime-entry.ts +41 -39
  227. package/dist/approval-ui-3NMYNXBD.js +0 -1
  228. package/dist/chunk-5EIIHQLQ.js +0 -1
  229. package/dist/chunk-7CO4T5KB.js +0 -1
  230. package/dist/chunk-EFJBUH5F.js +0 -1
  231. package/dist/chunk-R2TMIMDI.js +0 -3
  232. package/dist/chunk-UTVLOTWB.js +0 -9
  233. package/dist/context-mentions-45MODWOY.js +0 -161
  234. package/dist/event-stream-view-GL3ADRY2.js +0 -1
  235. package/dist/runtype-tts-entry-UJAEF7NZ.js +0 -1
  236. package/dist/voice-runtime-EFR3R5ES.js +0 -1
  237. package/dist/webmcp-runtime-JI7T4QYF.js +0 -6
@@ -2375,6 +2375,11 @@ type AgentWidgetToolCall = {
2375
2375
  startedAt?: number;
2376
2376
  completedAt?: number;
2377
2377
  durationMs?: number;
2378
+ /**
2379
+ * The call paused for an approval that was granted, and the agent re-ran it
2380
+ * as a new tool call: that later call carries the result, this one has none.
2381
+ */
2382
+ superseded?: boolean;
2378
2383
  };
2379
2384
  /**
2380
2385
  * Represents a tool approval request in the chat conversation.
@@ -2396,6 +2401,8 @@ type AgentWidgetApproval = {
2396
2401
  */
2397
2402
  reason?: string;
2398
2403
  parameters?: unknown;
2404
+ /** The paused tool call this approval gates (`approval_start.toolCallId`). */
2405
+ toolCallId?: string;
2399
2406
  resolvedAt?: number;
2400
2407
  };
2401
2408
  type AgentWidgetMessageVariant = "assistant" | "reasoning" | "tool" | "approval";
@@ -2495,6 +2502,13 @@ type AgentWidgetMessage = {
2495
2502
  * }
2496
2503
  */
2497
2504
  voiceProcessing?: boolean;
2505
+ /**
2506
+ * Display-only caption of full-duplex voice speech, such as the voice
2507
+ * model's own words, or something the visitor said that wasn't submitted
2508
+ * as a chat turn. It renders in the transcript but is never sent to the
2509
+ * model as conversation.
2510
+ */
2511
+ voiceCaption?: boolean;
2498
2512
  /**
2499
2513
  * Raw structured payload for this message (e.g., JSON action response).
2500
2514
  * Populated automatically when structured parsers run.
@@ -2375,6 +2375,11 @@ type AgentWidgetToolCall = {
2375
2375
  startedAt?: number;
2376
2376
  completedAt?: number;
2377
2377
  durationMs?: number;
2378
+ /**
2379
+ * The call paused for an approval that was granted, and the agent re-ran it
2380
+ * as a new tool call: that later call carries the result, this one has none.
2381
+ */
2382
+ superseded?: boolean;
2378
2383
  };
2379
2384
  /**
2380
2385
  * Represents a tool approval request in the chat conversation.
@@ -2396,6 +2401,8 @@ type AgentWidgetApproval = {
2396
2401
  */
2397
2402
  reason?: string;
2398
2403
  parameters?: unknown;
2404
+ /** The paused tool call this approval gates (`approval_start.toolCallId`). */
2405
+ toolCallId?: string;
2399
2406
  resolvedAt?: number;
2400
2407
  };
2401
2408
  type AgentWidgetMessageVariant = "assistant" | "reasoning" | "tool" | "approval";
@@ -2495,6 +2502,13 @@ type AgentWidgetMessage = {
2495
2502
  * }
2496
2503
  */
2497
2504
  voiceProcessing?: boolean;
2505
+ /**
2506
+ * Display-only caption of full-duplex voice speech, such as the voice
2507
+ * model's own words, or something the visitor said that wasn't submitted
2508
+ * as a chat turn. It renders in the transcript but is never sent to the
2509
+ * model as conversation.
2510
+ */
2511
+ voiceCaption?: boolean;
2498
2512
  /**
2499
2513
  * Raw structured payload for this message (e.g., JSON action response).
2500
2514
  * Populated automatically when structured parsers run.
@@ -0,0 +1,3 @@
1
+ import{Q as K,R as N,S as j,T as z}from"./chunk-T7QM7YMF.js";import{e as Q}from"./chunk-ZC66NAIR.js";import"./chunk-S6PBWE75.js";import{e as R,f as v,g as U,h as T,i as I,k as L,l as B,m as h,n as H}from"./chunk-K7NA7G7J.js";import"./chunk-2ANTRKTV.js";import{a as F}from"./chunk-PDPVORUF.js";import"./chunk-7NQ4ZTHF.js";import{c as W}from"./chunk-76IELU7F.js";import{a as q,b as D}from"./chunk-IO5VVUKP.js";var $=l=>{let{mount:A,overlay:E,sessionRef:c}=l,C=(a,p,t)=>{let e=p.trim();if(!e||!c.current)return;let i=a.getAttribute("data-tool-call-id")??"",r=t.source==="free-text";A.dispatchEvent(new CustomEvent("persona:askUserQuestion:answered",{detail:{toolUseId:i,answer:e,answers:t.structured,values:t.values??(t.source==="multi"?e.split(", "):[e]),isFreeText:r,source:t.source},bubbles:!0,composed:!0})),L(E,i);let s=c.current.getMessages().find(g=>g.toolCall?.id===i);s?.agentMetadata?.awaitingLocalTool?c.current.resolveAskUserQuestion(s,t.structured??e):c.current.sendMessage(e)},f=a=>{let p=c.current;if(!p)return;let t=a.getAttribute("data-tool-call-id")??"",e=p.getMessages().find(i=>i.toolCall?.id===t);e&&p.persistAskUserQuestionProgress(e,{answers:I(a,e),currentIndex:v(a)})},b=a=>Object.entries(a).map(([p,t])=>`${p}: ${Array.isArray(t)?t.join(", "):t}`).join(" | "),w=a=>{if(l.config().features?.askUserQuestion?.groupedAutoAdvance===!1)return;let p=v(a),t=U(a);if(p>=t-1)return;let e=c.current?.getMessages().find(i=>i.toolCall?.id===a.getAttribute("data-tool-call-id"));e&&(H(a,e,l.config(),p+1),f(a))};return{click:a=>{let t=a.target.closest("[data-ask-user-action]");if(!t)return;let e=t.closest("[data-persona-ask-sheet-for]");if(!e)return;let i=t.getAttribute("data-ask-user-action");if(a.preventDefault(),a.stopPropagation(),i==="dismiss"){let r=e.getAttribute("data-tool-call-id")??"";A.dispatchEvent(new CustomEvent("persona:askUserQuestion:dismissed",{detail:{toolUseId:r},bubbles:!0,composed:!0})),L(E,r);let s=c.current?.getMessages().find(g=>g.toolCall?.id===r);s?.agentMetadata?.awaitingLocalTool&&(c.current?.markAskUserQuestionResolved(s),c.current?.resolveAskUserQuestion(s,"(dismissed)"));return}if(i==="pick"){let r=t.getAttribute("data-option-label");if(!r)return;let s=e.getAttribute("data-multi-select")==="true",g=T(e);if(g&&s){let u=R(e)[v(e)],d=new Set(Array.isArray(u)?u:[]);d.has(r)?d.delete(r):d.add(r),h(e,Array.from(d)),f(e);return}if(g){h(e,r),f(e),w(e);return}if(s){let u=t.getAttribute("aria-pressed")==="true";t.setAttribute("aria-pressed",u?"false":"true"),t.classList.toggle("persona-ask-pill-selected",!u);let d=e.querySelector('[data-ask-user-action="submit-multi"]');d&&(d.disabled=B(e).length===0);return}C(e,r,{source:"pick",values:[r]});return}if(i==="submit-multi"){let r=B(e);if(r.length===0)return;C(e,r.join(", "),{source:"multi",values:r});return}if(i==="open-free-text"){let r=e.querySelector('[data-ask-free-text-row="true"]');r&&(r.classList.remove("persona-hidden"),r.querySelector('[data-ask-free-text-input="true"]')?.focus());return}if(i==="focus-free-text"){e.querySelector('[data-ask-free-text-input="true"]')?.focus();return}if(i==="submit-free-text"){let s=e.querySelector('[data-ask-free-text-input="true"]')?.value??"";if(!s.trim())return;if(T(e)){h(e,s.trim()),f(e),w(e);return}C(e,s,{source:"free-text"});return}if(i==="next"||i==="back"){if(!c.current)return;let r=e.getAttribute("data-tool-call-id")??"",s=c.current.getMessages().find(M=>M.toolCall?.id===r);if(!s)return;let u=e.querySelector('[data-ask-free-text-input="true"]')?.value?.trim()??"";if(u){let M=R(e)[v(e)];(typeof M!="string"||M!==u)&&h(e,u)}let d=i==="next"?1:-1,y=v(e)+d;H(e,s,l.config(),y),f(e);return}if(i==="submit-all"){if(!c.current)return;let r=e.getAttribute("data-tool-call-id")??"",s=c.current.getMessages().find(M=>M.toolCall?.id===r);if(!s)return;let u=e.querySelector('[data-ask-free-text-input="true"]')?.value?.trim()??"";u&&h(e,u);let d=I(e,s);c.current.persistAskUserQuestionProgress(s,{answers:d,currentIndex:v(e)});let y=b(d);C(e,y||"(submitted)",{source:"submit-all",structured:d});return}if(i==="skip"){if(!c.current)return;let r=e.getAttribute("data-tool-call-id")??"",s=c.current.getMessages().find(k=>k.toolCall?.id===r);if(!s)return;let g=T(e),u=v(e),d=U(e),y=u>=d-1;if(!g){A.dispatchEvent(new CustomEvent("persona:askUserQuestion:dismissed",{detail:{toolUseId:r},bubbles:!0,composed:!0})),L(E,r),s.agentMetadata?.awaitingLocalTool&&(c.current.markAskUserQuestionResolved(s),c.current.resolveAskUserQuestion(s,"(dismissed)"));return}h(e,"");let M=e.querySelector('[data-ask-free-text-input="true"]');if(M&&(M.value=""),y){let k=I(e,s),S=b(k);C(e,S||"(skipped)",{source:"submit-all",structured:k});return}H(e,s,l.config(),u+1),f(e);return}},keydown:a=>{if(a.key!=="Enter")return;let t=a.target;if(!t.matches?.('[data-ask-free-text-input="true"]'))return;let e=t.closest("[data-persona-ask-sheet-for]");if(!e)return;a.preventDefault();let i=t.value;if(i.trim()){if(T(e)){h(e,i.trim()),f(e),w(e);return}C(e,i,{source:"free-text"})}}}};var G={loadContextMentions:()=>N(),loadContextMentionsInline:()=>j(),renderLucideIcon:(...l)=>Q(...l),createMentionButton:(...l)=>K(...l)};function J(l){let{loadContextMentions:A,loadContextMentionsInline:E,renderLucideIcon:c,createMentionButton:C}=l.deps??G,f=l.config.contextMentions;if(!f?.enabled)return null;let b=F(f).filter(n=>n.sources.length>0);if(b.length===0)return typeof console<"u"&&console.warn("[Persona] contextMentions.enabled is true but no sources were provided; mentions are disabled."),null;let w=b.filter(n=>n.sources.some(o=>typeof o.matchCommand=="function")),O=n=>w.some(o=>o.trigger?o.position==="line-start"?n.split(`
2
+ `).some(m=>m.startsWith(o.trigger)):(o.position==="anywhere"?n:n.split(`
3
+ `)[0]).startsWith(o.trigger):!1),P=(n,o)=>{if(!(typeof window>"u"))try{window.dispatchEvent(new CustomEvent(`persona:mention:${n}`,{detail:o}))}catch{}},a=!l.chipRow,p=l.chipRow??W("div",{className:"persona-mention-context-row",attrs:{"data-persona-mention-context-row":""}}),t=null,e=null,i=l.textarea,r=null,s=null,g=null,u=null,d=()=>{if(t)return Promise.resolve(t);if(e)return e;let n=A().then(o=>(o.setMentionIconRenderer(c),t=o.mountContextMentions({mentionConfig:f,textarea:l.textarea,composerInput:r??void 0,anchor:l.anchor,contextRow:p,getMessages:l.getMessages,getConfig:()=>l.config,liveRegionHost:l.liveRegionHost,popoverContainer:l.popoverContainer,onPickerOpenChange:S,emit:P}),t)).catch(o=>(typeof console<"u"&&console.warn("[Persona] Failed to load context mentions runtime",o),e===n&&(e=null),null));return e=n,n},y=()=>{E().then(n=>{let o=n.mountInlineComposer({textarea:l.textarea,renderToken:m=>z(m,{render:f.renderMentionToken}),onMentionRemoved:m=>t?.untrackMention(m)});r=o.input,s=o.destroy;let x=i;x.replaceWith(o.element),i=o.element,u={next:o.element,prev:x},g?.(o.element,x),t?t.rebindComposer(o.input):e&&e.then(m=>m?.rebindComposer(o.input))}).catch(n=>{typeof console<"u"&&console.warn("[Persona] Failed to load inline mention composer",n)})};f.display==="inline"&&y();let M=[],k=new Map;for(let n of b){if(!n.showButton)continue;let o=C({config:{...f,buttonIconName:n.buttonIconName,buttonTooltipText:n.buttonTooltipText},onOpen:()=>{d().then(x=>x?.openMenu(n.trigger))}});M.push(o),k.set(n.trigger,o.button)}let S=(n,o,x)=>{let m=k.get(o);m&&(m.setAttribute("aria-expanded",n?"true":"false"),n?m.setAttribute("aria-controls",x):m.removeAttribute("aria-controls"))};return{affordanceButtons:M.map(n=>n.wrapper),contextRow:p,handleInput:n=>{if(t){t.handleInput();return}if(!D(n))return;let o=i,x=o.selectionStart??0;q(o.value,x,b)&&d().then(m=>m?.handleInput())},handleKeydown:n=>{if(t?.isMenuOpen())return t.handleKeydown(n);if(n.key==="Backspace"&&t?.hasMentions()&&!u){let o=i,x=o.selectionStart===0&&o.selectionEnd===0;if((o.value.length===0||x)&&t.removeLastChip())return n.preventDefault(),!0}return!1},isMenuOpen:()=>t?.isMenuOpen()??!1,hasMentions:()=>t?.hasMentions()??!1,getMentionRefs:()=>t?.getMentionRefs()??[],collectForSubmit:()=>t?.collectForSubmit()??null,takeInlineCommand:async n=>O(n)?(t??await d())?.dispatchInlineCommand(n)??null:null,clear:()=>t?.clear(),prefetch:()=>{A().catch(()=>{})},onComposerSwap:n=>{g=n,u&&n(u.next,u.prev)},destroy:()=>{t?.destroy(),s?.();for(let n of M)n.wrapper.remove();a&&p.remove()}}}export{$ as createAskUserSheetHandlers,J as createContextMentionOrchestrator};
@@ -0,0 +1,72 @@
1
+ var ho=Object.create;var Et=Object.defineProperty;var Co=Object.getOwnPropertyDescriptor;var bo=Object.getOwnPropertyNames;var yo=Object.getPrototypeOf,Ao=Object.prototype.hasOwnProperty;var It=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports);var Mo=(e,o,r,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of bo(o))!Ao.call(e,a)&&a!==r&&Et(e,a,{get:()=>o[a],enumerable:!(t=Co(o,a))||t.enumerable});return e};var So=(e,o,r)=>(r=e!=null?ho(yo(e)):{},Mo(o||!e||!e.__esModule?Et(r,"default",{value:e,enumerable:!0}):r,e));var ce=It(u=>{"use strict";Object.defineProperty(u,"__esModule",{value:!0});u.Allow=u.ALL=u.COLLECTION=u.ATOM=u.SPECIAL=u.INF=u._INFINITY=u.INFINITY=u.NAN=u.BOOL=u.NULL=u.OBJ=u.ARR=u.NUM=u.STR=void 0;u.STR=1;u.NUM=2;u.ARR=4;u.OBJ=8;u.NULL=16;u.BOOL=32;u.NAN=64;u.INFINITY=128;u._INFINITY=256;u.INF=u.INFINITY|u._INFINITY;u.SPECIAL=u.NULL|u.BOOL|u.INF|u.NAN;u.ATOM=u.STR|u.NUM|u.SPECIAL;u.COLLECTION=u.ARR|u.OBJ;u.ALL=u.ATOM|u.COLLECTION;u.Allow={STR:u.STR,NUM:u.NUM,ARR:u.ARR,OBJ:u.OBJ,NULL:u.NULL,BOOL:u.BOOL,NAN:u.NAN,INFINITY:u.INFINITY,_INFINITY:u._INFINITY,INF:u.INF,SPECIAL:u.SPECIAL,ATOM:u.ATOM,COLLECTION:u.COLLECTION,ALL:u.ALL};u.default=u.Allow});var Ot=It(T=>{"use strict";var wo=T&&T.__createBinding||(Object.create?(function(e,o,r,t){t===void 0&&(t=r);var a=Object.getOwnPropertyDescriptor(o,r);(!a||("get"in a?!o.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return o[r]}}),Object.defineProperty(e,t,a)}):(function(e,o,r,t){t===void 0&&(t=r),e[t]=o[r]})),To=T&&T.__exportStar||function(e,o){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(o,r)&&wo(o,e,r)};Object.defineProperty(T,"__esModule",{value:!0});T.Allow=T.MalformedJSON=T.PartialJSON=T.parseJSON=T.parse=void 0;var L=ce();Object.defineProperty(T,"Allow",{enumerable:!0,get:function(){return L.Allow}});To(ce(),T);var te=class extends Error{};T.PartialJSON=te;var oe=class extends Error{};T.MalformedJSON=oe;function Rt(e,o=L.Allow.ALL){if(typeof e!="string")throw new TypeError(`expecting str, got ${typeof e}`);if(!e.trim())throw new Error(`${e} is empty`);return ko(e.trim(),o)}T.parseJSON=Rt;var ko=(e,o)=>{let r=e.length,t=0,a=l=>{throw new te(`${l} at position ${t}`)},s=l=>{throw new oe(`${l} at position ${t}`)},i=()=>(d(),t>=r&&a("Unexpected end of input"),e[t]==='"'?p():e[t]==="{"?x():e[t]==="["?y():e.substring(t,t+4)==="null"||L.Allow.NULL&o&&r-t<4&&"null".startsWith(e.substring(t))?(t+=4,null):e.substring(t,t+4)==="true"||L.Allow.BOOL&o&&r-t<4&&"true".startsWith(e.substring(t))?(t+=4,!0):e.substring(t,t+5)==="false"||L.Allow.BOOL&o&&r-t<5&&"false".startsWith(e.substring(t))?(t+=5,!1):e.substring(t,t+8)==="Infinity"||L.Allow.INFINITY&o&&r-t<8&&"Infinity".startsWith(e.substring(t))?(t+=8,1/0):e.substring(t,t+9)==="-Infinity"||L.Allow._INFINITY&o&&1<r-t&&r-t<9&&"-Infinity".startsWith(e.substring(t))?(t+=9,-1/0):e.substring(t,t+3)==="NaN"||L.Allow.NAN&o&&r-t<3&&"NaN".startsWith(e.substring(t))?(t+=3,NaN):f()),p=()=>{let l=t,n=!1;for(t++;t<r&&(e[t]!=='"'||n&&e[t-1]==="\\");)n=e[t]==="\\"?!n:!1,t++;if(e.charAt(t)=='"')try{return JSON.parse(e.substring(l,++t-Number(n)))}catch(m){s(String(m))}else if(L.Allow.STR&o)try{return JSON.parse(e.substring(l,t-Number(n))+'"')}catch{return JSON.parse(e.substring(l,e.lastIndexOf("\\"))+'"')}a("Unterminated string literal")},x=()=>{t++,d();let l={};try{for(;e[t]!=="}";){if(d(),t>=r&&L.Allow.OBJ&o)return l;let n=p();d(),t++;try{let m=i();l[n]=m}catch(m){if(L.Allow.OBJ&o)return l;throw m}d(),e[t]===","&&t++}}catch{if(L.Allow.OBJ&o)return l;a("Expected '}' at end of object")}return t++,l},y=()=>{t++;let l=[];try{for(;e[t]!=="]";)l.push(i()),d(),e[t]===","&&t++}catch{if(L.Allow.ARR&o)return l;a("Expected ']' at end of array")}return t++,l},f=()=>{if(t===0){e==="-"&&s("Not sure what '-' is");try{return JSON.parse(e)}catch(n){if(L.Allow.NUM&o)try{return JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch{}s(String(n))}}let l=t;for(e[t]==="-"&&t++;e[t]&&",]}".indexOf(e[t])===-1;)t++;t==r&&!(L.Allow.NUM&o)&&a("Unterminated number literal");try{return JSON.parse(e.substring(l,t))}catch{e.substring(l,t)==="-"&&a("Not sure what '-' is");try{return JSON.parse(e.substring(l,e.lastIndexOf("e")))}catch(m){s(String(m))}}},d=()=>{for(;t<r&&`
2
+ \r `.includes(e[t]);)t++};return i()},Lo=Rt;T.parse=Lo});var H=So(Ot(),1);var A=(e,o)=>{let r=document.createElement(e);return o&&(r.className=o),r};var D=(e,o={},...r)=>{let t=document.createElement(e);if(o.className&&(t.className=o.className),o.text!==void 0&&(t.textContent=o.text),o.attrs)for(let[s,i]of Object.entries(o.attrs))t.setAttribute(s,i);if(o.style){let s=t.style,i=o.style;for(let p of Object.keys(i)){let x=i[p];x!=null&&(s[p]=x)}}let a=r.filter(s=>s!=null);return a.length>0&&t.append(...a),t},xe=(...e)=>e.filter(Boolean).join(" ");var ge=8,Ft="data-persona-ask-sheet-for",Po="Other",vo="Other\u2026",Dt="Type your own answer here",Ht="Send",Eo="Next",Io="Back",Ro="Submit all",Oo="Skip",Fo=3,Nt="data-ask-current-index",Bo="data-ask-question-count",Ut="data-ask-answers",Do="data-ask-grouped",Ho="data-ask-layout";var No=e=>e.getAttribute(Ho)==="pills"?"pills":"rows",Bt=!1,Uo=e=>e.replace(/["\\]/g,"\\$&");var qo=e=>e?.features?.askUserQuestion??{},qt=e=>{let o=e.toolCall;if(!o)return{payload:null,complete:!1};let r=o.status==="complete";if(o.args&&typeof o.args=="object")return{payload:o.args,complete:r};let t=o.chunks;if(!t||t.length===0)return{payload:null,complete:r};try{let a=t.join(""),s=(0,H.parse)(a,H.STR|H.OBJ|H.ARR);if(s&&typeof s=="object")return{payload:s,complete:r}}catch{}return{payload:null,complete:r}},he=e=>{let o=Array.isArray(e?.questions)?e.questions:[];return o.length>ge&&!Bt&&(Bt=!0,typeof console<"u"&&console.warn(`[AgentWidget] ask_user_question received ${o.length} questions; truncating to ${ge}.`)),o.slice(0,ge)},Wo=e=>he(e)[0]??null,_o=(e,o)=>he(e)[o]??null;var Wt=(e,o,r)=>{if(e!=="rows")return null;let t=A("span","persona-ask-row-affordance");if(t.setAttribute("aria-hidden","true"),o){let a=A("span","persona-ask-row-check");t.appendChild(a)}else{let a=A("span","persona-ask-row-badge");a.textContent=String(r+1),t.appendChild(a)}return t},Vo=(e,o,r,t)=>{let s=A("button",r==="rows"?"persona-ask-pill persona-ask-row persona-pointer-events-auto":"persona-ask-pill persona-pointer-events-auto");if(s.type="button",s.setAttribute("role",t?"checkbox":"button"),s.setAttribute("aria-pressed","false"),s.setAttribute("data-ask-user-action","pick"),s.setAttribute("data-option-index",String(o)),s.setAttribute("data-option-label",e.label),r==="rows"){let i=A("span","persona-ask-row-content"),p=A("span","persona-ask-row-label");if(p.textContent=e.label,i.appendChild(p),e.description){let y=A("span","persona-ask-row-description");y.textContent=e.description,i.appendChild(y)}s.appendChild(i);let x=Wt(r,t,o);x&&s.appendChild(x)}else s.textContent=e.label,e.description&&(s.title=e.description);return s},zo=e=>{let r=A("span",e==="rows"?"persona-ask-pill persona-ask-row persona-ask-pill-skeleton persona-pointer-events-none":"persona-ask-pill persona-ask-pill-skeleton persona-pointer-events-none");return r.setAttribute("aria-hidden","true"),r},Go=(e,o,r,t)=>{let s=A("div",t==="rows"?"persona-ask-pills persona-ask-pills--rows persona-flex persona-flex-col persona-gap-2":"persona-ask-pills persona-flex persona-flex-wrap persona-gap-2");s.setAttribute("role","group"),s.setAttribute("data-ask-pill-list","true");let i=!!e?.multiSelect,x=(Array.isArray(e?.options)?e.options:[]).filter(f=>f&&typeof f.label=="string"&&f.label.length>0);if(x.length===0&&!r){for(let f=0;f<Fo;f++)s.appendChild(zo(t));return s}if(x.forEach((f,d)=>{s.appendChild(Vo(f,d,t,i))}),e?.allowFreeText!==!1){let f=t==="rows"?Po:vo;if(t==="rows"){let d=A("div","persona-ask-pill persona-ask-row persona-ask-row--other persona-ask-pill-custom persona-pointer-events-auto");d.setAttribute("data-ask-user-action","focus-free-text"),d.setAttribute("data-option-index",String(x.length)),d.setAttribute("data-ask-other-row","true");let l=A("span","persona-ask-row-content"),n=document.createElement("input");n.type="text",n.className="persona-ask-row-input persona-flex-1 persona-pointer-events-auto",n.placeholder=o.freeTextPlaceholder??Dt,n.setAttribute("data-ask-free-text-input","true"),n.setAttribute("aria-label",o.freeTextLabel??f),l.appendChild(n),d.appendChild(l);let m=Wt(t,i,x.length);m&&d.appendChild(m),s.appendChild(d)}else{let d=A("button","persona-ask-pill persona-ask-pill-custom persona-pointer-events-auto");d.type="button",d.setAttribute("data-ask-user-action","open-free-text"),d.textContent=o.freeTextLabel??f,s.appendChild(d)}}return s},Ko=(e,o)=>{let t=A("div",o==="rows"?"persona-ask-free-text persona-ask-free-text--rows persona-flex persona-gap-2 persona-mt-2":"persona-ask-free-text persona-hidden persona-flex persona-gap-2 persona-mt-2");t.setAttribute("data-ask-free-text-row","true");let a=document.createElement("input");if(a.type="text",a.className="persona-ask-free-text-input persona-flex-1 persona-pointer-events-auto",a.placeholder=e.freeTextPlaceholder??Dt,a.setAttribute("data-ask-free-text-input","true"),t.appendChild(a),o!=="rows"){let s=A("button","persona-ask-free-text-submit persona-pointer-events-auto");s.type="button",s.textContent=e.submitLabel??Ht,s.setAttribute("data-ask-user-action","submit-free-text"),t.appendChild(s)}return t},Xo=e=>{let o=A("div","persona-ask-multi-actions persona-flex persona-justify-end persona-mt-2");o.setAttribute("data-ask-multi-actions","true");let r=A("button","persona-ask-multi-submit persona-pointer-events-auto");return r.type="button",r.textContent=e.submitLabel??Ht,r.setAttribute("data-ask-user-action","submit-multi"),r.disabled=!0,o.appendChild(r),o},Qo=(e,o,r)=>{let t=A("div","persona-ask-nav persona-flex persona-justify-between persona-items-center persona-gap-2 persona-mt-2");t.setAttribute("data-ask-nav-row","true");let a=A("button","persona-ask-nav-back persona-pointer-events-auto");a.type="button",a.textContent=r.backLabel??Io,a.setAttribute("data-ask-user-action","back"),a.disabled=e===0,t.appendChild(a);let s=A("div","persona-ask-nav-right persona-flex persona-items-center persona-gap-2"),i=A("button","persona-ask-nav-skip persona-pointer-events-auto");i.type="button",i.textContent=r.skipLabel??Oo,i.setAttribute("data-ask-user-action","skip"),s.appendChild(i);let p=A("button","persona-ask-nav-next persona-pointer-events-auto");p.type="button";let x=e===o-1;return p.textContent=x?r.submitAllLabel??Ro:r.nextLabel??Eo,p.setAttribute("data-ask-user-action",x?"submit-all":"next"),p.disabled=!0,s.appendChild(p),t.appendChild(s),t},U=e=>{let o=e.getAttribute(Ut);if(!o)return{};try{let r=JSON.parse(o);return r&&typeof r=="object"?r:{}}catch{return{}}},$o=(e,o)=>{e.setAttribute(Ut,JSON.stringify(o))},R=e=>{let o=Number(e.getAttribute(Nt)??"0");return Number.isFinite(o)?Math.max(0,Math.floor(o)):0},Yo=(e,o)=>{e.setAttribute(Nt,String(Math.max(0,Math.floor(o))))},Y=e=>{let o=Number(e.getAttribute(Bo)??"1");return Number.isFinite(o)?Math.max(1,Math.floor(o)):1},q=e=>e.getAttribute(Do)==="true";var re=(e,o)=>{let{payload:r}=qt(o),t=he(r),a=U(e),s={},i=new Set;return t.forEach((p,x)=>{let y=typeof p?.question=="string"?p.question:"";y&&(i.has(y)&&typeof console<"u"&&console.warn(`[AgentWidget] ask_user_question has duplicate question text "${y}"; later answer wins.`),i.add(y),Object.prototype.hasOwnProperty.call(a,x)&&(s[y]=a[x]))}),s},_t=e=>{let o=U(e),r=R(e),t=o[r],a=new Set;typeof t=="string"?a.add(t):Array.isArray(t)&&t.forEach(x=>a.add(x));let s=e.querySelectorAll('[data-ask-user-action="pick"][data-option-label]');s.forEach(x=>{let y=x.getAttribute("data-option-label")??"",f=a.has(y);x.setAttribute("aria-pressed",f?"true":"false"),x.classList.toggle("persona-ask-pill-selected",f)});let i=new Set(Array.from(s).map(x=>x.getAttribute("data-option-label")??"")),p=e.querySelector('[data-ask-free-text-input="true"]');p&&(typeof t=="string"&&t.length>0&&!i.has(t)?(p.value=t,p.closest('[data-ask-free-text-row="true"]')?.classList.remove("persona-hidden")):p.value="")},Vt=e=>{if(!q(e))return;let o=U(e),r=R(e),t=o[r],a=typeof t=="string"&&t.length>0||Array.isArray(t)&&t.length>0,s=e.querySelector('[data-ask-user-action="next"], [data-ask-user-action="submit-all"]');s&&(s.disabled=!a);let i=e.querySelector('[data-ask-user-action="submit-multi"]');if(i){let p=Array.from(e.querySelectorAll('[aria-pressed="true"][data-option-label]'));i.disabled=p.length===0}},Jo=(e,o,r)=>{let t=qo(r),a=No(e),{payload:s,complete:i}=qt(o),p=q(e),x=R(e),y=Y(e),f=p?_o(s,x):Wo(s),d=!!f?.multiSelect,l=e.querySelector('[data-ask-step-inline="true"]');l&&(l.textContent=p?`${x+1}/${y}`:"");let n=e.querySelector('[data-ask-stepper="true"]');n&&n.remove();let m=e.querySelector('[data-ask-question="true"]');if(m){let b=typeof f?.question=="string"?f.question:"";m.textContent=b,m.classList.toggle("persona-ask-question-skeleton",!b&&!i)}let g=e.querySelector('[data-ask-pill-list="true"]');if(g){let b=Go(f,t,i,a);g.replaceWith(b)}if(a!=="rows"){let b=e.querySelector('[data-ask-free-text-row="true"]');b&&b.replaceWith(Ko(t,a))}let h=e.querySelector('[data-ask-multi-actions="true"]');!p&&d&&!h?e.appendChild(Xo(t)):(!d||p)&&h&&h.remove(),e.setAttribute("data-multi-select",d?"true":"false");let M=e.querySelector('[data-ask-nav-row="true"]');if(p){let b=Qo(x,y,t);M?M.replaceWith(b):e.appendChild(b)}else M&&M.remove();_t(e),Vt(e)};var ae=(e,o)=>{if(!e)return;let r=o?`[${Ft}="${Uo(o)}"]`:`[${Ft}]`;e.querySelectorAll(r).forEach(a=>{a.classList.add("persona-ask-sheet-leave");let s=Number.parseInt(getComputedStyle(a).getPropertyValue("--persona-ask-sheet-duration")||"180",10);setTimeout(()=>a.remove(),Number.isFinite(s)?s:180)})},Ce=e=>Array.from(e.querySelectorAll('[aria-pressed="true"][data-option-label]')).map(o=>o.getAttribute("data-option-label")).filter(o=>typeof o=="string"&&o.length>0),N=(e,o)=>{let r=U(e),t=R(e);typeof o=="string"&&o.length===0||Array.isArray(o)&&o.length===0?delete r[t]:r[t]=o,$o(e,r),_t(e),Vt(e)},se=(e,o,r,t)=>{let a=Y(e),s=Math.max(0,Math.min(a-1,t));Yo(e,s),Jo(e,o,r)};var Zo=e=>{let{mount:o,overlay:r,sessionRef:t}=e,a=(f,d,l)=>{let n=d.trim();if(!n||!t.current)return;let m=f.getAttribute("data-tool-call-id")??"",g=l.source==="free-text";o.dispatchEvent(new CustomEvent("persona:askUserQuestion:answered",{detail:{toolUseId:m,answer:n,answers:l.structured,values:l.values??(l.source==="multi"?n.split(", "):[n]),isFreeText:g,source:l.source},bubbles:!0,composed:!0})),ae(r,m);let h=t.current.getMessages().find(M=>M.toolCall?.id===m);h?.agentMetadata?.awaitingLocalTool?t.current.resolveAskUserQuestion(h,l.structured??n):t.current.sendMessage(n)},s=f=>{let d=t.current;if(!d)return;let l=f.getAttribute("data-tool-call-id")??"",n=d.getMessages().find(m=>m.toolCall?.id===l);n&&d.persistAskUserQuestionProgress(n,{answers:re(f,n),currentIndex:R(f)})},i=f=>Object.entries(f).map(([d,l])=>`${d}: ${Array.isArray(l)?l.join(", "):l}`).join(" | "),p=f=>{if(e.config().features?.askUserQuestion?.groupedAutoAdvance===!1)return;let d=R(f),l=Y(f);if(d>=l-1)return;let n=t.current?.getMessages().find(m=>m.toolCall?.id===f.getAttribute("data-tool-call-id"));n&&(se(f,n,e.config(),d+1),s(f))};return{click:f=>{let l=f.target.closest("[data-ask-user-action]");if(!l)return;let n=l.closest("[data-persona-ask-sheet-for]");if(!n)return;let m=l.getAttribute("data-ask-user-action");if(f.preventDefault(),f.stopPropagation(),m==="dismiss"){let g=n.getAttribute("data-tool-call-id")??"";o.dispatchEvent(new CustomEvent("persona:askUserQuestion:dismissed",{detail:{toolUseId:g},bubbles:!0,composed:!0})),ae(r,g);let h=t.current?.getMessages().find(M=>M.toolCall?.id===g);h?.agentMetadata?.awaitingLocalTool&&(t.current?.markAskUserQuestionResolved(h),t.current?.resolveAskUserQuestion(h,"(dismissed)"));return}if(m==="pick"){let g=l.getAttribute("data-option-label");if(!g)return;let h=n.getAttribute("data-multi-select")==="true",M=q(n);if(M&&h){let b=U(n)[R(n)],S=new Set(Array.isArray(b)?b:[]);S.has(g)?S.delete(g):S.add(g),N(n,Array.from(S)),s(n);return}if(M){N(n,g),s(n),p(n);return}if(h){let b=l.getAttribute("aria-pressed")==="true";l.setAttribute("aria-pressed",b?"false":"true"),l.classList.toggle("persona-ask-pill-selected",!b);let S=n.querySelector('[data-ask-user-action="submit-multi"]');S&&(S.disabled=Ce(n).length===0);return}a(n,g,{source:"pick",values:[g]});return}if(m==="submit-multi"){let g=Ce(n);if(g.length===0)return;a(n,g.join(", "),{source:"multi",values:g});return}if(m==="open-free-text"){let g=n.querySelector('[data-ask-free-text-row="true"]');g&&(g.classList.remove("persona-hidden"),g.querySelector('[data-ask-free-text-input="true"]')?.focus());return}if(m==="focus-free-text"){n.querySelector('[data-ask-free-text-input="true"]')?.focus();return}if(m==="submit-free-text"){let h=n.querySelector('[data-ask-free-text-input="true"]')?.value??"";if(!h.trim())return;if(q(n)){N(n,h.trim()),s(n),p(n);return}a(n,h,{source:"free-text"});return}if(m==="next"||m==="back"){if(!t.current)return;let g=n.getAttribute("data-tool-call-id")??"",h=t.current.getMessages().find(k=>k.toolCall?.id===g);if(!h)return;let b=n.querySelector('[data-ask-free-text-input="true"]')?.value?.trim()??"";if(b){let k=U(n)[R(n)];(typeof k!="string"||k!==b)&&N(n,b)}let S=m==="next"?1:-1,O=R(n)+S;se(n,h,e.config(),O),s(n);return}if(m==="submit-all"){if(!t.current)return;let g=n.getAttribute("data-tool-call-id")??"",h=t.current.getMessages().find(k=>k.toolCall?.id===g);if(!h)return;let b=n.querySelector('[data-ask-free-text-input="true"]')?.value?.trim()??"";b&&N(n,b);let S=re(n,h);t.current.persistAskUserQuestionProgress(h,{answers:S,currentIndex:R(n)});let O=i(S);a(n,O||"(submitted)",{source:"submit-all",structured:S});return}if(m==="skip"){if(!t.current)return;let g=n.getAttribute("data-tool-call-id")??"",h=t.current.getMessages().find(F=>F.toolCall?.id===g);if(!h)return;let M=q(n),b=R(n),S=Y(n),O=b>=S-1;if(!M){o.dispatchEvent(new CustomEvent("persona:askUserQuestion:dismissed",{detail:{toolUseId:g},bubbles:!0,composed:!0})),ae(r,g),h.agentMetadata?.awaitingLocalTool&&(t.current.markAskUserQuestionResolved(h),t.current.resolveAskUserQuestion(h,"(dismissed)"));return}N(n,"");let k=n.querySelector('[data-ask-free-text-input="true"]');if(k&&(k.value=""),O){let F=re(n,h),B=i(F);a(n,B||"(skipped)",{source:"submit-all",structured:F});return}se(n,h,e.config(),b+1),s(n);return}},keydown:f=>{if(f.key!=="Enter")return;let l=f.target;if(!l.matches?.('[data-ask-free-text-input="true"]'))return;let n=l.closest("[data-persona-ask-sheet-for]");if(!n)return;f.preventDefault();let m=l.value;if(m.trim()){if(q(n)){N(n,m.trim()),s(n),p(n);return}a(n,m,{source:"free-text"})}}}};var zt=/\s/;function jo(e,o,r){if(r==="input-start")return o===0;let t=o>0?e[o-1]:"";return r==="line-start"?t===""||t===`
3
+ `:t===""||zt.test(t)}function er(e,o,r="@",t="anywhere",a=!1){if(!r||o<=0||o>e.length)return null;let s=o-1;for(;s>=0;){let i=e[s];if(i===r)return jo(e,s,t)?{triggerIndex:s,query:e.slice(s+1,o)}:null;if(i===`
4
+ `||i==="\uFFFC"||!a&&zt.test(i))return null;s--}return null}function Gt(e,o,r){for(let t of r){let a=er(e,o,t.trigger,t.position??"anywhere",t.allowSpaces??!1);if(a)return{channel:t,match:a}}return null}function Kt(e){return e?e!=="insertFromPaste"&&e!=="insertFromDrop":!0}function Xt(e){let o={trigger:e.trigger??"@",position:e.triggerPosition??"anywhere",allowSpaces:!1,sources:Array.isArray(e.sources)?e.sources:[],searchPlaceholder:e.searchPlaceholder,showButton:e.showButton!==!1,buttonIconName:e.buttonIconName,buttonTooltipText:e.buttonTooltipText},r=(e.triggers??[]).map(t=>({trigger:t.trigger,position:t.triggerPosition??"anywhere",allowSpaces:t.allowSpaces??!1,sources:Array.isArray(t.sources)?t.sources:[],searchPlaceholder:t.searchPlaceholder,showButton:t.showButton===!0,buttonIconName:t.buttonIconName,buttonTooltipText:t.buttonTooltipText}));return[o,...r]}var be=(e,o=24,r="currentColor",t=2)=>{if(!Array.isArray(e))return null;let a=document.createElementNS("http://www.w3.org/2000/svg","svg");return a.setAttribute("width",String(o)),a.setAttribute("height",String(o)),a.setAttribute("viewBox","0 0 24 24"),a.setAttribute("fill","none"),a.setAttribute("stroke",r),a.setAttribute("stroke-width",String(t)),a.setAttribute("stroke-linecap","round"),a.setAttribute("stroke-linejoin","round"),a.setAttribute("aria-hidden","true"),e.forEach(s=>{if(!Array.isArray(s)||s.length<2)return;let i=s[0],p=s[1];if(!p)return;let x=document.createElementNS("http://www.w3.org/2000/svg",i);Object.entries(p).forEach(([y,f])=>{y!=="stroke"&&x.setAttribute(y,String(f))}),a.appendChild(x)}),a};var G=e=>{let{fallbackImport:o,resetOnSetLoader:r=!1}=e,t=null,a=null,s=null;return{setLoader:f=>{t=f,r&&(a=null,s=null)},load:()=>a?Promise.resolve(a):s||(s=(t??o)().then(d=>(a=d,d)).catch(d=>{throw s=null,d}),s),provide:f=>{a=f},getSync:()=>a}};var{setLoader:Yr,load:tr}=G({fallbackImport:()=>import("@runtypelabs/persona/icons-extra")});var Qt=tr;var ye=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"}]];var Ae=[["path",{d:"M12 5v14"}],["path",{d:"m19 12-7 7-7-7"}]];var Me=[["path",{d:"m12 19-7-7 7-7"}],["path",{d:"M19 12H5"}]];var Se=[["path",{d:"M5 12h14"}],["path",{d:"m12 5 7 7-7 7"}]];var we=[["path",{d:"M7 7h10v10"}],["path",{d:"M7 17 17 7"}]];var Te=[["path",{d:"m5 12 7-7 7 7"}],["path",{d:"M12 19V5"}]];var ke=[["circle",{cx:"12",cy:"12",r:"4"}],["path",{d:"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8"}]];var Le=[["path",{d:"M12 8V4H8"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2"}],["path",{d:"M2 14h2"}],["path",{d:"M20 14h2"}],["path",{d:"M15 13v2"}],["path",{d:"M9 13v2"}]];var Pe=[["path",{d:"M20 6 9 17l-5-5"}]];var ve=[["path",{d:"m6 9 6 6 6-6"}]];var Ee=[["path",{d:"m15 18-6-6 6-6"}]];var Ie=[["path",{d:"m9 18 6-6-6-6"}]];var Re=[["path",{d:"m18 15-6-6-6 6"}]];var Oe=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v4"}],["path",{d:"M21 14H11"}],["path",{d:"m15 10-4 4 4 4"}]];var Fe=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"}]];var ne=[["path",{d:"m18 16 4-4-4-4"}],["path",{d:"m6 8-4 4 4 4"}],["path",{d:"m14.5 4-5 16"}]];var Be=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]];var De=[["path",{d:"M12 15V3"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}],["path",{d:"m7 10 5 5 5-5"}]];var le=[["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"12",cy:"5",r:"1"}],["circle",{cx:"12",cy:"19",r:"1"}]];var fe=[["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"19",cy:"12",r:"1"}],["circle",{cx:"5",cy:"12",r:"1"}]];var He=[["path",{d:"M15 3h6v6"}],["path",{d:"M10 14 21 3"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}]];var Ne=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"}],["circle",{cx:"12",cy:"12",r:"3"}]];var Ue=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5"}],["path",{d:"M10 12.5 8 15l2 2.5"}],["path",{d:"m14 12.5 2 2.5-2 2.5"}]];var qe=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5"}],["path",{d:"M8 13h2"}],["path",{d:"M14 13h2"}],["path",{d:"M8 17h2"}],["path",{d:"M14 17h2"}]];var We=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5"}],["path",{d:"M10 9H8"}],["path",{d:"M16 13H8"}],["path",{d:"M16 17H8"}]];var _e=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5"}]];var Ve=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}],["path",{d:"M3 3v5h5"}],["path",{d:"M12 7v5l4 2"}]];var ze=[["path",{d:"M16 5h6"}],["path",{d:"M19 2v6"}],["path",{d:"M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"}],["circle",{cx:"9",cy:"9",r:"2"}]];var ie=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56"}]];var Ge=[["path",{d:"M12 2v4"}],["path",{d:"m16.2 7.8 2.9-2.9"}],["path",{d:"M18 12h4"}],["path",{d:"m16.2 16.2 2.9 2.9"}],["path",{d:"M12 18v4"}],["path",{d:"m4.9 19.1 2.9-2.9"}],["path",{d:"M2 12h4"}],["path",{d:"m4.9 4.9 2.9 2.9"}]];var Ke=[["path",{d:"M8 3H5a2 2 0 0 0-2 2v3"}],["path",{d:"M21 8V5a2 2 0 0 0-2-2h-3"}],["path",{d:"M3 16v3a2 2 0 0 0 2 2h3"}],["path",{d:"M16 21h3a2 2 0 0 0 2-2v-3"}]];var Xe=[["path",{d:"M4 5h16"}],["path",{d:"M4 12h16"}],["path",{d:"M4 19h16"}]];var Qe=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"}]];var $e=[["path",{d:"M12 19v3"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}],["rect",{x:"9",y:"2",width:"6",height:"13",rx:"3"}]];var Ye=[["path",{d:"M8 3v3a2 2 0 0 1-2 2H3"}],["path",{d:"M21 8h-3a2 2 0 0 1-2-2V3"}],["path",{d:"M3 16h3a2 2 0 0 1 2 2v3"}],["path",{d:"M16 21v-3a2 2 0 0 1 2-2h3"}]];var Je=[["path",{d:"M5 12h14"}]];var ue=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 3v18"}]];var Ze=[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551"}]];var je=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"}],["path",{d:"m15 5 4 4"}]];var et=[["path",{d:"M5 12h14"}],["path",{d:"M12 5v14"}]];var tt=[["path",{d:"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z"}],["path",{d:"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z"}]];var ot=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"}],["path",{d:"M21 3v5h-5"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"}],["path",{d:"M8 16H3v5"}]];var rt=[["path",{d:"m21 21-4.34-4.34"}],["circle",{cx:"11",cy:"11",r:"8"}]];var at=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"}],["path",{d:"m21.854 2.147-10.94 10.939"}]];var st=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"M12 8v4"}],["path",{d:"M12 16h.01"}]];var nt=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"m9 12 2 2 4-4"}]];var de=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"m14.5 9.5-5 5"}],["path",{d:"m9.5 9.5 5 5"}]];var lt=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}]];var ft=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"}]];var it=[["path",{d:"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"}],["path",{d:"M17 14V2"}]];var ut=[["path",{d:"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"}],["path",{d:"M7 10v12"}]];var dt=[["path",{d:"M10 11v6"}],["path",{d:"M14 11v6"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"}],["path",{d:"M3 6h18"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"}]];var pt=[["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"}],["path",{d:"M3 6h18"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"}]];var mt=[["path",{d:"M12 3v12"}],["path",{d:"m17 8-5-5-5 5"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}]];var ct=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"}],["path",{d:"M16 9a5 5 0 0 1 0 6"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728"}]];var xt=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];var or={activity:ye,"arrow-down":Ae,"arrow-up":Te,"arrow-up-right":we,bot:Le,"chevron-down":ve,"chevron-up":Re,"chevron-right":Ie,"chevron-left":Ee,check:Pe,clipboard:Fe,"clipboard-copy":Oe,"code-xml":ne,copy:Be,file:_e,"file-code":Ue,"file-spreadsheet":qe,"file-text":We,"image-plus":ze,loader:Ge,"loader-circle":ie,mic:$e,paperclip:Ze,quote:tt,"refresh-cw":ot,search:rt,send:at,"shield-alert":st,"shield-check":nt,"shield-x":de,square:lt,"thumbs-down":it,"thumbs-up":ut,upload:mt,"volume-2":ct,x:xt,"at-sign":ke,"arrow-left":Me,"arrow-right":Se,"external-link":He,ellipsis:fe,"ellipsis-vertical":le,menu:Xe,"panel-left":ue,plus:et,minus:Je,pencil:je,trash:pt,"trash-2":dt,download:De,maximize:Ke,minimize:Ye,"message-square":Qe,star:ft,eye:Ne,history:Ve},rr=["user","mail","phone","calendar","clock","building","map-pin","lock","key","credit-card","hash","globe","link","circle-check","circle-x","triangle-alert","info","ban","shield","house","pen-line","save","share","funnel","settings","rotate-cw","shopping-cart","shopping-bag","package","truck","tag","gift","receipt","wallet","store","dollar-sign","percent","play","pause","volume-x","camera","image","film","headphones","message-circle","bell","heart","eye-off","bookmark","calendar-days","timer","folder","folder-open","files","chart-column","sparkles","zap","sun","moon","flag","lightbulb","monitor","smartphone"],pe=new Map(Object.entries(or)),K=new Set,$t=!1,Yt=new Set,ar=e=>{let o=[...Yt];e&&Yt.clear();for(let r of o)try{r()}catch{}};var sr=()=>{let e=0;for(let o of[...K]){let r=pe.get(o.name);if(!r)continue;K.delete(o),e++;let t=be(r,o.size,o.color,o.strokeWidth);if(t)for(o.el.removeAttribute("data-persona-icon-pending");t.firstChild;)o.el.appendChild(t.firstChild)}return e};var gt=!1,nr=()=>{Qt().then(e=>{if(!$t){for(let[o,r]of Object.entries(e.EXTRA_LUCIDE_ICONS))pe.has(o)||pe.set(o,r);$t=!0,sr(),ar(!0)}}).catch(e=>{gt=!0,console.warn("[Persona] Failed to load the icons-extra chunk",e)})},lr=(e,o,r)=>{let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width",String(e)),t.setAttribute("height",String(e)),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.setAttribute("stroke",o),t.setAttribute("stroke-width",String(r)),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round"),t.setAttribute("aria-hidden","true"),t.setAttribute("data-persona-icon-pending","true"),t},W=(e,o=24,r="currentColor",t=2)=>{let a=pe.get(e);if(a)return be(a,o,r,t);if(rr.includes(e)){gt&&(gt=!1);let s=lr(o,r,t);if(K.size>=500){let i=K.values().next().value;i&&K.delete(i)}return K.add({el:s,name:e,size:o,color:r,strokeWidth:t}),nr(),s}return console.warn(`Lucide icon "${e}" is not in the Persona registry. Register it via registerIcons(), or add it to packages/widget/src/utils/icons.ts (see docs/icon-registry-shortlist.md).`),null};var fr=1e5,Jt=fr+1;var ir=8,ur=8,ht=10,dr=200,pr=300,jt=0,Zt=e=>Math.max(0,e);var mr=()=>Date.now()<jt,cr=e=>{jt=e>0?Date.now()+e:0},Ct=new WeakMap,xr="data-persona-tooltip-suppressed",gr=e=>typeof e.closest=="function"&&e.closest(`[${xr}]`)!==null;var eo=e=>e.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&"host"in e,hr=e=>{let o=e.getRootNode?.();return eo(o)?o:e.ownerDocument.body},bt=(e,o,r)=>Math.min(Math.max(e,o),Math.max(o,r)),Cr=[...["background","foreground","hint-fg","radius","font-size","padding","max-width","shadow","arrow-display"].map(e=>`--persona-tooltip-${e}`),"--persona-font-family","--persona-radius-sm"];function Mt(e){Ct.get(e.anchor)?.destroy();let{anchor:o,trigger:r=o,text:t,hint:a,enabled:s=!0,gap:i=ir,viewportPadding:p=ur}=e,x=()=>o.ownerDocument,y=()=>x().defaultView??window,f=null,d=null,l=null,n=null,m,g=!1,h=!1,M=!1,b=()=>(typeof t=="function"?t():t).trim(),S=()=>(typeof a=="function"?a():a??"").trim(),O=()=>Zt(e.delayMs??dr),k=()=>Zt(e.skipDelayMs??pr),F=()=>{m!==void 0&&(y().clearTimeout(m),m=void 0)},B=()=>{F();let v=f!==null;n?.(),n=null,f?.remove(),f=null,d=null,l=null,v&&cr(k())},c=()=>{if(!f)return;let v=x(),_=y(),E=o.getBoundingClientRect(),I=f.getBoundingClientRect(),V=v.documentElement.clientWidth||_.innerWidth,X=v.documentElement.clientHeight||_.innerHeight,J=V-p-I.width,z=E.left+E.width/2-I.width/2,Q=bt(z,p,J),Z=E.top-p,j=X-p-E.bottom,ee=I.height+i,$=Z>=ee||Z>=j?"top":"bottom",uo=$==="top"?E.top-i-I.height:E.bottom+i,po=X-p-I.height,mo=bt(uo,p,po),co=E.left+E.width/2,xo=Math.max(ht,I.width-ht),go=bt(co-Q,ht,xo);f.dataset.placement=$,f.style.left=`${Q}px`,f.style.top=`${mo}px`,f.style.setProperty("--persona-tooltip-arrow-x",`${go}px`)},C=()=>{if(M||!s||f||!o.isConnected||gr(o))return;let v=b(),_=hr(o);if(!v||!_)return;let E=x(),I=y();f=E.createElement("div"),f.className="persona-control-tooltip",f.setAttribute("role","tooltip"),f.dataset.state="measuring",f.style.zIndex=String(Jt);let V=I.getComputedStyle?.(o);if(V){for(let ee of Cr){let $=V.getPropertyValue(ee).trim();$&&f.style.setProperty(ee,$)}V.fontFamily&&(f.style.fontFamily=V.fontFamily)}d=E.createElement("span"),d.className="persona-control-tooltip__label",d.textContent=v,f.appendChild(d);let X=S();X&&(l=E.createElement("span"),l.className="persona-control-tooltip__hint",l.textContent=X,f.appendChild(l));let J=E.createElement("span");J.className="persona-control-tooltip__arrow",f.appendChild(J),_.appendChild(f),c(),f.dataset.state="open";let z=()=>{if(!o.isConnected){B();return}d&&(d.textContent=b()),l&&(l.textContent=S()),c()};I.addEventListener("scroll",z,!0),I.addEventListener("resize",z);let Q=o.getRootNode(),Z=eo(Q)?Q:E.documentElement,j=typeof MutationObserver>"u"?null:new MutationObserver(()=>{o.isConnected||B()});j?.observe(Z,{childList:!0,subtree:!0}),n=()=>{I.removeEventListener("scroll",z,!0),I.removeEventListener("resize",z),j?.disconnect()}},P=v=>{if(!(M||f)){if(F(),v||O()<=0||mr()){C();return}m=y().setTimeout(()=>{m=void 0,C()},O())}},w=()=>{g||h?P(h):B()},wt=()=>{let v=y();(!v.matchMedia||!v.matchMedia("(hover: none)").matches)&&(g=!0,w())},Tt=()=>{g=!1,w()},kt=()=>{try{h=o.matches(":focus-visible")}catch{h=!0}w()},Lt=()=>{h=!1,w()},me=()=>{g=!1,h=!1,B()},Pt=v=>{v.key==="Escape"&&me()};r.addEventListener("mouseenter",wt),r.addEventListener("mouseleave",Tt),o.addEventListener("focus",kt),o.addEventListener("blur",Lt),o.addEventListener("keydown",Pt),o.addEventListener("click",me);let vt={get isOpen(){return f!==null},show:C,hide:B,reposition:c,destroy:()=>{M||(M=!0,B(),r.removeEventListener("mouseenter",wt),r.removeEventListener("mouseleave",Tt),o.removeEventListener("focus",kt),o.removeEventListener("blur",Lt),o.removeEventListener("keydown",Pt),o.removeEventListener("click",me),Ct.delete(o))}};return Ct.set(o,vt),vt}var to=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function St(e,o){if(!e)return o;if(!o)return e;let r={...e};for(let[t,a]of Object.entries(o)){let s=r[t];to(s)&&to(a)?r[t]=St(s,a):r[t]=a}return r}var br="min(440px, calc(100vw - 24px))";var yr="40px",oo="How can I help...",Ar={collapsedMode:"tool-call",activePreview:!1,grouped:!1,groupedMode:"stack",previewMaxLines:3,expandable:!0,loadingAnimation:"none"},Mr={activePreview:!1,previewMaxLines:3,expandable:!0,loadingAnimation:"none"},Sr={enabled:!0,mountMode:"floating",dock:{side:"right",width:"420px"},title:"Chat Assistant",subtitle:"Here to help you get answers fast",agentIconText:"\u{1F4AC}",agentIconName:"bot",headerIconName:"bot",position:"bottom-right",width:br,heightOffset:0,autoExpand:!1,callToActionIconHidden:!1,agentIconSize:"40px",headerIconSize:yr,closeButtonPaddingX:"0px",closeButtonPaddingY:"0px",callToActionIconName:"arrow-up-right",callToActionIconText:"",callToActionIconSize:"32px",callToActionIconPadding:"5px",callToActionIconColor:void 0,callToActionIconBackgroundColor:void 0,closeButtonBackgroundColor:"transparent",clearChat:{backgroundColor:"transparent",borderColor:"transparent",enabled:!0,placement:"inline",iconName:"refresh-cw",showTooltip:!0,tooltipText:"Clear chat",paddingX:"0px",paddingY:"0px"},headerIconHidden:!1,border:void 0,shadow:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)"},wr={apiUrl:"https://api.runtype.com/api/chat/dispatch",clientToken:void 0,agentId:void 0,target:void 0,theme:void 0,darkTheme:void 0,colorScheme:"light",tooltip:{delayMs:200,skipDelayMs:300},launcher:Sr,copy:{inputPlaceholder:oo,sendButtonLabel:"Send"},sendButton:{borderWidth:"0px",paddingX:"12px",paddingY:"10px",borderColor:void 0,useIcon:!0,iconText:"\u2191",showTooltip:!0,tooltipText:"Send message",iconName:"send"},statusIndicator:{visible:!0,idleText:"Online",connectingText:"Connecting\u2026",connectedText:"Streaming\u2026",errorText:"Offline"},voiceRecognition:{enabled:!0,pauseDuration:2e3,iconName:"mic",borderWidth:"0px",iconColor:void 0,backgroundColor:"transparent",borderColor:"transparent",recordingIconColor:void 0,recordingBackgroundColor:void 0,recordingBorderColor:"transparent",showTooltip:!0,tooltipText:"Start voice recognition"},features:{showReasoning:!0,showToolCalls:!0,scrollToBottom:{enabled:!0,iconName:"arrow-down",label:""},scrollBehavior:{mode:"anchor-top",anchorTopOffset:16,showActivityWhilePinned:!0},toolCallDisplay:Ar,reasoningDisplay:Mr,streamAnimation:{type:"none",placeholder:"none",speed:120,duration:1800},askUserQuestion:{enabled:!0,slideInMs:180,freeTextLabel:"Other\u2026",freeTextPlaceholder:"Type your answer\u2026",submitLabel:"Send"},history:{enabled:!1,presentation:"panel",showScopeStatus:!0,showDelete:!0,showDeleteAll:!0}},suggestionChips:["Show me what you can help with","Walk me through getting started","Answer a question about this page"],suggestionChipsConfig:{fontFamily:"sans-serif",fontWeight:"500",paddingX:"12px",paddingY:"6px"},layout:{header:{layout:"default",showIcon:!0,showTitle:!0,showSubtitle:!0,showCloseButton:!0,showClearChat:!0},messages:{layout:"bubble",avatar:{show:!1,position:"left"},timestamp:{show:!1,position:"below"},groupConsecutive:!1},slots:{}},markdown:{options:{gfm:!0,breaks:!0},disableDefaultStyles:!1},messageActions:{enabled:!0,showCopy:!0,showUpvote:!1,showDownvote:!1,visibility:"hover",align:"right",layout:"pill-inside"},debug:!1},Tr={},kr={variant:"circle",width:"min(400px, calc(100vw - 24px))",headerIconSize:"20px"},Lr={launcher:kr,features:{toolCallDisplay:{variant:"row",iconVisibility:"active",autoExpand:!1,grouped:!0,groupedMode:"collapsible",loadingAnimation:"shimmer"},reasoningDisplay:{variant:"row",iconVisibility:"active",autoExpand:!1,loadingAnimation:"shimmer"}},composer:{layout:"single-row",placement:"overlay"},sendButton:{iconName:"arrow-up"},statusIndicator:{mode:"transient"},layout:{contentMaxWidth:"768px",topFade:!0,header:{showSubtitle:!1},messages:{assistant:{width:"full"}}}};function Pr(e){return e?.future?.v5Defaults===!0?"v5":"v4"}function vr(e){let o=Pr(e)==="v5"?Lr:Tr;return St(wr,o)}var Sn=vr();var Er=["image/png","image/jpeg","image/gif","image/webp","image/svg+xml","image/bmp"],Ir=["application/pdf","text/plain","text/markdown","text/csv","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/json"],Rr=[...Er,...Ir];var ro="persona-composer-control",ao="persona-composer-control--glyph";var so=24;function no(e){let{config:o,onOpen:r}=e,t=o.buttonIconName??"plus",a=o.buttonTooltipText??"Add context",s=A("div","persona-send-button-wrapper"),i=D("button",{className:`persona-rounded-button persona-flex persona-items-center persona-justify-center disabled:persona-opacity-50 persona-cursor-pointer persona-mention-button ${ro} ${ao}`,attrs:{type:"button","data-persona-composer-mention-button":"","aria-label":a,"aria-haspopup":"listbox","aria-expanded":"false"},style:{fontSize:"18px",lineHeight:"1"}}),p=W(t,so,"currentColor",1.5);return p?i.appendChild(p):i.textContent="+",i.addEventListener("click",x=>{x.preventDefault(),x.stopPropagation(),r()}),s.appendChild(i),Mt({anchor:i,trigger:s,text:()=>i.getAttribute("aria-label")??a}),{button:i,wrapper:s}}var{setLoader:$n,load:Or}=G({fallbackImport:()=>import("@runtypelabs/persona/context-mentions")});var lo=Or;var{setLoader:Zn,load:Fr}=G({fallbackImport:()=>import("@runtypelabs/persona/context-mentions-inline"),resetOnSetLoader:!0});var fo=Fr;function io(e,o={}){if(o.render)return o.render({ref:e,readonly:!!o.readonly});let r=D("span",{className:xe("persona-mention-token",o.readonly&&"persona-mention-token-readonly"),attrs:{"data-mention-source":e.sourceId,title:e.label,role:"img","aria-label":`${e.label} mention`}});e.color&&r.style.setProperty("--persona-mention-token-accent",e.color);let t=W(e.iconName??"at-sign",13,"currentColor",2);if(t){let a=A("span","persona-mention-token-icon");a.appendChild(t),r.appendChild(a)}return r.appendChild(D("span",{className:"persona-mention-token-label",text:`@${e.label}`})),r}var Br={loadContextMentions:()=>lo(),loadContextMentionsInline:()=>fo(),renderLucideIcon:(...e)=>W(...e),createMentionButton:(...e)=>no(...e)};function Dr(e){let{loadContextMentions:o,loadContextMentionsInline:r,renderLucideIcon:t,createMentionButton:a}=e.deps??Br,s=e.config.contextMentions;if(!s?.enabled)return null;let i=Xt(s).filter(c=>c.sources.length>0);if(i.length===0)return typeof console<"u"&&console.warn("[Persona] contextMentions.enabled is true but no sources were provided; mentions are disabled."),null;let p=i.filter(c=>c.sources.some(C=>typeof C.matchCommand=="function")),x=c=>p.some(C=>C.trigger?C.position==="line-start"?c.split(`
5
+ `).some(w=>w.startsWith(C.trigger)):(C.position==="anywhere"?c:c.split(`
6
+ `)[0]).startsWith(C.trigger):!1),y=(c,C)=>{if(!(typeof window>"u"))try{window.dispatchEvent(new CustomEvent(`persona:mention:${c}`,{detail:C}))}catch{}},f=!e.chipRow,d=e.chipRow??D("div",{className:"persona-mention-context-row",attrs:{"data-persona-mention-context-row":""}}),l=null,n=null,m=e.textarea,g=null,h=null,M=null,b=null,S=()=>{if(l)return Promise.resolve(l);if(n)return n;let c=o().then(C=>(C.setMentionIconRenderer(t),l=C.mountContextMentions({mentionConfig:s,textarea:e.textarea,composerInput:g??void 0,anchor:e.anchor,contextRow:d,getMessages:e.getMessages,getConfig:()=>e.config,liveRegionHost:e.liveRegionHost,popoverContainer:e.popoverContainer,onPickerOpenChange:B,emit:y}),l)).catch(C=>(typeof console<"u"&&console.warn("[Persona] Failed to load context mentions runtime",C),n===c&&(n=null),null));return n=c,c},O=()=>{r().then(c=>{let C=c.mountInlineComposer({textarea:e.textarea,renderToken:w=>io(w,{render:s.renderMentionToken}),onMentionRemoved:w=>l?.untrackMention(w)});g=C.input,h=C.destroy;let P=m;P.replaceWith(C.element),m=C.element,b={next:C.element,prev:P},M?.(C.element,P),l?l.rebindComposer(C.input):n&&n.then(w=>w?.rebindComposer(C.input))}).catch(c=>{typeof console<"u"&&console.warn("[Persona] Failed to load inline mention composer",c)})};s.display==="inline"&&O();let k=[],F=new Map;for(let c of i){if(!c.showButton)continue;let C=a({config:{...s,buttonIconName:c.buttonIconName,buttonTooltipText:c.buttonTooltipText},onOpen:()=>{S().then(P=>P?.openMenu(c.trigger))}});k.push(C),F.set(c.trigger,C.button)}let B=(c,C,P)=>{let w=F.get(C);w&&(w.setAttribute("aria-expanded",c?"true":"false"),c?w.setAttribute("aria-controls",P):w.removeAttribute("aria-controls"))};return{affordanceButtons:k.map(c=>c.wrapper),contextRow:d,handleInput:c=>{if(l){l.handleInput();return}if(!Kt(c))return;let C=m,P=C.selectionStart??0;Gt(C.value,P,i)&&S().then(w=>w?.handleInput())},handleKeydown:c=>{if(l?.isMenuOpen())return l.handleKeydown(c);if(c.key==="Backspace"&&l?.hasMentions()&&!b){let C=m,P=C.selectionStart===0&&C.selectionEnd===0;if((C.value.length===0||P)&&l.removeLastChip())return c.preventDefault(),!0}return!1},isMenuOpen:()=>l?.isMenuOpen()??!1,hasMentions:()=>l?.hasMentions()??!1,getMentionRefs:()=>l?.getMentionRefs()??[],collectForSubmit:()=>l?.collectForSubmit()??null,takeInlineCommand:async c=>x(c)?(l??await S())?.dispatchInlineCommand(c)??null:null,clear:()=>l?.clear(),prefetch:()=>{o().catch(()=>{})},onComposerSwap:c=>{M=c,b&&c(b.next,b.prev)},destroy:()=>{l?.destroy(),h?.();for(let c of k)c.wrapper.remove();f&&d.remove()}}}export{Zo as createAskUserSheetHandlers,Dr as createContextMentionOrchestrator};
7
+ /*! Bundled license information:
8
+
9
+ lucide/dist/esm/icons/activity.mjs:
10
+ lucide/dist/esm/icons/arrow-down.mjs:
11
+ lucide/dist/esm/icons/arrow-left.mjs:
12
+ lucide/dist/esm/icons/arrow-right.mjs:
13
+ lucide/dist/esm/icons/arrow-up-right.mjs:
14
+ lucide/dist/esm/icons/arrow-up.mjs:
15
+ lucide/dist/esm/icons/at-sign.mjs:
16
+ lucide/dist/esm/icons/bot.mjs:
17
+ lucide/dist/esm/icons/check.mjs:
18
+ lucide/dist/esm/icons/chevron-down.mjs:
19
+ lucide/dist/esm/icons/chevron-left.mjs:
20
+ lucide/dist/esm/icons/chevron-right.mjs:
21
+ lucide/dist/esm/icons/chevron-up.mjs:
22
+ lucide/dist/esm/icons/clipboard-copy.mjs:
23
+ lucide/dist/esm/icons/clipboard.mjs:
24
+ lucide/dist/esm/icons/code-xml.mjs:
25
+ lucide/dist/esm/icons/copy.mjs:
26
+ lucide/dist/esm/icons/download.mjs:
27
+ lucide/dist/esm/icons/ellipsis-vertical.mjs:
28
+ lucide/dist/esm/icons/ellipsis.mjs:
29
+ lucide/dist/esm/icons/external-link.mjs:
30
+ lucide/dist/esm/icons/eye.mjs:
31
+ lucide/dist/esm/icons/file-code.mjs:
32
+ lucide/dist/esm/icons/file-spreadsheet.mjs:
33
+ lucide/dist/esm/icons/file-text.mjs:
34
+ lucide/dist/esm/icons/file.mjs:
35
+ lucide/dist/esm/icons/history.mjs:
36
+ lucide/dist/esm/icons/image-plus.mjs:
37
+ lucide/dist/esm/icons/loader-circle.mjs:
38
+ lucide/dist/esm/icons/loader.mjs:
39
+ lucide/dist/esm/icons/maximize.mjs:
40
+ lucide/dist/esm/icons/menu.mjs:
41
+ lucide/dist/esm/icons/message-square.mjs:
42
+ lucide/dist/esm/icons/mic.mjs:
43
+ lucide/dist/esm/icons/minimize.mjs:
44
+ lucide/dist/esm/icons/minus.mjs:
45
+ lucide/dist/esm/icons/panel-left.mjs:
46
+ lucide/dist/esm/icons/paperclip.mjs:
47
+ lucide/dist/esm/icons/pencil.mjs:
48
+ lucide/dist/esm/icons/plus.mjs:
49
+ lucide/dist/esm/icons/quote.mjs:
50
+ lucide/dist/esm/icons/refresh-cw.mjs:
51
+ lucide/dist/esm/icons/search.mjs:
52
+ lucide/dist/esm/icons/send.mjs:
53
+ lucide/dist/esm/icons/shield-alert.mjs:
54
+ lucide/dist/esm/icons/shield-check.mjs:
55
+ lucide/dist/esm/icons/shield-x.mjs:
56
+ lucide/dist/esm/icons/square.mjs:
57
+ lucide/dist/esm/icons/star.mjs:
58
+ lucide/dist/esm/icons/thumbs-down.mjs:
59
+ lucide/dist/esm/icons/thumbs-up.mjs:
60
+ lucide/dist/esm/icons/trash-2.mjs:
61
+ lucide/dist/esm/icons/trash.mjs:
62
+ lucide/dist/esm/icons/upload.mjs:
63
+ lucide/dist/esm/icons/volume-2.mjs:
64
+ lucide/dist/esm/icons/x.mjs:
65
+ lucide/dist/esm/lucide.mjs:
66
+ (**
67
+ * @license lucide v1.18.0 - ISC
68
+ *
69
+ * This source code is licensed under the ISC license.
70
+ * See the LICENSE file in the root directory of this source tree.
71
+ *)
72
+ */
@@ -0,0 +1,17 @@
1
+ import{a as Y}from"./chunk-6V3MNEKB.js";import{a as K}from"./chunk-QPPJUSZH.js";var x=16e3,ue=24e3,ge=4096,he=x*2*8,pe=4,fe=1380533830,me=3e4,ve=5e3,ye=3e4,be=3e4,Se=6e5,we="full-duplex-v1",Ae=300,ke=2e3,Me=2e3,Ce="runtype-browser-v1",Te=54e4,Ee="You're talking to an AI assistant. Voice is processed by OpenAI.",Ie=8e3,Pe=4e3,Ve=12,J=2e3;function _e(i,e){let t="Conversation so far:",s=e.slice(0,Pe).trim(),n=Ie-(s?s.length+2:0)-t.length,r=[];for(let l of i.slice(-Ve).reverse()){let a=l.content.replace(/\s+/g," ").trim();if(!a)continue;a.length>J&&(a=`${a.slice(0,J-1)}\u2026`);let o=`${l.role==="user"?"User":"Assistant"}: ${a}`;if(o.length+1>n)break;n-=o.length+1,r.unshift(o)}let d=r.length>0?[`${t}
2
+ ${r.join(`
3
+ `)}`]:[];return s&&d.push(s),d.join(`
4
+
5
+ `)}function Re(i){return i.byteLength>=44&&new DataView(i).getUint32(0,!1)===fe?new Uint8Array(i,44):new Uint8Array(i)}function Z(i){let e=i.replace(/\/+$/,"");return/^wss?:\/\//i.test(e)?e:/^https?:\/\//i.test(e)?e.replace(/^http/i,"ws"):`${typeof window<"u"&&window.location?.protocol==="https:"?"wss:":"ws:"}//${e}`}function Le(i){return Z(i).replace(/^ws/i,"http")}function De(i){return typeof i!="number"||!Number.isFinite(i)?ye:Math.min(Se,Math.max(be,Math.round(i)))}var P=class{constructor(e){this.config=e;this.type="runtype";this.#e=null;this.#d=null;this.#u=[];this.#i=null;this.#r=null;this.#a=null;this.#f=[];this.#m=0;this.#n=null;this.#g=!1;this.#c=!1;this.#s=0;this.#w=!1;this.#F=Number.NEGATIVE_INFINITY;this.#o=null;this.#l=!1;this.#A=!1;this.#k=0;this.#h=0;this.#v=!1;this.bridge=null;this.#C=!1;this.#y=new Set;this.#b=new Map;this.#T=new Set;this.#_=!1;this.#E=null;this.#R=null;this.#L=Promise.resolve();this.#D=new Set;this.#S=!1;this.#O=new Set;this.#N=new Set;this.#z=[];this.#B=[];this.#W=[];this.#U=[];this.#x=[]}#e;#d;#u;#i;#r;#a;#f;#m;#n;#g;#c;#s;#w;#F;#o;#l;#A;#k;#h;#M;#v;#C;#y;#b;#T;#V;#_;#E;#R;#L;#D;#S;#O;#N;#z;#B;#W;#U;#x;async connect(){}setSessionBridge(e){this.bridge=e}prewarm(){if(this.#g||this.#o)return;let e=this.config?.agentId,t=this.config?.clientToken,s=this.config?.host;if(!e||!t||!s)return;let n=Date.now();if(!(n-this.#F<me)){this.#F=n;try{this.config?.prewarmMode==="attach"?this.#te(s,e,t):this.#ee(s,e,t)}catch{}}}#ee(e,t,s){if(typeof fetch!="function")return;let n=`${Le(e)}/v1/client/agents/${encodeURIComponent(t)}/voice/prewarm`;fetch(n,{method:"POST",headers:{Authorization:`Bearer ${s}`},keepalive:!0}).catch(()=>{})}#te(e,t,s){let n=new URLSearchParams,r=this.config?.attachIdleMs,d=De(r);r!==void 0&&n.set("attachIdleMs",String(d));let l=new WebSocket(this.#G(e,t,n),["runtype.bearer","runtype.attach",s]);l.binaryType="arraybuffer";let a=()=>{},o=new Promise(u=>{a=u}),c={ws:l,state:"connecting",ready:o,settle:a,openedAt:0,idleTimer:void 0};this.#o=c,l.onopen=()=>{this.#o===c&&(c.state=l.protocol==="runtype.attach"?"attached":"live",c.openedAt=Date.now(),this.#X(c,d),c.state==="attached"&&l.send('{"type":"ping"}'),c.settle())},l.onmessage=u=>{if(this.#o!==c||typeof u.data!="string")return;let p;try{p=JSON.parse(u.data)}catch{return}p.type==="attached"&&typeof p.idleMs=="number"&&this.#X(c,p.idleMs-(Date.now()-c.openedAt))},l.onerror=()=>{},l.onclose=()=>{this.#o===c&&this.#I()}}#X(e,t){clearTimeout(e.idleTimer),e.idleTimer=setTimeout(()=>{this.#o===e&&this.#I()},Math.max(0,t))}#I(){let e=this.#o;if(!e)return;this.#o=null,clearTimeout(e.idleTimer);let{ws:t}=e;if(t.onopen=null,t.onmessage=null,t.onerror=null,t.onclose=null,e.settle(),t.readyState===WebSocket.CONNECTING||t.readyState===WebSocket.OPEN)try{t.close(1e3,"prewarm released")}catch{}}async#se(){let e=this.#o;if(!e)return null;if(e.state==="connecting"){let t;await Promise.race([e.ready,new Promise(s=>{t=setTimeout(s,ve)})]),clearTimeout(t)}return this.#o!==e?null:e.state==="connecting"||e.ws.readyState!==WebSocket.OPEN?(this.#I(),null):(this.#o=null,clearTimeout(e.idleTimer),{ws:e.ws,live:e.state==="live"})}#G(e,t,s){let n=["partial_transcript","context"];this.bridge&&this.config?.clientDelegation!==!1&&n.push("client_delegation","delegation_update"),s&&n.unshift("attach");let r=new URLSearchParams({voiceProtocol:Ce,clientVersion:`persona/${K}`,voiceCapabilities:we,clientCapabilities:n.join(",")});return s?.forEach((d,l)=>r.set(l,d)),`${Z(e)}/ws/agents/${encodeURIComponent(t)}/voice?${r}`}async startListening(){if(this.#g)return;let e=this.config?.agentId,t=this.config?.clientToken,s=this.config?.host;if(!e)throw new Error("Runtype voice requires an agentId");if(!t)throw new Error("Runtype voice requires a clientToken");if(!s)throw new Error("Runtype voice requires a host (or widget apiUrl)");let n=++this.#s;this.#w=!1,this.#g=!0;try{let r=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:x,channelCount:1,echoCancellation:!0}});if(n!==this.#s){r.getTracks().forEach(u=>u.stop());return}this.#i=r;let d=window.AudioContext||window.webkitAudioContext,l=new d({sampleRate:x});l.state==="suspended"&&await l.resume().catch(()=>{}),this.#d=l;let a=this.config?.createPlaybackEngine?await this.config.createPlaybackEngine():new Y(ue);if(n!==this.#s){a.destroy(),r.getTracks().forEach(u=>u.stop()),l.close().catch(()=>{});return}this.#n=a,this.#j(),this.#ie(l,r,n);let o=await this.#se();if(n!==this.#s){o?.ws.close(1e3,"client ended call");return}if(o){let{ws:u}=o;this.#e=u,this.#K(u,n),o.live||u.send('{"type":"start"}'),this.#$(u),this.#t("listening");return}let c=new WebSocket(this.#G(s,e),["runtype.bearer",t]);c.binaryType="arraybuffer",this.#e=c,c.onopen=()=>{n===this.#s&&(this.#$(c),this.#t("listening"))},this.#K(c,n)}catch(r){throw this.#p(),this.#P(r),this.#t("error"),r}}#K(e,t){e.onmessage=s=>this.#ne(s,t),e.onerror=()=>{t===this.#s&&(this.#P(new Error("Voice connection failed")),this.#t("error"),this.#p())},e.onclose=s=>{if(this.#w){this.#w=!1;return}if(t===this.#s){if(s.code!==1e3){let n=s.code?` (code ${s.code})`:"";this.#P(new Error(`Voice connection closed${n}`)),this.#t("error")}else this.#t("idle");this.#p()}}}getDisclosure(){let e=this.config?.disclosureText;return this.#g&&this.#l&&e!==!1?e||Ee:null}async stopListening(){this.#p(),this.#t("idle")}async disconnect(){this.#p(),this.#t("disconnected"),this.#z=[],this.#B=[],this.#W=[],this.#U=[],this.#x=[]}stopPlayback(){this.#Q();let e=this.#e;e&&e.readyState===WebSocket.OPEN&&(this.#l&&(this.#k=Date.now()+ke,e.send('{"type":"cancel"}')),this.#t("listening"))}getInterruptionMode(){return"barge-in"}isBargeInActive(){return this.#g}onLevel(e){this.#u.push(e)}async deactivateBargeIn(){this.#p(),this.#t("idle")}#ie(e,t,s){let n=e.createMediaStreamSource(t);this.#r=n;let r=e.createScriptProcessor(ge,1,1);this.#a=r,r.onaudioprocess=d=>{if(s!==this.#s)return;let l=this.#e,a=l?.readyState===WebSocket.OPEN;if(l&&!a&&l.readyState!==WebSocket.CONNECTING)return;let o=d.inputBuffer.getChannelData(0),c=new Int16Array(o.length),u=0;for(let p=0;p<o.length;p++){let f=Math.max(-1,Math.min(1,o[p]));u+=f*f,c[p]=f<0?f*32768:f*32767}if(l&&a)this.#$(l),l.send(c.buffer);else for(this.#f.push(c.buffer),this.#m+=c.byteLength;this.#m>he;)this.#m-=this.#f.shift().byteLength;if(this.#u.length>0){let p=Math.sqrt(u/o.length),f=Math.max(0,Math.min(1,p*pe));for(let g of this.#u)g(f)}},n.connect(r),r.connect(e.destination)}#$(e){for(let t of this.#f)e.send(t);this.#f=[],this.#m=0}#ne(e,t){if(t!==this.#s)return;if(e.data instanceof ArrayBuffer){this.#ce(e.data,t);return}let s;try{s=JSON.parse(e.data)}catch{return}switch(s.type){case"session_config":s.speechMode&&(this.#l=s.speechMode==="speech_to_speech",this.#n?.setContinuousMode?.(this.#l)),Array.isArray(s.capabilities)&&(this.#y=new Set(s.capabilities)),typeof s.callId=="string"&&(this.#V=s.callId),this.#C=this.#l&&this.#y.has("client_delegation")&&!!this.bridge,this.#l&&!this.#c&&this.#t("listening"),this.#y.has("context")&&!this.#_&&(this.#_=!0,this.#E=this.#oe());break;case"transcript_update":{let n=s.role==="assistant"?"assistant":"user",r=s.utteranceId??s.turnId;if(!r||n==="assistant"&&this.#q())break;let d=String(r);if(n==="user")s.final===!0&&this.#Y(t),this.#S=!1;else if(this.#S&&!this.#O.has(d)&&(this.#N.add(d),this.#S=!1),this.#O.add(d),this.#N.has(d))break;this.#H(n,s.text??"",s.final===!0,{turnId:d,...typeof s.startMs=="number"&&{startMs:s.startMs},...typeof s.endMs=="number"&&{endMs:s.endMs},...this.#C&&{caption:!0}});break}case"delegation_started":case"delegation_completed":{let n=String(s.delegationId??s.turnId);if(s.type==="delegation_started"){this.#Y(t);let r=s.input;this.#C&&r&&this.#ae(n,{delegationId:n,userText:String(r.text??""),userUtteranceIds:Array.isArray(r.userUtteranceIds)?r.userUtteranceIds.filter(d=>typeof d=="string"):[],messages:Array.isArray(r.messages)?r.messages:[]},t)}else s.speak!==!1&&this.#D.has(n)&&(this.#S=!0);this.#A=s.type==="delegation_started",!this.#c&&!this.#q()&&this.#t(this.#A?"processing":"listening");break}case"delegation_cancelled":this.#J(String(s.delegationId),s.reason!=="session_ending"&&s.reason!=="provider_cancelled");break;case"warning":console.warn(`[Persona voice] ${s.code}: ${s.message??""}`,this.#V??""),s.delegationId&&(s.code==="UNKNOWN_DELEGATION"||s.code==="LATE_RESULT_LIMIT")&&this.#J(String(s.delegationId));break;case"audio_clear":this.#Q(),this.#k=0,this.#t("listening");break;case"transcript_interim":this.#t("listening"),this.#H("user",s.text??"",!1);break;case"transcript_final":{let n=s.role==="assistant"?"assistant":"user";this.#t(n==="user"?"processing":"speaking"),this.#H(n,s.text??"",!0);break}case"audio_end":this.#n?this.#n.markStreamEnd():(this.#c=!1,this.#t("listening"));break;case"metrics":this.#de({llmMs:s.llm_ms,ttsMs:s.tts_ms,firstAudioMs:s.first_audio_ms,totalMs:s.total_ms});break;case"error":this.#P(new Error(s.error||"Voice error")),this.#t("error");break}}async#oe(){let e=this.bridge?.getHistory()??[],t="";try{let s=this.config?.callContext;t=String((typeof s=="function"?await s():s)??"")}catch{}return _e(e,t)}#Y(e){let t=this.#E;if(!t)return;this.#E=null;let s=!1,n=t.then(r=>{let d=this.#e;s||!r||e!==this.#s||d?.readyState!==WebSocket.OPEN||d.send(JSON.stringify({type:"context",text:r}))});this.#R={done:n,drop:()=>s=!0}}async#re(){let e=this.#R;if(!e)return;let t,s=await Promise.race([e.done.then(()=>!1),new Promise(n=>{t=setTimeout(()=>n(!0),Me)})]);clearTimeout(t),s&&e.drop()}#J(e,t=!1){this.#T.add(e),this.bridge?.dropDelegation?.(e,t),this.#b.get(e)?.abort()}#ae(e,t,s){let n=this.bridge,r=(d,l,a)=>{let o=this.#e;return s!==this.#s||o?.readyState!==WebSocket.OPEN||this.#T.has(e)?!1:(o.send(JSON.stringify({type:d,delegationId:e,status:l,text:a})),!0)};this.#L=this.#L.then(async()=>{if(s!==this.#s||this.#T.has(e))return;let d=await n.runDelegatedTurn(t).catch(()=>({status:"failed",text:""}));await this.#re();let l=!!d.followUp,a=l&&this.#y.has("delegation_update");if(!r(a?"delegation_update":"delegation_result",l&&!a?"completed":d.status,d.text)||(d.status!=="failed"&&this.#D.add(e),!d.followUp))return;let c=new AbortController;this.#b.set(e,c),d.followUp({signal:c.signal,approvalTimeoutMs:this.config?.approvalTimeoutMs&&Math.min(this.config.approvalTimeoutMs,Te),readBack:a,onUpdate:u=>r("delegation_update","pending_approval",u)}).then(u=>{this.#b.delete(e),a&&u&&!c.signal.aborted&&r("delegation_result",u.status,u.text)})})}#ce(e,t){if(t!==this.#s||!this.#n||this.#q())return;let s=Re(e);s.length!==0&&(this.#c||(this.#c=!0,this.#t("speaking")),this.#j(),this.#n.enqueue(s),this.#l&&this.#le(s.length))}#q(){return Date.now()<this.#k}#j(){if(this.#v||!this.#n)return;this.#v=!0;let e=this.#s;this.#n.onFinished(()=>{e===this.#s&&(this.#v=!1,this.#Z())})}#le(e){let t=Date.now();this.#h=Math.max(t,this.#h)+e/48,clearTimeout(this.#M),this.#M=setTimeout(()=>this.#Z(),this.#h-t+Ae)}#Z(){this.#c=!1,this.#h=0,this.#e&&this.#e.readyState===WebSocket.OPEN&&this.#t(this.#A?"processing":"listening")}#Q(){this.#n?.flush(),this.#v=!1,this.#j(),this.#c=!1,this.#h=0,clearTimeout(this.#M)}#p(){this.#s+=1,this.#g=!1,this.#c=!1,this.#I(),this.#l=!1,this.#A=!1,this.#C=!1,this.#y=new Set;for(let e of this.#b.values())e.abort();if(this.#b.clear(),this.#T.clear(),this.#V=void 0,this.#_=!1,this.#E=null,this.#R=null,this.#L=Promise.resolve(),this.#D.clear(),this.#S=!1,this.#O.clear(),this.#N.clear(),this.#v=!1,this.#k=0,this.#h=0,clearTimeout(this.#M),this.#f=[],this.#m=0,this.#a&&(this.#a.onaudioprocess=null,this.#a.disconnect(),this.#a=null),this.#r&&(this.#r.disconnect(),this.#r=null),this.#i&&(this.#i.getTracks().forEach(e=>e.stop()),this.#i=null),this.#d&&(this.#d.close().catch(()=>{}),this.#d=null),this.#n&&(this.#n.destroy(),this.#n=null),this.#e){this.#w=!0;try{this.#e.close(1e3,"client ended call")}catch{}this.#e=null}}onResult(e){this.#z.push(e)}onError(e){this.#B.push(e)}onStatusChange(e){this.#W.push(e)}onTranscript(e){this.#U.push(e)}onMetrics(e){this.#x.push(e)}#t(e){this.#W.forEach(t=>t(e))}#P(e){this.#B.forEach(t=>t(e))}#H(e,t,s,n){this.#U.forEach(r=>r(e,t,s,n))}#de(e){this.#x.forEach(t=>t(e))}};var C=class{constructor(e={}){this.config=e;this.type="browser";this.#e=null;this.#d=[];this.#u=[];this.#i=[];this.#r=!1;this.#a=typeof window<"u"?window:void 0}#e;#d;#u;#i;#r;#a;async connect(){this.#i.forEach(e=>e("connected"))}async startListening(){try{if(this.#r)throw new Error("Already listening");if(!this.#a)throw new Error("Window object not available");let e=this.#a.SpeechRecognition||this.#a.webkitSpeechRecognition;if(!e)throw new Error("Browser speech recognition not supported");this.#e=new e,this.#e.lang=this.config?.language||"en-US",this.#e.continuous=this.config?.continuous||!1,this.#e.interimResults=!0,this.#e.onresult=t=>{let s=Array.from(t.results).map(r=>r[0]).map(r=>r.transcript).join(""),n=t.results[t.results.length-1].isFinal;this.#d.forEach(r=>r({text:s,confidence:n?.8:.5,provider:"browser"})),n&&!this.config?.continuous&&this.stopListening()},this.#e.onerror=t=>{this.#u.forEach(s=>s(new Error(t.error))),this.#i.forEach(s=>s("error"))},this.#e.onstart=()=>{this.#r=!0,this.#i.forEach(t=>t("listening"))},this.#e.onend=()=>{this.#r=!1,this.#i.forEach(t=>t("idle"))},this.#e.start()}catch(e){throw this.#u.forEach(t=>t(e)),this.#i.forEach(t=>t("error")),e}}async stopListening(){this.#e&&(this.#e.stop(),this.#e=null),this.#r=!1,this.#i.forEach(e=>e("idle"))}onResult(e){this.#d.push(e)}onError(e){this.#u.push(e)}onStatusChange(e){this.#i.push(e)}async disconnect(){await this.stopListening(),this.#i.forEach(e=>e("disconnected"))}static isSupported(){return"SpeechRecognition"in window||"webkitSpeechRecognition"in window}};function _(i){switch(i.type){case"runtype":if(!i.runtype)throw new Error("Runtype voice provider requires configuration");return new P(i.runtype);case"browser":if(!C.isSupported())throw new Error("Browser speech recognition not supported");return new C(i.browser||{});case"custom":{let e=i.custom;if(!e)throw new Error("Custom voice provider requires a `custom` provider instance or factory");let t=typeof e=="function"?e():e;if(!t||typeof t.startListening!="function")throw new Error("Custom voice provider `custom` must be a VoiceProvider (or a factory returning one)");return t}default:throw new Error(`Unknown voice provider type: ${i.type}`)}}function Q(i){if(i?.type==="custom"&&i.custom)return _({type:"custom",custom:i.custom});if(i?.type==="runtype"&&i.runtype)return _({type:"runtype",runtype:i.runtype});if(C.isSupported())return _({type:"browser",browser:i?.browser||{language:"en-US"}});throw new Error("No supported voice providers available")}function Oe(i){try{return Q(i),!0}catch{return!1}}var ee=i=>i.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,""),$=class{constructor(e){this.host=e;this.turns=new Map;this.latestId=null;this.cancelled=new Set}apply(e,t,s,n,r,d){let l=this.host;t=t.trim();let a=this.turns.get(n);if(a||(a={},this.turns.set(n,a),this.latestId=n),e==="user"){a.userFinal=s;let o=a.userId?l.find(a.userId):void 0;if(o){let c=a.userStartMs===void 0&&r!==void 0;c&&(a.userStartMs=r),l.upsert({...o,content:t,voiceProcessing:!s,...c&&this.placeBefore(this.startedAfter(r))})}else{a.userStartMs=r;let c=a.assistantId?l.find(a.assistantId):void 0;a.userId=l.inject({role:"user",content:t,streaming:!1,voiceProcessing:!s,voiceCaption:d,...this.placeBefore(this.startedAfter(r)??c)}).id}}else if(!this.cancelled.has(n)){a.assistantFinal=s;let o=a.assistantId?l.find(a.assistantId):void 0;if(o){let c=a.assistantStartMs===void 0&&r!==void 0;c&&(a.assistantStartMs=r),l.upsert({...o,content:t,streaming:!s,voiceProcessing:!s,...c&&this.placeBefore(this.startedAfter(r))})}else t&&(a.assistantStartMs=r,a.assistantId=l.inject({role:"assistant",content:t,streaming:!s,voiceProcessing:!s,voiceCaption:d,...this.placeBefore(this.startedAfter(r))}).id);s&&a.assistantId&&l.markSpoken(a.assistantId)}this.sync()}claimUserTurn(e,t=[]){let s=t[t.length-1];for(let r of t)r!==s&&(this.turns.has(r)||this.turns.set(r,{}),this.turns.get(r).claimed=!0);let n;if(s){if(n=this.turns.get(s),n||(n={},this.turns.set(s,n)),n.claimed)return null;(!n.userId||!this.host.find(n.userId))&&(n.userFinal=!0,n.userId=this.host.inject({role:"user",content:e.trim()}).id)}else{let r=ee(e),d=[...this.turns.values()].reverse().flatMap(l=>{let a=l.userId&&!l.claimed?this.host.find(l.userId):void 0;return a?[{turn:l,text:ee(a.content)}]:[]}).filter(({text:l})=>l&&r);n=(d.find(({text:l})=>l===r)??d.find(({text:l})=>l.startsWith(r)||r.startsWith(l)))?.turn}return n?(n.claimed=!0,n.userId):null}cancel(){let e=this.inFlight();if(e.length===0){let t=this.awaiting();if(!t)return;e=[t]}for(let t of e)this.cancelled.add(t);this.closeReplies(e),this.sync()}fail(e){let t=this.awaiting(),s=this.inFlight();if(!t&&s.length===0)return;for(let d of s)this.turns.get(d).assistantFinal=!0;this.closeReplies(s);let n=this.host.inject({role:"assistant",content:e,streaming:!1,voiceProcessing:!1}),r=t?this.turns.get(t):void 0;r&&(r.assistantId=n.id,r.assistantFinal=!0),this.sync()}settle(){if(this.turns.size===0)return;let e=this.pending(),t=new Set;for(let s of this.turns.values())s.userId&&t.add(s.userId),s.assistantId&&(t.add(s.assistantId),this.host.markSpoken(s.assistantId));this.turns.clear(),this.latestId=null,this.host.settle(t),e&&this.host.setStreaming(!1)}startedAfter(e){if(e===void 0)return;let t;for(let s of this.turns.values())for(let[n,r]of[[s.userId,s.userStartMs],[s.assistantId,s.assistantStartMs]])n&&r!==void 0&&r>e&&(!t||r<t.start)&&(t={start:r,id:n});return t&&this.host.find(t.id)}placeBefore(e){if(!e)return;let t=e.sequence??0,s=t-1;for(let n of this.turns.values())for(let r of[n.userId,n.assistantId]){let d=r?this.host.find(r):void 0,l=d?.sequence;d?.createdAt===e.createdAt&&l!==void 0&&l>s&&l<t&&(s=l)}return{createdAt:e.createdAt,sequence:(s+t)/2}}closeReplies(e){let t=new Set;for(let s of e){let n=this.turns.get(s)?.assistantId;n&&(t.add(n),this.host.markSpoken(n))}t.size>0&&this.host.settle(t)}inFlight(){let e=[];for(let[t,s]of this.turns)s.assistantId&&!s.assistantFinal&&!this.cancelled.has(t)&&e.push(t);return e}awaiting(){let e=this.latestId;if(!e)return null;let t=this.turns.get(e);return t?.userFinal&&!t.assistantId&&!t.claimed&&!this.cancelled.has(e)?e:null}pending(){return this.awaiting()!==null||this.inFlight().length>0}sync(){this.host.setStreaming(this.pending())}};var Ne="I need your answer in the chat before I can continue.";var te="no|nope|never ?mind|decline(?: it| that)?|cancel(?: it| that| this)?(?: (?:the|my|that|this) (?:[a-z]+ )?(?:order|request))?|don'?t (?:do|place) (?:it|that|the (?:[a-z]+ )?order)",Be=new RegExp(`^(?:${te})(?: (?:${te}))?(?: thanks| thank you)?$`),We=i=>Be.test(i.toLowerCase().replace(/[^a-z' ]+/g," ").replace(/\s+/g," ").trim()),se="Briefly tell the user what you're about to do and ask them to approve or decline it in the chat. Don't claim it's done.",ie=()=>new Promise(i=>setTimeout(i,50)),q=(i,e)=>i.length>e?`${i.slice(0,e-1).trimEnd()}\u2026`:i,E=i=>i.replace(/^webmcp:/,"").replace(/([a-z\d])([A-Z])/g,"$1 $2").replace(/[_\-.]+/g," ").trim().toLowerCase();function j(i,e=0){if(i==null||i==="")return"";if(typeof i!="object")return String(i);if(e>2)return"";if(Array.isArray(i))return i.map(r=>j(r,e+1)).filter(Boolean).join(", ");let t=i,s=t.quantity??t.qty??t.count,n=t.name??t.item??t.product??t.title;return s!=null&&n!=null&&typeof n!="object"?`${s} ${n}`:Object.entries(t).filter(([r])=>!r.startsWith("_")).map(([r,d])=>{let l=j(d,e+1);return l&&(e?`${E(r)} ${l}`:`${E(r)}: ${l}`)}).filter(Boolean).join(e?", ":"; ")}function ne(i){let e=i.length>1?"These actions need the user's approval in the chat before they happen:":"This action needs the user's approval in the chat before it happens:",t=1e3-e.length-se.length-2,s=i.map(n=>{let r=[E(n.toolName)];n.description&&r.push(`(${q(n.description.trim(),160)})`);let d=j(n.parameters);return d&&r.push(`with ${d}`),n.reason&&r.push(`because: ${q(n.reason.trim(),160)}`),q(`- ${r.join(" ")}`,Math.floor(t/i.length)-1)});return`${e}
6
+ ${s.join(`
7
+ `)}
8
+
9
+ ${se}`}var R=i=>i.variant==="approval"&&i.approval?.status==="pending";function Ue(i){let e=null,t=null,s=()=>i.track(e??t),n=[],r=new Map,d=new Map,l=(g,m)=>{r.set(g,[...r.get(g)??[],m]),r.size>32&&r.delete(r.keys().next().value)},a=g=>i.messages().find(m=>m.id===g),o=g=>g.approvals.filter(m=>a(m)?.approval?.status==="pending"),c=g=>E(a(g)?.approval?.toolName??""),u=(g,m,b)=>{g.outcome={status:m,text:b};for(let S of o(g))i.decide(S)},p=g=>g.flatMap(m=>i.messages().find(b=>b.id===m)??[]).filter(m=>!m.variant&&m.content.trim()).map(m=>m.content.trim()).join(`
10
+
11
+ `),f=async g=>{do await ie();while(i.busy()&&!(g&&(i.parked()||g.failed)))};return{getHistory:()=>i.messages().flatMap(g=>(g.role==="user"||g.role==="assistant")&&!g.variant&&!g.voiceProcessing&&!g.voiceCaption&&g.content?[{role:g.role,content:g.content}]:[]),dropDelegation(g,m){d.set(g,!!m),d.size>32&&d.delete(d.keys().next().value);let b=m&&n.find(S=>S.delegationId===g);b&&!b.outcome&&u(b,"timeout","");for(let S of r.get(g)??[])S.dropped=!0,S.ids.length&&i.unspoken(S.ids)},async runDelegatedTurn({delegationId:g,userText:m,userUtteranceIds:b}){let S=n.filter(h=>o(h).length),I=S.flatMap(o);if(I.length===1&&We(m)){let h=c(I[0]);return u(S[0],"denied",""),{status:"denied",text:`Okay, I cancelled the ${h} request. Nothing was done.`}}let H=i.parked()&&i.messages().every(h=>!R(h)||I.includes(h.id));i.busy()&&!H&&await f();let oe=new Set(i.messages().map(h=>h.id)),L=()=>i.messages().filter(h=>!oe.has(h.id)&&h.variant==="approval"),A={ids:[],failed:!1};l(g,A),e=A,s();try{await i.send(m,i.claim(m,b)??void 0),await f(A)}catch{A.failed=!0}finally{e=null,s()}let re=A.ids.flatMap(h=>i.messages().find(y=>y.id===h)??[]),T=p(A.ids),V=A.failed?[]:L().filter(R),ae=new Set(V.map(h=>E(h.approval.toolName)));for(let h of S){if(h.outcome)continue;for(let w of o(h).filter(D=>ae.has(c(D))))h.replaced.add(w),i.decide(w);let y=c(h.approvals[0]);h.approvals.every(w=>h.replaced.has(w))?h.outcome={status:"cancelled",text:`The earlier ${y} request was replaced by the new one; it was not done.`}:H&&h.approvals.every(w=>a(w)?.approval?.status==="denied")&&(h.outcome={status:"cancelled",text:`The earlier ${y} request was replaced by the new one; it was not done.`})}if(V.length){let h=new Set(V.map(w=>w.id)),y={delegationId:g,approvals:[...h],at:Date.now(),replaced:new Set};return n.push(y),d.get(g)&&u(y,"timeout",""),T=`${T}
12
+
13
+ ${ne(V.map(w=>w.approval))}`.trim(),{status:"pending_approval",text:T,followUp:async({signal:w,approvalTimeoutMs:D=3e5,readBack:F=!0,onUpdate:ce})=>{let k={ids:[],failed:!1};r.delete(g),l(g,k);let z=()=>L().filter(v=>h.has(v.id)||k.ids.includes(v.id)),le=()=>L().filter(v=>R(v)&&!h.has(v.id)&&!n.some(M=>M.approvals.includes(v.id))&&(k.ids.includes(v.id)||v.approval?.toolType==="webmcp"&&t===k)),X=()=>{t=k,s()};F&&X();try{for(;!w.aborted&&!y.outcome&&(e||i.busy()||z().some(R));){F&&t!==k&&!o(y).length&&X();let v=le();if(v.length){for(let M of v)h.add(M.id),y.approvals.push(M.id);y.at=Date.now(),ce?.(ne(v.map(M=>M.approval)))}if(Date.now()-y.at>=D&&o(y).length&&(!i.busy()||i.parked())){u(y,"timeout",`That ${c(y.approvals[0])} request expired, so nothing was done.`);break}await ie()}}finally{t===k&&(t=null,s()),n.splice(n.indexOf(y),1)}if(w.aborted)return null;if(y.outcome)return y.outcome;if(k.failed)return{status:"failed",text:`The ${c(y.approvals[0])} request didn't complete.`};let G=z(),O=v=>G.filter(v).map(M=>E(M.approval.toolName)).join(", "),N=G.some(v=>v.approval?.status==="approved"),B=O(v=>v.approval?.status==="denied"&&!y.replaced.has(v.id)),W=O(v=>y.replaced.has(v.id)),U=O(v=>v.approval?.status==="timeout"),de=[N?p(k.ids):"",B&&`The user declined the ${B} request in the chat, so ${N?"that part was not done":"nothing was done"}.`,W&&`The earlier ${W} request was replaced by the new one; it was not done.`,U&&`The ${U} request timed out, so it was not done.`].filter(Boolean).join(`
14
+
15
+ `);return{status:N?"completed":B?"denied":W?"cancelled":U?"timeout":"completed",text:de}}}}return!A.failed&&i.parked()||re.some(h=>h.agentMetadata?.awaitingLocalTool&&!h.agentMetadata.askUserQuestionAnswered&&!h.toolCall?.name?.startsWith("webmcp:"))?{status:A.failed?"failed":"completed",text:`${T}
16
+
17
+ ${Ne}`.trim()}:{status:!A.failed&&T?"completed":"failed",text:T}}}}var xe=(i,e,t,s)=>{let n=i.session;try{i.keyed=t?new t({find:o=>n.messages.find(c=>c.id===o),inject:o=>n.injectMessage(o),upsert:o=>n.upsertMessage(o),settle:o=>{n.messages=n.messages.map(c=>o.has(c.id)?{...c,streaming:!1,voiceProcessing:!1}:c),n.callbacks.onMessagesChanged([...n.messages])},setStreaming:o=>{(o||!i.busy())&&i.setStreaming(o)},markSpoken:o=>{n.ttsSpokenMessageIds.add(o)}}):null,s&&e.setSessionBridge&&e.setSessionBridge(s({messages:()=>n.messages,busy:()=>i.busy(),parked:()=>n.webMcpApprovalResolvers.size>0,claim:(o,c)=>i.keyed?.claimUserTurn(o,c)??null,send:(o,c)=>n.sendMessage(o,{viaVoice:!0,voiceTurn:{userMessageId:c}}),track:o=>{i.setDelegation(o)},unspoken:o=>{for(let c of o)n.ttsSpokenMessageIds.delete(c);n.streaming||n.speakLatestAssistantMessage(o)},decide:o=>{if(n.webMcpApprovalResolvers.has(o))return n.resolveWebMcpApproval(o,"denied");let c=n.messages.find(u=>u.id===o)?.approval;c?.status==="pending"&&n.resolveApproval(c,"denied")}}));let r=i.generation(),d=()=>i.provider()===e&&r===i.generation(),a=(n.config.voiceRecognition??{}).processingErrorText??"Voice processing failed. Please try again.";e.onResult(o=>{d()&&o.provider!=="runtype"&&o.text&&o.text.trim()&&n.sendMessage(o.text,{viaVoice:!0})}),e.onTranscript&&e.onTranscript((o,c,u,p)=>{if(d()){if(p?.turnId){i.keyed?.apply(o,c,u,p.turnId,p.startMs,p.caption);return}if(o==="user"){if(i.pendingUser)n.upsertMessage({id:i.pendingUser,role:"user",content:c,createdAt:new Date().toISOString(),streaming:!1,voiceProcessing:!u});else{let f=n.injectMessage({role:"user",content:c,streaming:!1,voiceProcessing:!u});i.pendingUser=f.id}if(u){i.turns().start(p?.turnId),i.pendingUser=null;let f=n.injectMessage({role:"assistant",content:"",streaming:!0,voiceProcessing:!0});i.pendingAssistant=f.id,i.setStreaming(!0)}}else{if(!i.turns().accepts(p?.turnId))return;if(i.pendingAssistant)n.upsertMessage({id:i.pendingAssistant,role:"assistant",content:c,createdAt:new Date().toISOString(),streaming:!u,voiceProcessing:!u});else{let f=n.injectMessage({role:"assistant",content:c,streaming:!u,voiceProcessing:!u});i.pendingAssistant=f.id}u&&(i.pendingAssistant&&n.ttsSpokenMessageIds.add(i.pendingAssistant),i.setStreaming(!1),i.pendingAssistant=null)}}}),e.onLevel&&e.onLevel(o=>{d()&&i.setLevel(Number.isFinite(o)?Math.max(0,Math.min(1,o)):0)}),e.onMetrics&&e.onMetrics(o=>{d()&&n.config.voiceRecognition?.onMetrics?.(o)}),e.onError(o=>{d()&&(console.error("Voice error:",o),i.pendingAssistant&&(n.upsertMessage({id:i.pendingAssistant,role:"assistant",content:a,createdAt:new Date().toISOString(),streaming:!1,voiceProcessing:!1}),i.setStreaming(!1),i.pendingUser=null,i.pendingAssistant=null),i.keyed?.fail(a))}),e.onStatusChange(o=>{d()&&(i.setStatus(o),(o==="listening"||o==="idle"||o==="disconnected")&&i.settlePending(o!=="listening"),(o==="idle"||o==="disconnected")&&i.keyed?.settle(),n.callbacks.onVoiceStatusChanged?.(o))}),e.connect()}catch(r){console.error("Failed to setup voice:",r)}};var $e=i=>{let e=a=>{if(i.original)return;let o=i.config().voiceRecognition??{};i.original={backgroundColor:a.style.backgroundColor,color:a.style.color,borderColor:a.style.borderColor,iconName:o.iconName??"mic",iconSize:parseFloat(o.iconSize??"")||i.iconFallbackPx}},t=(a,o,c)=>{let u=a.querySelector("svg");u&&u.remove();let p=i.original?.iconSize??(parseFloat(i.config().voiceRecognition?.iconSize??"")||i.iconFallbackPx),f=i.renderIcon(o,p,c,1.5);f&&a.appendChild(f)},s=a=>{a.classList.remove("persona-voice-recording","persona-voice-processing","persona-voice-speaking")};return{recording:()=>{let a=i.mic();if(!a)return;e(a);let o=i.config().voiceRecognition??{},c=o.recordingBackgroundColor,u=o.recordingIconColor,p=o.recordingBorderColor;if(s(a),a.classList.add("persona-voice-recording"),i.setMicState("recording"),a.style.backgroundColor=c??"var(--persona-voice-recording-bg, #ef4444)",a.style.color=u??"var(--persona-voice-recording-indicator, #ffffff)",u){let f=a.querySelector("svg");f&&f.setAttribute("stroke",u)}p&&(a.style.borderColor=p),a.setAttribute("aria-label","Stop voice recognition")},processing:()=>{let a=i.mic();if(!a)return;e(a);let o=i.config().voiceRecognition??{},c=i.session().getVoiceInterruptionMode(),u=i.original,p=o.processingIconName??"loader",f=o.processingIconColor??u?.color??"",g=o.processingBackgroundColor??u?.backgroundColor??"",m=o.processingBorderColor??u?.borderColor??"";s(a),a.classList.add("persona-voice-processing"),i.setMicState("processing"),a.style.backgroundColor=g,a.style.borderColor=m;let b=f||"currentColor";a.style.color=b,t(a,p,b),a.setAttribute("aria-label","Processing voice input"),c==="none"&&(a.style.cursor="default")},speaking:()=>{let a=i.mic();if(!a)return;e(a);let o=i.config().voiceRecognition??{},c=i.session().getVoiceInterruptionMode(),u=i.original,p=c==="cancel"?"square":c==="barge-in"?"mic":"volume-2",f=o.speakingIconName??p,g=o.speakingIconColor??(c==="barge-in"?o.recordingIconColor??u?.color??"":u?.color??""),m=o.speakingBackgroundColor??(c==="barge-in"?o.recordingBackgroundColor??"var(--persona-voice-recording-bg, #ef4444)":u?.backgroundColor??""),b=o.speakingBorderColor??(c==="barge-in"?o.recordingBorderColor??"":u?.borderColor??"");s(a),a.classList.add("persona-voice-speaking"),i.setMicState("speaking"),a.style.backgroundColor=m,a.style.borderColor=b;let S=g||"currentColor";a.style.color=S,t(a,f,S);let I=c==="cancel"?"Stop playback and re-record":c==="barge-in"?"Speak to interrupt":"Agent is speaking";a.setAttribute("aria-label",I),c==="none"&&(a.style.cursor="default"),c==="barge-in"&&a.classList.add("persona-voice-recording")},reset:()=>{let a=i.mic();if(!a)return;s(a),i.setMicState("idle");let o=i.original;o&&(a.style.backgroundColor=o.backgroundColor??"",a.style.color=o.color??"",a.style.borderColor=o.borderColor??"",t(a,o.iconName,o.color||"currentColor"),i.original=null),a.style.cursor="",a.setAttribute("aria-label","Start voice recognition")}}};export{C as BrowserVoiceProvider,$ as KeyedVoiceTranscript,P as RuntypeVoiceProvider,Q as createBestAvailableVoiceProvider,$e as createMicStateStyles,_ as createVoiceProvider,Ue as createVoiceSessionBridge,Oe as isVoiceSupported,xe as wireSessionVoice};
@@ -1 +1,17 @@
1
- "use strict";var g=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var x=(r,e)=>{for(var t in e)g(r,t,{get:e[t],enumerable:!0})},A=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of k(e))!E.call(r,s)&&s!==t&&g(r,s,{get:()=>e[s],enumerable:!(i=C(e,s))||i.enumerable});return r};var V=r=>A(g({},"__esModule",{value:!0}),r);var F={};x(F,{BrowserVoiceProvider:()=>p,RuntypeVoiceProvider:()=>d,createBestAvailableVoiceProvider:()=>b,createVoiceProvider:()=>f,isVoiceSupported:()=>w});module.exports=V(F);var v=class{constructor(e=24e3,t={}){this.ctx=null;this.nextStartTime=0;this.activeSources=[];this.finishedCallbacks=[];this.startedCallbacks=[];this.playing=!1;this.streamEnded=!1;this.pendingCount=0;this.started=!1;this.userPaused=!1;this.pendingBuffers=[];this.pendingSamples=0;this.remainder=null;this.sampleRate=e;let i=Math.max(0,t.prebufferMs??0);this.waterlineSamples=Math.round(e*i/1e3),this.buffering=this.waterlineSamples>0}ensureContext(){if(!this.ctx){let t=typeof window<"u"?window:void 0;if(!t)throw new Error("AudioPlaybackManager requires a browser environment");let i=t.AudioContext||t.webkitAudioContext;this.ctx=new i({sampleRate:this.sampleRate})}let e=this.ctx;return e.state==="suspended"&&!this.userPaused&&e.resume(),e}enqueue(e){if(e.length===0)return;let t=e;if(this.remainder){let s=new Uint8Array(this.remainder.length+e.length);s.set(this.remainder),s.set(e,this.remainder.length),t=s,this.remainder=null}if(t.length%2!==0&&(this.remainder=new Uint8Array([t[t.length-1]]),t=t.subarray(0,t.length-1)),t.length===0)return;let i=this.pcmToFloat32(t);i.length!==0&&(this.buffering?(this.pendingBuffers.push(i),this.pendingSamples+=i.length,this.pendingSamples>=this.waterlineSamples&&this.releaseBuffer()):this.scheduleSamples(i))}markStreamEnd(){this.pendingBuffers.length>0&&this.releaseBuffer(),this.streamEnded=!0,this.checkFinished()}flush(){for(let e of this.activeSources)try{e.stop(),e.disconnect()}catch{}this.activeSources=[],this.pendingCount=0,this.nextStartTime=0,this.playing=!1,this.streamEnded=!1,this.finishedCallbacks=[],this.startedCallbacks=[],this.remainder=null,this.pendingBuffers=[],this.pendingSamples=0,this.buffering=this.waterlineSamples>0,this.started=!1}isPlaying(){return this.playing}onFinished(e){this.finishedCallbacks.push(e)}onStarted(e){this.startedCallbacks.push(e)}pause(){this.userPaused=!0,this.ctx&&this.ctx.state==="running"&&this.ctx.suspend()}resume(){this.userPaused=!1,this.ctx&&this.ctx.state==="suspended"&&this.ctx.resume()}async destroy(){this.flush(),this.ctx&&(await this.ctx.close(),this.ctx=null)}releaseBuffer(){this.buffering=!1;let e=this.pendingBuffers;this.pendingBuffers=[],this.pendingSamples=0;for(let t of e)this.scheduleSamples(t)}scheduleSamples(e){if(e.length===0)return;let t=this.ensureContext(),i=t.createBuffer(1,e.length,this.sampleRate);i.getChannelData(0).set(e);let s=t.createBufferSource();s.buffer=i,s.connect(t.destination);let n=t.currentTime;if(this.nextStartTime===0?this.nextStartTime=n:this.nextStartTime<n&&(this.nextStartTime=n,this.waterlineSamples>0&&(this.buffering=!0)),s.start(this.nextStartTime),this.nextStartTime+=i.duration,this.activeSources.push(s),this.pendingCount++,this.playing=!0,!this.started){this.started=!0;let a=this.startedCallbacks.slice();this.startedCallbacks=[];for(let l of a)l()}s.onended=()=>{let a=this.activeSources.indexOf(s);a!==-1&&this.activeSources.splice(a,1),this.pendingCount--,this.checkFinished()}}checkFinished(){if(this.streamEnded&&this.pendingCount<=0&&this.pendingBuffers.length===0){this.playing=!1,this.streamEnded=!1;let e=this.finishedCallbacks.slice();this.finishedCallbacks=[];for(let t of e)t()}}pcmToFloat32(e){let t=Math.floor(e.length/2),i=new Float32Array(t),s=new DataView(e.buffer,e.byteOffset,e.byteLength);for(let n=0;n<t;n++){let a=s.getInt16(n*2,!0);i[n]=a/32768}return i}};var y=16e3,P=24e3,M=4096,R=4,B=1380533830;function L(r){return r.byteLength>=44&&new DataView(r).getUint32(0,!1)===B?new Uint8Array(r,44):new Uint8Array(r)}function T(r){let e=r.replace(/\/+$/,"");return/^wss?:\/\//i.test(e)?e:/^https?:\/\//i.test(e)?e.replace(/^http/i,"ws"):`${typeof window<"u"&&window.location?.protocol==="https:"?"wss:":"ws:"}//${e}`}var d=class{constructor(e){this.config=e;this.type="runtype";this.ws=null;this.captureContext=null;this.levelCallbacks=[];this.mediaStream=null;this.sourceNode=null;this.processor=null;this.playback=null;this.callLive=!1;this.isSpeaking=!1;this.callGeneration=0;this.intentionalClose=!1;this.resultCallbacks=[];this.errorCallbacks=[];this.statusCallbacks=[];this.transcriptCallbacks=[];this.metricsCallbacks=[]}async connect(){}async startListening(){if(this.callLive)return;let e=this.config?.agentId,t=this.config?.clientToken,i=this.config?.host;if(!e)throw new Error("Runtype voice requires an agentId");if(!t)throw new Error("Runtype voice requires a clientToken");if(!i)throw new Error("Runtype voice requires a host (or widget apiUrl)");let s=++this.callGeneration;this.intentionalClose=!1,this.callLive=!0;try{let n=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:y,channelCount:1,echoCancellation:!0}});if(s!==this.callGeneration){n.getTracks().forEach(o=>o.stop());return}this.mediaStream=n;let a=window.AudioContext||window.webkitAudioContext,l=new a({sampleRate:y});l.state==="suspended"&&await l.resume().catch(()=>{}),this.captureContext=l;let h=this.config?.createPlaybackEngine?await this.config.createPlaybackEngine():new v(P);if(s!==this.callGeneration){h.destroy(),n.getTracks().forEach(o=>o.stop()),l.close().catch(()=>{});return}this.playback=h,h.onFinished(()=>{s===this.callGeneration&&(this.isSpeaking=!1,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.emitStatus("listening"))});let m=`${T(i)}/ws/agents/${encodeURIComponent(e)}/voice`,c=new WebSocket(m,["runtype.bearer",t]);c.binaryType="arraybuffer",this.ws=c,c.onopen=()=>{s===this.callGeneration&&(this.emitStatus("listening"),this.startCapture(l,n,c,s))},c.onmessage=o=>this.handleMessage(o,s),c.onerror=()=>{s===this.callGeneration&&(this.emitError(new Error("Voice connection failed")),this.emitStatus("error"),this.cleanup())},c.onclose=o=>{if(this.intentionalClose){this.intentionalClose=!1;return}if(s===this.callGeneration){if(o.code!==1e3){let u=o.code?` (code ${o.code})`:"";this.emitError(new Error(`Voice connection closed${u}`)),this.emitStatus("error")}else this.emitStatus("idle");this.cleanup()}}}catch(n){throw this.cleanup(),this.emitError(n),this.emitStatus("error"),n}}async stopListening(){this.cleanup(),this.emitStatus("idle")}async disconnect(){this.cleanup(),this.emitStatus("disconnected"),this.resultCallbacks=[],this.errorCallbacks=[],this.statusCallbacks=[],this.transcriptCallbacks=[],this.metricsCallbacks=[]}stopPlayback(){this.playback&&this.playback.flush(),this.isSpeaking=!1,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.emitStatus("listening")}getInterruptionMode(){return"barge-in"}isBargeInActive(){return this.callLive}onLevel(e){this.levelCallbacks.push(e)}async deactivateBargeIn(){this.cleanup(),this.emitStatus("idle")}startCapture(e,t,i,s){let n=e.createMediaStreamSource(t);this.sourceNode=n;let a=e.createScriptProcessor(M,1,1);this.processor=a,a.onaudioprocess=l=>{if(s!==this.callGeneration||i.readyState!==WebSocket.OPEN)return;let h=l.inputBuffer.getChannelData(0),m=new Int16Array(h.length),c=0;for(let o=0;o<h.length;o++){let u=Math.max(-1,Math.min(1,h[o]));c+=u*u,m[o]=u<0?u*32768:u*32767}if(i.send(m.buffer),this.levelCallbacks.length>0){let o=Math.sqrt(c/h.length),u=Math.max(0,Math.min(1,o*R));for(let S of this.levelCallbacks)S(u)}},n.connect(a),a.connect(e.destination)}handleMessage(e,t){if(t!==this.callGeneration)return;if(e.data instanceof ArrayBuffer){this.handleAudioFrame(e.data,t);return}let i;try{i=JSON.parse(e.data)}catch{return}switch(i.type){case"transcript_interim":this.emitStatus("listening"),this.emitTranscript("user",i.text??"",!1);break;case"transcript_final":{let s=i.role==="assistant"?"assistant":"user";this.emitStatus(s==="user"?"processing":"speaking"),this.emitTranscript(s,i.text??"",!0);break}case"audio_end":this.playback?this.playback.markStreamEnd():(this.isSpeaking=!1,this.emitStatus("listening"));break;case"metrics":this.emitMetrics({llmMs:i.llm_ms,ttsMs:i.tts_ms,firstAudioMs:i.first_audio_ms,totalMs:i.total_ms});break;case"error":this.emitError(new Error(i.error||"Voice error")),this.emitStatus("error");break}}handleAudioFrame(e,t){if(t!==this.callGeneration||!this.playback)return;let i=L(e);i.length!==0&&(this.isSpeaking||(this.isSpeaking=!0,this.emitStatus("speaking")),this.playback.enqueue(i))}cleanup(){if(this.callGeneration+=1,this.callLive=!1,this.isSpeaking=!1,this.processor&&(this.processor.onaudioprocess=null,this.processor.disconnect(),this.processor=null),this.sourceNode&&(this.sourceNode.disconnect(),this.sourceNode=null),this.mediaStream&&(this.mediaStream.getTracks().forEach(e=>e.stop()),this.mediaStream=null),this.captureContext&&(this.captureContext.close().catch(()=>{}),this.captureContext=null),this.playback&&(this.playback.destroy(),this.playback=null),this.ws){this.intentionalClose=!0;try{this.ws.close(1e3,"client ended call")}catch{}this.ws=null}}onResult(e){this.resultCallbacks.push(e)}onError(e){this.errorCallbacks.push(e)}onStatusChange(e){this.statusCallbacks.push(e)}onTranscript(e){this.transcriptCallbacks.push(e)}onMetrics(e){this.metricsCallbacks.push(e)}emitStatus(e){this.statusCallbacks.forEach(t=>t(e))}emitError(e){this.errorCallbacks.forEach(t=>t(e))}emitTranscript(e,t,i){this.transcriptCallbacks.forEach(s=>s(e,t,i))}emitMetrics(e){this.metricsCallbacks.forEach(t=>t(e))}};var p=class{constructor(e={}){this.config=e;this.type="browser";this.recognition=null;this.resultCallbacks=[];this.errorCallbacks=[];this.statusCallbacks=[];this.isListening=!1;this.w=typeof window<"u"?window:void 0}async connect(){this.statusCallbacks.forEach(e=>e("connected"))}async startListening(){try{if(this.isListening)throw new Error("Already listening");if(!this.w)throw new Error("Window object not available");let e=this.w.SpeechRecognition||this.w.webkitSpeechRecognition;if(!e)throw new Error("Browser speech recognition not supported");this.recognition=new e,this.recognition.lang=this.config?.language||"en-US",this.recognition.continuous=this.config?.continuous||!1,this.recognition.interimResults=!0,this.recognition.onresult=t=>{let i=Array.from(t.results).map(n=>n[0]).map(n=>n.transcript).join(""),s=t.results[t.results.length-1].isFinal;this.resultCallbacks.forEach(n=>n({text:i,confidence:s?.8:.5,provider:"browser"})),s&&!this.config?.continuous&&this.stopListening()},this.recognition.onerror=t=>{this.errorCallbacks.forEach(i=>i(new Error(t.error))),this.statusCallbacks.forEach(i=>i("error"))},this.recognition.onstart=()=>{this.isListening=!0,this.statusCallbacks.forEach(t=>t("listening"))},this.recognition.onend=()=>{this.isListening=!1,this.statusCallbacks.forEach(t=>t("idle"))},this.recognition.start()}catch(e){throw this.errorCallbacks.forEach(t=>t(e)),this.statusCallbacks.forEach(t=>t("error")),e}}async stopListening(){this.recognition&&(this.recognition.stop(),this.recognition=null),this.isListening=!1,this.statusCallbacks.forEach(e=>e("idle"))}onResult(e){this.resultCallbacks.push(e)}onError(e){this.errorCallbacks.push(e)}onStatusChange(e){this.statusCallbacks.push(e)}async disconnect(){await this.stopListening(),this.statusCallbacks.forEach(e=>e("disconnected"))}static isSupported(){return"SpeechRecognition"in window||"webkitSpeechRecognition"in window}};function f(r){switch(r.type){case"runtype":if(!r.runtype)throw new Error("Runtype voice provider requires configuration");return new d(r.runtype);case"browser":if(!p.isSupported())throw new Error("Browser speech recognition not supported");return new p(r.browser||{});case"custom":{let e=r.custom;if(!e)throw new Error("Custom voice provider requires a `custom` provider instance or factory");let t=typeof e=="function"?e():e;if(!t||typeof t.startListening!="function")throw new Error("Custom voice provider `custom` must be a VoiceProvider (or a factory returning one)");return t}default:throw new Error(`Unknown voice provider type: ${r.type}`)}}function b(r){if(r?.type==="custom"&&r.custom)return f({type:"custom",custom:r.custom});if(r?.type==="runtype"&&r.runtype)return f({type:"runtype",runtype:r.runtype});if(p.isSupported())return f({type:"browser",browser:r?.browser||{language:"en-US"}});throw new Error("No supported voice providers available")}function w(r){try{return b(r),!0}catch{return!1}}0&&(module.exports={BrowserVoiceProvider,RuntypeVoiceProvider,createBestAvailableVoiceProvider,createVoiceProvider,isVoiceSupported});
1
+ "use strict";var W=Object.defineProperty;var ye=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var ve=Object.prototype.hasOwnProperty;var we=(i,e)=>{for(var t in e)W(i,t,{get:e[t],enumerable:!0})},Se=(i,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of be(e))!ve.call(i,n)&&n!==t&&W(i,n,{get:()=>e[n],enumerable:!(s=ye(e,n))||s.enumerable});return i};var ke=i=>Se(W({},"__esModule",{value:!0}),i);var Ye={};we(Ye,{BrowserVoiceProvider:()=>M,KeyedVoiceTranscript:()=>j,RuntypeVoiceProvider:()=>x,createBestAvailableVoiceProvider:()=>F,createMicStateStyles:()=>de,createVoiceProvider:()=>I,createVoiceSessionBridge:()=>ce,isVoiceSupported:()=>se,wireSessionVoice:()=>le});module.exports=ke(Ye);var _=class{#e=null;#r=0;#d=[];#i=[];#a=[];#c=!1;#g=!1;#f=0;#n=!1;#m=!1;#l;#t=[];#y=0;#C=!1;#o;#u;#h;#p=null;constructor(e=24e3,t={}){this.#u=e;let s=Math.max(0,t.prebufferMs??0);this.#h=Math.round(e*s/1e3),this.#l=this.#h>0}#b(){if(!this.#e){let t=typeof window<"u"?window:void 0;if(!t)throw new Error("AudioPlaybackManager requires a browser environment");let s=t.AudioContext||t.webkitAudioContext;this.#e=new s({sampleRate:this.#u})}let e=this.#e;return e.state==="suspended"&&!this.#m&&e.resume(),e}enqueue(e){if(e.length===0)return;let t=e;if(this.#p){let n=new Uint8Array(this.#p.length+e.length);n.set(this.#p),n.set(e,this.#p.length),t=n,this.#p=null}if(t.length%2!==0&&(this.#p=new Uint8Array([t[t.length-1]]),t=t.subarray(0,t.length-1)),t.length===0)return;let s=this.#k(t);s.length!==0&&(this.#l?(this.#t.push(s),this.#y+=s.length,clearTimeout(this.#o),this.#y>=this.#h?this.#v():this.#C&&(this.#o=setTimeout(()=>this.#v(),this.#h/this.#u*1e3))):this.#w(s))}markStreamEnd(){this.#t.length>0&&this.#v(),this.#g=!0,this.#S()}flush(){for(let e of this.#d){e.onended=null;try{e.stop(),e.disconnect()}catch{}}this.#d=[],this.#f=0,this.#r=0,this.#c=!1,this.#g=!1,this.#i=[],this.#a=[],this.#p=null,this.#t=[],this.#y=0,this.#l=this.#h>0,this.#n=!1,clearTimeout(this.#o)}setContinuousMode(e){this.#C=e}isPlaying(){return this.#c}onFinished(e){this.#i.push(e)}onStarted(e){this.#a.push(e)}pause(){this.#m=!0,this.#e&&this.#e.state==="running"&&this.#e.suspend()}resume(){this.#m=!1,this.#e&&this.#e.state==="suspended"&&this.#e.resume()}async destroy(){this.flush(),this.#e&&(await this.#e.close(),this.#e=null)}#v(){this.#l=!1;let e=this.#t;this.#t=[],this.#y=0;for(let t of e)this.#w(t)}#w(e){if(e.length===0)return;let t=this.#b(),s=t.createBuffer(1,e.length,this.#u);s.getChannelData(0).set(e);let n=t.createBufferSource();n.buffer=s,n.connect(t.destination);let r=t.currentTime;if(this.#r===0?this.#r=r:this.#r<r&&(this.#r=r,this.#h>0&&(this.#l=!0)),n.start(this.#r),this.#r+=s.duration,this.#d.push(n),this.#f++,this.#c=!0,!this.#n){this.#n=!0;let l=this.#a.slice();this.#a=[];for(let d of l)d()}n.onended=()=>{let l=this.#d.indexOf(n);l!==-1&&(this.#d.splice(l,1),this.#f--,this.#S())}}#S(){if(this.#g&&this.#f<=0&&this.#t.length===0){this.#c=!1,this.#g=!1;let e=this.#i.slice();this.#i=[];for(let t of e)t()}}#k(e){let t=Math.floor(e.length/2),s=new Float32Array(t),n=new DataView(e.buffer,e.byteOffset,e.byteLength);for(let r=0;r<t;r++){let l=n.getInt16(r*2,!0);s[r]=l/32768}return s}};var Z="4.26.0";var Q=Z;var $=16e3,Ce=24e3,Me=4096,Te=$*2*8,xe=4,Ee=1380533830,Pe=3e4,Ie=5e3,Ve=3e4,_e=3e4,je=6e5,Re="full-duplex-v1",Le=300,Oe=2e3,De=2e3,Ne="runtype-browser-v1",Be=54e4,qe="You're talking to an AI assistant. Voice is processed by OpenAI.",Ue=8e3,We=4e3,$e=12,ee=2e3;function Fe(i,e){let t="Conversation so far:",s=e.slice(0,We).trim(),n=Ue-(s?s.length+2:0)-t.length,r=[];for(let d of i.slice(-$e).reverse()){let a=d.content.replace(/\s+/g," ").trim();if(!a)continue;a.length>ee&&(a=`${a.slice(0,ee-1)}\u2026`);let o=`${d.role==="user"?"User":"Assistant"}: ${a}`;if(o.length+1>n)break;n-=o.length+1,r.unshift(o)}let l=r.length>0?[`${t}
2
+ ${r.join(`
3
+ `)}`]:[];return s&&l.push(s),l.join(`
4
+
5
+ `)}function He(i){return i.byteLength>=44&&new DataView(i).getUint32(0,!1)===Ee?new Uint8Array(i,44):new Uint8Array(i)}function te(i){let e=i.replace(/\/+$/,"");return/^wss?:\/\//i.test(e)?e:/^https?:\/\//i.test(e)?e.replace(/^http/i,"ws"):`${typeof window<"u"&&window.location?.protocol==="https:"?"wss:":"ws:"}//${e}`}function ze(i){return te(i).replace(/^ws/i,"http")}function Xe(i){return typeof i!="number"||!Number.isFinite(i)?Ve:Math.min(je,Math.max(_e,Math.round(i)))}var x=class{constructor(e){this.config=e;this.type="runtype";this.#e=null;this.#r=null;this.#d=[];this.#i=null;this.#a=null;this.#c=null;this.#g=[];this.#f=0;this.#n=null;this.#m=!1;this.#l=!1;this.#t=0;this.#y=!1;this.#C=Number.NEGATIVE_INFINITY;this.#o=null;this.#u=!1;this.#h=!1;this.#p=0;this.#b=0;this.#w=!1;this.bridge=null;this.#S=!1;this.#k=new Set;this.#M=new Map;this.#x=new Set;this.#_=!1;this.#E=null;this.#j=null;this.#R=Promise.resolve();this.#L=new Set;this.#T=!1;this.#O=new Set;this.#D=new Set;this.#z=[];this.#N=[];this.#B=[];this.#q=[];this.#U=[]}#e;#r;#d;#i;#a;#c;#g;#f;#n;#m;#l;#t;#y;#C;#o;#u;#h;#p;#b;#v;#w;#S;#k;#M;#x;#V;#_;#E;#j;#R;#L;#T;#O;#D;#z;#N;#B;#q;#U;async connect(){}setSessionBridge(e){this.bridge=e}prewarm(){if(this.#m||this.#o)return;let e=this.config?.agentId,t=this.config?.clientToken,s=this.config?.host;if(!e||!t||!s)return;let n=Date.now();if(!(n-this.#C<Pe)){this.#C=n;try{this.config?.prewarmMode==="attach"?this.#te(s,e,t):this.#ee(s,e,t)}catch{}}}#ee(e,t,s){if(typeof fetch!="function")return;let n=`${ze(e)}/v1/client/agents/${encodeURIComponent(t)}/voice/prewarm`;fetch(n,{method:"POST",headers:{Authorization:`Bearer ${s}`},keepalive:!0}).catch(()=>{})}#te(e,t,s){let n=new URLSearchParams,r=this.config?.attachIdleMs,l=Xe(r);r!==void 0&&n.set("attachIdleMs",String(l));let d=new WebSocket(this.#G(e,t,n),["runtype.bearer","runtype.attach",s]);d.binaryType="arraybuffer";let a=()=>{},o=new Promise(u=>{a=u}),c={ws:d,state:"connecting",ready:o,settle:a,openedAt:0,idleTimer:void 0};this.#o=c,d.onopen=()=>{this.#o===c&&(c.state=d.protocol==="runtype.attach"?"attached":"live",c.openedAt=Date.now(),this.#X(c,l),c.state==="attached"&&d.send('{"type":"ping"}'),c.settle())},d.onmessage=u=>{if(this.#o!==c||typeof u.data!="string")return;let g;try{g=JSON.parse(u.data)}catch{return}g.type==="attached"&&typeof g.idleMs=="number"&&this.#X(c,g.idleMs-(Date.now()-c.openedAt))},d.onerror=()=>{},d.onclose=()=>{this.#o===c&&this.#P()}}#X(e,t){clearTimeout(e.idleTimer),e.idleTimer=setTimeout(()=>{this.#o===e&&this.#P()},Math.max(0,t))}#P(){let e=this.#o;if(!e)return;this.#o=null,clearTimeout(e.idleTimer);let{ws:t}=e;if(t.onopen=null,t.onmessage=null,t.onerror=null,t.onclose=null,e.settle(),t.readyState===WebSocket.CONNECTING||t.readyState===WebSocket.OPEN)try{t.close(1e3,"prewarm released")}catch{}}async#se(){let e=this.#o;if(!e)return null;if(e.state==="connecting"){let t;await Promise.race([e.ready,new Promise(s=>{t=setTimeout(s,Ie)})]),clearTimeout(t)}return this.#o!==e?null:e.state==="connecting"||e.ws.readyState!==WebSocket.OPEN?(this.#P(),null):(this.#o=null,clearTimeout(e.idleTimer),{ws:e.ws,live:e.state==="live"})}#G(e,t,s){let n=["partial_transcript","context"];this.bridge&&this.config?.clientDelegation!==!1&&n.push("client_delegation","delegation_update"),s&&n.unshift("attach");let r=new URLSearchParams({voiceProtocol:Ne,clientVersion:`persona/${Q}`,voiceCapabilities:Re,clientCapabilities:n.join(",")});return s?.forEach((l,d)=>r.set(d,l)),`${te(e)}/ws/agents/${encodeURIComponent(t)}/voice?${r}`}async startListening(){if(this.#m)return;let e=this.config?.agentId,t=this.config?.clientToken,s=this.config?.host;if(!e)throw new Error("Runtype voice requires an agentId");if(!t)throw new Error("Runtype voice requires a clientToken");if(!s)throw new Error("Runtype voice requires a host (or widget apiUrl)");let n=++this.#t;this.#y=!1,this.#m=!0;try{let r=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:$,channelCount:1,echoCancellation:!0}});if(n!==this.#t){r.getTracks().forEach(u=>u.stop());return}this.#i=r;let l=window.AudioContext||window.webkitAudioContext,d=new l({sampleRate:$});d.state==="suspended"&&await d.resume().catch(()=>{}),this.#r=d;let a=this.config?.createPlaybackEngine?await this.config.createPlaybackEngine():new _(Ce);if(n!==this.#t){a.destroy(),r.getTracks().forEach(u=>u.stop()),d.close().catch(()=>{});return}this.#n=a,this.#F(),this.#ie(d,r,n);let o=await this.#se();if(n!==this.#t){o?.ws.close(1e3,"client ended call");return}if(o){let{ws:u}=o;this.#e=u,this.#K(u,n),o.live||u.send('{"type":"start"}'),this.#W(u),this.#s("listening");return}let c=new WebSocket(this.#G(s,e),["runtype.bearer",t]);c.binaryType="arraybuffer",this.#e=c,c.onopen=()=>{n===this.#t&&(this.#W(c),this.#s("listening"))},this.#K(c,n)}catch(r){throw this.#A(),this.#I(r),this.#s("error"),r}}#K(e,t){e.onmessage=s=>this.#ne(s,t),e.onerror=()=>{t===this.#t&&(this.#I(new Error("Voice connection failed")),this.#s("error"),this.#A())},e.onclose=s=>{if(this.#y){this.#y=!1;return}if(t===this.#t){if(s.code!==1e3){let n=s.code?` (code ${s.code})`:"";this.#I(new Error(`Voice connection closed${n}`)),this.#s("error")}else this.#s("idle");this.#A()}}}getDisclosure(){let e=this.config?.disclosureText;return this.#m&&this.#u&&e!==!1?e||qe:null}async stopListening(){this.#A(),this.#s("idle")}async disconnect(){this.#A(),this.#s("disconnected"),this.#z=[],this.#N=[],this.#B=[],this.#q=[],this.#U=[]}stopPlayback(){this.#Q();let e=this.#e;e&&e.readyState===WebSocket.OPEN&&(this.#u&&(this.#p=Date.now()+Oe,e.send('{"type":"cancel"}')),this.#s("listening"))}getInterruptionMode(){return"barge-in"}isBargeInActive(){return this.#m}onLevel(e){this.#d.push(e)}async deactivateBargeIn(){this.#A(),this.#s("idle")}#ie(e,t,s){let n=e.createMediaStreamSource(t);this.#a=n;let r=e.createScriptProcessor(Me,1,1);this.#c=r,r.onaudioprocess=l=>{if(s!==this.#t)return;let d=this.#e,a=d?.readyState===WebSocket.OPEN;if(d&&!a&&d.readyState!==WebSocket.CONNECTING)return;let o=l.inputBuffer.getChannelData(0),c=new Int16Array(o.length),u=0;for(let g=0;g<o.length;g++){let f=Math.max(-1,Math.min(1,o[g]));u+=f*f,c[g]=f<0?f*32768:f*32767}if(d&&a)this.#W(d),d.send(c.buffer);else for(this.#g.push(c.buffer),this.#f+=c.byteLength;this.#f>Te;)this.#f-=this.#g.shift().byteLength;if(this.#d.length>0){let g=Math.sqrt(u/o.length),f=Math.max(0,Math.min(1,g*xe));for(let p of this.#d)p(f)}},n.connect(r),r.connect(e.destination)}#W(e){for(let t of this.#g)e.send(t);this.#g=[],this.#f=0}#ne(e,t){if(t!==this.#t)return;if(e.data instanceof ArrayBuffer){this.#ce(e.data,t);return}let s;try{s=JSON.parse(e.data)}catch{return}switch(s.type){case"session_config":s.speechMode&&(this.#u=s.speechMode==="speech_to_speech",this.#n?.setContinuousMode?.(this.#u)),Array.isArray(s.capabilities)&&(this.#k=new Set(s.capabilities)),typeof s.callId=="string"&&(this.#V=s.callId),this.#S=this.#u&&this.#k.has("client_delegation")&&!!this.bridge,this.#u&&!this.#l&&this.#s("listening"),this.#k.has("context")&&!this.#_&&(this.#_=!0,this.#E=this.#re());break;case"transcript_update":{let n=s.role==="assistant"?"assistant":"user",r=s.utteranceId??s.turnId;if(!r||n==="assistant"&&this.#$())break;let l=String(r);if(n==="user")s.final===!0&&this.#J(t),this.#T=!1;else if(this.#T&&!this.#O.has(l)&&(this.#D.add(l),this.#T=!1),this.#O.add(l),this.#D.has(l))break;this.#H(n,s.text??"",s.final===!0,{turnId:l,...typeof s.startMs=="number"&&{startMs:s.startMs},...typeof s.endMs=="number"&&{endMs:s.endMs},...this.#S&&{caption:!0}});break}case"delegation_started":case"delegation_completed":{let n=String(s.delegationId??s.turnId);if(s.type==="delegation_started"){this.#J(t);let r=s.input;this.#S&&r&&this.#ae(n,{delegationId:n,userText:String(r.text??""),userUtteranceIds:Array.isArray(r.userUtteranceIds)?r.userUtteranceIds.filter(l=>typeof l=="string"):[],messages:Array.isArray(r.messages)?r.messages:[]},t)}else s.speak!==!1&&this.#L.has(n)&&(this.#T=!0);this.#h=s.type==="delegation_started",!this.#l&&!this.#$()&&this.#s(this.#h?"processing":"listening");break}case"delegation_cancelled":this.#Y(String(s.delegationId),s.reason!=="session_ending"&&s.reason!=="provider_cancelled");break;case"warning":console.warn(`[Persona voice] ${s.code}: ${s.message??""}`,this.#V??""),s.delegationId&&(s.code==="UNKNOWN_DELEGATION"||s.code==="LATE_RESULT_LIMIT")&&this.#Y(String(s.delegationId));break;case"audio_clear":this.#Q(),this.#p=0,this.#s("listening");break;case"transcript_interim":this.#s("listening"),this.#H("user",s.text??"",!1);break;case"transcript_final":{let n=s.role==="assistant"?"assistant":"user";this.#s(n==="user"?"processing":"speaking"),this.#H(n,s.text??"",!0);break}case"audio_end":this.#n?this.#n.markStreamEnd():(this.#l=!1,this.#s("listening"));break;case"metrics":this.#de({llmMs:s.llm_ms,ttsMs:s.tts_ms,firstAudioMs:s.first_audio_ms,totalMs:s.total_ms});break;case"error":this.#I(new Error(s.error||"Voice error")),this.#s("error");break}}async#re(){let e=this.bridge?.getHistory()??[],t="";try{let s=this.config?.callContext;t=String((typeof s=="function"?await s():s)??"")}catch{}return Fe(e,t)}#J(e){let t=this.#E;if(!t)return;this.#E=null;let s=!1,n=t.then(r=>{let l=this.#e;s||!r||e!==this.#t||l?.readyState!==WebSocket.OPEN||l.send(JSON.stringify({type:"context",text:r}))});this.#j={done:n,drop:()=>s=!0}}async#oe(){let e=this.#j;if(!e)return;let t,s=await Promise.race([e.done.then(()=>!1),new Promise(n=>{t=setTimeout(()=>n(!0),De)})]);clearTimeout(t),s&&e.drop()}#Y(e,t=!1){this.#x.add(e),this.bridge?.dropDelegation?.(e,t),this.#M.get(e)?.abort()}#ae(e,t,s){let n=this.bridge,r=(l,d,a)=>{let o=this.#e;return s!==this.#t||o?.readyState!==WebSocket.OPEN||this.#x.has(e)?!1:(o.send(JSON.stringify({type:l,delegationId:e,status:d,text:a})),!0)};this.#R=this.#R.then(async()=>{if(s!==this.#t||this.#x.has(e))return;let l=await n.runDelegatedTurn(t).catch(()=>({status:"failed",text:""}));await this.#oe();let d=!!l.followUp,a=d&&this.#k.has("delegation_update");if(!r(a?"delegation_update":"delegation_result",d&&!a?"completed":l.status,l.text)||(l.status!=="failed"&&this.#L.add(e),!l.followUp))return;let c=new AbortController;this.#M.set(e,c),l.followUp({signal:c.signal,approvalTimeoutMs:this.config?.approvalTimeoutMs&&Math.min(this.config.approvalTimeoutMs,Be),readBack:a,onUpdate:u=>r("delegation_update","pending_approval",u)}).then(u=>{this.#M.delete(e),a&&u&&!c.signal.aborted&&r("delegation_result",u.status,u.text)})})}#ce(e,t){if(t!==this.#t||!this.#n||this.#$())return;let s=He(e);s.length!==0&&(this.#l||(this.#l=!0,this.#s("speaking")),this.#F(),this.#n.enqueue(s),this.#u&&this.#le(s.length))}#$(){return Date.now()<this.#p}#F(){if(this.#w||!this.#n)return;this.#w=!0;let e=this.#t;this.#n.onFinished(()=>{e===this.#t&&(this.#w=!1,this.#Z())})}#le(e){let t=Date.now();this.#b=Math.max(t,this.#b)+e/48,clearTimeout(this.#v),this.#v=setTimeout(()=>this.#Z(),this.#b-t+Le)}#Z(){this.#l=!1,this.#b=0,this.#e&&this.#e.readyState===WebSocket.OPEN&&this.#s(this.#h?"processing":"listening")}#Q(){this.#n?.flush(),this.#w=!1,this.#F(),this.#l=!1,this.#b=0,clearTimeout(this.#v)}#A(){this.#t+=1,this.#m=!1,this.#l=!1,this.#P(),this.#u=!1,this.#h=!1,this.#S=!1,this.#k=new Set;for(let e of this.#M.values())e.abort();if(this.#M.clear(),this.#x.clear(),this.#V=void 0,this.#_=!1,this.#E=null,this.#j=null,this.#R=Promise.resolve(),this.#L.clear(),this.#T=!1,this.#O.clear(),this.#D.clear(),this.#w=!1,this.#p=0,this.#b=0,clearTimeout(this.#v),this.#g=[],this.#f=0,this.#c&&(this.#c.onaudioprocess=null,this.#c.disconnect(),this.#c=null),this.#a&&(this.#a.disconnect(),this.#a=null),this.#i&&(this.#i.getTracks().forEach(e=>e.stop()),this.#i=null),this.#r&&(this.#r.close().catch(()=>{}),this.#r=null),this.#n&&(this.#n.destroy(),this.#n=null),this.#e){this.#y=!0;try{this.#e.close(1e3,"client ended call")}catch{}this.#e=null}}onResult(e){this.#z.push(e)}onError(e){this.#N.push(e)}onStatusChange(e){this.#B.push(e)}onTranscript(e){this.#q.push(e)}onMetrics(e){this.#U.push(e)}#s(e){this.#B.forEach(t=>t(e))}#I(e){this.#N.forEach(t=>t(e))}#H(e,t,s,n){this.#q.forEach(r=>r(e,t,s,n))}#de(e){this.#U.forEach(t=>t(e))}};var M=class{constructor(e={}){this.config=e;this.type="browser";this.#e=null;this.#r=[];this.#d=[];this.#i=[];this.#a=!1;this.#c=typeof window<"u"?window:void 0}#e;#r;#d;#i;#a;#c;async connect(){this.#i.forEach(e=>e("connected"))}async startListening(){try{if(this.#a)throw new Error("Already listening");if(!this.#c)throw new Error("Window object not available");let e=this.#c.SpeechRecognition||this.#c.webkitSpeechRecognition;if(!e)throw new Error("Browser speech recognition not supported");this.#e=new e,this.#e.lang=this.config?.language||"en-US",this.#e.continuous=this.config?.continuous||!1,this.#e.interimResults=!0,this.#e.onresult=t=>{let s=Array.from(t.results).map(r=>r[0]).map(r=>r.transcript).join(""),n=t.results[t.results.length-1].isFinal;this.#r.forEach(r=>r({text:s,confidence:n?.8:.5,provider:"browser"})),n&&!this.config?.continuous&&this.stopListening()},this.#e.onerror=t=>{this.#d.forEach(s=>s(new Error(t.error))),this.#i.forEach(s=>s("error"))},this.#e.onstart=()=>{this.#a=!0,this.#i.forEach(t=>t("listening"))},this.#e.onend=()=>{this.#a=!1,this.#i.forEach(t=>t("idle"))},this.#e.start()}catch(e){throw this.#d.forEach(t=>t(e)),this.#i.forEach(t=>t("error")),e}}async stopListening(){this.#e&&(this.#e.stop(),this.#e=null),this.#a=!1,this.#i.forEach(e=>e("idle"))}onResult(e){this.#r.push(e)}onError(e){this.#d.push(e)}onStatusChange(e){this.#i.push(e)}async disconnect(){await this.stopListening(),this.#i.forEach(e=>e("disconnected"))}static isSupported(){return"SpeechRecognition"in window||"webkitSpeechRecognition"in window}};function I(i){switch(i.type){case"runtype":if(!i.runtype)throw new Error("Runtype voice provider requires configuration");return new x(i.runtype);case"browser":if(!M.isSupported())throw new Error("Browser speech recognition not supported");return new M(i.browser||{});case"custom":{let e=i.custom;if(!e)throw new Error("Custom voice provider requires a `custom` provider instance or factory");let t=typeof e=="function"?e():e;if(!t||typeof t.startListening!="function")throw new Error("Custom voice provider `custom` must be a VoiceProvider (or a factory returning one)");return t}default:throw new Error(`Unknown voice provider type: ${i.type}`)}}function F(i){if(i?.type==="custom"&&i.custom)return I({type:"custom",custom:i.custom});if(i?.type==="runtype"&&i.runtype)return I({type:"runtype",runtype:i.runtype});if(M.isSupported())return I({type:"browser",browser:i?.browser||{language:"en-US"}});throw new Error("No supported voice providers available")}function se(i){try{return F(i),!0}catch{return!1}}var ie=i=>i.toLowerCase().replace(/[^\p{L}\p{N}]+/gu,""),j=class{constructor(e){this.host=e;this.turns=new Map;this.latestId=null;this.cancelled=new Set}apply(e,t,s,n,r,l){let d=this.host;t=t.trim();let a=this.turns.get(n);if(a||(a={},this.turns.set(n,a),this.latestId=n),e==="user"){a.userFinal=s;let o=a.userId?d.find(a.userId):void 0;if(o){let c=a.userStartMs===void 0&&r!==void 0;c&&(a.userStartMs=r),d.upsert({...o,content:t,voiceProcessing:!s,...c&&this.placeBefore(this.startedAfter(r))})}else{a.userStartMs=r;let c=a.assistantId?d.find(a.assistantId):void 0;a.userId=d.inject({role:"user",content:t,streaming:!1,voiceProcessing:!s,voiceCaption:l,...this.placeBefore(this.startedAfter(r)??c)}).id}}else if(!this.cancelled.has(n)){a.assistantFinal=s;let o=a.assistantId?d.find(a.assistantId):void 0;if(o){let c=a.assistantStartMs===void 0&&r!==void 0;c&&(a.assistantStartMs=r),d.upsert({...o,content:t,streaming:!s,voiceProcessing:!s,...c&&this.placeBefore(this.startedAfter(r))})}else t&&(a.assistantStartMs=r,a.assistantId=d.inject({role:"assistant",content:t,streaming:!s,voiceProcessing:!s,voiceCaption:l,...this.placeBefore(this.startedAfter(r))}).id);s&&a.assistantId&&d.markSpoken(a.assistantId)}this.sync()}claimUserTurn(e,t=[]){let s=t[t.length-1];for(let r of t)r!==s&&(this.turns.has(r)||this.turns.set(r,{}),this.turns.get(r).claimed=!0);let n;if(s){if(n=this.turns.get(s),n||(n={},this.turns.set(s,n)),n.claimed)return null;(!n.userId||!this.host.find(n.userId))&&(n.userFinal=!0,n.userId=this.host.inject({role:"user",content:e.trim()}).id)}else{let r=ie(e),l=[...this.turns.values()].reverse().flatMap(d=>{let a=d.userId&&!d.claimed?this.host.find(d.userId):void 0;return a?[{turn:d,text:ie(a.content)}]:[]}).filter(({text:d})=>d&&r);n=(l.find(({text:d})=>d===r)??l.find(({text:d})=>d.startsWith(r)||r.startsWith(d)))?.turn}return n?(n.claimed=!0,n.userId):null}cancel(){let e=this.inFlight();if(e.length===0){let t=this.awaiting();if(!t)return;e=[t]}for(let t of e)this.cancelled.add(t);this.closeReplies(e),this.sync()}fail(e){let t=this.awaiting(),s=this.inFlight();if(!t&&s.length===0)return;for(let l of s)this.turns.get(l).assistantFinal=!0;this.closeReplies(s);let n=this.host.inject({role:"assistant",content:e,streaming:!1,voiceProcessing:!1}),r=t?this.turns.get(t):void 0;r&&(r.assistantId=n.id,r.assistantFinal=!0),this.sync()}settle(){if(this.turns.size===0)return;let e=this.pending(),t=new Set;for(let s of this.turns.values())s.userId&&t.add(s.userId),s.assistantId&&(t.add(s.assistantId),this.host.markSpoken(s.assistantId));this.turns.clear(),this.latestId=null,this.host.settle(t),e&&this.host.setStreaming(!1)}startedAfter(e){if(e===void 0)return;let t;for(let s of this.turns.values())for(let[n,r]of[[s.userId,s.userStartMs],[s.assistantId,s.assistantStartMs]])n&&r!==void 0&&r>e&&(!t||r<t.start)&&(t={start:r,id:n});return t&&this.host.find(t.id)}placeBefore(e){if(!e)return;let t=e.sequence??0,s=t-1;for(let n of this.turns.values())for(let r of[n.userId,n.assistantId]){let l=r?this.host.find(r):void 0,d=l?.sequence;l?.createdAt===e.createdAt&&d!==void 0&&d>s&&d<t&&(s=d)}return{createdAt:e.createdAt,sequence:(s+t)/2}}closeReplies(e){let t=new Set;for(let s of e){let n=this.turns.get(s)?.assistantId;n&&(t.add(n),this.host.markSpoken(n))}t.size>0&&this.host.settle(t)}inFlight(){let e=[];for(let[t,s]of this.turns)s.assistantId&&!s.assistantFinal&&!this.cancelled.has(t)&&e.push(t);return e}awaiting(){let e=this.latestId;if(!e)return null;let t=this.turns.get(e);return t?.userFinal&&!t.assistantId&&!t.claimed&&!this.cancelled.has(e)?e:null}pending(){return this.awaiting()!==null||this.inFlight().length>0}sync(){this.host.setStreaming(this.pending())}};var Ge="I need your answer in the chat before I can continue.";var ne="no|nope|never ?mind|decline(?: it| that)?|cancel(?: it| that| this)?(?: (?:the|my|that|this) (?:[a-z]+ )?(?:order|request))?|don'?t (?:do|place) (?:it|that|the (?:[a-z]+ )?order)",Ke=new RegExp(`^(?:${ne})(?: (?:${ne}))?(?: thanks| thank you)?$`),Je=i=>Ke.test(i.toLowerCase().replace(/[^a-z' ]+/g," ").replace(/\s+/g," ").trim()),re="Briefly tell the user what you're about to do and ask them to approve or decline it in the chat. Don't claim it's done.",oe=()=>new Promise(i=>setTimeout(i,50)),H=(i,e)=>i.length>e?`${i.slice(0,e-1).trimEnd()}\u2026`:i,E=i=>i.replace(/^webmcp:/,"").replace(/([a-z\d])([A-Z])/g,"$1 $2").replace(/[_\-.]+/g," ").trim().toLowerCase();function z(i,e=0){if(i==null||i==="")return"";if(typeof i!="object")return String(i);if(e>2)return"";if(Array.isArray(i))return i.map(r=>z(r,e+1)).filter(Boolean).join(", ");let t=i,s=t.quantity??t.qty??t.count,n=t.name??t.item??t.product??t.title;return s!=null&&n!=null&&typeof n!="object"?`${s} ${n}`:Object.entries(t).filter(([r])=>!r.startsWith("_")).map(([r,l])=>{let d=z(l,e+1);return d&&(e?`${E(r)} ${d}`:`${E(r)}: ${d}`)}).filter(Boolean).join(e?", ":"; ")}function ae(i){let e=i.length>1?"These actions need the user's approval in the chat before they happen:":"This action needs the user's approval in the chat before it happens:",t=1e3-e.length-re.length-2,s=i.map(n=>{let r=[E(n.toolName)];n.description&&r.push(`(${H(n.description.trim(),160)})`);let l=z(n.parameters);return l&&r.push(`with ${l}`),n.reason&&r.push(`because: ${H(n.reason.trim(),160)}`),H(`- ${r.join(" ")}`,Math.floor(t/i.length)-1)});return`${e}
6
+ ${s.join(`
7
+ `)}
8
+
9
+ ${re}`}var R=i=>i.variant==="approval"&&i.approval?.status==="pending";function ce(i){let e=null,t=null,s=()=>i.track(e??t),n=[],r=new Map,l=new Map,d=(p,m)=>{r.set(p,[...r.get(p)??[],m]),r.size>32&&r.delete(r.keys().next().value)},a=p=>i.messages().find(m=>m.id===p),o=p=>p.approvals.filter(m=>a(m)?.approval?.status==="pending"),c=p=>E(a(p)?.approval?.toolName??""),u=(p,m,v)=>{p.outcome={status:m,text:v};for(let w of o(p))i.decide(w)},g=p=>p.flatMap(m=>i.messages().find(v=>v.id===m)??[]).filter(m=>!m.variant&&m.content.trim()).map(m=>m.content.trim()).join(`
10
+
11
+ `),f=async p=>{do await oe();while(i.busy()&&!(p&&(i.parked()||p.failed)))};return{getHistory:()=>i.messages().flatMap(p=>(p.role==="user"||p.role==="assistant")&&!p.variant&&!p.voiceProcessing&&!p.voiceCaption&&p.content?[{role:p.role,content:p.content}]:[]),dropDelegation(p,m){l.set(p,!!m),l.size>32&&l.delete(l.keys().next().value);let v=m&&n.find(w=>w.delegationId===p);v&&!v.outcome&&u(v,"timeout","");for(let w of r.get(p)??[])w.dropped=!0,w.ids.length&&i.unspoken(w.ids)},async runDelegatedTurn({delegationId:p,userText:m,userUtteranceIds:v}){let w=n.filter(h=>o(h).length),P=w.flatMap(o);if(P.length===1&&Je(m)){let h=c(P[0]);return u(w[0],"denied",""),{status:"denied",text:`Okay, I cancelled the ${h} request. Nothing was done.`}}let X=i.parked()&&i.messages().every(h=>!R(h)||P.includes(h.id));i.busy()&&!X&&await f();let ue=new Set(i.messages().map(h=>h.id)),L=()=>i.messages().filter(h=>!ue.has(h.id)&&h.variant==="approval"),k={ids:[],failed:!1};d(p,k),e=k,s();try{await i.send(m,i.claim(m,v)??void 0),await f(k)}catch{k.failed=!0}finally{e=null,s()}let pe=k.ids.flatMap(h=>i.messages().find(b=>b.id===h)??[]),T=g(k.ids),V=k.failed?[]:L().filter(R),he=new Set(V.map(h=>E(h.approval.toolName)));for(let h of w){if(h.outcome)continue;for(let S of o(h).filter(O=>he.has(c(O))))h.replaced.add(S),i.decide(S);let b=c(h.approvals[0]);h.approvals.every(S=>h.replaced.has(S))?h.outcome={status:"cancelled",text:`The earlier ${b} request was replaced by the new one; it was not done.`}:X&&h.approvals.every(S=>a(S)?.approval?.status==="denied")&&(h.outcome={status:"cancelled",text:`The earlier ${b} request was replaced by the new one; it was not done.`})}if(V.length){let h=new Set(V.map(S=>S.id)),b={delegationId:p,approvals:[...h],at:Date.now(),replaced:new Set};return n.push(b),l.get(p)&&u(b,"timeout",""),T=`${T}
12
+
13
+ ${ae(V.map(S=>S.approval))}`.trim(),{status:"pending_approval",text:T,followUp:async({signal:S,approvalTimeoutMs:O=3e5,readBack:G=!0,onUpdate:ge})=>{let A={ids:[],failed:!1};r.delete(p),d(p,A);let K=()=>L().filter(y=>h.has(y.id)||A.ids.includes(y.id)),fe=()=>L().filter(y=>R(y)&&!h.has(y.id)&&!n.some(C=>C.approvals.includes(y.id))&&(A.ids.includes(y.id)||y.approval?.toolType==="webmcp"&&t===A)),J=()=>{t=A,s()};G&&J();try{for(;!S.aborted&&!b.outcome&&(e||i.busy()||K().some(R));){G&&t!==A&&!o(b).length&&J();let y=fe();if(y.length){for(let C of y)h.add(C.id),b.approvals.push(C.id);b.at=Date.now(),ge?.(ae(y.map(C=>C.approval)))}if(Date.now()-b.at>=O&&o(b).length&&(!i.busy()||i.parked())){u(b,"timeout",`That ${c(b.approvals[0])} request expired, so nothing was done.`);break}await oe()}}finally{t===A&&(t=null,s()),n.splice(n.indexOf(b),1)}if(S.aborted)return null;if(b.outcome)return b.outcome;if(A.failed)return{status:"failed",text:`The ${c(b.approvals[0])} request didn't complete.`};let Y=K(),D=y=>Y.filter(y).map(C=>E(C.approval.toolName)).join(", "),N=Y.some(y=>y.approval?.status==="approved"),B=D(y=>y.approval?.status==="denied"&&!b.replaced.has(y.id)),q=D(y=>b.replaced.has(y.id)),U=D(y=>y.approval?.status==="timeout"),me=[N?g(A.ids):"",B&&`The user declined the ${B} request in the chat, so ${N?"that part was not done":"nothing was done"}.`,q&&`The earlier ${q} request was replaced by the new one; it was not done.`,U&&`The ${U} request timed out, so it was not done.`].filter(Boolean).join(`
14
+
15
+ `);return{status:N?"completed":B?"denied":q?"cancelled":U?"timeout":"completed",text:me}}}}return!k.failed&&i.parked()||pe.some(h=>h.agentMetadata?.awaitingLocalTool&&!h.agentMetadata.askUserQuestionAnswered&&!h.toolCall?.name?.startsWith("webmcp:"))?{status:k.failed?"failed":"completed",text:`${T}
16
+
17
+ ${Ge}`.trim()}:{status:!k.failed&&T?"completed":"failed",text:T}}}}var le=(i,e,t,s)=>{let n=i.session;try{i.keyed=t?new t({find:o=>n.messages.find(c=>c.id===o),inject:o=>n.injectMessage(o),upsert:o=>n.upsertMessage(o),settle:o=>{n.messages=n.messages.map(c=>o.has(c.id)?{...c,streaming:!1,voiceProcessing:!1}:c),n.callbacks.onMessagesChanged([...n.messages])},setStreaming:o=>{(o||!i.busy())&&i.setStreaming(o)},markSpoken:o=>{n.ttsSpokenMessageIds.add(o)}}):null,s&&e.setSessionBridge&&e.setSessionBridge(s({messages:()=>n.messages,busy:()=>i.busy(),parked:()=>n.webMcpApprovalResolvers.size>0,claim:(o,c)=>i.keyed?.claimUserTurn(o,c)??null,send:(o,c)=>n.sendMessage(o,{viaVoice:!0,voiceTurn:{userMessageId:c}}),track:o=>{i.setDelegation(o)},unspoken:o=>{for(let c of o)n.ttsSpokenMessageIds.delete(c);n.streaming||n.speakLatestAssistantMessage(o)},decide:o=>{if(n.webMcpApprovalResolvers.has(o))return n.resolveWebMcpApproval(o,"denied");let c=n.messages.find(u=>u.id===o)?.approval;c?.status==="pending"&&n.resolveApproval(c,"denied")}}));let r=i.generation(),l=()=>i.provider()===e&&r===i.generation(),a=(n.config.voiceRecognition??{}).processingErrorText??"Voice processing failed. Please try again.";e.onResult(o=>{l()&&o.provider!=="runtype"&&o.text&&o.text.trim()&&n.sendMessage(o.text,{viaVoice:!0})}),e.onTranscript&&e.onTranscript((o,c,u,g)=>{if(l()){if(g?.turnId){i.keyed?.apply(o,c,u,g.turnId,g.startMs,g.caption);return}if(o==="user"){if(i.pendingUser)n.upsertMessage({id:i.pendingUser,role:"user",content:c,createdAt:new Date().toISOString(),streaming:!1,voiceProcessing:!u});else{let f=n.injectMessage({role:"user",content:c,streaming:!1,voiceProcessing:!u});i.pendingUser=f.id}if(u){i.turns().start(g?.turnId),i.pendingUser=null;let f=n.injectMessage({role:"assistant",content:"",streaming:!0,voiceProcessing:!0});i.pendingAssistant=f.id,i.setStreaming(!0)}}else{if(!i.turns().accepts(g?.turnId))return;if(i.pendingAssistant)n.upsertMessage({id:i.pendingAssistant,role:"assistant",content:c,createdAt:new Date().toISOString(),streaming:!u,voiceProcessing:!u});else{let f=n.injectMessage({role:"assistant",content:c,streaming:!u,voiceProcessing:!u});i.pendingAssistant=f.id}u&&(i.pendingAssistant&&n.ttsSpokenMessageIds.add(i.pendingAssistant),i.setStreaming(!1),i.pendingAssistant=null)}}}),e.onLevel&&e.onLevel(o=>{l()&&i.setLevel(Number.isFinite(o)?Math.max(0,Math.min(1,o)):0)}),e.onMetrics&&e.onMetrics(o=>{l()&&n.config.voiceRecognition?.onMetrics?.(o)}),e.onError(o=>{l()&&(console.error("Voice error:",o),i.pendingAssistant&&(n.upsertMessage({id:i.pendingAssistant,role:"assistant",content:a,createdAt:new Date().toISOString(),streaming:!1,voiceProcessing:!1}),i.setStreaming(!1),i.pendingUser=null,i.pendingAssistant=null),i.keyed?.fail(a))}),e.onStatusChange(o=>{l()&&(i.setStatus(o),(o==="listening"||o==="idle"||o==="disconnected")&&i.settlePending(o!=="listening"),(o==="idle"||o==="disconnected")&&i.keyed?.settle(),n.callbacks.onVoiceStatusChanged?.(o))}),e.connect()}catch(r){console.error("Failed to setup voice:",r)}};var de=i=>{let e=a=>{if(i.original)return;let o=i.config().voiceRecognition??{};i.original={backgroundColor:a.style.backgroundColor,color:a.style.color,borderColor:a.style.borderColor,iconName:o.iconName??"mic",iconSize:parseFloat(o.iconSize??"")||i.iconFallbackPx}},t=(a,o,c)=>{let u=a.querySelector("svg");u&&u.remove();let g=i.original?.iconSize??(parseFloat(i.config().voiceRecognition?.iconSize??"")||i.iconFallbackPx),f=i.renderIcon(o,g,c,1.5);f&&a.appendChild(f)},s=a=>{a.classList.remove("persona-voice-recording","persona-voice-processing","persona-voice-speaking")};return{recording:()=>{let a=i.mic();if(!a)return;e(a);let o=i.config().voiceRecognition??{},c=o.recordingBackgroundColor,u=o.recordingIconColor,g=o.recordingBorderColor;if(s(a),a.classList.add("persona-voice-recording"),i.setMicState("recording"),a.style.backgroundColor=c??"var(--persona-voice-recording-bg, #ef4444)",a.style.color=u??"var(--persona-voice-recording-indicator, #ffffff)",u){let f=a.querySelector("svg");f&&f.setAttribute("stroke",u)}g&&(a.style.borderColor=g),a.setAttribute("aria-label","Stop voice recognition")},processing:()=>{let a=i.mic();if(!a)return;e(a);let o=i.config().voiceRecognition??{},c=i.session().getVoiceInterruptionMode(),u=i.original,g=o.processingIconName??"loader",f=o.processingIconColor??u?.color??"",p=o.processingBackgroundColor??u?.backgroundColor??"",m=o.processingBorderColor??u?.borderColor??"";s(a),a.classList.add("persona-voice-processing"),i.setMicState("processing"),a.style.backgroundColor=p,a.style.borderColor=m;let v=f||"currentColor";a.style.color=v,t(a,g,v),a.setAttribute("aria-label","Processing voice input"),c==="none"&&(a.style.cursor="default")},speaking:()=>{let a=i.mic();if(!a)return;e(a);let o=i.config().voiceRecognition??{},c=i.session().getVoiceInterruptionMode(),u=i.original,g=c==="cancel"?"square":c==="barge-in"?"mic":"volume-2",f=o.speakingIconName??g,p=o.speakingIconColor??(c==="barge-in"?o.recordingIconColor??u?.color??"":u?.color??""),m=o.speakingBackgroundColor??(c==="barge-in"?o.recordingBackgroundColor??"var(--persona-voice-recording-bg, #ef4444)":u?.backgroundColor??""),v=o.speakingBorderColor??(c==="barge-in"?o.recordingBorderColor??"":u?.borderColor??"");s(a),a.classList.add("persona-voice-speaking"),i.setMicState("speaking"),a.style.backgroundColor=m,a.style.borderColor=v;let w=p||"currentColor";a.style.color=w,t(a,f,w);let P=c==="cancel"?"Stop playback and re-record":c==="barge-in"?"Speak to interrupt":"Agent is speaking";a.setAttribute("aria-label",P),c==="none"&&(a.style.cursor="default"),c==="barge-in"&&a.classList.add("persona-voice-recording")},reset:()=>{let a=i.mic();if(!a)return;s(a),i.setMicState("idle");let o=i.original;o&&(a.style.backgroundColor=o.backgroundColor??"",a.style.color=o.color??"",a.style.borderColor=o.borderColor??"",t(a,o.iconName,o.color||"currentColor"),i.original=null),a.style.cursor="",a.setAttribute("aria-label","Start voice recognition")}}};0&&(module.exports={BrowserVoiceProvider,KeyedVoiceTranscript,RuntypeVoiceProvider,createBestAvailableVoiceProvider,createMicStateStyles,createVoiceProvider,createVoiceSessionBridge,isVoiceSupported,wireSessionVoice});