@agent-native/toolkit 0.5.1 → 0.7.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 (349) hide show
  1. package/README.md +17 -1
  2. package/dist/chat-history/ChatHistoryList.d.ts +103 -0
  3. package/dist/chat-history/ChatHistoryList.d.ts.map +1 -0
  4. package/dist/chat-history/ChatHistoryList.js +109 -0
  5. package/dist/chat-history/ChatHistoryList.js.map +1 -0
  6. package/dist/chat-history/ChatHistoryList.spec.d.ts +2 -0
  7. package/dist/chat-history/ChatHistoryList.spec.d.ts.map +1 -0
  8. package/dist/chat-history/ChatHistoryList.spec.js +283 -0
  9. package/dist/chat-history/ChatHistoryList.spec.js.map +1 -0
  10. package/dist/chat-history/index.d.ts +2 -0
  11. package/dist/chat-history/index.d.ts.map +1 -0
  12. package/dist/chat-history/index.js +2 -0
  13. package/dist/chat-history/index.js.map +1 -0
  14. package/dist/chat-history.css +314 -0
  15. package/dist/composer/AgentComposerFrame.d.ts +19 -0
  16. package/dist/composer/AgentComposerFrame.d.ts.map +1 -0
  17. package/dist/composer/AgentComposerFrame.js +14 -0
  18. package/dist/composer/AgentComposerFrame.js.map +1 -0
  19. package/dist/composer/ComposerPlusMenu.d.ts +17 -0
  20. package/dist/composer/ComposerPlusMenu.d.ts.map +1 -0
  21. package/dist/composer/ComposerPlusMenu.js +501 -0
  22. package/dist/composer/ComposerPlusMenu.js.map +1 -0
  23. package/dist/composer/MentionPopover.d.ts +29 -0
  24. package/dist/composer/MentionPopover.d.ts.map +1 -0
  25. package/dist/composer/MentionPopover.js +180 -0
  26. package/dist/composer/MentionPopover.js.map +1 -0
  27. package/dist/composer/PastedTextChip.d.ts +9 -0
  28. package/dist/composer/PastedTextChip.d.ts.map +1 -0
  29. package/dist/composer/PastedTextChip.js +47 -0
  30. package/dist/composer/PastedTextChip.js.map +1 -0
  31. package/dist/composer/PromptComposer.d.ts +114 -0
  32. package/dist/composer/PromptComposer.d.ts.map +1 -0
  33. package/dist/composer/PromptComposer.js +302 -0
  34. package/dist/composer/PromptComposer.js.map +1 -0
  35. package/dist/composer/PromptComposer.spec.d.ts +2 -0
  36. package/dist/composer/PromptComposer.spec.d.ts.map +1 -0
  37. package/dist/composer/PromptComposer.spec.js +64 -0
  38. package/dist/composer/PromptComposer.spec.js.map +1 -0
  39. package/dist/composer/RealtimeVoiceMode.d.ts +104 -0
  40. package/dist/composer/RealtimeVoiceMode.d.ts.map +1 -0
  41. package/dist/composer/RealtimeVoiceMode.js +245 -0
  42. package/dist/composer/RealtimeVoiceMode.js.map +1 -0
  43. package/dist/composer/RealtimeVoiceMode.spec.d.ts +2 -0
  44. package/dist/composer/RealtimeVoiceMode.spec.d.ts.map +1 -0
  45. package/dist/composer/RealtimeVoiceMode.spec.js +439 -0
  46. package/dist/composer/RealtimeVoiceMode.spec.js.map +1 -0
  47. package/dist/composer/TiptapComposer.d.ts +221 -0
  48. package/dist/composer/TiptapComposer.d.ts.map +1 -0
  49. package/dist/composer/TiptapComposer.js +1838 -0
  50. package/dist/composer/TiptapComposer.js.map +1 -0
  51. package/dist/composer/TiptapComposer.spec.d.ts +2 -0
  52. package/dist/composer/TiptapComposer.spec.d.ts.map +1 -0
  53. package/dist/composer/TiptapComposer.spec.js +277 -0
  54. package/dist/composer/TiptapComposer.spec.js.map +1 -0
  55. package/dist/composer/VoiceButton.d.ts +25 -0
  56. package/dist/composer/VoiceButton.d.ts.map +1 -0
  57. package/dist/composer/VoiceButton.js +100 -0
  58. package/dist/composer/VoiceButton.js.map +1 -0
  59. package/dist/composer/VoiceButton.spec.d.ts +2 -0
  60. package/dist/composer/VoiceButton.spec.d.ts.map +1 -0
  61. package/dist/composer/VoiceButton.spec.js +19 -0
  62. package/dist/composer/VoiceButton.spec.js.map +1 -0
  63. package/dist/composer/asset-picker-url.d.ts +16 -0
  64. package/dist/composer/asset-picker-url.d.ts.map +1 -0
  65. package/dist/composer/asset-picker-url.js +64 -0
  66. package/dist/composer/asset-picker-url.js.map +1 -0
  67. package/dist/composer/asset-picker-url.spec.d.ts +2 -0
  68. package/dist/composer/asset-picker-url.spec.d.ts.map +1 -0
  69. package/dist/composer/asset-picker-url.spec.js +23 -0
  70. package/dist/composer/asset-picker-url.spec.js.map +1 -0
  71. package/dist/composer/attachment-accept.d.ts +9 -0
  72. package/dist/composer/attachment-accept.d.ts.map +1 -0
  73. package/dist/composer/attachment-accept.js +65 -0
  74. package/dist/composer/attachment-accept.js.map +1 -0
  75. package/dist/composer/attachment-accept.spec.d.ts +2 -0
  76. package/dist/composer/attachment-accept.spec.d.ts.map +1 -0
  77. package/dist/composer/attachment-accept.spec.js +15 -0
  78. package/dist/composer/attachment-accept.spec.js.map +1 -0
  79. package/dist/composer/draft-key.d.ts +2 -0
  80. package/dist/composer/draft-key.d.ts.map +1 -0
  81. package/dist/composer/draft-key.js +8 -0
  82. package/dist/composer/draft-key.js.map +1 -0
  83. package/dist/composer/draft-key.spec.d.ts +2 -0
  84. package/dist/composer/draft-key.spec.d.ts.map +1 -0
  85. package/dist/composer/draft-key.spec.js +13 -0
  86. package/dist/composer/draft-key.spec.js.map +1 -0
  87. package/dist/composer/extensions/FileReference.d.ts +3 -0
  88. package/dist/composer/extensions/FileReference.d.ts.map +1 -0
  89. package/dist/composer/extensions/FileReference.js +36 -0
  90. package/dist/composer/extensions/FileReference.js.map +1 -0
  91. package/dist/composer/extensions/MentionReference.d.ts +3 -0
  92. package/dist/composer/extensions/MentionReference.d.ts.map +1 -0
  93. package/dist/composer/extensions/MentionReference.js +66 -0
  94. package/dist/composer/extensions/MentionReference.js.map +1 -0
  95. package/dist/composer/extensions/SkillReference.d.ts +3 -0
  96. package/dist/composer/extensions/SkillReference.d.ts.map +1 -0
  97. package/dist/composer/extensions/SkillReference.js +40 -0
  98. package/dist/composer/extensions/SkillReference.js.map +1 -0
  99. package/dist/composer/index.d.ts +14 -0
  100. package/dist/composer/index.d.ts.map +1 -0
  101. package/dist/composer/index.js +13 -0
  102. package/dist/composer/index.js.map +1 -0
  103. package/dist/composer/pasted-text.d.ts +31 -0
  104. package/dist/composer/pasted-text.d.ts.map +1 -0
  105. package/dist/composer/pasted-text.js +130 -0
  106. package/dist/composer/pasted-text.js.map +1 -0
  107. package/dist/composer/pasted-text.spec.d.ts +2 -0
  108. package/dist/composer/pasted-text.spec.d.ts.map +1 -0
  109. package/dist/composer/pasted-text.spec.js +107 -0
  110. package/dist/composer/pasted-text.spec.js.map +1 -0
  111. package/dist/composer/prompt-attachments.d.ts +18 -0
  112. package/dist/composer/prompt-attachments.d.ts.map +1 -0
  113. package/dist/composer/prompt-attachments.js +65 -0
  114. package/dist/composer/prompt-attachments.js.map +1 -0
  115. package/dist/composer/prompt-attachments.spec.d.ts +2 -0
  116. package/dist/composer/prompt-attachments.spec.d.ts.map +1 -0
  117. package/dist/composer/prompt-attachments.spec.js +63 -0
  118. package/dist/composer/prompt-attachments.spec.js.map +1 -0
  119. package/dist/composer/realtime-voice-audio-level.d.ts +14 -0
  120. package/dist/composer/realtime-voice-audio-level.d.ts.map +1 -0
  121. package/dist/composer/realtime-voice-audio-level.js +47 -0
  122. package/dist/composer/realtime-voice-audio-level.js.map +1 -0
  123. package/dist/composer/realtime-voice-audio-level.spec.d.ts +2 -0
  124. package/dist/composer/realtime-voice-audio-level.spec.d.ts.map +1 -0
  125. package/dist/composer/realtime-voice-audio-level.spec.js +25 -0
  126. package/dist/composer/realtime-voice-audio-level.spec.js.map +1 -0
  127. package/dist/composer/realtime-voice-transcript.d.ts +26 -0
  128. package/dist/composer/realtime-voice-transcript.d.ts.map +1 -0
  129. package/dist/composer/realtime-voice-transcript.js +103 -0
  130. package/dist/composer/realtime-voice-transcript.js.map +1 -0
  131. package/dist/composer/realtime-voice-transcript.spec.d.ts +2 -0
  132. package/dist/composer/realtime-voice-transcript.spec.d.ts.map +1 -0
  133. package/dist/composer/realtime-voice-transcript.spec.js +76 -0
  134. package/dist/composer/realtime-voice-transcript.spec.js.map +1 -0
  135. package/dist/composer/runtime-adapters.d.ts +163 -0
  136. package/dist/composer/runtime-adapters.d.ts.map +1 -0
  137. package/dist/composer/runtime-adapters.js +130 -0
  138. package/dist/composer/runtime-adapters.js.map +1 -0
  139. package/dist/composer/types.d.ts +60 -0
  140. package/dist/composer/types.d.ts.map +1 -0
  141. package/dist/composer/types.js +2 -0
  142. package/dist/composer/types.js.map +1 -0
  143. package/dist/composer/use-file-search.d.ts +6 -0
  144. package/dist/composer/use-file-search.d.ts.map +1 -0
  145. package/dist/composer/use-file-search.js +53 -0
  146. package/dist/composer/use-file-search.js.map +1 -0
  147. package/dist/composer/use-mention-search.d.ts +6 -0
  148. package/dist/composer/use-mention-search.d.ts.map +1 -0
  149. package/dist/composer/use-mention-search.js +75 -0
  150. package/dist/composer/use-mention-search.js.map +1 -0
  151. package/dist/composer/use-skills.d.ts +7 -0
  152. package/dist/composer/use-skills.d.ts.map +1 -0
  153. package/dist/composer/use-skills.js +40 -0
  154. package/dist/composer/use-skills.js.map +1 -0
  155. package/dist/composer/useRealtimeVoiceMode.d.ts +179 -0
  156. package/dist/composer/useRealtimeVoiceMode.d.ts.map +1 -0
  157. package/dist/composer/useRealtimeVoiceMode.js +1657 -0
  158. package/dist/composer/useRealtimeVoiceMode.js.map +1 -0
  159. package/dist/composer/useRealtimeVoiceMode.spec.d.ts +2 -0
  160. package/dist/composer/useRealtimeVoiceMode.spec.d.ts.map +1 -0
  161. package/dist/composer/useRealtimeVoiceMode.spec.js +618 -0
  162. package/dist/composer/useRealtimeVoiceMode.spec.js.map +1 -0
  163. package/dist/composer/useVoiceDictation.d.ts +57 -0
  164. package/dist/composer/useVoiceDictation.d.ts.map +1 -0
  165. package/dist/composer/useVoiceDictation.js +1004 -0
  166. package/dist/composer/useVoiceDictation.js.map +1 -0
  167. package/dist/composer/useVoiceDictation.spec.d.ts +2 -0
  168. package/dist/composer/useVoiceDictation.spec.d.ts.map +1 -0
  169. package/dist/composer/useVoiceDictation.spec.js +32 -0
  170. package/dist/composer/useVoiceDictation.spec.js.map +1 -0
  171. package/dist/editor/RegistryBlockContext.d.ts +68 -0
  172. package/dist/editor/RegistryBlockContext.d.ts.map +1 -0
  173. package/dist/editor/RegistryBlockContext.js +10 -0
  174. package/dist/editor/RegistryBlockContext.js.map +1 -0
  175. package/dist/editor/RegistryBlockNode.d.ts +66 -0
  176. package/dist/editor/RegistryBlockNode.d.ts.map +1 -0
  177. package/dist/editor/RegistryBlockNode.js +406 -0
  178. package/dist/editor/RegistryBlockNode.js.map +1 -0
  179. package/dist/editor/RegistryBlockNode.spec.d.ts +2 -0
  180. package/dist/editor/RegistryBlockNode.spec.d.ts.map +1 -0
  181. package/dist/editor/RegistryBlockNode.spec.js +215 -0
  182. package/dist/editor/RegistryBlockNode.spec.js.map +1 -0
  183. package/dist/editor/index.d.ts +2 -0
  184. package/dist/editor/index.d.ts.map +1 -1
  185. package/dist/editor/index.js +2 -0
  186. package/dist/editor/index.js.map +1 -1
  187. package/dist/editor/registrySlashCommands.d.ts +68 -0
  188. package/dist/editor/registrySlashCommands.d.ts.map +1 -0
  189. package/dist/editor/registrySlashCommands.js +51 -0
  190. package/dist/editor/registrySlashCommands.js.map +1 -0
  191. package/package.json +32 -1
  192. package/src/app-shell/header-actions.tsx +84 -0
  193. package/src/app-shell/index.ts +1 -0
  194. package/src/chat-history/ChatHistoryList.spec.tsx +453 -0
  195. package/src/chat-history/ChatHistoryList.tsx +469 -0
  196. package/src/chat-history/index.ts +7 -0
  197. package/src/chat-history.css +314 -0
  198. package/src/collab-ui/AgentPresenceChip.tsx +69 -0
  199. package/src/collab-ui/LiveCursorOverlay.tsx +241 -0
  200. package/src/collab-ui/PresenceBar.tsx +346 -0
  201. package/src/collab-ui/RecentEditHighlights.tsx +225 -0
  202. package/src/collab-ui/RemoteSelectionRings.tsx +227 -0
  203. package/src/collab-ui/agent-identity.ts +16 -0
  204. package/src/collab-ui/index.ts +39 -0
  205. package/src/collab-ui/lead-client.ts +32 -0
  206. package/src/collab-ui/types.spec.ts +18 -0
  207. package/src/collab-ui/types.ts +96 -0
  208. package/src/composer/AgentComposerFrame.tsx +59 -0
  209. package/src/composer/ComposerPlusMenu.tsx +983 -0
  210. package/src/composer/MentionPopover.tsx +412 -0
  211. package/src/composer/PastedTextChip.tsx +150 -0
  212. package/src/composer/PromptComposer.spec.ts +73 -0
  213. package/src/composer/PromptComposer.tsx +718 -0
  214. package/src/composer/RealtimeVoiceMode.spec.tsx +771 -0
  215. package/src/composer/RealtimeVoiceMode.tsx +856 -0
  216. package/src/composer/TiptapComposer.spec.ts +390 -0
  217. package/src/composer/TiptapComposer.tsx +2936 -0
  218. package/src/composer/VoiceButton.spec.ts +33 -0
  219. package/src/composer/VoiceButton.tsx +255 -0
  220. package/src/composer/asset-picker-url.spec.ts +56 -0
  221. package/src/composer/asset-picker-url.ts +80 -0
  222. package/src/composer/attachment-accept.spec.ts +22 -0
  223. package/src/composer/attachment-accept.ts +71 -0
  224. package/src/composer/draft-key.spec.ts +19 -0
  225. package/src/composer/draft-key.ts +7 -0
  226. package/src/composer/extensions/FileReference.tsx +55 -0
  227. package/src/composer/extensions/MentionReference.tsx +93 -0
  228. package/src/composer/extensions/SkillReference.tsx +56 -0
  229. package/src/composer/index.ts +79 -0
  230. package/src/composer/pasted-text.spec.ts +162 -0
  231. package/src/composer/pasted-text.ts +160 -0
  232. package/src/composer/prompt-attachments.spec.ts +80 -0
  233. package/src/composer/prompt-attachments.ts +93 -0
  234. package/src/composer/realtime-voice-audio-level.spec.ts +32 -0
  235. package/src/composer/realtime-voice-audio-level.ts +64 -0
  236. package/src/composer/realtime-voice-transcript.spec.ts +95 -0
  237. package/src/composer/realtime-voice-transcript.ts +134 -0
  238. package/src/composer/runtime-adapters.tsx +343 -0
  239. package/src/composer/types.ts +66 -0
  240. package/src/composer/use-file-search.ts +64 -0
  241. package/src/composer/use-mention-search.ts +90 -0
  242. package/src/composer/use-skills.ts +45 -0
  243. package/src/composer/useRealtimeVoiceMode.spec.ts +818 -0
  244. package/src/composer/useRealtimeVoiceMode.tsx +2117 -0
  245. package/src/composer/useVoiceDictation.spec.ts +45 -0
  246. package/src/composer/useVoiceDictation.ts +1191 -0
  247. package/src/context-ui/ContextMeter.tsx +101 -0
  248. package/src/context-ui/ContextSegmentRow.tsx +184 -0
  249. package/src/context-ui/ContextTreemap.tsx +125 -0
  250. package/src/context-ui/ContextXRayPanel.tsx +377 -0
  251. package/src/context-ui/format.ts +42 -0
  252. package/src/context-ui/index.ts +15 -0
  253. package/src/context-ui/types.ts +43 -0
  254. package/src/design-tweaks/index.ts +1 -0
  255. package/src/design-tweaks/visual-style-controls.tsx +1084 -0
  256. package/src/editor/BubbleToolbar.tsx +253 -0
  257. package/src/editor/CodeBlockNode.tsx +254 -0
  258. package/src/editor/DragHandle.spec.ts +588 -0
  259. package/src/editor/DragHandle.ts +1437 -0
  260. package/src/editor/ImageExtension.roundtrip.spec.ts +117 -0
  261. package/src/editor/ImageExtension.ts +306 -0
  262. package/src/editor/RegistryBlockContext.tsx +107 -0
  263. package/src/editor/RegistryBlockNode.spec.ts +279 -0
  264. package/src/editor/RegistryBlockNode.tsx +652 -0
  265. package/src/editor/RichMarkdownEditor.collab.spec.ts +79 -0
  266. package/src/editor/RichMarkdownEditor.roundtrip.spec.ts +226 -0
  267. package/src/editor/RichMarkdownEditor.tsx +81 -0
  268. package/src/editor/RunId.ts +61 -0
  269. package/src/editor/SharedRichEditor.tsx +321 -0
  270. package/src/editor/SlashCommandMenu.tsx +310 -0
  271. package/src/editor/disableHistory.spec.ts +85 -0
  272. package/src/editor/extensions.ts +402 -0
  273. package/src/editor/gfmDoc.spec.ts +230 -0
  274. package/src/editor/gfmDoc.ts +92 -0
  275. package/src/editor/index.ts +93 -0
  276. package/src/editor/registrySlashCommands.ts +131 -0
  277. package/src/editor/structuralReorderUndo.spec.ts +144 -0
  278. package/src/editor/surgical-apply.spec.ts +279 -0
  279. package/src/editor/surgical-apply.ts +192 -0
  280. package/src/editor/useCollabReconcile.concurrent.spec.ts +422 -0
  281. package/src/editor/useCollabReconcile.idempotent.spec.ts +324 -0
  282. package/src/editor/useCollabReconcile.ts +589 -0
  283. package/src/editor.css +510 -0
  284. package/src/hooks/index.ts +2 -0
  285. package/src/hooks/use-mobile.tsx +21 -0
  286. package/src/hooks/use-toast.ts +188 -0
  287. package/src/index.ts +8 -0
  288. package/src/onboarding/index.ts +1 -0
  289. package/src/provider.tsx +47 -0
  290. package/src/sharing/VisibilityBadge.spec.ts +96 -0
  291. package/src/sharing/VisibilityBadge.tsx +37 -0
  292. package/src/sharing/index.ts +4 -0
  293. package/src/styles.css +21 -0
  294. package/src/ui/accordion.tsx +56 -0
  295. package/src/ui/alert-dialog.tsx +141 -0
  296. package/src/ui/alert.tsx +59 -0
  297. package/src/ui/aspect-ratio.tsx +5 -0
  298. package/src/ui/avatar.tsx +48 -0
  299. package/src/ui/badge.tsx +37 -0
  300. package/src/ui/breadcrumb.tsx +115 -0
  301. package/src/ui/button.tsx +78 -0
  302. package/src/ui/calendar.tsx +214 -0
  303. package/src/ui/card.tsx +86 -0
  304. package/src/ui/carousel.tsx +260 -0
  305. package/src/ui/chart.tsx +375 -0
  306. package/src/ui/checkbox.tsx +28 -0
  307. package/src/ui/collapsible.tsx +9 -0
  308. package/src/ui/command.spec.tsx +51 -0
  309. package/src/ui/command.tsx +174 -0
  310. package/src/ui/context-menu.tsx +202 -0
  311. package/src/ui/date-picker.tsx +64 -0
  312. package/src/ui/dialog.spec.tsx +43 -0
  313. package/src/ui/dialog.tsx +146 -0
  314. package/src/ui/drawer.tsx +126 -0
  315. package/src/ui/dropdown-menu.tsx +218 -0
  316. package/src/ui/form.tsx +177 -0
  317. package/src/ui/hover-card.tsx +27 -0
  318. package/src/ui/index.ts +52 -0
  319. package/src/ui/input-otp.tsx +69 -0
  320. package/src/ui/input.tsx +22 -0
  321. package/src/ui/label.tsx +24 -0
  322. package/src/ui/logo.tsx +36 -0
  323. package/src/ui/menubar.tsx +235 -0
  324. package/src/ui/navigation-menu.tsx +128 -0
  325. package/src/ui/pagination.tsx +121 -0
  326. package/src/ui/popover.tsx +44 -0
  327. package/src/ui/progress.tsx +26 -0
  328. package/src/ui/radio-group.tsx +42 -0
  329. package/src/ui/resizable.tsx +43 -0
  330. package/src/ui/scroll-area.tsx +46 -0
  331. package/src/ui/select.tsx +158 -0
  332. package/src/ui/separator.tsx +29 -0
  333. package/src/ui/sheet.tsx +160 -0
  334. package/src/ui/sidebar.tsx +777 -0
  335. package/src/ui/skeleton.tsx +18 -0
  336. package/src/ui/slider.tsx +26 -0
  337. package/src/ui/sonner.tsx +58 -0
  338. package/src/ui/spinner.tsx +17 -0
  339. package/src/ui/switch.tsx +27 -0
  340. package/src/ui/table.tsx +117 -0
  341. package/src/ui/tabs.tsx +53 -0
  342. package/src/ui/textarea.tsx +23 -0
  343. package/src/ui/toast.tsx +127 -0
  344. package/src/ui/toaster.tsx +33 -0
  345. package/src/ui/toggle-group.tsx +59 -0
  346. package/src/ui/toggle.tsx +43 -0
  347. package/src/ui/tooltip.tsx +53 -0
  348. package/src/ui/use-toast.ts +3 -0
  349. package/src/utils.ts +8 -0
