@athenaintel/react 0.28.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (761) hide show
  1. package/README.md +418 -10
  2. package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
  3. package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
  4. package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
  5. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  6. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  7. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  8. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  9. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  10. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  11. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  12. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  13. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  14. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  15. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  16. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  17. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  18. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  19. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  20. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  21. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  22. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  23. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  24. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  25. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  27. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  29. package/dist/agent-runtime/src/errors.js.map +1 -0
  30. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  31. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  32. package/dist/agent-runtime/src/execute-output.js +41 -0
  33. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +10 -2
  35. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +10 -2
  37. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  38. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  39. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  40. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  41. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  43. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  44. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  45. package/dist/agent-runtime/src/message-author.js.map +1 -0
  46. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  47. package/dist/agent-runtime/src/message-window.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  49. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  51. package/dist/agent-runtime/src/messages.js.map +1 -0
  52. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  53. package/dist/agent-runtime/src/model-context.js.map +1 -0
  54. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  55. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  56. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  57. package/dist/agent-runtime/src/protocol.js.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  59. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  60. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  61. package/dist/agent-runtime/src/queue.js.map +1 -0
  62. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +23 -13
  63. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  64. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +24 -14
  65. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  66. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  67. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  68. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  69. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  70. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  71. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  72. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  73. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  74. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  75. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  76. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  77. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  78. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  79. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  80. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  81. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  82. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  83. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  84. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  85. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  86. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  87. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  88. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  89. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  90. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  91. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  92. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  93. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  94. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  95. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  96. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  97. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  98. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +279 -3
  99. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  100. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +279 -3
  101. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  102. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  103. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  104. package/dist/agent-runtime/src/tool-names.js +5 -0
  105. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  106. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  107. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  108. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  109. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  110. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  111. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  112. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  113. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  114. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  115. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  116. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  117. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  119. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  120. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  121. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  122. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  123. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  124. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  125. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  126. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  127. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  128. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  129. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  130. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  131. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  133. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  135. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  136. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  137. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  138. package/dist/assets/AthenaAssetEmbed.cjs +8 -2
  139. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  140. package/dist/assets/AthenaAssetEmbed.d.ts +8 -0
  141. package/dist/assets/AthenaAssetEmbed.js +8 -2
  142. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  143. package/dist/assets/AthenaLayout.cjs +97 -31
  144. package/dist/assets/AthenaLayout.cjs.map +1 -1
  145. package/dist/assets/AthenaLayout.d.ts +13 -0
  146. package/dist/assets/AthenaLayout.js +98 -32
  147. package/dist/assets/AthenaLayout.js.map +1 -1
  148. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  149. package/dist/assets/asset-embed-messages.d.ts +6 -0
  150. package/dist/assets/asset-embed-messages.js.map +1 -1
  151. package/dist/assets/asset-panel-store.cjs +68 -32
  152. package/dist/assets/asset-panel-store.cjs.map +1 -1
  153. package/dist/assets/asset-panel-store.d.ts +47 -1
  154. package/dist/assets/asset-panel-store.js +68 -32
  155. package/dist/assets/asset-panel-store.js.map +1 -1
  156. package/dist/assets/use-asset-embed.cjs +29 -8
  157. package/dist/assets/use-asset-embed.cjs.map +1 -1
  158. package/dist/assets/use-asset-embed.d.ts +7 -0
  159. package/dist/assets/use-asset-embed.js +29 -8
  160. package/dist/assets/use-asset-embed.js.map +1 -1
  161. package/dist/catalog/chat-pickers.cjs +152 -0
  162. package/dist/catalog/chat-pickers.cjs.map +1 -0
  163. package/dist/catalog/chat-pickers.d.ts +22 -0
  164. package/dist/catalog/chat-pickers.js +152 -0
  165. package/dist/catalog/chat-pickers.js.map +1 -0
  166. package/dist/catalog/runtime-catalog.cjs +181 -0
  167. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  168. package/dist/catalog/runtime-catalog.d.ts +100 -0
  169. package/dist/catalog/runtime-catalog.js +181 -0
  170. package/dist/catalog/runtime-catalog.js.map +1 -0
  171. package/dist/chat/AthenaChat.cjs +86 -46
  172. package/dist/chat/AthenaChat.cjs.map +1 -1
  173. package/dist/chat/AthenaChat.d.ts +21 -4
  174. package/dist/chat/AthenaChat.js +88 -48
  175. package/dist/chat/AthenaChat.js.map +1 -1
  176. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  177. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  178. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  179. package/dist/chat/StatewireApprovalCard.js +39 -38
  180. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  181. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  182. package/dist/chat/StatewireClientToolBridge.js +2 -2
  183. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  184. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  185. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  186. package/dist/chat/StatewireQueuedMessages.js +15 -12
  187. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  188. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  189. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  190. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  191. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  192. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  193. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  194. package/dist/chat/WaitingOnYouBanner.js +2 -2
  195. package/dist/chat/athena-citation-links.cjs +19 -15
  196. package/dist/chat/athena-citation-links.cjs.map +1 -1
  197. package/dist/chat/athena-citation-links.js +19 -15
  198. package/dist/chat/athena-citation-links.js.map +1 -1
  199. package/dist/chat/run-activity.cjs +9 -1
  200. package/dist/chat/run-activity.cjs.map +1 -1
  201. package/dist/chat/run-activity.d.ts +6 -0
  202. package/dist/chat/run-activity.js +10 -2
  203. package/dist/chat/run-activity.js.map +1 -1
  204. package/dist/chat/statewire-banners.cjs +30 -1
  205. package/dist/chat/statewire-banners.cjs.map +1 -1
  206. package/dist/chat/statewire-banners.d.ts +20 -1
  207. package/dist/chat/statewire-banners.js +32 -3
  208. package/dist/chat/statewire-banners.js.map +1 -1
  209. package/dist/chat/statewire-client-tools.cjs +1 -1
  210. package/dist/chat/statewire-client-tools.js +1 -1
  211. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  212. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  213. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  214. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  215. package/dist/chat/super-grouping/SuperGroupingCard.cjs +7 -5
  216. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  217. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +8 -2
  218. package/dist/chat/super-grouping/SuperGroupingCard.js +7 -5
  219. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  220. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +350 -0
  221. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  222. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  223. package/dist/chat/super-grouping/SuperGroupingTranscript.js +350 -0
  224. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  225. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  226. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  227. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  228. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  229. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  230. package/dist/chat/super-grouping/activity-timeline.cjs +51 -26
  231. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  232. package/dist/chat/super-grouping/activity-timeline.d.ts +40 -8
  233. package/dist/chat/super-grouping/activity-timeline.js +52 -27
  234. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  235. package/dist/chat/super-grouping/index.cjs +12 -0
  236. package/dist/chat/super-grouping/index.cjs.map +1 -1
  237. package/dist/chat/super-grouping/index.d.ts +7 -2
  238. package/dist/chat/super-grouping/index.js +14 -2
  239. package/dist/chat/super-grouping/index.js.map +1 -1
  240. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  241. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  242. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  243. package/dist/chat/super-grouping/timeline-step.js +15 -6
  244. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  245. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  246. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  247. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  248. package/dist/chat/super-grouping/turn-segments.js +82 -0
  249. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  250. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  251. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  252. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  253. package/dist/chat/super-grouping/turn-timing.js +110 -0
  254. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  255. package/dist/chat/tiptap-text.cjs +1 -1
  256. package/dist/chat/tiptap-text.js +1 -1
  257. package/dist/chat/use-athena-run-live.cjs +1 -1
  258. package/dist/chat/use-athena-run-live.js +1 -1
  259. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  260. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  261. package/dist/chat/use-statewire-approval-request.js +74 -5
  262. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  263. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  264. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  265. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  266. package/dist/chat-ui/composer/composer-message.js +284 -0
  267. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  268. package/dist/chat-ui/composer/tiptap-composer.cjs +57 -11
  269. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  270. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  271. package/dist/chat-ui/composer/tiptap-composer.js +57 -11
  272. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  273. package/dist/chat-ui/index.cjs +4 -1
  274. package/dist/chat-ui/index.cjs.map +1 -1
  275. package/dist/chat-ui/index.d.ts +3 -2
  276. package/dist/chat-ui/index.js +5 -2
  277. package/dist/chat-ui/index.js.map +1 -1
  278. package/dist/chat-ui/mentions/mention-chip.cjs +3 -2
  279. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  280. package/dist/chat-ui/mentions/mention-chip.js +4 -3
  281. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  282. package/dist/chat-ui/mentions/mention-extension.cjs +8 -2
  283. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  284. package/dist/chat-ui/mentions/mention-extension.js +8 -2
  285. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  286. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  287. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  288. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  289. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  290. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  291. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  292. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  293. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  294. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  295. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  296. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  297. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  298. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  299. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  300. package/dist/chat-ui/messages/message-components.cjs +30 -10
  301. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  302. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  303. package/dist/chat-ui/messages/message-components.js +30 -10
  304. package/dist/chat-ui/messages/message-components.js.map +1 -1
  305. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  306. package/dist/chat-ui/messages/runtime-message.js +1 -1
  307. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  308. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  309. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  310. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  311. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  312. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  313. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  314. package/dist/chat-ui/messages/wake-marker.js +40 -5
  315. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  316. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  317. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  318. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  319. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  320. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  321. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  322. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  323. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  324. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  325. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  326. package/dist/chat-ui/statewire.cjs +1 -1
  327. package/dist/chat-ui/statewire.d.ts +1 -1
  328. package/dist/chat-ui/statewire.js +1 -1
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  330. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  331. package/dist/collab/client.cjs +218 -13
  332. package/dist/collab/client.cjs.map +1 -1
  333. package/dist/collab/client.d.ts +105 -2
  334. package/dist/collab/client.js +221 -17
  335. package/dist/collab/client.js.map +1 -1
  336. package/dist/collab/index.cjs +2 -0
  337. package/dist/collab/index.cjs.map +1 -1
  338. package/dist/collab/index.d.ts +1 -1
  339. package/dist/collab/index.js +3 -1
  340. package/dist/composer/AttachmentContext.cjs +38 -12
  341. package/dist/composer/AttachmentContext.cjs.map +1 -1
  342. package/dist/composer/AttachmentContext.d.ts +22 -1
  343. package/dist/composer/AttachmentContext.js +40 -14
  344. package/dist/composer/AttachmentContext.js.map +1 -1
  345. package/dist/composer/QuoteContext.cjs +80 -28
  346. package/dist/composer/QuoteContext.cjs.map +1 -1
  347. package/dist/composer/QuoteContext.d.ts +35 -6
  348. package/dist/composer/QuoteContext.js +82 -30
  349. package/dist/composer/QuoteContext.js.map +1 -1
  350. package/dist/composer/build-composed-message.cjs +27 -0
  351. package/dist/composer/build-composed-message.cjs.map +1 -1
  352. package/dist/composer/build-composed-message.d.ts +21 -0
  353. package/dist/composer/build-composed-message.js +28 -1
  354. package/dist/composer/build-composed-message.js.map +1 -1
  355. package/dist/composer/composer-handoff.cjs +13 -1
  356. package/dist/composer/composer-handoff.cjs.map +1 -1
  357. package/dist/composer/composer-handoff.d.ts +12 -0
  358. package/dist/composer/composer-handoff.js +15 -3
  359. package/dist/composer/composer-handoff.js.map +1 -1
  360. package/dist/composer/index.d.ts +6 -3
  361. package/dist/composer/useReadComposerDraft.cjs +16 -0
  362. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  363. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  364. package/dist/composer/useReadComposerDraft.js +16 -0
  365. package/dist/composer/useReadComposerDraft.js.map +1 -0
  366. package/dist/diagnostics/errors.cjs +6 -0
  367. package/dist/diagnostics/errors.cjs.map +1 -1
  368. package/dist/diagnostics/errors.d.ts +6 -0
  369. package/dist/diagnostics/errors.js +6 -0
  370. package/dist/diagnostics/errors.js.map +1 -1
  371. package/dist/index.cjs +159 -7
  372. package/dist/index.cjs.map +1 -1
  373. package/dist/index.d.ts +53 -12
  374. package/dist/index.js +166 -14
  375. package/dist/index.js.map +1 -1
  376. package/dist/lib/owner-document.cjs +32 -0
  377. package/dist/lib/owner-document.cjs.map +1 -0
  378. package/dist/lib/owner-document.d.ts +17 -0
  379. package/dist/lib/owner-document.js +32 -0
  380. package/dist/lib/owner-document.js.map +1 -0
  381. package/dist/lib/portal-surface.cjs +55 -0
  382. package/dist/lib/portal-surface.cjs.map +1 -0
  383. package/dist/lib/portal-surface.d.ts +37 -0
  384. package/dist/lib/portal-surface.js +55 -0
  385. package/dist/lib/portal-surface.js.map +1 -0
  386. package/dist/lib/use-athena-rest-query.cjs +34 -0
  387. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  388. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  389. package/dist/lib/use-athena-rest-query.js +34 -0
  390. package/dist/lib/use-athena-rest-query.js.map +1 -0
  391. package/dist/provider/AthenaProvider.cjs +36 -6
  392. package/dist/provider/AthenaProvider.cjs.map +1 -1
  393. package/dist/provider/AthenaProvider.d.ts +20 -1
  394. package/dist/provider/AthenaProvider.js +38 -8
  395. package/dist/provider/AthenaProvider.js.map +1 -1
  396. package/dist/provider/citation-links.d.ts +10 -2
  397. package/dist/{packages/react → react}/package.json.cjs +1 -1
  398. package/dist/{packages/react → react}/package.json.js +1 -1
  399. package/dist/runtime/statewire-lifecycle.cjs +15 -3
  400. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  401. package/dist/runtime/statewire-lifecycle.d.ts +6 -0
  402. package/dist/runtime/statewire-lifecycle.js +15 -3
  403. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  404. package/dist/runtime/useAthenaStatewireRuntime.cjs +11 -7
  405. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  406. package/dist/runtime/useAthenaStatewireRuntime.js +11 -7
  407. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  408. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  409. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  410. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  411. package/dist/search/useAthenaRepoSearch.js +6 -14
  412. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  413. package/dist/sheet-range/a1.cjs +162 -0
  414. package/dist/sheet-range/a1.cjs.map +1 -0
  415. package/dist/sheet-range/a1.d.ts +91 -0
  416. package/dist/sheet-range/a1.js +162 -0
  417. package/dist/sheet-range/a1.js.map +1 -0
  418. package/dist/sheet-range/index.cjs +22 -0
  419. package/dist/sheet-range/index.cjs.map +1 -0
  420. package/dist/sheet-range/index.d.ts +12 -0
  421. package/dist/sheet-range/index.js +22 -0
  422. package/dist/sheet-range/index.js.map +1 -0
  423. package/dist/sheet-range/range-preview-table.cjs +75 -0
  424. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  425. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  426. package/dist/sheet-range/range-preview-table.js +75 -0
  427. package/dist/sheet-range/range-preview-table.js.map +1 -0
  428. package/dist/sheet-range/range-preview.cjs +116 -0
  429. package/dist/sheet-range/range-preview.cjs.map +1 -0
  430. package/dist/sheet-range/range-preview.d.ts +67 -0
  431. package/dist/sheet-range/range-preview.js +116 -0
  432. package/dist/sheet-range/range-preview.js.map +1 -0
  433. package/dist/styles.css +1 -1
  434. package/dist/threads/Inbox.cjs +289 -0
  435. package/dist/threads/Inbox.cjs.map +1 -0
  436. package/dist/threads/Inbox.d.ts +46 -0
  437. package/dist/threads/Inbox.js +289 -0
  438. package/dist/threads/Inbox.js.map +1 -0
  439. package/dist/threads/SessionList.cjs +51 -126
  440. package/dist/threads/SessionList.cjs.map +1 -1
  441. package/dist/threads/SessionList.d.ts +26 -1
  442. package/dist/threads/SessionList.js +45 -120
  443. package/dist/threads/SessionList.js.map +1 -1
  444. package/dist/threads/SessionsPage.cjs +753 -0
  445. package/dist/threads/SessionsPage.cjs.map +1 -0
  446. package/dist/threads/SessionsPage.d.ts +35 -0
  447. package/dist/threads/SessionsPage.js +753 -0
  448. package/dist/threads/SessionsPage.js.map +1 -0
  449. package/dist/threads/api.cjs +21 -1
  450. package/dist/threads/api.cjs.map +1 -1
  451. package/dist/threads/api.d.ts +59 -0
  452. package/dist/threads/api.js +21 -1
  453. package/dist/threads/api.js.map +1 -1
  454. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  455. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  456. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  457. package/dist/threads/conversation-list-fetcher.js +9 -2
  458. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  459. package/dist/threads/index.d.ts +2 -1
  460. package/dist/threads/pull-request-display.cjs +25 -0
  461. package/dist/threads/pull-request-display.cjs.map +1 -0
  462. package/dist/threads/pull-request-display.d.ts +15 -0
  463. package/dist/threads/pull-request-display.js +25 -0
  464. package/dist/threads/pull-request-display.js.map +1 -0
  465. package/dist/threads/session-list-model.cjs +16 -2
  466. package/dist/threads/session-list-model.cjs.map +1 -1
  467. package/dist/threads/session-list-model.d.ts +10 -0
  468. package/dist/threads/session-list-model.js +16 -2
  469. package/dist/threads/session-list-model.js.map +1 -1
  470. package/dist/threads/session-row-parts.cjs +152 -0
  471. package/dist/threads/session-row-parts.cjs.map +1 -0
  472. package/dist/threads/session-row-parts.d.ts +50 -0
  473. package/dist/threads/session-row-parts.js +152 -0
  474. package/dist/threads/session-row-parts.js.map +1 -0
  475. package/dist/threads/sessions-page-model.cjs +305 -0
  476. package/dist/threads/sessions-page-model.cjs.map +1 -0
  477. package/dist/threads/sessions-page-model.d.ts +86 -0
  478. package/dist/threads/sessions-page-model.js +305 -0
  479. package/dist/threads/sessions-page-model.js.map +1 -0
  480. package/dist/threads/sessions-page-storage.cjs +93 -0
  481. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  482. package/dist/threads/sessions-page-storage.d.ts +23 -0
  483. package/dist/threads/sessions-page-storage.js +93 -0
  484. package/dist/threads/sessions-page-storage.js.map +1 -0
  485. package/dist/threads/sessions-query.cjs +235 -0
  486. package/dist/threads/sessions-query.cjs.map +1 -0
  487. package/dist/threads/sessions-query.d.ts +119 -0
  488. package/dist/threads/sessions-query.js +235 -0
  489. package/dist/threads/sessions-query.js.map +1 -0
  490. package/dist/threads/statewire-thread-list.cjs +133 -40
  491. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  492. package/dist/threads/statewire-thread-list.d.ts +83 -2
  493. package/dist/threads/statewire-thread-list.js +134 -41
  494. package/dist/threads/statewire-thread-list.js.map +1 -1
  495. package/dist/threads/use-athena-sessions.cjs +198 -0
  496. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  497. package/dist/threads/use-athena-sessions.d.ts +81 -0
  498. package/dist/threads/use-athena-sessions.js +198 -0
  499. package/dist/threads/use-athena-sessions.js.map +1 -0
  500. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  501. package/dist/threads/use-rest-conversation-history.js +1 -1
  502. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  503. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  504. package/dist/threads/use-statewire-conversation-history.js +1 -1
  505. package/dist/threads/use-thread-read-state.cjs +73 -0
  506. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  507. package/dist/threads/use-thread-read-state.d.ts +51 -0
  508. package/dist/threads/use-thread-read-state.js +73 -0
  509. package/dist/threads/use-thread-read-state.js.map +1 -0
  510. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  511. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  512. package/dist/tools/auto-open-tools.cjs +2 -0
  513. package/dist/tools/auto-open-tools.cjs.map +1 -1
  514. package/dist/tools/auto-open-tools.js +2 -0
  515. package/dist/tools/auto-open-tools.js.map +1 -1
  516. package/dist/tools/file-tool-uis.cjs +18 -43
  517. package/dist/tools/file-tool-uis.cjs.map +1 -1
  518. package/dist/tools/file-tool-uis.d.ts +1 -2
  519. package/dist/tools/file-tool-uis.js +18 -42
  520. package/dist/tools/file-tool-uis.js.map +1 -1
  521. package/dist/tools/index.cjs +6 -2
  522. package/dist/tools/index.cjs.map +1 -1
  523. package/dist/tools/index.d.ts +1 -0
  524. package/dist/tools/index.js +6 -2
  525. package/dist/tools/index.js.map +1 -1
  526. package/dist/tools/misc-tool-uis.cjs +2 -2
  527. package/dist/tools/misc-tool-uis.js +2 -2
  528. package/dist/tools/primitives.cjs +1 -1
  529. package/dist/tools/primitives.js +1 -1
  530. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  531. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  532. package/dist/tools/read-asset-tool-ui.js +21 -70
  533. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  534. package/dist/tools/step-text.cjs +21 -0
  535. package/dist/tools/step-text.cjs.map +1 -0
  536. package/dist/tools/step-text.d.ts +10 -0
  537. package/dist/tools/step-text.js +21 -0
  538. package/dist/tools/step-text.js.map +1 -0
  539. package/dist/tools/tool-fallback.cjs +24 -5
  540. package/dist/tools/tool-fallback.cjs.map +1 -1
  541. package/dist/tools/tool-fallback.d.ts +3 -1
  542. package/dist/tools/tool-fallback.js +24 -5
  543. package/dist/tools/tool-fallback.js.map +1 -1
  544. package/dist/tools/tool-summary.cjs +661 -0
  545. package/dist/tools/tool-summary.cjs.map +1 -0
  546. package/dist/tools/tool-summary.d.ts +99 -0
  547. package/dist/tools/tool-summary.js +661 -0
  548. package/dist/tools/tool-summary.js.map +1 -0
  549. package/dist/tools/tool-uis.cjs +37 -95
  550. package/dist/tools/tool-uis.cjs.map +1 -1
  551. package/dist/tools/tool-uis.js +37 -95
  552. package/dist/tools/tool-uis.js.map +1 -1
  553. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  554. package/dist/tools/voice-update-tool-ui.js +1 -1
  555. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  556. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  557. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  558. package/dist/tools/write-todos-tool-ui.js +5 -4
  559. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  560. package/dist/ui/popover.cjs +6 -6
  561. package/dist/ui/popover.cjs.map +1 -1
  562. package/dist/ui/popover.js +6 -6
  563. package/dist/ui/popover.js.map +1 -1
  564. package/dist/ui/tooltip.cjs +16 -2
  565. package/dist/ui/tooltip.cjs.map +1 -1
  566. package/dist/ui/tooltip.d.ts +1 -1
  567. package/dist/ui/tooltip.js +16 -2
  568. package/dist/ui/tooltip.js.map +1 -1
  569. package/dist/version.cjs +1 -1
  570. package/dist/version.js +1 -1
  571. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  572. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  573. package/dist/voice/use-athena-voice-session.js.map +1 -1
  574. package/dist/workbench/SessionWorkbench.cjs +378 -0
  575. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  576. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  577. package/dist/workbench/SessionWorkbench.js +378 -0
  578. package/dist/workbench/SessionWorkbench.js.map +1 -0
  579. package/dist/workbench/session-workbench-context.cjs +26 -0
  580. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  581. package/dist/workbench/session-workbench-context.d.ts +55 -0
  582. package/dist/workbench/session-workbench-context.js +26 -0
  583. package/dist/workbench/session-workbench-context.js.map +1 -0
  584. package/dist/workbench/session-workbench-model.cjs +288 -0
  585. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  586. package/dist/workbench/session-workbench-model.d.ts +168 -0
  587. package/dist/workbench/session-workbench-model.js +288 -0
  588. package/dist/workbench/session-workbench-model.js.map +1 -0
  589. package/dist/workbench/session-workbench-panes.cjs +580 -0
  590. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  591. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  592. package/dist/workbench/session-workbench-panes.js +580 -0
  593. package/dist/workbench/session-workbench-panes.js.map +1 -0
  594. package/dist/workbench/session-workspace-api.cjs +157 -0
  595. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  596. package/dist/workbench/session-workspace-api.d.ts +70 -0
  597. package/dist/workbench/session-workspace-api.js +157 -0
  598. package/dist/workbench/session-workspace-api.js.map +1 -0
  599. package/dist/workbench/use-session-workspace.cjs +100 -0
  600. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  601. package/dist/workbench/use-session-workspace.d.ts +45 -0
  602. package/dist/workbench/use-session-workspace.js +100 -0
  603. package/dist/workbench/use-session-workspace.js.map +1 -0
  604. package/dist/workbench/workbench-layout-context.cjs +10 -0
  605. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  606. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  607. package/dist/workbench/workbench-layout-context.js +10 -0
  608. package/dist/workbench/workbench-layout-context.js.map +1 -0
  609. package/package.json +20 -9
  610. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  611. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  612. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  613. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  614. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  615. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  616. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  617. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  618. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  619. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  620. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  621. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  622. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  623. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  624. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  625. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  626. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  627. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  628. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  629. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  630. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  631. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  632. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  633. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  634. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  635. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  636. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  637. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  638. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  639. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  640. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  641. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  642. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  643. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  644. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  645. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  646. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  647. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  648. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  649. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  650. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  651. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  652. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  653. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  654. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  655. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  656. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  657. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  658. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  659. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  660. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  661. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  662. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  663. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  664. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  665. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  666. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  667. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  668. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  669. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  670. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  671. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  672. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  673. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  704. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  705. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  706. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  707. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  708. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  709. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  710. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  711. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  712. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  713. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  714. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  715. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  716. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  717. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  718. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  719. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  720. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  721. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  722. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  723. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  724. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  725. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  726. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  727. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  728. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  729. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  730. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  731. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  732. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  733. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  734. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  735. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  736. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  737. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  738. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  739. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  740. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  741. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  742. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  743. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  744. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  745. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  746. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  747. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  748. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  749. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  750. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.cjs +0 -0
  751. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.js +0 -0
  752. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  753. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  754. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  755. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  756. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  757. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  758. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  759. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  760. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  761. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"chat-text-schema.cjs","sources":["../../../src/chat-ui/rich-text/chat-text-schema.tsx"],"sourcesContent":["import { Editor, type Extensions } from \"@tiptap/core\";\nimport { DOMParser as ProseMirrorDOMParser } from \"@tiptap/pm/model\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport CodeBlock from \"@tiptap/extension-code-block\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport { markdownTableStorage } from \"@athenaintel/tiptap-markdown-table\";\nimport { Markdown } from \"tiptap-markdown\";\nimport { getMarkdownStorage } from \"../markdown-storage\";\nimport { MentionExtension } from \"../mentions/mention-extension\";\nimport { ChatCodeBlockNodeView, ChatMentionNodeView } from \"./chat-node-views\";\nimport { isAllowedChatHref, normalizeCitationAnchors } from \"./citation-anchors\";\n\nconst ChatMentionExtension = MentionExtension.extend({\n addNodeView: () => ReactNodeViewRenderer(ChatMentionNodeView, { as: \"span\" }),\n});\n/** Fenced code rendered through `ChatCodeBlock` (language label + copy button). */\nexport const ChatCodeBlockExtension = CodeBlock.extend({\n addNodeView: () => ReactNodeViewRenderer(ChatCodeBlockNodeView),\n});\n\n/**\n * The table node, written to Markdown through the table writer Olympus's\n * editors share (`@athenaintel/tiptap-markdown-table`), which escapes a `|`\n * inside a cell as `\\|`, so a draft's table reaches the message with the cells\n * it was typed with.\n */\nexport const ChatTableExtension = Table.extend({\n addStorage() {\n return { ...this.parent?.(), ...markdownTableStorage() };\n },\n});\n\n/**\n * The Link mark with the excerpt a citation carries (`data-excerpt`, the\n * source chip's tooltip and scroll-to-text target) and an href allow-list\n * narrower than tiptap's default: `http(s):`, `mailto:`, the screen-point\n * protocol and app-relative Spaces paths pass; every other scheme\n * (`javascript:`, `ftp:`, `data:`, protocol-relative `//host`) is dropped and\n * its label kept as text. The same rule governs the composer's autolink.\n */\nexport const ChatLinkExtension = Link.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n excerpt: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(\"data-excerpt\"),\n renderHTML: (attributes: Record<string, unknown>) =>\n typeof attributes.excerpt === \"string\" && attributes.excerpt\n ? { \"data-excerpt\": attributes.excerpt }\n : {},\n },\n };\n },\n});\n\n/** Both the editable draft and the static message body use this schema and parser. */\nexport function createChatTextExtensions(): Extensions {\n return [\n StarterKit.configure({\n codeBlock: false,\n // Tiptap 3 StarterKit also bundles these; chat text registers its own link and never had the rest.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n }),\n ChatCodeBlockExtension,\n ChatLinkExtension.configure({\n openOnClick: false,\n autolink: true,\n linkOnPaste: true,\n protocols: [\"athena-point\"],\n isAllowedUri: (url) => isAllowedChatHref(url),\n }),\n Image.configure({ inline: true }),\n ChatTableExtension.configure({ resizable: false }),\n TableRow,\n TableCell,\n TableHeader,\n TaskList,\n TaskItem.configure({ nested: true }),\n Markdown.configure({\n html: true,\n tightLists: true,\n tightListClass: \"tight\",\n bulletListMarker: \"-\",\n linkify: true,\n breaks: true,\n transformPastedText: true,\n transformCopiedText: false,\n }),\n ChatMentionExtension,\n ];\n}\n\nlet parserEditor: Editor | undefined;\n\n/**\n * A single detached parser per browser tab, never an editor per message.\n * Markdown → HTML (markdown-it, with bare URLs linkified and inline HTML kept)\n * → agora's citation anchors given their hrefs → the schema's document.\n */\nexport function parseChatText(markdown: string) {\n parserEditor ??= new Editor({\n extensions: createChatTextExtensions(),\n content: \"\",\n editable: false,\n });\n const html: string = getMarkdownStorage(parserEditor).parser.parse(markdown);\n const body = new window.DOMParser().parseFromString(html, \"text/html\").body;\n normalizeCitationAnchors(body);\n return ProseMirrorDOMParser.fromSchema(parserEditor.schema).parse(body);\n}\n\n/** Typography is shared; the composer supplies only its padding and scroll boundary. */\nexport const CHAT_TEXT_CLASS =\n \"aui-md prose prose-sm max-w-none min-w-0 break-words text-sm leading-snug text-foreground prose-p:my-1.5 prose-p:leading-snug prose-headings:mt-3 prose-headings:mb-1.5 prose-headings:font-semibold prose-h1:text-sm prose-h2:text-sm prose-h3:text-xs prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-blockquote:border-l-2 prose-blockquote:border-border prose-blockquote:text-muted-foreground prose-code:rounded prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:text-xs prose-code:font-mono prose-code:before:content-none prose-code:after:content-none prose-pre:my-2 prose-pre:overflow-x-auto prose-pre:rounded-lg prose-pre:border prose-pre:border-border prose-pre:bg-muted/30 prose-pre:p-3 prose-a:text-primary prose-a:underline prose-a:decoration-primary/40 prose-a:underline-offset-2 hover:prose-a:decoration-primary prose-strong:font-semibold prose-hr:border-border [&>:first-child]:mt-0 [&>:last-child]:mb-0 [&_table]:block [&_table]:overflow-x-auto [&_td]:border [&_td]:border-border [&_td]:px-2 [&_th]:border [&_th]:border-border [&_th]:px-2 [&_ul[data-type=taskList]]:list-none [&_ul[data-type=taskList]]:pl-0 [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:gap-2\";\n"],"names":["MentionExtension","ReactNodeViewRenderer","ChatMentionNodeView","ChatCodeBlockNodeView","Table","markdownTableStorage","isAllowedChatHref","TableRow","TableCell","TableHeader","Markdown","Editor","getMarkdownStorage","normalizeCitationAnchors","ProseMirrorDOMParser"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,MAAM,uBAAuBA,iBAAAA,iBAAiB,OAAO;AAAA,EACnD,aAAa,MAAMC,MAAAA,sBAAsBC,cAAAA,qBAAqB,EAAE,IAAI,QAAQ;AAC9E,CAAC;AAEM,MAAM,yBAAyB,UAAU,OAAO;AAAA,EACrD,aAAa,MAAMD,MAAAA,sBAAsBE,cAAAA,qBAAqB;AAChE,CAAC;AAQM,MAAM,qBAAqBC,eAAAA,MAAM,OAAO;AAAA,EAC7C,aAAa;;AACX,WAAO,EAAE,IAAG,UAAK,WAAL,+BAAiB,GAAGC,wBAAAA,uBAAqB;AAAA,EACvD;AACF,CAAC;AAUM,MAAM,oBAAoB,KAAK,OAAO;AAAA,EAC3C,gBAAgB;;AACd,WAAO;AAAA,MACL,IAAG,UAAK,WAAL;AAAA,MACH,SAAS;AAAA,QACP,SAAS;AAAA,QACT,WAAW,CAAC,YAAyB,QAAQ,aAAa,cAAc;AAAA,QACxE,YAAY,CAAC,eACX,OAAO,WAAW,YAAY,YAAY,WAAW,UACjD,EAAE,gBAAgB,WAAW,QAAA,IAC7B,CAAA;AAAA,MAAC;AAAA,IACT;AAAA,EAEJ;AACF,CAAC;AAGM,SAAS,2BAAuC;AACrD,SAAO;AAAA,IACL,WAAW,UAAU;AAAA,MACnB,WAAW;AAAA;AAAA,MAEX,MAAM;AAAA,MACN,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,cAAc;AAAA,IAAA,CACf;AAAA,IACD;AAAA,IACA,kBAAkB,UAAU;AAAA,MAC1B,aAAa;AAAA,MACb,UAAU;AAAA,MACV,aAAa;AAAA,MACb,WAAW,CAAC,cAAc;AAAA,MAC1B,cAAc,CAAC,QAAQC,gBAAAA,kBAAkB,GAAG;AAAA,IAAA,CAC7C;AAAA,IACD,MAAM,UAAU,EAAE,QAAQ,MAAM;AAAA,IAChC,mBAAmB,UAAU,EAAE,WAAW,OAAO;AAAA,IACjDC,eAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACAC,eAAAA;AAAAA,IACA;AAAA,IACA,SAAS,UAAU,EAAE,QAAQ,MAAM;AAAA,IACnCC,eAAAA,SAAS,UAAU;AAAA,MACjB,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,qBAAqB;AAAA,MACrB,qBAAqB;AAAA,IAAA,CACtB;AAAA,IACD;AAAA,EAAA;AAEJ;AAEA,IAAI;AAOG,SAAS,cAAc,UAAkB;AAC9C,kCAAiB,IAAIC,KAAAA,OAAO;AAAA,IAC1B,YAAY,yBAAA;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,EAAA,CACX;AACD,QAAM,OAAeC,gBAAAA,mBAAmB,YAAY,EAAE,OAAO,MAAM,QAAQ;AAC3E,QAAM,OAAO,IAAI,OAAO,UAAA,EAAY,gBAAgB,MAAM,WAAW,EAAE;AACvEC,kBAAAA,yBAAyB,IAAI;AAC7B,SAAOC,MAAAA,UAAqB,WAAW,aAAa,MAAM,EAAE,MAAM,IAAI;AACxE;AAGO,MAAM,kBACX;;;;;;;"}
1
+ {"version":3,"file":"chat-text-schema.cjs","sources":["../../../src/chat-ui/rich-text/chat-text-schema.tsx"],"sourcesContent":["import { Editor, Extension, type Extensions } from \"@tiptap/core\";\nimport { DOMParser as ProseMirrorDOMParser } from \"@tiptap/pm/model\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport CodeBlock from \"@tiptap/extension-code-block\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport { markdownTableStorage } from \"@athenaintel/tiptap-markdown-table\";\nimport { Markdown } from \"tiptap-markdown\";\nimport { getMarkdownStorage } from \"../markdown-storage\";\nimport { MentionExtension } from \"../mentions/mention-extension\";\nimport { ChatCodeBlockNodeView, ChatMentionNodeView } from \"./chat-node-views\";\nimport { isAllowedChatHref, normalizeCitationAnchors } from \"./citation-anchors\";\n\nconst ChatMentionExtension = MentionExtension.extend({\n addNodeView: () => ReactNodeViewRenderer(ChatMentionNodeView, { as: \"span\" }),\n});\n/** Fenced code rendered through `ChatCodeBlock` (language label + copy button). */\nexport const ChatCodeBlockExtension = CodeBlock.extend({\n addNodeView: () => ReactNodeViewRenderer(ChatCodeBlockNodeView),\n});\n\n/**\n * The table node, written to Markdown through the table writer Olympus's\n * editors share (`@athenaintel/tiptap-markdown-table`), which escapes a `|`\n * inside a cell as `\\|`, so a draft's table reaches the message with the cells\n * it was typed with.\n */\nexport const ChatTableExtension = Table.extend({\n addStorage() {\n return { ...this.parent?.(), ...markdownTableStorage() };\n },\n});\n\n/**\n * The Link mark with the excerpt a citation carries (`data-excerpt`, the\n * source chip's tooltip and scroll-to-text target) and an href allow-list\n * narrower than tiptap's default: `http(s):`, `mailto:`, the screen-point\n * protocol and app-relative Spaces paths pass; every other scheme\n * (`javascript:`, `ftp:`, `data:`, protocol-relative `//host`) is dropped and\n * its label kept as text. The same rule governs the composer's autolink.\n */\nexport const ChatLinkExtension = Link.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n excerpt: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(\"data-excerpt\"),\n renderHTML: (attributes: Record<string, unknown>) =>\n typeof attributes.excerpt === \"string\" && attributes.excerpt\n ? { \"data-excerpt\": attributes.excerpt }\n : {},\n },\n };\n },\n});\n\n/** Both the editable draft and the static message body use this schema and parser. */\nexport function createChatTextExtensions(): Extensions {\n return [\n StarterKit.configure({\n codeBlock: false,\n // Tiptap 3 StarterKit also bundles these; chat text registers its own link and never had the rest.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n }),\n ChatCodeBlockExtension,\n ChatLinkExtension.configure({\n openOnClick: false,\n autolink: true,\n linkOnPaste: true,\n // No `protocols`: Tiptap's Link registers them with linkifyjs in every\n // editor's onCreate, and linkifyjs accepts a scheme only before its first\n // scan — so each chat body or composer created after the first one logged\n // \"linkifyjs: already initialized\" (seen in Chrome's extension Errors\n // page). Screen points arrive as markdown links (`[label](athena-point://…)`),\n // which parse without linkify, and `isAllowedChatHref` already admits\n // the scheme; only autolinking a bare `athena-point://` string needed it.\n isAllowedUri: (url) => isAllowedChatHref(url),\n }),\n Image.configure({ inline: true }),\n ChatTableExtension.configure({ resizable: false }),\n TableRow,\n TableCell,\n TableHeader,\n TaskList,\n TaskItem.configure({ nested: true }),\n Markdown.configure({\n html: true,\n tightLists: true,\n tightListClass: \"tight\",\n bulletListMarker: \"-\",\n linkify: true,\n breaks: true,\n transformPastedText: true,\n transformCopiedText: false,\n }),\n ChatMentionExtension,\n ];\n}\n\n/** The slice of a markdown-it token {@link TypedTextReading} rewrites. */\ninterface MarkdownToken {\n type: string;\n tag: string;\n nesting: number;\n markup: string;\n content: string;\n children: MarkdownToken[] | null;\n}\n\n/** The slice of markdown-it (the instance tiptap-markdown parses with) {@link TypedTextReading} configures. */\ninterface MarkdownIt {\n disable(rules: string | string[], ignoreInvalid?: boolean): unknown;\n core: {\n ruler: {\n after(\n afterName: string,\n ruleName: string,\n rule: (state: { tokens: MarkdownToken[] }) => void,\n ): void;\n };\n };\n}\n\n/** A line break tag: the one piece of HTML a composer writes, for a line break inside a table cell. */\nconst LINE_BREAK_TAG = /^<br\\s*\\/?>$/i;\n\n/**\n * The inline token a typed reading shows as the characters it was written\n * with. Raw HTML counts only when it is in the text itself (`source`, the\n * inline block's own content): a task list's checkbox is HTML markdown-it's\n * task-list rule makes, not text anyone typed.\n */\nfunction isTypedCharacters(token: MarkdownToken, source: string, inTable: boolean): boolean {\n if (token.type === \"html_inline\") {\n return (\n source.includes(token.content) && !(inTable && LINE_BREAK_TAG.test(token.content.trim()))\n );\n }\n return (\n (token.type === \"em_open\" ||\n token.type === \"em_close\" ||\n token.type === \"strong_open\" ||\n token.type === \"strong_close\") &&\n token.markup.startsWith(\"_\")\n );\n}\n\nconst typedReadingInstalled = new WeakSet<object>();\n\nfunction installTypedTextReading(markdownit: MarkdownIt): void {\n if (typedReadingInstalled.has(markdownit)) return;\n typedReadingInstalled.add(markdownit);\n markdownit.disable(\"html_block\");\n markdownit.core.ruler.after(\"inline\", \"athena_typed_text\", (state) => {\n let tables = 0;\n for (const block of state.tokens) {\n if (block.type === \"table_open\") tables += 1;\n if (block.type === \"table_close\") tables -= 1;\n for (const token of block.children ?? []) {\n if (!isTypedCharacters(token, block.content, tables > 0)) continue;\n if (token.type !== \"html_inline\") token.content = token.markup;\n token.type = \"text\";\n token.tag = \"\";\n token.nesting = 0;\n }\n }\n });\n}\n\n/**\n * How a person's typed text reads in the user bubble: the chat's Markdown,\n * except for the two readings no composer send relies on and plain text often\n * trips. Raw HTML stays the characters it was typed with (`List<T>` keeps its\n * `<T>`, `a <b>c</b>` is not bold): a composer writes a typed `<` as `&lt;`,\n * and its only tag is a `<br>` for a line break inside a table cell, which a\n * table cell still reads as one. Underscore emphasis stays underscores\n * (`obj.__init__` keeps them, `_private_` is not italic): a composer writes\n * emphasis with `*` and escapes a typed `_`. Everything a composer does write\n * (bold, lists, code, links, mention chips, tables, and the escaped Markdown\n * of older sends) reads as the assistant's reading reads it.\n */\nconst TypedTextReading = Extension.create({\n name: \"athenaTypedTextReading\",\n addStorage() {\n return {\n markdown: {\n parse: {\n setup: (markdownit: MarkdownIt) => installTypedTextReading(markdownit),\n },\n },\n };\n },\n});\n\nlet parserEditor: Editor | undefined;\nlet typedParserEditor: Editor | undefined;\n\nfunction parseWith(editor: Editor, markdown: string) {\n const html: string = getMarkdownStorage(editor).parser.parse(markdown);\n const body = new window.DOMParser().parseFromString(html, \"text/html\").body;\n normalizeCitationAnchors(body);\n return ProseMirrorDOMParser.fromSchema(editor.schema).parse(body);\n}\n\n/**\n * A single detached parser per browser tab, never an editor per message.\n * Markdown → HTML (markdown-it, with bare URLs linkified and inline HTML kept)\n * → agora's citation anchors given their hrefs → the schema's document.\n */\nexport function parseChatText(markdown: string) {\n parserEditor ??= new Editor({\n extensions: createChatTextExtensions(),\n content: \"\",\n editable: false,\n });\n return parseWith(parserEditor, markdown);\n}\n\n/**\n * {@link parseChatText} for text a person typed (a user message): the same\n * schema and document, read with {@link TypedTextReading}.\n */\nexport function parseTypedChatText(markdown: string) {\n typedParserEditor ??= new Editor({\n extensions: [...createChatTextExtensions(), TypedTextReading],\n content: \"\",\n editable: false,\n });\n return parseWith(typedParserEditor, markdown);\n}\n\n/** Typography is shared; the composer supplies only its padding and scroll boundary. */\nexport const CHAT_TEXT_CLASS =\n \"aui-md prose prose-sm max-w-none min-w-0 break-words text-sm leading-snug text-foreground prose-p:my-1.5 prose-p:leading-snug prose-headings:mt-3 prose-headings:mb-1.5 prose-headings:font-semibold prose-h1:text-sm prose-h2:text-sm prose-h3:text-xs prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-blockquote:border-l-2 prose-blockquote:border-border prose-blockquote:text-muted-foreground prose-code:rounded prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:text-xs prose-code:font-mono prose-code:before:content-none prose-code:after:content-none prose-pre:my-2 prose-pre:overflow-x-auto prose-pre:rounded-lg prose-pre:border prose-pre:border-border prose-pre:bg-muted/30 prose-pre:p-3 prose-a:text-primary prose-a:underline prose-a:decoration-primary/40 prose-a:underline-offset-2 hover:prose-a:decoration-primary prose-strong:font-semibold prose-hr:border-border [&>:first-child]:mt-0 [&>:last-child]:mb-0 [&_table]:block [&_table]:overflow-x-auto [&_td]:border [&_td]:border-border [&_td]:px-2 [&_th]:border [&_th]:border-border [&_th]:px-2 [&_ul[data-type=taskList]]:list-none [&_ul[data-type=taskList]]:pl-0 [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:gap-2\";\n"],"names":["MentionExtension","ReactNodeViewRenderer","ChatMentionNodeView","ChatCodeBlockNodeView","Table","markdownTableStorage","isAllowedChatHref","TableRow","TableCell","TableHeader","Markdown","Extension","getMarkdownStorage","normalizeCitationAnchors","ProseMirrorDOMParser","Editor"],"mappings":"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"}
@@ -25,5 +25,10 @@ export declare function createChatTextExtensions(): Extensions;
25
25
  * → agora's citation anchors given their hrefs → the schema's document.
26
26
  */
27
27
  export declare function parseChatText(markdown: string): import("prosemirror-model").Node;
28
+ /**
29
+ * {@link parseChatText} for text a person typed (a user message): the same
30
+ * schema and document, read with {@link TypedTextReading}.
31
+ */
32
+ export declare function parseTypedChatText(markdown: string): import("prosemirror-model").Node;
28
33
  /** Typography is shared; the composer supplies only its padding and scroll boundary. */
29
34
  export declare const CHAT_TEXT_CLASS = "aui-md prose prose-sm max-w-none min-w-0 break-words text-sm leading-snug text-foreground prose-p:my-1.5 prose-p:leading-snug prose-headings:mt-3 prose-headings:mb-1.5 prose-headings:font-semibold prose-h1:text-sm prose-h2:text-sm prose-h3:text-xs prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-blockquote:border-l-2 prose-blockquote:border-border prose-blockquote:text-muted-foreground prose-code:rounded prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:text-xs prose-code:font-mono prose-code:before:content-none prose-code:after:content-none prose-pre:my-2 prose-pre:overflow-x-auto prose-pre:rounded-lg prose-pre:border prose-pre:border-border prose-pre:bg-muted/30 prose-pre:p-3 prose-a:text-primary prose-a:underline prose-a:decoration-primary/40 prose-a:underline-offset-2 hover:prose-a:decoration-primary prose-strong:font-semibold prose-hr:border-border [&>:first-child]:mt-0 [&>:last-child]:mb-0 [&_table]:block [&_table]:overflow-x-auto [&_td]:border [&_td]:border-border [&_td]:px-2 [&_th]:border [&_th]:border-border [&_th]:px-2 [&_ul[data-type=taskList]]:list-none [&_ul[data-type=taskList]]:pl-0 [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:gap-2";
@@ -1,4 +1,4 @@
1
- import { Editor } from "@tiptap/core";
1
+ import { Editor, Extension } from "@tiptap/core";
2
2
  import { DOMParser } from "@tiptap/pm/model";
3
3
  import StarterKit from "@tiptap/starter-kit";
4
4
  import CodeBlock from "@tiptap/extension-code-block";
@@ -8,7 +8,7 @@ import Image from "@tiptap/extension-image";
8
8
  import { TableRow, TableCell, TableHeader, Table } from "@tiptap/extension-table";
9
9
  import TaskList from "@tiptap/extension-task-list";
10
10
  import TaskItem from "@tiptap/extension-task-item";
11
- import { markdownTableStorage } from "../../packages/tiptap-markdown-table/src/markdown-table-serializer.js";
11
+ import { markdownTableStorage } from "../../tiptap-markdown-table/src/markdown-table-serializer.js";
12
12
  import { Markdown } from "tiptap-markdown";
13
13
  import { getMarkdownStorage } from "../markdown-storage.js";
14
14
  import { MentionExtension } from "../mentions/mention-extension.js";
@@ -54,7 +54,13 @@ function createChatTextExtensions() {
54
54
  openOnClick: false,
55
55
  autolink: true,
56
56
  linkOnPaste: true,
57
- protocols: ["athena-point"],
57
+ // No `protocols`: Tiptap's Link registers them with linkifyjs in every
58
+ // editor's onCreate, and linkifyjs accepts a scheme only before its first
59
+ // scan — so each chat body or composer created after the first one logged
60
+ // "linkifyjs: already initialized" (seen in Chrome's extension Errors
61
+ // page). Screen points arrive as markdown links (`[label](athena-point://…)`),
62
+ // which parse without linkify, and `isAllowedChatHref` already admits
63
+ // the scheme; only autolinking a bare `athena-point://` string needed it.
58
64
  isAllowedUri: (url) => isAllowedChatHref(url)
59
65
  }),
