@athenaintel/react 0.28.0 → 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 +12 -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 +12 -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 +365 -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 +365 -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 +39 -97
  550. package/dist/tools/tool-uis.cjs.map +1 -1
  551. package/dist/tools/tool-uis.js +39 -97
  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
@@ -0,0 +1,198 @@
1
+ import { useQuery } from "@tanstack/react-query";
2
+ import { useContext, useMemo, useRef, useEffect } from "react";
3
+ import { useAthenaQueryClient } from "../lib/use-athena-rest-query.js";
4
+ import { withCredentialRenewal } from "../runtime/credential-renewal.js";
5
+ import { listThreads } from "./api.js";
6
+ import { createRestConversationListFetcher } from "./conversation-list-fetcher.js";
7
+ import { supportedFiltersFromResponse, sessionsQueryKey, planSessionsQuery, sessionsQueryFromKey, unavailableSessionsQueryFields, matchesSessionsQuery, sortSessions } from "./sessions-query.js";
8
+ import { AthenaSessionsLiveContext, foldConversationIndex, threadSummaryFromConversation, indexedThreadsToRefreshFor } from "./statewire-thread-list.js";
9
+ import { useConversationList } from "../agent-runtime/src/use-conversation-list.js";
10
+ const DEFAULT_PAGE_SIZE = 50;
11
+ const THREAD_LIST_CAPABILITIES_QUERY_KEY = [
12
+ "athena-sdk",
13
+ "thread-list-capabilities"
14
+ ];
15
+ const EMPTY_ROWS = [];
16
+ const NOOP = () => void 0;
17
+ const NOOP_ASYNC = async () => void 0;
18
+ function useAthenaSessions({
19
+ query,
20
+ pageSize = DEFAULT_PAGE_SIZE,
21
+ enabled = true
22
+ }) {
23
+ const live = useContext(AthenaSessionsLiveContext);
24
+ const isAvailable = live !== null;
25
+ const backendUrl = (live == null ? void 0 : live.backendUrl) ?? "";
26
+ const principal = (live == null ? void 0 : live.principal) ?? "";
27
+ const hasAuth = (live == null ? void 0 : live.hasAuth) ?? false;
28
+ const includePullRequests = (live == null ? void 0 : live.includePullRequests) ?? false;
29
+ const getAuth = live == null ? void 0 : live.getAuth;
30
+ const active = isAvailable && enabled && hasAuth;
31
+ const identityScope = `${(live == null ? void 0 : live.scopeKey) ?? "unavailable"}::credential-${(live == null ? void 0 : live.credentialGeneration) ?? 0}`;
32
+ const queryClient = useAthenaQueryClient();
33
+ const capabilities = useQuery(
34
+ {
35
+ queryKey: [
36
+ ...THREAD_LIST_CAPABILITIES_QUERY_KEY,
37
+ backendUrl,
38
+ principal,
39
+ (live == null ? void 0 : live.credentialGeneration) ?? 0
40
+ ],
41
+ queryFn: async ({ signal }) => {
42
+ if (!getAuth) return null;
43
+ const response = await withCredentialRenewal(
44
+ getAuth,
45
+ (auth) => listThreads(backendUrl, auth, { limit: 1, signal })
46
+ );
47
+ return supportedFiltersFromResponse(response.supported_filters);
48
+ },
49
+ enabled: active,
50
+ staleTime: Number.POSITIVE_INFINITY,
51
+ retry: 1
52
+ },
53
+ queryClient
54
+ );
55
+ const capabilitiesSettled = capabilities.isSuccess || capabilities.isError;
56
+ const supportedFilters = capabilities.data ?? null;
57
+ const queryKey = sessionsQueryKey(query);
58
+ const plan = useMemo(
59
+ () => planSessionsQuery(sessionsQueryFromKey(queryKey), {
60
+ supportedFilters,
61
+ includePullRequests
62
+ }),
63
+ [queryKey, supportedFilters, includePullRequests]
64
+ );
65
+ const planRef = useRef(plan);
66
+ planRef.current = plan;
67
+ const unsupportedFields = useMemo(
68
+ () => capabilitiesSettled ? unavailableSessionsQueryFields({ supportedFilters, includePullRequests }) : [],
69
+ [capabilitiesSettled, supportedFilters, includePullRequests]
70
+ );
71
+ const fetchPage = useMemo(
72
+ () => getAuth ? createRestConversationListFetcher({
73
+ backendUrl,
74
+ getAuth,
75
+ includePullRequests,
76
+ extraFilters: plan.body,
77
+ keepRow: (row) => matchesSessionsQuery(row, planRef.current.local)
78
+ }) : async () => ({ items: [], hasMore: false, totalCount: null }),
79
+ [backendUrl, getAuth, includePullRequests, plan.body]
80
+ );
81
+ const baseFilter = (live == null ? void 0 : live.baseFilter) ?? {};
82
+ const capabilityKey = supportedFilters ? [...supportedFilters].sort().join(",") : "legacy";
83
+ const list = useConversationList({
84
+ fetchPage,
85
+ filter: baseFilter,
86
+ pageSize,
87
+ // The query's server filters are not part of the shared filter contract,
88
+ // so they — and what this backend applies of them — key the cache here.
89
+ scopeKey: `${identityScope}::sessions::${queryKey}::${capabilityKey}`,
90
+ enabled: active && capabilitiesSettled,
91
+ queryClient
92
+ });
93
+ const lastResolvedRef = useRef({
94
+ scope: "",
95
+ conversations: []
96
+ });
97
+ if (list.hasResolvedFirstPage) {
98
+ lastResolvedRef.current = { scope: identityScope, conversations: list.conversations };
99
+ }
100
+ const standIn = !list.hasResolvedFirstPage && lastResolvedRef.current.scope === identityScope ? lastResolvedRef.current.conversations : null;
101
+ const source = standIn ?? list.conversations;
102
+ const isPlaceholderData = standIn !== null && standIn.length > 0;
103
+ const indexByThread = live == null ? void 0 : live.indexByThread;
104
+ const applyOverrides = live == null ? void 0 : live.applyOverrides;
105
+ const rows = useMemo(() => {
106
+ if (!indexByThread || !applyOverrides) return EMPTY_ROWS;
107
+ const folded = applyOverrides(
108
+ foldConversationIndex(source, indexByThread)
109
+ ).filter((row) => matchesSessionsQuery(row, plan.local));
110
+ return sortSessions(folded, plan.local).map(threadSummaryFromConversation);
111
+ }, [source, indexByThread, applyOverrides, plan.local]);
112
+ const refreshedForRef = useRef(/* @__PURE__ */ new Set());
113
+ const indexEntries = (live == null ? void 0 : live.indexEntries) ?? null;
114
+ const listRefresh = list.refresh;
115
+ const baseAppId = baseFilter.appId;
116
+ const baseAppIds = baseFilter.appIds;
117
+ useEffect(() => {
118
+ if (!active || indexEntries === null || !list.hasResolvedFirstPage) return;
119
+ const unlisted = indexEntryVersionsToRefresh({
120
+ entries: indexEntries,
121
+ listedThreadIds: new Set(list.conversations.map((conversation) => conversation.threadId)),
122
+ refreshedVersions: refreshedForRef.current,
123
+ appId: baseAppId,
124
+ additionalAppIds: baseAppIds ?? [],
125
+ query: plan.local
126
+ });
127
+ for (const version of unlisted) refreshedForRef.current.add(version);
128
+ if (unlisted.length > 0) void listRefresh();
129
+ }, [
130
+ active,
131
+ indexEntries,
132
+ list.hasResolvedFirstPage,
133
+ list.conversations,
134
+ baseAppId,
135
+ baseAppIds,
136
+ listRefresh,
137
+ plan.local
138
+ ]);
139
+ const listFetchNextPage = list.fetchNextPage;
140
+ return {
141
+ rows: isAvailable ? rows : EMPTY_ROWS,
142
+ isAvailable,
143
+ isLoading: active && (!capabilitiesSettled || list.isLoading),
144
+ isFetching: list.isFetching || capabilities.isFetching,
145
+ hasResolvedFirstPage: list.hasResolvedFirstPage,
146
+ isPlaceholderData,
147
+ hasNextPage: list.hasNextPage,
148
+ isFetchingNextPage: list.isFetchingNextPage,
149
+ fetchNextPage: isAvailable ? () => void listFetchNextPage() : NOOP,
150
+ refresh: isAvailable ? async () => void await listRefresh() : NOOP_ASYNC,
151
+ isFetchNextPageError: list.isFetchNextPageError,
152
+ supportedFilters,
153
+ degradedFields: plan.degraded,
154
+ unavailableFields: plan.unavailable,
155
+ unsupportedFields
156
+ };
157
+ }
158
+ function indexEntryVersionsToRefresh({
159
+ entries,
160
+ listedThreadIds,
161
+ refreshedVersions,
162
+ appId,
163
+ additionalAppIds,
164
+ query
165
+ }) {
166
+ const versionOf = (entry) => `${entry.thread_id}@${entry.updated_at}`;
167
+ const byVersion = new Map(entries.map((entry) => [versionOf(entry), entry]));
168
+ return indexedThreadsToRefreshFor({
169
+ entries: entries.map((entry) => ({ thread_id: versionOf(entry), app_id: entry.app_id })),
170
+ listedThreadIds: new Set(
171
+ entries.filter((entry) => listedThreadIds.has(entry.thread_id)).map(versionOf)
172
+ ),
173
+ refreshedThreadIds: refreshedVersions,
174
+ appId,
175
+ additionalAppIds
176
+ }).filter((version) => {
177
+ const entry = byVersion.get(version);
178
+ return entry === void 0 || entryCouldMatch(entry, query);
179
+ });
180
+ }
181
+ function entryCouldMatch(entry, query) {
182
+ if (query.unreadOnly && entry.is_unread === false) return false;
183
+ if (query.favoritesOnly && entry.is_favorited === false) return false;
184
+ if (query.runStatuses && typeof entry.run_status === "string" && !query.runStatuses.includes(entry.run_status)) {
185
+ return false;
186
+ }
187
+ if (query.sessionStatuses && typeof entry.session_status === "string" && !query.sessionStatuses.includes(entry.session_status)) {
188
+ return false;
189
+ }
190
+ return true;
191
+ }
192
+ export {
193
+ THREAD_LIST_CAPABILITIES_QUERY_KEY,
194
+ entryCouldMatch,
195
+ indexEntryVersionsToRefresh,
196
+ useAthenaSessions
197
+ };
198
+ //# sourceMappingURL=use-athena-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-athena-sessions.js","sources":["../../src/threads/use-athena-sessions.ts"],"sourcesContent":["/**\n * `useAthenaSessions(query)` — one filtered, sorted, live session list under\n * `<AthenaProvider enableThreadList>`: the data layer of `SessionsPage` and\n * `Inbox`, for hosts drawing their own.\n *\n * - **Server-side.** The query travels to `POST /api/conversations/threads/list`\n * as filters of the server's one page statement (`planSessionsQuery`), over\n * the shared two-tier pager (`useConversationList`: a live first page and\n * frozen history pages) in the thread-list provider's query client.\n * - **Live.** Rows fold the same conversation-index pushes the sidebar folds\n * (titles, lifecycle, attention flip in place), carry the provider's\n * in-flight writes (pin, rename, read state, archive), and a thread the\n * index learns about that the list does not show yet refreshes the list\n * once.\n * - **Degraded, not wrong.** A server that cannot apply part of the query is\n * detected from its `supported_filters` echo (one `limit: 1` probe per\n * identity). Fields the loaded rows can be tested on are applied to them\n * (`degradedFields`: exact per page, a page can come back short); fields\n * they cannot are reported in `unavailableFields` and not applied, so a\n * control for them can be disabled rather than lie.\n */\nimport {\n type ConversationListFilter,\n type ConversationSummary,\n useConversationList,\n} from '@athenaintel/agent-runtime';\nimport { useQuery } from '@tanstack/react-query';\nimport { useContext, useEffect, useMemo, useRef } from 'react';\nimport { useAthenaQueryClient } from '../lib/use-athena-rest-query';\nimport { withCredentialRenewal } from '../runtime/credential-renewal';\nimport { listThreads } from './api';\nimport { createRestConversationListFetcher } from './conversation-list-fetcher';\nimport {\n type AthenaSessionsQuery,\n type AthenaSessionsQueryField,\n matchesSessionsQuery,\n planSessionsQuery,\n sessionsQueryFromKey,\n sessionsQueryKey,\n sortSessions,\n supportedFiltersFromResponse,\n unavailableSessionsQueryFields,\n} from './sessions-query';\nimport {\n AthenaSessionsLiveContext,\n type AthenaStatewireThreadSummary,\n foldConversationIndex,\n indexedThreadsToRefreshFor,\n threadSummaryFromConversation,\n} from './statewire-thread-list';\n\nexport interface UseAthenaSessionsOptions {\n /** What to list. A new object with the same content does not refetch. */\n query: AthenaSessionsQuery;\n /** Rows per page (default 50). */\n pageSize?: number;\n /** `false` holds the list idle. Default `true`. */\n enabled?: boolean;\n}\n\nexport interface AthenaSessionsList {\n /** The rows, in the query's order, with live pushes and in-flight writes applied. */\n rows: AthenaStatewireThreadSummary[];\n /** `false` outside `enableThreadList` mode: nothing is fetched and `rows` stays empty. */\n isAvailable: boolean;\n /** True until the first page has answered (or while no credential has resolved). */\n isLoading: boolean;\n isFetching: boolean;\n hasResolvedFirstPage: boolean;\n /**\n * True while the rows are the previous query's (checked against this\n * query's local part) because this query's first page is still in flight.\n */\n isPlaceholderData: boolean;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => void;\n /** Refetch the first page; resolves once it has answered. */\n refresh: () => Promise<void>;\n /** True while the last \"load more\" request failed. */\n isFetchNextPageError: boolean;\n /**\n * The server fields this backend applies (`supported_filters`), `null`\n * while unknown or on a backend that predates the list.\n */\n supportedFilters: ReadonlySet<string> | null;\n /** Fields applied to the loaded rows because the backend cannot. */\n degradedFields: AthenaSessionsQueryField[];\n /** Fields of this query that cannot be applied on this backend at all (and are not). */\n unavailableFields: AthenaSessionsQueryField[];\n /**\n * Every field this backend cannot apply anywhere, selected or not — what a\n * filter UI disables. Empty until the capabilities probe has answered.\n */\n unsupportedFields: AthenaSessionsQueryField[];\n}\n\nconst DEFAULT_PAGE_SIZE = 50;\n\n/** The capabilities probe's key prefix. */\nexport const THREAD_LIST_CAPABILITIES_QUERY_KEY = [\n 'athena-sdk',\n 'thread-list-capabilities',\n] as const;\n\nconst EMPTY_ROWS: AthenaStatewireThreadSummary[] = [];\nconst NOOP = () => undefined;\nconst NOOP_ASYNC = async () => undefined;\n\nexport function useAthenaSessions({\n query,\n pageSize = DEFAULT_PAGE_SIZE,\n enabled = true,\n}: UseAthenaSessionsOptions): AthenaSessionsList {\n const live = useContext(AthenaSessionsLiveContext);\n const isAvailable = live !== null;\n const backendUrl = live?.backendUrl ?? '';\n const principal = live?.principal ?? '';\n const hasAuth = live?.hasAuth ?? false;\n const includePullRequests = live?.includePullRequests ?? false;\n const getAuth = live?.getAuth;\n const active = isAvailable && enabled && hasAuth;\n // Every cache below is keyed by WHO reads (principal) and WITH WHAT (the\n // credential generation): a scoped credential for another workspace under\n // the same principal must never read this one's cached rows.\n const identityScope = `${live?.scopeKey ?? 'unavailable'}::credential-${\n live?.credentialGeneration ?? 0\n }`;\n\n // Outside thread-list mode there may be no `QueryClientProvider`; every\n // query below is disabled there, on a client of this hook's own.\n const queryClient = useAthenaQueryClient();\n\n // Which filters this backend applies: one tiny page per identity. The\n // answer is a property of the deployed agora, so it never goes stale.\n const capabilities = useQuery(\n {\n queryKey: [\n ...THREAD_LIST_CAPABILITIES_QUERY_KEY,\n backendUrl,\n principal,\n live?.credentialGeneration ?? 0,\n ],\n queryFn: async ({ signal }) => {\n if (!getAuth) return null;\n const response = await withCredentialRenewal(getAuth, (auth) =>\n listThreads(backendUrl, auth, { limit: 1, signal }),\n );\n return supportedFiltersFromResponse(response.supported_filters);\n },\n enabled: active,\n staleTime: Number.POSITIVE_INFINITY,\n retry: 1,\n },\n queryClient,\n );\n // A failed probe is treated as an older backend: the query degrades\n // instead of the list staying empty.\n const capabilitiesSettled = capabilities.isSuccess || capabilities.isError;\n const supportedFilters = capabilities.data ?? null;\n\n // `query` may be a fresh object every render; its normalized key is what\n // identifies it, so the plan is built from the key and recomputed only\n // when the content changes.\n const queryKey = sessionsQueryKey(query);\n const plan = useMemo(\n () =>\n planSessionsQuery(sessionsQueryFromKey(queryKey), {\n supportedFilters,\n includePullRequests,\n }),\n [queryKey, supportedFilters, includePullRequests],\n );\n const planRef = useRef(plan);\n planRef.current = plan;\n const unsupportedFields = useMemo(\n () =>\n capabilitiesSettled\n ? unavailableSessionsQueryFields({ supportedFilters, includePullRequests })\n : [],\n [capabilitiesSettled, supportedFilters, includePullRequests],\n );\n\n const fetchPage = useMemo(\n () =>\n getAuth\n ? createRestConversationListFetcher({\n backendUrl,\n getAuth,\n includePullRequests,\n extraFilters: plan.body,\n keepRow: (row) => matchesSessionsQuery(row, planRef.current.local),\n })\n : async () => ({ items: [], hasMore: false, totalCount: null }),\n [backendUrl, getAuth, includePullRequests, plan.body],\n );\n const baseFilter: ConversationListFilter = live?.baseFilter ?? {};\n const capabilityKey = supportedFilters ? [...supportedFilters].sort().join(',') : 'legacy';\n const list = useConversationList({\n fetchPage,\n filter: baseFilter,\n pageSize,\n // The query's server filters are not part of the shared filter contract,\n // so they — and what this backend applies of them — key the cache here.\n scopeKey: `${identityScope}::sessions::${queryKey}::${capabilityKey}`,\n enabled: active && capabilitiesSettled,\n queryClient,\n });\n\n // While a changed query's first page is in flight, the previous query's\n // rows stand in, checked against the new query's local part — the list\n // narrows at once instead of blanking to skeletons. Only rows read as the\n // same identity and credential ever stand in.\n const lastResolvedRef = useRef<{ scope: string; conversations: ConversationSummary[] }>({\n scope: '',\n conversations: [],\n });\n if (list.hasResolvedFirstPage) {\n lastResolvedRef.current = { scope: identityScope, conversations: list.conversations };\n }\n const standIn =\n !list.hasResolvedFirstPage && lastResolvedRef.current.scope === identityScope\n ? lastResolvedRef.current.conversations\n : null;\n const source = standIn ?? list.conversations;\n const isPlaceholderData = standIn !== null && standIn.length > 0;\n\n const indexByThread = live?.indexByThread;\n const applyOverrides = live?.applyOverrides;\n const rows = useMemo(() => {\n if (!indexByThread || !applyOverrides) return EMPTY_ROWS;\n const folded: ConversationSummary[] = applyOverrides(\n foldConversationIndex(source, indexByThread),\n ).filter((row) => matchesSessionsQuery(row, plan.local));\n return sortSessions(folded, plan.local).map(threadSummaryFromConversation);\n }, [source, indexByThread, applyOverrides, plan.local]);\n\n // A thread the index knows that this list does not show yet refreshes the\n // list — it may be new, or may have just come to match. Once per VERSION of\n // the entry (its id and `updated_at`): an unchanged entry the server keeps\n // leaving out never refreshes twice, and a later change to it (a PR opened,\n // a run now needing input) gets its own refresh.\n const refreshedForRef = useRef<Set<string>>(new Set());\n const indexEntries = live?.indexEntries ?? null;\n const listRefresh = list.refresh;\n const baseAppId = baseFilter.appId;\n const baseAppIds = baseFilter.appIds;\n useEffect(() => {\n if (!active || indexEntries === null || !list.hasResolvedFirstPage) return;\n const unlisted = indexEntryVersionsToRefresh({\n entries: indexEntries,\n listedThreadIds: new Set(list.conversations.map((conversation) => conversation.threadId)),\n refreshedVersions: refreshedForRef.current,\n appId: baseAppId,\n additionalAppIds: baseAppIds ?? [],\n query: plan.local,\n });\n for (const version of unlisted) refreshedForRef.current.add(version);\n if (unlisted.length > 0) void listRefresh();\n }, [\n active,\n indexEntries,\n list.hasResolvedFirstPage,\n list.conversations,\n baseAppId,\n baseAppIds,\n listRefresh,\n plan.local,\n ]);\n\n const listFetchNextPage = list.fetchNextPage;\n return {\n rows: isAvailable ? rows : EMPTY_ROWS,\n isAvailable,\n isLoading: active && (!capabilitiesSettled || list.isLoading),\n isFetching: list.isFetching || capabilities.isFetching,\n hasResolvedFirstPage: list.hasResolvedFirstPage,\n isPlaceholderData,\n hasNextPage: list.hasNextPage,\n isFetchingNextPage: list.isFetchingNextPage,\n fetchNextPage: isAvailable ? () => void listFetchNextPage() : NOOP,\n refresh: isAvailable ? async () => void (await listRefresh()) : NOOP_ASYNC,\n isFetchNextPageError: list.isFetchNextPageError,\n supportedFilters,\n degradedFields: plan.degraded,\n unavailableFields: plan.unavailable,\n unsupportedFields,\n };\n}\n\ntype IndexEntryLike = Parameters<typeof entryCouldMatch>[0] & {\n thread_id: string;\n updated_at: string;\n app_id: string | null;\n};\n\n/**\n * The index entries that warrant one refresh of a filtered list, as\n * `<thread_id>@<updated_at>` versions: entries the list does not show, of\n * the apps it lists, that the query could match on what the entry carries,\n * and whose version has not prompted a refresh before. An unchanged entry the\n * server keeps leaving out refreshes once; any later change to it refreshes\n * again. Exported for tests.\n */\nexport function indexEntryVersionsToRefresh({\n entries,\n listedThreadIds,\n refreshedVersions,\n appId,\n additionalAppIds,\n query,\n}: {\n entries: readonly IndexEntryLike[];\n listedThreadIds: ReadonlySet<string>;\n refreshedVersions: ReadonlySet<string>;\n appId: string | undefined;\n additionalAppIds: readonly string[];\n query: AthenaSessionsQuery;\n}): string[] {\n const versionOf = (entry: IndexEntryLike) => `${entry.thread_id}@${entry.updated_at}`;\n const byVersion = new Map(entries.map((entry) => [versionOf(entry), entry]));\n return indexedThreadsToRefreshFor({\n entries: entries.map((entry) => ({ thread_id: versionOf(entry), app_id: entry.app_id })),\n listedThreadIds: new Set(\n entries.filter((entry) => listedThreadIds.has(entry.thread_id)).map(versionOf),\n ),\n refreshedThreadIds: refreshedVersions,\n appId,\n additionalAppIds,\n }).filter((version) => {\n const entry = byVersion.get(version);\n return entry === undefined || entryCouldMatch(entry, query);\n });\n}\n\n/**\n * Whether a pushed index entry could belong to a list with this local query:\n * the fields the entry carries are checked, the rest pass.\n */\nexport function entryCouldMatch(\n entry: {\n is_unread?: boolean | null;\n is_favorited?: boolean | null;\n run_status?: string | null;\n session_status?: string | null;\n },\n query: AthenaSessionsQuery,\n): boolean {\n if (query.unreadOnly && entry.is_unread === false) return false;\n if (query.favoritesOnly && entry.is_favorited === false) return false;\n if (\n query.runStatuses &&\n typeof entry.run_status === 'string' &&\n !(query.runStatuses as readonly string[]).includes(entry.run_status)\n ) {\n return false;\n }\n if (\n query.sessionStatuses &&\n typeof entry.session_status === 'string' &&\n !(query.sessionStatuses as readonly string[]).includes(entry.session_status)\n ) {\n return false;\n }\n return true;\n}\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ const credentialRenewal = require("../runtime/credential-renewal.cjs");
6
6
  const api = require("./api.cjs");
