@agent-native/core 0.110.3 → 0.111.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 (380) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +11 -0
  3. package/corpus/core/docs/content/components.mdx +7 -0
  4. package/corpus/core/docs/content/locales/ar-SA/components.mdx +4 -2
  5. package/corpus/core/docs/content/locales/de-DE/components.mdx +4 -2
  6. package/corpus/core/docs/content/locales/es-ES/components.mdx +4 -2
  7. package/corpus/core/docs/content/locales/fr-FR/components.mdx +4 -2
  8. package/corpus/core/docs/content/locales/hi-IN/components.mdx +3 -2
  9. package/corpus/core/docs/content/locales/ja-JP/components.mdx +3 -2
  10. package/corpus/core/docs/content/locales/ko-KR/components.mdx +3 -2
  11. package/corpus/core/docs/content/locales/pt-BR/components.mdx +4 -2
  12. package/corpus/core/docs/content/locales/zh-CN/components.mdx +3 -2
  13. package/corpus/core/docs/content/locales/zh-TW/components.mdx +3 -2
  14. package/corpus/core/docs/content/toolkit-agent-ux.mdx +8 -3
  15. package/corpus/core/migration-manifest.json +133 -266
  16. package/corpus/core/package.json +32 -33
  17. package/corpus/core/scripts/check-dist-imports.mjs +25 -1
  18. package/corpus/core/scripts/finalize-build.mjs +59 -2
  19. package/corpus/core/src/client/AgentAskPopover.tsx +1 -1
  20. package/corpus/core/src/client/AgentPanel.tsx +1 -1
  21. package/corpus/core/src/client/AssistantChat.tsx +12 -14
  22. package/corpus/core/src/client/NewWorkspaceAppFlow.tsx +1 -1
  23. package/corpus/core/src/client/agent-chat-adapter.ts +1 -1
  24. package/corpus/core/src/client/blocks/RegistryBlockDataProvider.tsx +121 -0
  25. package/corpus/core/src/client/blocks/index.ts +6 -0
  26. package/corpus/core/src/client/chat/attachment-adapters.ts +4 -5
  27. package/corpus/core/src/client/chat/index.ts +0 -1
  28. package/corpus/core/src/client/chat/message-components.tsx +2 -2
  29. package/corpus/core/src/client/code-agent-chat-adapter.ts +2 -2
  30. package/corpus/core/src/client/collab/index.ts +0 -22
  31. package/corpus/core/src/client/composer/index.ts +5 -66
  32. package/corpus/core/src/client/composer/runtime-adapters.tsx +123 -0
  33. package/corpus/core/src/client/composer/use-mention-search.ts +2 -79
  34. package/corpus/core/src/client/composer/wired-components.tsx +53 -0
  35. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +1 -1
  36. package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +1 -1
  37. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +1 -1
  38. package/corpus/core/src/client/index.ts +0 -156
  39. package/corpus/core/src/client/resources/ResourceEditor.tsx +29 -681
  40. package/corpus/core/src/client/resources/ResourcesPanel.tsx +1 -1
  41. package/corpus/core/src/client/settings/AutomationsSection.tsx +1 -1
  42. package/corpus/core/src/client/sharing/index.ts +0 -4
  43. package/corpus/core/src/client/tombstone/agent-presence-chip.ts +17 -0
  44. package/corpus/core/src/client/tombstone/editor.ts +265 -0
  45. package/corpus/core/src/client/tombstone/live-cursor-overlay.ts +21 -0
  46. package/corpus/core/src/client/tombstone/presence-bar.ts +17 -0
  47. package/corpus/core/src/client/tombstone/recent-edit-highlights.ts +17 -0
  48. package/corpus/core/src/client/tombstone/remote-selection-rings.ts +21 -0
  49. package/corpus/core/src/client/tombstone/rich-markdown-editor.ts +265 -0
  50. package/corpus/core/src/client/tombstone/ui-dialog.ts +49 -0
  51. package/corpus/core/src/client/tombstone/ui-dropdown-menu.ts +69 -0
  52. package/corpus/core/src/client/tombstone/ui-hover-card.ts +21 -0
  53. package/corpus/core/src/client/tombstone/ui-popover.ts +25 -0
  54. package/corpus/core/src/client/tombstone/ui-sheet.ts +49 -0
  55. package/corpus/core/src/client/tombstone/ui-tooltip.ts +29 -0
  56. package/corpus/core/src/client/tombstone/visual-style-controls.ts +61 -0
  57. package/corpus/core/src/client/uploads/index.ts +5 -0
  58. package/corpus/core/src/client/{rich-markdown-editor/uploadEditorImage.ts → uploads/upload-editor-image.ts} +11 -4
  59. package/corpus/core/src/package-lifecycle/tombstone.ts +16 -2
  60. package/corpus/core/src/package-lifecycle/upgrade-error.ts +23 -5
  61. package/corpus/core/src/testing.ts +1 -4
  62. package/corpus/core/src/vite/client.ts +62 -22
  63. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +2 -4
  64. package/corpus/templates/content/app/components/editor/extensions/registryBlocks.ts +1 -1
  65. package/corpus/templates/content/app/components/editor/registrySlashItems.ts +53 -52
  66. package/corpus/templates/plan/app/components/editor/PlanBlockNode.tsx +2 -2
  67. package/corpus/templates/plan/app/components/editor/planSlashCommands.ts +1 -1
  68. package/corpus/templates/plan/app/components/plan/DocumentArea.tsx +1 -1
  69. package/corpus/templates/plan/app/components/plan/PlanImageNode.tsx +1 -1
  70. package/corpus/templates/plan/app/components/plan/PlanMarkdownEditor.tsx +1 -1
  71. package/dist/catalog.json +1 -0
  72. package/dist/client/AgentAskPopover.js +1 -1
  73. package/dist/client/AgentAskPopover.js.map +1 -1
  74. package/dist/client/AgentPanel.js +1 -1
  75. package/dist/client/AgentPanel.js.map +1 -1
  76. package/dist/client/AssistantChat.d.ts +2 -2
  77. package/dist/client/AssistantChat.d.ts.map +1 -1
  78. package/dist/client/AssistantChat.js +5 -6
  79. package/dist/client/AssistantChat.js.map +1 -1
  80. package/dist/client/NewWorkspaceAppFlow.js +1 -1
  81. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  82. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  83. package/dist/client/agent-chat-adapter.js +1 -1
  84. package/dist/client/agent-chat-adapter.js.map +1 -1
  85. package/dist/client/blocks/RegistryBlockDataProvider.d.ts +7 -0
  86. package/dist/client/blocks/RegistryBlockDataProvider.d.ts.map +1 -0
  87. package/dist/client/blocks/RegistryBlockDataProvider.js +54 -0
  88. package/dist/client/blocks/RegistryBlockDataProvider.js.map +1 -0
  89. package/dist/client/blocks/index.d.ts +2 -0
  90. package/dist/client/blocks/index.d.ts.map +1 -1
  91. package/dist/client/blocks/index.js +1 -0
  92. package/dist/client/blocks/index.js.map +1 -1
  93. package/dist/client/chat/attachment-adapters.d.ts.map +1 -1
  94. package/dist/client/chat/attachment-adapters.js +1 -1
  95. package/dist/client/chat/attachment-adapters.js.map +1 -1
  96. package/dist/client/chat/index.d.ts +0 -1
  97. package/dist/client/chat/index.d.ts.map +1 -1
  98. package/dist/client/chat/index.js +0 -1
  99. package/dist/client/chat/index.js.map +1 -1
  100. package/dist/client/chat/message-components.d.ts.map +1 -1
  101. package/dist/client/chat/message-components.js +2 -2
  102. package/dist/client/chat/message-components.js.map +1 -1
  103. package/dist/client/code-agent-chat-adapter.d.ts.map +1 -1
  104. package/dist/client/code-agent-chat-adapter.js +1 -1
  105. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  106. package/dist/client/collab/index.d.ts +0 -5
  107. package/dist/client/collab/index.d.ts.map +1 -1
  108. package/dist/client/collab/index.js +0 -5
  109. package/dist/client/collab/index.js.map +1 -1
  110. package/dist/client/composer/index.d.ts +3 -11
  111. package/dist/client/composer/index.d.ts.map +1 -1
  112. package/dist/client/composer/index.js +3 -10
  113. package/dist/client/composer/index.js.map +1 -1
  114. package/dist/client/composer/runtime-adapters.d.ts +5 -0
  115. package/dist/client/composer/runtime-adapters.d.ts.map +1 -0
  116. package/dist/client/composer/runtime-adapters.js +85 -0
  117. package/dist/client/composer/runtime-adapters.js.map +1 -0
  118. package/dist/client/composer/use-mention-search.d.ts +1 -2
  119. package/dist/client/composer/use-mention-search.d.ts.map +1 -1
  120. package/dist/client/composer/use-mention-search.js +2 -69
  121. package/dist/client/composer/use-mention-search.js.map +1 -1
  122. package/dist/client/composer/wired-components.d.ts +10 -0
  123. package/dist/client/composer/wired-components.d.ts.map +1 -0
  124. package/dist/client/composer/wired-components.js +20 -0
  125. package/dist/client/composer/wired-components.js.map +1 -0
  126. package/dist/client/extensions/ExtensionViewer.js +1 -1
  127. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  128. package/dist/client/extensions/ExtensionsListPage.js +1 -1
  129. package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
  130. package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
  131. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  132. package/dist/client/index.d.ts +0 -10
  133. package/dist/client/index.d.ts.map +1 -1
  134. package/dist/client/index.js +0 -26
  135. package/dist/client/index.js.map +1 -1
  136. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  137. package/dist/client/resources/ResourceEditor.js +14 -532
  138. package/dist/client/resources/ResourceEditor.js.map +1 -1
  139. package/dist/client/resources/ResourcesPanel.js +1 -1
  140. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  141. package/dist/client/settings/AutomationsSection.js +1 -1
  142. package/dist/client/settings/AutomationsSection.js.map +1 -1
  143. package/dist/client/sharing/index.d.ts +0 -1
  144. package/dist/client/sharing/index.d.ts.map +1 -1
  145. package/dist/client/sharing/index.js +0 -1
  146. package/dist/client/sharing/index.js.map +1 -1
  147. package/dist/client/tombstone/agent-presence-chip.d.ts +6 -0
  148. package/dist/client/tombstone/agent-presence-chip.d.ts.map +1 -0
  149. package/dist/client/tombstone/agent-presence-chip.js +5 -0
  150. package/dist/client/tombstone/agent-presence-chip.js.map +1 -0
  151. package/dist/client/tombstone/editor.d.ts +128 -0
  152. package/dist/client/tombstone/editor.d.ts.map +1 -0
  153. package/dist/client/tombstone/editor.js +76 -0
  154. package/dist/client/tombstone/editor.js.map +1 -0
  155. package/dist/client/tombstone/live-cursor-overlay.d.ts +8 -0
  156. package/dist/client/tombstone/live-cursor-overlay.d.ts.map +1 -0
  157. package/dist/client/tombstone/live-cursor-overlay.js +5 -0
  158. package/dist/client/tombstone/live-cursor-overlay.js.map +1 -0
  159. package/dist/client/tombstone/presence-bar.d.ts +6 -0
  160. package/dist/client/tombstone/presence-bar.d.ts.map +1 -0
  161. package/dist/client/tombstone/presence-bar.js +5 -0
  162. package/dist/client/tombstone/presence-bar.js.map +1 -0
  163. package/dist/client/tombstone/recent-edit-highlights.d.ts +6 -0
  164. package/dist/client/tombstone/recent-edit-highlights.d.ts.map +1 -0
  165. package/dist/client/tombstone/recent-edit-highlights.js +5 -0
  166. package/dist/client/tombstone/recent-edit-highlights.js.map +1 -0
  167. package/dist/client/tombstone/remote-selection-rings.d.ts +8 -0
  168. package/dist/client/tombstone/remote-selection-rings.d.ts.map +1 -0
  169. package/dist/client/tombstone/remote-selection-rings.js +5 -0
  170. package/dist/client/tombstone/remote-selection-rings.js.map +1 -0
  171. package/dist/client/tombstone/rich-markdown-editor.d.ts +128 -0
  172. package/dist/client/tombstone/rich-markdown-editor.d.ts.map +1 -0
  173. package/dist/client/tombstone/rich-markdown-editor.js +76 -0
  174. package/dist/client/tombstone/rich-markdown-editor.js.map +1 -0
  175. package/dist/client/tombstone/ui-dialog.d.ts +22 -0
  176. package/dist/client/tombstone/ui-dialog.d.ts.map +1 -0
  177. package/dist/client/tombstone/ui-dialog.js +23 -0
  178. package/dist/client/tombstone/ui-dialog.js.map +1 -0
  179. package/dist/client/tombstone/ui-dropdown-menu.d.ts +32 -0
  180. package/dist/client/tombstone/ui-dropdown-menu.d.ts.map +1 -0
  181. package/dist/client/tombstone/ui-dropdown-menu.js +33 -0
  182. package/dist/client/tombstone/ui-dropdown-menu.js.map +1 -0
  183. package/dist/client/tombstone/ui-hover-card.d.ts +8 -0
  184. package/dist/client/tombstone/ui-hover-card.d.ts.map +1 -0
  185. package/dist/client/tombstone/ui-hover-card.js +9 -0
  186. package/dist/client/tombstone/ui-hover-card.js.map +1 -0
  187. package/dist/client/tombstone/ui-popover.d.ts +10 -0
  188. package/dist/client/tombstone/ui-popover.d.ts.map +1 -0
  189. package/dist/client/tombstone/ui-popover.js +11 -0
  190. package/dist/client/tombstone/ui-popover.js.map +1 -0
  191. package/dist/client/tombstone/ui-sheet.d.ts +22 -0
  192. package/dist/client/tombstone/ui-sheet.d.ts.map +1 -0
  193. package/dist/client/tombstone/ui-sheet.js +23 -0
  194. package/dist/client/tombstone/ui-sheet.js.map +1 -0
  195. package/dist/client/tombstone/ui-tooltip.d.ts +12 -0
  196. package/dist/client/tombstone/ui-tooltip.d.ts.map +1 -0
  197. package/dist/client/tombstone/ui-tooltip.js +13 -0
  198. package/dist/client/tombstone/ui-tooltip.js.map +1 -0
  199. package/dist/client/tombstone/visual-style-controls.d.ts +28 -0
  200. package/dist/client/tombstone/visual-style-controls.d.ts.map +1 -0
  201. package/dist/client/tombstone/visual-style-controls.js +23 -0
  202. package/dist/client/tombstone/visual-style-controls.js.map +1 -0
  203. package/dist/client/uploads/index.d.ts +1 -0
  204. package/dist/client/uploads/index.d.ts.map +1 -1
  205. package/dist/client/uploads/index.js +1 -0
  206. package/dist/client/uploads/index.js.map +1 -1
  207. package/dist/client/{rich-markdown-editor/uploadEditorImage.d.ts → uploads/upload-editor-image.d.ts} +8 -4
  208. package/dist/client/uploads/upload-editor-image.d.ts.map +1 -0
  209. package/dist/client/{rich-markdown-editor/uploadEditorImage.js → uploads/upload-editor-image.js} +2 -2
  210. package/dist/client/uploads/upload-editor-image.js.map +1 -0
  211. package/dist/collab/awareness.d.ts +2 -2
  212. package/dist/collab/awareness.d.ts.map +1 -1
  213. package/dist/notifications/routes.d.ts +3 -3
  214. package/dist/package-lifecycle/tombstone.d.ts.map +1 -1
  215. package/dist/package-lifecycle/tombstone.js +13 -3
  216. package/dist/package-lifecycle/tombstone.js.map +1 -1
  217. package/dist/package-lifecycle/upgrade-error.d.ts +2 -2
  218. package/dist/package-lifecycle/upgrade-error.d.ts.map +1 -1
  219. package/dist/package-lifecycle/upgrade-error.js +8 -5
  220. package/dist/package-lifecycle/upgrade-error.js.map +1 -1
  221. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  222. package/dist/server/transcribe-voice.d.ts +1 -1
  223. package/dist/testing.d.ts +1 -3
  224. package/dist/testing.d.ts.map +1 -1
  225. package/dist/testing.js +1 -3
  226. package/dist/testing.js.map +1 -1
  227. package/dist/vite/client.d.ts.map +1 -1
  228. package/dist/vite/client.js +26 -22
  229. package/dist/vite/client.js.map +1 -1
  230. package/docs/content/components.mdx +7 -0
  231. package/docs/content/locales/ar-SA/components.mdx +4 -2
  232. package/docs/content/locales/de-DE/components.mdx +4 -2
  233. package/docs/content/locales/es-ES/components.mdx +4 -2
  234. package/docs/content/locales/fr-FR/components.mdx +4 -2
  235. package/docs/content/locales/hi-IN/components.mdx +3 -2
  236. package/docs/content/locales/ja-JP/components.mdx +3 -2
  237. package/docs/content/locales/ko-KR/components.mdx +3 -2
  238. package/docs/content/locales/pt-BR/components.mdx +4 -2
  239. package/docs/content/locales/zh-CN/components.mdx +3 -2
  240. package/docs/content/locales/zh-TW/components.mdx +3 -2
  241. package/docs/content/toolkit-agent-ux.mdx +8 -3
  242. package/migration-manifest.json +133 -266
  243. package/package.json +31 -32
  244. package/corpus/core/src/client/composer/AgentComposerFrame.tsx +0 -59
  245. package/corpus/core/src/client/composer/ComposerPlusMenu.tsx +0 -988
  246. package/corpus/core/src/client/composer/MentionPopover.tsx +0 -412
  247. package/corpus/core/src/client/composer/PastedTextChip.tsx +0 -150
  248. package/corpus/core/src/client/composer/PromptComposer.tsx +0 -714
  249. package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +0 -860
  250. package/corpus/core/src/client/composer/TiptapComposer.tsx +0 -2928
  251. package/corpus/core/src/client/composer/VoiceButton.tsx +0 -262
  252. package/corpus/core/src/client/composer/asset-picker-url.ts +0 -80
  253. package/corpus/core/src/client/composer/attachment-accept.ts +0 -71
  254. package/corpus/core/src/client/composer/draft-key.ts +0 -7
  255. package/corpus/core/src/client/composer/extensions/FileReference.tsx +0 -55
  256. package/corpus/core/src/client/composer/extensions/MentionReference.tsx +0 -93
  257. package/corpus/core/src/client/composer/extensions/SkillReference.tsx +0 -56
  258. package/corpus/core/src/client/composer/pasted-text.ts +0 -160
  259. package/corpus/core/src/client/composer/prompt-attachments.ts +0 -70
  260. package/corpus/core/src/client/composer/realtime-voice-audio-level.ts +0 -64
  261. package/corpus/core/src/client/composer/realtime-voice-transcript.ts +0 -134
  262. package/corpus/core/src/client/composer/types.ts +0 -66
  263. package/corpus/core/src/client/composer/use-file-search.ts +0 -63
  264. package/corpus/core/src/client/composer/use-skills.ts +0 -44
  265. package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +0 -2095
  266. package/corpus/core/src/client/composer/useVoiceDictation.ts +0 -1155
  267. package/corpus/core/src/client/editor/index.ts +0 -1
  268. package/corpus/core/src/client/rich-markdown-editor/RegistryBlockNode.tsx +0 -799
  269. package/corpus/core/src/client/rich-markdown-editor/index.ts +0 -70
  270. package/corpus/core/src/client/rich-markdown-editor/registrySlashCommands.ts +0 -112
  271. package/dist/client/composer/AgentComposerFrame.d.ts +0 -19
  272. package/dist/client/composer/AgentComposerFrame.d.ts.map +0 -1
  273. package/dist/client/composer/AgentComposerFrame.js +0 -14
  274. package/dist/client/composer/AgentComposerFrame.js.map +0 -1
  275. package/dist/client/composer/ComposerPlusMenu.d.ts +0 -17
  276. package/dist/client/composer/ComposerPlusMenu.d.ts.map +0 -1
  277. package/dist/client/composer/ComposerPlusMenu.js +0 -501
  278. package/dist/client/composer/ComposerPlusMenu.js.map +0 -1
  279. package/dist/client/composer/MentionPopover.d.ts +0 -29
  280. package/dist/client/composer/MentionPopover.d.ts.map +0 -1
  281. package/dist/client/composer/MentionPopover.js +0 -180
  282. package/dist/client/composer/MentionPopover.js.map +0 -1
  283. package/dist/client/composer/PastedTextChip.d.ts +0 -9
  284. package/dist/client/composer/PastedTextChip.d.ts.map +0 -1
  285. package/dist/client/composer/PastedTextChip.js +0 -47
  286. package/dist/client/composer/PastedTextChip.js.map +0 -1
  287. package/dist/client/composer/PromptComposer.d.ts +0 -115
  288. package/dist/client/composer/PromptComposer.d.ts.map +0 -1
  289. package/dist/client/composer/PromptComposer.js +0 -299
  290. package/dist/client/composer/PromptComposer.js.map +0 -1
  291. package/dist/client/composer/RealtimeVoiceMode.d.ts +0 -104
  292. package/dist/client/composer/RealtimeVoiceMode.d.ts.map +0 -1
  293. package/dist/client/composer/RealtimeVoiceMode.js +0 -245
  294. package/dist/client/composer/RealtimeVoiceMode.js.map +0 -1
  295. package/dist/client/composer/TiptapComposer.d.ts +0 -222
  296. package/dist/client/composer/TiptapComposer.d.ts.map +0 -1
  297. package/dist/client/composer/TiptapComposer.js +0 -1834
  298. package/dist/client/composer/TiptapComposer.js.map +0 -1
  299. package/dist/client/composer/VoiceButton.d.ts +0 -23
  300. package/dist/client/composer/VoiceButton.d.ts.map +0 -1
  301. package/dist/client/composer/VoiceButton.js +0 -100
  302. package/dist/client/composer/VoiceButton.js.map +0 -1
  303. package/dist/client/composer/asset-picker-url.d.ts +0 -16
  304. package/dist/client/composer/asset-picker-url.d.ts.map +0 -1
  305. package/dist/client/composer/asset-picker-url.js +0 -64
  306. package/dist/client/composer/asset-picker-url.js.map +0 -1
  307. package/dist/client/composer/attachment-accept.d.ts +0 -9
  308. package/dist/client/composer/attachment-accept.d.ts.map +0 -1
  309. package/dist/client/composer/attachment-accept.js +0 -65
  310. package/dist/client/composer/attachment-accept.js.map +0 -1
  311. package/dist/client/composer/draft-key.d.ts +0 -2
  312. package/dist/client/composer/draft-key.d.ts.map +0 -1
  313. package/dist/client/composer/draft-key.js +0 -8
  314. package/dist/client/composer/draft-key.js.map +0 -1
  315. package/dist/client/composer/extensions/FileReference.d.ts +0 -3
  316. package/dist/client/composer/extensions/FileReference.d.ts.map +0 -1
  317. package/dist/client/composer/extensions/FileReference.js +0 -36
  318. package/dist/client/composer/extensions/FileReference.js.map +0 -1
  319. package/dist/client/composer/extensions/MentionReference.d.ts +0 -3
  320. package/dist/client/composer/extensions/MentionReference.d.ts.map +0 -1
  321. package/dist/client/composer/extensions/MentionReference.js +0 -66
  322. package/dist/client/composer/extensions/MentionReference.js.map +0 -1
  323. package/dist/client/composer/extensions/SkillReference.d.ts +0 -3
  324. package/dist/client/composer/extensions/SkillReference.d.ts.map +0 -1
  325. package/dist/client/composer/extensions/SkillReference.js +0 -40
  326. package/dist/client/composer/extensions/SkillReference.js.map +0 -1
  327. package/dist/client/composer/pasted-text.d.ts +0 -31
  328. package/dist/client/composer/pasted-text.d.ts.map +0 -1
  329. package/dist/client/composer/pasted-text.js +0 -130
  330. package/dist/client/composer/pasted-text.js.map +0 -1
  331. package/dist/client/composer/prompt-attachments.d.ts +0 -11
  332. package/dist/client/composer/prompt-attachments.d.ts.map +0 -1
  333. package/dist/client/composer/prompt-attachments.js +0 -45
  334. package/dist/client/composer/prompt-attachments.js.map +0 -1
  335. package/dist/client/composer/realtime-voice-audio-level.d.ts +0 -14
  336. package/dist/client/composer/realtime-voice-audio-level.d.ts.map +0 -1
  337. package/dist/client/composer/realtime-voice-audio-level.js +0 -47
  338. package/dist/client/composer/realtime-voice-audio-level.js.map +0 -1
  339. package/dist/client/composer/realtime-voice-transcript.d.ts +0 -26
  340. package/dist/client/composer/realtime-voice-transcript.d.ts.map +0 -1
  341. package/dist/client/composer/realtime-voice-transcript.js +0 -103
  342. package/dist/client/composer/realtime-voice-transcript.js.map +0 -1
  343. package/dist/client/composer/types.d.ts +0 -60
  344. package/dist/client/composer/types.d.ts.map +0 -1
  345. package/dist/client/composer/types.js +0 -2
  346. package/dist/client/composer/types.js.map +0 -1
  347. package/dist/client/composer/use-file-search.d.ts +0 -6
  348. package/dist/client/composer/use-file-search.d.ts.map +0 -1
  349. package/dist/client/composer/use-file-search.js +0 -52
  350. package/dist/client/composer/use-file-search.js.map +0 -1
  351. package/dist/client/composer/use-skills.d.ts +0 -7
  352. package/dist/client/composer/use-skills.d.ts.map +0 -1
  353. package/dist/client/composer/use-skills.js +0 -39
  354. package/dist/client/composer/use-skills.js.map +0 -1
  355. package/dist/client/composer/useRealtimeVoiceMode.d.ts +0 -172
  356. package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +0 -1
  357. package/dist/client/composer/useRealtimeVoiceMode.js +0 -1648
  358. package/dist/client/composer/useRealtimeVoiceMode.js.map +0 -1
  359. package/dist/client/composer/useVoiceDictation.d.ts +0 -57
  360. package/dist/client/composer/useVoiceDictation.d.ts.map +0 -1
  361. package/dist/client/composer/useVoiceDictation.js +0 -975
  362. package/dist/client/composer/useVoiceDictation.js.map +0 -1
  363. package/dist/client/editor/index.d.ts +0 -2
  364. package/dist/client/editor/index.d.ts.map +0 -1
  365. package/dist/client/editor/index.js +0 -2
  366. package/dist/client/editor/index.js.map +0 -1
  367. package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts +0 -130
  368. package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts.map +0 -1
  369. package/dist/client/rich-markdown-editor/RegistryBlockNode.js +0 -426
  370. package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +0 -1
  371. package/dist/client/rich-markdown-editor/index.d.ts +0 -5
  372. package/dist/client/rich-markdown-editor/index.d.ts.map +0 -1
  373. package/dist/client/rich-markdown-editor/index.js +0 -5
  374. package/dist/client/rich-markdown-editor/index.js.map +0 -1
  375. package/dist/client/rich-markdown-editor/registrySlashCommands.d.ts +0 -60
  376. package/dist/client/rich-markdown-editor/registrySlashCommands.d.ts.map +0 -1
  377. package/dist/client/rich-markdown-editor/registrySlashCommands.js +0 -51
  378. package/dist/client/rich-markdown-editor/registrySlashCommands.js.map +0 -1
  379. package/dist/client/rich-markdown-editor/uploadEditorImage.d.ts.map +0 -1
  380. package/dist/client/rich-markdown-editor/uploadEditorImage.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"pasted-text.js","sourceRoot":"","sources":["../../../src/client/composer/pasted-text.ts"],"names":[],"mappings":"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","sourcesContent":["// Page-sized pastes turn into a `Pasted text` attachment chip instead of being\n// dumped into the editor. Short paragraphs and everyday lists should stay\n// inline so the composer still feels like a normal text field.\nconst PASTED_TEXT_MIN_CHARS = 3200;\nconst PASTED_TEXT_MIN_LINES = 24;\n\nconst PASTED_TEXT_FILENAME_PREFIX = \"pasted-text-\";\n\n// A copied HTML document/source is recognizable from its markup: a closing tag\n// (`</div>`), a doctype, or a common structural/element tag. We key off the\n// *content* the user actually pasted, not the clipboard's `text/html` flavor —\n// editors (VS Code) and rich-text apps (Google Docs) populate `text/html` with\n// syntax-highlight spans or formatting wrappers even when the real content is\n// plain code/prose, so trusting `text/html` blindly would mangle those pastes.\nconst HTML_SOURCE_SIGNAL =\n /<!doctype\\s+html|<html[\\s>]|<\\/[a-z][a-z0-9-]*\\s*>|<(?:body|head|div|span|section|main|header|footer|nav|article|aside|ul|ol|li|table|thead|tbody|tr|td|th|h[1-6]|p|a|img|button|input|textarea|select|form|label|script|style|link|meta|svg|canvas|template)\\b/i;\n\n// A real HTML *document* announces itself with a doctype / html / head / body.\n// When one of these is present we keep the HTML classification even if an inline\n// <script> contains JS keywords — it's a genuine page.\nconst HTML_DOCUMENT_SIGNAL =\n /<!doctype\\s+html|<html[\\s>]|<head[\\s>]|<body[\\s>]/i;\n\n// JSX/TSX source contains the same `</div>`/`<span>` tags as an HTML document,\n// so the HTML tag signal alone misfiles a pasted React/TS component (even a bare\n// function component) as an `.html` artifact — the agent then mishandles it as a\n// hostable document instead of source. These markers appear in JS/TS/JSX source\n// but not in a plain HTML *fragment*: `className=` (JSX uses it; HTML uses\n// `class=`), ES module import/export, arrow functions, TS type/React annotations,\n// React hooks, and the basic JS declaration/return keywords that make up a\n// component body.\nconst CODE_SOURCE_SIGNAL =\n /\\bclassName=|\\bimport\\b|\\bexport\\b|=>|:\\s*React\\.|\\buse[A-Z]\\w*\\(|\\b(?:function|const|let|var|return|class|interface|type|enum)\\b/;\n\nfunction looksLikeHtml(value: string): boolean {\n if (!value || !HTML_SOURCE_SIGNAL.test(value)) return false;\n // A self-announcing HTML document stays HTML even if it embeds a <script>.\n if (HTML_DOCUMENT_SIGNAL.test(value)) return true;\n // Otherwise it's a bare fragment — if it carries JS/TS/JSX code signals,\n // treat it as source code, not an HTML attachment.\n if (CODE_SOURCE_SIGNAL.test(value)) return false;\n return true;\n}\n\n/** The clipboard flavors we care about for a paste. */\nexport interface ClipboardPaste {\n /** `text/plain` flavor — used for size heuristics and as the default body. */\n text: string;\n /** `text/html` flavor when the source provided one. */\n html?: string;\n}\n\n/** Read the relevant clipboard flavors from a paste/drop DataTransfer. */\nexport function readClipboardPaste(\n data: { getData(type: string): string } | null | undefined,\n): ClipboardPaste {\n const text = data?.getData(\"text/plain\") ?? \"\";\n const html = data?.getData(\"text/html\") ?? \"\";\n return { text, html: html.trim() ? html : undefined };\n}\n\ninterface SelectedPasteBody {\n body: string;\n ext: \"html\" | \"txt\";\n type: \"text/html\" | \"text/plain\";\n}\n\n// Decide what to actually store for a paste. Preserving HTML markup means a\n// pasted HTML document behaves exactly like uploading that .html file: the agent\n// recognizes it as a hostable artifact and reads it verbatim via\n// `contentFromAttachment` instead of retyping it inline (which cuts off\n// mid-stream on large files and triggers a continuation loop / \"spin\").\nfunction selectPasteBody(paste: ClipboardPaste): SelectedPasteBody {\n const plain = paste.text ?? \"\";\n const html = paste.html ?? \"\";\n\n // 1) The pasted text is itself HTML source (copied from an editor, a file, or\n // view-source). The plain text *is* the markup, so keep it as .html.\n if (plain.trim() && looksLikeHtml(plain)) {\n return { body: plain, ext: \"html\", type: \"text/html\" };\n }\n\n // 2) No usable plain text, but a real HTML flavor exists (some apps only\n // expose text/html). Fall back to the markup so nothing is dropped.\n if (!plain.trim() && looksLikeHtml(html)) {\n return { body: html, ext: \"html\", type: \"text/html\" };\n }\n\n // 3) Default: keep the clean plain text. Avoids the syntax-highlight /\n // rich-text noise that lives in text/html when the plain text is already\n // the real content (code from an editor, prose from a doc).\n return { body: plain, ext: \"txt\", type: \"text/plain\" };\n}\n\nexport function shouldConvertPasteToAttachment(text: string): boolean {\n if (!text) return false;\n if (text.length >= PASTED_TEXT_MIN_CHARS) return true;\n let lines = 1;\n for (let i = 0; i < text.length; i++) {\n if (text.charCodeAt(i) === 10) {\n lines++;\n if (lines >= PASTED_TEXT_MIN_LINES) return true;\n }\n }\n return false;\n}\n\n/**\n * Whether a clipboard paste is large enough to become a `Pasted text`\n * attachment chip. Mirrors `shouldConvertPasteToAttachment` but evaluates the\n * representation we'd actually store, so an HTML-only paste (empty text/plain)\n * still converts on the strength of its markup.\n */\nexport function shouldConvertClipboardToAttachment(\n paste: ClipboardPaste,\n): boolean {\n return shouldConvertPasteToAttachment(selectPasteBody(paste).body);\n}\n\nfunction pastedAttachmentName(ext: \"html\" | \"txt\"): string {\n return `${PASTED_TEXT_FILENAME_PREFIX}${Date.now()}-${Math.random()\n .toString(36)\n .slice(2, 8)}.${ext}`;\n}\n\n/**\n * Build the attachment File for a page-sized paste, preserving HTML markup when\n * the pasted content is an HTML document so it travels the same rail as an\n * uploaded .html file.\n */\nexport function createPastedAttachmentFile(paste: ClipboardPaste): File {\n const { body, ext, type } = selectPasteBody(paste);\n return new File([body], pastedAttachmentName(ext), { type });\n}\n\n/** Back-compat helper for callers that only have plain text. */\nexport function createPastedTextFile(text: string): File {\n return createPastedAttachmentFile({ text });\n}\n\nexport function isPastedTextAttachmentName(name: string | undefined): boolean {\n return !!name && name.startsWith(PASTED_TEXT_FILENAME_PREFIX);\n}\n\n// Strips the `<attachment name=...>\\n` / `\\n</attachment>` envelope that\n// SimpleTextAttachmentAdapter wraps the file body in when sending. Returns the\n// raw body for previewing.\nexport function unwrapAttachmentEnvelope(text: string): string {\n const match = text.match(/^<attachment\\b[^>]*>\\n([\\s\\S]*)\\n<\\/attachment>$/);\n return match ? match[1] : text;\n}\n\nexport function countLines(text: string): number {\n if (!text) return 0;\n let lines = 1;\n for (let i = 0; i < text.length; i++) {\n if (text.charCodeAt(i) === 10) lines++;\n }\n return lines;\n}\n"]}