60
66
  Image.configure({ inline: true }),
@@ -77,17 +83,68 @@ function createChatTextExtensions() {
77
83
  ChatMentionExtension
78
84
  ];
79
85
  }
86
+ const LINE_BREAK_TAG = /^<br\s*\/?>$/i;
87
+ function isTypedCharacters(token, source, inTable) {
88
+ if (token.type === "html_inline") {
89
+ return source.includes(token.content) && !(inTable && LINE_BREAK_TAG.test(token.content.trim()));
90
+ }
91
+ return (token.type === "em_open" || token.type === "em_close" || token.type === "strong_open" || token.type === "strong_close") && token.markup.startsWith("_");
92
+ }
93
+ const typedReadingInstalled = /* @__PURE__ */ new WeakSet();
94
+ function installTypedTextReading(markdownit) {
95
+ if (typedReadingInstalled.has(markdownit)) return;
96
+ typedReadingInstalled.add(markdownit);
97
+ markdownit.disable("html_block");
98
+ markdownit.core.ruler.after("inline", "athena_typed_text", (state) => {
99
+ let tables = 0;
100
+ for (const block of state.tokens) {
101
+ if (block.type === "table_open") tables += 1;
102
+ if (block.type === "table_close") tables -= 1;
103
+ for (const token of block.children ?? []) {
104
+ if (!isTypedCharacters(token, block.content, tables > 0)) continue;
105
+ if (token.type !== "html_inline") token.content = token.markup;
106
+ token.type = "text";
107
+ token.tag = "";
108
+ token.nesting = 0;
109
+ }
110
+ }
111
+ });
112
+ }
113
+ const TypedTextReading = Extension.create({
114
+ name: "athenaTypedTextReading",
115
+ addStorage() {
116
+ return {
117
+ markdown: {
118
+ parse: {
119
+ setup: (markdownit) => installTypedTextReading(markdownit)
120
+ }
121
+ }
122
+ };
123
+ }
124
+ });
80
125
  let parserEditor;
