@arbidocs/react 0.5.111 → 0.5.112

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 (983) hide show
  1. package/dist/account/client.js +96 -0
  2. package/dist/account/client.js.map +7 -0
  3. package/dist/account/delete.js +70 -0
  4. package/dist/account/delete.js.map +7 -0
  5. package/dist/account/didit.js +34 -0
  6. package/dist/account/didit.js.map +7 -0
  7. package/dist/account/dismissed-tips.js +33 -0
  8. package/dist/account/dismissed-tips.js.map +7 -0
  9. package/dist/account/email.js +84 -0
  10. package/dist/account/email.js.map +7 -0
  11. package/dist/account/entitlements.js +47 -0
  12. package/dist/account/entitlements.js.map +7 -0
  13. package/dist/account/identity.js +270 -0
  14. package/dist/account/identity.js.map +7 -0
  15. package/dist/account/index.js +93 -0
  16. package/dist/account/index.js.map +7 -0
  17. package/dist/account/notifications.js +59 -0
  18. package/dist/account/notifications.js.map +7 -0
  19. package/dist/account/password.js +103 -0
  20. package/dist/account/password.js.map +7 -0
  21. package/dist/account/profile.js +116 -0
  22. package/dist/account/profile.js.map +7 -0
  23. package/dist/account/recovery.js +13 -0
  24. package/dist/account/recovery.js.map +7 -0
  25. package/dist/account/relevance.js +82 -0
  26. package/dist/account/relevance.js.map +7 -0
  27. package/dist/account/sessions.js +37 -0
  28. package/dist/account/sessions.js.map +7 -0
  29. package/dist/account/settings.js +39 -0
  30. package/dist/account/settings.js.map +7 -0
  31. package/dist/account/table-views.js +16 -0
  32. package/dist/account/table-views.js.map +7 -0
  33. package/dist/ai/AiAnswer.js +83 -0
  34. package/dist/ai/AiAnswer.js.map +7 -0
  35. package/dist/ai/AiMarkdown.js +40 -0
  36. package/dist/ai/AiMarkdown.js.map +7 -0
  37. package/dist/ai/ArtifactCanvas.js +193 -0
  38. package/dist/ai/ArtifactCanvas.js.map +7 -0
  39. package/dist/ai/CitationRenderer.js +413 -0
  40. package/dist/ai/CitationRenderer.js.map +7 -0
  41. package/dist/{chunk-WL2Y2T47.js → ai/MarkdownRenderer.js} +35 -101
  42. package/dist/ai/MarkdownRenderer.js.map +7 -0
  43. package/dist/ai/MessageArtifactCard.js +75 -0
  44. package/dist/ai/MessageArtifactCard.js.map +7 -0
  45. package/dist/ai/PassageCard.js +79 -0
  46. package/dist/ai/PassageCard.js.map +7 -0
  47. package/dist/ai/engine.js +110 -0
  48. package/dist/ai/engine.js.map +7 -0
  49. package/dist/ai/index.js +63 -0
  50. package/dist/ai/index.js.map +7 -0
  51. package/dist/ai/markdown-base-components.js +37 -0
  52. package/dist/ai/markdown-base-components.js.map +7 -0
  53. package/dist/ai/markdown-streaming-context.js +6 -0
  54. package/dist/ai/markdown-streaming-context.js.map +7 -0
  55. package/dist/{chunk-VSCU7K4V.js → ai/normalize-citations.js} +12 -19
  56. package/dist/ai/normalize-citations.js.map +7 -0
  57. package/dist/ai/redline.js +41 -0
  58. package/dist/ai/redline.js.map +7 -0
  59. package/dist/ai/split-markdown-blocks.js +40 -0
  60. package/dist/ai/split-markdown-blocks.js.map +7 -0
  61. package/dist/{chunk-UW2SGTI5.js → ai/stored-markdown.js} +41 -93
  62. package/dist/ai/stored-markdown.js.map +7 -0
  63. package/dist/annotations/AnnotationPageOverlay.js +807 -0
  64. package/dist/annotations/AnnotationPageOverlay.js.map +7 -0
  65. package/dist/annotations/AnnotationToolbar.js +398 -0
  66. package/dist/annotations/AnnotationToolbar.js.map +7 -0
  67. package/dist/annotations/FreezeDialog.js +170 -0
  68. package/dist/annotations/FreezeDialog.js.map +7 -0
  69. package/dist/annotations/ProductionDialog.js +354 -0
  70. package/dist/annotations/ProductionDialog.js.map +7 -0
  71. package/dist/annotations/controller.js +49 -0
  72. package/dist/annotations/controller.js.map +7 -0
  73. package/dist/annotations/freeze/browser.js +21 -0
  74. package/dist/annotations/freeze/browser.js.map +7 -0
  75. package/dist/annotations/freeze/bundle.js +201 -0
  76. package/dist/annotations/freeze/bundle.js.map +7 -0
  77. package/dist/annotations/freeze/coords.js +37 -0
  78. package/dist/annotations/freeze/coords.js.map +7 -0
  79. package/dist/annotations/freeze/freeze.js +261 -0
  80. package/dist/annotations/freeze/freeze.js.map +7 -0
  81. package/dist/annotations/freeze/hash.js +28 -0
  82. package/dist/annotations/freeze/hash.js.map +7 -0
  83. package/dist/annotations/freeze/index-page.js +78 -0
  84. package/dist/annotations/freeze/index-page.js.map +7 -0
  85. package/dist/annotations/freeze/index.js +28 -22
  86. package/dist/annotations/freeze/index.js.map +7 -1
  87. package/dist/annotations/freeze/raster.js +208 -0
  88. package/dist/annotations/freeze/raster.js.map +7 -0
  89. package/dist/annotations/freeze/stamp.js +117 -0
  90. package/dist/annotations/freeze/stamp.js.map +7 -0
  91. package/dist/annotations/freeze/types.js +14 -0
  92. package/dist/annotations/freeze/types.js.map +7 -0
  93. package/dist/annotations/freeze/vector.js +283 -0
  94. package/dist/annotations/freeze/vector.js.map +7 -0
  95. package/dist/annotations/geometry.js +81 -0
  96. package/dist/annotations/geometry.js.map +7 -0
  97. package/dist/annotations/index.js +125 -6
  98. package/dist/annotations/index.js.map +7 -1
  99. package/dist/annotations/merge.js +53 -0
  100. package/dist/annotations/merge.js.map +7 -0
  101. package/dist/{chunk-T3USOSVN.js → annotations/model.js} +23 -16
  102. package/dist/annotations/model.js.map +7 -0
  103. package/dist/annotations/overlay-geometry.js +41 -0
  104. package/dist/annotations/overlay-geometry.js.map +7 -0
  105. package/dist/annotations/redaction-log.js +33 -0
  106. package/dist/annotations/redaction-log.js.map +7 -0
  107. package/dist/annotations/selection-marks.js +122 -0
  108. package/dist/annotations/selection-marks.js.map +7 -0
  109. package/dist/annotations/state.js +140 -0
  110. package/dist/annotations/state.js.map +7 -0
  111. package/dist/annotations/store.js +49 -0
  112. package/dist/annotations/store.js.map +7 -0
  113. package/dist/annotations/useAnnotationLayer.js +306 -0
  114. package/dist/annotations/useAnnotationLayer.js.map +7 -0
  115. package/dist/annotations/useAnnotationShortcuts.js +31 -0
  116. package/dist/annotations/useAnnotationShortcuts.js.map +7 -0
  117. package/dist/annotations/useTextSelectionMarks.js +100 -0
  118. package/dist/annotations/useTextSelectionMarks.js.map +7 -0
  119. package/dist/artifacts/artifact-kind.js +19 -0
  120. package/dist/artifacts/artifact-kind.js.map +7 -0
  121. package/dist/artifacts/index.js +89 -571
  122. package/dist/artifacts/index.js.map +7 -1
  123. package/dist/{chunk-WUTL62MC.js → artifacts/normalize-markdown.js} +12 -14
  124. package/dist/artifacts/normalize-markdown.js.map +7 -0
  125. package/dist/artifacts/redline-core.js +12 -3
  126. package/dist/artifacts/redline-core.js.map +7 -1
  127. package/dist/{chunk-74N436VK.js → artifacts/redline-diff.js} +10 -9
  128. package/dist/artifacts/redline-diff.js.map +7 -0
  129. package/dist/artifacts/redline-engine.js +14 -0
  130. package/dist/artifacts/redline-engine.js.map +7 -0
  131. package/dist/artifacts/renderArtifactMarkdown.js +9 -0
  132. package/dist/artifacts/renderArtifactMarkdown.js.map +7 -0
  133. package/dist/artifacts/useArtifactEditSession.js +183 -0
  134. package/dist/artifacts/useArtifactEditSession.js.map +7 -0
  135. package/dist/artifacts/useArtifactSession.js +173 -0
  136. package/dist/artifacts/useArtifactSession.js.map +7 -0
  137. package/dist/artifacts/useArtifactSource.js +16 -0
  138. package/dist/artifacts/useArtifactSource.js.map +7 -0
  139. package/dist/artifacts/useArtifactText.js +78 -0
  140. package/dist/artifacts/useArtifactText.js.map +7 -0
  141. package/dist/artifacts/useRedline.js +65 -0
  142. package/dist/artifacts/useRedline.js.map +7 -0
  143. package/dist/artifacts/useStreamedArtifact.js +74 -0
  144. package/dist/artifacts/useStreamedArtifact.js.map +7 -0
  145. package/dist/artifacts/versions.js +68 -0
  146. package/dist/artifacts/versions.js.map +7 -0
  147. package/dist/billing.js +200 -0
  148. package/dist/billing.js.map +7 -0
  149. package/dist/boot-timeout.js +19 -0
  150. package/dist/boot-timeout.js.map +7 -0
  151. package/dist/calendar/accounts.js +213 -0
  152. package/dist/calendar/accounts.js.map +7 -0
  153. package/dist/calendar/hooks.js +409 -0
  154. package/dist/calendar/hooks.js.map +7 -0
  155. package/dist/calendar/index.js +31 -0
  156. package/dist/calendar/index.js.map +7 -0
  157. package/dist/calendar/keys.js +5 -0
  158. package/dist/calendar/keys.js.map +7 -0
  159. package/dist/calendar/offline/outbox.js +231 -0
  160. package/dist/calendar/offline/outbox.js.map +7 -0
  161. package/dist/calendar/offline/runtime.js +109 -0
  162. package/dist/calendar/offline/runtime.js.map +7 -0
  163. package/dist/calendar/offline/support.js +41 -0
  164. package/dist/calendar/offline/support.js.map +7 -0
  165. package/dist/calendar/support.js +34 -0
  166. package/dist/calendar/support.js.map +7 -0
  167. package/dist/calls/actions.js +226 -0
  168. package/dist/calls/actions.js.map +7 -0
  169. package/dist/calls/events.js +138 -0
  170. package/dist/calls/events.js.map +7 -0
  171. package/dist/calls/gate.js +19 -0
  172. package/dist/calls/gate.js.map +7 -0
  173. package/dist/calls/hooks.js +115 -0
  174. package/dist/calls/hooks.js.map +7 -0
  175. package/dist/calls/in-call-chat.js +132 -0
  176. package/dist/calls/in-call-chat.js.map +7 -0
  177. package/dist/calls/index.js +24 -0
  178. package/dist/calls/index.js.map +7 -0
  179. package/dist/calls/keys.js +17 -0
  180. package/dist/calls/keys.js.map +7 -0
  181. package/dist/calls/livekit/index.js +6 -958
  182. package/dist/calls/livekit/index.js.map +7 -1
  183. package/dist/calls/livekit/room.js +98 -0
  184. package/dist/calls/livekit/room.js.map +7 -0
  185. package/dist/calls/livekit/useCallRecorder.js +219 -0
  186. package/dist/calls/livekit/useCallRecorder.js.map +7 -0
  187. package/dist/calls/livekit/useCallTranscriber.js +309 -0
  188. package/dist/calls/livekit/useCallTranscriber.js.map +7 -0
  189. package/dist/calls/livekit/useHostMuteNotice.js +29 -0
  190. package/dist/calls/livekit/useHostMuteNotice.js.map +7 -0
  191. package/dist/calls/livekit/useInCallChat.js +161 -0
  192. package/dist/calls/livekit/useInCallChat.js.map +7 -0
  193. package/dist/calls/livekit/useWebinar.js +239 -0
  194. package/dist/calls/livekit/useWebinar.js.map +7 -0
  195. package/dist/calls/meeting-chat.js +149 -0
  196. package/dist/calls/meeting-chat.js.map +7 -0
  197. package/dist/calls/moderation.js +50 -0
  198. package/dist/calls/moderation.js.map +7 -0
  199. package/dist/calls/open-meeting-chat.js +29 -0
  200. package/dist/calls/open-meeting-chat.js.map +7 -0
  201. package/dist/calls/read-only.js +24 -0
  202. package/dist/calls/read-only.js.map +7 -0
  203. package/dist/calls/recording-media.js +218 -0
  204. package/dist/calls/recording-media.js.map +7 -0
  205. package/dist/calls/recording-playback.js +260 -0
  206. package/dist/calls/recording-playback.js.map +7 -0
  207. package/dist/calls/recording.js +268 -0
  208. package/dist/calls/recording.js.map +7 -0
  209. package/dist/calls/save-to-thread.js +80 -0
  210. package/dist/calls/save-to-thread.js.map +7 -0
  211. package/dist/calls/session.js +134 -0
  212. package/dist/calls/session.js.map +7 -0
  213. package/dist/calls/transcript-format.js +147 -0
  214. package/dist/calls/transcript-format.js.map +7 -0
  215. package/dist/calls/transcription.js +101 -0
  216. package/dist/calls/transcription.js.map +7 -0
  217. package/dist/calls/webinar.js +71 -0
  218. package/dist/calls/webinar.js.map +7 -0
  219. package/dist/charge-watch.js +71 -0
  220. package/dist/charge-watch.js.map +7 -0
  221. package/dist/chat/ChatBubble.js +146 -0
  222. package/dist/chat/ChatBubble.js.map +7 -0
  223. package/dist/chat/ConversationScope.js +30 -0
  224. package/dist/chat/ConversationScope.js.map +7 -0
  225. package/dist/chat/active-config.js +20 -0
  226. package/dist/chat/active-config.js.map +7 -0
  227. package/dist/chat/agent-chat-owner.js +25 -0
  228. package/dist/chat/agent-chat-owner.js.map +7 -0
  229. package/dist/chat/chat-artifacts.js +64 -0
  230. package/dist/chat/chat-artifacts.js.map +7 -0
  231. package/dist/chat/citations.js +32 -0
  232. package/dist/chat/citations.js.map +7 -0
  233. package/dist/chat/config-model.js +10 -0
  234. package/dist/chat/config-model.js.map +7 -0
  235. package/dist/chat/conversation-cache.js +676 -0
  236. package/dist/chat/conversation-cache.js.map +7 -0
  237. package/dist/chat/conversation-events.js +57 -0
  238. package/dist/chat/conversation-events.js.map +7 -0
  239. package/dist/chat/conversation-mentions.js +58 -0
  240. package/dist/chat/conversation-mentions.js.map +7 -0
  241. package/dist/chat/conversation-workspace.js +58 -0
  242. package/dist/chat/conversation-workspace.js.map +7 -0
  243. package/dist/chat/mentions.js +116 -0
  244. package/dist/chat/mentions.js.map +7 -0
  245. package/dist/chat/open-document.js +106 -0
  246. package/dist/chat/open-document.js.map +7 -0
  247. package/dist/chat/orphaned.js +44 -0
  248. package/dist/chat/orphaned.js.map +7 -0
  249. package/dist/chat/pendingFirstTurn.js +30 -0
  250. package/dist/chat/pendingFirstTurn.js.map +7 -0
  251. package/dist/chat/reply-target.js +12 -0
  252. package/dist/chat/reply-target.js.map +7 -0
  253. package/dist/chat/run-finished.js +28 -0
  254. package/dist/chat/run-finished.js.map +7 -0
  255. package/dist/chat/run-state.js +91 -0
  256. package/dist/chat/run-state.js.map +7 -0
  257. package/dist/chat/stream-handlers.js +419 -0
  258. package/dist/chat/stream-handlers.js.map +7 -0
  259. package/dist/chat/thread-binding.js +76 -0
  260. package/dist/chat/thread-binding.js.map +7 -0
  261. package/dist/chat/thread-document.js +53 -0
  262. package/dist/chat/thread-document.js.map +7 -0
  263. package/dist/chat/turn-control.js +79 -0
  264. package/dist/chat/turn-control.js.map +7 -0
  265. package/dist/chat/useAgentRunControl.js +36 -0
  266. package/dist/chat/useAgentRunControl.js.map +7 -0
  267. package/dist/chat/useAnswerAgentQuestion.js +19 -0
  268. package/dist/chat/useAnswerAgentQuestion.js.map +7 -0
  269. package/dist/chat/useAskAgain.js +32 -0
  270. package/dist/chat/useAskAgain.js.map +7 -0
  271. package/dist/chat/useAutoSendDraft.js +17 -0
  272. package/dist/chat/useAutoSendDraft.js.map +7 -0
  273. package/dist/chat/useBranchNavigation.js +97 -0
  274. package/dist/chat/useBranchNavigation.js.map +7 -0
  275. package/dist/chat/useConnectRunStream.js +169 -0
  276. package/dist/chat/useConnectRunStream.js.map +7 -0
  277. package/dist/chat/useConversation.js +431 -0
  278. package/dist/chat/useConversation.js.map +7 -0
  279. package/dist/chat/useConversationActions.js +662 -0
  280. package/dist/chat/useConversationActions.js.map +7 -0
  281. package/dist/chat/useConversationData.js +143 -0
  282. package/dist/chat/useConversationData.js.map +7 -0
  283. package/dist/chat/useConversationDocuments.js +41 -0
  284. package/dist/chat/useConversationDocuments.js.map +7 -0
  285. package/dist/chat/useConversationSettings.js +78 -0
  286. package/dist/chat/useConversationSettings.js.map +7 -0
  287. package/dist/chat/useConversationTurn.js +31 -0
  288. package/dist/chat/useConversationTurn.js.map +7 -0
  289. package/dist/chat/useConversationWorkspace.js +12 -0
  290. package/dist/chat/useConversationWorkspace.js.map +7 -0
  291. package/dist/chat/useDeleteMessage.js +15 -0
  292. package/dist/chat/useDeleteMessage.js.map +7 -0
  293. package/dist/chat/useDocumentAutoAdd.js +73 -0
  294. package/dist/chat/useDocumentAutoAdd.js.map +7 -0
  295. package/dist/chat/useMessageTimer.js +39 -0
  296. package/dist/chat/useMessageTimer.js.map +7 -0
  297. package/dist/chat/useThinkingContent.js +67 -0
  298. package/dist/chat/useThinkingContent.js.map +7 -0
  299. package/dist/chat/useThreadDocument.js +61 -0
  300. package/dist/chat/useThreadDocument.js.map +7 -0
  301. package/dist/chat/workflow-run-titles.js +50 -0
  302. package/dist/chat/workflow-run-titles.js.map +7 -0
  303. package/dist/{chunk-Z3W4XFWB.cjs → chunk-C72FSQUE.cjs} +3 -3
  304. package/dist/{chunk-Z3W4XFWB.cjs.map → chunk-C72FSQUE.cjs.map} +1 -1
  305. package/dist/{chunk-LBAG7KL7.cjs → chunk-FQVNZCTD.cjs} +3 -3
  306. package/dist/{chunk-LBAG7KL7.cjs.map → chunk-FQVNZCTD.cjs.map} +1 -1
  307. package/dist/{chunk-DI5KSVKY.cjs → chunk-UDDJIUHJ.cjs} +3 -3
  308. package/dist/{chunk-DI5KSVKY.cjs.map → chunk-UDDJIUHJ.cjs.map} +1 -1
  309. package/dist/config/config-hooks.js +209 -0
  310. package/dist/config/config-hooks.js.map +7 -0
  311. package/dist/connectivity.js +72 -0
  312. package/dist/connectivity.js.map +7 -0
  313. package/dist/connectors/hooks.js +263 -0
  314. package/dist/connectors/hooks.js.map +7 -0
  315. package/dist/connectors/index.js +28 -0
  316. package/dist/connectors/index.js.map +7 -0
  317. package/dist/contacts.js +100 -0
  318. package/dist/contacts.js.map +7 -0
  319. package/dist/conversation-list.js +65 -0
  320. package/dist/conversation-list.js.map +7 -0
  321. package/dist/databases.js +195 -0
  322. package/dist/databases.js.map +7 -0
  323. package/dist/datasets/aggregate.js +281 -0
  324. package/dist/datasets/aggregate.js.map +7 -0
  325. package/dist/datasets/index.js +122 -0
  326. package/dist/datasets/index.js.map +7 -0
  327. package/dist/datasets/members.js +27 -0
  328. package/dist/datasets/members.js.map +7 -0
  329. package/dist/datasets/panel.js +44 -0
  330. package/dist/datasets/panel.js.map +7 -0
  331. package/dist/datasets/registry.js +47 -0
  332. package/dist/datasets/registry.js.map +7 -0
  333. package/dist/datasets/rows-source.js +44 -0
  334. package/dist/datasets/rows-source.js.map +7 -0
  335. package/dist/datasets/sources/activity.js +83 -0
  336. package/dist/datasets/sources/activity.js.map +7 -0
  337. package/dist/datasets/sources/conversations.js +74 -0
  338. package/dist/datasets/sources/conversations.js.map +7 -0
  339. package/dist/datasets/sources/database.js +209 -0
  340. package/dist/datasets/sources/database.js.map +7 -0
  341. package/dist/datasets/sources/documents.js +93 -0
  342. package/dist/datasets/sources/documents.js.map +7 -0
  343. package/dist/datasets/sources/facts.js +56 -0
  344. package/dist/datasets/sources/facts.js.map +7 -0
  345. package/dist/datasets/sources/projects.js +117 -0
  346. package/dist/datasets/sources/projects.js.map +7 -0
  347. package/dist/datasets/sources/tags.js +67 -0
  348. package/dist/datasets/sources/tags.js.map +7 -0
  349. package/dist/datasets/sources/usage.js +268 -0
  350. package/dist/datasets/sources/usage.js.map +7 -0
  351. package/dist/datasets/sources/workflows.js +91 -0
  352. package/dist/datasets/sources/workflows.js.map +7 -0
  353. package/dist/datasets/sources/workspaces.js +67 -0
  354. package/dist/datasets/sources/workspaces.js.map +7 -0
  355. package/dist/datasets/store.js +194 -0
  356. package/dist/datasets/store.js.map +7 -0
  357. package/dist/datasets/types.js +14 -0
  358. package/dist/datasets/types.js.map +7 -0
  359. package/dist/directmessages/ConversationList.js +148 -0
  360. package/dist/directmessages/ConversationList.js.map +7 -0
  361. package/dist/directmessages/DateSeparator.js +8 -0
  362. package/dist/directmessages/DateSeparator.js.map +7 -0
  363. package/dist/directmessages/DmAvatar.js +29 -0
  364. package/dist/directmessages/DmAvatar.js.map +7 -0
  365. package/dist/directmessages/DmComposer.js +201 -0
  366. package/dist/directmessages/DmComposer.js.map +7 -0
  367. package/dist/directmessages/arrivals.js +29 -0
  368. package/dist/directmessages/arrivals.js.map +7 -0
  369. package/dist/directmessages/chat-cache.js +192 -0
  370. package/dist/directmessages/chat-cache.js.map +7 -0
  371. package/dist/directmessages/grouping.js +26 -0
  372. package/dist/directmessages/grouping.js.map +7 -0
  373. package/dist/directmessages/index.js +81 -0
  374. package/dist/directmessages/index.js.map +7 -0
  375. package/dist/directmessages/useChats.js +266 -0
  376. package/dist/directmessages/useChats.js.map +7 -0
  377. package/dist/directmessages/utils.js +23 -0
  378. package/dist/directmessages/utils.js.map +7 -0
  379. package/dist/document-tools/can-annotate.js +7 -0
  380. package/dist/document-tools/can-annotate.js.map +7 -0
  381. package/dist/document-tools/core.cjs +80 -80
  382. package/dist/document-tools/core.js +218 -12
  383. package/dist/document-tools/core.js.map +7 -1
  384. package/dist/document-tools/document-pdf.js +76 -0
  385. package/dist/document-tools/document-pdf.js.map +7 -0
  386. package/dist/document-tools/environment.js +136 -0
  387. package/dist/document-tools/environment.js.map +7 -0
  388. package/dist/document-tools/file-shares.js +112 -0
  389. package/dist/document-tools/file-shares.js.map +7 -0
  390. package/dist/document-tools/frozen-copy.js +27 -0
  391. package/dist/document-tools/frozen-copy.js.map +7 -0
  392. package/dist/document-tools/index.cjs +80 -80
  393. package/dist/document-tools/index.js +26 -148
  394. package/dist/document-tools/index.js.map +7 -1
  395. package/dist/document-tools/markup-download.js +51 -0
  396. package/dist/document-tools/markup-download.js.map +7 -0
  397. package/dist/document-tools/markup-store.js +138 -0
  398. package/dist/document-tools/markup-store.js.map +7 -0
  399. package/dist/document-tools/markup-transfer.js +88 -0
  400. package/dist/document-tools/markup-transfer.js.map +7 -0
  401. package/dist/document-tools/production.js +147 -0
  402. package/dist/document-tools/production.js.map +7 -0
  403. package/dist/document-tools/saved-signature.js +90 -0
  404. package/dist/document-tools/saved-signature.js.map +7 -0
  405. package/dist/document-tools/signature-requests.js +310 -0
  406. package/dist/document-tools/signature-requests.js.map +7 -0
  407. package/dist/document-tools/signing.js +127 -0
  408. package/dist/document-tools/signing.js.map +7 -0
  409. package/dist/document-tools/useDocumentBytes.js +38 -0
  410. package/dist/document-tools/useDocumentBytes.js.map +7 -0
  411. package/dist/document-tools/useDocumentMarkup.js +154 -0
  412. package/dist/document-tools/useDocumentMarkup.js.map +7 -0
  413. package/dist/document-tools/useIsOnline.js +13 -0
  414. package/dist/document-tools/useIsOnline.js.map +7 -0
  415. package/dist/document-tools/verification.js +60 -0
  416. package/dist/document-tools/verification.js.map +7 -0
  417. package/dist/documents/DocumentReview.js +220 -0
  418. package/dist/documents/DocumentReview.js.map +7 -0
  419. package/dist/documents/DraftTitleControls.js +41 -0
  420. package/dist/documents/DraftTitleControls.js.map +7 -0
  421. package/dist/documents/InlineMicButton.js +90 -0
  422. package/dist/documents/InlineMicButton.js.map +7 -0
  423. package/dist/documents/MicRecordingOverlay.js +29 -0
  424. package/dist/documents/MicRecordingOverlay.js.map +7 -0
  425. package/dist/documents/MicWaveformIndicator.js +68 -0
  426. package/dist/documents/MicWaveformIndicator.js.map +7 -0
  427. package/dist/documents/PhotoCapture.js +120 -0
  428. package/dist/documents/PhotoCapture.js.map +7 -0
  429. package/dist/documents/VideoCapture.js +129 -0
  430. package/dist/documents/VideoCapture.js.map +7 -0
  431. package/dist/documents/VoiceNoteRecorder.js +166 -0
  432. package/dist/documents/VoiceNoteRecorder.js.map +7 -0
  433. package/dist/documents/audio-segmenter.js +63 -0
  434. package/dist/documents/audio-segmenter.js.map +7 -0
  435. package/dist/documents/capture-frame.js +21 -0
  436. package/dist/documents/capture-frame.js.map +7 -0
  437. package/dist/documents/chunked-recorder.js +190 -0
  438. package/dist/documents/chunked-recorder.js.map +7 -0
  439. package/dist/documents/document-download.js +53 -0
  440. package/dist/documents/document-download.js.map +7 -0
  441. package/dist/documents/document-fields.js +109 -0
  442. package/dist/documents/document-fields.js.map +7 -0
  443. package/dist/documents/documents-cache.js +110 -0
  444. package/dist/documents/documents-cache.js.map +7 -0
  445. package/dist/documents/documents-data.js +128 -0
  446. package/dist/documents/documents-data.js.map +7 -0
  447. package/dist/documents/documents-loader.js +113 -0
  448. package/dist/documents/documents-loader.js.map +7 -0
  449. package/dist/documents/documents-writes.js +448 -0
  450. package/dist/documents/documents-writes.js.map +7 -0
  451. package/dist/documents/format-elapsed.js +10 -0
  452. package/dist/documents/format-elapsed.js.map +7 -0
  453. package/dist/documents/has-video-track.js +26 -0
  454. package/dist/documents/has-video-track.js.map +7 -0
  455. package/dist/documents/index.js +266 -0
  456. package/dist/documents/index.js.map +7 -0
  457. package/dist/documents/media-error.js +18 -0
  458. package/dist/documents/media-error.js.map +7 -0
  459. package/dist/documents/offline-documents.js +160 -0
  460. package/dist/documents/offline-documents.js.map +7 -0
  461. package/dist/documents/pending-sync.js +210 -0
  462. package/dist/documents/pending-sync.js.map +7 -0
  463. package/dist/documents/processing-live.js +122 -0
  464. package/dist/documents/processing-live.js.map +7 -0
  465. package/dist/documents/processing-order.js +59 -0
  466. package/dist/documents/processing-order.js.map +7 -0
  467. package/dist/documents/processing-settle.js +21 -0
  468. package/dist/documents/processing-settle.js.map +7 -0
  469. package/dist/documents/related-documents.js +133 -0
  470. package/dist/documents/related-documents.js.map +7 -0
  471. package/dist/documents/support.js +29 -0
  472. package/dist/documents/support.js.map +7 -0
  473. package/dist/documents/upload-files.js +169 -0
  474. package/dist/documents/upload-files.js.map +7 -0
  475. package/dist/documents/useAudioRecorder.js +315 -0
  476. package/dist/documents/useAudioRecorder.js.map +7 -0
  477. package/dist/documents/useCameraStream.js +35 -0
  478. package/dist/documents/useCameraStream.js.map +7 -0
  479. package/dist/documents/useDocumentThumbnails.js +71 -0
  480. package/dist/documents/useDocumentThumbnails.js.map +7 -0
  481. package/dist/documents/useDownloadDocuments.js +90 -0
  482. package/dist/documents/useDownloadDocuments.js.map +7 -0
  483. package/dist/documents/usePassageQuotes.js +37 -0
  484. package/dist/documents/usePassageQuotes.js.map +7 -0
  485. package/dist/documents/useUploadFiles.js +165 -0
  486. package/dist/documents/useUploadFiles.js.map +7 -0
  487. package/dist/documents/useUploadFromUrls.js +63 -0
  488. package/dist/documents/useUploadFromUrls.js.map +7 -0
  489. package/dist/documents/useVideoRecorder.js +62 -0
  490. package/dist/documents/useVideoRecorder.js.map +7 -0
  491. package/dist/entities/AgentMarkers.js +61 -0
  492. package/dist/entities/AgentMarkers.js.map +7 -0
  493. package/dist/entities/DocumentEntity.js +125 -0
  494. package/dist/entities/DocumentEntity.js.map +7 -0
  495. package/dist/entities/EntityPill.js +250 -0
  496. package/dist/entities/EntityPill.js.map +7 -0
  497. package/dist/entities/ProjectEntity.js +61 -0
  498. package/dist/entities/ProjectEntity.js.map +7 -0
  499. package/dist/entities/ShieldIcon.js +49 -0
  500. package/dist/entities/ShieldIcon.js.map +7 -0
  501. package/dist/entities/TagEntity.js +79 -0
  502. package/dist/entities/TagEntity.js.map +7 -0
  503. package/dist/entities/ThreadVisibilityIcon.js +15 -0
  504. package/dist/entities/ThreadVisibilityIcon.js.map +7 -0
  505. package/dist/entities/UserEntity.js +211 -0
  506. package/dist/entities/UserEntity.js.map +7 -0
  507. package/dist/entities/VerifiedBadge.js +19 -0
  508. package/dist/entities/VerifiedBadge.js.map +7 -0
  509. package/dist/entities/agent-avatar-colors.js +26 -0
  510. package/dist/entities/agent-avatar-colors.js.map +7 -0
  511. package/dist/entities/colors.js +64 -0
  512. package/dist/entities/colors.js.map +7 -0
  513. package/dist/entities/file-type.js +151 -0
  514. package/dist/entities/file-type.js.map +7 -0
  515. package/dist/entities/index.js +100 -0
  516. package/dist/entities/index.js.map +7 -0
  517. package/dist/entities/media-type.js +61 -0
  518. package/dist/entities/media-type.js.map +7 -0
  519. package/dist/entities/registry.js +385 -0
  520. package/dist/entities/registry.js.map +7 -0
  521. package/dist/entities/status.js +43 -0
  522. package/dist/entities/status.js.map +7 -0
  523. package/dist/entities/tag-kinds.js +23 -0
  524. package/dist/entities/tag-kinds.js.map +7 -0
  525. package/dist/entities/tag-types.js +44 -0
  526. package/dist/entities/tag-types.js.map +7 -0
  527. package/dist/entities/vocabulary.js +12 -0
  528. package/dist/entities/vocabulary.js.map +7 -0
  529. package/dist/entity-extraction.js +25 -0
  530. package/dist/entity-extraction.js.map +7 -0
  531. package/dist/facts-search.js +57 -0
  532. package/dist/facts-search.js.map +7 -0
  533. package/dist/facts.js +69 -0
  534. package/dist/facts.js.map +7 -0
  535. package/dist/hooks.js +320 -0
  536. package/dist/hooks.js.map +7 -0
  537. package/dist/host/ArbiHost.js +24 -0
  538. package/dist/host/ArbiHost.js.map +7 -0
  539. package/dist/host/assistant-copy.js +54 -0
  540. package/dist/host/assistant-copy.js.map +7 -0
  541. package/dist/host/config.js +9 -0
  542. package/dist/host/config.js.map +7 -0
  543. package/dist/host/context.js +10 -0
  544. package/dist/host/context.js.map +7 -0
  545. package/dist/host/features.js +144 -0
  546. package/dist/host/features.js.map +7 -0
  547. package/dist/host/index.js +12 -0
  548. package/dist/host/index.js.map +7 -0
  549. package/dist/{chunk-DPYBZDJB.js → host/merge.js} +7 -7
  550. package/dist/host/merge.js.map +7 -0
  551. package/dist/house-template.js +40 -0
  552. package/dist/house-template.js.map +7 -0
  553. package/dist/icons/AppleIcon.js +25 -0
  554. package/dist/icons/AppleIcon.js.map +7 -0
  555. package/dist/icons/ArbiBotHeadIcon.js +46 -0
  556. package/dist/icons/ArbiBotHeadIcon.js.map +7 -0
  557. package/dist/icons/ArbiIcon.js +24 -0
  558. package/dist/icons/ArbiIcon.js.map +7 -0
  559. package/dist/icons/AudIcon.js +56 -0
  560. package/dist/icons/AudIcon.js.map +7 -0
  561. package/dist/icons/ClaudeIcon.js +28 -0
  562. package/dist/icons/ClaudeIcon.js.map +7 -0
  563. package/dist/icons/DocIcon.js +56 -0
  564. package/dist/icons/DocIcon.js.map +7 -0
  565. package/dist/icons/EmlIcon.js +57 -0
  566. package/dist/icons/EmlIcon.js.map +7 -0
  567. package/dist/icons/FireworksIcon.js +47 -0
  568. package/dist/icons/FireworksIcon.js.map +7 -0
  569. package/dist/icons/GeminiIcon.js +37 -0
  570. package/dist/icons/GeminiIcon.js.map +7 -0
  571. package/dist/icons/GitHubIcon.js +32 -0
  572. package/dist/icons/GitHubIcon.js.map +7 -0
  573. package/dist/icons/GoogleIcon.js +53 -0
  574. package/dist/icons/GoogleIcon.js.map +7 -0
  575. package/dist/icons/HtmlIcon.js +56 -0
  576. package/dist/icons/HtmlIcon.js.map +7 -0
  577. package/dist/icons/ImgIcon.js +56 -0
  578. package/dist/icons/ImgIcon.js.map +7 -0
  579. package/dist/icons/LinkedInIcon.js +25 -0
  580. package/dist/icons/LinkedInIcon.js.map +7 -0
  581. package/dist/icons/OpenAIIcon.js +28 -0
  582. package/dist/icons/OpenAIIcon.js.map +7 -0
  583. package/dist/icons/PdfIcon.js +56 -0
  584. package/dist/icons/PdfIcon.js.map +7 -0
  585. package/dist/icons/ProviderIcon.js +42 -0
  586. package/dist/icons/ProviderIcon.js.map +7 -0
  587. package/dist/icons/TxtIcon.js +56 -0
  588. package/dist/icons/TxtIcon.js.map +7 -0
  589. package/dist/icons/VidIcon.js +56 -0
  590. package/dist/icons/VidIcon.js.map +7 -0
  591. package/dist/icons/XlsIcon.js +56 -0
  592. package/dist/icons/XlsIcon.js.map +7 -0
  593. package/dist/icons/arbi-mark.js +5 -0
  594. package/dist/icons/arbi-mark.js.map +7 -0
  595. package/dist/icons/colors.js +31 -0
  596. package/dist/icons/colors.js.map +7 -0
  597. package/dist/icons/file-type.js +105 -0
  598. package/dist/icons/file-type.js.map +7 -0
  599. package/dist/icons/index.js +55 -0
  600. package/dist/icons/index.js.map +7 -0
  601. package/dist/imagecrop/ImageCropModal.js +56 -0
  602. package/dist/imagecrop/ImageCropModal.js.map +7 -0
  603. package/dist/imagecrop/ImageCropper.js +100 -0
  604. package/dist/imagecrop/ImageCropper.js.map +7 -0
  605. package/dist/imagecrop/cropImage.js +43 -0
  606. package/dist/imagecrop/cropImage.js.map +7 -0
  607. package/dist/imagecrop/index.js +13 -0
  608. package/dist/imagecrop/index.js.map +7 -0
  609. package/dist/index.cjs +282 -282
  610. package/dist/index.js +702 -17116
  611. package/dist/index.js.map +7 -1
  612. package/dist/{chunk-SSXFVWCT.js → lazy-chunk.js} +8 -8
  613. package/dist/lazy-chunk.js.map +7 -0
  614. package/dist/lib/collision-padding.js +13 -0
  615. package/dist/lib/collision-padding.js.map +7 -0
  616. package/dist/lib/format-friendly-date.js +55 -0
  617. package/dist/lib/format-friendly-date.js.map +7 -0
  618. package/dist/lib/format-relative-time.js +52 -0
  619. package/dist/lib/format-relative-time.js.map +7 -0
  620. package/dist/lib/markdown-to-text.js +35 -0
  621. package/dist/lib/markdown-to-text.js.map +7 -0
  622. package/dist/lib/toast-interaction.js +9 -0
  623. package/dist/lib/toast-interaction.js.map +7 -0
  624. package/dist/lib/utils.js +9 -0
  625. package/dist/lib/utils.js.map +7 -0
  626. package/dist/mail/client.js +103 -0
  627. package/dist/mail/client.js.map +7 -0
  628. package/dist/mail/document-attachment.js +38 -0
  629. package/dist/mail/document-attachment.js.map +7 -0
  630. package/dist/mail/filing.js +132 -0
  631. package/dist/mail/filing.js.map +7 -0
  632. package/dist/mail/hooks.js +393 -0
  633. package/dist/mail/hooks.js.map +7 -0
  634. package/dist/mail/index.js +120 -0
  635. package/dist/mail/index.js.map +7 -0
  636. package/dist/mail/offline/changes.js +258 -0
  637. package/dist/mail/offline/changes.js.map +7 -0
  638. package/dist/mail/offline/confirm-sign-out.js +37 -0
  639. package/dist/mail/offline/confirm-sign-out.js.map +7 -0
  640. package/dist/mail/offline/crypto.js +26 -0
  641. package/dist/mail/offline/crypto.js.map +7 -0
  642. package/dist/mail/offline/drafts.js +69 -0
  643. package/dist/mail/offline/drafts.js.map +7 -0
  644. package/dist/mail/offline/hooks.js +104 -0
  645. package/dist/mail/offline/hooks.js.map +7 -0
  646. package/dist/mail/offline/index.js +48 -0
  647. package/dist/mail/offline/index.js.map +7 -0
  648. package/dist/mail/offline/live.js +233 -0
  649. package/dist/mail/offline/live.js.map +7 -0
  650. package/dist/mail/offline/mailbox.js +191 -0
  651. package/dist/mail/offline/mailbox.js.map +7 -0
  652. package/dist/mail/offline/outbox.js +167 -0
  653. package/dist/mail/offline/outbox.js.map +7 -0
  654. package/dist/mail/offline/reads.js +159 -0
  655. package/dist/mail/offline/reads.js.map +7 -0
  656. package/dist/mail/offline/runtime.js +100 -0
  657. package/dist/mail/offline/runtime.js.map +7 -0
  658. package/dist/mail/offline/settings.js +84 -0
  659. package/dist/mail/offline/settings.js.map +7 -0
  660. package/dist/mail/offline/store.js +29 -0
  661. package/dist/mail/offline/store.js.map +7 -0
  662. package/dist/mail/offline/sync.js +251 -0
  663. package/dist/mail/offline/sync.js.map +7 -0
  664. package/dist/mail/offline/wipe.js +19 -0
  665. package/dist/mail/offline/wipe.js.map +7 -0
  666. package/dist/mail/thread-keys.js +53 -0
  667. package/dist/mail/thread-keys.js.map +7 -0
  668. package/dist/mail/threads.js +71 -0
  669. package/dist/mail/threads.js.map +7 -0
  670. package/dist/mail/useMailClient.js +42 -0
  671. package/dist/mail/useMailClient.js.map +7 -0
  672. package/dist/model-connections.js +58 -0
  673. package/dist/model-connections.js.map +7 -0
  674. package/dist/notifications/ActivityFeed.js +70 -0
  675. package/dist/notifications/ActivityFeed.js.map +7 -0
  676. package/dist/notifications/NotificationBell.js +200 -0
  677. package/dist/notifications/NotificationBell.js.map +7 -0
  678. package/dist/notifications/Toaster.js +24 -0
  679. package/dist/notifications/Toaster.js.map +7 -0
  680. package/dist/notifications/activity-types.js +65 -0
  681. package/dist/notifications/activity-types.js.map +7 -0
  682. package/dist/notifications/bell.js +24 -0
  683. package/dist/notifications/bell.js.map +7 -0
  684. package/dist/notifications/calendar-notifications.js +79 -0
  685. package/dist/notifications/calendar-notifications.js.map +7 -0
  686. package/dist/notifications/index.js +108 -0
  687. package/dist/notifications/index.js.map +7 -0
  688. package/dist/notifications/live.js +28 -0
  689. package/dist/notifications/live.js.map +7 -0
  690. package/dist/notifications/notification-types.js +127 -0
  691. package/dist/notifications/notification-types.js.map +7 -0
  692. package/dist/{chunk-BF5KW5ZI.js → notifications/notify-store.js} +24 -74
  693. package/dist/notifications/notify-store.js.map +7 -0
  694. package/dist/notifications/server-notifications.js +452 -0
  695. package/dist/notifications/server-notifications.js.map +7 -0
  696. package/dist/notifications/useNotifications.js +34 -0
  697. package/dist/notifications/useNotifications.js.map +7 -0
  698. package/dist/offline-store/network.js +11 -0
  699. package/dist/offline-store/network.js.map +7 -0
  700. package/dist/offline-store/store.js +136 -0
  701. package/dist/offline-store/store.js.map +7 -0
  702. package/dist/offline-store/wipe.js +8 -0
  703. package/dist/offline-store/wipe.js.map +7 -0
  704. package/dist/offline.js +58 -0
  705. package/dist/offline.js.map +7 -0
  706. package/dist/people.js +122 -0
  707. package/dist/people.js.map +7 -0
  708. package/dist/projects.js +30 -0
  709. package/dist/projects.js.map +7 -0
  710. package/dist/query-client.js +63 -0
  711. package/dist/query-client.js.map +7 -0
  712. package/dist/{chunk-ZM6N7YZH.js → query-keys.js} +18 -31
  713. package/dist/query-keys.js.map +7 -0
  714. package/dist/query-persist.js +66 -0
  715. package/dist/query-persist.js.map +7 -0
  716. package/dist/queued-writes.js +59 -0
  717. package/dist/queued-writes.js.map +7 -0
  718. package/dist/remote-control.js +67 -0
  719. package/dist/remote-control.js.map +7 -0
  720. package/dist/search/index.js +23 -0
  721. package/dist/search/index.js.map +7 -0
  722. package/dist/search/session.js +58 -0
  723. package/dist/search/session.js.map +7 -0
  724. package/dist/search/useSemanticSearch.js +82 -0
  725. package/dist/search/useSemanticSearch.js.map +7 -0
  726. package/dist/session/chat.js +512 -0
  727. package/dist/session/chat.js.map +7 -0
  728. package/dist/session/documents.js +196 -0
  729. package/dist/session/documents.js.map +7 -0
  730. package/dist/session/drafts.js +103 -0
  731. package/dist/session/drafts.js.map +7 -0
  732. package/dist/session/index.js +123 -0
  733. package/dist/session/index.js.map +7 -0
  734. package/dist/session/layout.js +339 -0
  735. package/dist/session/layout.js.map +7 -0
  736. package/dist/session/persist.js +106 -0
  737. package/dist/session/persist.js.map +7 -0
  738. package/dist/session/session-hooks.js +53 -0
  739. package/dist/session/session-hooks.js.map +7 -0
  740. package/dist/session/signed-in.js +36 -0
  741. package/dist/session/signed-in.js.map +7 -0
  742. package/dist/session/store.js +166 -0
  743. package/dist/session/store.js.map +7 -0
  744. package/dist/session/thread-tabs.js +121 -0
  745. package/dist/session/thread-tabs.js.map +7 -0
  746. package/dist/session/ui-state-storage.js +76 -0
  747. package/dist/session/ui-state-storage.js.map +7 -0
  748. package/dist/session/workspace.js +77 -0
  749. package/dist/session/workspace.js.map +7 -0
  750. package/dist/shell/index.cjs +37 -37
  751. package/dist/shell/index.js +43 -10
  752. package/dist/shell/index.js.map +7 -1
  753. package/dist/skill-pack.js +111 -0
  754. package/dist/skill-pack.js.map +7 -0
  755. package/dist/storage.js +186 -0
  756. package/dist/storage.js.map +7 -0
  757. package/dist/support/index.js +35 -0
  758. package/dist/support/index.js.map +7 -0
  759. package/dist/tags.js +204 -0
  760. package/dist/tags.js.map +7 -0
  761. package/dist/ui/DebouncedInput.js +109 -0
  762. package/dist/ui/DebouncedInput.js.map +7 -0
  763. package/dist/ui/DictateContext.js +8 -0
  764. package/dist/ui/DictateContext.js.map +7 -0
  765. package/dist/ui/IconToggle.js +79 -0
  766. package/dist/ui/IconToggle.js.map +7 -0
  767. package/dist/ui/VerifiedToggle.js +38 -0
  768. package/dist/ui/VerifiedToggle.js.map +7 -0
  769. package/dist/ui/VisibilityToggle.js +103 -0
  770. package/dist/ui/VisibilityToggle.js.map +7 -0
  771. package/dist/ui/avatar.js +40 -0
  772. package/dist/ui/avatar.js.map +7 -0
  773. package/dist/ui/badge.js +28 -0
  774. package/dist/ui/badge.js.map +7 -0
  775. package/dist/ui/button.js +48 -0
  776. package/dist/ui/button.js.map +7 -0
  777. package/dist/ui/card.js +90 -0
  778. package/dist/ui/card.js.map +7 -0
  779. package/dist/ui/checkbox.js +22 -0
  780. package/dist/ui/checkbox.js.map +7 -0
  781. package/dist/ui/collapsible.js +10 -0
  782. package/dist/ui/collapsible.js.map +7 -0
  783. package/dist/ui/command.js +103 -0
  784. package/dist/ui/command.js.map +7 -0
  785. package/dist/{chunk-YNNAJJ5Z.js → ui/dialog.js} +30 -68
  786. package/dist/ui/dialog.js.map +7 -0
  787. package/dist/{chunk-47CCGUWR.js → ui/dropdown-menu.js} +40 -45
  788. package/dist/ui/dropdown-menu.js.map +7 -0
  789. package/dist/ui/hover-card.js +36 -0
  790. package/dist/ui/hover-card.js.map +7 -0
  791. package/dist/ui/index.cjs +154 -154
  792. package/dist/ui/index.js +290 -10
  793. package/dist/ui/index.js.map +7 -1
  794. package/dist/ui/input.js +65 -0
  795. package/dist/ui/input.js.map +7 -0
  796. package/dist/ui/label.js +16 -0
  797. package/dist/ui/label.js.map +7 -0
  798. package/dist/ui/mark-menu.js +300 -0
  799. package/dist/ui/mark-menu.js.map +7 -0
  800. package/dist/ui/popover.js +40 -0
  801. package/dist/ui/popover.js.map +7 -0
  802. package/dist/ui/portal-container.js +17 -0
  803. package/dist/ui/portal-container.js.map +7 -0
  804. package/dist/ui/progress.js +24 -0
  805. package/dist/ui/progress.js.map +7 -0
  806. package/dist/ui/radio-group.js +29 -0
  807. package/dist/ui/radio-group.js.map +7 -0
  808. package/dist/ui/scroll-area.js +39 -0
  809. package/dist/ui/scroll-area.js.map +7 -0
  810. package/dist/ui/select.js +130 -0
  811. package/dist/ui/select.js.map +7 -0
  812. package/dist/ui/separator.js +23 -0
  813. package/dist/ui/separator.js.map +7 -0
  814. package/dist/ui/slider.js +23 -0
  815. package/dist/ui/slider.js.map +7 -0
  816. package/dist/ui/switch.js +28 -0
  817. package/dist/ui/switch.js.map +7 -0
  818. package/dist/ui/table.js +75 -0
  819. package/dist/ui/table.js.map +7 -0
  820. package/dist/ui/tabs.js +48 -0
  821. package/dist/ui/tabs.js.map +7 -0
  822. package/dist/ui/textarea.js +63 -0
  823. package/dist/ui/textarea.js.map +7 -0
  824. package/dist/ui/toggle-group.js +43 -0
  825. package/dist/ui/toggle-group.js.map +7 -0
  826. package/dist/ui/toggle.js +40 -0
  827. package/dist/ui/toggle.js.map +7 -0
  828. package/dist/ui/tooltip.js +215 -0
  829. package/dist/ui/tooltip.js.map +7 -0
  830. package/dist/usage-metered.js +8 -0
  831. package/dist/usage-metered.js.map +7 -0
  832. package/dist/useArbi.js +16 -0
  833. package/dist/useArbi.js.map +7 -0
  834. package/dist/useInstallSkillPack.js +81 -0
  835. package/dist/useInstallSkillPack.js.map +7 -0
  836. package/dist/usermenu/UserMenu.js +188 -0
  837. package/dist/usermenu/UserMenu.js.map +7 -0
  838. package/dist/usermenu/index.js +5 -0
  839. package/dist/usermenu/index.js.map +7 -0
  840. package/dist/users/index.js +15 -0
  841. package/dist/users/index.js.map +7 -0
  842. package/dist/users/user-display.js +60 -0
  843. package/dist/users/user-display.js.map +7 -0
  844. package/dist/viewers/AudioViewer.js +23 -0
  845. package/dist/viewers/AudioViewer.js.map +7 -0
  846. package/dist/viewers/DocxViewer.js +81 -0
  847. package/dist/viewers/DocxViewer.js.map +7 -0
  848. package/dist/viewers/ImageViewer.js +31 -0
  849. package/dist/viewers/ImageViewer.js.map +7 -0
  850. package/dist/viewers/PdfViewer.js +19 -3
  851. package/dist/viewers/PdfViewer.js.map +7 -1
  852. package/dist/{PdfViewerImpl-TEBYF2QI.js → viewers/PdfViewerImpl.js} +25 -19
  853. package/dist/viewers/PdfViewerImpl.js.map +7 -0
  854. package/dist/viewers/VideoViewer.js +31 -0
  855. package/dist/viewers/VideoViewer.js.map +7 -0
  856. package/dist/viewers/XlsxViewer.js +102 -0
  857. package/dist/viewers/XlsxViewer.js.map +7 -0
  858. package/dist/viewers/index.js +61 -271
  859. package/dist/viewers/index.js.map +7 -1
  860. package/dist/viewers/page-scroll.js +59 -0
  861. package/dist/viewers/page-scroll.js.map +7 -0
  862. package/dist/viewers/pdf-viewer-constants.js +9 -0
  863. package/dist/viewers/pdf-viewer-constants.js.map +7 -0
  864. package/dist/{chunk-PTOP7OHG.js → viewers/pdfjs-polyfills.js} +5 -6
  865. package/dist/viewers/pdfjs-polyfills.js.map +7 -0
  866. package/dist/viewers/selection-runs.js +38 -0
  867. package/dist/viewers/selection-runs.js.map +7 -0
  868. package/dist/viewers/usePageIntersectionObserver.js +68 -0
  869. package/dist/viewers/usePageIntersectionObserver.js.map +7 -0
  870. package/dist/viewers/useProcessedChunks.js +58 -0
  871. package/dist/viewers/useProcessedChunks.js.map +7 -0
  872. package/dist/viewers/viewer-zoom.js +163 -0
  873. package/dist/viewers/viewer-zoom.js.map +7 -0
  874. package/dist/websocket/ArbiWebSocketProvider.js +207 -0
  875. package/dist/websocket/ArbiWebSocketProvider.js.map +7 -0
  876. package/dist/websocket/context.js +14 -0
  877. package/dist/websocket/context.js.map +7 -0
  878. package/dist/websocket/hooks.js +30 -0
  879. package/dist/websocket/hooks.js.map +7 -0
  880. package/dist/websocket/index.js +22 -0
  881. package/dist/websocket/index.js.map +7 -0
  882. package/dist/websocket/live-updates.js +38 -0
  883. package/dist/websocket/live-updates.js.map +7 -0
  884. package/dist/websocket/reconnect.js +13 -0
  885. package/dist/websocket/reconnect.js.map +7 -0
  886. package/dist/websocket/store.js +58 -0
  887. package/dist/websocket/store.js.map +7 -0
  888. package/dist/workforce.js +607 -0
  889. package/dist/workforce.js.map +7 -0
  890. package/dist/workspaces/access-request.js +35 -0
  891. package/dist/workspaces/access-request.js.map +7 -0
  892. package/dist/workspaces/archive.js +59 -0
  893. package/dist/workspaces/archive.js.map +7 -0
  894. package/dist/workspaces/current.js +20 -0
  895. package/dist/workspaces/current.js.map +7 -0
  896. package/dist/workspaces/delete-workspaces.js +15 -0
  897. package/dist/workspaces/delete-workspaces.js.map +7 -0
  898. package/dist/workspaces/export-archive.js +40 -0
  899. package/dist/workspaces/export-archive.js.map +7 -0
  900. package/dist/workspaces/index.js +99 -0
  901. package/dist/workspaces/index.js.map +7 -0
  902. package/dist/workspaces/settings.js +45 -0
  903. package/dist/workspaces/settings.js.map +7 -0
  904. package/dist/workspaces/shell-workspaces.js +49 -0
  905. package/dist/workspaces/shell-workspaces.js.map +7 -0
  906. package/dist/workspaces/switch.js +234 -0
  907. package/dist/workspaces/switch.js.map +7 -0
  908. package/dist/workspaces/transfer.js +170 -0
  909. package/dist/workspaces/transfer.js.map +7 -0
  910. package/dist/workspaces/useShellWorkspaces.js +86 -0
  911. package/dist/workspaces/useShellWorkspaces.js.map +7 -0
  912. package/dist/workspaces/workspace-users.js +65 -0
  913. package/dist/workspaces/workspace-users.js.map +7 -0
  914. package/package.json +4 -4
  915. package/dist/PdfViewerImpl-TEBYF2QI.js.map +0 -1
  916. package/dist/PdfViewerImpl.d-B28hLEuj.d.cts +0 -62
  917. package/dist/ProductionDialog.d-CpzslFn0.d.cts +0 -51
  918. package/dist/annotations/freeze/index.d.cts +0 -205
  919. package/dist/annotations/index.d.cts +0 -360
  920. package/dist/artifacts/index.d.cts +0 -476
  921. package/dist/artifacts/redline-core.d.cts +0 -39
  922. package/dist/bundle-YNOX7VIL.js +0 -5
  923. package/dist/bundle-YNOX7VIL.js.map +0 -1
  924. package/dist/bundle.d-BnCSbHy2.d.cts +0 -85
  925. package/dist/calls/livekit/index.d.cts +0 -280
  926. package/dist/chunk-47CCGUWR.js.map +0 -1
  927. package/dist/chunk-4FL3X3LA.js +0 -2057
  928. package/dist/chunk-4FL3X3LA.js.map +0 -1
  929. package/dist/chunk-6QNBSXCE.js +0 -271
  930. package/dist/chunk-6QNBSXCE.js.map +0 -1
  931. package/dist/chunk-74N436VK.js.map +0 -1
  932. package/dist/chunk-APZZQZ6P.js +0 -147
  933. package/dist/chunk-APZZQZ6P.js.map +0 -1
  934. package/dist/chunk-BF5KW5ZI.js.map +0 -1
  935. package/dist/chunk-DPYBZDJB.js.map +0 -1
  936. package/dist/chunk-DZKRL5H3.js +0 -2766
  937. package/dist/chunk-DZKRL5H3.js.map +0 -1
  938. package/dist/chunk-HDCRPPBW.js +0 -75
  939. package/dist/chunk-HDCRPPBW.js.map +0 -1
  940. package/dist/chunk-L2IPPTVC.js +0 -20
  941. package/dist/chunk-L2IPPTVC.js.map +0 -1
  942. package/dist/chunk-LSU4UPS5.js +0 -1011
  943. package/dist/chunk-LSU4UPS5.js.map +0 -1
  944. package/dist/chunk-NIKPG4PW.js +0 -1128
  945. package/dist/chunk-NIKPG4PW.js.map +0 -1
  946. package/dist/chunk-NNAJLY6B.js +0 -4974
  947. package/dist/chunk-NNAJLY6B.js.map +0 -1
  948. package/dist/chunk-OYPKKHXY.js +0 -559
  949. package/dist/chunk-OYPKKHXY.js.map +0 -1
  950. package/dist/chunk-PTOP7OHG.js.map +0 -1
  951. package/dist/chunk-QMY2JKBI.js +0 -246
  952. package/dist/chunk-QMY2JKBI.js.map +0 -1
  953. package/dist/chunk-SN5YV6FF.js +0 -11
  954. package/dist/chunk-SN5YV6FF.js.map +0 -1
  955. package/dist/chunk-SSXFVWCT.js.map +0 -1
  956. package/dist/chunk-T3USOSVN.js.map +0 -1
  957. package/dist/chunk-T4CLW3DN.js +0 -2560
  958. package/dist/chunk-T4CLW3DN.js.map +0 -1
  959. package/dist/chunk-UW2SGTI5.js.map +0 -1
  960. package/dist/chunk-VSCU7K4V.js.map +0 -1
  961. package/dist/chunk-WL2Y2T47.js.map +0 -1
  962. package/dist/chunk-WUTL62MC.js.map +0 -1
  963. package/dist/chunk-XWPLOFDN.js +0 -644
  964. package/dist/chunk-XWPLOFDN.js.map +0 -1
  965. package/dist/chunk-Y3MTRA7D.js +0 -97
  966. package/dist/chunk-Y3MTRA7D.js.map +0 -1
  967. package/dist/chunk-YNNAJJ5Z.js.map +0 -1
  968. package/dist/chunk-ZM6N7YZH.js.map +0 -1
  969. package/dist/document-tools/core.d.cts +0 -883
  970. package/dist/document-tools/index.d.cts +0 -90
  971. package/dist/index.d-LArLnpI8.d.cts +0 -2036
  972. package/dist/index.d-oR5FKZpJ.d.cts +0 -579
  973. package/dist/index.d.cts +0 -15923
  974. package/dist/lazy-chunk.d-B6YDLMKI.d.cts +0 -31
  975. package/dist/model.d-CNtRWKVK.d.cts +0 -110
  976. package/dist/query-keys.d-B1Am9tIF.d.cts +0 -337
  977. package/dist/shell/index.d.cts +0 -6
  978. package/dist/store.d-GADDvC7w.d.cts +0 -35
  979. package/dist/stored-markdown.d-Bp18vrbr.d.cts +0 -125
  980. package/dist/ui/index.d.cts +0 -26
  981. package/dist/useAudioRecorder.d-B9rlMI_E.d.cts +0 -778
  982. package/dist/viewers/PdfViewer.d.cts +0 -9
  983. package/dist/viewers/index.d.cts +0 -262
