@athenaintel/react 0.57.2 → 0.60.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 (852) hide show
  1. package/README.md +795 -12
  2. package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
  3. package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
  4. package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
  5. package/dist/agent-runtime/src/addressed-agents.js +16 -0
  6. package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-label.cjs +4 -3
  8. package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
  9. package/dist/agent-runtime/src/answer-label.d.ts +13 -6
  10. package/dist/agent-runtime/src/answer-label.js +4 -3
  11. package/dist/agent-runtime/src/answer-label.js.map +1 -1
  12. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
  13. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
  14. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
  15. package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
  16. package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
  18. package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
  19. package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
  21. package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
  23. package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
  24. package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
  26. package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
  28. package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
  29. package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
  31. package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
  32. package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
  33. package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
  34. package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
  35. package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
  36. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
  37. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
  38. package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
  39. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
  40. package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
  41. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  42. package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
  43. package/dist/agent-runtime/src/chat-outbox.js +492 -547
  44. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  45. package/dist/agent-runtime/src/composer-markdown.cjs +0 -16
  46. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  48. package/dist/agent-runtime/src/composer-markdown.js +1 -17
  49. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  53. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  54. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  55. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  56. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  57. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  58. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  59. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  60. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  61. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  62. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  63. package/dist/agent-runtime/src/errors.cjs +1 -0
  64. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  65. package/dist/agent-runtime/src/errors.js +1 -0
  66. package/dist/agent-runtime/src/errors.js.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  68. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  69. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  70. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  71. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  72. package/dist/agent-runtime/src/index.d.ts +14 -8
  73. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  74. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  75. package/dist/agent-runtime/src/lane-follow.js +289 -0
  76. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  78. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  79. package/dist/agent-runtime/src/lane-images.js +387 -0
  80. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  81. package/dist/agent-runtime/src/message-window.js +1 -1
  82. package/dist/agent-runtime/src/messages.cjs +19 -1
  83. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  84. package/dist/agent-runtime/src/messages.d.ts +8 -0
  85. package/dist/agent-runtime/src/messages.js +21 -3
  86. package/dist/agent-runtime/src/messages.js.map +1 -1
  87. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  88. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  89. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  90. package/dist/agent-runtime/src/named-agents.js +301 -0
  91. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  92. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  93. package/dist/agent-runtime/src/offline-status.d.ts +93 -2
  94. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  95. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  97. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  98. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  99. package/dist/agent-runtime/src/queue.cjs +2 -2
  100. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  101. package/dist/agent-runtime/src/queue.d.ts +20 -25
  102. package/dist/agent-runtime/src/queue.js +2 -2
  103. package/dist/agent-runtime/src/queue.js.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  107. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  108. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  109. package/dist/agent-runtime/src/run-send.cjs +54 -0
  110. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  111. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  112. package/dist/agent-runtime/src/run-send.js +54 -0
  113. package/dist/agent-runtime/src/run-send.js.map +1 -0
  114. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  116. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  117. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  118. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  119. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  120. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  121. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  122. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  123. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  125. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  126. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  127. package/dist/agent-runtime/src/send-recovery.js +90 -118
  128. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  129. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  130. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  133. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  134. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  135. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  136. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  137. package/dist/agent-runtime/src/statewire-state.js +4 -0
  138. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  140. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  141. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  142. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  143. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  145. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  146. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  147. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  148. package/dist/agent-runtime/src/subagents.cjs +22 -29
  149. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  150. package/dist/agent-runtime/src/subagents.js +23 -30
  151. package/dist/agent-runtime/src/subagents.js.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  153. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  154. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  155. package/dist/agent-runtime/src/thread-extras.js +27 -19
  156. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  157. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  158. package/dist/agent-runtime/src/tool-metadata.cjs +19 -0
  159. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  160. package/dist/agent-runtime/src/tool-metadata.js +19 -0
  161. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  163. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  164. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  165. package/dist/agent-runtime/src/tool-names.js +21 -0
  166. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  170. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  171. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  173. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  174. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  175. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  176. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  177. package/dist/agent-runtime/src/types.d.ts +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  179. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  180. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  181. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  182. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  186. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  187. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  191. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  192. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  194. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  196. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  197. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  200. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  201. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  202. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  203. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  204. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  205. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  206. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  207. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  208. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  209. package/dist/assets/asset-panel-store.cjs +13 -5
  210. package/dist/assets/asset-panel-store.cjs.map +1 -1
  211. package/dist/assets/asset-panel-store.d.ts +33 -2
  212. package/dist/assets/asset-panel-store.js +13 -5
  213. package/dist/assets/asset-panel-store.js.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  215. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  216. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  217. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  218. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  219. package/dist/auth/account-identity.cjs +13 -2
  220. package/dist/auth/account-identity.cjs.map +1 -1
  221. package/dist/auth/account-identity.d.ts +9 -0
  222. package/dist/auth/account-identity.js +13 -2
  223. package/dist/auth/account-identity.js.map +1 -1
  224. package/dist/auth/credential-source.cjs +20 -4
  225. package/dist/auth/credential-source.cjs.map +1 -1
  226. package/dist/auth/credential-source.d.ts +9 -0
  227. package/dist/auth/credential-source.js +20 -4
  228. package/dist/auth/credential-source.js.map +1 -1
  229. package/dist/catalog/chat-pickers.cjs +31 -0
  230. package/dist/catalog/chat-pickers.cjs.map +1 -1
  231. package/dist/catalog/chat-pickers.d.ts +17 -0
  232. package/dist/catalog/chat-pickers.js +33 -2
  233. package/dist/catalog/chat-pickers.js.map +1 -1
  234. package/dist/catalog/runtime-catalog.cjs +63 -3
  235. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  236. package/dist/catalog/runtime-catalog.d.ts +63 -3
  237. package/dist/catalog/runtime-catalog.js +64 -4
  238. package/dist/catalog/runtime-catalog.js.map +1 -1
  239. package/dist/chat/AthenaChat.cjs +301 -98
  240. package/dist/chat/AthenaChat.cjs.map +1 -1
  241. package/dist/chat/AthenaChat.d.ts +80 -4
  242. package/dist/chat/AthenaChat.js +302 -99
  243. package/dist/chat/AthenaChat.js.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  245. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  246. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  247. package/dist/chat/StatewireApprovalCard.js +37 -7
  248. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  250. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  251. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  252. package/dist/chat/StatewireQueuedMessages.js +18 -3
  253. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  254. package/dist/chat/chat-agent-mentions.cjs +70 -0
  255. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  256. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  257. package/dist/chat/chat-agent-mentions.js +70 -0
  258. package/dist/chat/chat-agent-mentions.js.map +1 -0
  259. package/dist/chat/composer-actions.cjs +12 -0
  260. package/dist/chat/composer-actions.cjs.map +1 -0
  261. package/dist/chat/composer-actions.d.ts +22 -0
  262. package/dist/chat/composer-actions.js +12 -0
  263. package/dist/chat/composer-actions.js.map +1 -0
  264. package/dist/chat/follow-up-suggestions.cjs +185 -0
  265. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  266. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  267. package/dist/chat/follow-up-suggestions.js +185 -0
  268. package/dist/chat/follow-up-suggestions.js.map +1 -0
  269. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  270. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  271. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  272. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  273. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  274. package/dist/chat/turn-changes.cjs +284 -0
  275. package/dist/chat/turn-changes.cjs.map +1 -0
  276. package/dist/chat/turn-changes.d.ts +130 -0
  277. package/dist/chat/turn-changes.js +284 -0
  278. package/dist/chat/turn-changes.js.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  282. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  283. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  285. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  286. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  287. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  288. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  290. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  291. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  292. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  293. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  297. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  298. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  302. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  303. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  307. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  308. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  310. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  311. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  312. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  313. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  317. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  318. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  338. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  339. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  343. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  344. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  348. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  349. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  351. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  352. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  353. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  354. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  356. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  357. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  358. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  359. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  363. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  364. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  366. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  367. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  368. package/dist/chat-ui/composer/slash-commands.js +74 -0
  369. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  370. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  371. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  372. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  373. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  374. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  375. package/dist/chat-ui/index.cjs +5 -0
  376. package/dist/chat-ui/index.cjs.map +1 -1
  377. package/dist/chat-ui/index.d.ts +4 -2
  378. package/dist/chat-ui/index.js +5 -0
  379. package/dist/chat-ui/index.js.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
  381. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  382. package/dist/chat-ui/mentions/mention-chip.js +11 -5
  383. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  386. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  387. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  391. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +20 -2
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
  395. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
  396. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  398. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  399. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  400. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +45 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +48 -0
  404. package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
  405. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  406. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
  407. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
  408. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
  409. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
  410. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
  411. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
  412. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
  414. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
  415. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
  417. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  419. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +274 -27
  420. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  421. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  422. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  423. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  424. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  425. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  426. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  427. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  428. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  429. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  430. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  431. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  432. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  433. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  434. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs +12 -0
  435. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
  436. package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
  437. package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
  438. package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
  439. package/dist/chat-ui/statewire.d.ts +1 -1
  440. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  441. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  442. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  443. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  444. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  445. package/dist/collab/client.cjs +41 -6
  446. package/dist/collab/client.cjs.map +1 -1
  447. package/dist/collab/client.d.ts +38 -7
  448. package/dist/collab/client.js +41 -6
  449. package/dist/collab/client.js.map +1 -1
  450. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  451. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  452. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  453. package/dist/composer/ComposerAttachedReferences.js +119 -0
  454. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  455. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  456. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  457. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  458. package/dist/composer/ComposerNamedAgents.js +63 -0
  459. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  460. package/dist/composer/attached-references.cjs +159 -0
  461. package/dist/composer/attached-references.cjs.map +1 -0
  462. package/dist/composer/attached-references.d.ts +86 -0
  463. package/dist/composer/attached-references.js +159 -0
  464. package/dist/composer/attached-references.js.map +1 -0
  465. package/dist/composer/build-composed-message.cjs +14 -7
  466. package/dist/composer/build-composed-message.cjs.map +1 -1
  467. package/dist/composer/build-composed-message.d.ts +6 -1
  468. package/dist/composer/build-composed-message.js +14 -7
  469. package/dist/composer/build-composed-message.js.map +1 -1
  470. package/dist/composer/composer-handoff.cjs +6 -2
  471. package/dist/composer/composer-handoff.cjs.map +1 -1
  472. package/dist/composer/composer-handoff.d.ts +7 -1
  473. package/dist/composer/composer-handoff.js +6 -2
  474. package/dist/composer/composer-handoff.js.map +1 -1
  475. package/dist/composer/folder-upload.cjs +149 -0
  476. package/dist/composer/folder-upload.cjs.map +1 -0
  477. package/dist/composer/folder-upload.d.ts +79 -0
  478. package/dist/composer/folder-upload.js +149 -0
  479. package/dist/composer/folder-upload.js.map +1 -0
  480. package/dist/composer/index.d.ts +1 -1
  481. package/dist/composer/staged-message-metadata.cjs +12 -0
  482. package/dist/composer/staged-message-metadata.cjs.map +1 -0
  483. package/dist/composer/staged-message-metadata.d.ts +15 -0
  484. package/dist/composer/staged-message-metadata.js +12 -0
  485. package/dist/composer/staged-message-metadata.js.map +1 -0
  486. package/dist/composer/useAttachToChat.cjs +35 -0
  487. package/dist/composer/useAttachToChat.cjs.map +1 -0
  488. package/dist/composer/useAttachToChat.d.ts +54 -0
  489. package/dist/composer/useAttachToChat.js +35 -0
  490. package/dist/composer/useAttachToChat.js.map +1 -0
  491. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  492. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  493. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  494. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  495. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  496. package/dist/composer/useFileUpload.cjs +95 -7
  497. package/dist/composer/useFileUpload.cjs.map +1 -1
  498. package/dist/composer/useFileUpload.d.ts +21 -2
  499. package/dist/composer/useFileUpload.js +95 -7
  500. package/dist/composer/useFileUpload.js.map +1 -1
  501. package/dist/data/athena-api-error.cjs +125 -0
  502. package/dist/data/athena-api-error.cjs.map +1 -0
  503. package/dist/data/athena-api-error.d.ts +96 -0
  504. package/dist/data/athena-api-error.js +125 -0
  505. package/dist/data/athena-api-error.js.map +1 -0
  506. package/dist/data/athena-data-client.cjs +106 -0
  507. package/dist/data/athena-data-client.cjs.map +1 -0
  508. package/dist/data/athena-data-client.d.ts +74 -0
  509. package/dist/data/athena-data-client.js +106 -0
  510. package/dist/data/athena-data-client.js.map +1 -0
  511. package/dist/data/athena-member.cjs +93 -0
  512. package/dist/data/athena-member.cjs.map +1 -0
  513. package/dist/data/athena-member.d.ts +125 -0
  514. package/dist/data/athena-member.js +93 -0
  515. package/dist/data/athena-member.js.map +1 -0
  516. package/dist/data/athena-request.cjs +460 -0
  517. package/dist/data/athena-request.cjs.map +1 -0
  518. package/dist/data/athena-request.d.ts +120 -0
  519. package/dist/data/athena-request.js +460 -0
  520. package/dist/data/athena-request.js.map +1 -0
  521. package/dist/data/use-athena-fetch.cjs +14 -0
  522. package/dist/data/use-athena-fetch.cjs.map +1 -0
  523. package/dist/data/use-athena-fetch.d.ts +19 -0
  524. package/dist/data/use-athena-fetch.js +14 -0
  525. package/dist/data/use-athena-fetch.js.map +1 -0
  526. package/dist/data/use-athena-graphql.cjs +66 -0
  527. package/dist/data/use-athena-graphql.cjs.map +1 -0
  528. package/dist/data/use-athena-graphql.d.ts +56 -0
  529. package/dist/data/use-athena-graphql.js +66 -0
  530. package/dist/data/use-athena-graphql.js.map +1 -0
  531. package/dist/data/use-athena-rest.cjs +33 -0
  532. package/dist/data/use-athena-rest.cjs.map +1 -0
  533. package/dist/data/use-athena-rest.d.ts +21 -0
  534. package/dist/data/use-athena-rest.js +33 -0
  535. package/dist/data/use-athena-rest.js.map +1 -0
  536. package/dist/data/use-semantic-query.cjs +44 -0
  537. package/dist/data/use-semantic-query.cjs.map +1 -0
  538. package/dist/data/use-semantic-query.d.ts +92 -0
  539. package/dist/data/use-semantic-query.js +44 -0
  540. package/dist/data/use-semantic-query.js.map +1 -0
  541. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  542. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  543. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  544. package/dist/diagnostics/errors.cjs +7 -0
  545. package/dist/diagnostics/errors.cjs.map +1 -1
  546. package/dist/diagnostics/errors.d.ts +7 -0
  547. package/dist/diagnostics/errors.js +7 -0
  548. package/dist/diagnostics/errors.js.map +1 -1
  549. package/dist/index.cjs +155 -11
  550. package/dist/index.cjs.map +1 -1
  551. package/dist/index.d.ts +72 -13
  552. package/dist/index.js +148 -4
  553. package/dist/index.js.map +1 -1
  554. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  555. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  556. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  557. package/dist/keryx-http/src/initial-sync.js +64 -16
  558. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  559. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  560. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  561. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  562. package/dist/keryx-http/src/own-awareness.js +20 -0
  563. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  564. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  565. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  566. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  567. package/dist/keryx-http/src/update-attributions.js +26 -1
  568. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  569. package/dist/offline/chat-outbox.cjs +262 -26
  570. package/dist/offline/chat-outbox.cjs.map +1 -1
  571. package/dist/offline/chat-outbox.d.ts +90 -12
  572. package/dist/offline/chat-outbox.js +263 -27
  573. package/dist/offline/chat-outbox.js.map +1 -1
  574. package/dist/provider/AthenaProvider.cjs +60 -22
  575. package/dist/provider/AthenaProvider.cjs.map +1 -1
  576. package/dist/provider/AthenaProvider.d.ts +24 -8
  577. package/dist/provider/AthenaProvider.js +61 -23
  578. package/dist/provider/AthenaProvider.js.map +1 -1
  579. package/dist/react/package.json.cjs +1 -1
  580. package/dist/react/package.json.js +1 -1
  581. package/dist/references/src/anchors/parse.cjs +11 -1
  582. package/dist/references/src/anchors/parse.cjs.map +1 -1
  583. package/dist/references/src/anchors/parse.js +11 -1
  584. package/dist/references/src/anchors/parse.js.map +1 -1
  585. package/dist/references/src/anchors/schemas.d.ts +1 -0
  586. package/dist/references/src/anchors/serialize.cjs +1 -0
  587. package/dist/references/src/anchors/serialize.cjs.map +1 -1
  588. package/dist/references/src/anchors/serialize.js +1 -0
  589. package/dist/references/src/anchors/serialize.js.map +1 -1
  590. package/dist/references/src/anchors/types.cjs +5 -0
  591. package/dist/references/src/anchors/types.cjs.map +1 -1
  592. package/dist/references/src/anchors/types.d.ts +9 -0
  593. package/dist/references/src/anchors/types.js +5 -0
  594. package/dist/references/src/anchors/types.js.map +1 -1
  595. package/dist/references/src/attachable.cjs +149 -0
  596. package/dist/references/src/attachable.cjs.map +1 -0
  597. package/dist/references/src/attachable.d.ts +87 -0
  598. package/dist/references/src/attachable.js +149 -0
  599. package/dist/references/src/attachable.js.map +1 -0
  600. package/dist/references/src/schemas.d.ts +2 -0
  601. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  602. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  603. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  604. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  605. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  606. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  607. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  608. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  609. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  610. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  611. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  612. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  613. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  614. package/dist/runtime/statewire-plan-mode.js +71 -0
  615. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  616. package/dist/runtime/statewire-run-config.cjs +3 -1
  617. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  618. package/dist/runtime/statewire-run-config.d.ts +7 -0
  619. package/dist/runtime/statewire-run-config.js +3 -1
  620. package/dist/runtime/statewire-run-config.js.map +1 -1
  621. package/dist/runtime/statewire-session-key.cjs +11 -5
  622. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  623. package/dist/runtime/statewire-session-key.d.ts +22 -10
  624. package/dist/runtime/statewire-session-key.js +11 -5
  625. package/dist/runtime/statewire-session-key.js.map +1 -1
  626. package/dist/runtime/useAthenaStatewireRuntime.cjs +64 -9
  627. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  628. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  629. package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
  630. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  631. package/dist/search/useAthenaAssets.cjs +394 -0
  632. package/dist/search/useAthenaAssets.cjs.map +1 -0
  633. package/dist/search/useAthenaAssets.d.ts +186 -0
  634. package/dist/search/useAthenaAssets.js +394 -0
  635. package/dist/search/useAthenaAssets.js.map +1 -0
  636. package/dist/sheet-range/index.cjs +4 -0
  637. package/dist/sheet-range/index.cjs.map +1 -1
  638. package/dist/sheet-range/index.d.ts +4 -2
  639. package/dist/sheet-range/index.js +4 -0
  640. package/dist/sheet-range/index.js.map +1 -1
  641. package/dist/sheet-range/query-range.cjs +102 -0
  642. package/dist/sheet-range/query-range.cjs.map +1 -0
  643. package/dist/sheet-range/query-range.d.ts +46 -0
  644. package/dist/sheet-range/query-range.js +102 -0
  645. package/dist/sheet-range/query-range.js.map +1 -0
  646. package/dist/styles.css +1 -1
  647. package/dist/subagents/index.cjs +49 -0
  648. package/dist/subagents/index.cjs.map +1 -0
  649. package/dist/subagents/index.d.ts +16 -0
  650. package/dist/subagents/index.js +49 -0
  651. package/dist/subagents/index.js.map +1 -0
  652. package/dist/subagents/lane-follow.cjs +19 -0
  653. package/dist/subagents/lane-follow.cjs.map +1 -0
  654. package/dist/subagents/lane-follow.d.ts +9 -0
  655. package/dist/subagents/lane-follow.js +19 -0
  656. package/dist/subagents/lane-follow.js.map +1 -0
  657. package/dist/subagents/lane-model.cjs +178 -0
  658. package/dist/subagents/lane-model.cjs.map +1 -0
  659. package/dist/subagents/lane-model.d.ts +140 -0
  660. package/dist/subagents/lane-model.js +178 -0
  661. package/dist/subagents/lane-model.js.map +1 -0
  662. package/dist/subagents/lane-parts.cjs +517 -0
  663. package/dist/subagents/lane-parts.cjs.map +1 -0
  664. package/dist/subagents/lane-parts.d.ts +130 -0
  665. package/dist/subagents/lane-parts.js +517 -0
  666. package/dist/subagents/lane-parts.js.map +1 -0
  667. package/dist/subagents/subagent-lane-group.cjs +215 -0
  668. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  669. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  670. package/dist/subagents/subagent-lane-group.js +215 -0
  671. package/dist/subagents/subagent-lane-group.js.map +1 -0
  672. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  673. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  674. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  675. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  676. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  677. package/dist/subagents/task-subagent-group.cjs +115 -0
  678. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  679. package/dist/subagents/task-subagent-group.d.ts +36 -0
  680. package/dist/subagents/task-subagent-group.js +115 -0
  681. package/dist/subagents/task-subagent-group.js.map +1 -0
  682. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  683. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  684. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  685. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  686. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  687. package/dist/threads/Inbox.cjs +2 -2
  688. package/dist/threads/Inbox.cjs.map +1 -1
  689. package/dist/threads/SessionList.cjs +6 -6
  690. package/dist/threads/SessionList.cjs.map +1 -1
  691. package/dist/threads/SessionsPage.cjs +13 -7
  692. package/dist/threads/SessionsPage.cjs.map +1 -1
  693. package/dist/threads/SessionsPage.d.ts +10 -1
  694. package/dist/threads/SessionsPage.js +9 -3
  695. package/dist/threads/SessionsPage.js.map +1 -1
  696. package/dist/threads/session-list-model.cjs.map +1 -1
  697. package/dist/threads/session-list-model.d.ts +2 -1
  698. package/dist/threads/session-list-model.js.map +1 -1
  699. package/dist/threads/session-row-parts.cjs +3 -3
  700. package/dist/threads/session-row-parts.cjs.map +1 -1
  701. package/dist/threads/sessions-page-model.cjs +13 -5
  702. package/dist/threads/sessions-page-model.cjs.map +1 -1
  703. package/dist/threads/sessions-page-model.d.ts +7 -0
  704. package/dist/threads/sessions-page-model.js +11 -3
  705. package/dist/threads/sessions-page-model.js.map +1 -1
  706. package/dist/threads/sessions-page-storage.cjs +8 -8
  707. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  708. package/dist/threads/sessions-page-storage.d.ts +5 -1
  709. package/dist/threads/sessions-page-storage.js +8 -8
  710. package/dist/threads/sessions-page-storage.js.map +1 -1
  711. package/dist/threads/statewire-thread-list.cjs +14 -2
  712. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  713. package/dist/threads/statewire-thread-list.d.ts +11 -2
  714. package/dist/threads/statewire-thread-list.js +14 -2
  715. package/dist/threads/statewire-thread-list.js.map +1 -1
  716. package/dist/threads/use-athena-sessions.cjs +1 -0
  717. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  718. package/dist/threads/use-athena-sessions.d.ts +7 -0
  719. package/dist/threads/use-athena-sessions.js +1 -0
  720. package/dist/threads/use-athena-sessions.js.map +1 -1
  721. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  722. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  723. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  724. package/dist/threads/use-athena-thread-agent.js +31 -0
  725. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  726. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  727. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  728. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  729. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  730. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  731. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  732. package/dist/tools/agent-creations.cjs +97 -0
  733. package/dist/tools/agent-creations.cjs.map +1 -0
  734. package/dist/tools/agent-creations.d.ts +38 -0
  735. package/dist/tools/agent-creations.js +97 -0
  736. package/dist/tools/agent-creations.js.map +1 -0
  737. package/dist/tools/agent-highlights.cjs +100 -0
  738. package/dist/tools/agent-highlights.cjs.map +1 -0
  739. package/dist/tools/agent-highlights.d.ts +57 -0
  740. package/dist/tools/agent-highlights.js +100 -0
  741. package/dist/tools/agent-highlights.js.map +1 -0
  742. package/dist/tools/append-document-tool-ui.cjs +1 -0
  743. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  744. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  745. package/dist/tools/append-document-tool-ui.js +2 -1
  746. package/dist/tools/append-document-tool-ui.js.map +1 -1
  747. package/dist/tools/auto-open-tools.cjs +144 -71
  748. package/dist/tools/auto-open-tools.cjs.map +1 -1
  749. package/dist/tools/auto-open-tools.d.ts +131 -1
  750. package/dist/tools/auto-open-tools.js +145 -72
  751. package/dist/tools/auto-open-tools.js.map +1 -1
  752. package/dist/tools/browser-tool-uis.cjs +594 -0
  753. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  754. package/dist/tools/browser-tool-uis.d.ts +8 -0
  755. package/dist/tools/browser-tool-uis.js +594 -0
  756. package/dist/tools/browser-tool-uis.js.map +1 -0
  757. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  758. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  759. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  760. package/dist/tools/computer-asset-tool-uis.js +313 -0
  761. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  762. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  763. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  764. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  765. package/dist/tools/document-edit-tool-uis.js +218 -0
  766. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  767. package/dist/tools/drive-tool-uis.cjs +429 -0
  768. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  769. package/dist/tools/drive-tool-uis.d.ts +121 -0
  770. package/dist/tools/drive-tool-uis.js +429 -0
  771. package/dist/tools/drive-tool-uis.js.map +1 -0
  772. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  773. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  774. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  775. package/dist/tools/email-calendar-tool-uis.js +789 -0
  776. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  777. package/dist/tools/ontology-tool-uis.cjs +83 -0
  778. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  779. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  780. package/dist/tools/ontology-tool-uis.js +83 -0
  781. package/dist/tools/ontology-tool-uis.js.map +1 -0
  782. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  783. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  784. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  785. package/dist/tools/orchestration-tool-uis.js +586 -0
  786. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  787. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  788. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  789. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  790. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  791. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  792. package/dist/tools/project-tool-uis.cjs +213 -0
  793. package/dist/tools/project-tool-uis.cjs.map +1 -0
  794. package/dist/tools/project-tool-uis.d.ts +14 -0
  795. package/dist/tools/project-tool-uis.js +213 -0
  796. package/dist/tools/project-tool-uis.js.map +1 -0
  797. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  798. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  799. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  800. package/dist/tools/sandbox-tool-uis.js +491 -0
  801. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  802. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  803. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  804. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  805. package/dist/tools/sheet-query-tool-ui.js +138 -0
  806. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  807. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  808. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  809. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  810. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  811. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  812. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  813. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  814. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  815. package/dist/tools/subagent-task-tool-ui.js +28 -479
  816. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  817. package/dist/tools/tool-summary.cjs +36 -0
  818. package/dist/tools/tool-summary.cjs.map +1 -1
  819. package/dist/tools/tool-summary.js +36 -0
  820. package/dist/tools/tool-summary.js.map +1 -1
  821. package/dist/tools/tool-uis.cjs +181 -53
  822. package/dist/tools/tool-uis.cjs.map +1 -1
  823. package/dist/tools/tool-uis.d.ts +40 -0
  824. package/dist/tools/tool-uis.js +183 -55
  825. package/dist/tools/tool-uis.js.map +1 -1
  826. package/dist/typed-interrupts/index.cjs +15 -0
  827. package/dist/typed-interrupts/index.cjs.map +1 -0
  828. package/dist/typed-interrupts/index.d.ts +20 -0
  829. package/dist/typed-interrupts/index.js +15 -0
  830. package/dist/typed-interrupts/index.js.map +1 -0
  831. package/dist/version.cjs +4 -0
  832. package/dist/version.cjs.map +1 -1
  833. package/dist/version.d.ts +9 -0
  834. package/dist/version.js +4 -0
  835. package/dist/version.js.map +1 -1
  836. package/dist/workbench/live-desktop-api.cjs +2 -1
  837. package/dist/workbench/live-desktop-api.cjs.map +1 -1
  838. package/dist/workbench/live-desktop-api.js +2 -1
  839. package/dist/workbench/live-desktop-api.js.map +1 -1
  840. package/dist/workbench/session-workbench-panes.cjs +6 -6
  841. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  842. package/dist/workbench/session-workspace-api.cjs +7 -2
  843. package/dist/workbench/session-workspace-api.cjs.map +1 -1
  844. package/dist/workbench/session-workspace-api.d.ts +10 -0
  845. package/dist/workbench/session-workspace-api.js +7 -2
  846. package/dist/workbench/session-workspace-api.js.map +1 -1
  847. package/package.json +28 -6
  848. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  849. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  850. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  851. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  852. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