126
+ let typedParserEditor;
127
+ function parseWith(editor, markdown) {
128
+ const html = getMarkdownStorage(editor).parser.parse(markdown);
129
+ const body = new window.DOMParser().parseFromString(html, "text/html").body;
130
+ normalizeCitationAnchors(body);
131
+ return DOMParser.fromSchema(editor.schema).parse(body);
132
+ }
81
133
  function parseChatText(markdown) {
82
134
  parserEditor ?? (parserEditor = new Editor({
83
135
  extensions: createChatTextExtensions(),
84
136
  content: "",
85
137
  editable: false
86
138
  }));
87
- const html = getMarkdownStorage(parserEditor).parser.parse(markdown);
88
- const body = new window.DOMParser().parseFromString(html, "text/html").body;
89
- normalizeCitationAnchors(body);
90
- return DOMParser.fromSchema(parserEditor.schema).parse(body);
139
+ return parseWith(parserEditor, markdown);
140
+ }
141
+ function parseTypedChatText(markdown) {
142
+ typedParserEditor ?? (typedParserEditor = new Editor({
143
+ extensions: [...createChatTextExtensions(), TypedTextReading],
144
+ content: "",
145
+ editable: false
146
+ }));
147
+ return parseWith(typedParserEditor, markdown);
91
148
  }