@@ -0,0 +1,439 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { act } from "react";
4
+ import { createRoot } from "react-dom/client";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { TooltipProvider } from "../ui/tooltip.js";
7
+ import { createRealtimeVoiceAudioLevelStore } from "./realtime-voice-audio-level.js";
8
+ import { RealtimeVoiceModeDock, RealtimeVoiceModeEntry, } from "./RealtimeVoiceMode.js";
9
+ const copy = {
10
+ entryButtonLabel: "Use microphone",
11
+ promptTitle: "Talk to your app",
12
+ promptDescription: "Voice mode keeps listening while the agent navigates and takes actions.",
13
+ setupTitle: "Set up voice mode",
14
+ setupDescription: "Connect Builder.io to use managed voice with free credits, or add your own keys.",
15
+ connectBuilder: "Connect Builder.io",
16
+ useOpenAiKey: "Add your own keys",
17
+ startWithOpenAiKey: "Start with OpenAI key",
18
+ startVoiceMode: "Start voice mode",
19
+ keepDictating: "Keep dictating",
20
+ showChat: "Show chat",
21
+ hideChat: "Hide chat",
22
+ endVoiceMode: "End voice mode",
23
+ voiceSettings: "Voice settings",
24
+ settings: {
25
+ microphone: "Microphone",
26
+ defaultMicrophone: "System default",
27
+ microphoneSwitchFailed: "Could not switch microphones.",
28
+ language: "Language",
29
+ autoLanguage: "Auto",
30
+ languages: {
31
+ en: "English",
32
+ es: "Spanish",
33
+ fr: "French",
34
+ de: "German",
35
+ it: "Italian",
36
+ pt: "Portuguese",
37
+ ja: "Japanese",
38
+ ko: "Korean",
39
+ zh: "Chinese",
40
+ },
41
+ intelligence: "Intelligence",
42
+ intelligenceLevels: {
43
+ instant: "Instant",
44
+ balanced: "Balanced",
45
+ deep: "Deep",
46
+ },
47
+ voiceStyle: "Voice style",
48
+ voiceChangePending: "Voice changes apply to the next conversation.",
49
+ voiceDescriptions: {
50
+ marin: "Warm and natural",
51
+ cedar: "Clear and grounded",
52
+ coral: "Friendly and bright",
53
+ sage: "Calm and thoughtful",
54
+ verse: "Expressive and versatile",
55
+ alloy: "Balanced and neutral",
56
+ ash: "Smooth and confident",
57
+ ballad: "Warm and expressive",
58
+ echo: "Clear and direct",
59
+ shimmer: "Light and upbeat",
60
+ },
61
+ },
62
+ status: {
63
+ connecting: "Connecting",
64
+ listening: "Listening",
65
+ speaking: "Speaking",
66
+ working: "Working",
67
+ error: "Voice mode needs attention",
68
+ ending: "Ending voice mode",
69
+ },
70
+ errors: {
71
+ unsupported: "Unsupported",
72
+ responseFailed: "Response failed",
73
+ sessionFailed: "Session failed",
74
+ channelDisconnected: "Channel disconnected",
75
+ connectionFailed: "Connection failed",
76
+ offerFailed: "Offer failed",
77
+ },
78
+ };
79
+ describe("RealtimeVoiceMode", () => {
80
+ let container;
81
+ let root;
82
+ beforeEach(() => {
83
+ vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
84
+ container = document.createElement("div");
85
+ document.body.appendChild(container);
86
+ root = createRoot(container);
87
+ });
88
+ afterEach(() => {
89
+ act(() => root.unmount());
90
+ container.remove();
91
+ vi.unstubAllGlobals();
92
+ });
93
+ const render = (node) => {
94
+ act(() => {
95
+ root.render(_jsx(TooltipProvider, { children: node }));
96
+ });
97
+ };
98
+ it("offers voice mode before starting the existing dictation path", () => {
99
+ const onStartVoiceMode = vi.fn();
100
+ const onKeepDictating = vi.fn();
101
+ render(_jsx(RealtimeVoiceModeEntry, { copy: copy, onStartVoiceMode: onStartVoiceMode, onKeepDictating: onKeepDictating }));
102
+ const microphone = document.querySelector('button[aria-label="Use microphone"]');
103
+ expect(microphone?.getAttribute("aria-expanded")).toBe("false");
104
+ act(() => microphone?.click());
105
+ expect(document.body.textContent).toContain("Talk to your app");
106
+ const prompt = document.querySelector('[role="dialog"]');
107
+ expect(prompt?.className).toContain("w-[min(calc(100vw-2rem),var(--radix-popover-content-available-width,22rem),22rem)]");
108
+ expect(document.body.textContent).toContain("Keep dictating");
109
+ expect(onStartVoiceMode).not.toHaveBeenCalled();
110
+ expect(onKeepDictating).not.toHaveBeenCalled();
111
+ const startVoiceMode = Array.from(document.querySelectorAll("button")).find((button) => button.textContent?.includes("Start voice mode"));
112
+ act(() => startVoiceMode?.click());
113
+ expect(onStartVoiceMode).toHaveBeenCalledOnce();
114
+ expect(onKeepDictating).not.toHaveBeenCalled();
115
+ expect(document.body.textContent).not.toContain("Talk to your app");
116
+ });
117
+ it("does not start realtime voice while provider readiness is unresolved", () => {
118
+ const onStartVoiceMode = vi.fn();
119
+ const onKeepDictating = vi.fn();
120
+ render(_jsx(RealtimeVoiceModeEntry, { copy: copy, open: true, providerStatusPending: true, onStartVoiceMode: onStartVoiceMode, onKeepDictating: onKeepDictating }));
121
+ const startVoiceMode = Array.from(document.querySelectorAll("button")).find((button) => button.textContent?.includes("Start voice mode"));
122
+ expect(startVoiceMode?.disabled).toBe(true);
123
+ act(() => startVoiceMode?.click());
124
+ expect(onStartVoiceMode).not.toHaveBeenCalled();
125
+ const keepDictating = Array.from(document.querySelectorAll("button")).find((button) => button.textContent === "Keep dictating");
126
+ expect(keepDictating?.disabled).toBe(false);
127
+ });
128
+ it("keeps editable dictation available from the prompt", () => {
129
+ const onStartVoiceMode = vi.fn();
130
+ const onKeepDictating = vi.fn();
131
+ render(_jsx(RealtimeVoiceModeEntry, { copy: copy, open: true, onStartVoiceMode: onStartVoiceMode, onKeepDictating: onKeepDictating }));
132
+ const keepDictating = Array.from(document.querySelectorAll("button")).find((button) => button.textContent === "Keep dictating");
133
+ act(() => keepDictating?.click());
134
+ expect(onKeepDictating).toHaveBeenCalledOnce();
135
+ expect(onStartVoiceMode).not.toHaveBeenCalled();
136
+ });
137
+ it("makes Builder the primary setup action and own keys the secondary", () => {
138
+ const onConnectBuilder = vi.fn();
139
+ const onUseOpenAiKey = vi.fn();
140
+ render(_jsx("div", { className: "agent-panel-root", children: _jsx(RealtimeVoiceModeEntry, { copy: copy, open: true, setupRequired: true, onStartVoiceMode: vi.fn(), onKeepDictating: vi.fn(), onConnectBuilder: onConnectBuilder, onUseOpenAiKey: onUseOpenAiKey }) }));
141
+ expect(document.body.textContent).toContain("Set up voice mode");
142
+ const prompt = document.querySelector('[role="dialog"]');
143
+ expect(prompt?.className).toContain("w-[min(calc(100vw-2rem),var(--radix-popover-content-available-width,30rem),30rem)]");
144
+ expect(prompt?.dataset.collisionBoundary).toBe("agent-panel");
145
+ const actions = Array.from(prompt?.querySelectorAll("div") ?? []).find((element) => element.className.includes("sm:flex-row"));
146
+ const actionClasses = actions?.className.split(/\s+/) ?? [];
147
+ expect(actionClasses).toContain("sm:flex-wrap");
148
+ expect(actionClasses).not.toContain("sm:flex-nowrap");
149
+ const buttons = Array.from(document.querySelectorAll("button"));
150
+ expect(buttons.find((button) => button.textContent === "Connect Builder.io")
151
+ ?.className).toContain("whitespace-nowrap");
152
+ act(() => buttons
153
+ .find((button) => button.textContent === "Connect Builder.io")
154
+ ?.click());
155
+ expect(onConnectBuilder).toHaveBeenCalledOnce();
156
+ expect(onUseOpenAiKey).not.toHaveBeenCalled();
157
+ });
158
+ it("toggles chat without ending the voice session", () => {
159
+ const onToggleChat = vi.fn();
160
+ const onEndVoiceMode = vi.fn();
161
+ render(_jsx(RealtimeVoiceModeDock, { state: "listening", copy: copy, chatVisible: false, onToggleChat: onToggleChat, onEndVoiceMode: onEndVoiceMode }));
162
+ const status = document.querySelector('[role="status"]');
163
+ expect(status?.textContent).toBe("Listening");
164
+ expect(status?.className).toContain("sr-only");
165
+ const toggleChat = document.querySelector('button[data-realtime-voice-chat-toggle="orb"]');
166
+ expect(document.querySelector('button[data-realtime-voice-chat-toggle="controls"]')).toBeNull();
167
+ expect(toggleChat?.getAttribute("aria-pressed")).toBe("false");
168
+ expect(toggleChat?.getAttribute("aria-expanded")).toBe("false");
169
+ expect(toggleChat?.className).toContain("backdrop-blur-xl");
170
+ expect(toggleChat?.className).not.toContain("shadow-lg");
171
+ expect(toggleChat?.querySelector(".blur-md")).toBeNull();
172
+ expect(document.querySelector('[class*="bg-gradient"]')).toBeNull();
173
+ expect(document
174
+ .querySelector("[data-realtime-voice-controls]")
175
+ ?.getAttribute("data-realtime-voice-controls")).toBe("closed");
176
+ act(() => toggleChat?.click());
177
+ expect(onToggleChat).toHaveBeenCalledOnce();
178
+ expect(onEndVoiceMode).not.toHaveBeenCalled();
179
+ expect(toggleChat?.getAttribute("aria-expanded")).toBe("true");
180
+ expect(document
181
+ .querySelector("[data-realtime-voice-controls]")
182
+ ?.getAttribute("data-realtime-voice-controls")).toBe("open");
183
+ });
184
+ it("progressively discloses the end-session control", () => {
185
+ const onEndVoiceMode = vi.fn();
186
+ render(_jsx(RealtimeVoiceModeDock, { state: "listening", copy: copy, chatVisible: false, onToggleChat: vi.fn(), onEndVoiceMode: onEndVoiceMode }));
187
+ const endVoiceMode = document.querySelector('button[aria-label="End voice mode"]');
188
+ act(() => endVoiceMode?.click());
189
+ expect(onEndVoiceMode).toHaveBeenCalledOnce();
190
+ });
191
+ it("opens compact voice settings without leaving or ending the session", () => {
192
+ const onLanguageChange = vi.fn();
193
+ const onIntelligenceChange = vi.fn();
194
+ const onVoiceChange = vi.fn();
195
+ render(_jsx(RealtimeVoiceModeDock, { state: "listening", copy: copy, chatVisible: false, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn(), settings: {
196
+ dialogLabel: "Voice settings",
197
+ appliesNextConversationNote: "Voice changes apply to the next conversation.",
198
+ microphone: {
199
+ label: "Microphone",
200
+ value: "default",
201
+ options: [
202
+ { value: "default", label: "System default" },
203
+ { value: "studio", label: "Studio microphone" },
204
+ ],
205
+ onValueChange: vi.fn(),
206
+ },
207
+ language: {
208
+ label: "Language",
209
+ value: "en",
210
+ options: [
211
+ { value: "auto", label: "Auto" },
212
+ { value: "en", label: "English" },
213
+ ],
214
+ onValueChange: onLanguageChange,
215
+ },
216
+ intelligence: {
217
+ label: "Intelligence",
218
+ value: "instant",
219
+ options: [
220
+ { value: "instant", label: "Instant" },
221
+ { value: "balanced", label: "Balanced" },
222
+ ],
223
+ onValueChange: onIntelligenceChange,
224
+ },
225
+ voiceStyle: {
226
+ label: "Voice style",
227
+ value: "marin",
228
+ options: [
229
+ {
230
+ value: "marin",
231
+ label: "Marin",
232
+ description: "Warm and conversational",
233
+ },
234
+ { value: "cedar", label: "Cedar" },
235
+ ],
236
+ onValueChange: onVoiceChange,
237
+ },
238
+ } }));
239
+ const settingsButton = document.querySelector('button[aria-label="Voice settings"]');
240
+ act(() => settingsButton?.click());
241
+ expect(settingsButton?.getAttribute("aria-expanded")).toBe("true");
242
+ expect(document.querySelector('[data-realtime-voice-settings="true"]')).not.toBeNull();
243
+ expect(document.body.textContent).toContain("Warm and conversational");
244
+ expect(document.body.textContent).toContain("Voice changes apply to the next conversation.");
245
+ expect(Array.from(document.querySelectorAll('[role="combobox"]')).map((element) => element.getAttribute("aria-label"))).toEqual([
246
+ "Microphone: System default",
247
+ "Language: English",
248
+ "Intelligence: Instant",
249
+ "Voice style: Marin",
250
+ ]);
251
+ expect(document.activeElement).not.toBe(document.querySelector('[role="combobox"]'));
252
+ const language = document.querySelector('[role="combobox"][aria-label="Language: English"]');
253
+ expect(language?.className).toContain("focus-visible:ring-2");
254
+ act(() => {
255
+ language?.dispatchEvent(new PointerEvent("pointerdown", {
256
+ bubbles: true,
257
+ button: 0,
258
+ pointerType: "mouse",
259
+ }));
260
+ });
261
+ const auto = Array.from(document.querySelectorAll('[role="option"]')).find((option) => option.textContent?.includes("Auto"));
262
+ expect(auto).toBeDefined();
263
+ const settingsPanel = document.querySelector('[data-realtime-voice-settings="true"]');
264
+ act(() => {
265
+ settingsPanel?.dispatchEvent(new PointerEvent("pointerdown", {
266
+ bubbles: true,
267
+ button: 0,
268
+ pointerType: "mouse",
269
+ }));
270
+ settingsPanel?.dispatchEvent(new PointerEvent("pointerup", {
271
+ bubbles: true,
272
+ button: 0,
273
+ pointerType: "mouse",
274
+ }));
275
+ });
276
+ expect(settingsButton?.getAttribute("aria-expanded")).toBe("true");
277
+ expect(document.querySelector('[data-realtime-voice-settings="true"]')).not.toBeNull();
278
+ act(() => {
279
+ language?.dispatchEvent(new PointerEvent("pointerdown", {
280
+ bubbles: true,
281
+ button: 0,
282
+ pointerType: "mouse",
283
+ }));
284
+ });
285
+ const reopenedAuto = Array.from(document.querySelectorAll('[role="option"]')).find((option) => option.textContent?.includes("Auto"));
286
+ expect(reopenedAuto).toBeDefined();
287
+ act(() => {
288
+ reopenedAuto?.dispatchEvent(new PointerEvent("pointerdown", {
289
+ bubbles: true,
290
+ button: 0,
291
+ pointerType: "mouse",
292
+ }));
293
+ reopenedAuto?.dispatchEvent(new PointerEvent("pointerup", {
294
+ bubbles: true,
295
+ button: 0,
296
+ pointerType: "mouse",
297
+ }));
298
+ });
299
+ expect(onLanguageChange).toHaveBeenCalledWith("auto");
300
+ expect(onIntelligenceChange).not.toHaveBeenCalled();
301
+ expect(onVoiceChange).not.toHaveBeenCalled();
302
+ expect(settingsButton?.getAttribute("aria-expanded")).toBe("true");
303
+ expect(document.querySelector('[data-realtime-voice-settings="true"]')).not.toBeNull();
304
+ expect(document.querySelector("[data-realtime-voice-state]")).not.toBeNull();
305
+ act(() => settingsButton?.click());
306
+ expect(settingsButton?.getAttribute("aria-expanded")).toBe("false");
307
+ expect(document.querySelector('[data-realtime-voice-settings="true"]')).toBeNull();
308
+ act(() => settingsButton?.click());
309
+ expect(settingsButton?.getAttribute("aria-expanded")).toBe("true");
310
+ expect(document.querySelector('[data-realtime-voice-settings="true"]')).not.toBeNull();
311
+ });
312
+ it("keeps the dock visible when chat opens itself", () => {
313
+ const sidebar = document.createElement("div");
314
+ let sidebarWidth = 320;
315
+ sidebar.className = "agent-sidebar-panel";
316
+ sidebar.dataset.agentSidebarPosition = "right";
317
+ sidebar.dataset.agentSidebarState = "open";
318
+ sidebar.getBoundingClientRect = () => ({
319
+ bottom: 768,
320
+ height: 768,
321
+ left: 1024 - sidebarWidth,
322
+ right: 1024,
323
+ top: 0,
324
+ width: sidebarWidth,
325
+ x: 1024 - sidebarWidth,
326
+ y: 0,
327
+ toJSON: () => ({}),
328
+ });
329
+ document.body.appendChild(sidebar);
330
+ render(_jsx(RealtimeVoiceModeDock, { state: "listening", copy: copy, chatVisible: false, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn() }));
331
+ expect(document.querySelector("[data-realtime-voice-state]")).not.toBeNull();
332
+ render(_jsx(RealtimeVoiceModeDock, { state: "listening", copy: copy, chatVisible: true, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn() }));
333
+ expect(document.querySelector("[data-realtime-voice-state]")).not.toBeNull();
334
+ expect(document
335
+ .querySelector("[data-realtime-voice-state]")
336
+ ?.getAttribute("data-realtime-voice-chat-offset")).toBe("-320");
337
+ act(() => {
338
+ sidebarWidth = 400;
339
+ window.dispatchEvent(new Event("resize"));
340
+ });
341
+ expect(document
342
+ .querySelector("[data-realtime-voice-state]")
343
+ ?.getAttribute("data-realtime-voice-chat-offset")).toBe("-400");
344
+ expect(document
345
+ .querySelector('button[aria-label="Hide chat"]')
346
+ ?.getAttribute("aria-pressed")).toBe("true");
347
+ sidebar.remove();
348
+ });
349
+ it("keeps the dock reachable for fullscreen and left-side chat", () => {
350
+ const sidebar = document.createElement("div");
351
+ sidebar.className = "agent-sidebar-panel";
352
+ sidebar.dataset.agentSidebarPosition = "right";
353
+ sidebar.dataset.agentSidebarState = "open";
354
+ sidebar.dataset.agentSidebarLayout = "fullscreen";
355
+ sidebar.getBoundingClientRect = () => ({
356
+ bottom: 768,
357
+ height: 768,
358
+ left: 0,
359
+ right: 1024,
360
+ top: 0,
361
+ width: 1024,
362
+ x: 0,
363
+ y: 0,
364
+ toJSON: () => ({}),
365
+ });
366
+ document.body.appendChild(sidebar);
367
+ render(_jsx(RealtimeVoiceModeDock, { state: "listening", copy: copy, chatVisible: true, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn() }));
368
+ expect(document
369
+ .querySelector("[data-realtime-voice-state]")
370
+ ?.getAttribute("data-realtime-voice-chat-offset")).toBe("0");
371
+ act(() => {
372
+ document.documentElement.style.direction = "rtl";
373
+ sidebar.dataset.agentSidebarLayout = "desktop";
374
+ sidebar.dataset.agentSidebarPosition = "left";
375
+ sidebar.getBoundingClientRect = () => ({
376
+ bottom: 768,
377
+ height: 768,
378
+ left: 0,
379
+ right: 280,
380
+ top: 0,
381
+ width: 280,
382
+ x: 0,
383
+ y: 0,
384
+ toJSON: () => ({}),
385
+ });
386
+ });
387
+ render(_jsx(RealtimeVoiceModeDock, { state: "listening", copy: copy, chatVisible: true, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn() }, "rtl"));
388
+ expect(document
389
+ .querySelector("[data-realtime-voice-state]")
390
+ ?.getAttribute("data-realtime-voice-chat-offset")).toBe("280");
391
+ document.documentElement.style.direction = "";
392
+ sidebar.remove();
393
+ });
394
+ it("shows a live waveform for user and assistant audio", () => {
395
+ const audioLevels = createRealtimeVoiceAudioLevelStore();
396
+ audioLevels.set({ input: 0.7, output: 0 });
397
+ render(_jsx(RealtimeVoiceModeDock, { state: "listening", copy: copy, chatVisible: false, audioLevels: audioLevels, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn() }));
398
+ expect(document.querySelector('[data-realtime-voice-activity="user"]')).not.toBeNull();
399
+ expect(document.querySelector('[data-realtime-voice-waveform="true"]')).not.toBeNull();
400
+ act(() => audioLevels.set({ input: 0, output: 0.8 }));
401
+ expect(document.querySelector('[data-realtime-voice-activity="assistant"]')).not.toBeNull();
402
+ expect(document.querySelector('[data-realtime-voice-waveform-activity="assistant"]')).not.toBeNull();
403
+ });
404
+ it.each(["listening", "speaking", "working", "ending"])("keeps the waveform visible while voice mode is %s and silent", (state) => {
405
+ render(_jsx(RealtimeVoiceModeDock, { state: state, copy: copy, chatVisible: false, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn() }));
406
+ expect(document.querySelector('[data-realtime-voice-waveform-activity="idle"]')).not.toBeNull();
407
+ expect(document.querySelector(".animate-spin")).toBeNull();
408
+ });
409
+ it("shows an unmistakable loader and ignores early audio until connected", () => {
410
+ const audioLevels = createRealtimeVoiceAudioLevelStore();
411
+ audioLevels.set({ input: 0.8, output: 0 });
412
+ render(_jsx(RealtimeVoiceModeDock, { state: "connecting", copy: copy, chatVisible: false, audioLevels: audioLevels, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn() }));
413
+ expect(document
414
+ .querySelector("[data-realtime-voice-state]")
415
+ ?.getAttribute("data-realtime-voice-activity")).toBe("idle");
416
+ expect(document.querySelector('[data-realtime-voice-waveform="true"]')).toBeNull();
417
+ expect(document.querySelector('[data-realtime-voice-connecting-indicator="true"]')).not.toBeNull();
418
+ expect(document.querySelector(".animate-spin")).not.toBeNull();
419
+ });
420
+ it("exposes error details and a separate end-session action", () => {
421
+ const onToggleChat = vi.fn();
422
+ const onEndVoiceMode = vi.fn();
423
+ render(_jsx(RealtimeVoiceModeDock, { state: "error", copy: copy, chatVisible: true, errorMessage: "The microphone disconnected.", onToggleChat: onToggleChat, onEndVoiceMode: onEndVoiceMode }));
424
+ expect(document.body.textContent).toContain("The microphone disconnected.");
425
+ const endVoiceMode = document.querySelector('button[aria-label="End voice mode"]');
426
+ act(() => endVoiceMode?.click());
427
+ expect(onEndVoiceMode).toHaveBeenCalledOnce();
428
+ expect(onToggleChat).not.toHaveBeenCalled();
429
+ });
430
+ it("locks the dock while the session is ending", () => {
431
+ render(_jsx(RealtimeVoiceModeDock, { state: "ending", copy: copy, chatVisible: false, onToggleChat: vi.fn(), onEndVoiceMode: vi.fn() }));
432
+ expect(document.querySelector('button[aria-label="Show chat"]')?.disabled).toBe(true);
433
+ expect(document.querySelector('button[aria-label="End voice mode"]')?.disabled).toBe(true);
434
+ const status = document.querySelector('[role="status"]');
435
+ expect(status?.textContent).toBe("Ending voice mode");
436
+ expect(status?.className).toContain("sr-only");
437
+ });
438
+ });
439
+ //# sourceMappingURL=RealtimeVoiceMode.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealtimeVoiceMode.spec.js","sourceRoot":"","sources":["../../src/composer/RealtimeVoiceMode.spec.tsx"],"names":[],"mappings":"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"}