@@ -0,0 +1,306 @@
1
+ import { resource } from "@assistant-ui/tap";
2
+ import { sessionNamespace, readOutboxes, indexedDbBackend, subscribeOutboxes, IndexedDbSession } from "statewire/storage";
3
+ import { useMemo } from "react";
4
+ import { chatOutboxEntryOf, readChatOutboxLocalMeta } from "./chat-outbox-entry.js";
5
+ import { sha256Hex, openText, base64ToBytes, bytesToBase64, sealText } from "./sealed-idb.js";
6
+ import { DEEP_AGENT_STATEWIRE_PROTOCOL } from "./statewire-transport.js";
7
+ const CHAT_SESSION_DATABASE = "athena-chat-sessions";
8
+ const SEALED_SESSION_PREFIX = "athena-sealed:1:";
9
+ function createSealedSessionCodec(options) {
10
+ const aad = `athena-chat-session|1|${options.scope}`;
11
+ const { cipher } = options;
12
+ if (cipher) {
13
+ return {
14
+ async encode(plain) {
15
+ return SEALED_SESSION_PREFIX + await cipher.seal({ text: plain, aad, purpose: "write" });
16
+ },
17
+ async decode(stored) {
18
+ if (!stored.startsWith(SEALED_SESSION_PREFIX)) throw new Error("athena: chat session record is not sealed");
19
+ return cipher.open({ sealed: stored.slice(SEALED_SESSION_PREFIX.length), aad, purpose: "read" });
20
+ }
21
+ };
22
+ }
23
+ const { getKey } = options;
24
+ return {
25
+ async encode(plain) {
26
+ const key = await getKey("write");
27
+ if (!key) throw new Error("athena: no key to keep chat sessions on this device");
28
+ return SEALED_SESSION_PREFIX + bytesToBase64(await sealText({ key, text: plain, aad }));
29
+ },
30
+ async decode(stored) {
31
+ if (!stored.startsWith(SEALED_SESSION_PREFIX)) throw new Error("athena: chat session record is not sealed");
32
+ const key = await getKey("read");
33
+ if (!key) throw new Error("athena: no key to open chat sessions on this device");
34
+ return openText({ key, sealed: base64ToBytes(stored.slice(SEALED_SESSION_PREFIX.length)), aad });
35
+ }
36
+ };
37
+ }
38
+ async function chatSessionNamespace({
39
+ environment,
40
+ ownerId,
41
+ sha256 = sha256Hex
42
+ }) {
43
+ return `athena-chat:${(await sha256(`${environment}|${ownerId}`)).slice(0, 32)}:`;
44
+ }
45
+ function chatSessionKey({
46
+ namespace,
47
+ principal,
48
+ threadId
49
+ }) {
50
+ return sessionNamespace(namespace, principal) + threadId;
51
+ }
52
+ async function adoptUnscopedChatSessions({
53
+ backend,
54
+ namespace,
55
+ principal
56
+ }) {
57
+ var _a;
58
+ let moved = 0;
59
+ for (const key of await ((_a = backend.getAllKeys) == null ? void 0 : _a.call(backend)) ?? []) {
60
+ if (!key.startsWith(namespace)) continue;
61
+ const threadId = key.slice(namespace.length);
62
+ if (threadId === "" || threadId.includes(":")) continue;
63
+ const raw = await backend.getItem(key);
64
+ if (raw === null) continue;
65
+ const target = chatSessionKey({ namespace, principal, threadId });
66
+ if (await backend.getItem(target) !== null) continue;
67
+ await backend.setItem(target, raw);
68
+ await backend.removeItem(key);
69
+ moved += 1;
70
+ }
71
+ return moved;
72
+ }
73
+ const PAGE_MEMORY_FORMAT = 5;
74
+ const memoryRecords = /* @__PURE__ */ new Map();
75
+ const memoryListeners = /* @__PURE__ */ new Set();
76
+ function announceMemory(key) {
77
+ for (const listener of [...memoryListeners]) {
78
+ try {
79
+ listener(key);
80
+ } catch {
81
+ }
82
+ }
83
+ }
84
+ const memoryBackend = {
85
+ getItem: (key) => {
86
+ const record = memoryRecords.get(key);
87
+ return record === void 0 ? null : JSON.stringify({ statewireStorageVersion: PAGE_MEMORY_FORMAT, ...record });
88
+ },
89
+ setItem: () => {
90
+ throw new Error("athena: page-memory chat sessions are written by their sessions only");
91
+ },
92
+ removeItem: (key) => {
93
+ if (memoryRecords.delete(key)) announceMemory(key);
94
+ },
95
+ getAllKeys: () => [...memoryRecords.keys()],
96
+ subscribe: (listener) => {
97
+ memoryListeners.add(listener);
98
+ return () => {
99
+ memoryListeners.delete(listener);
100
+ };
101
+ }
102
+ };
103
+ function chatSessionMemoryBackend() {
104
+ return memoryBackend;
105
+ }
106
+ function chatSessionMemoryNamespace(scope) {
107
+ return `${scope}:`;
108
+ }
109
+ const PageMemorySession = resource(function usePageMemorySession({
110
+ key
111
+ }) {
112
+ return useMemo(
113
+ () => ({
114
+ durable: false,
115
+ load: () => memoryRecords.get(key) ?? null,
116
+ save: (record) => {
117
+ memoryRecords.set(key, record);
118
+ announceMemory(key);
119
+ }
120
+ }),
121
+ [key]
122
+ );
123
+ });
124
+ const CHAT_SESSION_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1e3;
125
+ const CHAT_SESSION_MAX_ENTRIES = 50;
126
+ function ChatSessionStorage(options) {
127
+ if (options.kind === "memory") {
128
+ return PageMemorySession({
129
+ key: chatSessionKey({
130
+ namespace: chatSessionMemoryNamespace(options.scope),
131
+ principal: options.principal,
132
+ threadId: options.threadId
133
+ })
134
+ });
135
+ }
136
+ return IndexedDbSession({
137
+ database: options.database ?? CHAT_SESSION_DATABASE,
138
+ namespace: options.namespace,
139
+ principal: options.principal,
140
+ key: options.threadId,
141
+ codec: options.codec,
142
+ protocol: DEEP_AGENT_STATEWIRE_PROTOCOL,
143
+ retention: options.retention ?? { maxAgeMs: CHAT_SESSION_MAX_AGE_MS, maxEntries: CHAT_SESSION_MAX_ENTRIES },
144
+ ...options.onError && { onError: options.onError },
145
+ ...options.onEvict && { onEvict: options.onEvict }
146
+ });
147
+ }
148
+ function chatSessionBackend(database = CHAT_SESSION_DATABASE) {
149
+ return indexedDbBackend(database);
150
+ }
151
+ function legacyEntry(message) {
152
+ return {
153
+ state: "held",
154
+ failed: message.failure !== void 0,
155
+ id: message.id,
156
+ threadId: message.threadId,
157
+ text: message.text,
158
+ queuedAt: message.queuedAt,
159
+ newChat: message.newChat,
160
+ durable: true,
161
+ ...message.composerMarkdown !== void 0 && { composerMarkdown: message.composerMarkdown },
162
+ ...message.composerHtml !== void 0 && { composerHtml: message.composerHtml },
163
+ ...message.metadata !== void 0 && { metadata: message.metadata },
164
+ ...message.files !== void 0 && { files: message.files },
165
+ ...message.attachments !== void 0 && { attachments: message.attachments }
166
+ };
167
+ }
168
+ async function listChatOutboxes({
169
+ backend,
170
+ namespace,
171
+ principal,
172
+ codec,
173
+ legacy
174
+ }) {
175
+ var _a;
176
+ const keys = await ((_a = backend.getAllKeys) == null ? void 0 : _a.call(backend)) ?? [];
177
+ const scope = sessionNamespace(namespace, principal);
178
+ const byThread = /* @__PURE__ */ new Map();
179
+ let unreadable = 0;
180
+ for (const key of keys) {
181
+ if (!key.startsWith(scope)) continue;
182
+ const threadId = key.slice(scope.length);
183
+ let outboxes;
184
+ try {
185
+ outboxes = await readOutboxes(
186
+ { ...backend, getAllKeys: () => [key] },
187
+ { namespace, principal, protocol: DEEP_AGENT_STATEWIRE_PROTOCOL, ...codec && { codec } }
188
+ );
189
+ } catch {
190
+ unreadable += 1;
191
+ continue;
192
+ }
193
+ for (const outbox of outboxes) {
194
+ const entries = outbox.entries.flatMap((entry) => {
195
+ const chat = chatOutboxEntryOf(entry, threadId);
196
+ if (!chat) return [];
197
+ const failed = readChatOutboxLocalMeta(entry.localMeta).error !== void 0;
198
+ return [{ ...chat, state: entry.state, failed }];
199
+ });
200
+ if (entries.length > 0) byThread.set(threadId, [...byThread.get(threadId) ?? [], ...entries]);
201
+ }
202
+ }
203
+ if (legacy) {
204
+ for (const message of await legacy.listAll().catch(() => [])) {
205
+ const list = byThread.get(message.threadId) ?? [];
206
+ if (list.some((entry) => entry.id === message.id)) continue;
207
+ byThread.set(message.threadId, [...list, legacyEntry(message)]);
208
+ }
209
+ }
210
+ const threads = [...byThread].map(([threadId, entries]) => ({ threadId, entries: [...entries].sort((a, b) => a.queuedAt - b.queuedAt) })).sort((a, b) => {
211
+ var _a2, _b;
212
+ return (((_a2 = a.entries[0]) == null ? void 0 : _a2.queuedAt) ?? 0) - (((_b = b.entries[0]) == null ? void 0 : _b.queuedAt) ?? 0);
213
+ });
214
+ return { threads, unreadable };
215
+ }
216
+ async function countChatOutboxMessages(source) {
217
+ const { legacy, ...rest } = source;
218
+ const listing = await listChatOutboxes(rest);
219
+ const legacyCount = legacy ? await legacy.count().catch(() => 0) : 0;
220
+ return listing.threads.reduce((sum, thread) => sum + thread.entries.length, 0) + listing.unreadable + legacyCount;
221
+ }
222
+ async function clearChatOutboxes({ backend, namespace, legacy }) {
223
+ var _a;
224
+ const keys = await ((_a = backend.getAllKeys) == null ? void 0 : _a.call(backend)) ?? [];
225
+ for (const key of keys) if (key.startsWith(namespace)) await backend.removeItem(key);
226
+ await (legacy == null ? void 0 : legacy.clear());
227
+ }
228
+ const EMPTY_LISTING = { threads: [], unreadable: 0 };
229
+ function createChatOutboxDirectory(source) {
230
+ const listeners = /* @__PURE__ */ new Set();
231
+ let snapshot = EMPTY_LISTING;
232
+ let stopRemote;
233
+ let reading = Promise.resolve();
234
+ const refresh = () => {
235
+ reading = reading.then(async () => {
236
+ var _a;
237
+ try {
238
+ snapshot = await listChatOutboxes(source);
239
+ } catch (error) {
240
+ (_a = source.onError) == null ? void 0 : _a.call(source, error);
241
+ return;
242
+ }
243
+ for (const listener of listeners) {
244
+ try {
245
+ listener();
246
+ } catch {
247
+ }
248
+ }
249
+ });
250
+ };
251
+ return {
252
+ getSnapshot: () => snapshot,
253
+ subscribe(listener) {
254
+ listeners.add(listener);
255
+ if (listeners.size === 1) {
256
+ const { codec } = source;
257
+ stopRemote = subscribeOutboxes(
258
+ source.backend,
259
+ {
260
+ namespace: source.namespace,
261
+ principal: source.principal,
262
+ protocol: DEEP_AGENT_STATEWIRE_PROTOCOL,
263
+ ...codec && {
264
+ codec: {
265
+ encode: (plain) => codec.encode(plain),
266
+ decode: (stored) => codec.decode(stored).catch(() => "null")
267
+ }
268
+ }
269
+ },
270
+ () => refresh(),
271
+ (error) => {
272
+ var _a;
273
+ return (_a = source.onError) == null ? void 0 : _a.call(source, error);
274
+ }
275
+ );
276
+ }
277
+ return () => {
278
+ listeners.delete(listener);
279
+ if (listeners.size === 0) {
280
+ stopRemote == null ? void 0 : stopRemote();
281
+ stopRemote = void 0;
282
+ }
283
+ };
284
+ },
285
+ refresh
286
+ };
287
+ }
288
+ export {
289
+ CHAT_SESSION_DATABASE,
290
+ CHAT_SESSION_MAX_AGE_MS,
291
+ CHAT_SESSION_MAX_ENTRIES,
292
+ ChatSessionStorage,
293
+ SEALED_SESSION_PREFIX,
294
+ adoptUnscopedChatSessions,
295
+ chatSessionBackend,
296
+ chatSessionKey,
297
+ chatSessionMemoryBackend,
298
+ chatSessionMemoryNamespace,
299
+ chatSessionNamespace,
300
+ clearChatOutboxes,
301
+ countChatOutboxMessages,
302
+ createChatOutboxDirectory,
303
+ createSealedSessionCodec,
304
+ listChatOutboxes
305
+ };
306
+ //# sourceMappingURL=chat-outbox-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-outbox-storage.js","sources":["../../../../agent-runtime/src/chat-outbox-storage.ts"],"sourcesContent":["import { type ResourceElement, resource } from \"@assistant-ui/tap\";\nimport type { StatewireClient } from \"statewire\";\nimport {\n IndexedDbSession,\n indexedDbBackend,\n type KeyValueSessionStorage,\n type ReadOutboxes,\n readOutboxes,\n sessionNamespace,\n subscribeOutboxes,\n} from \"statewire/storage\";\nimport { useMemo } from \"react\";\nimport { type ChatOutboxEntry, chatOutboxEntryOf, readChatOutboxLocalMeta } from \"./chat-outbox-entry\";\nimport type { LegacyChatOutboxMessage, LegacyChatOutboxReader } from \"./chat-outbox-legacy\";\nimport { base64ToBytes, bytesToBase64, openText, sealText, sha256Hex } from \"./sealed-idb\";\nimport { DEEP_AGENT_STATEWIRE_PROTOCOL } from \"./statewire-transport\";\n\n/**\n * Where a chat thread's statewire session lives on a surface that keeps messages typed while\n * Athena can't be reached (the chat outbox is the session's outbox, so its storage is the\n * session's):\n *\n * - **Sealed** ({@link ChatSessionStorage} `kind: \"sealed\"`): statewire's `IndexedDbSession`, one\n * record per thread under a per-person namespace, every record sealed with AES-GCM-256 under the\n * person's key ({@link createSealedSessionCodec}). Olympus and the desktop app.\n * - **Memory** (`kind: \"memory\"`): page memory, for a deployment that lets devices keep no copies:\n * what waits survives thread switches and remounts, not a reload, and its rows say so\n * (`durable: false`). {@link chatSessionMemoryBackend} lists those records too.\n *\n * Cross-thread lists (the tray's \"waiting elsewhere\", sign-out counts) read the same backend,\n * namespace and codec ({@link createChatOutboxDirectory}).\n */\n\n/** The IndexedDB database sealed chat sessions are kept in. */\nexport const CHAT_SESSION_DATABASE = \"athena-chat-sessions\";\n\n/** Prefix of a sealed record; anything else is refused rather than read as plaintext. */\nexport const SEALED_SESSION_PREFIX = \"athena-sealed:1:\";\n\n/** What a codec asks the key for: opening what is kept, or keeping something new. */\nexport type ChatSessionKeyPurpose = \"read\" | \"write\";\n\n/**\n * The person's AES-GCM key: `read` opens what is already kept (any key that exists), `write` keeps\n * something new (a key only while the deployment lets devices keep copies). `null`: none.\n */\nexport type ChatSessionKeyProvider = (purpose: ChatSessionKeyPurpose) => Promise<CryptoKey | null>;\n\n/**\n * Seals and opens record text without WebCrypto, for a runtime that has none (React Native's\n * Hermes): the host's own cipher (an XChaCha20-Poly1305 vault, say). `aad` must be bound as\n * additional data; `open` throws for the wrong key, the wrong `aad` or a damaged record.\n */\nexport interface SealedSessionCipher {\n seal(args: { text: string; aad: string; purpose: \"write\" }): Promise<string>;\n open(args: { sealed: string; aad: string; purpose: \"read\" }): Promise<string>;\n}\n\n/**\n * A `KeyValueSessionStorage` codec sealing each stored record (the `scope` bound as additional\n * data, so a record copied under another person's scope does not open): AES-GCM-256 with a fresh\n * IV through WebCrypto (`getKey`), or the host's {@link SealedSessionCipher} where WebCrypto is\n * missing (`cipher`). Encoding without a write key, or decoding a record that does not open,\n * throws: statewire then reports a storage error and leaves the stored record where it is. Create\n * one per person and keep it: the session resource is keyed by the codec's identity.\n */\nexport function createSealedSessionCodec(\n options:\n | { getKey: ChatSessionKeyProvider; scope: string; cipher?: never }\n | { cipher: SealedSessionCipher; scope: string; getKey?: never },\n): KeyValueSessionStorage.Codec {\n const aad = `athena-chat-session|1|${options.scope}`;\n const { cipher } = options;\n if (cipher) {\n return {\n async encode(plain) {\n return SEALED_SESSION_PREFIX + (await cipher.seal({ text: plain, aad, purpose: \"write\" }));\n },\n async decode(stored) {\n if (!stored.startsWith(SEALED_SESSION_PREFIX)) throw new Error(\"athena: chat session record is not sealed\");\n return cipher.open({ sealed: stored.slice(SEALED_SESSION_PREFIX.length), aad, purpose: \"read\" });\n },\n };\n }\n const { getKey } = options;\n return {\n async encode(plain) {\n const key = await getKey(\"write\");\n if (!key) throw new Error(\"athena: no key to keep chat sessions on this device\");\n return SEALED_SESSION_PREFIX + bytesToBase64(await sealText({ key, text: plain, aad }));\n },\n async decode(stored) {\n if (!stored.startsWith(SEALED_SESSION_PREFIX)) throw new Error(\"athena: chat session record is not sealed\");\n const key = await getKey(\"read\");\n if (!key) throw new Error(\"athena: no key to open chat sessions on this device\");\n return openText({ key, sealed: base64ToBytes(stored.slice(SEALED_SESSION_PREFIX.length)), aad });\n },\n };\n}\n\n/**\n * The namespace a person's chat sessions are kept under: their scope hashed, so the database names\n * no one. `environment` keeps deployments that share an origin apart.\n */\nexport async function chatSessionNamespace({\n environment,\n ownerId,\n sha256 = sha256Hex,\n}: {\n environment: string;\n ownerId: string;\n /** Hex SHA-256 of a string; pass the host's own where WebCrypto is missing (React Native). */\n sha256?: (value: string) => Promise<string>;\n}): Promise<string> {\n return `athena-chat:${(await sha256(`${environment}|${ownerId}`)).slice(0, 32)}:`;\n}\n\n/**\n * The key a thread's chat session is stored under: `<namespace><principal>:<threadId>`, the layout\n * statewire 0.25 keeps session records in.\n */\nexport function chatSessionKey({\n namespace,\n principal,\n threadId,\n}: {\n namespace: string;\n principal: string;\n threadId: string;\n}): string {\n return sessionNamespace(namespace, principal) + threadId;\n}\n\n/**\n * Moves the sealed chat sessions statewire 0.24 kept under `namespace + threadId` to\n * `principal`'s scoped keys ({@link chatSessionKey}). `namespace` is one person's\n * ({@link chatSessionNamespace} hashes their scope), so its unscoped records are theirs: call it\n * with the signed-in person's own namespace and principal only. Records move as stored (sealed;\n * the codec binds the person's scope, not the key). A key with a `:` after the namespace is a\n * scoped one (an encoded principal has none) and is never touched. An unscoped record whose\n * scoped key already holds one is left where it is (a 0.24 tab still open can write there), never\n * written over the newer record; a sign-out the person chose clears it with the rest of the\n * namespace. Returns how many records moved.\n */\nexport async function adoptUnscopedChatSessions({\n backend,\n namespace,\n principal,\n}: {\n backend: KeyValueSessionStorage.Backend;\n namespace: string;\n principal: string;\n}): Promise<number> {\n let moved = 0;\n for (const key of (await backend.getAllKeys?.()) ?? []) {\n if (!key.startsWith(namespace)) continue;\n const threadId = key.slice(namespace.length);\n if (threadId === \"\" || threadId.includes(\":\")) continue;\n const raw = await backend.getItem(key);\n if (raw === null) continue;\n const target = chatSessionKey({ namespace, principal, threadId });\n if ((await backend.getItem(target)) !== null) continue;\n await backend.setItem(target, raw);\n await backend.removeItem(key);\n moved += 1;\n }\n return moved;\n}\n\nexport type ChatSessionStorageOptions =\n | {\n kind: \"sealed\";\n threadId: string;\n /** {@link chatSessionNamespace}; one per person. */\n namespace: string;\n /** The signed-in account (`sessionPrincipal(userId)`): records live under its scoped keys. */\n principal: string;\n /** {@link createSealedSessionCodec}; one per person, kept for the life of the sign-in. */\n codec: KeyValueSessionStorage.Codec;\n database?: string;\n retention?: KeyValueSessionStorage.Options[\"retention\"];\n onError?: (error: unknown) => void;\n onEvict?: (event: KeyValueSessionStorage.EvictEvent) => void;\n }\n | {\n kind: \"memory\";\n threadId: string;\n /**\n * Names the person: another person's thread never shares a record. The records list under\n * {@link chatSessionMemoryNamespace} of it.\n */\n scope: string;\n /** The signed-in account (`sessionPrincipal(userId)`), as for sealed sessions. */\n principal: string;\n };\n\n/** The stored format page-memory records list in: statewire's session record, untagged. */\nconst PAGE_MEMORY_FORMAT = 5;\n\n// process-local by design: page memory is the store (\"memory\" sessions survive remounts, not reloads).\nconst memoryRecords = new Map<string, StatewireClient.SessionRecord>();\nconst memoryListeners = new Set<(key: string) => void>();\n\nfunction announceMemory(key: string): void {\n for (const listener of [...memoryListeners]) {\n try {\n listener(key);\n } catch {\n // A listener's fault never reaches the session.\n }\n }\n}\n\n/**\n * The page-memory records of `kind: \"memory\"` sessions as a key-value backend, so the cross-thread\n * listing reads them as it reads sealed ones (stored format, no codec). Only `removeItem` writes.\n */\nconst memoryBackend: KeyValueSessionStorage.Backend = {\n getItem: (key) => {\n const record = memoryRecords.get(key);\n // Format 5: the record without a principal tag, which the scoped key already names.\n return record === undefined ? null : JSON.stringify({ statewireStorageVersion: PAGE_MEMORY_FORMAT, ...record });\n },\n setItem: () => {\n throw new Error(\"athena: page-memory chat sessions are written by their sessions only\");\n },\n removeItem: (key) => {\n if (memoryRecords.delete(key)) announceMemory(key);\n },\n getAllKeys: () => [...memoryRecords.keys()],\n subscribe: (listener) => {\n memoryListeners.add(listener);\n return () => {\n memoryListeners.delete(listener);\n };\n },\n};\n\n/** The backend that lists every `kind: \"memory\"` chat session of this page (read and remove only). */\nexport function chatSessionMemoryBackend(): KeyValueSessionStorage.Backend {\n return memoryBackend;\n}\n\n/** The namespace `scope`'s page-memory chat sessions list under ({@link chatSessionMemoryBackend}). */\nexport function chatSessionMemoryNamespace(scope: string): string {\n return `${scope}:`;\n}\n\nconst PageMemorySession = resource(function usePageMemorySession({\n key,\n}: {\n key: string;\n}): StatewireClient.SessionStorage {\n return useMemo(\n () => ({\n durable: false,\n load: () => memoryRecords.get(key) ?? null,\n save: (record) => {\n memoryRecords.set(key, record);\n announceMemory(key);\n },\n }),\n [key],\n );\n});\n\n/** Records no tab has mounted go after this long, sends and all (statewire 0.27.1 retention). */\nexport const CHAT_SESSION_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n/** Inactive records kept per person. */\nexport const CHAT_SESSION_MAX_ENTRIES = 50;\n\n/** The thread's session storage element (`storage.session`) for the surface's mode. */\nexport function ChatSessionStorage(\n options: ChatSessionStorageOptions,\n): ResourceElement<StatewireClient.SessionStorage> {\n if (options.kind === \"memory\") {\n return PageMemorySession({\n key: chatSessionKey({\n namespace: chatSessionMemoryNamespace(options.scope),\n principal: options.principal,\n threadId: options.threadId,\n }),\n });\n }\n return IndexedDbSession({\n database: options.database ?? CHAT_SESSION_DATABASE,\n namespace: options.namespace,\n principal: options.principal,\n key: options.threadId,\n codec: options.codec,\n protocol: DEEP_AGENT_STATEWIRE_PROTOCOL,\n retention: options.retention ?? { maxAgeMs: CHAT_SESSION_MAX_AGE_MS, maxEntries: CHAT_SESSION_MAX_ENTRIES },\n ...(options.onError && { onError: options.onError }),\n ...(options.onEvict && { onEvict: options.onEvict }),\n });\n}\n\n/** The key-value backend sealed chat sessions write through (`indexedDbBackend`). */\nexport function chatSessionBackend(database = CHAT_SESSION_DATABASE): KeyValueSessionStorage.Backend {\n return indexedDbBackend(database);\n}\n\n/** A waiting message as a listing reads it: the entry, and where it stands in its outbox. */\nexport interface ChatOutboxListedEntry extends ChatOutboxEntry {\n /** Held (waiting here), queued to go, or sent and not answered yet. Legacy records read as held. */\n state?: StatewireClient.OutboxEntry[\"state\"];\n /** It failed (a held entry carrying `localMeta.error`): Retry, Edit or Discard. */\n failed?: boolean;\n}\n\n/** One thread's waiting messages, as the device keeps them. */\nexport interface ChatOutboxDirectoryThread {\n threadId: string;\n /** Its messages still to be sent (held, queued or sending), in queue order. */\n entries: readonly ChatOutboxListedEntry[];\n}\n\nexport interface ChatOutboxListing {\n threads: readonly ChatOutboxDirectoryThread[];\n /** Records that would not open (another key, a damaged record): they may hold messages too. */\n unreadable: number;\n}\n\nexport interface ChatOutboxStorageSource {\n backend: KeyValueSessionStorage.Backend;\n namespace: string;\n /** Whose sessions: only records under its scoped keys ({@link chatSessionKey}) are listed. */\n principal: string;\n codec?: KeyValueSessionStorage.Codec;\n /** The previous store, read until each thread's records are migrated. */\n legacy?: LegacyChatOutboxReader;\n}\n\nfunction legacyEntry(message: LegacyChatOutboxMessage): ChatOutboxListedEntry {\n return {\n state: \"held\",\n failed: message.failure !== undefined,\n id: message.id,\n threadId: message.threadId,\n text: message.text,\n queuedAt: message.queuedAt,\n newChat: message.newChat,\n durable: true,\n ...(message.composerMarkdown !== undefined && { composerMarkdown: message.composerMarkdown }),\n ...(message.composerHtml !== undefined && { composerHtml: message.composerHtml }),\n ...(message.metadata !== undefined && { metadata: message.metadata }),\n ...(message.files !== undefined && { files: message.files }),\n ...(message.attachments !== undefined && { attachments: message.attachments }),\n };\n}\n\n/**\n * Every thread's waiting messages `principal` keeps under `namespace`, mounted or not\n * (`readOutboxes`, one record at a time so a record that does not open is counted, not fatal),\n * merged with the legacy store's records not migrated yet. Threads are ordered by their oldest\n * message.\n */\nexport async function listChatOutboxes({\n backend,\n namespace,\n principal,\n codec,\n legacy,\n}: ChatOutboxStorageSource): Promise<ChatOutboxListing> {\n const keys = (await backend.getAllKeys?.()) ?? [];\n const scope = sessionNamespace(namespace, principal);\n const byThread = new Map<string, ChatOutboxListedEntry[]>();\n let unreadable = 0;\n for (const key of keys) {\n if (!key.startsWith(scope)) continue;\n const threadId = key.slice(scope.length);\n let outboxes: readonly ReadOutboxes.Outbox[];\n try {\n outboxes = await readOutboxes(\n { ...backend, getAllKeys: () => [key] },\n { namespace, principal, protocol: DEEP_AGENT_STATEWIRE_PROTOCOL, ...(codec && { codec }) },\n );\n } catch {\n unreadable += 1;\n continue;\n }\n for (const outbox of outboxes) {\n const entries = outbox.entries.flatMap((entry) => {\n const chat = chatOutboxEntryOf(entry, threadId);\n if (!chat) return [];\n const failed = readChatOutboxLocalMeta(entry.localMeta).error !== undefined;\n return [{ ...chat, state: entry.state, failed }];\n });\n if (entries.length > 0) byThread.set(threadId, [...(byThread.get(threadId) ?? []), ...entries]);\n }\n }\n if (legacy) {\n for (const message of await legacy.listAll().catch(() => [])) {\n const list = byThread.get(message.threadId) ?? [];\n if (list.some((entry) => entry.id === message.id)) continue;\n byThread.set(message.threadId, [...list, legacyEntry(message)]);\n }\n }\n const threads = [...byThread]\n .map(([threadId, entries]) => ({ threadId, entries: [...entries].sort((a, b) => a.queuedAt - b.queuedAt) }))\n .sort((a, b) => (a.entries[0]?.queuedAt ?? 0) - (b.entries[0]?.queuedAt ?? 0));\n return { threads, unreadable };\n}\n\n/**\n * How many messages wait across every thread (a sign-out asks first while any do). Records that do\n * not open count as one each: they may hold someone's only copy. Legacy records count unopened.\n */\nexport async function countChatOutboxMessages(source: ChatOutboxStorageSource): Promise<number> {\n const { legacy, ...rest } = source;\n const listing = await listChatOutboxes(rest);\n const legacyCount = legacy ? await legacy.count().catch(() => 0) : 0;\n return listing.threads.reduce((sum, thread) => sum + thread.entries.length, 0) + listing.unreadable + legacyCount;\n}\n\n/**\n * Every chat session record under `namespace` (every principal's, and records 0.24 left unscoped),\n * and the legacy store's records, gone (a sign-out the person chose).\n */\nexport async function clearChatOutboxes({ backend, namespace, legacy }: ChatOutboxStorageSource): Promise<void> {\n const keys = (await backend.getAllKeys?.()) ?? [];\n for (const key of keys) if (key.startsWith(namespace)) await backend.removeItem(key);\n await legacy?.clear();\n}\n\n/** A live view of every thread's waiting messages, for the tray and the \"waiting to sync\" panels. */\nexport interface ChatOutboxDirectory {\n getSnapshot(): ChatOutboxListing;\n subscribe(listener: () => void): () => void;\n /** Read again now (after a migration, a sign-out). */\n refresh(): void;\n}\n\nconst EMPTY_LISTING: ChatOutboxListing = { threads: [], unreadable: 0 };\n\n/**\n * {@link listChatOutboxes}, re-read whenever a record under `namespace` is saved here or in another\n * tab (`backend.subscribe`), while anything listens. One per person.\n */\nexport function createChatOutboxDirectory(\n source: ChatOutboxStorageSource & { onError?: (error: unknown) => void },\n): ChatOutboxDirectory {\n const listeners = new Set<() => void>();\n let snapshot = EMPTY_LISTING;\n let stopRemote: (() => void) | undefined;\n let reading = Promise.resolve();\n const refresh = () => {\n reading = reading.then(async () => {\n try {\n snapshot = await listChatOutboxes(source);\n } catch (error) {\n source.onError?.(error);\n return;\n }\n for (const listener of listeners) {\n try {\n listener();\n } catch {\n // A listener's fault never reaches the directory.\n }\n }\n });\n };\n return {\n getSnapshot: () => snapshot,\n subscribe(listener) {\n listeners.add(listener);\n if (listeners.size === 1) {\n // subscribeOutboxes hears saves in this runtime and, through the backend, in others; its\n // own read only signals (a record that does not open reads as empty there).\n const { codec } = source;\n stopRemote = subscribeOutboxes(\n source.backend,\n {\n namespace: source.namespace,\n principal: source.principal,\n protocol: DEEP_AGENT_STATEWIRE_PROTOCOL,\n ...(codec && {\n codec: {\n encode: (plain: string) => codec.encode(plain),\n decode: (stored: string) => codec.decode(stored).catch(() => \"null\"),\n },\n }),\n },\n () => refresh(),\n (error) => source.onError?.(error),\n );\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) {\n stopRemote?.();\n stopRemote = undefined;\n }\n };\n },\n refresh,\n };\n}\n"],"names":["_a"],"mappings":"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"}
@@ -4,39 +4,6 @@ function extrasOf(state) {
4
4
  const extras = state.extras;
5
5
  return extras && typeof extras === "object" ? extras : null;
6
6
  }