92
149
  const CHAT_TEXT_CLASS = "aui-md prose prose-sm max-w-none min-w-0 break-words text-sm leading-snug text-foreground prose-p:my-1.5 prose-p:leading-snug prose-headings:mt-3 prose-headings:mb-1.5 prose-headings:font-semibold prose-h1:text-sm prose-h2:text-sm prose-h3:text-xs prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-blockquote:border-l-2 prose-blockquote:border-border prose-blockquote:text-muted-foreground prose-code:rounded prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:text-xs prose-code:font-mono prose-code:before:content-none prose-code:after:content-none prose-pre:my-2 prose-pre:overflow-x-auto prose-pre:rounded-lg prose-pre:border prose-pre:border-border prose-pre:bg-muted/30 prose-pre:p-3 prose-a:text-primary prose-a:underline prose-a:decoration-primary/40 prose-a:underline-offset-2 hover:prose-a:decoration-primary prose-strong:font-semibold prose-hr:border-border [&>:first-child]:mt-0 [&>:last-child]:mb-0 [&_table]:block [&_table]:overflow-x-auto [&_td]:border [&_td]:border-border [&_td]:px-2 [&_th]:border [&_th]:border-border [&_th]:px-2 [&_ul[data-type=taskList]]:list-none [&_ul[data-type=taskList]]:pl-0 [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:gap-2";