@@ -0,0 +1,512 @@
1
+ import {
2
+ agentControl,
3
+ queuedMessages
4
+ } from "../chat/run-state.js";
5
+ import { threadTabId } from "./thread-tabs.js";
6
+ const EMPTY_CHAT_STATE = {
7
+ conversationId: null,
8
+ generating: {},
9
+ paMode: false,
10
+ conversationDocuments: {},
11
+ conversationDocumentAutoAdd: {},
12
+ conversationFacts: {},
13
+ cursor: null,
14
+ suggestedQuery: null,
15
+ queuedMessages: {},
16
+ agentControlStates: {},
17
+ agentProbeAnswers: {},
18
+ agentProbePending: {},
19
+ drafts: {},
20
+ editingMessageId: null,
21
+ deepLinkMessageId: null,
22
+ activeCitationKey: null,
23
+ chatModel: void 0,
24
+ chatModelName: void 0,
25
+ newConversationAssistantMode: "always",
26
+ pendingTools: null,
27
+ autoSendDraft: false,
28
+ agentChatOwners: {},
29
+ newAgentChat: null,
30
+ newChatDocumentId: null,
31
+ messageTimers: {}
32
+ };
33
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
34
+ const isString = (v) => typeof v === "string";
35
+ const stringOrNull = (v) => isString(v) ? v : null;
36
+ const recordOf = (value, read) => {
37
+ if (!isRecord(value)) return {};
38
+ const out = {};
39
+ for (const [key, entry] of Object.entries(value)) {
40
+ const parsed = read(entry);
41
+ if (parsed !== null) out[key] = parsed;
42
+ }
43
+ return out;
44
+ };
45
+ const readDocuments = (value) => Array.isArray(value) ? value.filter((doc) => isRecord(doc) && isString(doc.docId)).map((doc) => ({ docId: doc.docId, isPinned: doc.isPinned === true })) : null;
46
+ const readFacts = (value) => Array.isArray(value) ? Array.from(new Set(value.filter(isString))) : null;
47
+ function parseSavedChat(saved) {
48
+ if (!isRecord(saved) || saved.version !== 1) return null;
49
+ return {
50
+ version: 1,
51
+ migrated: Array.isArray(saved.migrated) ? saved.migrated.filter(isString) : [],
52
+ conversationId: stringOrNull(saved.conversationId),
53
+ cursor: stringOrNull(saved.cursor),
54
+ conversationDocuments: recordOf(saved.conversationDocuments, readDocuments),
55
+ conversationDocumentAutoAdd: recordOf(
56
+ saved.conversationDocumentAutoAdd,
57
+ (v) => typeof v === "boolean" ? v : null
58
+ ),
59
+ conversationFacts: recordOf(saved.conversationFacts, readFacts),
60
+ agentChatOwners: recordOf(saved.agentChatOwners, (v) => isString(v) ? v : null),
61
+ agentChatOwnersUser: stringOrNull(saved.agentChatOwnersUser),
62
+ chatModel: stringOrNull(saved.chatModel)
63
+ };
64
+ }
65
+ function savedChatOf(state, migrated, agentChatOwnersUser = null) {
66
+ return {
67
+ version: 1,
68
+ migrated,
69
+ conversationId: state.conversationId,
70
+ cursor: state.cursor,
71
+ conversationDocuments: state.conversationDocuments,
72
+ conversationDocumentAutoAdd: { ...state.conversationDocumentAutoAdd },
73
+ conversationFacts: state.conversationFacts,
74
+ agentChatOwners: { ...state.agentChatOwners },
75
+ agentChatOwnersUser,
76
+ chatModel: state.chatModel ?? null
77
+ };
78
+ }
79
+ const SAVED_FIELDS = [
80
+ "conversationId",
81
+ "cursor",
82
+ "conversationDocuments",
83
+ "conversationDocumentAutoAdd",
84
+ "conversationFacts",
85
+ "agentChatOwners",
86
+ "chatModel"
87
+ ];
88
+ function withoutNew(record) {
89
+ const saved = { ...record };
90
+ delete saved.new;
91
+ return saved;
92
+ }
93
+ function moveKey(record, fromId, toId) {
94
+ if (!(fromId in record)) return record;
95
+ const next = { ...record, [toId]: record[fromId] };
96
+ delete next[fromId];
97
+ return next;
98
+ }
99
+ const NO_EDIT = { draft: "", cursor: null };
100
+ function createArbiChatStore({
101
+ layout,
102
+ persist,
103
+ draftStorage,
104
+ scrollTop = () => null,
105
+ user = () => draftStorage?.owner() ?? null,
106
+ initial
107
+ }) {
108
+ let state = { ...EMPTY_CHAT_STATE, ...initial };
109
+ let migrated = [];
110
+ let ownersUser = null;
111
+ let isHydrated = !persist;
112
+ const listeners = /* @__PURE__ */ new Set();
113
+ const waiting = /* @__PURE__ */ new Set();
114
+ let depth = 0;
115
+ const settle = (listener) => depth > 0 ? waiting.add(listener) : listener();
116
+ const notify = () => listeners.forEach(settle);
117
+ const batch = (change) => {
118
+ depth += 1;
119
+ try {
120
+ return change();
121
+ } finally {
122
+ depth -= 1;
123
+ if (depth === 0) {
124
+ const told = [...waiting];
125
+ waiting.clear();
126
+ told.forEach((listener) => listener());
127
+ }
128
+ }
129
+ };
130
+ const save = () => {
131
+ if (persist && isHydrated) persist.save(savedChatOf(state, migrated, ownersUser));
132
+ };
133
+ const update = (patch) => {
134
+ const next = { ...state, ...patch };
135
+ const saved = SAVED_FIELDS.some((key) => next[key] !== state[key]);
136
+ state = next;
137
+ notify();
138
+ if (saved) save();
139
+ };
140
+ let preEdit = NO_EDIT;
141
+ let draftsRestored = !draftStorage;
142
+ let restoring = false;
143
+ let draftsOwner = draftStorage?.owner() ?? null;
144
+ const setDrafts = (drafts) => {
145
+ if (drafts === state.drafts) return;
146
+ update({ drafts });
147
+ if (draftsRestored) draftStorage?.save(drafts);
148
+ };
149
+ const setDraftOf = (key, text) => {
150
+ if ((state.drafts[key] ?? "") === text) return;
151
+ const drafts = { ...state.drafts };
152
+ if (text) drafts[key] = text;
153
+ else delete drafts[key];
154
+ setDrafts(drafts);
155
+ };
156
+ const keptDrafts = (drafts) => {
157
+ const open = new Set(layout.getLayout().tabs.threads.map(threadTabId));
158
+ open.add(state.conversationId ?? "new");
159
+ const keys = Object.keys(drafts);
160
+ if (keys.every((key) => open.has(key))) return drafts;
161
+ return Object.fromEntries(keys.filter((key) => open.has(key)).map((key) => [key, drafts[key]]));
162
+ };
163
+ const restoreDrafts = () => {
164
+ if (!draftStorage) return;
165
+ const owner = draftStorage.owner();
166
+ if (owner !== draftsOwner) {
167
+ if (draftsOwner !== null) update({ drafts: {} });
168
+ draftsOwner = owner;
169
+ draftsRestored = false;
170
+ }
171
+ if (draftsRestored || restoring || owner === null) return;
172
+ restoring = true;
173
+ void Promise.all([layout.hydrated(), hydration]).then(() => draftStorage.load()).then(
174
+ (saved) => {
175
+ restoring = false;
176
+ if (!saved || draftStorage.owner() !== owner) return;
177
+ draftsRestored = true;
178
+ setDrafts(keptDrafts({ ...saved, ...state.drafts }));
179
+ draftStorage.save(state.drafts);
180
+ },
181
+ () => {
182
+ restoring = false;
183
+ }
184
+ );
185
+ };
186
+ draftStorage?.onClear(() => {
187
+ draftsRestored = false;
188
+ draftsOwner = null;
189
+ preEdit = NO_EDIT;
190
+ if (Object.keys(state.drafts).length > 0) update({ drafts: {} });
191
+ });
192
+ const composer = () => ({
193
+ conversationId: state.conversationId,
194
+ view: {
195
+ cursor: state.cursor,
196
+ editingMessageId: state.editingMessageId,
197
+ preEditDraft: state.editingMessageId ? preEdit.draft : null,
198
+ preEditCursor: state.editingMessageId ? preEdit.cursor : null,
199
+ chatModel: state.chatModel,
200
+ chatModelName: state.chatModelName,
201
+ scrollTop: scrollTop()
202
+ }
203
+ });
204
+ const show = (next) => {
205
+ if (next === null) return;
206
+ const target = next === "list" ? { conversationId: null, view: void 0 } : next;
207
+ const view = target.view;
208
+ preEdit = view ? { draft: view.preEditDraft ?? "", cursor: view.preEditCursor ?? null } : NO_EDIT;
209
+ update({
210
+ conversationId: target.conversationId,
211
+ cursor: view?.cursor ?? null,
212
+ editingMessageId: view?.editingMessageId ?? null,
213
+ chatModel: view?.chatModel,
214
+ chatModelName: view?.chatModelName
215
+ });
216
+ if (!view) setDraftOf(target.conversationId ?? "new", "");
217
+ };
218
+ const afterTabs = () => setDrafts(keptDrafts(state.drafts));
219
+ const openThreadTab = (conversationId) => batch(() => {
220
+ update(
221
+ conversationId === null ? { newAgentChat: null, newChatDocumentId: null } : { newAgentChat: null }
222
+ );
223
+ const { tabId, show: next } = layout.threads.open(conversationId, composer());
224
+ show(next);
225
+ layout.setPageTab("conversations", tabId);
226
+ afterTabs();
227
+ return tabId;
228
+ });
229
+ const hydration = persist ? persist.load().then(
230
+ (saved) => {
231
+ const parsed = parseSavedChat(saved);
232
+ if (parsed) {
233
+ migrated = parsed.migrated;
234
+ ownersUser ??= parsed.agentChatOwnersUser;
235
+ const conversationId = state.conversationId ?? parsed.conversationId;
236
+ const savedOpen = conversationId === parsed.conversationId;
237
+ state = {
238
+ ...state,
239
+ conversationId,
240
+ cursor: state.cursor ?? (savedOpen ? parsed.cursor : null),
241
+ chatModel: state.chatModel ?? (savedOpen ? parsed.chatModel ?? void 0 : void 0),
242
+ conversationDocuments: {
243
+ ...parsed.conversationDocuments,
244
+ ...state.conversationDocuments
245
+ },
246
+ conversationDocumentAutoAdd: {
247
+ ...parsed.conversationDocumentAutoAdd,
248
+ ...state.conversationDocumentAutoAdd
249
+ },
250
+ conversationFacts: { ...parsed.conversationFacts, ...state.conversationFacts },
251
+ agentChatOwners: { ...parsed.agentChatOwners, ...state.agentChatOwners }
252
+ };
253
+ }
254
+ isHydrated = true;
255
+ notify();
256
+ },
257
+ () => {
258
+ isHydrated = true;
259
+ notify();
260
+ }
261
+ ) : Promise.resolve();
262
+ void Promise.all([layout.hydrated(), hydration]).then(() => {
263
+ const { threads, activeThread } = layout.getLayout().tabs;
264
+ const tab = activeThread ? threads.find((t) => threadTabId(t) === activeThread) : null;
265
+ if (tab && state.conversationId !== tab.conversationId)
266
+ update({ conversationId: tab.conversationId });
267
+ });
268
+ const generationOf = (conversationId) => state.generating[conversationId];
269
+ const setGeneration = (conversationId, generation) => update({ generating: { ...state.generating, [conversationId]: generation } });
270
+ const stopAll = () => Object.values(state.generating).forEach((generation) => generation.abortController?.abort());
271
+ return {
272
+ getState: () => state,
273
+ subscribe: (listener) => {
274
+ listeners.add(listener);
275
+ return () => {
276
+ listeners.delete(listener);
277
+ waiting.delete(listener);
278
+ };
279
+ },
280
+ settled: (listener) => () => settle(listener),
281
+ forget: (listener) => void waiting.delete(listener),
282
+ batch,
283
+ hydrated: () => hydration,
284
+ isHydrated: () => isHydrated,
285
+ restoreDrafts,
286
+ leave: () => batch(() => {
287
+ stopAll();
288
+ preEdit = NO_EDIT;
289
+ update({
290
+ conversationId: null,
291
+ cursor: null,
292
+ editingMessageId: null,
293
+ chatModel: void 0,
294
+ chatModelName: void 0,
295
+ newConversationAssistantMode: "always",
296
+ paMode: false,
297
+ generating: {},
298
+ // Saved conversations keep their documents; the unsent new chat's belong to this workspace.
299
+ conversationDocuments: withoutNew(state.conversationDocuments),
300
+ conversationDocumentAutoAdd: withoutNew(state.conversationDocumentAutoAdd),
301
+ conversationFacts: {},
302
+ newAgentChat: null,
303
+ newChatDocumentId: null,
304
+ messageTimers: {}
305
+ });
306
+ layout.threads.clear();
307
+ setDrafts({});
308
+ }),
309
+ reset: () => batch(() => {
310
+ stopAll();
311
+ preEdit = NO_EDIT;
312
+ const signedIn = user();
313
+ const keepOwners = signedIn === null || ownersUser === null || signedIn === ownersUser;
314
+ if (signedIn !== null) ownersUser = signedIn;
315
+ update({ ...EMPTY_CHAT_STATE, agentChatOwners: keepOwners ? state.agentChatOwners : {} });
316
+ }),
317
+ setConversationId: (id) => void openThreadTab(id),
318
+ openThreadTab,
319
+ closeThreadTab: (tabId) => batch(() => {
320
+ show(layout.threads.close(tabId));
321
+ layout.setPageTab("conversations", layout.getLayout().tabs.activeThread ?? "history");
322
+ afterTabs();
323
+ }),
324
+ selectThreadTab: (tabId) => batch(() => {
325
+ if (tabId !== null) {
326
+ show(layout.threads.select(tabId, composer()));
327
+ layout.setPageTab("conversations", tabId);
328
+ return;
329
+ }
330
+ layout.threads.showList(composer());
331
+ preEdit = NO_EDIT;
332
+ update({ conversationId: null, cursor: null, editingMessageId: null });
333
+ layout.setPageTab("conversations", "history");
334
+ afterTabs();
335
+ }),
336
+ moveConversation: (fromId, toId) => batch(() => {
337
+ update({
338
+ generating: moveKey(state.generating, fromId, toId),
339
+ conversationDocuments: moveKey(state.conversationDocuments, fromId, toId),
340
+ conversationDocumentAutoAdd: moveKey(state.conversationDocumentAutoAdd, fromId, toId),
341
+ conversationFacts: moveKey(state.conversationFacts, fromId, toId),
342
+ conversationId: state.conversationId ?? toId
343
+ });
344
+ layout.threads.rename(fromId, toId);
345
+ setDrafts(moveKey(state.drafts, fromId, toId));
346
+ }),
347
+ setConversationGenerating: (conversationId, isGenerating, abortController) => {
348
+ const current = generationOf(conversationId);
349
+ setGeneration(conversationId, {
350
+ ...current,
351
+ isGenerating,
352
+ error: isGenerating ? null : current?.error ?? null,
353
+ // Starting with an explicit null means generation this client does not own (an attach to a
354
+ // run started elsewhere): it must not inherit a finished local turn's controller, or the
355
+ // view takes it for a local stream and detaches, which makes it attachable again (an
356
+ // endless loop that froze the tab after Stop). Stopping keeps the controller: the finished
357
+ // turn's bookkeeping still matches on it.
358
+ abortController: isGenerating && abortController === null ? null : abortController ?? current?.abortController ?? null,
359
+ // The run's start is set when the server names its answer (setStreamingAssistantId).
360
+ startTime: null,
361
+ streamingAssistantId: null,
362
+ ...isGenerating ? { lastFailedMessage: null, backendElapsed: null } : {}
363
+ });
364
+ },
365
+ setStreamingAssistantId: (conversationId, streamingAssistantId, startTime = Date.now()) => setGeneration(conversationId, {
366
+ ...generationOf(conversationId) ?? { isGenerating: false, error: null },
367
+ streamingAssistantId,
368
+ startTime
369
+ }),
370
+ setBackendElapsed: (conversationId, backendElapsed) => setGeneration(conversationId, {
371
+ ...generationOf(conversationId) ?? { isGenerating: false, error: null, startTime: null },
372
+ backendElapsed
373
+ }),
374
+ setConversationError: (conversationId, error, lastFailedMessage) => {
375
+ const current = generationOf(conversationId);
376
+ setGeneration(conversationId, {
377
+ ...current,
378
+ isGenerating: false,
379
+ error,
380
+ startTime: current?.startTime ?? null,
381
+ lastFailedMessage: lastFailedMessage ?? current?.lastFailedMessage ?? null
382
+ });
383
+ },
384
+ clearConversationError: (conversationId) => setGeneration(conversationId, {
385
+ ...generationOf(conversationId) ?? { isGenerating: false, startTime: null },
386
+ error: null,
387
+ lastFailedMessage: null
388
+ }),
389
+ abortConversationGeneration: (conversationId) => {
390
+ const current = generationOf(conversationId);
391
+ current?.abortController?.abort();
392
+ setGeneration(conversationId, {
393
+ ...current ?? { error: null, startTime: null },
394
+ isGenerating: false,
395
+ abortController: null
396
+ });
397
+ },
398
+ setPaMode: (paMode) => {
399
+ if (state.paMode !== paMode) update({ paMode });
400
+ },
401
+ setConversationDocuments: (conversationId, documents, autoAdd = false) => update({
402
+ conversationDocuments: { ...state.conversationDocuments, [conversationId]: documents },
403
+ conversationDocumentAutoAdd: {
404
+ ...state.conversationDocumentAutoAdd,
405
+ [conversationId]: autoAdd
406
+ }
407
+ }),
408
+ setConversationFacts: (conversationId, factIds) => update({
409
+ conversationFacts: {
410
+ ...state.conversationFacts,
411
+ [conversationId]: Array.from(new Set(factIds))
412
+ }
413
+ }),
414
+ setCursor: (cursor) => {
415
+ if (state.cursor !== cursor) update({ cursor });
416
+ },
417
+ setSuggestedQuery: (suggestedQuery) => update({ suggestedQuery }),
418
+ addQueuedMessage: (id, message) => update({ queuedMessages: queuedMessages.add(state.queuedMessages, id, message) }),
419
+ acknowledgeQueuedMessage: (clientId, serverId) => update({
420
+ queuedMessages: queuedMessages.acknowledge(state.queuedMessages, clientId, serverId)
421
+ }),
422
+ removeQueuedMessage: (clientId) => update({ queuedMessages: queuedMessages.remove(state.queuedMessages, clientId) }),
423
+ removeQueuedMessageByServerId: (serverId) => update({ queuedMessages: queuedMessages.removeByServerId(state.queuedMessages, serverId) }),
424
+ consumeQueuedMessage: (id, content) => update({ queuedMessages: queuedMessages.consume(state.queuedMessages, id, content) }),
425
+ clearQueuedMessages: (id) => update({ queuedMessages: queuedMessages.clear(state.queuedMessages, id) }),
426
+ moveQueuedMessages: (from, to) => update({ queuedMessages: queuedMessages.move(state.queuedMessages, from, to) }),
427
+ setAgentControlState: (id, control) => update(agentControl.setState(state, id, control)),
428
+ setAgentProbeAnswer: (id, probe) => update(agentControl.setProbeAnswer(state, id, probe)),
429
+ setAgentProbePending: (id, pending) => update(agentControl.setProbePending(state, id, pending)),
430
+ clearAgentControl: (id) => update(agentControl.clear(state, id)),
431
+ setDraft: (text) => setDraftOf(state.conversationId ?? "new", text),
432
+ setChatModel: (chatModel) => {
433
+ if (state.chatModel !== chatModel) update({ chatModel });
434
+ },
435
+ setChatModelName: (chatModelName) => {
436
+ if (state.chatModelName !== chatModelName) update({ chatModelName });
437
+ },
438
+ setNewConversationAssistantMode: (newConversationAssistantMode) => {
439
+ if (state.newConversationAssistantMode !== newConversationAssistantMode)
440
+ update({ newConversationAssistantMode });
441
+ },
442
+ setNewAgentChat: (newAgentChat) => {
443
+ const current = state.newAgentChat;
444
+ if (current?.agentId !== newAgentChat?.agentId || current?.workspaceId !== newAgentChat?.workspaceId)
445
+ update({ newAgentChat });
446
+ },
447
+ setNewChatDocumentId: (newChatDocumentId) => {
448
+ if (state.newChatDocumentId !== newChatDocumentId) update({ newChatDocumentId });
449
+ },
450
+ startEditing: (messageId, content) => batch(() => {
451
+ const key = state.conversationId ?? "new";
452
+ preEdit = { draft: state.drafts[key] ?? "", cursor: state.cursor };
453
+ update({ editingMessageId: messageId });
454
+ setDraftOf(key, content);
455
+ }),
456
+ cancelEditing: () => {
457
+ if (!state.editingMessageId) return;
458
+ const restore = preEdit;
459
+ preEdit = NO_EDIT;
460
+ batch(() => {
461
+ update({ editingMessageId: null, cursor: restore.cursor });
462
+ setDraftOf(state.conversationId ?? "new", restore.draft);
463
+ });
464
+ },
465
+ completeEditing: () => {
466
+ preEdit = NO_EDIT;
467
+ if (state.editingMessageId) update({ editingMessageId: null });
468
+ },
469
+ setDeepLinkMessageId: (deepLinkMessageId) => {
470
+ if (state.deepLinkMessageId !== deepLinkMessageId) update({ deepLinkMessageId });
471
+ },
472
+ setActiveCitationKey: (activeCitationKey) => {
473
+ if (state.activeCitationKey !== activeCitationKey) update({ activeCitationKey });
474
+ },
475
+ setPendingTools: (pendingTools) => update({ pendingTools }),
476
+ setAutoSendDraft: (autoSendDraft) => {
477
+ if (state.autoSendDraft !== autoSendDraft) update({ autoSendDraft });
478
+ },
479
+ setAgentChatOwner: (conversationId, agentId) => {
480
+ const signedIn = user();
481
+ ownersUser = signedIn ?? ownersUser;
482
+ update({ agentChatOwners: { ...state.agentChatOwners, [conversationId]: agentId } });
483
+ },
484
+ setMessageTimer: (key, timer) => update({ messageTimers: { ...state.messageTimers, [key]: timer } }),
485
+ clearMessageTimer: (key) => {
486
+ if (!(key in state.messageTimers)) return;
487
+ const messageTimers = { ...state.messageTimers };
488
+ delete messageTimers[key];
489
+ update({ messageTimers });
490
+ },
491
+ startNewConversation: () => batch(() => {
492
+ preEdit = NO_EDIT;
493
+ update({
494
+ conversationId: null,
495
+ cursor: null,
496
+ editingMessageId: null,
497
+ chatModel: void 0,
498
+ chatModelName: void 0,
499
+ newConversationAssistantMode: "always",
500
+ paMode: false,
501
+ newChatDocumentId: null
502
+ });
503
+ })
504
+ };
505
+ }
506
+ export {
507
+ EMPTY_CHAT_STATE,
508
+ createArbiChatStore,
509
+ parseSavedChat,
510
+ savedChatOf
511
+ };
512
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/session/chat.ts"],
4
+ "sourcesContent": ["/**\n * The session's chat state: the open conversation and its composer (line, draft, edit, model), the\n * turns running in each conversation, the documents and facts in each conversation's context, and\n * the agent bar's queue and run control. One implementation for every host: the in-memory session\n * store is built on it, and so is ARBI-frontend's (which keeps it across reloads).\n *\n * The open composer and the thread tabs move together: a thread tab change (`openThreadTab` and the\n * like) is the layout's (`layout.threads`) applied here, and readers are told once, after both have\n * moved ({@link ArbiChatStore.batch}), so none sees a tab over another tab's conversation.\n *\n * Kept across reloads (with a `persist`): the open conversation and its line, the context documents\n * and facts, each agent chat's agent and the chosen model. The drafts are kept apart, sealed to the\n * person ({@link ArbiDraftStorage}); everything else lives for the visit.\n */\n\nimport type { components } from '@arbidocs/client'\nimport type { ProbeAnswerEvent } from '@arbidocs/sdk/browser'\nimport {\n agentControl,\n queuedMessages,\n type AgentControlMaps,\n type AgentRunControlState,\n type QueuedMessage,\n type QueuedMessages,\n} from '../chat/run-state'\nimport type { ArbiDraftStorage } from './drafts'\nimport type { ArbiLayoutStore } from './layout'\nimport type { ArbiSessionPersist } from './persist'\nimport { threadTabId, type ArbiThreadComposer, type ArbiThreadTabShow } from './thread-tabs'\n\n/** Generation in one conversation. */\nexport interface ArbiConversationGeneration {\n isGenerating: boolean\n error: string | null\n /** When the running turn started (epoch ms), once the server named its answer. */\n startTime: number | null\n /** The answer being streamed (its response id), once the server named it. */\n streamingAssistantId?: string | null\n /** The server's elapsed time for the running turn (seconds). */\n backendElapsed?: number | null\n /** The question of a send that failed, for Retry. */\n lastFailedMessage?: string | null\n /** The local stream of the running turn, which Stop aborts (absent for an attached run). */\n abortController?: AbortController | null\n}\n\n/** A document in a conversation's context; a pinned one stays there across turns. */\nexport interface ArbiConversationDocument {\n docId: string\n isPinned: boolean\n}\n\n/** An answer's timer: when its run started (epoch ms) and how long it took (seconds). */\nexport interface ArbiMessageTimer {\n startTime: number\n elapsedTime: number\n}\n\n/** A send's structured tools (`MessageInput.tools`). */\nexport type TurnTools = components['schemas']['MessageInput']['tools']\n\nexport interface ArbiChatState extends AgentControlMaps {\n /** The open conversation, or null for a new one / none. */\n conversationId: string | null\n /** Generation state per conversation id. */\n generating: Readonly<Record<string, ArbiConversationGeneration>>\n /** Personal Assistant mode for new conversations. */\n paMode: boolean\n /** The documents in each conversation's context, per conversation id. */\n conversationDocuments: Readonly<Record<string, readonly ArbiConversationDocument[]>>\n /**\n * Per conversation id: true while an empty chat follows the workspace's documents (set by\n * `useDocumentAutoAdd`); any other change of its documents is a choice and turns it off.\n * Missing for a selection made before this was recorded.\n */\n conversationDocumentAutoAdd: Readonly<Record<string, boolean>>\n /** The facts in each conversation's context, per conversation id (`new` for a new chat). */\n conversationFacts: Readonly<Record<string, readonly string[]>>\n /** The message the open conversation continues from: the leaf of the line being viewed. */\n cursor: string | null\n /** A follow-up the backend suggested for a conversation, offered in its composer. */\n suggestedQuery: { conversationExtId: string; text: string } | null\n /** Follow-ups waiting in a running turn's agent bar, per response id. */\n queuedMessages: QueuedMessages\n /**\n * What is typed in each composer, per conversation id (`new` for a new chat): the open one's\n * (`selectDraft`) and each open thread tab's. A host may keep them across reloads, stored locally\n * and encrypted ({@link ArbiDraftStorage}).\n */\n drafts: Readonly<Record<string, string>>\n /** The question being edited in the open conversation (sent as a new branch), or null. */\n editingMessageId: string | null\n /** A message a link opened the conversation at: its thread opens and the view goes to it. */\n deepLinkMessageId: string | null\n /** The citation whose sources are open (`<message id>-<citation number>`), or null. */\n activeCitationKey: string | null\n /** The config (model) chosen for the open conversation; absent: the person's last one. */\n chatModel: string | undefined\n /** The model name the open conversation's picker shows (an edit or a launch sets it). */\n chatModelName: string | undefined\n /** The mode a new conversation starts in: `always` answers, `mentioned` only when @mentioned. */\n newConversationAssistantMode: 'always' | 'mentioned'\n /** Structured tools a launch wants on the next send (the send consumes them). */\n pendingTools: TurnTools | null\n /**\n * Send the open composer's draft as soon as the conversation is ready (a launch that composed it);\n * the send clears it.\n */\n autoSendDraft: boolean\n /** The owned agent each agent chat runs through, per conversation id. */\n agentChatOwners: Readonly<Record<string, string>>\n /** A new agent chat about to start: its agent and workspace. */\n newAgentChat: { agentId: string; workspaceId: string } | null\n /**\n * The document a new chat about to start is bound to (`doc-\u2026`): set only by starting a chat from\n * a document (\"Chat about this document\") or attaching it in the new chat, never by a document\n * merely being open. Starting another new chat clears it; the first turn moves it to the\n * conversation (`chat/thread-document`).\n */\n newChatDocumentId: string | null\n /** Each answer's timer, saved when it stops showing (`<conversation id>:<message id>`). */\n messageTimers: Readonly<Record<string, ArbiMessageTimer>>\n}\n\n/** The chat's changes: every session store has them (`ArbiSessionStore`). */\nexport interface ArbiChatActions {\n /** Open a conversation in its thread tab (null: a new chat), as `openThreadTab`. */\n setConversationId(id: string | null): void\n /** Start or end a conversation's turn; `abortController` is its local stream, which Stop aborts. */\n setConversationGenerating(\n conversationId: string,\n isGenerating: boolean,\n abortController?: AbortController | null\n ): void\n setPaMode(enabled: boolean): void\n /** Set a conversation's documents; `autoAdd` marks an automatic pick (default: the user's). */\n setConversationDocuments(\n conversationId: string,\n documents: ArbiConversationDocument[],\n autoAdd?: boolean\n ): void\n setConversationFacts(conversationId: string, factIds: string[]): void\n /** The answer a conversation is streaming; `startTime` defaults to now (a re-attach passes the run's). */\n setStreamingAssistantId(conversationId: string, assistantId: string, startTime?: number): void\n setBackendElapsed(conversationId: string, seconds: number): void\n /**\n * A new chat got its server id: its generation, documents, facts, draft and tab move from\n * `fromId` (`new`) to `toId`, and it stays the open conversation.\n */\n moveConversation(fromId: string, toId: string): void\n setCursor(messageId: string | null): void\n setSuggestedQuery(suggestion: ArbiChatState['suggestedQuery']): void\n addQueuedMessage(responseId: string, message: QueuedMessage): void\n acknowledgeQueuedMessage(clientId: string, serverId: string | null): void\n removeQueuedMessage(clientId: string): void\n removeQueuedMessageByServerId(serverId: string): void\n consumeQueuedMessage(responseId: string, combinedContent: string): void\n clearQueuedMessages(responseId: string): void\n moveQueuedMessages(fromResponseId: string, toResponseId: string): void\n setAgentControlState(responseId: string, state: AgentRunControlState): void\n setAgentProbeAnswer(responseId: string, probe: ProbeAnswerEvent): void\n setAgentProbePending(responseId: string, pending: boolean): void\n clearAgentControl(responseId: string): void\n /** Set what is typed in the open conversation's composer. */\n setDraft(text: string): void\n /** The config (model) the open conversation's turns use; undefined: the person's last one. */\n setChatModel(model: string | undefined): void\n setChatModelName(model: string | undefined): void\n /**\n * Show a conversation in its thread tab (null: a new chat) at its latest message, opening the tab\n * when it is not open (`tabs.threads`); it is also the Threads page's tab. Returns the tab's id.\n */\n openThreadTab(conversationId: string | null): string\n /** Close a thread tab; closing the one on screen shows the one beside it, else the thread list. */\n closeThreadTab(tabId: string): void\n /**\n * Show a thread tab's conversation with the composer it was left with, or (null) the thread list;\n * the tabs stay open.\n */\n selectThreadTab(tabId: string | null): void\n setNewConversationAssistantMode(mode: 'always' | 'mentioned'): void\n /** Start a new chat with an owned agent (null: an ordinary new chat). */\n setNewAgentChat(chat: { agentId: string; workspaceId: string } | null): void\n /** Bind the new chat to a document (null: unbound). Opening a new chat's tab clears it. */\n setNewChatDocumentId(documentId: string | null): void\n /** Edit a question: the composer holds it (its draft and line come back on cancel). */\n startEditing(messageId: string, content: string): void\n /** Leave the edit: the composer gets its draft back, and the view the line it was on. */\n cancelEditing(): void\n /** The edit was sent: leave it. */\n completeEditing(): void\n setDeepLinkMessageId(messageId: string | null): void\n setActiveCitationKey(key: string | null): void\n setPendingTools(tools: TurnTools | null): void\n setAutoSendDraft(on: boolean): void\n setAgentChatOwner(conversationId: string, agentId: string): void\n /** Save an answer's timer (`<conversation id>:<message id>`). */\n setMessageTimer(key: string, timer: ArbiMessageTimer): void\n clearMessageTimer(key: string): void\n /** A send failed: the turn stops, with the server's words and the question to retry. */\n setConversationError(\n conversationId: string,\n error: string | null,\n lastFailedMessage?: string | null\n ): void\n clearConversationError(conversationId: string): void\n /** Stop the conversation's local stream and end its turn. */\n abortConversationGeneration(conversationId: string): void\n /**\n * Leave the open conversation for a new one (its conversation was deleted): no line, edit, model\n * or document binding, Personal Assistant mode off.\n */\n startNewConversation(): void\n}\n\nexport interface ArbiChatStore extends ArbiChatActions {\n /** The current state. The same object until something in it changes. */\n getState(): ArbiChatState\n /** Be told after each change (once per batch). Returns the unsubscribe. */\n subscribe(listener: () => void): () => void\n /**\n * `listener`, told after the batch running when it is called (at once outside one): a session\n * store subscribes its readers to the layout and the rest through this, so a thread tab change\n * reaches them once.\n */\n settled(listener: () => void): () => void\n /** Drop a reader's notification still waiting for a batch to end (it unsubscribed). */\n forget(listener: () => void): void\n /** Run `change`, telling readers once when it is done. */\n batch<T>(change: () => T): T\n /** Resolves once the saved chat state has been read (at once without a `persist`). */\n hydrated(): Promise<void>\n isHydrated(): boolean\n /**\n * Bring back the saved drafts once they can be opened (the person's key is there once signed in\n * and a workspace is open); a draft typed meanwhile wins over its saved copy. Safe to call often.\n */\n restoreDrafts(): void\n /**\n * The workspace is being left: its turns stop (the server finishes them), and its conversation,\n * composers, thread tabs, facts, timers and the new chat's documents are dropped. Saved\n * conversations keep their documents.\n */\n leave(): void\n /**\n * Start over (sign-in, sign-out): everything is dropped and every running turn stopped, except\n * the agent chats' agents, which another person's sign-in drops.\n */\n reset(): void\n}\n\n/** What is kept across reloads. */\nexport interface ArbiSavedChat {\n version: 1\n /** The pieces an earlier build's own saved state was brought in for (the host's migration). */\n migrated: string[]\n conversationId: string | null\n cursor: string | null\n conversationDocuments: Record<string, ArbiConversationDocument[]>\n conversationDocumentAutoAdd: Record<string, boolean>\n conversationFacts: Record<string, string[]>\n agentChatOwners: Record<string, string>\n /** Who the agent chats belong to (null: not known, as in an earlier build's save). */\n agentChatOwnersUser: string | null\n chatModel: string | null\n}\n\nexport const EMPTY_CHAT_STATE: ArbiChatState = {\n conversationId: null,\n generating: {},\n paMode: false,\n conversationDocuments: {},\n conversationDocumentAutoAdd: {},\n conversationFacts: {},\n cursor: null,\n suggestedQuery: null,\n queuedMessages: {},\n agentControlStates: {},\n agentProbeAnswers: {},\n agentProbePending: {},\n drafts: {},\n editingMessageId: null,\n deepLinkMessageId: null,\n activeCitationKey: null,\n chatModel: undefined,\n chatModelName: undefined,\n newConversationAssistantMode: 'always',\n pendingTools: null,\n autoSendDraft: false,\n agentChatOwners: {},\n newAgentChat: null,\n newChatDocumentId: null,\n messageTimers: {},\n}\n\n// \u2500\u2500 Saving \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\nconst isString = (v: unknown): v is string => typeof v === 'string'\nconst stringOrNull = (v: unknown): string | null => (isString(v) ? v : null)\n\nconst recordOf = <T>(value: unknown, read: (entry: unknown) => T | null): Record<string, T> => {\n if (!isRecord(value)) return {}\n const out: Record<string, T> = {}\n for (const [key, entry] of Object.entries(value)) {\n const parsed = read(entry)\n if (parsed !== null) out[key] = parsed\n }\n return out\n}\n\nconst readDocuments = (value: unknown): ArbiConversationDocument[] | null =>\n Array.isArray(value)\n ? value\n .filter((doc): doc is Record<string, unknown> => isRecord(doc) && isString(doc.docId))\n .map((doc) => ({ docId: doc.docId as string, isPinned: doc.isPinned === true }))\n : null\n\nconst readFacts = (value: unknown): string[] | null =>\n Array.isArray(value) ? Array.from(new Set(value.filter(isString))) : null\n\n/**\n * A saved chat state as this build reads it: whatever an earlier or a broken save left is dropped\n * rather than read. Never throws; null when there is nothing usable.\n */\nexport function parseSavedChat(saved: unknown): ArbiSavedChat | null {\n if (!isRecord(saved) || saved.version !== 1) return null\n return {\n version: 1,\n migrated: Array.isArray(saved.migrated) ? saved.migrated.filter(isString) : [],\n conversationId: stringOrNull(saved.conversationId),\n cursor: stringOrNull(saved.cursor),\n conversationDocuments: recordOf(saved.conversationDocuments, readDocuments),\n conversationDocumentAutoAdd: recordOf(saved.conversationDocumentAutoAdd, (v) =>\n typeof v === 'boolean' ? v : null\n ),\n conversationFacts: recordOf(saved.conversationFacts, readFacts),\n agentChatOwners: recordOf(saved.agentChatOwners, (v) => (isString(v) ? v : null)),\n agentChatOwnersUser: stringOrNull(saved.agentChatOwnersUser),\n chatModel: stringOrNull(saved.chatModel),\n }\n}\n\n/** What of a chat state is saved. */\nexport function savedChatOf(\n state: ArbiChatState,\n migrated: string[],\n agentChatOwnersUser: string | null = null\n): ArbiSavedChat {\n return {\n version: 1,\n migrated,\n conversationId: state.conversationId,\n cursor: state.cursor,\n conversationDocuments: state.conversationDocuments as Record<\n string,\n ArbiConversationDocument[]\n >,\n conversationDocumentAutoAdd: { ...state.conversationDocumentAutoAdd },\n conversationFacts: state.conversationFacts as Record<string, string[]>,\n agentChatOwners: { ...state.agentChatOwners },\n agentChatOwnersUser,\n chatModel: state.chatModel ?? null,\n }\n}\n\nconst SAVED_FIELDS = [\n 'conversationId',\n 'cursor',\n 'conversationDocuments',\n 'conversationDocumentAutoAdd',\n 'conversationFacts',\n 'agentChatOwners',\n 'chatModel',\n] as const satisfies readonly (keyof ArbiChatState)[]\n\n// \u2500\u2500 The store \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface ArbiChatStoreOptions {\n /** The layout whose thread tabs the composer moves with. */\n layout: ArbiLayoutStore\n /** Keep the open conversation, the context and the model across reloads. */\n persist?: ArbiSessionPersist<ArbiSavedChat>\n /** Keep the composers' drafts across reloads (see `createSealedDraftStorage`). */\n draftStorage?: ArbiDraftStorage\n /** Where the open conversation is scrolled to, saved with its tab when another one shows. */\n scrollTop?: () => number | null\n /**\n * The signed-in user (default: the draft storage's owner). The agent chats' agents are kept over a\n * sign-in of the same person and dropped when another person signs in.\n */\n user?: () => string | null\n /** The state to start from (unit tests, a host's initial state); a saved one fills it in. */\n initial?: Partial<ArbiChatState>\n}\n\n/** A per-conversation record without the unsent new chat's entry. */\nfunction withoutNew<T>(record: Readonly<Record<string, T>>): Record<string, T> {\n const saved = { ...record }\n delete saved.new\n return saved\n}\n\n/** `record` with `fromId`'s entry under `toId` (the same record when it has none). */\nfunction moveKey<T>(\n record: Readonly<Record<string, T>>,\n fromId: string,\n toId: string\n): Readonly<Record<string, T>> {\n if (!(fromId in record)) return record\n const next = { ...record, [toId]: record[fromId] }\n delete next[fromId]\n return next\n}\n\nconst NO_EDIT = { draft: '', cursor: null as string | null }\n\nexport function createArbiChatStore({\n layout,\n persist,\n draftStorage,\n scrollTop = () => null,\n user = () => draftStorage?.owner() ?? null,\n initial,\n}: ArbiChatStoreOptions): ArbiChatStore {\n let state: ArbiChatState = { ...EMPTY_CHAT_STATE, ...initial }\n let migrated: string[] = []\n // Whose agent chats `agentChatOwners` records (null: not known yet).\n let ownersUser: string | null = null\n let isHydrated = !persist\n\n // Readers are told once per batch: a thread tab change moves the layout's tabs and the composer.\n const listeners = new Set<() => void>()\n const waiting = new Set<() => void>()\n let depth = 0\n const settle = (listener: () => void) => (depth > 0 ? waiting.add(listener) : listener())\n const notify = () => listeners.forEach(settle)\n const batch = <T>(change: () => T): T => {\n depth += 1\n try {\n return change()\n } finally {\n depth -= 1\n if (depth === 0) {\n const told = [...waiting]\n waiting.clear()\n told.forEach((listener) => listener())\n }\n }\n }\n\n const save = () => {\n // Nothing is saved before the saved state is read: it would overwrite it with the defaults.\n if (persist && isHydrated) persist.save(savedChatOf(state, migrated, ownersUser))\n }\n const update = (patch: Partial<ArbiChatState>) => {\n const next = { ...state, ...patch }\n const saved = SAVED_FIELDS.some((key) => next[key] !== state[key])\n state = next\n notify()\n if (saved) save()\n }\n\n // The draft and line the composer had when an edit began, given back when it is cancelled.\n let preEdit = NO_EDIT\n\n // \u2500\u2500 Drafts \u2500\u2500\n // The saved drafts come back once the person's key is there; nothing is written before (it would\n // replace the saved ones). Whose they are is checked on each restore: another person's never carry\n // over to the next sign-in.\n let draftsRestored = !draftStorage\n let restoring = false\n let draftsOwner = draftStorage?.owner() ?? null\n const setDrafts = (drafts: Readonly<Record<string, string>>) => {\n if (drafts === state.drafts) return\n update({ drafts })\n if (draftsRestored) draftStorage?.save(drafts)\n }\n const setDraftOf = (key: string, text: string) => {\n if ((state.drafts[key] ?? '') === text) return\n const drafts = { ...state.drafts }\n if (text) drafts[key] = text\n else delete drafts[key]\n setDrafts(drafts)\n }\n /** The drafts of the open composer and the open thread tabs; any other is gone with its tab. */\n const keptDrafts = (drafts: Readonly<Record<string, string>>) => {\n const open = new Set(layout.getLayout().tabs.threads.map(threadTabId))\n open.add(state.conversationId ?? 'new')\n const keys = Object.keys(drafts)\n if (keys.every((key) => open.has(key))) return drafts\n return Object.fromEntries(keys.filter((key) => open.has(key)).map((key) => [key, drafts[key]]))\n }\n const restoreDrafts = () => {\n if (!draftStorage) return\n const owner = draftStorage.owner()\n if (owner !== draftsOwner) {\n if (draftsOwner !== null) update({ drafts: {} })\n draftsOwner = owner\n draftsRestored = false\n }\n if (draftsRestored || restoring || owner === null) return\n restoring = true\n // The tabs are read first: their drafts come back with them.\n void Promise.all([layout.hydrated(), hydration])\n .then(() => draftStorage.load())\n .then(\n (saved) => {\n restoring = false\n if (!saved || draftStorage.owner() !== owner) return\n draftsRestored = true\n setDrafts(keptDrafts({ ...saved, ...state.drafts }))\n draftStorage.save(state.drafts)\n },\n () => {\n restoring = false\n }\n )\n }\n // The session ended: what was typed goes with it.\n draftStorage?.onClear(() => {\n draftsRestored = false\n draftsOwner = null\n preEdit = NO_EDIT\n if (Object.keys(state.drafts).length > 0) update({ drafts: {} })\n })\n\n // \u2500\u2500 The composer and the thread tabs \u2500\u2500\n const composer = (): ArbiThreadComposer => ({\n conversationId: state.conversationId,\n view: {\n cursor: state.cursor,\n editingMessageId: state.editingMessageId,\n preEditDraft: state.editingMessageId ? preEdit.draft : null,\n preEditCursor: state.editingMessageId ? preEdit.cursor : null,\n chatModel: state.chatModel,\n chatModelName: state.chatModelName,\n scrollTop: scrollTop(),\n },\n })\n /** Show what a thread tab change shows: a tab's own composer, or a fresh one (`list`: none). */\n const show = (next: ArbiThreadTabShow) => {\n if (next === null) return\n const target = next === 'list' ? { conversationId: null, view: undefined } : next\n const view = target.view\n preEdit = view\n ? { draft: view.preEditDraft ?? '', cursor: view.preEditCursor ?? null }\n : NO_EDIT\n update({\n conversationId: target.conversationId,\n cursor: view?.cursor ?? null,\n editingMessageId: view?.editingMessageId ?? null,\n chatModel: view?.chatModel,\n chatModelName: view?.chatModelName,\n })\n // A conversation opened afresh starts with an empty composer.\n if (!view) setDraftOf(target.conversationId ?? 'new', '')\n }\n const afterTabs = () => setDrafts(keptDrafts(state.drafts))\n const openThreadTab = (conversationId: string | null): string =>\n batch(() => {\n // Starting a new chat starts it unbound, whatever document is open.\n update(\n conversationId === null\n ? { newAgentChat: null, newChatDocumentId: null }\n : { newAgentChat: null }\n )\n const { tabId, show: next } = layout.threads.open(conversationId, composer())\n show(next)\n layout.setPageTab('conversations', tabId)\n afterTabs()\n return tabId\n })\n\n // \u2500\u2500 Hydration \u2500\u2500\n const hydration: Promise<void> = persist\n ? persist.load().then(\n (saved) => {\n const parsed = parseSavedChat(saved)\n if (parsed) {\n migrated = parsed.migrated\n ownersUser ??= parsed.agentChatOwnersUser\n // What changed before the save was read stays. The saved line and model are the saved\n // conversation's: another conversation opened meanwhile does not inherit them.\n const conversationId = state.conversationId ?? parsed.conversationId\n const savedOpen = conversationId === parsed.conversationId\n state = {\n ...state,\n conversationId,\n cursor: state.cursor ?? (savedOpen ? parsed.cursor : null),\n chatModel:\n state.chatModel ?? (savedOpen ? (parsed.chatModel ?? undefined) : undefined),\n conversationDocuments: {\n ...parsed.conversationDocuments,\n ...state.conversationDocuments,\n },\n conversationDocumentAutoAdd: {\n ...parsed.conversationDocumentAutoAdd,\n ...state.conversationDocumentAutoAdd,\n },\n conversationFacts: { ...parsed.conversationFacts, ...state.conversationFacts },\n agentChatOwners: { ...parsed.agentChatOwners, ...state.agentChatOwners },\n }\n }\n isHydrated = true\n notify()\n },\n () => {\n isHydrated = true\n notify()\n }\n )\n : Promise.resolve()\n\n // An active thread tab shows its own conversation: an earlier build could save a thread's tab as\n // active with the conversation cleared (its title over an empty chat on every load). Once both the\n // tabs and the saved conversation are read, the conversation follows the tab.\n void Promise.all([layout.hydrated(), hydration]).then(() => {\n const { threads, activeThread } = layout.getLayout().tabs\n const tab = activeThread ? threads.find((t) => threadTabId(t) === activeThread) : null\n if (tab && state.conversationId !== tab.conversationId)\n update({ conversationId: tab.conversationId })\n })\n\n const generationOf = (conversationId: string) => state.generating[conversationId]\n const setGeneration = (conversationId: string, generation: ArbiConversationGeneration) =>\n update({ generating: { ...state.generating, [conversationId]: generation } })\n const stopAll = () =>\n Object.values(state.generating).forEach((generation) => generation.abortController?.abort())\n\n return {\n getState: () => state,\n subscribe: (listener) => {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n waiting.delete(listener)\n }\n },\n settled: (listener) => () => settle(listener),\n forget: (listener) => void waiting.delete(listener),\n batch,\n hydrated: () => hydration,\n isHydrated: () => isHydrated,\n restoreDrafts,\n leave: () =>\n batch(() => {\n stopAll()\n preEdit = NO_EDIT\n update({\n conversationId: null,\n cursor: null,\n editingMessageId: null,\n chatModel: undefined,\n chatModelName: undefined,\n newConversationAssistantMode: 'always',\n paMode: false,\n generating: {},\n // Saved conversations keep their documents; the unsent new chat's belong to this workspace.\n conversationDocuments: withoutNew(state.conversationDocuments),\n conversationDocumentAutoAdd: withoutNew(state.conversationDocumentAutoAdd),\n conversationFacts: {},\n newAgentChat: null,\n newChatDocumentId: null,\n messageTimers: {},\n })\n layout.threads.clear()\n // The composers were this workspace's.\n setDrafts({})\n }),\n reset: () =>\n batch(() => {\n stopAll()\n preEdit = NO_EDIT\n // What was typed is the person's: their sealed copy goes with their session (sign-out).\n // The agent chats' agents stay unless another person signs in: an agent chat opened again\n // after the same person signs back in must still reach its agent.\n const signedIn = user()\n const keepOwners = signedIn === null || ownersUser === null || signedIn === ownersUser\n if (signedIn !== null) ownersUser = signedIn\n update({ ...EMPTY_CHAT_STATE, agentChatOwners: keepOwners ? state.agentChatOwners : {} })\n }),\n setConversationId: (id) => void openThreadTab(id),\n openThreadTab,\n closeThreadTab: (tabId) =>\n batch(() => {\n show(layout.threads.close(tabId))\n layout.setPageTab('conversations', layout.getLayout().tabs.activeThread ?? 'history')\n afterTabs()\n }),\n selectThreadTab: (tabId) =>\n batch(() => {\n if (tabId !== null) {\n show(layout.threads.select(tabId, composer()))\n layout.setPageTab('conversations', tabId)\n return\n }\n // The list leaves the open thread (so the URL is the list's); its tab keeps its composer.\n layout.threads.showList(composer())\n preEdit = NO_EDIT\n update({ conversationId: null, cursor: null, editingMessageId: null })\n layout.setPageTab('conversations', 'history')\n afterTabs()\n }),\n moveConversation: (fromId, toId) =>\n batch(() => {\n update({\n generating: moveKey(state.generating, fromId, toId),\n conversationDocuments: moveKey(state.conversationDocuments, fromId, toId),\n conversationDocumentAutoAdd: moveKey(state.conversationDocumentAutoAdd, fromId, toId),\n conversationFacts: moveKey(state.conversationFacts, fromId, toId),\n conversationId: state.conversationId ?? toId,\n })\n // The new chat's tab is now the conversation's, and what is typed stays where it was typed.\n layout.threads.rename(fromId, toId)\n setDrafts(moveKey(state.drafts, fromId, toId))\n }),\n setConversationGenerating: (conversationId, isGenerating, abortController) => {\n const current = generationOf(conversationId)\n setGeneration(conversationId, {\n ...current,\n isGenerating,\n error: isGenerating ? null : (current?.error ?? null),\n // Starting with an explicit null means generation this client does not own (an attach to a\n // run started elsewhere): it must not inherit a finished local turn's controller, or the\n // view takes it for a local stream and detaches, which makes it attachable again (an\n // endless loop that froze the tab after Stop). Stopping keeps the controller: the finished\n // turn's bookkeeping still matches on it.\n abortController:\n isGenerating && abortController === null\n ? null\n : (abortController ?? current?.abortController ?? null),\n // The run's start is set when the server names its answer (setStreamingAssistantId).\n startTime: null,\n streamingAssistantId: null,\n ...(isGenerating ? { lastFailedMessage: null, backendElapsed: null } : {}),\n })\n },\n setStreamingAssistantId: (conversationId, streamingAssistantId, startTime = Date.now()) =>\n setGeneration(conversationId, {\n ...(generationOf(conversationId) ?? { isGenerating: false, error: null }),\n streamingAssistantId,\n startTime,\n }),\n setBackendElapsed: (conversationId, backendElapsed) =>\n setGeneration(conversationId, {\n ...(generationOf(conversationId) ?? { isGenerating: false, error: null, startTime: null }),\n backendElapsed,\n }),\n setConversationError: (conversationId, error, lastFailedMessage) => {\n const current = generationOf(conversationId)\n setGeneration(conversationId, {\n ...current,\n isGenerating: false,\n error,\n startTime: current?.startTime ?? null,\n lastFailedMessage: lastFailedMessage ?? current?.lastFailedMessage ?? null,\n })\n },\n clearConversationError: (conversationId) =>\n setGeneration(conversationId, {\n ...(generationOf(conversationId) ?? { isGenerating: false, startTime: null }),\n error: null,\n lastFailedMessage: null,\n }),\n abortConversationGeneration: (conversationId) => {\n const current = generationOf(conversationId)\n current?.abortController?.abort()\n setGeneration(conversationId, {\n ...(current ?? { error: null, startTime: null }),\n isGenerating: false,\n abortController: null,\n })\n },\n setPaMode: (paMode) => {\n if (state.paMode !== paMode) update({ paMode })\n },\n setConversationDocuments: (conversationId, documents, autoAdd = false) =>\n update({\n conversationDocuments: { ...state.conversationDocuments, [conversationId]: documents },\n conversationDocumentAutoAdd: {\n ...state.conversationDocumentAutoAdd,\n [conversationId]: autoAdd,\n },\n }),\n setConversationFacts: (conversationId, factIds) =>\n update({\n conversationFacts: {\n ...state.conversationFacts,\n [conversationId]: Array.from(new Set(factIds)),\n },\n }),\n setCursor: (cursor) => {\n if (state.cursor !== cursor) update({ cursor })\n },\n setSuggestedQuery: (suggestedQuery) => update({ suggestedQuery }),\n addQueuedMessage: (id, message) =>\n update({ queuedMessages: queuedMessages.add(state.queuedMessages, id, message) }),\n acknowledgeQueuedMessage: (clientId, serverId) =>\n update({\n queuedMessages: queuedMessages.acknowledge(state.queuedMessages, clientId, serverId),\n }),\n removeQueuedMessage: (clientId) =>\n update({ queuedMessages: queuedMessages.remove(state.queuedMessages, clientId) }),\n removeQueuedMessageByServerId: (serverId) =>\n update({ queuedMessages: queuedMessages.removeByServerId(state.queuedMessages, serverId) }),\n consumeQueuedMessage: (id, content) =>\n update({ queuedMessages: queuedMessages.consume(state.queuedMessages, id, content) }),\n clearQueuedMessages: (id) =>\n update({ queuedMessages: queuedMessages.clear(state.queuedMessages, id) }),\n moveQueuedMessages: (from, to) =>\n update({ queuedMessages: queuedMessages.move(state.queuedMessages, from, to) }),\n setAgentControlState: (id, control) => update(agentControl.setState(state, id, control)),\n setAgentProbeAnswer: (id, probe) => update(agentControl.setProbeAnswer(state, id, probe)),\n setAgentProbePending: (id, pending) => update(agentControl.setProbePending(state, id, pending)),\n clearAgentControl: (id) => update(agentControl.clear(state, id)),\n setDraft: (text) => setDraftOf(state.conversationId ?? 'new', text),\n setChatModel: (chatModel) => {\n if (state.chatModel !== chatModel) update({ chatModel })\n },\n setChatModelName: (chatModelName) => {\n if (state.chatModelName !== chatModelName) update({ chatModelName })\n },\n setNewConversationAssistantMode: (newConversationAssistantMode) => {\n if (state.newConversationAssistantMode !== newConversationAssistantMode)\n update({ newConversationAssistantMode })\n },\n setNewAgentChat: (newAgentChat) => {\n const current = state.newAgentChat\n if (\n current?.agentId !== newAgentChat?.agentId ||\n current?.workspaceId !== newAgentChat?.workspaceId\n )\n update({ newAgentChat })\n },\n setNewChatDocumentId: (newChatDocumentId) => {\n if (state.newChatDocumentId !== newChatDocumentId) update({ newChatDocumentId })\n },\n startEditing: (messageId, content) =>\n batch(() => {\n const key = state.conversationId ?? 'new'\n preEdit = { draft: state.drafts[key] ?? '', cursor: state.cursor }\n update({ editingMessageId: messageId })\n setDraftOf(key, content)\n }),\n cancelEditing: () => {\n if (!state.editingMessageId) return\n const restore = preEdit\n preEdit = NO_EDIT\n batch(() => {\n update({ editingMessageId: null, cursor: restore.cursor })\n setDraftOf(state.conversationId ?? 'new', restore.draft)\n })\n },\n completeEditing: () => {\n preEdit = NO_EDIT\n if (state.editingMessageId) update({ editingMessageId: null })\n },\n setDeepLinkMessageId: (deepLinkMessageId) => {\n if (state.deepLinkMessageId !== deepLinkMessageId) update({ deepLinkMessageId })\n },\n setActiveCitationKey: (activeCitationKey) => {\n if (state.activeCitationKey !== activeCitationKey) update({ activeCitationKey })\n },\n setPendingTools: (pendingTools) => update({ pendingTools }),\n setAutoSendDraft: (autoSendDraft) => {\n if (state.autoSendDraft !== autoSendDraft) update({ autoSendDraft })\n },\n setAgentChatOwner: (conversationId, agentId) => {\n const signedIn = user()\n ownersUser = signedIn ?? ownersUser\n update({ agentChatOwners: { ...state.agentChatOwners, [conversationId]: agentId } })\n },\n setMessageTimer: (key, timer) =>\n update({ messageTimers: { ...state.messageTimers, [key]: timer } }),\n clearMessageTimer: (key) => {\n if (!(key in state.messageTimers)) return\n const messageTimers = { ...state.messageTimers }\n delete messageTimers[key]\n update({ messageTimers })\n },\n startNewConversation: () =>\n batch(() => {\n preEdit = NO_EDIT\n update({\n conversationId: null,\n cursor: null,\n editingMessageId: null,\n chatModel: undefined,\n chatModelName: undefined,\n newConversationAssistantMode: 'always',\n paMode: false,\n newChatDocumentId: null,\n })\n }),\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }