@athenaintel/react 0.28.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (761) hide show
  1. package/README.md +418 -10
  2. package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
  3. package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
  4. package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
  5. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  6. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  7. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  8. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  9. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  10. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  11. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  12. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  13. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  14. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  15. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  16. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  17. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  18. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  19. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  20. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  21. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  22. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  23. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  24. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  25. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  27. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  29. package/dist/agent-runtime/src/errors.js.map +1 -0
  30. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  31. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  32. package/dist/agent-runtime/src/execute-output.js +41 -0
  33. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +10 -2
  35. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +10 -2
  37. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  38. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  39. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  40. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  41. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  43. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  44. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  45. package/dist/agent-runtime/src/message-author.js.map +1 -0
  46. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  47. package/dist/agent-runtime/src/message-window.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  49. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  51. package/dist/agent-runtime/src/messages.js.map +1 -0
  52. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  53. package/dist/agent-runtime/src/model-context.js.map +1 -0
  54. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  55. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  56. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  57. package/dist/agent-runtime/src/protocol.js.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  59. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  60. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  61. package/dist/agent-runtime/src/queue.js.map +1 -0
  62. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +23 -13
  63. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  64. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +24 -14
  65. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  66. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  67. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  68. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  69. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  70. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  71. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  72. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  73. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  74. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  75. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  76. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  77. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  78. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  79. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  80. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  81. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  82. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  83. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  84. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  85. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  86. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  87. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  88. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  89. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  90. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  91. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  92. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  93. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  94. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  95. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  96. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  97. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  98. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +279 -3
  99. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  100. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +279 -3
  101. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  102. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  103. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  104. package/dist/agent-runtime/src/tool-names.js +5 -0
  105. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  106. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  107. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  108. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  109. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  110. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  111. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  112. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  113. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  114. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  115. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  116. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  117. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  119. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  120. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  121. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  122. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  123. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  124. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  125. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  126. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  127. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  128. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  129. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  130. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  131. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  133. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  135. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  136. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  137. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  138. package/dist/assets/AthenaAssetEmbed.cjs +8 -2
  139. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  140. package/dist/assets/AthenaAssetEmbed.d.ts +8 -0
  141. package/dist/assets/AthenaAssetEmbed.js +8 -2
  142. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  143. package/dist/assets/AthenaLayout.cjs +97 -31
  144. package/dist/assets/AthenaLayout.cjs.map +1 -1
  145. package/dist/assets/AthenaLayout.d.ts +13 -0
  146. package/dist/assets/AthenaLayout.js +98 -32
  147. package/dist/assets/AthenaLayout.js.map +1 -1
  148. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  149. package/dist/assets/asset-embed-messages.d.ts +6 -0
  150. package/dist/assets/asset-embed-messages.js.map +1 -1
  151. package/dist/assets/asset-panel-store.cjs +68 -32
  152. package/dist/assets/asset-panel-store.cjs.map +1 -1
  153. package/dist/assets/asset-panel-store.d.ts +47 -1
  154. package/dist/assets/asset-panel-store.js +68 -32
  155. package/dist/assets/asset-panel-store.js.map +1 -1
  156. package/dist/assets/use-asset-embed.cjs +29 -8
  157. package/dist/assets/use-asset-embed.cjs.map +1 -1
  158. package/dist/assets/use-asset-embed.d.ts +7 -0
  159. package/dist/assets/use-asset-embed.js +29 -8
  160. package/dist/assets/use-asset-embed.js.map +1 -1
  161. package/dist/catalog/chat-pickers.cjs +152 -0
  162. package/dist/catalog/chat-pickers.cjs.map +1 -0
  163. package/dist/catalog/chat-pickers.d.ts +22 -0
  164. package/dist/catalog/chat-pickers.js +152 -0
  165. package/dist/catalog/chat-pickers.js.map +1 -0
  166. package/dist/catalog/runtime-catalog.cjs +181 -0
  167. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  168. package/dist/catalog/runtime-catalog.d.ts +100 -0
  169. package/dist/catalog/runtime-catalog.js +181 -0
  170. package/dist/catalog/runtime-catalog.js.map +1 -0
  171. package/dist/chat/AthenaChat.cjs +86 -46
  172. package/dist/chat/AthenaChat.cjs.map +1 -1
  173. package/dist/chat/AthenaChat.d.ts +21 -4
  174. package/dist/chat/AthenaChat.js +88 -48
  175. package/dist/chat/AthenaChat.js.map +1 -1
  176. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  177. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  178. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  179. package/dist/chat/StatewireApprovalCard.js +39 -38
  180. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  181. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  182. package/dist/chat/StatewireClientToolBridge.js +2 -2
  183. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  184. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  185. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  186. package/dist/chat/StatewireQueuedMessages.js +15 -12
  187. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  188. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  189. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  190. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  191. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  192. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  193. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  194. package/dist/chat/WaitingOnYouBanner.js +2 -2
  195. package/dist/chat/athena-citation-links.cjs +19 -15
  196. package/dist/chat/athena-citation-links.cjs.map +1 -1
  197. package/dist/chat/athena-citation-links.js +19 -15
  198. package/dist/chat/athena-citation-links.js.map +1 -1
  199. package/dist/chat/run-activity.cjs +9 -1
  200. package/dist/chat/run-activity.cjs.map +1 -1
  201. package/dist/chat/run-activity.d.ts +6 -0
  202. package/dist/chat/run-activity.js +10 -2
  203. package/dist/chat/run-activity.js.map +1 -1
  204. package/dist/chat/statewire-banners.cjs +30 -1
  205. package/dist/chat/statewire-banners.cjs.map +1 -1
  206. package/dist/chat/statewire-banners.d.ts +20 -1
  207. package/dist/chat/statewire-banners.js +32 -3
  208. package/dist/chat/statewire-banners.js.map +1 -1
  209. package/dist/chat/statewire-client-tools.cjs +1 -1
  210. package/dist/chat/statewire-client-tools.js +1 -1
  211. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  212. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  213. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  214. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  215. package/dist/chat/super-grouping/SuperGroupingCard.cjs +7 -5
  216. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  217. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +8 -2
  218. package/dist/chat/super-grouping/SuperGroupingCard.js +7 -5
  219. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  220. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +350 -0
  221. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  222. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  223. package/dist/chat/super-grouping/SuperGroupingTranscript.js +350 -0
  224. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  225. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  226. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  227. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  228. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  229. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  230. package/dist/chat/super-grouping/activity-timeline.cjs +51 -26
  231. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  232. package/dist/chat/super-grouping/activity-timeline.d.ts +40 -8
  233. package/dist/chat/super-grouping/activity-timeline.js +52 -27
  234. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  235. package/dist/chat/super-grouping/index.cjs +12 -0
  236. package/dist/chat/super-grouping/index.cjs.map +1 -1
  237. package/dist/chat/super-grouping/index.d.ts +7 -2
  238. package/dist/chat/super-grouping/index.js +14 -2
  239. package/dist/chat/super-grouping/index.js.map +1 -1
  240. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  241. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  242. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  243. package/dist/chat/super-grouping/timeline-step.js +15 -6
  244. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  245. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  246. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  247. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  248. package/dist/chat/super-grouping/turn-segments.js +82 -0
  249. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  250. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  251. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  252. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  253. package/dist/chat/super-grouping/turn-timing.js +110 -0
  254. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  255. package/dist/chat/tiptap-text.cjs +1 -1
  256. package/dist/chat/tiptap-text.js +1 -1
  257. package/dist/chat/use-athena-run-live.cjs +1 -1
  258. package/dist/chat/use-athena-run-live.js +1 -1
  259. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  260. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  261. package/dist/chat/use-statewire-approval-request.js +74 -5
  262. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  263. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  264. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  265. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  266. package/dist/chat-ui/composer/composer-message.js +284 -0
  267. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  268. package/dist/chat-ui/composer/tiptap-composer.cjs +57 -11
  269. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  270. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  271. package/dist/chat-ui/composer/tiptap-composer.js +57 -11
  272. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  273. package/dist/chat-ui/index.cjs +4 -1
  274. package/dist/chat-ui/index.cjs.map +1 -1
  275. package/dist/chat-ui/index.d.ts +3 -2
  276. package/dist/chat-ui/index.js +5 -2
  277. package/dist/chat-ui/index.js.map +1 -1
  278. package/dist/chat-ui/mentions/mention-chip.cjs +3 -2
  279. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  280. package/dist/chat-ui/mentions/mention-chip.js +4 -3
  281. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  282. package/dist/chat-ui/mentions/mention-extension.cjs +8 -2
  283. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  284. package/dist/chat-ui/mentions/mention-extension.js +8 -2
  285. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  286. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  287. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  288. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  289. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  290. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  291. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  292. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  293. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  294. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  295. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  296. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  297. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  298. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  299. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  300. package/dist/chat-ui/messages/message-components.cjs +30 -10
  301. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  302. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  303. package/dist/chat-ui/messages/message-components.js +30 -10
  304. package/dist/chat-ui/messages/message-components.js.map +1 -1
  305. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  306. package/dist/chat-ui/messages/runtime-message.js +1 -1
  307. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  308. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  309. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  310. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  311. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  312. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  313. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  314. package/dist/chat-ui/messages/wake-marker.js +40 -5
  315. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  316. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  317. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  318. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  319. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  320. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  321. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  322. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  323. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  324. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  325. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  326. package/dist/chat-ui/statewire.cjs +1 -1
  327. package/dist/chat-ui/statewire.d.ts +1 -1
  328. package/dist/chat-ui/statewire.js +1 -1
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  330. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  331. package/dist/collab/client.cjs +218 -13
  332. package/dist/collab/client.cjs.map +1 -1
  333. package/dist/collab/client.d.ts +105 -2
  334. package/dist/collab/client.js +221 -17
  335. package/dist/collab/client.js.map +1 -1
  336. package/dist/collab/index.cjs +2 -0
  337. package/dist/collab/index.cjs.map +1 -1
  338. package/dist/collab/index.d.ts +1 -1
  339. package/dist/collab/index.js +3 -1
  340. package/dist/composer/AttachmentContext.cjs +38 -12
  341. package/dist/composer/AttachmentContext.cjs.map +1 -1
  342. package/dist/composer/AttachmentContext.d.ts +22 -1
  343. package/dist/composer/AttachmentContext.js +40 -14
  344. package/dist/composer/AttachmentContext.js.map +1 -1
  345. package/dist/composer/QuoteContext.cjs +80 -28
  346. package/dist/composer/QuoteContext.cjs.map +1 -1
  347. package/dist/composer/QuoteContext.d.ts +35 -6
  348. package/dist/composer/QuoteContext.js +82 -30
  349. package/dist/composer/QuoteContext.js.map +1 -1
  350. package/dist/composer/build-composed-message.cjs +27 -0
  351. package/dist/composer/build-composed-message.cjs.map +1 -1
  352. package/dist/composer/build-composed-message.d.ts +21 -0
  353. package/dist/composer/build-composed-message.js +28 -1
  354. package/dist/composer/build-composed-message.js.map +1 -1
  355. package/dist/composer/composer-handoff.cjs +13 -1
  356. package/dist/composer/composer-handoff.cjs.map +1 -1
  357. package/dist/composer/composer-handoff.d.ts +12 -0
  358. package/dist/composer/composer-handoff.js +15 -3
  359. package/dist/composer/composer-handoff.js.map +1 -1
  360. package/dist/composer/index.d.ts +6 -3
  361. package/dist/composer/useReadComposerDraft.cjs +16 -0
  362. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  363. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  364. package/dist/composer/useReadComposerDraft.js +16 -0
  365. package/dist/composer/useReadComposerDraft.js.map +1 -0
  366. package/dist/diagnostics/errors.cjs +6 -0
  367. package/dist/diagnostics/errors.cjs.map +1 -1
  368. package/dist/diagnostics/errors.d.ts +6 -0
  369. package/dist/diagnostics/errors.js +6 -0
  370. package/dist/diagnostics/errors.js.map +1 -1
  371. package/dist/index.cjs +159 -7
  372. package/dist/index.cjs.map +1 -1
  373. package/dist/index.d.ts +53 -12
  374. package/dist/index.js +166 -14
  375. package/dist/index.js.map +1 -1
  376. package/dist/lib/owner-document.cjs +32 -0
  377. package/dist/lib/owner-document.cjs.map +1 -0
  378. package/dist/lib/owner-document.d.ts +17 -0
  379. package/dist/lib/owner-document.js +32 -0
  380. package/dist/lib/owner-document.js.map +1 -0
  381. package/dist/lib/portal-surface.cjs +55 -0
  382. package/dist/lib/portal-surface.cjs.map +1 -0
  383. package/dist/lib/portal-surface.d.ts +37 -0
  384. package/dist/lib/portal-surface.js +55 -0
  385. package/dist/lib/portal-surface.js.map +1 -0
  386. package/dist/lib/use-athena-rest-query.cjs +34 -0
  387. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  388. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  389. package/dist/lib/use-athena-rest-query.js +34 -0
  390. package/dist/lib/use-athena-rest-query.js.map +1 -0
  391. package/dist/provider/AthenaProvider.cjs +36 -6
  392. package/dist/provider/AthenaProvider.cjs.map +1 -1
  393. package/dist/provider/AthenaProvider.d.ts +20 -1
  394. package/dist/provider/AthenaProvider.js +38 -8
  395. package/dist/provider/AthenaProvider.js.map +1 -1
  396. package/dist/provider/citation-links.d.ts +10 -2
  397. package/dist/{packages/react → react}/package.json.cjs +1 -1
  398. package/dist/{packages/react → react}/package.json.js +1 -1
  399. package/dist/runtime/statewire-lifecycle.cjs +15 -3
  400. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  401. package/dist/runtime/statewire-lifecycle.d.ts +6 -0
  402. package/dist/runtime/statewire-lifecycle.js +15 -3
  403. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  404. package/dist/runtime/useAthenaStatewireRuntime.cjs +11 -7
  405. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  406. package/dist/runtime/useAthenaStatewireRuntime.js +11 -7
  407. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  408. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  409. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  410. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  411. package/dist/search/useAthenaRepoSearch.js +6 -14
  412. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  413. package/dist/sheet-range/a1.cjs +162 -0
  414. package/dist/sheet-range/a1.cjs.map +1 -0
  415. package/dist/sheet-range/a1.d.ts +91 -0
  416. package/dist/sheet-range/a1.js +162 -0
  417. package/dist/sheet-range/a1.js.map +1 -0
  418. package/dist/sheet-range/index.cjs +22 -0
  419. package/dist/sheet-range/index.cjs.map +1 -0
  420. package/dist/sheet-range/index.d.ts +12 -0
  421. package/dist/sheet-range/index.js +22 -0
  422. package/dist/sheet-range/index.js.map +1 -0
  423. package/dist/sheet-range/range-preview-table.cjs +75 -0
  424. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  425. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  426. package/dist/sheet-range/range-preview-table.js +75 -0
  427. package/dist/sheet-range/range-preview-table.js.map +1 -0
  428. package/dist/sheet-range/range-preview.cjs +116 -0
  429. package/dist/sheet-range/range-preview.cjs.map +1 -0
  430. package/dist/sheet-range/range-preview.d.ts +67 -0
  431. package/dist/sheet-range/range-preview.js +116 -0
  432. package/dist/sheet-range/range-preview.js.map +1 -0
  433. package/dist/styles.css +1 -1
  434. package/dist/threads/Inbox.cjs +289 -0
  435. package/dist/threads/Inbox.cjs.map +1 -0
  436. package/dist/threads/Inbox.d.ts +46 -0
  437. package/dist/threads/Inbox.js +289 -0
  438. package/dist/threads/Inbox.js.map +1 -0
  439. package/dist/threads/SessionList.cjs +51 -126
  440. package/dist/threads/SessionList.cjs.map +1 -1
  441. package/dist/threads/SessionList.d.ts +26 -1
  442. package/dist/threads/SessionList.js +45 -120
  443. package/dist/threads/SessionList.js.map +1 -1
  444. package/dist/threads/SessionsPage.cjs +753 -0
  445. package/dist/threads/SessionsPage.cjs.map +1 -0
  446. package/dist/threads/SessionsPage.d.ts +35 -0
  447. package/dist/threads/SessionsPage.js +753 -0
  448. package/dist/threads/SessionsPage.js.map +1 -0
  449. package/dist/threads/api.cjs +21 -1
  450. package/dist/threads/api.cjs.map +1 -1
  451. package/dist/threads/api.d.ts +59 -0
  452. package/dist/threads/api.js +21 -1
  453. package/dist/threads/api.js.map +1 -1
  454. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  455. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  456. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  457. package/dist/threads/conversation-list-fetcher.js +9 -2
  458. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  459. package/dist/threads/index.d.ts +2 -1
  460. package/dist/threads/pull-request-display.cjs +25 -0
  461. package/dist/threads/pull-request-display.cjs.map +1 -0
  462. package/dist/threads/pull-request-display.d.ts +15 -0
  463. package/dist/threads/pull-request-display.js +25 -0
  464. package/dist/threads/pull-request-display.js.map +1 -0
  465. package/dist/threads/session-list-model.cjs +16 -2
  466. package/dist/threads/session-list-model.cjs.map +1 -1
  467. package/dist/threads/session-list-model.d.ts +10 -0
  468. package/dist/threads/session-list-model.js +16 -2
  469. package/dist/threads/session-list-model.js.map +1 -1
  470. package/dist/threads/session-row-parts.cjs +152 -0
  471. package/dist/threads/session-row-parts.cjs.map +1 -0
  472. package/dist/threads/session-row-parts.d.ts +50 -0
  473. package/dist/threads/session-row-parts.js +152 -0
  474. package/dist/threads/session-row-parts.js.map +1 -0
  475. package/dist/threads/sessions-page-model.cjs +305 -0
  476. package/dist/threads/sessions-page-model.cjs.map +1 -0
  477. package/dist/threads/sessions-page-model.d.ts +86 -0
  478. package/dist/threads/sessions-page-model.js +305 -0
  479. package/dist/threads/sessions-page-model.js.map +1 -0
  480. package/dist/threads/sessions-page-storage.cjs +93 -0
  481. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  482. package/dist/threads/sessions-page-storage.d.ts +23 -0
  483. package/dist/threads/sessions-page-storage.js +93 -0
  484. package/dist/threads/sessions-page-storage.js.map +1 -0
  485. package/dist/threads/sessions-query.cjs +235 -0
  486. package/dist/threads/sessions-query.cjs.map +1 -0
  487. package/dist/threads/sessions-query.d.ts +119 -0
  488. package/dist/threads/sessions-query.js +235 -0
  489. package/dist/threads/sessions-query.js.map +1 -0
  490. package/dist/threads/statewire-thread-list.cjs +133 -40
  491. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  492. package/dist/threads/statewire-thread-list.d.ts +83 -2
  493. package/dist/threads/statewire-thread-list.js +134 -41
  494. package/dist/threads/statewire-thread-list.js.map +1 -1
  495. package/dist/threads/use-athena-sessions.cjs +198 -0
  496. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  497. package/dist/threads/use-athena-sessions.d.ts +81 -0
  498. package/dist/threads/use-athena-sessions.js +198 -0
  499. package/dist/threads/use-athena-sessions.js.map +1 -0
  500. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  501. package/dist/threads/use-rest-conversation-history.js +1 -1
  502. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  503. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  504. package/dist/threads/use-statewire-conversation-history.js +1 -1
  505. package/dist/threads/use-thread-read-state.cjs +73 -0
  506. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  507. package/dist/threads/use-thread-read-state.d.ts +51 -0
  508. package/dist/threads/use-thread-read-state.js +73 -0
  509. package/dist/threads/use-thread-read-state.js.map +1 -0
  510. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  511. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  512. package/dist/tools/auto-open-tools.cjs +2 -0
  513. package/dist/tools/auto-open-tools.cjs.map +1 -1
  514. package/dist/tools/auto-open-tools.js +2 -0
  515. package/dist/tools/auto-open-tools.js.map +1 -1
  516. package/dist/tools/file-tool-uis.cjs +18 -43
  517. package/dist/tools/file-tool-uis.cjs.map +1 -1
  518. package/dist/tools/file-tool-uis.d.ts +1 -2
  519. package/dist/tools/file-tool-uis.js +18 -42
  520. package/dist/tools/file-tool-uis.js.map +1 -1
  521. package/dist/tools/index.cjs +6 -2
  522. package/dist/tools/index.cjs.map +1 -1
  523. package/dist/tools/index.d.ts +1 -0
  524. package/dist/tools/index.js +6 -2
  525. package/dist/tools/index.js.map +1 -1
  526. package/dist/tools/misc-tool-uis.cjs +2 -2
  527. package/dist/tools/misc-tool-uis.js +2 -2
  528. package/dist/tools/primitives.cjs +1 -1
  529. package/dist/tools/primitives.js +1 -1
  530. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  531. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  532. package/dist/tools/read-asset-tool-ui.js +21 -70
  533. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  534. package/dist/tools/step-text.cjs +21 -0
  535. package/dist/tools/step-text.cjs.map +1 -0
  536. package/dist/tools/step-text.d.ts +10 -0
  537. package/dist/tools/step-text.js +21 -0
  538. package/dist/tools/step-text.js.map +1 -0
  539. package/dist/tools/tool-fallback.cjs +24 -5
  540. package/dist/tools/tool-fallback.cjs.map +1 -1
  541. package/dist/tools/tool-fallback.d.ts +3 -1
  542. package/dist/tools/tool-fallback.js +24 -5
  543. package/dist/tools/tool-fallback.js.map +1 -1
  544. package/dist/tools/tool-summary.cjs +661 -0
  545. package/dist/tools/tool-summary.cjs.map +1 -0
  546. package/dist/tools/tool-summary.d.ts +99 -0
  547. package/dist/tools/tool-summary.js +661 -0
  548. package/dist/tools/tool-summary.js.map +1 -0
  549. package/dist/tools/tool-uis.cjs +37 -95
  550. package/dist/tools/tool-uis.cjs.map +1 -1
  551. package/dist/tools/tool-uis.js +37 -95
  552. package/dist/tools/tool-uis.js.map +1 -1
  553. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  554. package/dist/tools/voice-update-tool-ui.js +1 -1
  555. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  556. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  557. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  558. package/dist/tools/write-todos-tool-ui.js +5 -4
  559. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  560. package/dist/ui/popover.cjs +6 -6
  561. package/dist/ui/popover.cjs.map +1 -1
  562. package/dist/ui/popover.js +6 -6
  563. package/dist/ui/popover.js.map +1 -1
  564. package/dist/ui/tooltip.cjs +16 -2
  565. package/dist/ui/tooltip.cjs.map +1 -1
  566. package/dist/ui/tooltip.d.ts +1 -1
  567. package/dist/ui/tooltip.js +16 -2
  568. package/dist/ui/tooltip.js.map +1 -1
  569. package/dist/version.cjs +1 -1
  570. package/dist/version.js +1 -1
  571. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  572. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  573. package/dist/voice/use-athena-voice-session.js.map +1 -1
  574. package/dist/workbench/SessionWorkbench.cjs +378 -0
  575. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  576. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  577. package/dist/workbench/SessionWorkbench.js +378 -0
  578. package/dist/workbench/SessionWorkbench.js.map +1 -0
  579. package/dist/workbench/session-workbench-context.cjs +26 -0
  580. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  581. package/dist/workbench/session-workbench-context.d.ts +55 -0
  582. package/dist/workbench/session-workbench-context.js +26 -0
  583. package/dist/workbench/session-workbench-context.js.map +1 -0
  584. package/dist/workbench/session-workbench-model.cjs +288 -0
  585. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  586. package/dist/workbench/session-workbench-model.d.ts +168 -0
  587. package/dist/workbench/session-workbench-model.js +288 -0
  588. package/dist/workbench/session-workbench-model.js.map +1 -0
  589. package/dist/workbench/session-workbench-panes.cjs +580 -0
  590. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  591. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  592. package/dist/workbench/session-workbench-panes.js +580 -0
  593. package/dist/workbench/session-workbench-panes.js.map +1 -0
  594. package/dist/workbench/session-workspace-api.cjs +157 -0
  595. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  596. package/dist/workbench/session-workspace-api.d.ts +70 -0
  597. package/dist/workbench/session-workspace-api.js +157 -0
  598. package/dist/workbench/session-workspace-api.js.map +1 -0
  599. package/dist/workbench/use-session-workspace.cjs +100 -0
  600. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  601. package/dist/workbench/use-session-workspace.d.ts +45 -0
  602. package/dist/workbench/use-session-workspace.js +100 -0
  603. package/dist/workbench/use-session-workspace.js.map +1 -0
  604. package/dist/workbench/workbench-layout-context.cjs +10 -0
  605. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  606. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  607. package/dist/workbench/workbench-layout-context.js +10 -0
  608. package/dist/workbench/workbench-layout-context.js.map +1 -0
  609. package/package.json +20 -9
  610. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  611. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  612. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  613. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  614. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  615. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  616. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  617. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  618. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  619. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  620. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  621. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  622. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  623. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  624. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  625. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  626. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  627. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  628. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  629. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  630. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  631. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  632. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  633. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  634. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  635. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  636. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  637. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  638. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  639. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  640. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  641. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  642. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  643. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  644. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  645. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  646. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  647. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  648. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  649. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  650. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  651. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  652. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  653. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  654. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  655. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  656. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  657. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  658. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  659. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  660. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  661. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  662. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  663. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  664. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  665. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  666. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  667. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  668. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  669. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  670. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  671. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  672. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  673. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  704. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  705. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  706. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  707. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  708. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  709. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  710. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  711. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  712. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  713. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  714. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  715. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  716. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  717. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  718. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  719. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  720. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  721. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  722. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  723. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  724. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  725. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  726. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  727. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  728. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  729. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  730. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  731. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  732. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  733. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  734. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  735. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  736. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  737. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  738. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  739. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  740. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  741. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  742. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  743. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  744. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  745. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  746. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  747. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  748. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  749. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  750. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.cjs +0 -0
  751. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.js +0 -0
  752. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  753. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  754. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  755. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  756. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  757. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  758. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  759. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  760. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  761. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