93
150
  export {
@@ -96,6 +153,7 @@ export {
96
153
  ChatLinkExtension,
97
154
  ChatTableExtension,
98
155
  createChatTextExtensions,
99
- parseChatText
156
+ parseChatText,
157
+ parseTypedChatText
100
158
  };
101
159
  //# sourceMappingURL=chat-text-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-text-schema.js","sources":["../../../src/chat-ui/rich-text/chat-text-schema.tsx"],"sourcesContent":["import { Editor, type Extensions } from \"@tiptap/core\";\nimport { DOMParser as ProseMirrorDOMParser } from \"@tiptap/pm/model\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport CodeBlock from \"@tiptap/extension-code-block\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport { markdownTableStorage } from \"@athenaintel/tiptap-markdown-table\";\nimport { Markdown } from \"tiptap-markdown\";\nimport { getMarkdownStorage } from \"../markdown-storage\";\nimport { MentionExtension } from \"../mentions/mention-extension\";\nimport { ChatCodeBlockNodeView, ChatMentionNodeView } from \"./chat-node-views\";\nimport { isAllowedChatHref, normalizeCitationAnchors } from \"./citation-anchors\";\n\nconst ChatMentionExtension = MentionExtension.extend({\n addNodeView: () => ReactNodeViewRenderer(ChatMentionNodeView, { as: \"span\" }),\n});\n/** Fenced code rendered through `ChatCodeBlock` (language label + copy button). */\nexport const ChatCodeBlockExtension = CodeBlock.extend({\n addNodeView: () => ReactNodeViewRenderer(ChatCodeBlockNodeView),\n});\n\n/**\n * The table node, written to Markdown through the table writer Olympus's\n * editors share (`@athenaintel/tiptap-markdown-table`), which escapes a `|`\n * inside a cell as `\\|`, so a draft's table reaches the message with the cells\n * it was typed with.\n */\nexport const ChatTableExtension = Table.extend({\n addStorage() {\n return { ...this.parent?.(), ...markdownTableStorage() };\n },\n});\n\n/**\n * The Link mark with the excerpt a citation carries (`data-excerpt`, the\n * source chip's tooltip and scroll-to-text target) and an href allow-list\n * narrower than tiptap's default: `http(s):`, `mailto:`, the screen-point\n * protocol and app-relative Spaces paths pass; every other scheme\n * (`javascript:`, `ftp:`, `data:`, protocol-relative `//host`) is dropped and\n * its label kept as text. The same rule governs the composer's autolink.\n */\nexport const ChatLinkExtension = Link.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n excerpt: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(\"data-excerpt\"),\n renderHTML: (attributes: Record<string, unknown>) =>\n typeof attributes.excerpt === \"string\" && attributes.excerpt\n ? { \"data-excerpt\": attributes.excerpt }\n : {},\n },\n };\n },\n});\n\n/** Both the editable draft and the static message body use this schema and parser. */\nexport function createChatTextExtensions(): Extensions {\n return [\n StarterKit.configure({\n codeBlock: false,\n // Tiptap 3 StarterKit also bundles these; chat text registers its own link and never had the rest.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n }),\n ChatCodeBlockExtension,\n ChatLinkExtension.configure({\n openOnClick: false,\n autolink: true,\n linkOnPaste: true,\n protocols: [\"athena-point\"],\n isAllowedUri: (url) => isAllowedChatHref(url),\n }),\n Image.configure({ inline: true }),\n ChatTableExtension.configure({ resizable: false }),\n TableRow,\n TableCell,\n TableHeader,\n TaskList,\n TaskItem.configure({ nested: true }),\n Markdown.configure({\n html: true,\n tightLists: true,\n tightListClass: \"tight\",\n bulletListMarker: \"-\",\n linkify: true,\n breaks: true,\n transformPastedText: true,\n transformCopiedText: false,\n }),\n ChatMentionExtension,\n ];\n}\n\nlet parserEditor: Editor | undefined;\n\n/**\n * A single detached parser per browser tab, never an editor per message.\n * Markdown → HTML (markdown-it, with bare URLs linkified and inline HTML kept)\n * → agora's citation anchors given their hrefs → the schema's document.\n */\nexport function parseChatText(markdown: string) {\n parserEditor ??= new Editor({\n extensions: createChatTextExtensions(),\n content: \"\",\n editable: false,\n });\n const html: string = getMarkdownStorage(parserEditor).parser.parse(markdown);\n const body = new window.DOMParser().parseFromString(html, \"text/html\").body;\n normalizeCitationAnchors(body);\n return ProseMirrorDOMParser.fromSchema(parserEditor.schema).parse(body);\n}\n\n/** Typography is shared; the composer supplies only its padding and scroll boundary. */\nexport const CHAT_TEXT_CLASS =\n \"aui-md prose prose-sm max-w-none min-w-0 break-words text-sm leading-snug text-foreground prose-p:my-1.5 prose-p:leading-snug prose-headings:mt-3 prose-headings:mb-1.5 prose-headings:font-semibold prose-h1:text-sm prose-h2:text-sm prose-h3:text-xs prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-blockquote:border-l-2 prose-blockquote:border-border prose-blockquote:text-muted-foreground prose-code:rounded prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:text-xs prose-code:font-mono prose-code:before:content-none prose-code:after:content-none prose-pre:my-2 prose-pre:overflow-x-auto prose-pre:rounded-lg prose-pre:border prose-pre:border-border prose-pre:bg-muted/30 prose-pre:p-3 prose-a:text-primary prose-a:underline prose-a:decoration-primary/40 prose-a:underline-offset-2 hover:prose-a:decoration-primary prose-strong:font-semibold prose-hr:border-border [&>:first-child]:mt-0 [&>:last-child]:mb-0 [&_table]:block [&_table]:overflow-x-auto [&_td]:border [&_td]:border-border [&_td]:px-2 [&_th]:border [&_th]:border-border [&_th]:px-2 [&_ul[data-type=taskList]]:list-none [&_ul[data-type=taskList]]:pl-0 [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:gap-2\";\n"],"names":["ProseMirrorDOMParser"],"mappings":";;;;;;;;;;;;;;;;AAiBA,MAAM,uBAAuB,iBAAiB,OAAO;AAAA,EACnD,aAAa,MAAM,sBAAsB,qBAAqB,EAAE,IAAI,QAAQ;AAC9E,CAAC;AAEM,MAAM,yBAAyB,UAAU,OAAO;AAAA,EACrD,aAAa,MAAM,sBAAsB,qBAAqB;AAChE,CAAC;AAQM,MAAM,qBAAqB,MAAM,OAAO;AAAA,EAC7C,aAAa;;AACX,WAAO,EAAE,IAAG,UAAK,WAAL,+BAAiB,GAAG,uBAAqB;AAAA,EACvD;AACF,CAAC;AAUM,MAAM,oBAAoB,KAAK,OAAO;AAAA,EAC3C,gBAAgB;;AACd,WAAO;AAAA,MACL,IAAG,UAAK,WAAL;AAAA,MACH,SAAS;AAAA,QACP,SAAS;AAAA,QACT,WAAW,CAAC,YAAyB,QAAQ,aAAa,cAAc;AAAA,QACxE,YAAY,CAAC,eACX,OAAO,WAAW,YAAY,YAAY,WAAW,UACjD,EAAE,gBAAgB,WAAW,QAAA,IAC7B,CAAA;AAAA,MAAC;AAAA,IACT;AAAA,EAEJ;AACF,CAAC;AAGM,SAAS,2BAAuC;AACrD,SAAO;AAAA,IACL,WAAW,UAAU;AAAA,MACnB,WAAW;AAAA;AAAA,MAEX,MAAM;AAAA,MACN,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,cAAc;AAAA,IAAA,CACf;AAAA,IACD;AAAA,IACA,kBAAkB,UAAU;AAAA,MAC1B,aAAa;AAAA,MACb,UAAU;AAAA,MACV,aAAa;AAAA,MACb,WAAW,CAAC,cAAc;AAAA,MAC1B,cAAc,CAAC,QAAQ,kBAAkB,GAAG;AAAA,IAAA,CAC7C;AAAA,IACD,MAAM,UAAU,EAAE,QAAQ,MAAM;AAAA,IAChC,mBAAmB,UAAU,EAAE,WAAW,OAAO;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,UAAU,EAAE,QAAQ,MAAM;AAAA,IACnC,SAAS,UAAU;AAAA,MACjB,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,qBAAqB;AAAA,MACrB,qBAAqB;AAAA,IAAA,CACtB;AAAA,IACD;AAAA,EAAA;AAEJ;AAEA,IAAI;AAOG,SAAS,cAAc,UAAkB;AAC9C,kCAAiB,IAAI,OAAO;AAAA,IAC1B,YAAY,yBAAA;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,EAAA,CACX;AACD,QAAM,OAAe,mBAAmB,YAAY,EAAE,OAAO,MAAM,QAAQ;AAC3E,QAAM,OAAO,IAAI,OAAO,UAAA,EAAY,gBAAgB,MAAM,WAAW,EAAE;AACvE,2BAAyB,IAAI;AAC7B,SAAOA,UAAqB,WAAW,aAAa,MAAM,EAAE,MAAM,IAAI;AACxE;AAGO,MAAM,kBACX;"}
1
+ {"version":3,"file":"chat-text-schema.js","sources":["../../../src/chat-ui/rich-text/chat-text-schema.tsx"],"sourcesContent":["import { Editor, Extension, type Extensions } from \"@tiptap/core\";\nimport { DOMParser as ProseMirrorDOMParser } from \"@tiptap/pm/model\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport CodeBlock from \"@tiptap/extension-code-block\";\nimport { ReactNodeViewRenderer } from \"@tiptap/react\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport { markdownTableStorage } from \"@athenaintel/tiptap-markdown-table\";\nimport { Markdown } from \"tiptap-markdown\";\nimport { getMarkdownStorage } from \"../markdown-storage\";\nimport { MentionExtension } from \"../mentions/mention-extension\";\nimport { ChatCodeBlockNodeView, ChatMentionNodeView } from \"./chat-node-views\";\nimport { isAllowedChatHref, normalizeCitationAnchors } from \"./citation-anchors\";\n\nconst ChatMentionExtension = MentionExtension.extend({\n addNodeView: () => ReactNodeViewRenderer(ChatMentionNodeView, { as: \"span\" }),\n});\n/** Fenced code rendered through `ChatCodeBlock` (language label + copy button). */\nexport const ChatCodeBlockExtension = CodeBlock.extend({\n addNodeView: () => ReactNodeViewRenderer(ChatCodeBlockNodeView),\n});\n\n/**\n * The table node, written to Markdown through the table writer Olympus's\n * editors share (`@athenaintel/tiptap-markdown-table`), which escapes a `|`\n * inside a cell as `\\|`, so a draft's table reaches the message with the cells\n * it was typed with.\n */\nexport const ChatTableExtension = Table.extend({\n addStorage() {\n return { ...this.parent?.(), ...markdownTableStorage() };\n },\n});\n\n/**\n * The Link mark with the excerpt a citation carries (`data-excerpt`, the\n * source chip's tooltip and scroll-to-text target) and an href allow-list\n * narrower than tiptap's default: `http(s):`, `mailto:`, the screen-point\n * protocol and app-relative Spaces paths pass; every other scheme\n * (`javascript:`, `ftp:`, `data:`, protocol-relative `//host`) is dropped and\n * its label kept as text. The same rule governs the composer's autolink.\n */\nexport const ChatLinkExtension = Link.extend({\n addAttributes() {\n return {\n ...this.parent?.(),\n excerpt: {\n default: null,\n parseHTML: (element: HTMLElement) => element.getAttribute(\"data-excerpt\"),\n renderHTML: (attributes: Record<string, unknown>) =>\n typeof attributes.excerpt === \"string\" && attributes.excerpt\n ? { \"data-excerpt\": attributes.excerpt }\n : {},\n },\n };\n },\n});\n\n/** Both the editable draft and the static message body use this schema and parser. */\nexport function createChatTextExtensions(): Extensions {\n return [\n StarterKit.configure({\n codeBlock: false,\n // Tiptap 3 StarterKit also bundles these; chat text registers its own link and never had the rest.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n }),\n ChatCodeBlockExtension,\n ChatLinkExtension.configure({\n openOnClick: false,\n autolink: true,\n linkOnPaste: true,\n // No `protocols`: Tiptap's Link registers them with linkifyjs in every\n // editor's onCreate, and linkifyjs accepts a scheme only before its first\n // scan — so each chat body or composer created after the first one logged\n // \"linkifyjs: already initialized\" (seen in Chrome's extension Errors\n // page). Screen points arrive as markdown links (`[label](athena-point://…)`),\n // which parse without linkify, and `isAllowedChatHref` already admits\n // the scheme; only autolinking a bare `athena-point://` string needed it.\n isAllowedUri: (url) => isAllowedChatHref(url),\n }),\n Image.configure({ inline: true }),\n ChatTableExtension.configure({ resizable: false }),\n TableRow,\n TableCell,\n TableHeader,\n TaskList,\n TaskItem.configure({ nested: true }),\n Markdown.configure({\n html: true,\n tightLists: true,\n tightListClass: \"tight\",\n bulletListMarker: \"-\",\n linkify: true,\n breaks: true,\n transformPastedText: true,\n transformCopiedText: false,\n }),\n ChatMentionExtension,\n ];\n}\n\n/** The slice of a markdown-it token {@link TypedTextReading} rewrites. */\ninterface MarkdownToken {\n type: string;\n tag: string;\n nesting: number;\n markup: string;\n content: string;\n children: MarkdownToken[] | null;\n}\n\n/** The slice of markdown-it (the instance tiptap-markdown parses with) {@link TypedTextReading} configures. */\ninterface MarkdownIt {\n disable(rules: string | string[], ignoreInvalid?: boolean): unknown;\n core: {\n ruler: {\n after(\n afterName: string,\n ruleName: string,\n rule: (state: { tokens: MarkdownToken[] }) => void,\n ): void;\n };\n };\n}\n\n/** A line break tag: the one piece of HTML a composer writes, for a line break inside a table cell. */\nconst LINE_BREAK_TAG = /^<br\\s*\\/?>$/i;\n\n/**\n * The inline token a typed reading shows as the characters it was written\n * with. Raw HTML counts only when it is in the text itself (`source`, the\n * inline block's own content): a task list's checkbox is HTML markdown-it's\n * task-list rule makes, not text anyone typed.\n */\nfunction isTypedCharacters(token: MarkdownToken, source: string, inTable: boolean): boolean {\n if (token.type === \"html_inline\") {\n return (\n source.includes(token.content) && !(inTable && LINE_BREAK_TAG.test(token.content.trim()))\n );\n }\n return (\n (token.type === \"em_open\" ||\n token.type === \"em_close\" ||\n token.type === \"strong_open\" ||\n token.type === \"strong_close\") &&\n token.markup.startsWith(\"_\")\n );\n}\n\nconst typedReadingInstalled = new WeakSet<object>();\n\nfunction installTypedTextReading(markdownit: MarkdownIt): void {\n if (typedReadingInstalled.has(markdownit)) return;\n typedReadingInstalled.add(markdownit);\n markdownit.disable(\"html_block\");\n markdownit.core.ruler.after(\"inline\", \"athena_typed_text\", (state) => {\n let tables = 0;\n for (const block of state.tokens) {\n if (block.type === \"table_open\") tables += 1;\n if (block.type === \"table_close\") tables -= 1;\n for (const token of block.children ?? []) {\n if (!isTypedCharacters(token, block.content, tables > 0)) continue;\n if (token.type !== \"html_inline\") token.content = token.markup;\n token.type = \"text\";\n token.tag = \"\";\n token.nesting = 0;\n }\n }\n });\n}\n\n/**\n * How a person's typed text reads in the user bubble: the chat's Markdown,\n * except for the two readings no composer send relies on and plain text often\n * trips. Raw HTML stays the characters it was typed with (`List<T>` keeps its\n * `<T>`, `a <b>c</b>` is not bold): a composer writes a typed `<` as `&lt;`,\n * and its only tag is a `<br>` for a line break inside a table cell, which a\n * table cell still reads as one. Underscore emphasis stays underscores\n * (`obj.__init__` keeps them, `_private_` is not italic): a composer writes\n * emphasis with `*` and escapes a typed `_`. Everything a composer does write\n * (bold, lists, code, links, mention chips, tables, and the escaped Markdown\n * of older sends) reads as the assistant's reading reads it.\n */\nconst TypedTextReading = Extension.create({\n name: \"athenaTypedTextReading\",\n addStorage() {\n return {\n markdown: {\n parse: {\n setup: (markdownit: MarkdownIt) => installTypedTextReading(markdownit),\n },\n },\n };\n },\n});\n\nlet parserEditor: Editor | undefined;\nlet typedParserEditor: Editor | undefined;\n\nfunction parseWith(editor: Editor, markdown: string) {\n const html: string = getMarkdownStorage(editor).parser.parse(markdown);\n const body = new window.DOMParser().parseFromString(html, \"text/html\").body;\n normalizeCitationAnchors(body);\n return ProseMirrorDOMParser.fromSchema(editor.schema).parse(body);\n}\n\n/**\n * A single detached parser per browser tab, never an editor per message.\n * Markdown → HTML (markdown-it, with bare URLs linkified and inline HTML kept)\n * → agora's citation anchors given their hrefs → the schema's document.\n */\nexport function parseChatText(markdown: string) {\n parserEditor ??= new Editor({\n extensions: createChatTextExtensions(),\n content: \"\",\n editable: false,\n });\n return parseWith(parserEditor, markdown);\n}\n\n/**\n * {@link parseChatText} for text a person typed (a user message): the same\n * schema and document, read with {@link TypedTextReading}.\n */\nexport function parseTypedChatText(markdown: string) {\n typedParserEditor ??= new Editor({\n extensions: [...createChatTextExtensions(), TypedTextReading],\n content: \"\",\n editable: false,\n });\n return parseWith(typedParserEditor, markdown);\n}\n\n/** Typography is shared; the composer supplies only its padding and scroll boundary. */\nexport const CHAT_TEXT_CLASS =\n \"aui-md prose prose-sm max-w-none min-w-0 break-words text-sm leading-snug text-foreground prose-p:my-1.5 prose-p:leading-snug prose-headings:mt-3 prose-headings:mb-1.5 prose-headings:font-semibold prose-h1:text-sm prose-h2:text-sm prose-h3:text-xs prose-ul:my-1.5 prose-ol:my-1.5 prose-li:my-0.5 prose-blockquote:border-l-2 prose-blockquote:border-border prose-blockquote:text-muted-foreground prose-code:rounded prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:text-xs prose-code:font-mono prose-code:before:content-none prose-code:after:content-none prose-pre:my-2 prose-pre:overflow-x-auto prose-pre:rounded-lg prose-pre:border prose-pre:border-border prose-pre:bg-muted/30 prose-pre:p-3 prose-a:text-primary prose-a:underline prose-a:decoration-primary/40 prose-a:underline-offset-2 hover:prose-a:decoration-primary prose-strong:font-semibold prose-hr:border-border [&>:first-child]:mt-0 [&>:last-child]:mb-0 [&_table]:block [&_table]:overflow-x-auto [&_td]:border [&_td]:border-border [&_td]:px-2 [&_th]:border [&_th]:border-border [&_th]:px-2 [&_ul[data-type=taskList]]:list-none [&_ul[data-type=taskList]]:pl-0 [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:gap-2\";\n"],"names":["ProseMirrorDOMParser"],"mappings":"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"}
@@ -10,7 +10,7 @@ const runtimeMessage = require("./messages/runtime-message.cjs");
10
10
  const wakeMarker = require("./messages/wake-marker.cjs");
11
11
  const WaitingOnYouBanner = require("../chat/WaitingOnYouBanner.cjs");
12
12
  const statewireContinueRun = require("./messages/statewire-continue-run.cjs");
13
- const interrupts = require("../packages/agent-runtime/src/interrupts.cjs");
13
+ const interrupts = require("../agent-runtime/src/interrupts.cjs");
14
14
  exports.StatewireApprovalCard = StatewireApprovalCard.StatewireApprovalCard;
15
15
  exports.useStatewireApprovalRequest = useStatewireApprovalRequest.useStatewireApprovalRequest;
16
16
  exports.StatewireQueuedMessages = StatewireQueuedMessages.StatewireQueuedMessages;
@@ -10,7 +10,7 @@
10
10
  */
11
11
  export { StatewireApprovalCard, type StatewireApprovalCardProps, type StatewireApprovalEditorContext, type StatewireApprovalRequestContext, } from "../chat/StatewireApprovalCard";
12
12
  export { type StatewireApprovalRequest, type StatewireInterruptPredicate, type UseStatewireApprovalRequestOptions, useStatewireApprovalRequest, } from "../chat/use-statewire-approval-request";
13
- export { StatewireQueuedMessages, type StatewireQueueEditorContext, type StatewireQueueEvent, type StatewireQueueRowContentContext, type StatewireQueuedMessagesProps, } from "../chat/StatewireQueuedMessages";
13
+ export { StatewireQueuedMessages, type StatewireQueueEditorContext, type StatewireQueueEvent, type StatewireQueueRowContentContext, type StatewireQueueRowMarkerContext, type StatewireQueuedMessagesProps, } from "../chat/StatewireQueuedMessages";
14
14
  export { HistoryEdgeRow, type HistoryEdgeRowProps, StatewireHistoryEdge, type StatewireHistoryEdgeProps, } from "./thread/statewire-history-edge";
15
15
  export { StatewireToolOutputsContext, useStatewireToolOutputs, } from "../provider/statewire-window-context";
16
16
  export { ContinuePill } from "./messages/continue-pill";
@@ -8,7 +8,7 @@ import { RuntimeMessageCard } from "./messages/runtime-message.js";
8
8
  import { WakeMarkerCard, WakeMarkerMessage } from "./messages/wake-marker.js";
9
9
  import { WaitingOnYouBanner, WaitingOnYouBannerView } from "../chat/WaitingOnYouBanner.js";
10
10
  import { StatewireContinueRunAffordance, StatewireContinueRunButton, StatewireRunEndedFooter } from "./messages/statewire-continue-run.js";
11
- import { HITL_PENDING_RESUME_GRACE_MS } from "../packages/agent-runtime/src/interrupts.js";
11
+ import { HITL_PENDING_RESUME_GRACE_MS } from "../agent-runtime/src/interrupts.js";
12
12
  export {
13
13
  ContinuePill,
14
14
  HITL_PENDING_RESUME_GRACE_MS,
@@ -4,8 +4,8 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("@assistant-ui/react");
5
5
  const react$1 = require("react");
6
6
  const statewireWindowContext = require("../../provider/statewire-window-context.cjs");
7
- const useDeepAgentWindowSync = require("../../packages/agent-runtime/src/use-deep-agent-window-sync.cjs");
8
- const errors = require("../../packages/agent-runtime/src/errors.cjs");
7
+ const useDeepAgentWindowSync = require("../../agent-runtime/src/use-deep-agent-window-sync.cjs");
8
+ const errors = require("../../agent-runtime/src/errors.cjs");
9
9
  const cnfast = require("cnfast");
10
10
  const THREAD_VIEWPORT_ATTR = "data-aui-thread-viewport";
11
11
  const HISTORY_EDGE_NEAR_MARGIN_PX = 1500;
@@ -2,8 +2,8 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { useAuiState } from "@assistant-ui/react";
3
3
  import { useState, useRef, useEffect, useLayoutEffect } from "react";
4
4
  import { useStatewireToolOutputs } from "../../provider/statewire-window-context.js";
5
- import { useDeepAgentWindowSync } from "../../packages/agent-runtime/src/use-deep-agent-window-sync.js";
6
- import { isStatewireChannelTeardown } from "../../packages/agent-runtime/src/errors.js";
5
+ import { useDeepAgentWindowSync } from "../../agent-runtime/src/use-deep-agent-window-sync.js";
6
+ import { isStatewireChannelTeardown } from "../../agent-runtime/src/errors.js";
7
7
  import { cn } from "cnfast";
8
8
  const THREAD_VIEWPORT_ATTR = "data-aui-thread-viewport";
9
9
  const HISTORY_EDGE_NEAR_MARGIN_PX = 1500;
@@ -22,12 +22,33 @@ function _interopNamespaceDefault(e) {
22
22
  return Object.freeze(n);
23
23
  }
24
24
  const Y__namespace = /* @__PURE__ */ _interopNamespaceDefault(Y);
25
+ const DEFAULT_OFFLINE_GATE_AFTER_MS = 15e3;
26
+ const MINT_RETRY_DELAYS_MS = [1e3, 2e3, 4e3, 8e3, 15e3, 3e4, 6e4];
27
+ function isRetryableMintError(error) {
28
+ if (error instanceof mint.CollabTokenError) {
29
+ return error.status >= 500 || error.status === 408 || error.status === 429;
30
+ }
31
+ return error instanceof TypeError || error instanceof DOMException && error.name === "TimeoutError";
32
+ }
33
+ function resolveMint({ auth, mint: mint$1 }) {
34
+ if (mint$1) return mint$1;
35
+ if (!auth) throw new Error("connectGenericDoc needs `auth` or `mint`");
36
+ return ({ assetId, access }) => mint.mintCollabToken({ auth, assetId, access });
37
+ }
25
38
  function connectGenericDoc(args) {
26
39
  const access = args.access ?? "view";
40
+ const mint2 = resolveMint({ auth: args.auth, mint: args.mint });
41
+ const localCopy = args.localCopy;
42
+ const retryMintError = args.retryMintError ?? isRetryableMintError;
43
+ const offlineGateAfterMs = args.offlineGateAfterMs ?? DEFAULT_OFFLINE_GATE_AFTER_MS;
27
44
  const doc = new Y__namespace.Doc();
28
45
  const listeners = /* @__PURE__ */ new Set();
29
46
  let provider = null;
30
47
  let refreshTimer = null;
48
+ let retryTimer = null;
49
+ let offlineTimer = null;
50
+ let openingPastThreshold = null;
51
+ let mintRetries = 0;
31
52
  let destroyed = false;
32
53
  let status = "connecting";
33
54
  let synced = false;
@@ -36,14 +57,62 @@ function connectGenericDoc(args) {
36
57
  let lastPresence = null;
37
58
  let version = 0;
38
59
  let consecutiveRemints = 0;
60
+ let prepared = localCopy === void 0;
61
+ let held = false;
62
+ let heldGrant = null;
63
+ let everConnected = false;
64
+ let disconnectedSince = null;
65
+ let connectSeq = 0;
66
+ let carriedUpdates = [];
67
+ let localChangesSynced = true;
39
68
  const notify = () => {
40
69
  version += 1;
41
70
  for (const listener of listeners) listener();
42
71
  };
72
+ const unconfirmedEdits = () => {
73
+ const all = [...carriedUpdates, ...(provider == null ? void 0 : provider.unconfirmedUpdates) ?? []].map(
74
+ (entry) => entry.ids
75
+ );
76
+ if (all.length === 0) return null;
77
+ return all.length === 1 ? all[0] : Y__namespace.mergeContentIds(all);
78
+ };
79
+ const transport = {
80
+ isRemoteOrigin: (origin) => origin instanceof websocket.WebsocketProvider,
81
+ getUnconfirmed: unconfirmedEdits,
82
+ isFullySynced: () => status === "connected" && synced && localChangesSynced
83
+ };
84
+ const transportChanged = () => {
85
+ localCopy == null ? void 0 : localCopy.transportChanged();
86
+ };
87
+ const refreshLocalChangesSynced = () => {
88
+ const next = carriedUpdates.length === 0 && ((provider == null ? void 0 : provider.unconfirmedUpdates.length) ?? 0) === 0;
89
+ if (next !== localChangesSynced) {
90
+ localChangesSynced = next;
91
+ notify();
92
+ }
93
+ transportChanged();
94
+ };
95
+ doc.on("update", (update, origin) => {
96
+ if (!prepared || provider !== null || destroyed || origin instanceof websocket.WebsocketProvider) return;
97
+ carriedUpdates = [
98
+ ...carriedUpdates,
99
+ { created: Date.now(), ids: Y__namespace.createContentIdsFromUpdate(update) }
100
+ ];
101
+ refreshLocalChangesSynced();
102
+ });
43
103
  const setStatus = (next, err = null) => {
44
104
  if (destroyed && next !== "closed") return;
105
+ const wasConnected = status === "connected";
45
106
  status = next;
46
107
  error = err;
108
+ if (next === "connected") {
109
+ everConnected = true;
110
+ disconnectedSince = null;
111
+ clearOfflineTimer();
112
+ } else if (wasConnected || everConnected && disconnectedSince === null) {
113
+ disconnectedSince = Date.now();
114
+ }
115
+ transportChanged();
47
116
  notify();
48
117
  };
49
118
  const clearRefreshTimer = () => {
@@ -52,6 +121,18 @@ function connectGenericDoc(args) {
52
121
  refreshTimer = null;
53
122
  }
54
123
  };
124
+ const clearRetryTimer = () => {
125
+ if (retryTimer !== null) {
126
+ clearTimeout(retryTimer);
127
+ retryTimer = null;
128
+ }
129
+ };
130
+ function clearOfflineTimer() {
131
+ if (offlineTimer !== null) {
132
+ clearTimeout(offlineTimer);
133
+ offlineTimer = null;
134
+ }
135
+ }
55
136
  const teardownProvider = () => {
56
137
  clearRefreshTimer();
57
138
  if (synced) {
@@ -59,6 +140,7 @@ function connectGenericDoc(args) {
59
140
  notify();
60
141
  }
61
142
  if (provider) {
143
+ carriedUpdates = [...carriedUpdates, ...provider.unconfirmedUpdates];
62
144
  provider.destroy();
63
145
  provider = null;
64
146
  }
@@ -70,32 +152,105 @@ function connectGenericDoc(args) {
70
152
  void connect({ scheduledRefresh: true });
71
153
  }, delay);
72
154
  };
155
+ const scheduleRetry = () => {
156
+ clearRetryTimer();
157
+ const delay = MINT_RETRY_DELAYS_MS[Math.min(mintRetries, MINT_RETRY_DELAYS_MS.length - 1)];
158
+ mintRetries += 1;
159
+ retryTimer = setTimeout(() => {
160
+ retryTimer = null;
161
+ void connect();
162
+ }, delay);
163
+ };
164
+ const onBrowserOnline = () => {
165
+ if (destroyed || status === "closed" || status === "error" || provider !== null || held) return;
166
+ mintRetries = 0;
167
+ clearRetryTimer();
168
+ void connect();
169
+ };
170
+ if (typeof window !== "undefined") window.addEventListener("online", onBrowserOnline);
171
+ const armOfflineTakeover = () => {
172
+ if (offlineTimer !== null || !(localCopy == null ? void 0 : localCopy.beforeConnect)) return;
173
+ offlineTimer = setTimeout(() => {
174
+ offlineTimer = null;
175
+ if (destroyed || status === "connected" || provider === null) return;
176
+ if (provider.wsconnecting && !hasUnsyncedLocalEdits()) {
177
+ openingPastThreshold = provider;
178
+ armOfflineTakeover();
179
+ return;
180
+ }
181
+ teardownProvider();
182
+ void connect();
183
+ }, offlineGateAfterMs);
184
+ };
185
+ const hasUnsyncedLocalEdits = () => carriedUpdates.length > 0 || ((provider == null ? void 0 : provider.unconfirmedUpdates.length) ?? 0) > 0;
73
186
  const connect = async (opts) => {
74
187
  if (destroyed) return;
75
- const scheduledRefresh = (opts == null ? void 0 : opts.scheduledRefresh) === true;
188
+ await preparing;
189
+ if (destroyed) return;
190
+ const seq = ++connectSeq;
191
+ const scheduledRefresh = (opts == null ? void 0 : opts.scheduledRefresh) === true && status === "connected";
76
192
  if (!scheduledRefresh) {
77
193
  teardownProvider();
78
194
  } else {
79
195
  clearRefreshTimer();
80
196
  }
197
+ clearRetryTimer();
81
198
  let grant;
82
- try {
83
- grant = await mint.mintCollabToken({ auth: args.auth, assetId: args.assetId, access });
84
- } catch (err) {
85
- if (scheduledRefresh && !destroyed) {
86
- refreshTimer = setTimeout(() => {
87
- void connect({ scheduledRefresh: true });
88
- }, tokenRefresh.MIN_REFRESH_DELAY_MS);
199
+ if ((opts == null ? void 0 : opts.grant) && opts.grant.expires_at_ms - Date.now() > tokenRefresh.MIN_REFRESH_DELAY_MS) {
200
+ grant = opts.grant;
201
+ } else {
202
+ try {
203
+ grant = await mint2({ assetId: args.assetId, access });
204
+ } catch (err) {
205
+ if (destroyed || seq !== connectSeq) return;
206
+ if (scheduledRefresh) {
207
+ refreshTimer = setTimeout(() => {
208
+ void connect({ scheduledRefresh: true });
209
+ }, tokenRefresh.MIN_REFRESH_DELAY_MS);
210
+ return;
211
+ }
212
+ if (retryMintError(err)) {
213
+ if (status !== "disconnected") setStatus("disconnected");
214
+ scheduleRetry();
215
+ return;
216
+ }
217
+ setStatus("error", err instanceof Error ? err : new Error(String(err)));
218
+ return;
219
+ }
220
+ }
221
+ if (destroyed || seq !== connectSeq) return;
222
+ mintRetries = 0;
223
+ accessType = grant.access_type;
224
+ const beforeConnect = localCopy == null ? void 0 : localCopy.beforeConnect;
225
+ if (beforeConnect && !scheduledRefresh && !(opts == null ? void 0 : opts.skipGate)) {
226
+ const firstConnection = !everConnected;
227
+ const offlineForMs = disconnectedSince === null ? null : Date.now() - disconnectedSince;
228
+ let decision;
229
+ try {
230
+ decision = await beforeConnect({
231
+ grant,
232
+ firstConnection,
233
+ offlineForMs,
234
+ hasUnsyncedEdits: hasUnsyncedLocalEdits()
235
+ });
236
+ } catch {
237
+ if (destroyed || seq !== connectSeq) return;
238
+ if (status !== "disconnected") setStatus("disconnected");
239
+ scheduleRetry();
240
+ return;
241
+ }
242
+ if (destroyed || seq !== connectSeq) return;
243
+ if (decision === "hold") {
244
+ held = true;
245
+ heldGrant = grant;
246
+ if (status !== "disconnected") setStatus("disconnected");
247
+ else notify();
89
248
  return;
90
249
  }
91
- setStatus("error", err instanceof Error ? err : new Error(String(err)));
92
- return;
93
250
  }
94
- if (destroyed) return;
95
251
  if (scheduledRefresh) {
96
252
  teardownProvider();
97
253
  }
98
- accessType = grant.access_type;
99
254
  const nextProvider = new websocket.WebsocketProvider(grant.ws_url, `${grant.org}/${grant.doc_id}`, doc, {
100
255
  params: {
101
256
  yauth: grant.token,
@@ -108,8 +263,20 @@ function connectGenericDoc(args) {
108
263
  disableBc: true
109
264
  });
110
265
  provider = nextProvider;
266
+ nextProvider.unconfirmedUpdates = [...carriedUpdates, ...nextProvider.unconfirmedUpdates];
267
+ carriedUpdates = [];
268
+ refreshLocalChangesSynced();
269
+ nextProvider.on("sync-status", () => {
270
+ if (provider !== nextProvider) return;
271
+ refreshLocalChangesSynced();
272
+ });
111
273
  nextProvider.on("status", (event) => {
112
274
  if (provider !== nextProvider) return;
275
+ if (event.status === "connected" && openingPastThreshold === nextProvider && hasUnsyncedLocalEdits()) {
276
+ teardownProvider();
277
+ void connect();
278
+ return;
279
+ }
113
280
  if (event.status === "connected") {
114
281
  consecutiveRemints = 0;
115
282
  }
@@ -117,11 +284,14 @@ function connectGenericDoc(args) {
117
284
  if (event.status === "connected" && lastPresence !== null) {
118
285
  nextProvider.awareness.setLocalState(lastPresence);
119
286
  }
287
+ if (event.status !== "connected") armOfflineTakeover();
120
288
  });
289
+ if (!nextProvider.wsconnected) armOfflineTakeover();
121
290
  nextProvider.on("sync", (state) => {
122
291
  if (provider !== nextProvider) return;
123
292
  if (synced !== state) {
124
293
  synced = state;
294
+ transportChanged();
125
295
  notify();
126
296
  }
127
297
  });
@@ -153,6 +323,15 @@ function connectGenericDoc(args) {
153
323
  });
154
324
  scheduleRefresh(grant);
155
325
  };
326
+ const preparing = localCopy ? localCopy.prepare({ doc, transport }).catch(() => ({ unsyncedEdits: null })).then(({ unsyncedEdits }) => {
327
+ if (destroyed) return;
328
+ if (unsyncedEdits && !(unsyncedEdits.inserts.isEmpty() && unsyncedEdits.deletes.isEmpty())) {
329
+ carriedUpdates = [...carriedUpdates, { created: Date.now(), ids: unsyncedEdits }];
330
+ }
331
+ prepared = true;
332
+ refreshLocalChangesSynced();
333
+ notify();
334
+ }) : Promise.resolve();
156
335
  void connect();
157
336
  const waitForSync = (timeoutMs = 15e3) => new Promise((resolve, reject) => {
158
337
  const terminal = () => {
@@ -201,12 +380,21 @@ function connectGenericDoc(args) {
201
380
  get synced() {
202
381
  return synced;
203
382
  },
383
+ get localChangesSynced() {
384
+ return localChangesSynced;
385
+ },
204
386
  get accessType() {
205
387
  return accessType;
206
388
  },
207
389
  get error() {
208
390
  return error;
209
391
  },
392
+ get prepared() {
393
+ return prepared;
394
+ },
395
+ get held() {
396
+ return held;
397
+ },
210
398
  get version() {
211
399
  return version;
212
400
  },
@@ -223,7 +411,19 @@ function connectGenericDoc(args) {
223
411
  lastPresence = state;
224
412
  provider == null ? void 0 : provider.awareness.setLocalState(state);
225
413
  },
226
- refreshNow: () => connect({ scheduledRefresh: true }),
414
+ refreshNow: () => {
415
+ if (held) return Promise.resolve();
416
+ return provider ? connect({ scheduledRefresh: true }) : connect();
417
+ },
418
+ resume: () => {
419
+ if (!held || destroyed) return;
420
+ held = false;
421
+ const grant = heldGrant;
422
+ heldGrant = null;
423
+ notify();
424
+ void connect({ skipGate: true, grant: grant ?? void 0 });
425
+ },
426
+ unconfirmedEdits,
227
427
  onChange: (listener) => {
228
428
  listeners.add(listener);
229
429
  return () => {
@@ -234,6 +434,9 @@ function connectGenericDoc(args) {
234
434
  if (destroyed) return;
235
435
  destroyed = true;
236
436
  teardownProvider();
437
+ clearRetryTimer();
438
+ clearOfflineTimer();
439
+ if (typeof window !== "undefined") window.removeEventListener("online", onBrowserOnline);
237
440
  status = "closed";
238
441
  for (const listener of [...listeners]) listener();
239
442
  listeners.clear();
@@ -242,5 +445,7 @@ function connectGenericDoc(args) {
242
445
  };
243
446
  }
244
447
  exports.CollabTokenError = mint.CollabTokenError;
448
+ exports.DEFAULT_OFFLINE_GATE_AFTER_MS = DEFAULT_OFFLINE_GATE_AFTER_MS;
245
449
  exports.connectGenericDoc = connectGenericDoc;
450
+ exports.isRetryableMintError = isRetryableMintError;
246
451
  //# sourceMappingURL=client.cjs.map