7
7
  const conversationListFetcher = require("./conversation-list-fetcher.cjs");
8
8
  const useThreadFavorite = require("./use-thread-favorite.cjs");
9
- const useConversationList = require("../packages/agent-runtime/src/use-conversation-list.cjs");
9
+ const useConversationList = require("../agent-runtime/src/use-conversation-list.cjs");
10
10
  function useRestConversationHistory({
11
11
  backendUrl,
12
12
  principalId,
@@ -4,7 +4,7 @@ import { withCredentialRenewal } from "../runtime/credential-renewal.js";
4
4
  import { setThreadReadState, archiveThread } from "./api.js";
5
5
  import { createRestConversationListFetcher } from "./conversation-list-fetcher.js";
6
6
  import { useThreadFavorite, withFavoriteOverrides } from "./use-thread-favorite.js";
7
- import { useConversationList } from "../packages/agent-runtime/src/use-conversation-list.js";
7
+ import { useConversationList } from "../agent-runtime/src/use-conversation-list.js";
8
8
  function useRestConversationHistory({
9
9
  backendUrl,
10
10
  principalId,
@@ -6,7 +6,7 @@ const credentialRenewal = require("../runtime/credential-renewal.cjs");
6
6
  const api = require("./api.cjs");
7
7
  const useRestConversationHistory = require("./use-rest-conversation-history.cjs");
8
8
  const useThreadFavorite = require("./use-thread-favorite.cjs");
9
- const conversationIndex = require("../packages/agent-runtime/src/conversation-index.cjs");
9
+ const conversationIndex = require("../agent-runtime/src/conversation-index.cjs");
10
10
  function conversationSummaryFromIndexEntry(entry) {
11
11
  return {
12
12
  threadId: entry.thread_id,
@@ -48,6 +48,8 @@ export declare function useStatewireConversationHistory({ backendUrl, conversati
48
48
  assetId: string | null;
49
49
  appId: string | null;
50
50
  computerAssetId?: string | null;
51
+ collabAgentId?: string | null;
52
+ collabChannelId?: string | null;
51
53
  parentSessionId?: string | null;
52
54
  subSessionCount?: number;
53
55
  triggerType: string | null;
@@ -59,6 +61,7 @@ export declare function useStatewireConversationHistory({ backendUrl, conversati
59
61
  nextAction?: string | null;
60
62
  attentionSource?: import("@athenaintel/agent-runtime").ConversationAttentionSource | null;
61
63
  isFavorited?: boolean;
64
+ createdByMe?: boolean;
62
65
  lastWake?: import("@athenaintel/agent-runtime").ConversationWake | null;
63
66
  pullRequests?: import("@athenaintel/agent-runtime").ConversationPullRequest[] | null;
64
67
  isUnread: boolean;
@@ -4,7 +4,7 @@ import { withCredentialRenewal } from "../runtime/credential-renewal.js";
4
4
  import { setThreadReadState, archiveThread } from "./api.js";
5
5
  import { useRestConversationHistory } from "./use-rest-conversation-history.js";
6
6
  import { useThreadFavorite, withFavoriteOverrides } from "./use-thread-favorite.js";
7
- import { useConversationIndex } from "../packages/agent-runtime/src/conversation-index.js";
7
+ import { useConversationIndex } from "../agent-runtime/src/conversation-index.js";
8
8
  function conversationSummaryFromIndexEntry(entry) {
9
9
  return {
10
10
  threadId: entry.thread_id,
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const api = require("./api.cjs");
5
+ const useThreadFieldOverride = require("./use-thread-field-override.cjs");
6
+ const READ_STATE_UNAVAILABLE_WARNING = "[AthenaSDK] This backend has no POST /api/conversations/threads/read-state route; sessions cannot be marked read from here.";
7
+ const isReadStateUnavailableError = () => false;
8
+ const readUnread = (row) => row.isUnread;
9
+ function useThreadReadState({
10
+ backendUrl,
11
+ principalId,
12
+ getAuth,
13
+ rows,
14
+ onServerTruth
15
+ }) {
16
+ const field = useThreadFieldOverride.useThreadFieldOverride({
17
+ field: "read-state",
18
+ backendUrl,
19
+ principalId,
20
+ getAuth,
21
+ rows,
22
+ readRow: readUnread,
23
+ write: async (auth, { threadId, value }) => {
24
+ const result = await api.setThreadReadState(backendUrl, auth, { threadId, isUnread: value });
25
+ return { threadId: result.thread_id, value: result.is_unread };
26
+ },
27
+ isUnavailableError: isReadStateUnavailableError,
28
+ unavailableWarning: READ_STATE_UNAVAILABLE_WARNING,
29
+ onServerTruth: onServerTruth ? ({ threadId, value }) => onServerTruth({ threadId, isUnread: value }) : void 0
30
+ });
31
+ const set = field.set;
32
+ const rowsRef = react.useRef(rows);
33
+ rowsRef.current = rows;
34
+ const [coveredUpdatedAt, setCoveredUpdatedAt] = react.useState({});
35
+ const setReadState = react.useCallback(
36
+ ({ threadId, isUnread, updatedAt }) => {
37
+ var _a;
38
+ const covered = updatedAt ?? ((_a = rowsRef.current.find((row) => row.threadId === threadId)) == null ? void 0 : _a.updatedAt);
39
+ setCoveredUpdatedAt((current) => {
40
+ const next = { ...current };
41
+ if (covered) next[threadId] = covered;
42
+ else delete next[threadId];
43
+ return next;
44
+ });
45
+ set({ threadId, value: isUnread });
46
+ },
47
+ [set]
48
+ );
49
+ return {
50
+ overrides: field.overrides,
51
+ coveredUpdatedAt,
52
+ setReadState,
53
+ pendingThreadIds: field.pendingThreadIds,
54
+ isAvailable: field.isAvailable
55
+ };
56
+ }
57
+ function updatedAfter(row, covered) {
58
+ if (!covered || !row.updatedAt) return false;
59
+ const rowAt = Date.parse(row.updatedAt);
60
+ const coveredAt = Date.parse(covered);
61
+ return Number.isFinite(rowAt) && Number.isFinite(coveredAt) && rowAt > coveredAt;
62
+ }
63
+ function withReadStateOverrides(rows, overrides, coveredUpdatedAt = {}) {
64
+ return rows.map((row) => {
65
+ const override = overrides[row.threadId];
66
+ if (override === void 0 || override === row.isUnread) return row;
67
+ if (updatedAfter(row, coveredUpdatedAt[row.threadId])) return row;
68
+ return { ...row, isUnread: override };
69
+ });
70
+ }
71
+ exports.useThreadReadState = useThreadReadState;
72
+ exports.withReadStateOverrides = withReadStateOverrides;
73
+ //# sourceMappingURL=use-thread-read-state.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-thread-read-state.cjs","sources":["../../src/threads/use-thread-read-state.ts"],"sourcesContent":["/**\n * Mark a session read or unread for the viewer — the inbox's \"Mark read\" and\n * the session list's read toggle: `useThreadFieldOverride` over\n * `POST /api/conversations/threads/read-state` (see that module for the\n * optimistic-override, rollback, serialization and identity-scoping\n * contract).\n *\n * The override matters more here than for the pin: the read-state route\n * publishes no conversation-index update, so a pushed index entry keeps the\n * `is_unread` it had at the index's last rebuild. The override holds the\n * viewer's answer over that stale push until the sources agree.\n */\nimport { useCallback, useRef, useState } from 'react';\nimport type { CredentialResolver } from '../runtime/credential-renewal';\nimport { setThreadReadState } from './api';\nimport type { RestConversationAuth } from './use-rest-conversation-history';\nimport { type ThreadFieldTarget, useThreadFieldOverride } from './use-thread-field-override';\n\nexport interface ThreadReadStateTarget {\n threadId: string;\n isUnread: boolean;\n /**\n * The row's last update the receipt covers (its `updatedAt` when the person\n * acted). Activity newer than that ends the override, so a session read\n * here turns unread again when it gets a new message — even in a list the\n * provider's own page does not hold. Without it the provider's page row's\n * value is used when it has one.\n */\n updatedAt?: string;\n}\n\n/** The fields the override layer reads on a list row. */\nexport interface ReadStateRow {\n threadId: string;\n isUnread: boolean;\n updatedAt?: string;\n}\n\nexport interface UseThreadReadStateOptions {\n backendUrl: string;\n /** Non-secret identity in the mutation key. */\n principalId: string;\n /** Resolved per request; called with `{ force: true }` when the host refuses the token. */\n getAuth: CredentialResolver<RestConversationAuth>;\n /** The rows as the list sources report them, BEFORE overrides. */\n rows: readonly ReadStateRow[];\n /** Write the server's answer into the list caches. */\n onServerTruth?: (result: ThreadReadStateTarget) => void;\n}\n\nexport interface ThreadReadStateToggle {\n /** Optimistic, then server-confirmed, values layered over the list sources, keyed by thread id. */\n overrides: Readonly<Record<string, boolean>>;\n /** The `updatedAt` each override covers; a row updated after it shows its own value. */\n coveredUpdatedAt: Readonly<Record<string, string>>;\n setReadState: (target: ThreadReadStateTarget) => void;\n pendingThreadIds: ReadonlySet<string>;\n /**\n * Always `true`: every agora the SDK supports has the read-state route, so\n * a 404 is a session that no longer exists, never a missing route.\n */\n isAvailable: boolean;\n}\n\nconst READ_STATE_UNAVAILABLE_WARNING =\n '[AthenaSDK] This backend has no POST /api/conversations/threads/read-state route; sessions cannot be marked read from here.';\n\n/** The route predates every agora the SDK supports; a rejection is per thread, never \"no route\". */\nconst isReadStateUnavailableError = (): boolean => false;\n\nconst readUnread = (row: ReadStateRow): boolean => row.isUnread;\n\nexport function useThreadReadState({\n backendUrl,\n principalId,\n getAuth,\n rows,\n onServerTruth,\n}: UseThreadReadStateOptions): ThreadReadStateToggle {\n const field = useThreadFieldOverride<boolean, ReadStateRow>({\n field: 'read-state',\n backendUrl,\n principalId,\n getAuth,\n rows,\n readRow: readUnread,\n write: async (auth, { threadId, value }) => {\n const result = await setThreadReadState(backendUrl, auth, { threadId, isUnread: value });\n return { threadId: result.thread_id, value: result.is_unread };\n },\n isUnavailableError: isReadStateUnavailableError,\n unavailableWarning: READ_STATE_UNAVAILABLE_WARNING,\n onServerTruth: onServerTruth\n ? ({ threadId, value }: ThreadFieldTarget<boolean>) =>\n onServerTruth({ threadId, isUnread: value })\n : undefined,\n });\n const set = field.set;\n const rowsRef = useRef(rows);\n rowsRef.current = rows;\n const [coveredUpdatedAt, setCoveredUpdatedAt] = useState<Readonly<Record<string, string>>>({});\n const setReadState = useCallback(\n ({ threadId, isUnread, updatedAt }: ThreadReadStateTarget) => {\n const covered =\n updatedAt ?? rowsRef.current.find((row) => row.threadId === threadId)?.updatedAt;\n setCoveredUpdatedAt((current) => {\n const next = { ...current };\n if (covered) next[threadId] = covered;\n else delete next[threadId];\n return next;\n });\n set({ threadId, value: isUnread });\n },\n [set],\n );\n return {\n overrides: field.overrides,\n coveredUpdatedAt,\n setReadState,\n pendingThreadIds: field.pendingThreadIds,\n isAvailable: field.isAvailable,\n };\n}\n\nfunction updatedAfter(row: ReadStateRow, covered: string | undefined): boolean {\n if (!covered || !row.updatedAt) return false;\n const rowAt = Date.parse(row.updatedAt);\n const coveredAt = Date.parse(covered);\n return Number.isFinite(rowAt) && Number.isFinite(coveredAt) && rowAt > coveredAt;\n}\n\n/**\n * Every row with its read-state override applied — except a row updated\n * after the activity the override covers, which shows its own value (marking\n * read never moves `updatedAt`, so a newer one is new activity).\n */\nexport function withReadStateOverrides<T extends ReadStateRow>(\n rows: readonly T[],\n overrides: Readonly<Record<string, boolean>>,\n coveredUpdatedAt: Readonly<Record<string, string>> = {},\n): T[] {\n return rows.map((row) => {\n const override = overrides[row.threadId];\n if (override === undefined || override === row.isUnread) return row;\n if (updatedAfter(row, coveredUpdatedAt[row.threadId])) return row;\n return { ...row, isUnread: override };\n });\n}\n"],"names":["useThreadFieldOverride","setThreadReadState","useRef","useState","useCallback"],"mappings":";;;;;AAgEA,MAAM,iCACJ;AAGF,MAAM,8BAA8B,MAAe;AAEnD,MAAM,aAAa,CAAC,QAA+B,IAAI;AAEhD,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqD;AACnD,QAAM,QAAQA,uBAAAA,uBAA8C;AAAA,IAC1D,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,OAAO,OAAO,MAAM,EAAE,UAAU,YAAY;AAC1C,YAAM,SAAS,MAAMC,IAAAA,mBAAmB,YAAY,MAAM,EAAE,UAAU,UAAU,OAAO;AACvF,aAAO,EAAE,UAAU,OAAO,WAAW,OAAO,OAAO,UAAA;AAAA,IACrD;AAAA,IACA,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,eAAe,gBACX,CAAC,EAAE,UAAU,MAAA,MACX,cAAc,EAAE,UAAU,UAAU,MAAA,CAAO,IAC7C;AAAA,EAAA,CACL;AACD,QAAM,MAAM,MAAM;AAClB,QAAM,UAAUC,MAAAA,OAAO,IAAI;AAC3B,UAAQ,UAAU;AAClB,QAAM,CAAC,kBAAkB,mBAAmB,IAAIC,MAAAA,SAA2C,CAAA,CAAE;AAC7F,QAAM,eAAeC,MAAAA;AAAAA,IACnB,CAAC,EAAE,UAAU,UAAU,gBAAuC;;AAC5D,YAAM,UACJ,eAAa,aAAQ,QAAQ,KAAK,CAAC,QAAQ,IAAI,aAAa,QAAQ,MAAvD,mBAA0D;AACzE,0BAAoB,CAAC,YAAY;AAC/B,cAAM,OAAO,EAAE,GAAG,QAAA;AAClB,YAAI,QAAS,MAAK,QAAQ,IAAI;AAAA,YACzB,QAAO,KAAK,QAAQ;AACzB,eAAO;AAAA,MACT,CAAC;AACD,UAAI,EAAE,UAAU,OAAO,SAAA,CAAU;AAAA,IACnC;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAEN,SAAO;AAAA,IACL,WAAW,MAAM;AAAA,IACjB;AAAA,IACA;AAAA,IACA,kBAAkB,MAAM;AAAA,IACxB,aAAa,MAAM;AAAA,EAAA;AAEvB;AAEA,SAAS,aAAa,KAAmB,SAAsC;AAC7E,MAAI,CAAC,WAAW,CAAC,IAAI,UAAW,QAAO;AACvC,QAAM,QAAQ,KAAK,MAAM,IAAI,SAAS;AACtC,QAAM,YAAY,KAAK,MAAM,OAAO;AACpC,SAAO,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS,SAAS,KAAK,QAAQ;AACzE;AAOO,SAAS,uBACd,MACA,WACA,mBAAqD,CAAA,GAChD;AACL,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,UAAM,WAAW,UAAU,IAAI,QAAQ;AACvC,QAAI,aAAa,UAAa,aAAa,IAAI,SAAU,QAAO;AAChE,QAAI,aAAa,KAAK,iBAAiB,IAAI,QAAQ,CAAC,EAAG,QAAO;AAC9D,WAAO,EAAE,GAAG,KAAK,UAAU,SAAA;AAAA,EAC7B,CAAC;AACH;;;"}
@@ -0,0 +1,51 @@
1
+ import type { CredentialResolver } from '../runtime/credential-renewal';
2
+ import type { RestConversationAuth } from './use-rest-conversation-history';
3
+ export interface ThreadReadStateTarget {
4
+ threadId: string;
5
+ isUnread: boolean;
6
+ /**
7
+ * The row's last update the receipt covers (its `updatedAt` when the person
8
+ * acted). Activity newer than that ends the override, so a session read
9
+ * here turns unread again when it gets a new message — even in a list the
10
+ * provider's own page does not hold. Without it the provider's page row's
11
+ * value is used when it has one.
12
+ */
13
+ updatedAt?: string;
14
+ }
15
+ /** The fields the override layer reads on a list row. */
16
+ export interface ReadStateRow {
17
+ threadId: string;
18
+ isUnread: boolean;
19
+ updatedAt?: string;
20
+ }
21
+ export interface UseThreadReadStateOptions {
22
+ backendUrl: string;
23
+ /** Non-secret identity in the mutation key. */
24
+ principalId: string;
25
+ /** Resolved per request; called with `{ force: true }` when the host refuses the token. */
26
+ getAuth: CredentialResolver<RestConversationAuth>;
27
+ /** The rows as the list sources report them, BEFORE overrides. */
28
+ rows: readonly ReadStateRow[];
29
+ /** Write the server's answer into the list caches. */
30
+ onServerTruth?: (result: ThreadReadStateTarget) => void;
31
+ }
32
+ export interface ThreadReadStateToggle {
33
+ /** Optimistic, then server-confirmed, values layered over the list sources, keyed by thread id. */
34
+ overrides: Readonly<Record<string, boolean>>;
35
+ /** The `updatedAt` each override covers; a row updated after it shows its own value. */
36
+ coveredUpdatedAt: Readonly<Record<string, string>>;
37
+ setReadState: (target: ThreadReadStateTarget) => void;
38
+ pendingThreadIds: ReadonlySet<string>;
39
+ /**
40
+ * Always `true`: every agora the SDK supports has the read-state route, so
41
+ * a 404 is a session that no longer exists, never a missing route.
42
+ */
43
+ isAvailable: boolean;
44
+ }
45
+ export declare function useThreadReadState({ backendUrl, principalId, getAuth, rows, onServerTruth, }: UseThreadReadStateOptions): ThreadReadStateToggle;
46
+ /**
47
+ * Every row with its read-state override applied — except a row updated
48
+ * after the activity the override covers, which shows its own value (marking
49
+ * read never moves `updatedAt`, so a newer one is new activity).
50
+ */
51
+ export declare function withReadStateOverrides<T extends ReadStateRow>(rows: readonly T[], overrides: Readonly<Record<string, boolean>>, coveredUpdatedAt?: Readonly<Record<string, string>>): T[];
@@ -0,0 +1,73 @@
1
+ import { useRef, useState, useCallback } from "react";
2
+ import { setThreadReadState } from "./api.js";
3
+ import { useThreadFieldOverride } from "./use-thread-field-override.js";
4
+ const READ_STATE_UNAVAILABLE_WARNING = "[AthenaSDK] This backend has no POST /api/conversations/threads/read-state route; sessions cannot be marked read from here.";
5
+ const isReadStateUnavailableError = () => false;
6
+ const readUnread = (row) => row.isUnread;
7
+ function useThreadReadState({
8
+ backendUrl,
9
+ principalId,
10
+ getAuth,
11
+ rows,
12
+ onServerTruth
13
+ }) {
14
+ const field = useThreadFieldOverride({
15
+ field: "read-state",
16
+ backendUrl,
17
+ principalId,
18
+ getAuth,
19
+ rows,
20
+ readRow: readUnread,
21
+ write: async (auth, { threadId, value }) => {
22
+ const result = await setThreadReadState(backendUrl, auth, { threadId, isUnread: value });
23
+ return { threadId: result.thread_id, value: result.is_unread };
24
+ },
25
+ isUnavailableError: isReadStateUnavailableError,
26
+ unavailableWarning: READ_STATE_UNAVAILABLE_WARNING,
27
+ onServerTruth: onServerTruth ? ({ threadId, value }) => onServerTruth({ threadId, isUnread: value }) : void 0
28
+ });
29
+ const set = field.set;
30
+ const rowsRef = useRef(rows);
31
+ rowsRef.current = rows;
32
+ const [coveredUpdatedAt, setCoveredUpdatedAt] = useState({});
33
+ const setReadState = useCallback(
34
+ ({ threadId, isUnread, updatedAt }) => {
35
+ var _a;
36
+ const covered = updatedAt ?? ((_a = rowsRef.current.find((row) => row.threadId === threadId)) == null ? void 0 : _a.updatedAt);
37
+ setCoveredUpdatedAt((current) => {
38
+ const next = { ...current };
39
+ if (covered) next[threadId] = covered;
40
+ else delete next[threadId];
41
+ return next;
42
+ });
43
+ set({ threadId, value: isUnread });
44
+ },
45
+ [set]
46
+ );
47
+ return {
48
+ overrides: field.overrides,
49
+ coveredUpdatedAt,
50
+ setReadState,
51
+ pendingThreadIds: field.pendingThreadIds,
52
+ isAvailable: field.isAvailable
53
+ };
54
+ }
55
+ function updatedAfter(row, covered) {
56
+ if (!covered || !row.updatedAt) return false;
57
+ const rowAt = Date.parse(row.updatedAt);
58
+ const coveredAt = Date.parse(covered);
59
+ return Number.isFinite(rowAt) && Number.isFinite(coveredAt) && rowAt > coveredAt;
60
+ }
61
+ function withReadStateOverrides(rows, overrides, coveredUpdatedAt = {}) {
62
+ return rows.map((row) => {
63
+ const override = overrides[row.threadId];
64
+ if (override === void 0 || override === row.isUnread) return row;
65
+ if (updatedAfter(row, coveredUpdatedAt[row.threadId])) return row;
66
+ return { ...row, isUnread: override };
67
+ });
68
+ }
69
+ export {
70
+ useThreadReadState,
71
+ withReadStateOverrides
72
+ };
73
+ //# sourceMappingURL=use-thread-read-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-thread-read-state.js","sources":["../../src/threads/use-thread-read-state.ts"],"sourcesContent":["/**\n * Mark a session read or unread for the viewer — the inbox's \"Mark read\" and\n * the session list's read toggle: `useThreadFieldOverride` over\n * `POST /api/conversations/threads/read-state` (see that module for the\n * optimistic-override, rollback, serialization and identity-scoping\n * contract).\n *\n * The override matters more here than for the pin: the read-state route\n * publishes no conversation-index update, so a pushed index entry keeps the\n * `is_unread` it had at the index's last rebuild. The override holds the\n * viewer's answer over that stale push until the sources agree.\n */\nimport { useCallback, useRef, useState } from 'react';\nimport type { CredentialResolver } from '../runtime/credential-renewal';\nimport { setThreadReadState } from './api';\nimport type { RestConversationAuth } from './use-rest-conversation-history';\nimport { type ThreadFieldTarget, useThreadFieldOverride } from './use-thread-field-override';\n\nexport interface ThreadReadStateTarget {\n threadId: string;\n isUnread: boolean;\n /**\n * The row's last update the receipt covers (its `updatedAt` when the person\n * acted). Activity newer than that ends the override, so a session read\n * here turns unread again when it gets a new message — even in a list the\n * provider's own page does not hold. Without it the provider's page row's\n * value is used when it has one.\n */\n updatedAt?: string;\n}\n\n/** The fields the override layer reads on a list row. */\nexport interface ReadStateRow {\n threadId: string;\n isUnread: boolean;\n updatedAt?: string;\n}\n\nexport interface UseThreadReadStateOptions {\n backendUrl: string;\n /** Non-secret identity in the mutation key. */\n principalId: string;\n /** Resolved per request; called with `{ force: true }` when the host refuses the token. */\n getAuth: CredentialResolver<RestConversationAuth>;\n /** The rows as the list sources report them, BEFORE overrides. */\n rows: readonly ReadStateRow[];\n /** Write the server's answer into the list caches. */\n onServerTruth?: (result: ThreadReadStateTarget) => void;\n}\n\nexport interface ThreadReadStateToggle {\n /** Optimistic, then server-confirmed, values layered over the list sources, keyed by thread id. */\n overrides: Readonly<Record<string, boolean>>;\n /** The `updatedAt` each override covers; a row updated after it shows its own value. */\n coveredUpdatedAt: Readonly<Record<string, string>>;\n setReadState: (target: ThreadReadStateTarget) => void;\n pendingThreadIds: ReadonlySet<string>;\n /**\n * Always `true`: every agora the SDK supports has the read-state route, so\n * a 404 is a session that no longer exists, never a missing route.\n */\n isAvailable: boolean;\n}\n\nconst READ_STATE_UNAVAILABLE_WARNING =\n '[AthenaSDK] This backend has no POST /api/conversations/threads/read-state route; sessions cannot be marked read from here.';\n\n/** The route predates every agora the SDK supports; a rejection is per thread, never \"no route\". */\nconst isReadStateUnavailableError = (): boolean => false;\n\nconst readUnread = (row: ReadStateRow): boolean => row.isUnread;\n\nexport function useThreadReadState({\n backendUrl,\n principalId,\n getAuth,\n rows,\n onServerTruth,\n}: UseThreadReadStateOptions): ThreadReadStateToggle {\n const field = useThreadFieldOverride<boolean, ReadStateRow>({\n field: 'read-state',\n backendUrl,\n principalId,\n getAuth,\n rows,\n readRow: readUnread,\n write: async (auth, { threadId, value }) => {\n const result = await setThreadReadState(backendUrl, auth, { threadId, isUnread: value });\n return { threadId: result.thread_id, value: result.is_unread };\n },\n isUnavailableError: isReadStateUnavailableError,\n unavailableWarning: READ_STATE_UNAVAILABLE_WARNING,\n onServerTruth: onServerTruth\n ? ({ threadId, value }: ThreadFieldTarget<boolean>) =>\n onServerTruth({ threadId, isUnread: value })\n : undefined,\n });\n const set = field.set;\n const rowsRef = useRef(rows);\n rowsRef.current = rows;\n const [coveredUpdatedAt, setCoveredUpdatedAt] = useState<Readonly<Record<string, string>>>({});\n const setReadState = useCallback(\n ({ threadId, isUnread, updatedAt }: ThreadReadStateTarget) => {\n const covered =\n updatedAt ?? rowsRef.current.find((row) => row.threadId === threadId)?.updatedAt;\n setCoveredUpdatedAt((current) => {\n const next = { ...current };\n if (covered) next[threadId] = covered;\n else delete next[threadId];\n return next;\n });\n set({ threadId, value: isUnread });\n },\n [set],\n );\n return {\n overrides: field.overrides,\n coveredUpdatedAt,\n setReadState,\n pendingThreadIds: field.pendingThreadIds,\n isAvailable: field.isAvailable,\n };\n}\n\nfunction updatedAfter(row: ReadStateRow, covered: string | undefined): boolean {\n if (!covered || !row.updatedAt) return false;\n const rowAt = Date.parse(row.updatedAt);\n const coveredAt = Date.parse(covered);\n return Number.isFinite(rowAt) && Number.isFinite(coveredAt) && rowAt > coveredAt;\n}\n\n/**\n * Every row with its read-state override applied — except a row updated\n * after the activity the override covers, which shows its own value (marking\n * read never moves `updatedAt`, so a newer one is new activity).\n */\nexport function withReadStateOverrides<T extends ReadStateRow>(\n rows: readonly T[],\n overrides: Readonly<Record<string, boolean>>,\n coveredUpdatedAt: Readonly<Record<string, string>> = {},\n): T[] {\n return rows.map((row) => {\n const override = overrides[row.threadId];\n if (override === undefined || override === row.isUnread) return row;\n if (updatedAfter(row, coveredUpdatedAt[row.threadId])) return row;\n return { ...row, isUnread: override };\n });\n}\n"],"names":[],"mappings":";;;AAgEA,MAAM,iCACJ;AAGF,MAAM,8BAA8B,MAAe;AAEnD,MAAM,aAAa,CAAC,QAA+B,IAAI;AAEhD,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqD;AACnD,QAAM,QAAQ,uBAA8C;AAAA,IAC1D,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,OAAO,OAAO,MAAM,EAAE,UAAU,YAAY;AAC1C,YAAM,SAAS,MAAM,mBAAmB,YAAY,MAAM,EAAE,UAAU,UAAU,OAAO;AACvF,aAAO,EAAE,UAAU,OAAO,WAAW,OAAO,OAAO,UAAA;AAAA,IACrD;AAAA,IACA,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,eAAe,gBACX,CAAC,EAAE,UAAU,MAAA,MACX,cAAc,EAAE,UAAU,UAAU,MAAA,CAAO,IAC7C;AAAA,EAAA,CACL;AACD,QAAM,MAAM,MAAM;AAClB,QAAM,UAAU,OAAO,IAAI;AAC3B,UAAQ,UAAU;AAClB,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAA2C,CAAA,CAAE;AAC7F,QAAM,eAAe;AAAA,IACnB,CAAC,EAAE,UAAU,UAAU,gBAAuC;;AAC5D,YAAM,UACJ,eAAa,aAAQ,QAAQ,KAAK,CAAC,QAAQ,IAAI,aAAa,QAAQ,MAAvD,mBAA0D;AACzE,0BAAoB,CAAC,YAAY;AAC/B,cAAM,OAAO,EAAE,GAAG,QAAA;AAClB,YAAI,QAAS,MAAK,QAAQ,IAAI;AAAA,YACzB,QAAO,KAAK,QAAQ;AACzB,eAAO;AAAA,MACT,CAAC;AACD,UAAI,EAAE,UAAU,OAAO,SAAA,CAAU;AAAA,IACnC;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAEN,SAAO;AAAA,IACL,WAAW,MAAM;AAAA,IACjB;AAAA,IACA;AAAA,IACA,kBAAkB,MAAM;AAAA,IACxB,aAAa,MAAM;AAAA,EAAA;AAEvB;AAEA,SAAS,aAAa,KAAmB,SAAsC;AAC7E,MAAI,CAAC,WAAW,CAAC,IAAI,UAAW,QAAO;AACvC,QAAM,QAAQ,KAAK,MAAM,IAAI,SAAS;AACtC,QAAM,YAAY,KAAK,MAAM,OAAO;AACpC,SAAO,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS,SAAS,KAAK,QAAQ;AACzE;AAOO,SAAS,uBACd,MACA,WACA,mBAAqD,CAAA,GAChD;AACL,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,UAAM,WAAW,UAAU,IAAI,QAAQ;AACvC,QAAI,aAAa,UAAa,aAAa,IAAI,SAAU,QAAO;AAChE,QAAI,aAAa,KAAK,iBAAiB,IAAI,QAAQ,CAAC,EAAG,QAAO;AAC9D,WAAO,EAAE,GAAG,KAAK,UAAU,SAAA;AAAA,EAC7B,CAAC;AACH;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-table-serializer.cjs","sources":["../../../../tiptap-markdown-table/src/markdown-table-serializer.ts"],"sourcesContent":["/**\n * The table writer every Tiptap editor that writes Markdown through\n * tiptap-markdown shares: Olympus's docs `TableNode` and Skill editor, and the\n * `@athenaintel/react` chat composer's `ChatTableExtension`. A table node takes\n * it through {@link markdownTableStorage}.\n */\nimport { type Editor, getHTMLFromFragment } from \"@tiptap/core\";\nimport { Fragment, type Node as ProseMirrorNode } from \"@tiptap/pm/model\";\n\n/**\n * A table cell's markdown with each `|` escaped, so none of them ends the cell.\n * GFM ends a cell at every unescaped pipe, inside a code span or a link target\n * too; markdown-it drops the backslash of each `\\|` as it splits the row, so the\n * cell (and any code span in it) reads back with its literal pipe. The AOP\n * converter's markdown read escapes cells the same way\n * (`agora/converter-olympus/src/utils/turndown-helpers.ts`).\n */\nexport function escapeTableCellPipes(markdown: string): string {\n return markdown.replace(/\\|/g, \"\\\\|\");\n}\n\n/**\n * What the table serializer uses of tiptap-markdown's serializer state:\n * prosemirror-markdown's `MarkdownSerializerState` plus tiptap-markdown's\n * `inTable` flag, which makes a hard break inside a cell write `<br>`.\n */\ninterface MarkdownTableSerializerState {\n out: string;\n inTable: boolean;\n write(content?: string): void;\n text(text: string, escapeMarkdown?: boolean): void;\n ensureNewLine(): void;\n closeBlock(node: ProseMirrorNode): void;\n renderInline(parent: ProseMirrorNode, fromBlockStart?: boolean): void;\n}\n\n/** The `this` tiptap-markdown binds a node's `serialize` to. */\ninterface MarkdownSpecContext {\n editor: Editor;\n}\n\n/**\n * tiptap-markdown's `html` option, from the storage it keeps in\n * `editor.storage.markdown`. Tiptap 3 types `editor.storage` as an interface\n * each extension augments, and tiptap-markdown's own typings declare only\n * `getMarkdown()`, so the option is read through a guard rather than by\n * augmenting `@tiptap/core` for every editor that imports this module. Throws\n * when tiptap-markdown is not registered on the editor.\n */\nfunction markdownHtmlOption(editor: Editor): boolean {\n const storage: unknown = Reflect.get(editor.storage, \"markdown\");\n const options: unknown =\n typeof storage === \"object\" && storage !== null ? Reflect.get(storage, \"options\") : undefined;\n const html: unknown =\n typeof options === \"object\" && options !== null ? Reflect.get(options, \"html\") : undefined;\n if (typeof html !== \"boolean\") {\n throw new Error(\"tiptap-markdown is not registered on this editor\");\n }\n return html;\n}\n\n/**\n * Renders a cell's inline content with every `|` it writes escaped. Everything\n * a cell's inline content writes goes through the state's `text` (text, code\n * spans, mark delimiters, link targets) or `write` (inline nodes such as\n * mentions, images and inline HTML), so both are wrapped for the cell and\n * restored after it. Escaping as the output is written, not afterwards, keeps\n * the output offsets tiptap-markdown records to move emphasis delimiters in\n * step with the output.\n */\nfunction renderCellInline({\n state,\n cellContent,\n}: {\n state: MarkdownTableSerializerState;\n cellContent: ProseMirrorNode;\n}): void {\n const { text, write } = state;\n state.text = (content, escapeMarkdown) => {\n const start = state.out.length;\n text.call(state, content, escapeMarkdown);\n state.out = state.out.slice(0, start) + escapeTableCellPipes(state.out.slice(start));\n };\n state.write = (content) => {\n write.call(state, content === undefined ? content : escapeTableCellPipes(content));\n };\n try {\n state.renderInline(cellContent);\n } finally {\n state.text = text;\n state.write = write;\n }\n}\n\nfunction hasSpan(cell: ProseMirrorNode): boolean {\n return cell.attrs.colspan > 1 || cell.attrs.rowspan > 1;\n}\n\n/**\n * A GFM pipe table holds one header row of single-paragraph header cells over\n * body rows of single-paragraph data cells, with no merged cells. Any other\n * table is written as HTML.\n */\nfunction isMarkdownSerializable(table: ProseMirrorNode): boolean {\n const [firstRow, ...bodyRows] = table.children;\n const headerCells = firstRow?.children ?? [];\n if (\n headerCells.some(\n (cell) => cell.type.name !== \"tableHeader\" || hasSpan(cell) || cell.childCount > 1,\n )\n ) {\n return false;\n }\n return !bodyRows.some((row) =>\n row.children.some(\n (cell) => cell.type.name === \"tableHeader\" || hasSpan(cell) || cell.childCount > 1,\n ),\n );\n}\n\n/** An HTML block as CommonMark reads one: the element's content on lines of its own. */\nfunction formatHtmlBlock(html: string): string {\n const body = new window.DOMParser().parseFromString(`<body>${html}</body>`, \"text/html\").body;\n const element = body.firstElementChild;\n if (!element) return html;\n element.innerHTML = element.innerHTML.trim() ? `\\n${element.innerHTML}\\n` : \"\\n\";\n return element.outerHTML;\n}\n\nfunction serializeTableAsHtml({\n editor,\n state,\n node,\n parent,\n}: {\n editor: Editor;\n state: MarkdownTableSerializerState;\n node: ProseMirrorNode;\n parent: ProseMirrorNode | Fragment;\n}): void {\n if (markdownHtmlOption(editor)) {\n const { schema } = node.type;\n const html = getHTMLFromFragment(Fragment.from(node), schema);\n const isTopLevel = parent instanceof Fragment || parent.type.name === schema.topNodeType.name;\n state.write(isTopLevel ? formatHtmlBlock(html) : html);\n } else {\n console.warn(`Tiptap Markdown: \"${node.type.name}\" node is only available in html mode`);\n state.write(`[${node.type.name}]`);\n }\n state.closeBlock(node);\n}\n\n/**\n * tiptap-markdown 0.9.0's table serializer, except that a `|` inside a cell is\n * written as `\\|` (see {@link escapeTableCellPipes}). The library writes it\n * bare — it escapes only `<` / `>` in text, and prosemirror-markdown only\n * `` `*\\~[]_ `` — so a cell holding `a | b` or `` `x|y` `` read back as extra\n * columns and markdown-it dropped every cell past the header's width. A table\n * that is not a GFM pipe table is still written as HTML, and everything else is\n * written exactly as the library writes it.\n */\nexport function serializeMarkdownTable(\n this: MarkdownSpecContext,\n state: MarkdownTableSerializerState,\n node: ProseMirrorNode,\n parent: ProseMirrorNode | Fragment,\n): void {\n if (!isMarkdownSerializable(node)) {\n serializeTableAsHtml({ editor: this.editor, state, node, parent });\n return;\n }\n state.inTable = true;\n node.forEach((row, _rowOffset, rowIndex) => {\n state.write(\"| \");\n row.forEach((cell, _cellOffset, cellIndex) => {\n if (cellIndex) {\n state.write(\" | \");\n }\n const cellContent = cell.firstChild;\n if (cellContent?.textContent.trim()) {\n renderCellInline({ state, cellContent });\n }\n });\n state.write(\" |\");\n state.ensureNewLine();\n if (!rowIndex) {\n const delimiterRow = Array.from({ length: row.childCount }, () => \"---\").join(\" | \");\n state.write(`| ${delimiterRow} |`);\n state.ensureNewLine();\n }\n });\n state.closeBlock(node);\n state.inTable = false;\n}\n\n/**\n * The storage that makes tiptap-markdown serialize a table node with\n * {@link serializeMarkdownTable}: tiptap-markdown reads a node's markdown spec\n * from `storage.markdown`, over its own spec for the node's name.\n */\nexport function markdownTableStorage(): {\n markdown: { serialize: typeof serializeMarkdownTable };\n} {\n return { markdown: { serialize: serializeMarkdownTable } };\n}\n"],"names":["getHTMLFromFragment","Fragment"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-table-serializer.js","sources":["../../../../tiptap-markdown-table/src/markdown-table-serializer.ts"],"sourcesContent":["/**\n * The table writer every Tiptap editor that writes Markdown through\n * tiptap-markdown shares: Olympus's docs `TableNode` and Skill editor, and the\n * `@athenaintel/react` chat composer's `ChatTableExtension`. A table node takes\n * it through {@link markdownTableStorage}.\n */\nimport { type Editor, getHTMLFromFragment } from \"@tiptap/core\";\nimport { Fragment, type Node as ProseMirrorNode } from \"@tiptap/pm/model\";\n\n/**\n * A table cell's markdown with each `|` escaped, so none of them ends the cell.\n * GFM ends a cell at every unescaped pipe, inside a code span or a link target\n * too; markdown-it drops the backslash of each `\\|` as it splits the row, so the\n * cell (and any code span in it) reads back with its literal pipe. The AOP\n * converter's markdown read escapes cells the same way\n * (`agora/converter-olympus/src/utils/turndown-helpers.ts`).\n */\nexport function escapeTableCellPipes(markdown: string): string {\n return markdown.replace(/\\|/g, \"\\\\|\");\n}\n\n/**\n * What the table serializer uses of tiptap-markdown's serializer state:\n * prosemirror-markdown's `MarkdownSerializerState` plus tiptap-markdown's\n * `inTable` flag, which makes a hard break inside a cell write `<br>`.\n */\ninterface MarkdownTableSerializerState {\n out: string;\n inTable: boolean;\n write(content?: string): void;\n text(text: string, escapeMarkdown?: boolean): void;\n ensureNewLine(): void;\n closeBlock(node: ProseMirrorNode): void;\n renderInline(parent: ProseMirrorNode, fromBlockStart?: boolean): void;\n}\n\n/** The `this` tiptap-markdown binds a node's `serialize` to. */\ninterface MarkdownSpecContext {\n editor: Editor;\n}\n\n/**\n * tiptap-markdown's `html` option, from the storage it keeps in\n * `editor.storage.markdown`. Tiptap 3 types `editor.storage` as an interface\n * each extension augments, and tiptap-markdown's own typings declare only\n * `getMarkdown()`, so the option is read through a guard rather than by\n * augmenting `@tiptap/core` for every editor that imports this module. Throws\n * when tiptap-markdown is not registered on the editor.\n */\nfunction markdownHtmlOption(editor: Editor): boolean {\n const storage: unknown = Reflect.get(editor.storage, \"markdown\");\n const options: unknown =\n typeof storage === \"object\" && storage !== null ? Reflect.get(storage, \"options\") : undefined;\n const html: unknown =\n typeof options === \"object\" && options !== null ? Reflect.get(options, \"html\") : undefined;\n if (typeof html !== \"boolean\") {\n throw new Error(\"tiptap-markdown is not registered on this editor\");\n }\n return html;\n}\n\n/**\n * Renders a cell's inline content with every `|` it writes escaped. Everything\n * a cell's inline content writes goes through the state's `text` (text, code\n * spans, mark delimiters, link targets) or `write` (inline nodes such as\n * mentions, images and inline HTML), so both are wrapped for the cell and\n * restored after it. Escaping as the output is written, not afterwards, keeps\n * the output offsets tiptap-markdown records to move emphasis delimiters in\n * step with the output.\n */\nfunction renderCellInline({\n state,\n cellContent,\n}: {\n state: MarkdownTableSerializerState;\n cellContent: ProseMirrorNode;\n}): void {\n const { text, write } = state;\n state.text = (content, escapeMarkdown) => {\n const start = state.out.length;\n text.call(state, content, escapeMarkdown);\n state.out = state.out.slice(0, start) + escapeTableCellPipes(state.out.slice(start));\n };\n state.write = (content) => {\n write.call(state, content === undefined ? content : escapeTableCellPipes(content));\n };\n try {\n state.renderInline(cellContent);\n } finally {\n state.text = text;\n state.write = write;\n }\n}\n\nfunction hasSpan(cell: ProseMirrorNode): boolean {\n return cell.attrs.colspan > 1 || cell.attrs.rowspan > 1;\n}\n\n/**\n * A GFM pipe table holds one header row of single-paragraph header cells over\n * body rows of single-paragraph data cells, with no merged cells. Any other\n * table is written as HTML.\n */\nfunction isMarkdownSerializable(table: ProseMirrorNode): boolean {\n const [firstRow, ...bodyRows] = table.children;\n const headerCells = firstRow?.children ?? [];\n if (\n headerCells.some(\n (cell) => cell.type.name !== \"tableHeader\" || hasSpan(cell) || cell.childCount > 1,\n )\n ) {\n return false;\n }\n return !bodyRows.some((row) =>\n row.children.some(\n (cell) => cell.type.name === \"tableHeader\" || hasSpan(cell) || cell.childCount > 1,\n ),\n );\n}\n\n/** An HTML block as CommonMark reads one: the element's content on lines of its own. */\nfunction formatHtmlBlock(html: string): string {\n const body = new window.DOMParser().parseFromString(`<body>${html}</body>`, \"text/html\").body;\n const element = body.firstElementChild;\n if (!element) return html;\n element.innerHTML = element.innerHTML.trim() ? `\\n${element.innerHTML}\\n` : \"\\n\";\n return element.outerHTML;\n}\n\nfunction serializeTableAsHtml({\n editor,\n state,\n node,\n parent,\n}: {\n editor: Editor;\n state: MarkdownTableSerializerState;\n node: ProseMirrorNode;\n parent: ProseMirrorNode | Fragment;\n}): void {\n if (markdownHtmlOption(editor)) {\n const { schema } = node.type;\n const html = getHTMLFromFragment(Fragment.from(node), schema);\n const isTopLevel = parent instanceof Fragment || parent.type.name === schema.topNodeType.name;\n state.write(isTopLevel ? formatHtmlBlock(html) : html);\n } else {\n console.warn(`Tiptap Markdown: \"${node.type.name}\" node is only available in html mode`);\n state.write(`[${node.type.name}]`);\n }\n state.closeBlock(node);\n}\n\n/**\n * tiptap-markdown 0.9.0's table serializer, except that a `|` inside a cell is\n * written as `\\|` (see {@link escapeTableCellPipes}). The library writes it\n * bare — it escapes only `<` / `>` in text, and prosemirror-markdown only\n * `` `*\\~[]_ `` — so a cell holding `a | b` or `` `x|y` `` read back as extra\n * columns and markdown-it dropped every cell past the header's width. A table\n * that is not a GFM pipe table is still written as HTML, and everything else is\n * written exactly as the library writes it.\n */\nexport function serializeMarkdownTable(\n this: MarkdownSpecContext,\n state: MarkdownTableSerializerState,\n node: ProseMirrorNode,\n parent: ProseMirrorNode | Fragment,\n): void {\n if (!isMarkdownSerializable(node)) {\n serializeTableAsHtml({ editor: this.editor, state, node, parent });\n return;\n }\n state.inTable = true;\n node.forEach((row, _rowOffset, rowIndex) => {\n state.write(\"| \");\n row.forEach((cell, _cellOffset, cellIndex) => {\n if (cellIndex) {\n state.write(\" | \");\n }\n const cellContent = cell.firstChild;\n if (cellContent?.textContent.trim()) {\n renderCellInline({ state, cellContent });\n }\n });\n state.write(\" |\");\n state.ensureNewLine();\n if (!rowIndex) {\n const delimiterRow = Array.from({ length: row.childCount }, () => \"---\").join(\" | \");\n state.write(`| ${delimiterRow} |`);\n state.ensureNewLine();\n }\n });\n state.closeBlock(node);\n state.inTable = false;\n}\n\n/**\n * The storage that makes tiptap-markdown serialize a table node with\n * {@link serializeMarkdownTable}: tiptap-markdown reads a node's markdown spec\n * from `storage.markdown`, over its own spec for the node's name.\n */\nexport function markdownTableStorage(): {\n markdown: { serialize: typeof serializeMarkdownTable };\n} {\n return { markdown: { serialize: serializeMarkdownTable } };\n}\n"],"names":[],"mappings":"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"}
@@ -45,6 +45,8 @@ const autoOpen = (assetId, options = {}) => {
45
45
  const keepCurrentSlide = options.preserveExistingSlide && existing;
46
46
  store.openAsset(assetId, {
47
47
  type: options.type ?? "unknown",
48
+ // A host's own opener tells an open nobody clicked from one the person asked for.
49
+ origin: "auto",
48
50
  ...keepCurrentSlide || options.slideNumber === void 0 ? {} : { slideNumber: options.slideNumber }
49
51
  });
50
52
  };