@@ -0,0 +1,284 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import { Fragment } from "@tiptap/pm/model";
3
+ import { getMarkdownStorage } from "../markdown-storage.js";
4
+ import { stageComposerMarkdown, trimComposerDraft } from "../../agent-runtime/src/composer-markdown.js";
5
+ function serializeComposerMessage(editor) {
6
+ const storage = getMarkdownStorage(editor);
7
+ const serializer = storage.serializer;
8
+ if (!isTiptapMarkdownSerializer(serializer)) {
9
+ return storage.getMarkdown();
10
+ }
11
+ return verbatimTextSerializer(serializer).serialize(editor.state.doc);
12
+ }
13
+ const isRecord = (value) => typeof value === "object" && value !== null;
14
+ function isTiptapMarkdownSerializer(value) {
15
+ if (!isRecord(value) || typeof Reflect.get(value, "serialize") !== "function") return false;
16
+ const nodes = Reflect.get(value, "nodes");
17
+ return isRecord(nodes) && typeof nodes.text === "function";
18
+ }
19
+ const writeTextVerbatim = (state, node) => {
20
+ state.text(node.text ?? "", false);
21
+ };
22
+ function writeLineBreak(draftLineBreak) {
23
+ return (state, node, parent, index) => {
24
+ if (state.inTable) {
25
+ draftLineBreak(state, node, parent, index);
26
+ return;
27
+ }
28
+ for (let next = index + 1; next < parent.childCount; next++) {
29
+ if (parent.child(next).type !== node.type) {
30
+ state.write("\n");
31
+ return;
32
+ }
33
+ }
34
+ };
35
+ }
36
+ function verbatimTextSerializer(serializer) {
37
+ const nodes = serializer.nodes;
38
+ const draftLineBreak = nodes.hardBreak;
39
+ return Object.create(serializer, {
40
+ nodes: {
41
+ value: {
42
+ ...nodes,
43
+ text: writeTextVerbatim,
44
+ ...draftLineBreak && { hardBreak: writeLineBreak(draftLineBreak) }
45
+ }
46
+ }
47
+ });
48
+ }
49
+ function escapeBareUnderscores(text) {
50
+ let escaped = "";
51
+ let backslashes = 0;
52
+ for (const character of text) {
53
+ if (character === "_" && backslashes % 2 === 0) escaped += "\\";
54
+ escaped += character;
55
+ backslashes = character === "\\" ? backslashes + 1 : 0;
56
+ }
57
+ return escaped;
58
+ }
59
+ const CHARACTER_REFERENCE_AMPERSAND = /&(?=(?:[A-Za-z][A-Za-z0-9]*|#[0-9]+|#[xX][0-9A-Fa-f]+);)/g;
60
+ function escapeCharacterReferences(text) {
61
+ return text.replace(CHARACTER_REFERENCE_AMPERSAND, "&amp;");
62
+ }
63
+ function writeTextForDraft(draftText) {
64
+ return (state, node, parent, index) => {
65
+ if (state.inAutolink) {
66
+ state.text(node.text ?? "", false);
67
+ return;
68
+ }
69
+ const typed = node.text ?? "";
70
+ const referencesKept = escapeCharacterReferences(typed);
71
+ const textNode = referencesKept === typed ? node : node.type.schema.text(referencesKept, node.marks);
72
+ const escapeText = state.esc;
73
+ state.esc = (text, startOfLine) => escapeBareUnderscores(escapeText.call(state, text, startOfLine));
74
+ try {
75
+ draftText(state, textNode, parent, index);
76
+ } finally {
77
+ state.esc = escapeText;
78
+ }
79
+ };
80
+ }
81
+ function draftTextSerializer(serializer) {
82
+ const nodes = serializer.nodes;
83
+ const draftText = nodes.text;
84
+ if (!draftText) return serializer;
85
+ return Object.create(serializer, {
86
+ nodes: { value: { ...nodes, text: writeTextForDraft(draftText) } }
87
+ });
88
+ }
89
+ const LINE_START_REFERENCES = { " ": "&#32;", " ": "&#9;" };
90
+ const STAND_IN_CANDIDATES = [
91
+ " ",
92
+ " ",
93
+ " ",
94
+ " ",
95
+ " ",
96
+ " ",
97
+ " ",
98
+ " ",
99
+ " ",
100
+ " ",
101
+ " ",
102
+ " ",
103
+ " ",
104
+ " "
105
+ ];
106
+ function standInsFor(doc) {
107
+ const held = JSON.stringify(doc.toJSON());
108
+ const [space, tab] = STAND_IN_CANDIDATES.filter((candidate) => !held.includes(candidate));
109
+ return space !== void 0 && tab !== void 0 ? { " ": space, " ": tab } : null;
110
+ }
111
+ const isLineStartWhitespace = (character) => character === " " || character === " ";
112
+ function withLineStandIns({
113
+ textblock,
114
+ standIns
115
+ }) {
116
+ const { schema } = textblock.type;
117
+ const lineBreak = schema.linebreakReplacement;
118
+ const isBlank = (child) => child.isText ? !/\S/.test(child.text ?? "") : child.type === lineBreak;
119
+ let blank = true;
120
+ textblock.forEach((child) => {
121
+ blank && (blank = isBlank(child));
122
+ });
123
+ if (blank) return { node: textblock, replaced: 0 };
124
+ const children = [];
125
+ let replaced = 0;
126
+ let atLineStart = true;
127
+ textblock.forEach((child) => {
128
+ const lineStart = atLineStart;
129
+ atLineStart = child.type === lineBreak;
130
+ const text = child.isText ? child.text ?? "" : "";
131
+ const first = text.charAt(0);
132
+ if (lineStart && isLineStartWhitespace(first) && !child.marks.some((mark) => mark.type.spec.code)) {
133
+ replaced += 1;
134
+ children.push(schema.text(standIns[first] + text.slice(1), child.marks));
135
+ } else {
136
+ children.push(child);
137
+ }
138
+ });
139
+ return replaced > 0 ? { node: textblock.copy(Fragment.from(children)), replaced } : { node: textblock, replaced: 0 };
140
+ }
141
+ function withLeadingWhitespaceStandIns({
142
+ doc,
143
+ standIns
144
+ }) {
145
+ let replaced = 0;
146
+ const map = (node) => {
147
+ if (node.isTextblock) {
148
+ if (node.type.spec.code) return node;
149
+ const lines = withLineStandIns({ textblock: node, standIns });
150
+ replaced += lines.replaced;
151
+ return lines.node;
152
+ }
153
+ if (node.isLeaf) return node;
154
+ const children = [];
155
+ let changed = false;
156
+ node.forEach((child) => {
157
+ const mapped2 = map(child);
158
+ changed || (changed = mapped2 !== child);
159
+ children.push(mapped2);
160
+ });
161
+ return changed ? node.copy(Fragment.from(children)) : node;
162
+ };
163
+ const mapped = map(doc);
164
+ return { doc: mapped, replaced };
165
+ }
166
+ function serializeComposerDraft(editor) {
167
+ const storage = getMarkdownStorage(editor);
168
+ const serializer = storage.serializer;
169
+ if (!isTiptapMarkdownSerializer(serializer)) return storage.getMarkdown();
170
+ const draft = draftTextSerializer(serializer);
171
+ const source = editor.state.doc;
172
+ const standIns = standInsFor(source);
173
+ if (standIns === null) return draft.serialize(source);
174
+ const lines = withLeadingWhitespaceStandIns({ doc: source, standIns });
175
+ if (lines.replaced === 0) return draft.serialize(source);
176
+ const written = draft.serialize(lines.doc);
177
+ const references = /* @__PURE__ */ new Map([
178
+ [standIns[" "], LINE_START_REFERENCES[" "]],
179
+ [standIns[" "], LINE_START_REFERENCES[" "]]
180
+ ]);
181
+ const characters = Array.from(written);
182
+ const standInCount = characters.filter((character) => references.has(character)).length;
183
+ if (standInCount !== lines.replaced) return draft.serialize(source);
184
+ return characters.map((character) => references.get(character) ?? character).join("");
185
+ }
186
+ const LINE_START_WHITESPACE_REFERENCES = new Set(
187
+ Object.values(LINE_START_REFERENCES)
188
+ );
189
+ const KEPT_WHITESPACE_TOKEN = "athena_kept_whitespace";
190
+ const COLLAPSIBLE_WHITESPACE = /[ \t]{2,}|\t/g;
191
+ const keptWhitespace = (whitespace) => `<athena-whitespace style="white-space: pre-wrap">${whitespace}</athena-whitespace>`;
192
+ const draftWhitespaceParsers = /* @__PURE__ */ new WeakSet();
193
+ function keepDraftWhitespace(markdownit) {
194
+ if (draftWhitespaceParsers.has(markdownit)) return;
195
+ draftWhitespaceParsers.add(markdownit);
196
+ markdownit.core.ruler.before("text_join", "athena_kept_whitespace", (state) => {
197
+ for (const block of state.tokens) {
198
+ const inline = block.children ?? [];
199
+ inline.forEach((token, index) => {
200
+ var _a;
201
+ if (token.type !== "text_special" || token.info !== "entity") return;
202
+ if (!LINE_START_WHITESPACE_REFERENCES.has(token.markup)) return;
203
+ token.type = KEPT_WHITESPACE_TOKEN;
204
+ const next = inline[index + 1];
205
+ if ((next == null ? void 0 : next.type) !== "text") return;
206
+ const run = ((_a = /^[ \t]*/.exec(next.content)) == null ? void 0 : _a[0]) ?? "";
207
+ token.content += run;
208
+ next.content = next.content.slice(run.length);
209
+ });
210
+ }
211
+ });
212
+ const { rules } = markdownit.renderer;
213
+ rules[KEPT_WHITESPACE_TOKEN] = (tokens, index) => {
214
+ var _a;
215
+ return keptWhitespace(((_a = tokens[index]) == null ? void 0 : _a.content) ?? "");
216
+ };
217
+ for (const name of ["text", "code_inline"]) {
218
+ const render = rules[name];
219
+ if (!render) continue;
220
+ rules[name] = (...args) => render(...args).replace(COLLAPSIBLE_WHITESPACE, keptWhitespace);
221
+ }
222
+ }
223
+ const ComposerDraftWhitespace = Extension.create({
224
+ name: "athenaComposerDraftWhitespace",
225
+ addStorage() {
226
+ return { markdown: { parse: { setup: keepDraftWhitespace } } };
227
+ }
228
+ });
229
+ function captureComposerSend(editor) {
230
+ return {
231
+ text: serializeComposerMessage(editor).trim(),
232
+ draftMarkdown: trimComposerDraft(serializeComposerDraft(editor))
233
+ };
234
+ }
235
+ const REMEMBERED_SENDS = 50;
236
+ const RETURNED_SEND_WINDOW_MS = 6e4;
237
+ const sends = /* @__PURE__ */ new Map();
238
+ const sendKey = ({ threadId, text }) => JSON.stringify([threadId, text]);
239
+ const isFresh = (send, now) => now - send.sentAt <= RETURNED_SEND_WINDOW_MS;
240
+ function rememberComposerSend({
241
+ threadId,
242
+ text,
243
+ draftMarkdown,
244
+ now = Date.now()
245
+ }) {
246
+ const key = sendKey({ threadId, text });
247
+ const remembered = sends.get(key);
248
+ sends.delete(key);
249
+ const collides = remembered !== void 0 && isFresh(remembered, now) && remembered.draft !== draftMarkdown;
250
+ sends.set(key, { draft: collides ? null : draftMarkdown, sentAt: now });
251
+ while (sends.size > REMEMBERED_SENDS) {
252
+ const oldest = sends.keys().next();
253
+ if (oldest.done) break;
254
+ sends.delete(oldest.value);
255
+ }
256
+ }
257
+ function draftForReturnedSend({
258
+ threadId,
259
+ text,
260
+ now = Date.now()
261
+ }) {
262
+ const remembered = sends.get(sendKey({ threadId, text }));
263
+ return remembered !== void 0 && isFresh(remembered, now) ? remembered.draft : null;
264
+ }
265
+ function prepareComposerSend({
266
+ threadId,
267
+ text,
268
+ draftMarkdown
269
+ }) {
270
+ rememberComposerSend({ threadId, text, draftMarkdown });
271
+ stageComposerMarkdown({ threadId, text, markdown: draftMarkdown });
272
+ }
273
+ export {
274
+ ComposerDraftWhitespace,
275
+ RETURNED_SEND_WINDOW_MS,
276
+ captureComposerSend,
277
+ draftForReturnedSend,
278
+ escapeCharacterReferences,
279
+ prepareComposerSend,
280
+ rememberComposerSend,
281
+ serializeComposerDraft,
282
+ serializeComposerMessage
283
+ };
284
+ //# sourceMappingURL=composer-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer-message.js","sources":["../../../src/chat-ui/composer/composer-message.ts"],"sourcesContent":["import { stageComposerMarkdown, trimComposerDraft } from \"@athenaintel/agent-runtime\";\nimport { type Editor, Extension } from \"@tiptap/core\";\nimport { Fragment, type Node as ProseMirrorNode } from \"@tiptap/pm/model\";\nimport { getMarkdownStorage } from \"../markdown-storage\";\n\n/**\n * The composer's draft as it is sent: its Markdown with every plain-text run\n * written exactly as it was typed. The Olympus chat composer sends the same\n * way (`olympus/src/components/textbox/composer-message-markdown.ts`).\n *\n * `getMarkdown()` escapes plain text for Markdown: prosemirror-markdown's\n * `esc()` puts a backslash before `` ` * \\ ~ [ ] _ `` (and before `#`, `-`,\n * `+`, `>` and `1.` at the start of a line), and tiptap-markdown's text\n * serializer turns `<` and `>` into `&lt;` and `&gt;`. That is right for a\n * draft, which is parsed back, but the sent text is what the model reads, and\n * it reads it literally: `C:\\Users` arrived as `C:\\\\Users`, `arr[0]` as\n * `arr\\[0\\]` and `List<T>` as `List&lt;T&gt;`. A line break typed with\n * Shift+Enter is Markdown's hard break, `\\` before the newline, in the draft;\n * it goes out as the newline alone.\n *\n * Only the plain-text runs and line breaks change. Formatting still\n * serializes as Markdown (bold, italic, strike, inline code, code blocks,\n * lists, headings, links, tables), mention chips still write their `[@Name](url)`\n * links, and code spans and blocks were never escaped.\n */\nexport function serializeComposerMessage(editor: Editor): string {\n const storage = getMarkdownStorage(editor);\n const serializer: unknown = storage.serializer;\n if (!isTiptapMarkdownSerializer(serializer)) {\n // A tiptap-markdown upgrade that reshaped its serializer: keep sending (the\n // escaped draft) rather than fail the send. The tests pin the verbatim\n // output, so such an upgrade fails CI before it ships.\n return storage.getMarkdown();\n }\n return verbatimTextSerializer(serializer).serialize(editor.state.doc);\n}\n\n/** What prosemirror-markdown's serializer state offers a node serializer, as far as text goes. */\ninterface MarkdownSerializerState {\n /** Writes `text`, escaping it for Markdown unless `escapeMarkdown` is `false`. */\n text(text: string, escapeMarkdown?: boolean): void;\n /** The escape `text()` applies to each line (prosemirror-markdown 1.13's `esc()`). */\n esc(text: string, startOfLine?: boolean): string;\n /** Writes `content` as is, after the enclosing blocks' line prefix when a line starts. */\n write(content?: string): void;\n /** True while a table serializer writes a table. */\n readonly inTable?: boolean;\n /**\n * True while prosemirror-markdown writes a link whose text is its URL as an\n * autolink (`<https://…>`), where Markdown reads no backslash escapes.\n */\n readonly inAutolink?: boolean;\n}\n\ntype MarkdownNodeSerializer = (\n state: MarkdownSerializerState,\n node: ProseMirrorNode,\n parent: ProseMirrorNode,\n index: number,\n) => void;\n\n/**\n * The slice of tiptap-markdown 0.9.0's `MarkdownSerializer` this module uses.\n * `nodes` is a getter mapping every schema node type to its Markdown spec's\n * `serialize`, and `serialize(doc)` builds the serializer state from\n * `this.nodes` and `this.marks`, so an object whose prototype is the editor's\n * serializer and whose own `nodes` replaces `text` and `hardBreak` serializes\n * everything else exactly as `getMarkdown()` does.\n */\ninterface TiptapMarkdownSerializer {\n readonly nodes: Readonly<Record<string, MarkdownNodeSerializer | undefined>>;\n serialize(content: ProseMirrorNode): string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\n\nfunction isTiptapMarkdownSerializer(value: unknown): value is TiptapMarkdownSerializer {\n if (!isRecord(value) || typeof Reflect.get(value, \"serialize\") !== \"function\") return false;\n const nodes: unknown = Reflect.get(value, \"nodes\");\n return isRecord(nodes) && typeof nodes.text === \"function\";\n}\n\nconst writeTextVerbatim: MarkdownNodeSerializer = (state, node) => {\n state.text(node.text ?? \"\", false);\n};\n\n/**\n * A hard break as a plain newline. The draft's serializer (tiptap-markdown's\n * `hard-break.js`) keeps the rest: it writes nothing for a break with only\n * breaks after it, and inside a table, where a cell holds one line, it writes\n * a `<br>` tag.\n */\nfunction writeLineBreak(draftLineBreak: MarkdownNodeSerializer): MarkdownNodeSerializer {\n return (state, node, parent, index) => {\n if (state.inTable) {\n draftLineBreak(state, node, parent, index);\n return;\n }\n for (let next = index + 1; next < parent.childCount; next++) {\n if (parent.child(next).type !== node.type) {\n state.write(\"\\n\");\n return;\n }\n }\n };\n}\n\nfunction verbatimTextSerializer(serializer: TiptapMarkdownSerializer): TiptapMarkdownSerializer {\n const nodes = serializer.nodes;\n const draftLineBreak = nodes.hardBreak;\n return Object.create(serializer, {\n nodes: {\n value: {\n ...nodes,\n text: writeTextVerbatim,\n ...(draftLineBreak && { hardBreak: writeLineBreak(draftLineBreak) }),\n },\n },\n });\n}\n\n/**\n * `text` with every underscore that is not already escaped escaped:\n * prosemirror-markdown's `esc()` leaves an underscore between two word\n * characters bare, and an underscore after an odd run of backslashes is one it\n * escaped itself.\n */\nfunction escapeBareUnderscores(text: string): string {\n let escaped = \"\";\n let backslashes = 0;\n for (const character of text) {\n if (character === \"_\" && backslashes % 2 === 0) escaped += \"\\\\\";\n escaped += character;\n backslashes = character === \"\\\\\" ? backslashes + 1 : 0;\n }\n return escaped;\n}\n\n/**\n * An `&` that starts a character reference (`&lt;`, `&copy;`, `&#60;`,\n * `&#x3C;`): Markdown decodes those, so typed `&lt;` read back as `<`.\n */\nconst CHARACTER_REFERENCE_AMPERSAND = /&(?=(?:[A-Za-z][A-Za-z0-9]*|#[0-9]+|#[xX][0-9A-Fa-f]+);)/g;\n\n/** `text` with every `&` that starts a character reference written `&amp;`, which reads back as `&`. */\nexport function escapeCharacterReferences(text: string): string {\n return text.replace(CHARACTER_REFERENCE_AMPERSAND, \"&amp;\");\n}\n\n/**\n * The draft's text serializer with every underscore escaped. `esc()` leaves an\n * underscore between word characters bare, so `obj.__init__` was written\n * `obj.\\__init_\\_` and read back as `obj._` + italic `init` + `_` (markdown-it\n * opens emphasis on the inner pair). Every underscore in a text node is typed\n * text (emphasis is a mark, written with `*`), so escaping all of them keeps\n * the round trip exact. Code is written raw and never reaches `esc()`. A typed\n * character reference keeps its `&` too (`&amp;lt;`), so `&lt;` reads back as\n * typed instead of as `<`; tiptap-markdown turns `<` and `>` into `&lt;` and\n * `&gt;` only after that.\n *\n * The text of an autolink (`<https://…>`, a link whose text is its URL) is\n * written raw. Markdown reads no escapes there, so `getMarkdown()`'s own\n * escaping (tiptap-markdown escapes it like any text) read a URL with `~`, `*`\n * or `[` back as another address, and an escaped underscore would too.\n */\nfunction writeTextForDraft(draftText: MarkdownNodeSerializer): MarkdownNodeSerializer {\n return (state, node, parent, index) => {\n if (state.inAutolink) {\n state.text(node.text ?? \"\", false);\n return;\n }\n const typed: string = node.text ?? \"\";\n const referencesKept: string = escapeCharacterReferences(typed);\n const textNode: ProseMirrorNode =\n referencesKept === typed ? node : node.type.schema.text(referencesKept, node.marks);\n const escapeText = state.esc;\n state.esc = (text, startOfLine) =>\n escapeBareUnderscores(escapeText.call(state, text, startOfLine));\n try {\n draftText(state, textNode, parent, index);\n } finally {\n state.esc = escapeText;\n }\n };\n}\n\nfunction draftTextSerializer(serializer: TiptapMarkdownSerializer): TiptapMarkdownSerializer {\n const nodes = serializer.nodes;\n const draftText = nodes.text;\n if (!draftText) return serializer;\n return Object.create(serializer, {\n nodes: { value: { ...nodes, text: writeTextForDraft(draftText) } },\n });\n}\n\n/**\n * What a line's first space or tab is written as in the draft. Agent-runtime's\n * `isComposerMarkdownOfText` and agora's `is_composer_markdown_of_text` decode\n * the same two references.\n */\nconst LINE_START_REFERENCES = { \" \": \"&#32;\", \"\\t\": \"&#9;\" } as const;\n\ntype LineStartWhitespace = keyof typeof LINE_START_REFERENCES;\n\n/** The characters standing in for a line's first space and tab while one draft is written. */\ntype LineStartStandIns = Readonly<Record<LineStartWhitespace, string>>;\n\n/**\n * Characters that can stand in for a line's first space or tab while the draft\n * is written: each is whitespace to the serializer (`\\s`), which moves it out\n * of bold and italic like a space, as the sent text does, and none is a space\n * or tab itself. A draft uses two its document does not already hold.\n */\nconst STAND_IN_CANDIDATES: readonly string[] = [\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n \" \",\n];\n\n/** Two stand-ins `doc` holds nowhere (text or attributes); `null` in the unlikely case it holds them all. */\nfunction standInsFor(doc: ProseMirrorNode): LineStartStandIns | null {\n const held: string = JSON.stringify(doc.toJSON());\n const [space, tab] = STAND_IN_CANDIDATES.filter((candidate) => !held.includes(candidate));\n return space !== undefined && tab !== undefined ? { \" \": space, \"\\t\": tab } : null;\n}\n\nconst isLineStartWhitespace = (character: string): character is LineStartWhitespace =>\n character === \" \" || character === \"\\t\";\n\n/**\n * `textblock` with the first space or tab of each of its lines replaced by its\n * stand-in, and how many it replaced. A line is the textblock's start or what\n * follows a line break; its whitespace is in the text there (not in code,\n * which Markdown keeps as written). A block of nothing but whitespace is left\n * as it is: Markdown reads it as a blank line, as before, and a composer\n * holding only spaces stays empty to every `trim()`.\n */\nfunction withLineStandIns({\n textblock,\n standIns,\n}: {\n textblock: ProseMirrorNode;\n standIns: LineStartStandIns;\n}): {\n node: ProseMirrorNode;\n replaced: number;\n} {\n const { schema } = textblock.type;\n const lineBreak = schema.linebreakReplacement;\n const isBlank = (child: ProseMirrorNode): boolean =>\n child.isText ? !/\\S/.test(child.text ?? \"\") : child.type === lineBreak;\n let blank = true;\n textblock.forEach((child) => {\n blank &&= isBlank(child);\n });\n if (blank) return { node: textblock, replaced: 0 };\n\n const children: ProseMirrorNode[] = [];\n let replaced = 0;\n let atLineStart = true;\n textblock.forEach((child) => {\n const lineStart: boolean = atLineStart;\n atLineStart = child.type === lineBreak;\n const text: string = child.isText ? (child.text ?? \"\") : \"\";\n const first: string = text.charAt(0);\n if (\n lineStart &&\n isLineStartWhitespace(first) &&\n !child.marks.some((mark) => mark.type.spec.code)\n ) {\n replaced += 1;\n children.push(schema.text(standIns[first] + text.slice(1), child.marks));\n } else {\n children.push(child);\n }\n });\n return replaced > 0\n ? { node: textblock.copy(Fragment.from(children)), replaced }\n : { node: textblock, replaced: 0 };\n}\n\n/**\n * `doc` with the first space or tab of every line in its text replaced by its\n * stand-in, and how many it replaced (see {@link serializeComposerDraft}).\n */\nfunction withLeadingWhitespaceStandIns({\n doc,\n standIns,\n}: {\n doc: ProseMirrorNode;\n standIns: LineStartStandIns;\n}): {\n doc: ProseMirrorNode;\n replaced: number;\n} {\n let replaced = 0;\n const map = (node: ProseMirrorNode): ProseMirrorNode => {\n if (node.isTextblock) {\n if (node.type.spec.code) return node;\n const lines = withLineStandIns({ textblock: node, standIns });\n replaced += lines.replaced;\n return lines.node;\n }\n if (node.isLeaf) return node;\n const children: ProseMirrorNode[] = [];\n let changed = false;\n node.forEach((child) => {\n const mapped = map(child);\n changed ||= mapped !== child;\n children.push(mapped);\n });\n return changed ? node.copy(Fragment.from(children)) : node;\n };\n const mapped = map(doc);\n return { doc: mapped, replaced };\n}\n\n/**\n * The composer's draft: Markdown that reads back into the same document, as\n * the Olympus chat composer writes it\n * (`olympus/src/components/textbox/composer-message-markdown.ts`).\n * `getMarkdown()`, except that every underscore in plain text is escaped, a\n * typed character reference keeps its `&`, and an autolink's URL is written\n * raw (see {@link writeTextForDraft}), and the first space or tab of a line is\n * written as a character reference. The composer mirrors its draft into the\n * composer runtime, remembers a send's draft and attaches it to the message\n * (`metadata.composer_markdown`) in this form.\n *\n * Markdown drops the whitespace a line starts with (four spaces or a tab even\n * start a code block), so pasted code came back without its indentation. The\n * first space or tab of each line is written `&#32;` / `&#9;` instead, which\n * Markdown reads back as that character in the line's text; the rest of the\n * run is no longer at the line's start, and the composer's parser keeps it\n * ({@link ComposerDraftWhitespace}). The draft is written with a stand-in for\n * each, a character the document holds nowhere else ({@link standInsFor}),\n * that becomes the reference afterwards; should the serializer ever write a\n * different number of them, the draft is written without them.\n */\nexport function serializeComposerDraft(editor: Editor): string {\n const storage = getMarkdownStorage(editor);\n const serializer: unknown = storage.serializer;\n if (!isTiptapMarkdownSerializer(serializer)) return storage.getMarkdown();\n const draft = draftTextSerializer(serializer);\n const source: ProseMirrorNode = editor.state.doc;\n const standIns = standInsFor(source);\n if (standIns === null) return draft.serialize(source);\n const lines = withLeadingWhitespaceStandIns({ doc: source, standIns });\n if (lines.replaced === 0) return draft.serialize(source);\n const written: string = draft.serialize(lines.doc);\n const references = new Map<string, string>([\n [standIns[\" \"], LINE_START_REFERENCES[\" \"]],\n [standIns[\"\\t\"], LINE_START_REFERENCES[\"\\t\"]],\n ]);\n const characters: string[] = Array.from(written);\n const standInCount: number = characters.filter((character) => references.has(character)).length;\n if (standInCount !== lines.replaced) return draft.serialize(source);\n return characters.map((character) => references.get(character) ?? character).join(\"\");\n}\n\n/** The slice of a markdown-it token {@link keepDraftWhitespace} reads and rewrites. */\ninterface MarkdownItToken {\n type: string;\n info: string;\n markup: string;\n content: string;\n children: MarkdownItToken[] | null;\n}\n\ntype MarkdownItRenderRule = (tokens: MarkdownItToken[], index: number, ...rest: unknown[]) => string;\n\n/** The slice of markdown-it (the instance tiptap-markdown parses with) {@link keepDraftWhitespace} configures. */\ninterface MarkdownIt {\n core: {\n ruler: {\n before(\n beforeName: string,\n ruleName: string,\n rule: (state: { tokens: MarkdownItToken[] }) => void,\n ): void;\n };\n };\n renderer: { rules: Record<string, MarkdownItRenderRule | undefined> };\n}\n\nconst LINE_START_WHITESPACE_REFERENCES: ReadonlySet<string> = new Set(\n Object.values(LINE_START_REFERENCES),\n);\n\nconst KEPT_WHITESPACE_TOKEN = \"athena_kept_whitespace\";\n\n/** Whitespace ProseMirror's parser would collapse into one space: a run of two or more, or a tab. */\nconst COLLAPSIBLE_WHITESPACE = /[ \\t]{2,}|\\t/g;\n\n/**\n * `whitespace` in an element ProseMirror's parser keeps the whitespace of\n * (`white-space: pre-wrap` is what it reads as \"preserve\"). No node or mark\n * parses the tag, so its text joins the text around it.\n */\nconst keptWhitespace = (whitespace: string): string =>\n `<athena-whitespace style=\"white-space: pre-wrap\">${whitespace}</athena-whitespace>`;\n\nconst draftWhitespaceParsers = new WeakSet<MarkdownIt>();\n\n/**\n * Markdown read into the composer keeps the spaces and tabs in its text, as\n * the Olympus chat composer's parser does (`ComposerVerbatimTextPaste`).\n * markdown-it keeps a run of spaces inside a line, but ProseMirror's DOM parser\n * collapsed it to one space, and a tab to a space. The draft writes a line's\n * first space or tab as `&#32;` / `&#9;` ({@link serializeComposerDraft});\n * that reference and the whitespace after it, every other run and every tab\n * are rendered in an element that keeps them. Any other single space stays as\n * Markdown reads it, so a task list's space after its checkbox still goes.\n */\nfunction keepDraftWhitespace(markdownit: MarkdownIt): void {\n if (draftWhitespaceParsers.has(markdownit)) return;\n draftWhitespaceParsers.add(markdownit);\n // Before `text_join`, which folds references back into the text around them.\n markdownit.core.ruler.before(\"text_join\", \"athena_kept_whitespace\", (state) => {\n for (const block of state.tokens) {\n const inline: MarkdownItToken[] = block.children ?? [];\n inline.forEach((token, index) => {\n if (token.type !== \"text_special\" || token.info !== \"entity\") return;\n if (!LINE_START_WHITESPACE_REFERENCES.has(token.markup)) return;\n token.type = KEPT_WHITESPACE_TOKEN;\n const next: MarkdownItToken | undefined = inline[index + 1];\n if (next?.type !== \"text\") return;\n const run: string = /^[ \\t]*/.exec(next.content)?.[0] ?? \"\";\n token.content += run;\n next.content = next.content.slice(run.length);\n });\n }\n });\n const { rules } = markdownit.renderer;\n rules[KEPT_WHITESPACE_TOKEN] = (tokens, index) => keptWhitespace(tokens[index]?.content ?? \"\");\n for (const name of [\"text\", \"code_inline\"]) {\n const render: MarkdownItRenderRule | undefined = rules[name];\n if (!render) continue;\n rules[name] = (...args) => render(...args).replace(COLLAPSIBLE_WHITESPACE, keptWhitespace);\n }\n}\n\n/**\n * The composer's own Markdown reading: a draft restored into it (a returned\n * send, {@link draftForReturnedSend}) keeps its whitespace\n * ({@link keepDraftWhitespace}). The message bubbles read with the chat\n * schema alone.\n */\nexport const ComposerDraftWhitespace = Extension.create({\n name: \"athenaComposerDraftWhitespace\",\n addStorage() {\n return { markdown: { parse: { setup: keepDraftWhitespace } } };\n },\n});\n\n/** What one send captured: the text it delivers and the draft Markdown that text came from. */\nexport interface ComposerSend {\n /** Plain text exactly as typed, formatting as Markdown: what the model reads. */\n readonly text: string;\n /** The same document as a draft ({@link serializeComposerDraft}). */\n readonly draftMarkdown: string;\n}\n\n/**\n * The editor's draft as one send would deliver it, both forms trimmed (the\n * draft as agent-runtime's `trimComposerDraft` trims it, so the `&#32;` a\n * first line starts with goes with the space the text loses).\n */\nexport function captureComposerSend(editor: Editor): ComposerSend {\n return {\n text: serializeComposerMessage(editor).trim(),\n draftMarkdown: trimComposerDraft(serializeComposerDraft(editor)),\n };\n}\n\n/** How many sends {@link rememberComposerSend} keeps the draft of. */\nconst REMEMBERED_SENDS = 50;\n\n/**\n * How long a send's draft stays restorable. Statewire hands a refused send\n * back while it reconnects, soon after the send; past this window a matching\n * text is a host's own write (`useAppendToComposer`), parsed as Markdown.\n */\nexport const RETURNED_SEND_WINDOW_MS = 60_000;\n\ninterface RememberedSend {\n /** `null` once two different drafts sent the same text in the thread. */\n readonly draft: string | null;\n readonly sentAt: number;\n}\n\n/**\n * A sent text in a thread → the draft Markdown it was serialized from, newest\n * last. The draft is withheld once two different drafts sent the same text in\n * that thread within the window: literal `**strong**` and bold `strong` both\n * send `**strong**`, and the text alone cannot say which message is which.\n */\nconst sends = new Map<string, RememberedSend>();\n\nconst sendKey = ({ threadId, text }: { threadId: string; text: string }): string =>\n JSON.stringify([threadId, text]);\n\nconst isFresh = (send: RememberedSend, now: number): boolean =>\n now - send.sentAt <= RETURNED_SEND_WINDOW_MS;\n\n/**\n * Remember the draft behind a sent text, so a send that comes back to the\n * composer (statewire puts a send it refuses during a reconnect back into an\n * empty composer) is restored from the draft it was sent from rather than\n * parsed from its verbatim text, where Markdown would read a backslash before\n * punctuation, a tag-like `<x>` or `2*3*4` differently.\n */\nexport function rememberComposerSend({\n threadId,\n text,\n draftMarkdown,\n now = Date.now(),\n}: {\n threadId: string;\n text: string;\n draftMarkdown: string;\n /** Test seam: the time of the send. */\n now?: number;\n}): void {\n const key = sendKey({ threadId, text });\n const remembered = sends.get(key);\n sends.delete(key);\n const collides =\n remembered !== undefined && isFresh(remembered, now) && remembered.draft !== draftMarkdown;\n sends.set(key, { draft: collides ? null : draftMarkdown, sentAt: now });\n while (sends.size > REMEMBERED_SENDS) {\n const oldest = sends.keys().next();\n if (oldest.done) break;\n sends.delete(oldest.value);\n }\n}\n\n/**\n * The draft to load for a text that came back to an empty composer: the draft\n * this composer sent it from within {@link RETURNED_SEND_WINDOW_MS}, when that\n * is the only draft that sent this text in the thread; else `null`, and the\n * text is parsed as Markdown (a host's prefill, a send from before a reload).\n */\nexport function draftForReturnedSend({\n threadId,\n text,\n now = Date.now(),\n}: {\n threadId: string;\n text: string;\n /** Test seam: the time the text came back. */\n now?: number;\n}): string | null {\n const remembered = sends.get(sendKey({ threadId, text }));\n return remembered !== undefined && isFresh(remembered, now) ? remembered.draft : null;\n}\n\n/** Test seam: forget every remembered send. */\nexport function resetRememberedComposerSends(): void {\n sends.clear();\n}\n\n/**\n * Get a send ready right before the composer runtime sends its `text`:\n * remember its draft, so a send statewire hands back is restored from it\n * ({@link rememberComposerSend}), and stage the draft as the message's composer\n * markdown (`metadata.composer_markdown`, only when it differs from the text),\n * which the runtime's `getMessageMetadata` (agent-runtime's\n * `withStagedComposerMarkdown`) puts on the submission that follows, as the\n * Olympus composer does.\n */\nexport function prepareComposerSend({\n threadId,\n text,\n draftMarkdown,\n}: {\n threadId: string;\n} & ComposerSend): void {\n rememberComposerSend({ threadId, text, draftMarkdown });\n stageComposerMarkdown({ threadId, text, markdown: draftMarkdown });\n}\n"],"names":["mapped"],"mappings":"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"}
@@ -11,14 +11,15 @@ const react$1 = require("@assistant-ui/react");
11
11
  const composerHandoff = require("../../composer/composer-handoff.cjs");
12
12
  const lucideReact = require("lucide-react");
13
13
  const chatTextSchema = require("../rich-text/chat-text-schema.cjs");
14
- const markdownStorage = require("../markdown-storage.cjs");
15
14
  const mentionSuggestions_extension = require("../mentions/suggestions/mention-suggestions.extension.cjs");
16
15
  const mentionSuggestionPopup = require("../mentions/suggestions/components/mention-suggestion-popup.cjs");
17
16
  const mentionSuggestionList = require("../mentions/suggestions/components/mention-suggestion-list.cjs");
18
17
  const useMentionSuggestions = require("../mentions/suggestions/data/use-mention-suggestions.cjs");
18
+ const state = require("@tiptap/pm/state");
19
+ const composerMessage = require("./composer-message.cjs");
19
20
  const pendingAttachmentUploads = require("./pending-attachment-uploads.cjs");
20
21
  const runInputRulesOnEnter = require("./run-input-rules-on-enter.cjs");
21
- const assetAttachment = require("../../packages/agent-runtime/src/asset-attachment.cjs");
22
+ const assetAttachment = require("../../agent-runtime/src/asset-attachment.cjs");
22
23
  const cnfast = require("cnfast");
23
24
  const SubmitKeybind = core.Extension.create({
24
25
  name: "submitKeybind",
@@ -76,7 +77,16 @@ const MENTION_STYLES = `
76
77
  }
77
78
  `;
78
79
  function serializeDraft(editor) {
79
- return markdownStorage.getMarkdownStorage(editor).getMarkdown();
80
+ return composerMessage.serializeComposerDraft(editor);
81
+ }
82
+ function appendPlainText(editor, text) {
83
+ const words = text.trim();
84
+ if (!words || editor.isDestroyed) return false;
85
+ const end = state.Selection.atEnd(editor.state.doc);
86
+ const before = end.$from.nodeBefore;
87
+ const needsSpace = before !== null && before.type.name !== "hardBreak" && !(before.isText && /\s$/.test(before.text ?? ""));
88
+ editor.chain().setTextSelection(end.from).insertContent({ type: "text", text: needsSpace ? ` ${words}` : words }).run();
89
+ return true;
80
90
  }
81
91
  const NO_WEBPAGES = [];
82
92
  function revokeImagePreview(src) {
@@ -158,6 +168,7 @@ const TiptapComposer = react.forwardRef(
158
168
  const handoff = composerHandoff.useComposerHandoffStore();
159
169
  const applyingRuntimeTextRef = react.useRef(false);
160
170
  const lastEmittedMarkdownRef = react.useRef(null);
171
+ const restoredSendRef = react.useRef(null);
161
172
  const listRef = react.useRef(null);
162
173
  const pendingUploadsRef = react.useRef(new pendingAttachmentUploads.PendingAttachmentUploads());
163
174
  const submitInFlightRef = react.useRef(false);
@@ -228,10 +239,10 @@ const TiptapComposer = react.forwardRef(
228
239
  await (waitForHostUploads == null ? void 0 : waitForHostUploads());
229
240
  const ed = editorRef.current;
230
241
  if (!ed) return;
231
- const text = serializeDraft(ed).trim();
242
+ const { text, draftMarkdown } = composerMessage.captureComposerSend(ed);
232
243
  if (interceptSubmit) {
233
244
  const hasAttachments = (((_a = aui.composer.getState().attachments) == null ? void 0 : _a.length) ?? 0) > 0;
234
- if (!hasAttachments && await interceptSubmit(text)) {
245
+ if (!hasAttachments && await interceptSubmit(text, draftMarkdown)) {
235
246
  ed.commands.clearContent(false);
236
247
  clearImagePreviews();
237
248
  onDraftStateChange == null ? void 0 : onDraftStateChange(false);
@@ -241,6 +252,7 @@ const TiptapComposer = react.forwardRef(
241
252
  }
242
253
  if (!text) return;
243
254
  if (!composerInput.canSend) return;
255
+ composerMessage.prepareComposerSend({ threadId, text, draftMarkdown });
244
256
  composerInput.setText(text);
245
257
  composerInput.send({ steer: false });
246
258
  ed.commands.clearContent(false);
@@ -257,6 +269,7 @@ const TiptapComposer = react.forwardRef(
257
269
  interceptSubmit,
258
270
  onDraftStateChange,
259
271
  onSubmitted,
272
+ threadId,
260
273
  waitForHostUploads
261
274
  ]);
262
275
  const handleSubmitRef = react.useRef(handleSubmit);
@@ -362,11 +375,14 @@ const TiptapComposer = react.forwardRef(
362
375
  },
363
376
  [addDroppedImages]
364
377
  );
378
+ const placeholderRef = react.useRef(placeholder);
379
+ placeholderRef.current = placeholder;
365
380
  const editor = react$2.useEditor({
366
381
  editable: !disabled,
367
382
  extensions: [
368
383
  ...chatTextSchema.createChatTextExtensions(),
369
- Placeholder.configure({ placeholder }),
384
+ composerMessage.ComposerDraftWhitespace,
385
+ Placeholder.configure({ placeholder: () => placeholderRef.current }),
370
386
  mentionSuggestions_extension.MentionSuggestionsExtension.configure({
371
387
  store,
372
388
  callbacks: callbacksRef.current
@@ -409,20 +425,29 @@ const TiptapComposer = react.forwardRef(
409
425
  react.useEffect(() => {
410
426
  editor == null ? void 0 : editor.setEditable(!disabled);
411
427
  }, [disabled, editor]);
428
+ react.useEffect(() => {
429
+ if (!editor || editor.isDestroyed) return;
430
+ editor.view.dispatch(editor.state.tr.setMeta("addToHistory", false));
431
+ }, [editor, placeholder]);
412
432
  react.useEffect(() => {
413
433
  if (!editor) return;
414
434
  const value = composerInput.value;
415
435
  if (value === lastEmittedMarkdownRef.current) return;
436
+ if (value === restoredSendRef.current) return;
437
+ restoredSendRef.current = null;
416
438
  const currentMarkdown = serializeDraft(editor);
417
439
  lastEmittedMarkdownRef.current = currentMarkdown;
418
- if (value === currentMarkdown) return;
440
+ const returnedDraft = editor.isEmpty ? composerMessage.draftForReturnedSend({ threadId, text: value }) : null;
441
+ const restored = returnedDraft ?? value;
442
+ if (restored === currentMarkdown) return;
419
443
  let cancelled = false;
420
444
  queueMicrotask(() => {
421
445
  if (cancelled || editor.isDestroyed) return;
422
446
  applyingRuntimeTextRef.current = true;
423
447
  try {
424
- editor.commands.setContent(value, { emitUpdate: false });
448
+ editor.commands.setContent(restored, { emitUpdate: false });
425
449
  lastEmittedMarkdownRef.current = serializeDraft(editor);
450
+ if (returnedDraft !== null) restoredSendRef.current = value;
426
451
  } finally {
427
452
  applyingRuntimeTextRef.current = false;
428
453
  }
@@ -435,12 +460,16 @@ const TiptapComposer = react.forwardRef(
435
460
  return () => {
436
461
  cancelled = true;
437
462
  };
438
- }, [composerInput.value, editor, handoff, onDraftStateChange]);
463
+ }, [composerInput.value, editor, handoff, onDraftStateChange, threadId]);
439
464
  react.useEffect(() => {
440
465
  if (!editor || !handoff) return;
441
466
  handoff.focusEnd = () => {
442
467
  if (!editor.isDestroyed) editor.commands.focus("end");
443
468
  };
469
+ if (handoff.focusOnMount) {
470
+ handoff.focusOnMount = false;
471
+ handoff.focusEnd();
472
+ }
444
473
  return () => {
445
474
  handoff.focusEnd = null;
446
475
  };
@@ -523,15 +552,32 @@ const TiptapComposer = react.forwardRef(
523
552
  const needsSpace = before.length > 0 && !/[\s([{"']/.test(before);
524
553
  currentEditor.chain().focus().insertContent({ type: "text", text: needsSpace ? " @" : "@" }).run();
525
554
  }, [disabled]);
555
+ const appendText = react.useCallback((text) => {
556
+ const currentEditor = editorRef.current;
557
+ if (currentEditor) appendPlainText(currentEditor, text);
558
+ }, []);
559
+ const captureSend = react.useCallback(() => {
560
+ const currentEditor = editorRef.current;
561
+ return currentEditor && !currentEditor.isDestroyed ? composerMessage.captureComposerSend(currentEditor) : null;
562
+ }, []);
526
563
  react.useImperativeHandle(
527
564
  outerRef,
528
565
  () => ({
529
566
  submit: handleSubmit,
530
567
  addAttachment,
531
568
  insertAssetMention,
532
- openMentionMenu
569
+ openMentionMenu,
570
+ appendText,
571
+ captureSend
533
572
  }),
534
- [addAttachment, handleSubmit, insertAssetMention, openMentionMenu]
573
+ [
574
+ addAttachment,
575
+ appendText,
576
+ captureSend,
577
+ handleSubmit,
578
+ insertAssetMention,
579
+ openMentionMenu
580
+ ]
535
581
  );
536
582
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
537
583
  /* @__PURE__ */ jsxRuntime.jsx("style", { children: MENTION_STYLES }),