7
- function idsOf(list, into) {
8
- if (!Array.isArray(list)) return;
9
- for (const item of list) {
10
- const id = item == null ? void 0 : item.id;
11
- if (typeof id === "string") into.add(id);
12
- }
13
- }
14
- function chatOutboxHeldIds(state) {
15
- var _a, _b;
16
- const held = /* @__PURE__ */ new Set();
17
- for (const message of state.messages ?? []) held.add(message.id);
18
- const runs = (_a = extrasOf(state)) == null ? void 0 : _a.runs;
19
- if (runs) {
20
- idsOf(runs.queue, held);
21
- idsOf(runs.steerQueue, held);
22
- idsOf(runs.failed, held);
23
- idsOf((_b = runs.dispatching) == null ? void 0 : _b.messages, held);
24
- }
25
- return held;
26
- }
27
- function chatOutboxReadiness(connection) {
28
- if (!connection) return "connecting";
29
- switch (connection.status) {
30
- case "connected":
31
- return "ready";
32
- case "standby":
33
- return connection.reason === "deferred" && typeof connection.message === "string" ? "refused" : "ready";
34
- case "stopped":
35
- return "refused";
36
- default:
37
- return "connecting";
38
- }
39
- }
40
7
  function chatOutboxWireAnchorId(wireMessages) {
41
8
  let fallback = null;
42
9
  for (let index = wireMessages.length - 1; index >= 0; index -= 1) {
@@ -47,44 +14,12 @@ function chatOutboxWireAnchorId(wireMessages) {
47
14
  }
48
15
  return fallback;
49
16
  }
50
- function viewedLeafId(messages) {
51
- var _a;
52
- for (let index = messages.length - 1; index >= 0; index -= 1) {
53
- const message = messages[index];
54
- if (message && ((_a = message.status) == null ? void 0 : _a.type) !== "running") return message.id;
17
+ function readOutbox(extras) {
18
+ const outbox = extras == null ? void 0 : extras.outbox;
19
+ if (!outbox || !Array.isArray(outbox.entries) || typeof outbox.insert !== "function" || typeof outbox.update !== "function" || typeof outbox.remove !== "function") {
20
+ return null;
55
21
  }
56
- return null;
57
- }
58
- function newRunId() {
59
- var _a, _b;
60
- const host = globalThis;
61
- return ((_b = (_a = host.crypto) == null ? void 0 : _a.randomUUID) == null ? void 0 : _b.call(_a)) ?? `run-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
62
- }
63
- function chatOutboxWireMessage(entry) {
64
- const files = (entry.files ?? []).map((file) => ({
65
- type: "file",
66
- mediaType: file.mediaType,
67
- url: file.url,
68
- ...file.filename !== void 0 && { filename: file.filename }
69
- }));
70
- return {
71
- id: entry.id,
72
- role: "user",
73
- parts: [...files, ...entry.text.length > 0 ? [{ type: "text", text: entry.text }] : []]
74
- };
75
- }
76
- function buildChatOutboxSendCommand({
77
- entry,
78
- messages,
79
- wireMessages,
80
- runId,
81
- isRunning
82
- }) {
83
- const message = chatOutboxWireMessage(entry);
84
- if (isRunning && runId !== null) return { type: "run/enqueue", runId, message };
85
- if (runId !== null) return { type: "run/steer", runId, message };
86
- const runAnchorMessageId = wireMessages && wireMessages.length > 0 ? chatOutboxWireAnchorId(wireMessages) : viewedLeafId(messages);
87
- return { type: "run/steer", runId: newRunId(), message, runAnchorMessageId };
22
+ return outbox;
88
23
  }
89
24
  function createStatewireChatOutboxPort({
90
25
  client
@@ -94,43 +29,35 @@ function createStatewireChatOutboxPort({
94
29
  return ((_a = client()) == null ? void 0 : _a.thread().getState()) ?? null;
95
30
  };
96
31
  return {
97
- readiness() {
98
- var _a;
99
- const current = state();
100
- return current ? chatOutboxReadiness((_a = extrasOf(current)) == null ? void 0 : _a.connection) : "connecting";
101
- },
102
- heldIds() {
32
+ outbox() {
103
33
  const current = state();
104
- return current ? chatOutboxHeldIds(current) : /* @__PURE__ */ new Set();
34
+ return current ? readOutbox(extrasOf(current)) : null;
105
35
  },
106
- send(entry) {
36
+ view() {
107
37
  var _a, _b;
108
38
  const current = state();
109
39
  const extras = current ? extrasOf(current) : null;
110
- if (!current || typeof (extras == null ? void 0 : extras.sendCommand) !== "function") {
111
- return Promise.reject(new Error("The conversation is not ready to send."));
112
- }
113
- const runId = typeof ((_a = extras.runs) == null ? void 0 : _a.runId) === "string" ? extras.runs.runId : null;
114
- const wireMessages = (_b = extras.state) == null ? void 0 : _b.messages;
115
- const command = buildChatOutboxSendCommand({
116
- entry,
117
- messages: current.messages ?? [],
40
+ const wireMessages = (_a = extras == null ? void 0 : extras.state) == null ? void 0 : _a.messages;
41
+ const runId = (_b = extras == null ? void 0 : extras.runs) == null ? void 0 : _b.runId;
42
+ return {
118
43
  wireMessages: Array.isArray(wireMessages) ? wireMessages : null,
119
- runId,
120
- isRunning: extras.status === "running"
121
- });
122
- return extras.sendCommand(command, { preparedMetadata: Promise.resolve(entry.metadata) });
44
+ runId: typeof runId === "string" ? runId : null,
45
+ messageIds: new Set(((current == null ? void 0 : current.messages) ?? []).map((message) => message.id))
46
+ };
123
47
  },
124
48
  subscribe(listener) {
125
49
  const current = client();
126
50
  return current ? current.subscribe(listener) : () => void 0;
51
+ },
52
+ wake() {
53
+ var _a;
54
+ const current = state();
55
+ const extras = current ? extrasOf(current) : null;
56
+ if (((_a = extras == null ? void 0 : extras.connection) == null ? void 0 : _a.status) !== "standby" || typeof extras.connection.message === "string") return;
57
+ if (typeof extras.reconnect === "function") extras.reconnect();
127
58
  }
128
59
  };
129
60
  }
130
- exports.buildChatOutboxSendCommand = buildChatOutboxSendCommand;
131
- exports.chatOutboxHeldIds = chatOutboxHeldIds;
132
- exports.chatOutboxReadiness = chatOutboxReadiness;
133
61
  exports.chatOutboxWireAnchorId = chatOutboxWireAnchorId;
134
- exports.chatOutboxWireMessage = chatOutboxWireMessage;
135
62
  exports.createStatewireChatOutboxPort = createStatewireChatOutboxPort;
136
63
  //# sourceMappingURL=chat-outbox-thread.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-outbox-thread.cjs","sources":["../../../../agent-runtime/src/chat-outbox-thread.ts"],"sourcesContent":["import type { ChatOutboxEntry } from \"./chat-outbox-store\";\nimport type { ChatOutboxThreadPort, ChatOutboxThreadReadiness } from \"./chat-outbox\";\n\n/**\n * The chat outbox's view of a statewire deep-agent thread (`chat-outbox.ts`): which message ids it\n * holds, whether a hand-off reaches it now, and the hand-off itself — the same `run/*` statement\n * the composer's own send makes, under the id the message was minted with when it was typed.\n */\n\n/** The imperative slice of an assistant-ui client the port reads (web and native `useAui` alike). */\nexport interface ChatOutboxClientHost {\n thread: () => {\n getState: () => {\n extras?: unknown;\n messages?: readonly { id: string; status?: { type: string } }[];\n };\n };\n subscribe: (listener: () => void) => () => void;\n}\n\ntype WireFilePart = { type: \"file\"; mediaType: string; url: string; filename?: string };\ntype WireTextPart = { type: \"text\"; text: string };\n\n/** The wire message an outbox entry is sent as (react-statewire's `UserMessage`, structurally). */\nexport interface ChatOutboxWireMessage {\n id: string;\n role: \"user\";\n parts: (WireFilePart | WireTextPart)[];\n metadata?: Record<string, unknown>;\n}\n\nexport type ChatOutboxSendCommand =\n | { type: \"run/enqueue\"; runId: string; message: ChatOutboxWireMessage }\n | {\n type: \"run/steer\";\n runId: string;\n message: ChatOutboxWireMessage;\n runAnchorMessageId?: string | null;\n };\n\ninterface RunsView {\n runId?: unknown;\n queue?: unknown;\n steerQueue?: unknown;\n failed?: unknown;\n dispatching?: { messages?: unknown } | null;\n}\n\ninterface StatewireExtrasView {\n runs?: RunsView;\n /** The composed thread state: its `messages` are the raw wire messages of the loaded window. */\n state?: { messages?: unknown } | null;\n status?: unknown;\n connection?: { status?: unknown; reason?: unknown; message?: unknown } | null;\n sendCommand?: (command: unknown, options?: { preparedMetadata?: Promise<unknown> }) => Promise<unknown>;\n}\n\nfunction extrasOf(state: { extras?: unknown }): StatewireExtrasView | null {\n const extras = state.extras;\n return extras && typeof extras === \"object\" ? (extras as StatewireExtrasView) : null;\n}\n\nfunction idsOf(list: unknown, into: Set<string>): void {\n if (!Array.isArray(list)) return;\n for (const item of list) {\n const id = (item as { id?: unknown } | null)?.id;\n if (typeof id === \"string\") into.add(id);\n }\n}\n\n/** The ids a statewire thread shows: transcript, lanes, the run being dispatched, failed sends. */\nexport function chatOutboxHeldIds(state: {\n extras?: unknown;\n messages?: readonly { id: string }[];\n}): Set<string> {\n const held = new Set<string>();\n for (const message of state.messages ?? []) held.add(message.id);\n const runs = extrasOf(state)?.runs;\n if (runs) {\n idsOf(runs.queue, held);\n idsOf(runs.steerQueue, held);\n idsOf(runs.failed, held);\n idsOf(runs.dispatching?.messages, held);\n }\n return held;\n}\n\n/** Whether a hand-off reaches the thread now, from its statewire connection. */\nexport function chatOutboxReadiness(connection: StatewireExtrasView[\"connection\"]): ChatOutboxThreadReadiness {\n if (!connection) return \"connecting\";\n switch (connection.status) {\n case \"connected\":\n return \"ready\";\n case \"standby\":\n // A never-started chat parks until its first send, and an idle channel reattaches on\n // demand; a park with a stated reason is the suspended transport (an authorization denial,\n // a host suspension), which never dials.\n return connection.reason === \"deferred\" && typeof connection.message === \"string\"\n ? \"refused\"\n : \"ready\";\n case \"stopped\":\n return \"refused\";\n default:\n return \"connecting\";\n }\n}\n\n/**\n * The anchor of a run a send mints, read from the raw wire messages the way the host computes its\n * own (`run_anchor_message_id`): the last durable message, else the trailing ephemeral one, else\n * none (an empty thread). The rendered messages do not line up with the host's transcript (an\n * assistant turn and its tool messages render as one message under the turn's first id, hidden\n * entries are dropped), so the raw list is what names the host's tail.\n */\nexport function chatOutboxWireAnchorId(wireMessages: readonly unknown[]): string | null {\n let fallback: string | null = null;\n for (let index = wireMessages.length - 1; index >= 0; index -= 1) {\n const message = wireMessages[index] as { id?: unknown; ephemeral?: unknown } | null | undefined;\n if (!message || typeof message.id !== \"string\" || message.id.length === 0) continue;\n fallback ??= message.id;\n if (!message.ephemeral) return message.id;\n }\n return fallback;\n}\n\n/** The last rendered message that is committed history (not a streaming answer). */\nfunction viewedLeafId(messages: readonly { id: string; status?: { type: string } }[]): string | null {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message && message.status?.type !== \"running\") return message.id;\n }\n return null;\n}\n\nfunction newRunId(): string {\n const host = globalThis as { crypto?: { randomUUID?: () => string } };\n return host.crypto?.randomUUID?.() ?? `run-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\n/** The wire message for an outbox entry: its files first, then one text part (react-statewire's shape). */\nexport function chatOutboxWireMessage(entry: ChatOutboxEntry): ChatOutboxWireMessage {\n const files: WireFilePart[] = (entry.files ?? []).map((file) => ({\n type: \"file\",\n mediaType: file.mediaType,\n url: file.url,\n ...(file.filename !== undefined && { filename: file.filename }),\n }));\n return {\n id: entry.id,\n role: \"user\",\n parts: [...files, ...(entry.text.length > 0 ? [{ type: \"text\" as const, text: entry.text }] : [])],\n };\n}\n\n/**\n * The statement the composer's own send would make now (`composer.send({ steer: false })`): a\n * queued follow-up behind a live run, otherwise a send that starts a run, anchored at the host's\n * tail as the raw wire messages name it ({@link chatOutboxWireAnchorId}); without them (a surface\n * whose state is not replicated yet), at the last rendered message, as the composer anchors.\n */\nexport function buildChatOutboxSendCommand({\n entry,\n messages,\n wireMessages,\n runId,\n isRunning,\n}: {\n entry: ChatOutboxEntry;\n messages: readonly { id: string; status?: { type: string } }[];\n /** The raw wire messages of the loaded window (`extras.state.messages`), when replicated. */\n wireMessages?: readonly unknown[] | null;\n runId: string | null;\n isRunning: boolean;\n}): ChatOutboxSendCommand {\n const message = chatOutboxWireMessage(entry);\n if (isRunning && runId !== null) return { type: \"run/enqueue\", runId, message };\n if (runId !== null) return { type: \"run/steer\", runId, message };\n const runAnchorMessageId =\n wireMessages && wireMessages.length > 0 ? chatOutboxWireAnchorId(wireMessages) : viewedLeafId(messages);\n return { type: \"run/steer\", runId: newRunId(), message, runAnchorMessageId };\n}\n\n/** A statewire thread, as the chat outbox's port. */\nexport function createStatewireChatOutboxPort({\n client,\n}: {\n /** Read on every call, so the port follows the host's current client. */\n client: () => ChatOutboxClientHost | null;\n}): ChatOutboxThreadPort {\n const state = () => client()?.thread().getState() ?? null;\n return {\n readiness() {\n const current = state();\n return current ? chatOutboxReadiness(extrasOf(current)?.connection) : \"connecting\";\n },\n heldIds() {\n const current = state();\n return current ? chatOutboxHeldIds(current) : new Set<string>();\n },\n send(entry) {\n const current = state();\n const extras = current ? extrasOf(current) : null;\n if (!current || typeof extras?.sendCommand !== \"function\") {\n return Promise.reject(new Error(\"The conversation is not ready to send.\"));\n }\n const runId = typeof extras.runs?.runId === \"string\" ? extras.runs.runId : null;\n const wireMessages = extras.state?.messages;\n const command = buildChatOutboxSendCommand({\n entry,\n messages: current.messages ?? [],\n wireMessages: Array.isArray(wireMessages) ? wireMessages : null,\n runId,\n isRunning: extras.status === \"running\",\n });\n // The metadata frozen when the message was typed rides as prepared metadata, so the\n // runtime's own capture (which reads what the composer staged for its next send) is not\n // consumed by a message typed earlier.\n return extras.sendCommand(command, { preparedMetadata: Promise.resolve(entry.metadata) });\n },\n subscribe(listener) {\n const current = client();\n return current ? current.subscribe(listener) : () => undefined;\n },\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-outbox-thread.cjs","sources":["../../../../agent-runtime/src/chat-outbox-thread.ts"],"sourcesContent":["import type { ChatOutboxStatewireOutbox, ChatOutboxThreadPort } from \"./chat-outbox\";\nimport type { ChatOutboxEntry } from \"./chat-outbox-entry\";\n\n/**\n * The chat outbox's view of a statewire deep-agent thread (`chat-outbox.ts`): its statewire outbox\n * (`extras.outbox`), the run and wire messages a held send is anchored against, and the message\n * ids its transcript shows.\n */\n\n/**\n * Whether a send reaches the thread now, from its statewire connection: `ready` (attached, or a\n * standby that dials on demand), `connecting`, `refused` (stopped, or parked on a denial).\n */\nexport type ChatOutboxThreadReadiness = \"ready\" | \"connecting\" | \"refused\";\n\n/** The imperative slice of an assistant-ui client the port reads (web and native `useAui` alike). */\nexport interface ChatOutboxClientHost {\n thread: () => {\n getState: () => {\n extras?: unknown;\n messages?: readonly { id: string; status?: { type: string } }[];\n };\n };\n subscribe: (listener: () => void) => () => void;\n}\n\ntype WireFilePart = { type: \"file\"; mediaType: string; url: string; filename?: string };\ntype WireTextPart = { type: \"text\"; text: string };\n\n/** The wire message an outbox entry is sent as (react-statewire's `UserMessage`, structurally). */\nexport interface ChatOutboxWireMessage {\n id: string;\n role: \"user\";\n parts: (WireFilePart | WireTextPart)[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ChatOutboxSendCommand {\n type: \"run/send\";\n runId: string;\n behavior: \"auto\";\n message: ChatOutboxWireMessage;\n runAnchorMessageId?: string | null;\n}\n\ninterface RunsView {\n runId?: unknown;\n queue?: unknown;\n steerQueue?: unknown;\n /** Held run sends (waiting in the chat outbox, or failed with `localMeta.error`). */\n held?: unknown;\n dispatching?: { messages?: unknown } | null;\n}\n\ninterface StatewireExtrasView {\n runs?: RunsView;\n /** The composed thread state: its `messages` are the raw wire messages of the loaded window. */\n state?: { messages?: unknown } | null;\n status?: unknown;\n connection?: { status?: unknown; reason?: unknown; message?: unknown } | null;\n reconnect?: unknown;\n sendCommand?: (command: unknown, options?: { preparedMetadata?: Promise<unknown> }) => Promise<unknown>;\n outbox?: unknown;\n}\n\nfunction extrasOf(state: { extras?: unknown }): StatewireExtrasView | null {\n const extras = state.extras;\n return extras && typeof extras === \"object\" ? (extras as StatewireExtrasView) : null;\n}\n\nfunction idsOf(list: unknown, into: Set<string>): void {\n if (!Array.isArray(list)) return;\n for (const item of list) {\n const id = (item as { id?: unknown } | null)?.id;\n if (typeof id === \"string\") into.add(id);\n }\n}\n\n/** The ids a statewire thread shows: transcript, lanes, the run being dispatched, held sends. */\nexport function chatOutboxHeldIds(state: {\n extras?: unknown;\n messages?: readonly { id: string }[];\n}): Set<string> {\n const held = new Set<string>();\n for (const message of state.messages ?? []) held.add(message.id);\n const runs = extrasOf(state)?.runs;\n if (runs) {\n idsOf(runs.queue, held);\n idsOf(runs.steerQueue, held);\n idsOf(runs.held, held);\n idsOf(runs.dispatching?.messages, held);\n }\n return held;\n}\n\n/** Whether a hand-off reaches the thread now, from its statewire connection. */\nexport function chatOutboxReadiness(connection: StatewireExtrasView[\"connection\"]): ChatOutboxThreadReadiness {\n if (!connection) return \"connecting\";\n switch (connection.status) {\n case \"connected\":\n return \"ready\";\n case \"standby\":\n // A never-started chat parks until its first send, and an idle channel reattaches on\n // demand; a park with a stated reason is the suspended transport (an authorization denial,\n // a host suspension), which never dials.\n return connection.reason === \"deferred\" && typeof connection.message === \"string\"\n ? \"refused\"\n : \"ready\";\n case \"stopped\":\n return \"refused\";\n default:\n return \"connecting\";\n }\n}\n\n/**\n * The anchor of a run a send mints, read from the raw wire messages the way the host computes its\n * own (`run_anchor_message_id`): the last durable message, else the trailing ephemeral one, else\n * none (an empty thread). The rendered messages do not line up with the host's transcript (an\n * assistant turn and its tool messages render as one message under the turn's first id, hidden\n * entries are dropped), so the raw list is what names the host's tail.\n */\nexport function chatOutboxWireAnchorId(wireMessages: readonly unknown[]): string | null {\n let fallback: string | null = null;\n for (let index = wireMessages.length - 1; index >= 0; index -= 1) {\n const message = wireMessages[index] as { id?: unknown; ephemeral?: unknown } | null | undefined;\n if (!message || typeof message.id !== \"string\" || message.id.length === 0) continue;\n fallback ??= message.id;\n if (!message.ephemeral) return message.id;\n }\n return fallback;\n}\n\n/** The last rendered message that is committed history (not a streaming answer). */\nfunction viewedLeafId(messages: readonly { id: string; status?: { type: string } }[]): string | null {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message && message.status?.type !== \"running\") return message.id;\n }\n return null;\n}\n\nfunction newRunId(): string {\n const host = globalThis as { crypto?: { randomUUID?: () => string } };\n return host.crypto?.randomUUID?.() ?? `run-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n}\n\n/** The wire message for an outbox entry: its files first, then one text part (react-statewire's shape). */\nexport function chatOutboxWireMessage(entry: ChatOutboxEntry): ChatOutboxWireMessage {\n const files: WireFilePart[] = (entry.files ?? []).map((file) => ({\n type: \"file\",\n mediaType: file.mediaType,\n url: file.url,\n ...(file.filename !== undefined && { filename: file.filename }),\n }));\n return {\n id: entry.id,\n role: \"user\",\n parts: [...files, ...(entry.text.length > 0 ? [{ type: \"text\" as const, text: entry.text }] : [])],\n };\n}\n\n/**\n * The statement the composer's own send would make now: an `auto` send into the live run (the\n * host's prioritizer decides where it lands), otherwise one that starts a run, anchored at the host's\n * tail as the raw wire messages name it ({@link chatOutboxWireAnchorId}); without them (a surface\n * whose state is not replicated yet), at the last rendered message, as the composer anchors.\n */\nexport function buildChatOutboxSendCommand({\n entry,\n messages,\n wireMessages,\n runId,\n}: {\n entry: ChatOutboxEntry;\n messages: readonly { id: string; status?: { type: string } }[];\n /** The raw wire messages of the loaded window (`extras.state.messages`), when replicated. */\n wireMessages?: readonly unknown[] | null;\n runId: string | null;\n}): ChatOutboxSendCommand {\n const message = chatOutboxWireMessage(entry);\n if (runId !== null) return { type: \"run/send\", runId, behavior: \"auto\", message };\n const runAnchorMessageId =\n wireMessages && wireMessages.length > 0 ? chatOutboxWireAnchorId(wireMessages) : viewedLeafId(messages);\n return { type: \"run/send\", runId: newRunId(), behavior: \"auto\", message, runAnchorMessageId };\n}\n\nfunction readOutbox(extras: StatewireExtrasView | null): ChatOutboxStatewireOutbox | null {\n const outbox = extras?.outbox as Partial<ChatOutboxStatewireOutbox> | null | undefined;\n if (\n !outbox ||\n !Array.isArray(outbox.entries) ||\n typeof outbox.insert !== \"function\" ||\n typeof outbox.update !== \"function\" ||\n typeof outbox.remove !== \"function\"\n ) {\n return null;\n }\n return outbox as ChatOutboxStatewireOutbox;\n}\n\n/** A statewire thread, as the chat outbox's port. */\nexport function createStatewireChatOutboxPort({\n client,\n}: {\n /** Read on every call, so the port follows the host's current client. */\n client: () => ChatOutboxClientHost | null;\n}): ChatOutboxThreadPort {\n const state = () => client()?.thread().getState() ?? null;\n return {\n outbox() {\n const current = state();\n return current ? readOutbox(extrasOf(current)) : null;\n },\n view() {\n const current = state();\n const extras = current ? extrasOf(current) : null;\n const wireMessages = extras?.state?.messages;\n const runId = extras?.runs?.runId;\n return {\n wireMessages: Array.isArray(wireMessages) ? wireMessages : null,\n runId: typeof runId === \"string\" ? runId : null,\n messageIds: new Set((current?.messages ?? []).map((message) => message.id)),\n };\n },\n subscribe(listener) {\n const current = client();\n return current ? current.subscribe(listener) : () => undefined;\n },\n wake() {\n const current = state();\n const extras = current ? extrasOf(current) : null;\n // A park with a stated reason is the suspended transport, which never dials.\n if (extras?.connection?.status !== \"standby\" || typeof extras.connection.message === \"string\") return;\n if (typeof extras.reconnect === \"function\") extras.reconnect();\n },\n };\n}\n"],"names":[],"mappings":";;AAiEA,SAAS,SAAS,OAAyD;AACzE,QAAM,SAAS,MAAM;AACrB,SAAO,UAAU,OAAO,WAAW,WAAY,SAAiC;AAClF;AAsDO,SAAS,uBAAuB,cAAiD;AACtF,MAAI,WAA0B;AAC9B,WAAS,QAAQ,aAAa,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAChE,UAAM,UAAU,aAAa,KAAK;AAClC,QAAI,CAAC,WAAW,OAAO,QAAQ,OAAO,YAAY,QAAQ,GAAG,WAAW,EAAG;AAC3E,4BAAa,QAAQ;AACrB,QAAI,CAAC,QAAQ,UAAW,QAAO,QAAQ;AAAA,EACzC;AACA,SAAO;AACT;AAwDA,SAAS,WAAW,QAAsE;AACxF,QAAM,SAAS,iCAAQ;AACvB,MACE,CAAC,UACD,CAAC,MAAM,QAAQ,OAAO,OAAO,KAC7B,OAAO,OAAO,WAAW,cACzB,OAAO,OAAO,WAAW,cACzB,OAAO,OAAO,WAAW,YACzB;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,8BAA8B;AAAA,EAC5C;AACF,GAGyB;AACvB,QAAM,QAAQ,MAAA;;AAAM,yBAAA,MAAA,mBAAU,SAAS,eAAc;AAAA;AACrD,SAAO;AAAA,IACL,SAAS;AACP,YAAM,UAAU,MAAA;AAChB,aAAO,UAAU,WAAW,SAAS,OAAO,CAAC,IAAI;AAAA,IACnD;AAAA,IACA,OAAO;;AACL,YAAM,UAAU,MAAA;AAChB,YAAM,SAAS,UAAU,SAAS,OAAO,IAAI;AAC7C,YAAM,gBAAe,sCAAQ,UAAR,mBAAe;AACpC,YAAM,SAAQ,sCAAQ,SAAR,mBAAc;AAC5B,aAAO;AAAA,QACL,cAAc,MAAM,QAAQ,YAAY,IAAI,eAAe;AAAA,QAC3D,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA,QAC3C,YAAY,IAAI,MAAK,mCAAS,aAAY,IAAI,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;AAAA,MAAA;AAAA,IAE9E;AAAA,IACA,UAAU,UAAU;AAClB,YAAM,UAAU,OAAA;AAChB,aAAO,UAAU,QAAQ,UAAU,QAAQ,IAAI,MAAM;AAAA,IACvD;AAAA,IACA,OAAO;;AACL,YAAM,UAAU,MAAA;AAChB,YAAM,SAAS,UAAU,SAAS,OAAO,IAAI;AAE7C,YAAI,sCAAQ,eAAR,mBAAoB,YAAW,aAAa,OAAO,OAAO,WAAW,YAAY,SAAU;AAC/F,UAAI,OAAO,OAAO,cAAc,mBAAmB,UAAA;AAAA,IACrD;AAAA,EAAA;AAEJ;;;"}
@@ -1,10 +1,15 @@
1
- import type { ChatOutboxEntry } from "./chat-outbox-store";
2
- import type { ChatOutboxThreadPort, ChatOutboxThreadReadiness } from "./chat-outbox";
1
+ import type { ChatOutboxThreadPort } from "./chat-outbox";
2
+ import type { ChatOutboxEntry } from "./chat-outbox-entry";
3
3
  /**
4
- * The chat outbox's view of a statewire deep-agent thread (`chat-outbox.ts`): which message ids it
5
- * holds, whether a hand-off reaches it now, and the hand-off itself — the same `run/*` statement
6
- * the composer's own send makes, under the id the message was minted with when it was typed.
4
+ * The chat outbox's view of a statewire deep-agent thread (`chat-outbox.ts`): its statewire outbox
5
+ * (`extras.outbox`), the run and wire messages a held send is anchored against, and the message
6
+ * ids its transcript shows.
7
7
  */
8
+ /**
9
+ * Whether a send reaches the thread now, from its statewire connection: `ready` (attached, or a
10
+ * standby that dials on demand), `connecting`, `refused` (stopped, or parked on a denial).
11
+ */
12
+ export type ChatOutboxThreadReadiness = "ready" | "connecting" | "refused";
8
13
  /** The imperative slice of an assistant-ui client the port reads (web and native `useAui` alike). */
9
14
  export interface ChatOutboxClientHost {
10
15
  thread: () => {
@@ -37,21 +42,19 @@ export interface ChatOutboxWireMessage {
37
42
  parts: (WireFilePart | WireTextPart)[];
38
43
  metadata?: Record<string, unknown>;
39
44
  }
40
- export type ChatOutboxSendCommand = {
41
- type: "run/enqueue";
42
- runId: string;
43
- message: ChatOutboxWireMessage;
44
- } | {
45
- type: "run/steer";
45
+ export interface ChatOutboxSendCommand {
46
+ type: "run/send";
46
47
  runId: string;
48
+ behavior: "auto";
47
49
  message: ChatOutboxWireMessage;
48
50
  runAnchorMessageId?: string | null;
49
- };
51
+ }
50
52
  interface RunsView {
51
53
  runId?: unknown;
52
54
  queue?: unknown;
53
55
  steerQueue?: unknown;
54
- failed?: unknown;
56
+ /** Held run sends (waiting in the chat outbox, or failed with `localMeta.error`). */
57
+ held?: unknown;
55
58
  dispatching?: {
56
59
  messages?: unknown;
57
60
  } | null;
@@ -68,11 +71,13 @@ interface StatewireExtrasView {
68
71
  reason?: unknown;
69
72
  message?: unknown;
70
73
  } | null;
74
+ reconnect?: unknown;
71
75
  sendCommand?: (command: unknown, options?: {
72
76
  preparedMetadata?: Promise<unknown>;
73
77
  }) => Promise<unknown>;
78
+ outbox?: unknown;
74
79
  }
75
- /** The ids a statewire thread shows: transcript, lanes, the run being dispatched, failed sends. */
80
+ /** The ids a statewire thread shows: transcript, lanes, the run being dispatched, held sends. */
76
81
  export declare function chatOutboxHeldIds(state: {
77
82
  extras?: unknown;
78
83
  messages?: readonly {
@@ -92,12 +97,12 @@ export declare function chatOutboxWireAnchorId(wireMessages: readonly unknown[])
92
97
  /** The wire message for an outbox entry: its files first, then one text part (react-statewire's shape). */
93
98
  export declare function chatOutboxWireMessage(entry: ChatOutboxEntry): ChatOutboxWireMessage;
94
99
  /**
95
- * The statement the composer's own send would make now (`composer.send({ steer: false })`): a
96
- * queued follow-up behind a live run, otherwise a send that starts a run, anchored at the host's
100
+ * The statement the composer's own send would make now: an `auto` send into the live run (the
101
+ * host's prioritizer decides where it lands), otherwise one that starts a run, anchored at the host's
97
102
  * tail as the raw wire messages name it ({@link chatOutboxWireAnchorId}); without them (a surface
98
103
  * whose state is not replicated yet), at the last rendered message, as the composer anchors.
99
104
  */
100
- export declare function buildChatOutboxSendCommand({ entry, messages, wireMessages, runId, isRunning, }: {
105
+ export declare function buildChatOutboxSendCommand({ entry, messages, wireMessages, runId, }: {
101
106
  entry: ChatOutboxEntry;
102
107
  messages: readonly {
103
108
  id: string;
@@ -108,7 +113,6 @@ export declare function buildChatOutboxSendCommand({ entry, messages, wireMessag
108
113
  /** The raw wire messages of the loaded window (`extras.state.messages`), when replicated. */
109
114
  wireMessages?: readonly unknown[] | null;
110
115
  runId: string | null;
111
- isRunning: boolean;
112
116
  }): ChatOutboxSendCommand;
113
117
  /** A statewire thread, as the chat outbox's port. */
114
118
  export declare function createStatewireChatOutboxPort({ client, }: {