@@ -1,11 +0,0 @@
1
- import { formatPromptWithAttachments, escapePromptAttachmentAttribute, type AgentPromptAttachment } from "../../code-agents/prompt-attachments.js";
2
- export { formatPromptWithAttachments, escapePromptAttachmentAttribute, type AgentPromptAttachment, };
3
- export declare const AGENT_PROMPT_MAX_INLINE_TEXT_CHARS = 60000;
4
- export declare const AGENT_PROMPT_MAX_INLINE_IMAGE_BYTES: number;
5
- export interface ReadAgentPromptAttachmentOptions {
6
- maxInlineTextChars?: number;
7
- maxInlineImageBytes?: number;
8
- }
9
- export declare function readAgentPromptAttachment(file: File, options?: ReadAgentPromptAttachmentOptions): Promise<AgentPromptAttachment>;
10
- export declare function isInlineableAgentPromptFile(file: File): boolean;
11
- //# sourceMappingURL=prompt-attachments.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-attachments.d.ts","sourceRoot":"","sources":["../../../src/client/composer/prompt-attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,KAAK,qBAAqB,EAC3B,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,KAAK,qBAAqB,GAC3B,CAAC;AAEF,eAAO,MAAM,kCAAkC,QAAS,CAAC;AACzD,eAAO,MAAM,mCAAmC,QAAkB,CAAC;AAEnE,MAAM,WAAW,gCAAgC;IAC/C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,qBAAqB,CAAC,CA6BhC;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAK/D"}
@@ -1,45 +0,0 @@
1
- import { formatPromptWithAttachments, escapePromptAttachmentAttribute, } from "../../code-agents/prompt-attachments.js";
2
- export { formatPromptWithAttachments, escapePromptAttachmentAttribute, };
3
- export const AGENT_PROMPT_MAX_INLINE_TEXT_CHARS = 60_000;
4
- export const AGENT_PROMPT_MAX_INLINE_IMAGE_BYTES = 2 * 1024 * 1024;
5
- export async function readAgentPromptAttachment(file, options = {}) {
6
- const maxInlineTextChars = options.maxInlineTextChars ?? AGENT_PROMPT_MAX_INLINE_TEXT_CHARS;
7
- const maxInlineImageBytes = options.maxInlineImageBytes ?? AGENT_PROMPT_MAX_INLINE_IMAGE_BYTES;
8
- const attachment = {
9
- name: file.name,
10
- type: file.type || undefined,
11
- size: file.size,
12
- };
13
- if (isInlineableAgentPromptFile(file) && file.size <= maxInlineTextChars) {
14
- try {
15
- attachment.text = await file.text();
16
- }
17
- catch {
18
- // Keep the filename-only attachment if the browser cannot read it.
19
- }
20
- }
21
- else if (file.type.startsWith("image/") &&
22
- file.size <= maxInlineImageBytes) {
23
- try {
24
- attachment.dataUrl = await readFileAsDataUrl(file);
25
- }
26
- catch {
27
- // Keep the filename-only attachment if the browser cannot read it.
28
- }
29
- }
30
- return attachment;
31
- }
32
- export function isInlineableAgentPromptFile(file) {
33
- if (file.type.startsWith("text/"))
34
- return true;
35
- return /\.(cjs|css|csv|html|js|json|jsx|md|mdx|mjs|sql|tsx?|txt|xml|yaml|yml)$/i.test(file.name);
36
- }
37
- function readFileAsDataUrl(file) {
38
- return new Promise((resolve, reject) => {
39
- const reader = new FileReader();
40
- reader.onload = () => resolve(String(reader.result ?? ""));
41
- reader.onerror = () => reject(reader.error ?? new Error("Could not read file"));
42
- reader.readAsDataURL(file);
43
- });
44
- }
45
- //# sourceMappingURL=prompt-attachments.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-attachments.js","sourceRoot":"","sources":["../../../src/client/composer/prompt-attachments.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAEhC,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAEhC,CAAC;AAEF,MAAM,CAAC,MAAM,kCAAkC,GAAG,MAAM,CAAC;AACzD,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAOnE,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAAU,EACV,OAAO,GAAqC,EAAE;IAE9C,MAAM,kBAAkB,GACtB,OAAO,CAAC,kBAAkB,IAAI,kCAAkC,CAAC;IACnE,MAAM,mBAAmB,GACvB,OAAO,CAAC,mBAAmB,IAAI,mCAAmC,CAAC;IACrE,MAAM,UAAU,GAA0B;QACxC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;KAChB,CAAC;IAEF,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACzE,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;SAAM,IACL,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,mBAAmB,EAChC,CAAC;QACD,IAAI,CAAC;YACH,UAAU,CAAC,OAAO,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAU;IACpD,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,yEAAyE,CAAC,IAAI,CACnF,IAAI,CAAC,IAAI,CACV,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAU;IACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CACpB,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import {\n formatPromptWithAttachments,\n escapePromptAttachmentAttribute,\n type AgentPromptAttachment,\n} from \"../../code-agents/prompt-attachments.js\";\n\nexport {\n formatPromptWithAttachments,\n escapePromptAttachmentAttribute,\n type AgentPromptAttachment,\n};\n\nexport const AGENT_PROMPT_MAX_INLINE_TEXT_CHARS = 60_000;\nexport const AGENT_PROMPT_MAX_INLINE_IMAGE_BYTES = 2 * 1024 * 1024;\n\nexport interface ReadAgentPromptAttachmentOptions {\n maxInlineTextChars?: number;\n maxInlineImageBytes?: number;\n}\n\nexport async function readAgentPromptAttachment(\n file: File,\n options: ReadAgentPromptAttachmentOptions = {},\n): Promise<AgentPromptAttachment> {\n const maxInlineTextChars =\n options.maxInlineTextChars ?? AGENT_PROMPT_MAX_INLINE_TEXT_CHARS;\n const maxInlineImageBytes =\n options.maxInlineImageBytes ?? AGENT_PROMPT_MAX_INLINE_IMAGE_BYTES;\n const attachment: AgentPromptAttachment = {\n name: file.name,\n type: file.type || undefined,\n size: file.size,\n };\n\n if (isInlineableAgentPromptFile(file) && file.size <= maxInlineTextChars) {\n try {\n attachment.text = await file.text();\n } catch {\n // Keep the filename-only attachment if the browser cannot read it.\n }\n } else if (\n file.type.startsWith(\"image/\") &&\n file.size <= maxInlineImageBytes\n ) {\n try {\n attachment.dataUrl = await readFileAsDataUrl(file);\n } catch {\n // Keep the filename-only attachment if the browser cannot read it.\n }\n }\n\n return attachment;\n}\n\nexport function isInlineableAgentPromptFile(file: File): boolean {\n if (file.type.startsWith(\"text/\")) return true;\n return /\\.(cjs|css|csv|html|js|json|jsx|md|mdx|mjs|sql|tsx?|txt|xml|yaml|yml)$/i.test(\n file.name,\n );\n}\n\nfunction readFileAsDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(String(reader.result ?? \"\"));\n reader.onerror = () =>\n reject(reader.error ?? new Error(\"Could not read file\"));\n reader.readAsDataURL(file);\n });\n}\n"]}
@@ -1,14 +0,0 @@
1
- export interface RealtimeVoiceAudioLevels {
2
- input: number;
3
- output: number;
4
- }
5
- export interface RealtimeVoiceAudioLevelStore {
6
- getSnapshot: () => RealtimeVoiceAudioLevels;
7
- subscribe: (listener: () => void) => () => void;
8
- set: (levels: RealtimeVoiceAudioLevels) => void;
9
- reset: () => void;
10
- }
11
- export declare function normalizeRealtimeVoiceRms(samples: Uint8Array): number;
12
- export declare function smoothRealtimeVoiceLevel(previous: number, next: number): number;
13
- export declare function createRealtimeVoiceAudioLevelStore(): RealtimeVoiceAudioLevelStore;
14
- //# sourceMappingURL=realtime-voice-audio-level.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime-voice-audio-level.d.ts","sourceRoot":"","sources":["../../../src/client/composer/realtime-voice-audio-level.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,wBAAwB,CAAC;IAC5C,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,GAAG,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AASD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CASrE;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,CAIR;AAED,wBAAgB,kCAAkC,IAAI,4BAA4B,CAwBjF"}
@@ -1,47 +0,0 @@
1
- const SILENT_LEVELS = { input: 0, output: 0 };
2
- function clampLevel(value) {
3
- if (!Number.isFinite(value))
4
- return 0;
5
- return Math.max(0, Math.min(1, value));
6
- }
7
- export function normalizeRealtimeVoiceRms(samples) {
8
- if (samples.length === 0)
9
- return 0;
10
- let sumSquares = 0;
11
- for (const sample of samples) {
12
- const normalized = (sample - 128) / 128;
13
- sumSquares += normalized * normalized;
14
- }
15
- const rms = Math.sqrt(sumSquares / samples.length);
16
- return clampLevel(Math.max(0, rms - 0.012) * 3.2);
17
- }
18
- export function smoothRealtimeVoiceLevel(previous, next) {
19
- const target = clampLevel(next);
20
- const factor = target > previous ? 0.55 : 0.2;
21
- return clampLevel(previous + (target - previous) * factor);
22
- }
23
- export function createRealtimeVoiceAudioLevelStore() {
24
- let snapshot = SILENT_LEVELS;
25
- const listeners = new Set();
26
- const set = (levels) => {
27
- const next = {
28
- input: clampLevel(levels.input),
29
- output: clampLevel(levels.output),
30
- };
31
- if (next.input === snapshot.input && next.output === snapshot.output)
32
- return;
33
- snapshot = next;
34
- for (const listener of listeners)
35
- listener();
36
- };
37
- return {
38
- getSnapshot: () => snapshot,
39
- subscribe(listener) {
40
- listeners.add(listener);
41
- return () => listeners.delete(listener);
42
- },
43
- set,
44
- reset: () => set(SILENT_LEVELS),
45
- };
46
- }
47
- //# sourceMappingURL=realtime-voice-audio-level.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime-voice-audio-level.js","sourceRoot":"","sources":["../../../src/client/composer/realtime-voice-audio-level.ts"],"names":[],"mappings":"AAYA,MAAM,aAAa,GAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAExE,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAmB;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACnC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACxC,UAAU,IAAI,UAAU,GAAG,UAAU,CAAC;IACxC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,IAAY;IAEZ,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9C,OAAO,UAAU,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,kCAAkC;IAChD,IAAI,QAAQ,GAAG,aAAa,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAExC,MAAM,GAAG,GAAG,CAAC,MAAgC,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;SAClC,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YAClE,OAAO;QACT,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,QAAQ,IAAI,SAAS;YAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,QAAQ;QAC3B,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,GAAG;QACH,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;KAChC,CAAC;AACJ,CAAC","sourcesContent":["export interface RealtimeVoiceAudioLevels {\n input: number;\n output: number;\n}\n\nexport interface RealtimeVoiceAudioLevelStore {\n getSnapshot: () => RealtimeVoiceAudioLevels;\n subscribe: (listener: () => void) => () => void;\n set: (levels: RealtimeVoiceAudioLevels) => void;\n reset: () => void;\n}\n\nconst SILENT_LEVELS: RealtimeVoiceAudioLevels = { input: 0, output: 0 };\n\nfunction clampLevel(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.max(0, Math.min(1, value));\n}\n\nexport function normalizeRealtimeVoiceRms(samples: Uint8Array): number {\n if (samples.length === 0) return 0;\n let sumSquares = 0;\n for (const sample of samples) {\n const normalized = (sample - 128) / 128;\n sumSquares += normalized * normalized;\n }\n const rms = Math.sqrt(sumSquares / samples.length);\n return clampLevel(Math.max(0, rms - 0.012) * 3.2);\n}\n\nexport function smoothRealtimeVoiceLevel(\n previous: number,\n next: number,\n): number {\n const target = clampLevel(next);\n const factor = target > previous ? 0.55 : 0.2;\n return clampLevel(previous + (target - previous) * factor);\n}\n\nexport function createRealtimeVoiceAudioLevelStore(): RealtimeVoiceAudioLevelStore {\n let snapshot = SILENT_LEVELS;\n const listeners = new Set<() => void>();\n\n const set = (levels: RealtimeVoiceAudioLevels) => {\n const next = {\n input: clampLevel(levels.input),\n output: clampLevel(levels.output),\n };\n if (next.input === snapshot.input && next.output === snapshot.output)\n return;\n snapshot = next;\n for (const listener of listeners) listener();\n };\n\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n set,\n reset: () => set(SILENT_LEVELS),\n };\n}\n"]}
@@ -1,26 +0,0 @@
1
- export type RealtimeVoiceTranscriptRole = "user" | "assistant";
2
- export interface RealtimeVoiceTranscriptMessage {
3
- id: string;
4
- threadId: string;
5
- role: RealtimeVoiceTranscriptRole;
6
- text: string;
7
- createdAt: string;
8
- }
9
- export interface RealtimeVoiceTranscriptSink {
10
- threadId: string;
11
- active: boolean;
12
- append: (message: RealtimeVoiceTranscriptMessage) => boolean;
13
- }
14
- export interface RealtimeVoiceTranscriptRegistry {
15
- activeThreadId: () => string | undefined;
16
- publish: (message: RealtimeVoiceTranscriptMessage) => void;
17
- register: (sink: RealtimeVoiceTranscriptSink) => () => void;
18
- pendingCount: () => number;
19
- }
20
- export declare function appendRealtimeVoiceTranscriptToRepository(value: unknown, transcript: RealtimeVoiceTranscriptMessage): {
21
- appended: boolean;
22
- repository: Record<string, unknown>;
23
- };
24
- export declare function createRealtimeVoiceTranscriptRegistry(): RealtimeVoiceTranscriptRegistry;
25
- export declare const realtimeVoiceTranscriptRegistry: RealtimeVoiceTranscriptRegistry;
26
- //# sourceMappingURL=realtime-voice-transcript.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime-voice-transcript.d.ts","sourceRoot":"","sources":["../../../src/client/composer/realtime-voice-transcript.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,WAAW,CAAC;AAE/D,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,2BAA2B,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,OAAO,CAAC;CAC9D;AAED,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACzC,OAAO,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAC3D,QAAQ,EAAE,CAAC,IAAI,EAAE,2BAA2B,KAAK,MAAM,IAAI,CAAC;IAC5D,YAAY,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,8BAA8B,GACzC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CA6C5D;AAED,wBAAgB,qCAAqC,IAAI,+BAA+B,CAyDvF;AAED,eAAO,MAAM,+BAA+B,iCACH,CAAC"}
@@ -1,103 +0,0 @@
1
- export function appendRealtimeVoiceTranscriptToRepository(value, transcript) {
2
- const repository = value && typeof value === "object" && !Array.isArray(value)
3
- ? value
4
- : {};
5
- const messages = Array.isArray(repository.messages)
6
- ? [...repository.messages]
7
- : [];
8
- const duplicate = messages.some((entry) => {
9
- if (!entry || typeof entry !== "object")
10
- return false;
11
- const record = entry;
12
- const message = record.message && typeof record.message === "object"
13
- ? record.message
14
- : record;
15
- return message.id === transcript.id;
16
- });
17
- if (duplicate)
18
- return { appended: false, repository };
19
- const parentId = typeof repository.headId === "string" ? repository.headId : null;
20
- const createdAt = new Date(transcript.createdAt);
21
- const message = {
22
- id: transcript.id,
23
- role: transcript.role,
24
- content: [{ type: "text", text: transcript.text }],
25
- createdAt: Number.isNaN(createdAt.getTime()) ? new Date() : createdAt,
26
- metadata: {
27
- custom: {
28
- source: "realtime-voice",
29
- },
30
- },
31
- ...(transcript.role === "assistant"
32
- ? { status: { type: "complete", reason: "stop" } }
33
- : {}),
34
- };
35
- return {
36
- appended: true,
37
- repository: {
38
- ...repository,
39
- messages: [...messages, { message, parentId }],
40
- headId: transcript.id,
41
- },
42
- };
43
- }
44
- export function createRealtimeVoiceTranscriptRegistry() {
45
- const sinks = new Map();
46
- const pending = new Map();
47
- const delivered = new Set();
48
- let order = 0;
49
- const flush = () => {
50
- for (const [id, message] of pending) {
51
- let consumed = false;
52
- for (const sink of sinks.values()) {
53
- if (sink.threadId !== message.threadId)
54
- continue;
55
- try {
56
- consumed = sink.append(message) || consumed;
57
- }
58
- catch {
59
- // Keep the completed transcript queued until the chat can import it.
60
- }
61
- }
62
- if (!consumed)
63
- continue;
64
- pending.delete(id);
65
- delivered.add(id);
66
- if (delivered.size > 1_000) {
67
- const oldest = delivered.values().next().value;
68
- if (typeof oldest === "string")
69
- delivered.delete(oldest);
70
- }
71
- }
72
- };
73
- return {
74
- activeThreadId() {
75
- let active;
76
- for (const sink of sinks.values()) {
77
- if (!sink.active || (active && sink.order <= active.order))
78
- continue;
79
- active = sink;
80
- }
81
- return active?.threadId;
82
- },
83
- publish(message) {
84
- const id = message.id.trim();
85
- const threadId = message.threadId.trim();
86
- const text = message.text.trim();
87
- if (!id || !threadId || !text || delivered.has(id) || pending.has(id)) {
88
- return;
89
- }
90
- pending.set(id, { ...message, id, threadId, text });
91
- flush();
92
- },
93
- register(sink) {
94
- const token = Symbol("realtime-voice-transcript-sink");
95
- sinks.set(token, { ...sink, order: ++order });
96
- flush();
97
- return () => sinks.delete(token);
98
- },
99
- pendingCount: () => pending.size,
100
- };
101
- }
102
- export const realtimeVoiceTranscriptRegistry = createRealtimeVoiceTranscriptRegistry();
103
- //# sourceMappingURL=realtime-voice-transcript.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime-voice-transcript.js","sourceRoot":"","sources":["../../../src/client/composer/realtime-voice-transcript.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,yCAAyC,CACvD,KAAc,EACd,UAA0C;IAE1C,MAAM,UAAU,GACd,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzD,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QACjD,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;QAC1B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClD,CAAC,CAAE,MAAM,CAAC,OAAmC;YAC7C,CAAC,CAAC,MAAM,CAAC;QACb,OAAO,OAAO,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,IAAI,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAEtD,MAAM,QAAQ,GACZ,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG;QACd,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;QAClD,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;QACrE,QAAQ,EAAE;YACR,MAAM,EAAE;gBACN,MAAM,EAAE,gBAAgB;aACzB;SACF;QACD,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,WAAW;YACjC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAClD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE;YACV,GAAG,UAAU;YACb,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YAC9C,MAAM,EAAE,UAAU,CAAC,EAAE;SACtB;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qCAAqC;IACnD,MAAM,KAAK,GAAG,IAAI,GAAG,EAGlB,CAAC;IACJ,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0C,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;YACpC,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;oBAAE,SAAS;gBACjD,IAAI,CAAC;oBACH,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC;gBAC9C,CAAC;gBAAC,MAAM,CAAC;oBACP,qEAAqE;gBACvE,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnB,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,IAAI,SAAS,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ;oBAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,cAAc;YACZ,IAAI,MAAqE,CAAC;YAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACrE,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;YACD,OAAO,MAAM,EAAE,QAAQ,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,OAAO;YACb,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtE,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,KAAK,EAAE,CAAC;QACV,CAAC;QACD,QAAQ,CAAC,IAAI;YACX,MAAM,KAAK,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACvD,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9C,KAAK,EAAE,CAAC;YACR,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAC1C,qCAAqC,EAAE,CAAC","sourcesContent":["export type RealtimeVoiceTranscriptRole = \"user\" | \"assistant\";\n\nexport interface RealtimeVoiceTranscriptMessage {\n id: string;\n threadId: string;\n role: RealtimeVoiceTranscriptRole;\n text: string;\n createdAt: string;\n}\n\nexport interface RealtimeVoiceTranscriptSink {\n threadId: string;\n active: boolean;\n append: (message: RealtimeVoiceTranscriptMessage) => boolean;\n}\n\nexport interface RealtimeVoiceTranscriptRegistry {\n activeThreadId: () => string | undefined;\n publish: (message: RealtimeVoiceTranscriptMessage) => void;\n register: (sink: RealtimeVoiceTranscriptSink) => () => void;\n pendingCount: () => number;\n}\n\nexport function appendRealtimeVoiceTranscriptToRepository(\n value: unknown,\n transcript: RealtimeVoiceTranscriptMessage,\n): { appended: boolean; repository: Record<string, unknown> } {\n const repository =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n const messages = Array.isArray(repository.messages)\n ? [...repository.messages]\n : [];\n const duplicate = messages.some((entry) => {\n if (!entry || typeof entry !== \"object\") return false;\n const record = entry as Record<string, unknown>;\n const message =\n record.message && typeof record.message === \"object\"\n ? (record.message as Record<string, unknown>)\n : record;\n return message.id === transcript.id;\n });\n if (duplicate) return { appended: false, repository };\n\n const parentId =\n typeof repository.headId === \"string\" ? repository.headId : null;\n const createdAt = new Date(transcript.createdAt);\n const message = {\n id: transcript.id,\n role: transcript.role,\n content: [{ type: \"text\", text: transcript.text }],\n createdAt: Number.isNaN(createdAt.getTime()) ? new Date() : createdAt,\n metadata: {\n custom: {\n source: \"realtime-voice\",\n },\n },\n ...(transcript.role === \"assistant\"\n ? { status: { type: \"complete\", reason: \"stop\" } }\n : {}),\n };\n\n return {\n appended: true,\n repository: {\n ...repository,\n messages: [...messages, { message, parentId }],\n headId: transcript.id,\n },\n };\n}\n\nexport function createRealtimeVoiceTranscriptRegistry(): RealtimeVoiceTranscriptRegistry {\n const sinks = new Map<\n symbol,\n RealtimeVoiceTranscriptSink & { order: number }\n >();\n const pending = new Map<string, RealtimeVoiceTranscriptMessage>();\n const delivered = new Set<string>();\n let order = 0;\n\n const flush = () => {\n for (const [id, message] of pending) {\n let consumed = false;\n for (const sink of sinks.values()) {\n if (sink.threadId !== message.threadId) continue;\n try {\n consumed = sink.append(message) || consumed;\n } catch {\n // Keep the completed transcript queued until the chat can import it.\n }\n }\n if (!consumed) continue;\n pending.delete(id);\n delivered.add(id);\n if (delivered.size > 1_000) {\n const oldest = delivered.values().next().value;\n if (typeof oldest === \"string\") delivered.delete(oldest);\n }\n }\n };\n\n return {\n activeThreadId() {\n let active: (RealtimeVoiceTranscriptSink & { order: number }) | undefined;\n for (const sink of sinks.values()) {\n if (!sink.active || (active && sink.order <= active.order)) continue;\n active = sink;\n }\n return active?.threadId;\n },\n publish(message) {\n const id = message.id.trim();\n const threadId = message.threadId.trim();\n const text = message.text.trim();\n if (!id || !threadId || !text || delivered.has(id) || pending.has(id)) {\n return;\n }\n pending.set(id, { ...message, id, threadId, text });\n flush();\n },\n register(sink) {\n const token = Symbol(\"realtime-voice-transcript-sink\");\n sinks.set(token, { ...sink, order: ++order });\n flush();\n return () => sinks.delete(token);\n },\n pendingCount: () => pending.size,\n };\n}\n\nexport const realtimeVoiceTranscriptRegistry =\n createRealtimeVoiceTranscriptRegistry();\n"]}
@@ -1,60 +0,0 @@
1
- export interface FileResult {
2
- path: string;
3
- name: string;
4
- source: "codebase" | "resource";
5
- type: "file" | "folder";
6
- }
7
- export interface SkillResult {
8
- name: string;
9
- description: string;
10
- path: string;
11
- source: "codebase" | "resource";
12
- }
13
- export interface MentionItem {
14
- id: string;
15
- label: string;
16
- description?: string;
17
- icon?: string;
18
- source: string;
19
- refType: string;
20
- refPath?: string;
21
- refId?: string;
22
- section?: string;
23
- slotKey?: string;
24
- slotLabel?: string;
25
- metadata?: Record<string, unknown>;
26
- clearsSlots?: string[];
27
- relatedReferences?: MentionReferenceInsert[];
28
- }
29
- export interface Reference {
30
- type: "file" | "skill" | "mention" | "agent" | "custom-agent";
31
- path: string;
32
- name: string;
33
- source: string;
34
- refType?: string;
35
- refId?: string;
36
- slotKey?: string;
37
- slotLabel?: string;
38
- metadata?: Record<string, unknown>;
39
- }
40
- export interface MentionReferenceInsert {
41
- label: string;
42
- icon?: string;
43
- source?: string;
44
- refType: string;
45
- refId?: string | null;
46
- refPath?: string | null;
47
- slotKey?: string;
48
- slotLabel?: string;
49
- metadata?: Record<string, unknown>;
50
- clearsSlots?: string[];
51
- relatedReferences?: MentionReferenceInsert[];
52
- }
53
- export interface SlashCommand {
54
- name: string;
55
- description: string;
56
- icon?: string;
57
- }
58
- export type ComposerMode = "skill" | "job" | "automation" | "extension";
59
- export type AgentComposerLayoutVariant = "default" | "compact" | "hero";
60
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/composer/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,cAAc,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC;AAExE,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/client/composer/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface FileResult {\n path: string;\n name: string;\n source: \"codebase\" | \"resource\";\n type: \"file\" | \"folder\";\n}\n\nexport interface SkillResult {\n name: string;\n description: string;\n path: string;\n source: \"codebase\" | \"resource\";\n}\n\nexport interface MentionItem {\n id: string;\n label: string;\n description?: string;\n icon?: string;\n source: string;\n refType: string;\n refPath?: string;\n refId?: string;\n section?: string;\n slotKey?: string;\n slotLabel?: string;\n metadata?: Record<string, unknown>;\n clearsSlots?: string[];\n relatedReferences?: MentionReferenceInsert[];\n}\n\nexport interface Reference {\n type: \"file\" | \"skill\" | \"mention\" | \"agent\" | \"custom-agent\";\n path: string;\n name: string;\n source: string;\n refType?: string;\n refId?: string;\n slotKey?: string;\n slotLabel?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface MentionReferenceInsert {\n label: string;\n icon?: string;\n source?: string;\n refType: string;\n refId?: string | null;\n refPath?: string | null;\n slotKey?: string;\n slotLabel?: string;\n metadata?: Record<string, unknown>;\n clearsSlots?: string[];\n relatedReferences?: MentionReferenceInsert[];\n}\n\nexport interface SlashCommand {\n name: string;\n description: string;\n icon?: string;\n}\n\nexport type ComposerMode = \"skill\" | \"job\" | \"automation\" | \"extension\";\n\nexport type AgentComposerLayoutVariant = \"default\" | \"compact\" | \"hero\";\n"]}
@@ -1,6 +0,0 @@
1
- import type { FileResult } from "./types.js";
2
- export declare function useFileSearch(query: string, enabled: boolean): {
3
- files: FileResult[];
4
- isLoading: boolean;
5
- };
6
- //# sourceMappingURL=use-file-search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-file-search.d.ts","sourceRoot":"","sources":["../../../src/client/composer/use-file-search.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;;;EAyD5D"}
@@ -1,52 +0,0 @@
1
- import { useState, useEffect, useRef } from "react";
2
- import { agentNativePath } from "../api-path.js";
3
- export function useFileSearch(query, enabled) {
4
- const [files, setFiles] = useState([]);
5
- const [isLoading, setIsLoading] = useState(false);
6
- const requestIdRef = useRef(0);
7
- const abortRef = useRef(null);
8
- useEffect(() => {
9
- if (!enabled) {
10
- setFiles([]);
11
- setIsLoading(false);
12
- return;
13
- }
14
- setIsLoading(true);
15
- const id = ++requestIdRef.current;
16
- // Abort any in-flight request so a superseded/unmounted query stops fetching
17
- // (mirrors use-mention-search). The requestId guard still protects state.
18
- abortRef.current?.abort();
19
- const abort = new AbortController();
20
- abortRef.current = abort;
21
- const timer = setTimeout(async () => {
22
- try {
23
- const res = await fetch(agentNativePath(`/_agent-native/agent-chat/files?q=${encodeURIComponent(query)}`), { signal: abort.signal });
24
- if (!res.ok)
25
- throw new Error();
26
- const data = await res.json();
27
- // Only update if this is still the latest request
28
- if (id === requestIdRef.current) {
29
- setFiles(data.files || []);
30
- }
31
- }
32
- catch (err) {
33
- if (err?.name === "AbortError")
34
- return;
35
- if (id === requestIdRef.current) {
36
- setFiles([]);
37
- }
38
- }
39
- finally {
40
- if (id === requestIdRef.current) {
41
- setIsLoading(false);
42
- }
43
- }
44
- }, query.length === 0 ? 0 : 200);
45
- return () => {
46
- clearTimeout(timer);
47
- abort.abort();
48
- };
49
- }, [query, enabled]);
50
- return { files, isLoading };
51
- }
52
- //# sourceMappingURL=use-file-search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-file-search.js","sourceRoot":"","sources":["../../../src/client/composer/use-file-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,OAAgB;IAC3D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,CAAC,EAAE,CAAC,CAAC;YACb,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC;QAClC,6EAA6E;QAC7E,0EAA0E;QAC1E,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QAEzB,MAAM,KAAK,GAAG,UAAU,CACtB,KAAK,IAAI,EAAE;YACT,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,eAAe,CACb,qCAAqC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CACjE,EACD,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CACzB,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,EAAE;oBAAE,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9B,kDAAkD;gBAClD,IAAI,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;oBAChC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAK,GAAa,EAAE,IAAI,KAAK,YAAY;oBAAE,OAAO;gBAClD,IAAI,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;oBAChC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;oBAChC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,EACD,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAC7B,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAErB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["import { useState, useEffect, useRef } from \"react\";\n\nimport { agentNativePath } from \"../api-path.js\";\nimport type { FileResult } from \"./types.js\";\n\nexport function useFileSearch(query: string, enabled: boolean) {\n const [files, setFiles] = useState<FileResult[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const requestIdRef = useRef(0);\n const abortRef = useRef<AbortController | null>(null);\n\n useEffect(() => {\n if (!enabled) {\n setFiles([]);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n const id = ++requestIdRef.current;\n // Abort any in-flight request so a superseded/unmounted query stops fetching\n // (mirrors use-mention-search). The requestId guard still protects state.\n abortRef.current?.abort();\n const abort = new AbortController();\n abortRef.current = abort;\n\n const timer = setTimeout(\n async () => {\n try {\n const res = await fetch(\n agentNativePath(\n `/_agent-native/agent-chat/files?q=${encodeURIComponent(query)}`,\n ),\n { signal: abort.signal },\n );\n if (!res.ok) throw new Error();\n const data = await res.json();\n // Only update if this is still the latest request\n if (id === requestIdRef.current) {\n setFiles(data.files || []);\n }\n } catch (err) {\n if ((err as Error)?.name === \"AbortError\") return;\n if (id === requestIdRef.current) {\n setFiles([]);\n }\n } finally {\n if (id === requestIdRef.current) {\n setIsLoading(false);\n }\n }\n },\n query.length === 0 ? 0 : 200,\n );\n\n return () => {\n clearTimeout(timer);\n abort.abort();\n };\n }, [query, enabled]);\n\n return { files, isLoading };\n}\n"]}
@@ -1,7 +0,0 @@
1
- import type { SkillResult } from "./types.js";
2
- export declare function useSkills(enabled: boolean): {
3
- skills: SkillResult[];
4
- hint: string | undefined;
5
- isLoading: boolean;
6
- };
7
- //# sourceMappingURL=use-skills.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-skills.d.ts","sourceRoot":"","sources":["../../../src/client/composer/use-skills.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO;;;;EAsCzC"}
@@ -1,39 +0,0 @@
1
- import { useState, useEffect, useRef } from "react";
2
- import { agentNativePath } from "../api-path.js";
3
- export function useSkills(enabled) {
4
- const [skills, setSkills] = useState([]);
5
- const [hint, setHint] = useState();
6
- const [isLoading, setIsLoading] = useState(false);
7
- const requestIdRef = useRef(0);
8
- useEffect(() => {
9
- if (!enabled) {
10
- return;
11
- }
12
- setIsLoading(true);
13
- const id = ++requestIdRef.current;
14
- fetch(agentNativePath("/_agent-native/agent-chat/skills"))
15
- .then((res) => {
16
- if (!res.ok)
17
- throw new Error();
18
- return res.json();
19
- })
20
- .then((data) => {
21
- if (id === requestIdRef.current) {
22
- setSkills(data.skills || []);
23
- setHint(data.hint);
24
- }
25
- })
26
- .catch(() => {
27
- if (id === requestIdRef.current) {
28
- setSkills([]);
29
- }
30
- })
31
- .finally(() => {
32
- if (id === requestIdRef.current) {
33
- setIsLoading(false);
34
- }
35
- });
36
- }, [enabled]);
37
- return { skills, hint, isLoading };
38
- }
39
- //# sourceMappingURL=use-skills.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-skills.js","sourceRoot":"","sources":["../../../src/client/composer/use-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,EAAsB,CAAC;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC;QAElC,KAAK,CAAC,eAAe,CAAC,kCAAkC,CAAC,CAAC;aACvD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,IAAI,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;gBAChC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;gBAChC,SAAS,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,EAAE,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;gBAChC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACrC,CAAC","sourcesContent":["import { useState, useEffect, useRef } from \"react\";\n\nimport { agentNativePath } from \"../api-path.js\";\nimport type { SkillResult } from \"./types.js\";\n\nexport function useSkills(enabled: boolean) {\n const [skills, setSkills] = useState<SkillResult[]>([]);\n const [hint, setHint] = useState<string | undefined>();\n const [isLoading, setIsLoading] = useState(false);\n const requestIdRef = useRef(0);\n\n useEffect(() => {\n if (!enabled) {\n return;\n }\n\n setIsLoading(true);\n const id = ++requestIdRef.current;\n\n fetch(agentNativePath(\"/_agent-native/agent-chat/skills\"))\n .then((res) => {\n if (!res.ok) throw new Error();\n return res.json();\n })\n .then((data) => {\n if (id === requestIdRef.current) {\n setSkills(data.skills || []);\n setHint(data.hint);\n }\n })\n .catch(() => {\n if (id === requestIdRef.current) {\n setSkills([]);\n }\n })\n .finally(() => {\n if (id === requestIdRef.current) {\n setIsLoading(false);\n }\n });\n }, [enabled]);\n\n return { skills, hint, isLoading };\n}\n"]}