@athenaintel/react 0.28.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (761) hide show
  1. package/README.md +418 -10
  2. package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
  3. package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
  4. package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
  5. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  6. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  7. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  8. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  9. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  10. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  11. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  12. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  13. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  14. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  15. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  16. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  17. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  18. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  19. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  20. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  21. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  22. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  23. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  24. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  25. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  27. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  29. package/dist/agent-runtime/src/errors.js.map +1 -0
  30. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  31. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  32. package/dist/agent-runtime/src/execute-output.js +41 -0
  33. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +10 -2
  35. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +10 -2
  37. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  38. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  39. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  40. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  41. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  43. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  44. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  45. package/dist/agent-runtime/src/message-author.js.map +1 -0
  46. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  47. package/dist/agent-runtime/src/message-window.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  49. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  51. package/dist/agent-runtime/src/messages.js.map +1 -0
  52. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  53. package/dist/agent-runtime/src/model-context.js.map +1 -0
  54. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  55. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  56. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  57. package/dist/agent-runtime/src/protocol.js.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  59. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  60. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  61. package/dist/agent-runtime/src/queue.js.map +1 -0
  62. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +23 -13
  63. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  64. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +24 -14
  65. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  66. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  67. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  68. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  69. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  70. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  71. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  72. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  73. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  74. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  75. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  76. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  77. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  78. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  79. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  80. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  81. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  82. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  83. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  84. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  85. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  86. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  87. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  88. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  89. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  90. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  91. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  92. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  93. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  94. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  95. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  96. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  97. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  98. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +279 -3
  99. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  100. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +279 -3
  101. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  102. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  103. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  104. package/dist/agent-runtime/src/tool-names.js +5 -0
  105. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  106. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  107. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  108. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  109. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  110. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  111. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  112. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  113. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  114. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  115. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  116. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  117. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  119. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  120. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  121. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  122. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  123. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  124. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  125. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  126. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  127. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  128. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  129. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  130. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  131. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  133. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  135. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  136. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  137. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  138. package/dist/assets/AthenaAssetEmbed.cjs +8 -2
  139. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  140. package/dist/assets/AthenaAssetEmbed.d.ts +8 -0
  141. package/dist/assets/AthenaAssetEmbed.js +8 -2
  142. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  143. package/dist/assets/AthenaLayout.cjs +97 -31
  144. package/dist/assets/AthenaLayout.cjs.map +1 -1
  145. package/dist/assets/AthenaLayout.d.ts +13 -0
  146. package/dist/assets/AthenaLayout.js +98 -32
  147. package/dist/assets/AthenaLayout.js.map +1 -1
  148. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  149. package/dist/assets/asset-embed-messages.d.ts +6 -0
  150. package/dist/assets/asset-embed-messages.js.map +1 -1
  151. package/dist/assets/asset-panel-store.cjs +68 -32
  152. package/dist/assets/asset-panel-store.cjs.map +1 -1
  153. package/dist/assets/asset-panel-store.d.ts +47 -1
  154. package/dist/assets/asset-panel-store.js +68 -32
  155. package/dist/assets/asset-panel-store.js.map +1 -1
  156. package/dist/assets/use-asset-embed.cjs +29 -8
  157. package/dist/assets/use-asset-embed.cjs.map +1 -1
  158. package/dist/assets/use-asset-embed.d.ts +7 -0
  159. package/dist/assets/use-asset-embed.js +29 -8
  160. package/dist/assets/use-asset-embed.js.map +1 -1
  161. package/dist/catalog/chat-pickers.cjs +152 -0
  162. package/dist/catalog/chat-pickers.cjs.map +1 -0
  163. package/dist/catalog/chat-pickers.d.ts +22 -0
  164. package/dist/catalog/chat-pickers.js +152 -0
  165. package/dist/catalog/chat-pickers.js.map +1 -0
  166. package/dist/catalog/runtime-catalog.cjs +181 -0
  167. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  168. package/dist/catalog/runtime-catalog.d.ts +100 -0
  169. package/dist/catalog/runtime-catalog.js +181 -0
  170. package/dist/catalog/runtime-catalog.js.map +1 -0
  171. package/dist/chat/AthenaChat.cjs +86 -46
  172. package/dist/chat/AthenaChat.cjs.map +1 -1
  173. package/dist/chat/AthenaChat.d.ts +21 -4
  174. package/dist/chat/AthenaChat.js +88 -48
  175. package/dist/chat/AthenaChat.js.map +1 -1
  176. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  177. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  178. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  179. package/dist/chat/StatewireApprovalCard.js +39 -38
  180. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  181. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  182. package/dist/chat/StatewireClientToolBridge.js +2 -2
  183. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  184. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  185. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  186. package/dist/chat/StatewireQueuedMessages.js +15 -12
  187. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  188. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  189. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  190. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  191. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  192. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  193. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  194. package/dist/chat/WaitingOnYouBanner.js +2 -2
  195. package/dist/chat/athena-citation-links.cjs +19 -15
  196. package/dist/chat/athena-citation-links.cjs.map +1 -1
  197. package/dist/chat/athena-citation-links.js +19 -15
  198. package/dist/chat/athena-citation-links.js.map +1 -1
  199. package/dist/chat/run-activity.cjs +9 -1
  200. package/dist/chat/run-activity.cjs.map +1 -1
  201. package/dist/chat/run-activity.d.ts +6 -0
  202. package/dist/chat/run-activity.js +10 -2
  203. package/dist/chat/run-activity.js.map +1 -1
  204. package/dist/chat/statewire-banners.cjs +30 -1
  205. package/dist/chat/statewire-banners.cjs.map +1 -1
  206. package/dist/chat/statewire-banners.d.ts +20 -1
  207. package/dist/chat/statewire-banners.js +32 -3
  208. package/dist/chat/statewire-banners.js.map +1 -1
  209. package/dist/chat/statewire-client-tools.cjs +1 -1
  210. package/dist/chat/statewire-client-tools.js +1 -1
  211. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  212. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  213. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  214. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  215. package/dist/chat/super-grouping/SuperGroupingCard.cjs +7 -5
  216. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  217. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +8 -2
  218. package/dist/chat/super-grouping/SuperGroupingCard.js +7 -5
  219. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  220. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +350 -0
  221. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  222. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  223. package/dist/chat/super-grouping/SuperGroupingTranscript.js +350 -0
  224. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  225. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  226. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  227. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  228. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  229. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  230. package/dist/chat/super-grouping/activity-timeline.cjs +51 -26
  231. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  232. package/dist/chat/super-grouping/activity-timeline.d.ts +40 -8
  233. package/dist/chat/super-grouping/activity-timeline.js +52 -27
  234. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  235. package/dist/chat/super-grouping/index.cjs +12 -0
  236. package/dist/chat/super-grouping/index.cjs.map +1 -1
  237. package/dist/chat/super-grouping/index.d.ts +7 -2
  238. package/dist/chat/super-grouping/index.js +14 -2
  239. package/dist/chat/super-grouping/index.js.map +1 -1
  240. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  241. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  242. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  243. package/dist/chat/super-grouping/timeline-step.js +15 -6
  244. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  245. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  246. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  247. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  248. package/dist/chat/super-grouping/turn-segments.js +82 -0
  249. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  250. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  251. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  252. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  253. package/dist/chat/super-grouping/turn-timing.js +110 -0
  254. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  255. package/dist/chat/tiptap-text.cjs +1 -1
  256. package/dist/chat/tiptap-text.js +1 -1
  257. package/dist/chat/use-athena-run-live.cjs +1 -1
  258. package/dist/chat/use-athena-run-live.js +1 -1
  259. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  260. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  261. package/dist/chat/use-statewire-approval-request.js +74 -5
  262. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  263. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  264. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  265. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  266. package/dist/chat-ui/composer/composer-message.js +284 -0
  267. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  268. package/dist/chat-ui/composer/tiptap-composer.cjs +57 -11
  269. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  270. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  271. package/dist/chat-ui/composer/tiptap-composer.js +57 -11
  272. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  273. package/dist/chat-ui/index.cjs +4 -1
  274. package/dist/chat-ui/index.cjs.map +1 -1
  275. package/dist/chat-ui/index.d.ts +3 -2
  276. package/dist/chat-ui/index.js +5 -2
  277. package/dist/chat-ui/index.js.map +1 -1
  278. package/dist/chat-ui/mentions/mention-chip.cjs +3 -2
  279. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  280. package/dist/chat-ui/mentions/mention-chip.js +4 -3
  281. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  282. package/dist/chat-ui/mentions/mention-extension.cjs +8 -2
  283. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  284. package/dist/chat-ui/mentions/mention-extension.js +8 -2
  285. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  286. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  287. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  288. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  289. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  290. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  291. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  292. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  293. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  294. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  295. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  296. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  297. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  298. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  299. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  300. package/dist/chat-ui/messages/message-components.cjs +30 -10
  301. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  302. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  303. package/dist/chat-ui/messages/message-components.js +30 -10
  304. package/dist/chat-ui/messages/message-components.js.map +1 -1
  305. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  306. package/dist/chat-ui/messages/runtime-message.js +1 -1
  307. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  308. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  309. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  310. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  311. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  312. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  313. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  314. package/dist/chat-ui/messages/wake-marker.js +40 -5
  315. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  316. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  317. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  318. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  319. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  320. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  321. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  322. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  323. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  324. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  325. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  326. package/dist/chat-ui/statewire.cjs +1 -1
  327. package/dist/chat-ui/statewire.d.ts +1 -1
  328. package/dist/chat-ui/statewire.js +1 -1
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  330. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  331. package/dist/collab/client.cjs +218 -13
  332. package/dist/collab/client.cjs.map +1 -1
  333. package/dist/collab/client.d.ts +105 -2
  334. package/dist/collab/client.js +221 -17
  335. package/dist/collab/client.js.map +1 -1
  336. package/dist/collab/index.cjs +2 -0
  337. package/dist/collab/index.cjs.map +1 -1
  338. package/dist/collab/index.d.ts +1 -1
  339. package/dist/collab/index.js +3 -1
  340. package/dist/composer/AttachmentContext.cjs +38 -12
  341. package/dist/composer/AttachmentContext.cjs.map +1 -1
  342. package/dist/composer/AttachmentContext.d.ts +22 -1
  343. package/dist/composer/AttachmentContext.js +40 -14
  344. package/dist/composer/AttachmentContext.js.map +1 -1
  345. package/dist/composer/QuoteContext.cjs +80 -28
  346. package/dist/composer/QuoteContext.cjs.map +1 -1
  347. package/dist/composer/QuoteContext.d.ts +35 -6
  348. package/dist/composer/QuoteContext.js +82 -30
  349. package/dist/composer/QuoteContext.js.map +1 -1
  350. package/dist/composer/build-composed-message.cjs +27 -0
  351. package/dist/composer/build-composed-message.cjs.map +1 -1
  352. package/dist/composer/build-composed-message.d.ts +21 -0
  353. package/dist/composer/build-composed-message.js +28 -1
  354. package/dist/composer/build-composed-message.js.map +1 -1
  355. package/dist/composer/composer-handoff.cjs +13 -1
  356. package/dist/composer/composer-handoff.cjs.map +1 -1
  357. package/dist/composer/composer-handoff.d.ts +12 -0
  358. package/dist/composer/composer-handoff.js +15 -3
  359. package/dist/composer/composer-handoff.js.map +1 -1
  360. package/dist/composer/index.d.ts +6 -3
  361. package/dist/composer/useReadComposerDraft.cjs +16 -0
  362. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  363. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  364. package/dist/composer/useReadComposerDraft.js +16 -0
  365. package/dist/composer/useReadComposerDraft.js.map +1 -0
  366. package/dist/diagnostics/errors.cjs +6 -0
  367. package/dist/diagnostics/errors.cjs.map +1 -1
  368. package/dist/diagnostics/errors.d.ts +6 -0
  369. package/dist/diagnostics/errors.js +6 -0
  370. package/dist/diagnostics/errors.js.map +1 -1
  371. package/dist/index.cjs +159 -7
  372. package/dist/index.cjs.map +1 -1
  373. package/dist/index.d.ts +53 -12
  374. package/dist/index.js +166 -14
  375. package/dist/index.js.map +1 -1
  376. package/dist/lib/owner-document.cjs +32 -0
  377. package/dist/lib/owner-document.cjs.map +1 -0
  378. package/dist/lib/owner-document.d.ts +17 -0
  379. package/dist/lib/owner-document.js +32 -0
  380. package/dist/lib/owner-document.js.map +1 -0
  381. package/dist/lib/portal-surface.cjs +55 -0
  382. package/dist/lib/portal-surface.cjs.map +1 -0
  383. package/dist/lib/portal-surface.d.ts +37 -0
  384. package/dist/lib/portal-surface.js +55 -0
  385. package/dist/lib/portal-surface.js.map +1 -0
  386. package/dist/lib/use-athena-rest-query.cjs +34 -0
  387. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  388. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  389. package/dist/lib/use-athena-rest-query.js +34 -0
  390. package/dist/lib/use-athena-rest-query.js.map +1 -0
  391. package/dist/provider/AthenaProvider.cjs +36 -6
  392. package/dist/provider/AthenaProvider.cjs.map +1 -1
  393. package/dist/provider/AthenaProvider.d.ts +20 -1
  394. package/dist/provider/AthenaProvider.js +38 -8
  395. package/dist/provider/AthenaProvider.js.map +1 -1
  396. package/dist/provider/citation-links.d.ts +10 -2
  397. package/dist/{packages/react → react}/package.json.cjs +1 -1
  398. package/dist/{packages/react → react}/package.json.js +1 -1
  399. package/dist/runtime/statewire-lifecycle.cjs +15 -3
  400. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  401. package/dist/runtime/statewire-lifecycle.d.ts +6 -0
  402. package/dist/runtime/statewire-lifecycle.js +15 -3
  403. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  404. package/dist/runtime/useAthenaStatewireRuntime.cjs +11 -7
  405. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  406. package/dist/runtime/useAthenaStatewireRuntime.js +11 -7
  407. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  408. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  409. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  410. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  411. package/dist/search/useAthenaRepoSearch.js +6 -14
  412. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  413. package/dist/sheet-range/a1.cjs +162 -0
  414. package/dist/sheet-range/a1.cjs.map +1 -0
  415. package/dist/sheet-range/a1.d.ts +91 -0
  416. package/dist/sheet-range/a1.js +162 -0
  417. package/dist/sheet-range/a1.js.map +1 -0
  418. package/dist/sheet-range/index.cjs +22 -0
  419. package/dist/sheet-range/index.cjs.map +1 -0
  420. package/dist/sheet-range/index.d.ts +12 -0
  421. package/dist/sheet-range/index.js +22 -0
  422. package/dist/sheet-range/index.js.map +1 -0
  423. package/dist/sheet-range/range-preview-table.cjs +75 -0
  424. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  425. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  426. package/dist/sheet-range/range-preview-table.js +75 -0
  427. package/dist/sheet-range/range-preview-table.js.map +1 -0
  428. package/dist/sheet-range/range-preview.cjs +116 -0
  429. package/dist/sheet-range/range-preview.cjs.map +1 -0
  430. package/dist/sheet-range/range-preview.d.ts +67 -0
  431. package/dist/sheet-range/range-preview.js +116 -0
  432. package/dist/sheet-range/range-preview.js.map +1 -0
  433. package/dist/styles.css +1 -1
  434. package/dist/threads/Inbox.cjs +289 -0
  435. package/dist/threads/Inbox.cjs.map +1 -0
  436. package/dist/threads/Inbox.d.ts +46 -0
  437. package/dist/threads/Inbox.js +289 -0
  438. package/dist/threads/Inbox.js.map +1 -0
  439. package/dist/threads/SessionList.cjs +51 -126
  440. package/dist/threads/SessionList.cjs.map +1 -1
  441. package/dist/threads/SessionList.d.ts +26 -1
  442. package/dist/threads/SessionList.js +45 -120
  443. package/dist/threads/SessionList.js.map +1 -1
  444. package/dist/threads/SessionsPage.cjs +753 -0
  445. package/dist/threads/SessionsPage.cjs.map +1 -0
  446. package/dist/threads/SessionsPage.d.ts +35 -0
  447. package/dist/threads/SessionsPage.js +753 -0
  448. package/dist/threads/SessionsPage.js.map +1 -0
  449. package/dist/threads/api.cjs +21 -1
  450. package/dist/threads/api.cjs.map +1 -1
  451. package/dist/threads/api.d.ts +59 -0
  452. package/dist/threads/api.js +21 -1
  453. package/dist/threads/api.js.map +1 -1
  454. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  455. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  456. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  457. package/dist/threads/conversation-list-fetcher.js +9 -2
  458. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  459. package/dist/threads/index.d.ts +2 -1
  460. package/dist/threads/pull-request-display.cjs +25 -0
  461. package/dist/threads/pull-request-display.cjs.map +1 -0
  462. package/dist/threads/pull-request-display.d.ts +15 -0
  463. package/dist/threads/pull-request-display.js +25 -0
  464. package/dist/threads/pull-request-display.js.map +1 -0
  465. package/dist/threads/session-list-model.cjs +16 -2
  466. package/dist/threads/session-list-model.cjs.map +1 -1
  467. package/dist/threads/session-list-model.d.ts +10 -0
  468. package/dist/threads/session-list-model.js +16 -2
  469. package/dist/threads/session-list-model.js.map +1 -1
  470. package/dist/threads/session-row-parts.cjs +152 -0
  471. package/dist/threads/session-row-parts.cjs.map +1 -0
  472. package/dist/threads/session-row-parts.d.ts +50 -0
  473. package/dist/threads/session-row-parts.js +152 -0
  474. package/dist/threads/session-row-parts.js.map +1 -0
  475. package/dist/threads/sessions-page-model.cjs +305 -0
  476. package/dist/threads/sessions-page-model.cjs.map +1 -0
  477. package/dist/threads/sessions-page-model.d.ts +86 -0
  478. package/dist/threads/sessions-page-model.js +305 -0
  479. package/dist/threads/sessions-page-model.js.map +1 -0
  480. package/dist/threads/sessions-page-storage.cjs +93 -0
  481. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  482. package/dist/threads/sessions-page-storage.d.ts +23 -0
  483. package/dist/threads/sessions-page-storage.js +93 -0
  484. package/dist/threads/sessions-page-storage.js.map +1 -0
  485. package/dist/threads/sessions-query.cjs +235 -0
  486. package/dist/threads/sessions-query.cjs.map +1 -0
  487. package/dist/threads/sessions-query.d.ts +119 -0
  488. package/dist/threads/sessions-query.js +235 -0
  489. package/dist/threads/sessions-query.js.map +1 -0
  490. package/dist/threads/statewire-thread-list.cjs +133 -40
  491. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  492. package/dist/threads/statewire-thread-list.d.ts +83 -2
  493. package/dist/threads/statewire-thread-list.js +134 -41
  494. package/dist/threads/statewire-thread-list.js.map +1 -1
  495. package/dist/threads/use-athena-sessions.cjs +198 -0
  496. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  497. package/dist/threads/use-athena-sessions.d.ts +81 -0
  498. package/dist/threads/use-athena-sessions.js +198 -0
  499. package/dist/threads/use-athena-sessions.js.map +1 -0
  500. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  501. package/dist/threads/use-rest-conversation-history.js +1 -1
  502. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  503. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  504. package/dist/threads/use-statewire-conversation-history.js +1 -1
  505. package/dist/threads/use-thread-read-state.cjs +73 -0
  506. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  507. package/dist/threads/use-thread-read-state.d.ts +51 -0
  508. package/dist/threads/use-thread-read-state.js +73 -0
  509. package/dist/threads/use-thread-read-state.js.map +1 -0
  510. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  511. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  512. package/dist/tools/auto-open-tools.cjs +2 -0
  513. package/dist/tools/auto-open-tools.cjs.map +1 -1
  514. package/dist/tools/auto-open-tools.js +2 -0
  515. package/dist/tools/auto-open-tools.js.map +1 -1
  516. package/dist/tools/file-tool-uis.cjs +18 -43
  517. package/dist/tools/file-tool-uis.cjs.map +1 -1
  518. package/dist/tools/file-tool-uis.d.ts +1 -2
  519. package/dist/tools/file-tool-uis.js +18 -42
  520. package/dist/tools/file-tool-uis.js.map +1 -1
  521. package/dist/tools/index.cjs +6 -2
  522. package/dist/tools/index.cjs.map +1 -1
  523. package/dist/tools/index.d.ts +1 -0
  524. package/dist/tools/index.js +6 -2
  525. package/dist/tools/index.js.map +1 -1
  526. package/dist/tools/misc-tool-uis.cjs +2 -2
  527. package/dist/tools/misc-tool-uis.js +2 -2
  528. package/dist/tools/primitives.cjs +1 -1
  529. package/dist/tools/primitives.js +1 -1
  530. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  531. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  532. package/dist/tools/read-asset-tool-ui.js +21 -70
  533. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  534. package/dist/tools/step-text.cjs +21 -0
  535. package/dist/tools/step-text.cjs.map +1 -0
  536. package/dist/tools/step-text.d.ts +10 -0
  537. package/dist/tools/step-text.js +21 -0
  538. package/dist/tools/step-text.js.map +1 -0
  539. package/dist/tools/tool-fallback.cjs +24 -5
  540. package/dist/tools/tool-fallback.cjs.map +1 -1
  541. package/dist/tools/tool-fallback.d.ts +3 -1
  542. package/dist/tools/tool-fallback.js +24 -5
  543. package/dist/tools/tool-fallback.js.map +1 -1
  544. package/dist/tools/tool-summary.cjs +661 -0
  545. package/dist/tools/tool-summary.cjs.map +1 -0
  546. package/dist/tools/tool-summary.d.ts +99 -0
  547. package/dist/tools/tool-summary.js +661 -0
  548. package/dist/tools/tool-summary.js.map +1 -0
  549. package/dist/tools/tool-uis.cjs +37 -95
  550. package/dist/tools/tool-uis.cjs.map +1 -1
  551. package/dist/tools/tool-uis.js +37 -95
  552. package/dist/tools/tool-uis.js.map +1 -1
  553. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  554. package/dist/tools/voice-update-tool-ui.js +1 -1
  555. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  556. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  557. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  558. package/dist/tools/write-todos-tool-ui.js +5 -4
  559. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  560. package/dist/ui/popover.cjs +6 -6
  561. package/dist/ui/popover.cjs.map +1 -1
  562. package/dist/ui/popover.js +6 -6
  563. package/dist/ui/popover.js.map +1 -1
  564. package/dist/ui/tooltip.cjs +16 -2
  565. package/dist/ui/tooltip.cjs.map +1 -1
  566. package/dist/ui/tooltip.d.ts +1 -1
  567. package/dist/ui/tooltip.js +16 -2
  568. package/dist/ui/tooltip.js.map +1 -1
  569. package/dist/version.cjs +1 -1
  570. package/dist/version.js +1 -1
  571. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  572. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  573. package/dist/voice/use-athena-voice-session.js.map +1 -1
  574. package/dist/workbench/SessionWorkbench.cjs +378 -0
  575. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  576. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  577. package/dist/workbench/SessionWorkbench.js +378 -0
  578. package/dist/workbench/SessionWorkbench.js.map +1 -0
  579. package/dist/workbench/session-workbench-context.cjs +26 -0
  580. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  581. package/dist/workbench/session-workbench-context.d.ts +55 -0
  582. package/dist/workbench/session-workbench-context.js +26 -0
  583. package/dist/workbench/session-workbench-context.js.map +1 -0
  584. package/dist/workbench/session-workbench-model.cjs +288 -0
  585. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  586. package/dist/workbench/session-workbench-model.d.ts +168 -0
  587. package/dist/workbench/session-workbench-model.js +288 -0
  588. package/dist/workbench/session-workbench-model.js.map +1 -0
  589. package/dist/workbench/session-workbench-panes.cjs +580 -0
  590. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  591. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  592. package/dist/workbench/session-workbench-panes.js +580 -0
  593. package/dist/workbench/session-workbench-panes.js.map +1 -0
  594. package/dist/workbench/session-workspace-api.cjs +157 -0
  595. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  596. package/dist/workbench/session-workspace-api.d.ts +70 -0
  597. package/dist/workbench/session-workspace-api.js +157 -0
  598. package/dist/workbench/session-workspace-api.js.map +1 -0
  599. package/dist/workbench/use-session-workspace.cjs +100 -0
  600. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  601. package/dist/workbench/use-session-workspace.d.ts +45 -0
  602. package/dist/workbench/use-session-workspace.js +100 -0
  603. package/dist/workbench/use-session-workspace.js.map +1 -0
  604. package/dist/workbench/workbench-layout-context.cjs +10 -0
  605. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  606. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  607. package/dist/workbench/workbench-layout-context.js +10 -0
  608. package/dist/workbench/workbench-layout-context.js.map +1 -0
  609. package/package.json +20 -9
  610. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  611. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  612. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  613. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  614. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  615. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  616. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  617. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  618. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  619. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  620. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  621. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  622. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  623. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  624. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  625. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  626. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  627. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  628. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  629. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  630. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  631. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  632. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  633. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  634. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  635. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  636. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  637. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  638. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  639. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  640. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  641. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  642. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  643. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  644. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  645. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  646. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  647. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  648. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  649. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  650. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  651. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  652. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  653. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  654. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  655. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  656. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  657. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  658. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  659. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  660. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  661. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  662. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  663. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  664. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  665. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  666. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  667. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  668. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  669. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  670. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  671. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  672. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  673. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  704. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  705. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  706. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  707. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  708. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  709. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  710. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  711. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  712. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  713. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  714. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  715. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  716. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  717. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  718. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  719. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  720. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  721. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  722. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  723. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  724. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  725. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  726. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  727. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  728. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  729. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  730. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  731. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  732. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  733. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  734. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  735. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  736. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  737. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  738. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  739. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  740. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  741. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  742. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  743. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  744. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  745. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  746. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  747. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  748. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  749. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  750. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.cjs +0 -0
  751. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.js +0 -0
  752. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  753. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  754. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  755. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  756. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  757. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  758. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  759. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  760. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  761. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
@@ -0,0 +1,289 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { CheckCheckIcon, BellIcon, MailOpenIcon, MailIcon, XIcon } from "lucide-react";
3
+ import { useMutation } from "@tanstack/react-query";
4
+ import { useContext, useState, useMemo } from "react";
5
+ import { useAthenaQueryClient } from "../lib/use-athena-rest-query.js";
6
+ import { withCredentialRenewal } from "../runtime/credential-renewal.js";
7
+ import { Popover, PopoverTrigger, PopoverContent } from "../ui/popover.js";
8
+ import { dismissThreadFromInbox } from "./api.js";
9
+ import { SessionListSkeleton } from "./SessionList.js";
10
+ import { relativeTime } from "./session-list-model.js";
11
+ import { FOCUS_RING_CLASS, StatusChip, RowIconButton } from "./session-row-parts.js";
12
+ import { inboxStateChip, plainExcerpt } from "./sessions-page-model.js";
13
+ import { useAthenaStatewireThreadList, AthenaSessionsLiveContext } from "./statewire-thread-list.js";
14
+ import { useAthenaSessions } from "./use-athena-sessions.js";
15
+ import { cn } from "cnfast";
16
+ const INBOX_QUERY = { createdByMe: true, excludeDismissed: true };
17
+ const INBOX_UNREAD_QUERY = { ...INBOX_QUERY, unreadOnly: true };
18
+ const INBOX_PAGE_SIZE = 50;
19
+ function useAthenaInboxUnreadCount() {
20
+ const unread = useAthenaSessions({ query: INBOX_UNREAD_QUERY, pageSize: INBOX_PAGE_SIZE });
21
+ const count = unread.rows.length;
22
+ const hasMore = unread.hasNextPage;
23
+ return {
24
+ count,
25
+ hasMore,
26
+ label: count === 0 ? "" : `${count}${hasMore ? "+" : ""}`,
27
+ isAvailable: unread.isAvailable
28
+ };
29
+ }
30
+ function useInboxDismiss(refresh) {
31
+ const live = useContext(AthenaSessionsLiveContext);
32
+ const queryClient = useAthenaQueryClient();
33
+ const [hidden, setHidden] = useState(() => /* @__PURE__ */ new Set());
34
+ const mutation = useMutation(
35
+ {
36
+ mutationKey: ["athena-sdk", "inbox-dismiss", (live == null ? void 0 : live.backendUrl) ?? "", (live == null ? void 0 : live.principal) ?? ""],
37
+ mutationFn: async (threadId) => {
38
+ if (!live) throw new Error("[AthenaSDK] The inbox needs enableThreadList.");
39
+ return withCredentialRenewal(
40
+ live.getAuth,
41
+ (auth) => dismissThreadFromInbox(live.backendUrl, auth, { threadId, dismissed: true })
42
+ );
43
+ },
44
+ onMutate: (threadId) => setHidden((current) => new Set(current).add(threadId)),
45
+ // The local hide only bridges the write and the refresh after it: once
46
+ // the inbox has re-read, the server decides — a dismissed session comes
47
+ // back with its next message, and a failed dismiss shows it again.
48
+ onSettled: async (_result, _error, threadId) => {
49
+ try {
50
+ await refresh();
51
+ } finally {
52
+ setHidden((current) => {
53
+ if (!current.has(threadId)) return current;
54
+ const next = new Set(current);
55
+ next.delete(threadId);
56
+ return next;
57
+ });
58
+ }
59
+ }
60
+ },
61
+ queryClient
62
+ );
63
+ return { hidden, dismiss: mutation.mutate, pending: mutation.isPending };
64
+ }
65
+ const InboxRow = ({ row, isActive, list, onOpen, onDismiss }) => {
66
+ const chip = inboxStateChip(row);
67
+ const excerpt = plainExcerpt(row.preview);
68
+ return /* @__PURE__ */ jsxs(
69
+ "li",
70
+ {
71
+ "data-thread-id": row.id,
72
+ "data-unread": row.isUnread || void 0,
73
+ className: cn(
74
+ "group relative flex items-start gap-2 rounded-lg transition-colors hover:bg-muted/40",
75
+ isActive && "bg-muted"
76
+ ),
77
+ children: [
78
+ /* @__PURE__ */ jsxs(
79
+ "button",
80
+ {
81
+ type: "button",
82
+ onClick: () => onOpen(row),
83
+ className: cn("flex min-w-0 flex-1 items-start gap-2 rounded-lg p-2 pl-2.5 text-left", FOCUS_RING_CLASS),
84
+ children: [
85
+ /* @__PURE__ */ jsx(
86
+ "span",
87
+ {
88
+ role: row.isUnread ? "img" : void 0,
89
+ "aria-label": row.isUnread ? "Unread" : void 0,
90
+ "aria-hidden": row.isUnread ? void 0 : true,
91
+ className: cn("mt-1.5 size-2 shrink-0 rounded-full", row.isUnread ? "bg-primary" : "bg-transparent")
92
+ }
93
+ ),
94
+ /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
95
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
96
+ /* @__PURE__ */ jsx(
97
+ "span",
98
+ {
99
+ "data-title": true,
100
+ className: cn("min-w-0 flex-1 truncate text-foreground text-sm", row.isUnread ? "font-semibold" : "font-medium"),
101
+ children: row.title ?? "Untitled"
102
+ }
103
+ ),
104
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 text-[11px] text-muted-foreground", children: relativeTime(row.updatedAt) })
105
+ ] }),
106
+ excerpt ? /* @__PURE__ */ jsx("span", { "data-excerpt": true, className: "mt-0.5 line-clamp-2 break-words text-muted-foreground text-xs", children: excerpt }) : null,
107
+ /* @__PURE__ */ jsx("span", { className: "mt-1 flex", children: /* @__PURE__ */ jsx(StatusChip, { label: chip.label, tone: chip.tone, detail: row.nextAction }) })
108
+ ] })
109
+ ]
110
+ }
111
+ ),
112
+ /* @__PURE__ */ jsxs("div", { "data-row-actions": true, className: "flex shrink-0 items-center gap-0.5 py-2 pr-2", children: [
113
+ /* @__PURE__ */ jsx(
114
+ RowIconButton,
115
+ {
116
+ label: row.isUnread ? "Mark read" : "Mark unread",
117
+ action: "read-state",
118
+ pending: list.readStatePendingThreadIds.has(row.id),
119
+ onClick: () => list.setReadState({ threadId: row.id, isUnread: !row.isUnread, updatedAt: row.updatedAt }),
120
+ children: row.isUnread ? /* @__PURE__ */ jsx(MailOpenIcon, { className: "size-3.5", "aria-hidden": true }) : /* @__PURE__ */ jsx(MailIcon, { className: "size-3.5", "aria-hidden": true })
121
+ }
122
+ ),
123
+ onDismiss ? /* @__PURE__ */ jsx(RowIconButton, { label: "Dismiss from inbox", action: "dismiss", onClick: () => onDismiss(row.id), children: /* @__PURE__ */ jsx(XIcon, { className: "size-3.5", "aria-hidden": true }) }) : null
124
+ ] })
125
+ ]
126
+ }
127
+ );
128
+ };
129
+ function InboxBody({
130
+ className,
131
+ title = "Inbox",
132
+ defaultTab = "all",
133
+ onOpenSession,
134
+ list
135
+ }) {
136
+ var _a;
137
+ const [tab, setTab] = useState(defaultTab);
138
+ const all = useAthenaSessions({ query: INBOX_QUERY, pageSize: INBOX_PAGE_SIZE });
139
+ const unread = useAthenaSessions({ query: INBOX_UNREAD_QUERY, pageSize: INBOX_PAGE_SIZE });
140
+ const shown = tab === "unread" ? unread : all;
141
+ const refreshBoth = async () => {
142
+ await Promise.all([all.refresh(), unread.refresh()]);
143
+ };
144
+ const dismissal = useInboxDismiss(refreshBoth);
145
+ const canDismiss = ((_a = shown.supportedFilters) == null ? void 0 : _a.has("exclude_dismissed")) ?? false;
146
+ const rows = useMemo(
147
+ () => shown.rows.filter((row) => !dismissal.hidden.has(row.id)),
148
+ [shown.rows, dismissal.hidden]
149
+ );
150
+ const unreadRows = unread.rows.filter((row) => !dismissal.hidden.has(row.id));
151
+ const unreadLabel = `${unreadRows.length}${unread.hasNextPage ? "+" : ""}`;
152
+ const allLabel = `${all.rows.filter((row) => !dismissal.hidden.has(row.id)).length}${all.hasNextPage ? "+" : ""}`;
153
+ const open = (row) => {
154
+ list.selectThread(row.id);
155
+ if (row.isUnread) {
156
+ list.setReadState({ threadId: row.id, isUnread: false, updatedAt: row.updatedAt });
157
+ }
158
+ onOpenSession == null ? void 0 : onOpenSession({ threadId: row.id, title: row.title });
159
+ };
160
+ const markAllRead = () => {
161
+ for (const row of unreadRows) {
162
+ list.setReadState({ threadId: row.id, isUnread: false, updatedAt: row.updatedAt });
163
+ }
164
+ };
165
+ const showSkeleton = rows.length === 0 && (!shown.hasResolvedFirstPage || shown.isFetching);
166
+ const notice = shown.unavailableFields.length > 0 ? "This Athena server cannot narrow the inbox to your own, undismissed sessions yet, so it lists every session you can see." : null;
167
+ const tabClass = (active) => cn(
168
+ "inline-flex h-7 items-center gap-1.5 rounded-md px-2.5 font-medium text-xs transition-colors",
169
+ active ? "bg-muted text-foreground" : "text-muted-foreground hover:text-foreground",
170
+ FOCUS_RING_CLASS
171
+ );
172
+ return /* @__PURE__ */ jsxs("div", { "data-testid": "inbox", className: cn("athena-sdk-chrome flex min-h-0 flex-col gap-2", className), children: [
173
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-1", children: [
174
+ /* @__PURE__ */ jsx("h2", { className: "font-semibold text-foreground text-sm", children: title }),
175
+ /* @__PURE__ */ jsxs("div", { role: "tablist", "aria-label": "Inbox", className: "flex items-center gap-0.5", children: [
176
+ /* @__PURE__ */ jsxs("button", { type: "button", role: "tab", "aria-selected": tab === "all", onClick: () => setTab("all"), className: tabClass(tab === "all"), children: [
177
+ "All",
178
+ /* @__PURE__ */ jsx("span", { "data-testid": "inbox-all-count", className: "text-muted-foreground", children: allLabel })
179
+ ] }),
180
+ /* @__PURE__ */ jsxs("button", { type: "button", role: "tab", "aria-selected": tab === "unread", onClick: () => setTab("unread"), className: tabClass(tab === "unread"), children: [
181
+ "Unread",
182
+ /* @__PURE__ */ jsx("span", { "data-testid": "inbox-unread-count", className: "text-muted-foreground", children: unreadLabel })
183
+ ] })
184
+ ] }),
185
+ /* @__PURE__ */ jsx("div", { className: "flex-1" }),
186
+ /* @__PURE__ */ jsxs(
187
+ "button",
188
+ {
189
+ type: "button",
190
+ onClick: markAllRead,
191
+ disabled: unreadRows.length === 0,
192
+ className: cn(
193
+ "inline-flex h-7 items-center gap-1 rounded-md px-2 text-muted-foreground text-xs transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50",
194
+ FOCUS_RING_CLASS
195
+ ),
196
+ title: "Mark the loaded unread sessions read",
197
+ children: [
198
+ /* @__PURE__ */ jsx(CheckCheckIcon, { className: "size-3.5", "aria-hidden": true }),
199
+ "Mark all read"
200
+ ]
201
+ }
202
+ )
203
+ ] }),
204
+ notice ? /* @__PURE__ */ jsx("p", { role: "status", "data-testid": "inbox-degraded", className: "mx-1 rounded-md border border-amber-200 bg-amber-50 px-2.5 py-1.5 text-[11px] text-amber-900", children: notice }) : null,
205
+ /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto", children: [
206
+ showSkeleton ? /* @__PURE__ */ jsx(SessionListSkeleton, { rows: 4 }) : rows.length === 0 ? /* @__PURE__ */ jsx("p", { "data-testid": "inbox-empty", className: "px-3 py-8 text-center text-muted-foreground text-xs", children: tab === "unread" ? "You are all caught up." : "Nothing in your inbox." }) : /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-0.5", "aria-busy": shown.isFetching || void 0, children: rows.map((row) => /* @__PURE__ */ jsx(
207
+ InboxRow,
208
+ {
209
+ row,
210
+ isActive: row.id === list.activeThreadId,
211
+ list,
212
+ onOpen: open,
213
+ onDismiss: canDismiss ? dismissal.dismiss : null
214
+ },
215
+ row.id
216
+ )) }),
217
+ shown.hasNextPage && !showSkeleton ? /* @__PURE__ */ jsx(
218
+ "button",
219
+ {
220
+ type: "button",
221
+ onClick: shown.fetchNextPage,
222
+ disabled: shown.isFetchingNextPage,
223
+ className: cn("mt-1 w-full rounded-md py-2 text-muted-foreground text-xs transition-colors hover:bg-muted disabled:opacity-50", FOCUS_RING_CLASS),
224
+ children: shown.isFetchingNextPage ? "Loading…" : "Load more"
225
+ }
226
+ ) : null
227
+ ] })
228
+ ] });
229
+ }
230
+ function Inbox(props) {
231
+ const list = useAthenaStatewireThreadList();
232
+ const live = useContext(AthenaSessionsLiveContext);
233
+ if (!list || !live) return null;
234
+ return /* @__PURE__ */ jsx(InboxBody, { ...props, list });
235
+ }
236
+ function InboxButtonBody({ className, panelClassName, align = "end", onOpenSession, ...inboxProps }) {
237
+ const [open, setOpen] = useState(false);
238
+ const unread = useAthenaInboxUnreadCount();
239
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
240
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
241
+ "button",
242
+ {
243
+ type: "button",
244
+ "aria-label": unread.count > 0 ? `Inbox, ${unread.label} unread` : "Inbox",
245
+ "data-testid": "inbox-button",
246
+ className: cn(
247
+ "relative inline-flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
248
+ FOCUS_RING_CLASS,
249
+ className
250
+ ),
251
+ children: [
252
+ /* @__PURE__ */ jsx(BellIcon, { className: "size-4", "aria-hidden": true }),
253
+ unread.count > 0 ? /* @__PURE__ */ jsx(
254
+ "span",
255
+ {
256
+ "data-testid": "inbox-badge",
257
+ className: "absolute -top-0.5 -right-0.5 flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 font-semibold text-[10px] text-primary-foreground leading-none",
258
+ children: unread.label
259
+ }
260
+ ) : null
261
+ ]
262
+ }
263
+ ) }),
264
+ /* @__PURE__ */ jsx(PopoverContent, { align, className: cn("flex max-h-[70vh] w-96 flex-col p-2", panelClassName), children: /* @__PURE__ */ jsx(
265
+ Inbox,
266
+ {
267
+ ...inboxProps,
268
+ onOpenSession: (target) => {
269
+ setOpen(false);
270
+ onOpenSession == null ? void 0 : onOpenSession(target);
271
+ }
272
+ }
273
+ ) })
274
+ ] });
275
+ }
276
+ function InboxButton(props) {
277
+ const live = useContext(AthenaSessionsLiveContext);
278
+ if (!live) return null;
279
+ return /* @__PURE__ */ jsx(InboxButtonBody, { ...props });
280
+ }
281
+ export {
282
+ INBOX_PAGE_SIZE,
283
+ INBOX_QUERY,
284
+ INBOX_UNREAD_QUERY,
285
+ Inbox,
286
+ InboxButton,
287
+ useAthenaInboxUnreadCount
288
+ };
289
+ //# sourceMappingURL=Inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inbox.js","sources":["../../src/threads/Inbox.tsx"],"sourcesContent":["/**\n * `Inbox` and `InboxButton` — the Devin-style notifications inbox over the\n * session list, with no endpoint of its own:\n *\n * - **What is in it.** The viewer's own sessions, newest activity first, minus\n * the ones dismissed from the inbox — the same set Athena's inbox shows —\n * read through `POST /api/conversations/threads/list` with\n * `created_by_me` + `exclude_dismissed` (+ `unread_only` for the Unread\n * tab). Each row is the session's title, its latest message, a state chip\n * (Needs you / Working / PR merged / Answered …) and an unread dot.\n * - **Live.** The rows fold the per-user conversation index like every other\n * list under the provider, so a session flipping to \"needs you\" or getting\n * a new message moves in place.\n * - **Writes.** Opening a row (or \"Mark read\") stores the read receipt through\n * `POST /api/conversations/threads/read-state`; \"Dismiss\" uses\n * `POST /api/conversations/threads/notifications/dismiss` (EDIT on the\n * session — a dismissed session comes back with its next message).\n * - **Counts.** The unread badge counts the unread page (50 rows); past that\n * it reads `50+`.\n *\n * Renders nothing outside `<AthenaProvider enableThreadList>`.\n */\nimport { BellIcon, CheckCheckIcon, MailIcon, MailOpenIcon, XIcon } from 'lucide-react';\nimport { useMutation } from '@tanstack/react-query';\nimport type { FC } from 'react';\nimport { useContext, useMemo, useState } from 'react';\nimport { cn } from '../lib/utils';\nimport { useAthenaQueryClient } from '../lib/use-athena-rest-query';\nimport { withCredentialRenewal } from '../runtime/credential-renewal';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\nimport { dismissThreadFromInbox } from './api';\nimport { SessionListSkeleton, type SessionOpenTarget } from './SessionList';\nimport { relativeTime } from './session-list-model';\nimport { FOCUS_RING_CLASS, RowIconButton, StatusChip } from './session-row-parts';\nimport { inboxStateChip, plainExcerpt } from './sessions-page-model';\nimport type { AthenaSessionsQuery } from './sessions-query';\nimport {\n AthenaSessionsLiveContext,\n type AthenaStatewireThreadListState,\n type AthenaStatewireThreadSummary,\n useAthenaStatewireThreadList,\n} from './statewire-thread-list';\nimport { type AthenaSessionsList, useAthenaSessions } from './use-athena-sessions';\n\n/** The inbox's sessions: the viewer's own, not dismissed, newest activity first. */\nexport const INBOX_QUERY: AthenaSessionsQuery = { createdByMe: true, excludeDismissed: true };\n/** The Unread tab, and what the badge counts. */\nexport const INBOX_UNREAD_QUERY: AthenaSessionsQuery = { ...INBOX_QUERY, unreadOnly: true };\n\n/** Rows per inbox page — and the badge's ceiling before it reads `50+`. */\nexport const INBOX_PAGE_SIZE = 50;\n\nexport type InboxTab = 'all' | 'unread';\n\nexport interface AthenaInboxUnreadCount {\n /** Unread sessions loaded (at most one page). */\n count: number;\n /** More unread sessions exist beyond `count`. */\n hasMore: boolean;\n /** `count` with `+` when there are more, `''` for none. */\n label: string;\n isAvailable: boolean;\n}\n\n/** The unread count the inbox badge shows; shares the Unread tab's cache. */\nexport function useAthenaInboxUnreadCount(): AthenaInboxUnreadCount {\n const unread = useAthenaSessions({ query: INBOX_UNREAD_QUERY, pageSize: INBOX_PAGE_SIZE });\n const count = unread.rows.length;\n const hasMore = unread.hasNextPage;\n return {\n count,\n hasMore,\n label: count === 0 ? '' : `${count}${hasMore ? '+' : ''}`,\n isAvailable: unread.isAvailable,\n };\n}\n\n/** Dismiss from the inbox: hidden at once, back on failure, the inbox lists refreshed after. */\nfunction useInboxDismiss(refresh: () => Promise<void>) {\n const live = useContext(AthenaSessionsLiveContext);\n const queryClient = useAthenaQueryClient();\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n const mutation = useMutation(\n {\n mutationKey: ['athena-sdk', 'inbox-dismiss', live?.backendUrl ?? '', live?.principal ?? ''],\n mutationFn: async (threadId: string) => {\n if (!live) throw new Error('[AthenaSDK] The inbox needs enableThreadList.');\n return withCredentialRenewal(live.getAuth, (auth) =>\n dismissThreadFromInbox(live.backendUrl, auth, { threadId, dismissed: true }),\n );\n },\n onMutate: (threadId) => setHidden((current) => new Set(current).add(threadId)),\n // The local hide only bridges the write and the refresh after it: once\n // the inbox has re-read, the server decides — a dismissed session comes\n // back with its next message, and a failed dismiss shows it again.\n onSettled: async (_result, _error, threadId) => {\n try {\n await refresh();\n } finally {\n setHidden((current) => {\n if (!current.has(threadId)) return current;\n const next = new Set(current);\n next.delete(threadId);\n return next;\n });\n }\n },\n },\n queryClient,\n );\n return { hidden, dismiss: mutation.mutate, pending: mutation.isPending };\n}\n\nconst InboxRow: FC<{\n row: AthenaStatewireThreadSummary;\n isActive: boolean;\n list: AthenaStatewireThreadListState;\n onOpen: (row: AthenaStatewireThreadSummary) => void;\n onDismiss: ((threadId: string) => void) | null;\n}> = ({ row, isActive, list, onOpen, onDismiss }) => {\n const chip = inboxStateChip(row);\n const excerpt = plainExcerpt(row.preview);\n return (\n <li\n data-thread-id={row.id}\n data-unread={row.isUnread || undefined}\n className={cn(\n 'group relative flex items-start gap-2 rounded-lg transition-colors hover:bg-muted/40',\n isActive && 'bg-muted',\n )}\n >\n <button\n type=\"button\"\n onClick={() => onOpen(row)}\n className={cn('flex min-w-0 flex-1 items-start gap-2 rounded-lg p-2 pl-2.5 text-left', FOCUS_RING_CLASS)}\n >\n <span\n role={row.isUnread ? 'img' : undefined}\n aria-label={row.isUnread ? 'Unread' : undefined}\n aria-hidden={row.isUnread ? undefined : true}\n className={cn('mt-1.5 size-2 shrink-0 rounded-full', row.isUnread ? 'bg-primary' : 'bg-transparent')}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex items-center gap-2\">\n <span\n data-title\n className={cn('min-w-0 flex-1 truncate text-foreground text-sm', row.isUnread ? 'font-semibold' : 'font-medium')}\n >\n {row.title ?? 'Untitled'}\n </span>\n <span className=\"shrink-0 text-[11px] text-muted-foreground\">{relativeTime(row.updatedAt)}</span>\n </span>\n {excerpt ? (\n <span data-excerpt className=\"mt-0.5 line-clamp-2 break-words text-muted-foreground text-xs\">\n {excerpt}\n </span>\n ) : null}\n <span className=\"mt-1 flex\">\n <StatusChip label={chip.label} tone={chip.tone} detail={row.nextAction} />\n </span>\n </span>\n </button>\n <div data-row-actions className=\"flex shrink-0 items-center gap-0.5 py-2 pr-2\">\n <RowIconButton\n label={row.isUnread ? 'Mark read' : 'Mark unread'}\n action=\"read-state\"\n pending={list.readStatePendingThreadIds.has(row.id)}\n onClick={() =>\n list.setReadState({ threadId: row.id, isUnread: !row.isUnread, updatedAt: row.updatedAt })\n }\n >\n {row.isUnread ? <MailOpenIcon className=\"size-3.5\" aria-hidden /> : <MailIcon className=\"size-3.5\" aria-hidden />}\n </RowIconButton>\n {onDismiss ? (\n <RowIconButton label=\"Dismiss from inbox\" action=\"dismiss\" onClick={() => onDismiss(row.id)}>\n <XIcon className=\"size-3.5\" aria-hidden />\n </RowIconButton>\n ) : null}\n </div>\n </li>\n );\n};\n\nexport interface InboxProps {\n className?: string;\n /** Heading (default \"Inbox\"). */\n title?: string;\n /** The tab it opens on (default `all`). */\n defaultTab?: InboxTab;\n /** Called after a row is opened (selected and marked read), so a host can show its chat. */\n onOpenSession?: (target: SessionOpenTarget) => void;\n}\n\nfunction InboxBody({\n className,\n title = 'Inbox',\n defaultTab = 'all',\n onOpenSession,\n list,\n}: InboxProps & { list: AthenaStatewireThreadListState }) {\n const [tab, setTab] = useState<InboxTab>(defaultTab);\n const all = useAthenaSessions({ query: INBOX_QUERY, pageSize: INBOX_PAGE_SIZE });\n const unread = useAthenaSessions({ query: INBOX_UNREAD_QUERY, pageSize: INBOX_PAGE_SIZE });\n const shown: AthenaSessionsList = tab === 'unread' ? unread : all;\n const refreshBoth = async () => {\n await Promise.all([all.refresh(), unread.refresh()]);\n };\n const dismissal = useInboxDismiss(refreshBoth);\n // Dismissal is only offered where the server can leave dismissed sessions\n // out of the inbox; elsewhere a dismissed row would stay in the list.\n const canDismiss = shown.supportedFilters?.has('exclude_dismissed') ?? false;\n const rows = useMemo(\n () => shown.rows.filter((row) => !dismissal.hidden.has(row.id)),\n [shown.rows, dismissal.hidden],\n );\n const unreadRows = unread.rows.filter((row) => !dismissal.hidden.has(row.id));\n const unreadLabel = `${unreadRows.length}${unread.hasNextPage ? '+' : ''}`;\n const allLabel = `${all.rows.filter((row) => !dismissal.hidden.has(row.id)).length}${all.hasNextPage ? '+' : ''}`;\n\n const open = (row: AthenaStatewireThreadSummary) => {\n list.selectThread(row.id);\n if (row.isUnread) {\n list.setReadState({ threadId: row.id, isUnread: false, updatedAt: row.updatedAt });\n }\n onOpenSession?.({ threadId: row.id, title: row.title });\n };\n const markAllRead = () => {\n for (const row of unreadRows) {\n list.setReadState({ threadId: row.id, isUnread: false, updatedAt: row.updatedAt });\n }\n };\n const showSkeleton = rows.length === 0 && (!shown.hasResolvedFirstPage || shown.isFetching);\n const notice =\n shown.unavailableFields.length > 0\n ? 'This Athena server cannot narrow the inbox to your own, undismissed sessions yet, so it lists every session you can see.'\n : null;\n\n const tabClass = (active: boolean) =>\n cn(\n 'inline-flex h-7 items-center gap-1.5 rounded-md px-2.5 font-medium text-xs transition-colors',\n active ? 'bg-muted text-foreground' : 'text-muted-foreground hover:text-foreground',\n FOCUS_RING_CLASS,\n );\n\n return (\n <div data-testid=\"inbox\" className={cn('athena-sdk-chrome flex min-h-0 flex-col gap-2', className)}>\n <div className=\"flex items-center gap-2 px-1\">\n <h2 className=\"font-semibold text-foreground text-sm\">{title}</h2>\n <div role=\"tablist\" aria-label=\"Inbox\" className=\"flex items-center gap-0.5\">\n <button type=\"button\" role=\"tab\" aria-selected={tab === 'all'} onClick={() => setTab('all')} className={tabClass(tab === 'all')}>\n All\n <span data-testid=\"inbox-all-count\" className=\"text-muted-foreground\">\n {allLabel}\n </span>\n </button>\n <button type=\"button\" role=\"tab\" aria-selected={tab === 'unread'} onClick={() => setTab('unread')} className={tabClass(tab === 'unread')}>\n Unread\n <span data-testid=\"inbox-unread-count\" className=\"text-muted-foreground\">\n {unreadLabel}\n </span>\n </button>\n </div>\n <div className=\"flex-1\" />\n <button\n type=\"button\"\n onClick={markAllRead}\n disabled={unreadRows.length === 0}\n className={cn(\n 'inline-flex h-7 items-center gap-1 rounded-md px-2 text-muted-foreground text-xs transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50',\n FOCUS_RING_CLASS,\n )}\n title=\"Mark the loaded unread sessions read\"\n >\n <CheckCheckIcon className=\"size-3.5\" aria-hidden />\n Mark all read\n </button>\n </div>\n {notice ? (\n <p role=\"status\" data-testid=\"inbox-degraded\" className=\"mx-1 rounded-md border border-amber-200 bg-amber-50 px-2.5 py-1.5 text-[11px] text-amber-900\">\n {notice}\n </p>\n ) : null}\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n {showSkeleton ? (\n <SessionListSkeleton rows={4} />\n ) : rows.length === 0 ? (\n <p data-testid=\"inbox-empty\" className=\"px-3 py-8 text-center text-muted-foreground text-xs\">\n {tab === 'unread' ? 'You are all caught up.' : 'Nothing in your inbox.'}\n </p>\n ) : (\n <ul className=\"flex flex-col gap-0.5\" aria-busy={shown.isFetching || undefined}>\n {rows.map((row) => (\n <InboxRow\n key={row.id}\n row={row}\n isActive={row.id === list.activeThreadId}\n list={list}\n onOpen={open}\n onDismiss={canDismiss ? dismissal.dismiss : null}\n />\n ))}\n </ul>\n )}\n {shown.hasNextPage && !showSkeleton ? (\n <button\n type=\"button\"\n onClick={shown.fetchNextPage}\n disabled={shown.isFetchingNextPage}\n className={cn('mt-1 w-full rounded-md py-2 text-muted-foreground text-xs transition-colors hover:bg-muted disabled:opacity-50', FOCUS_RING_CLASS)}\n >\n {shown.isFetchingNextPage ? 'Loading…' : 'Load more'}\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\n/**\n * The notifications inbox: All / Unread tabs with counts, rows of title,\n * latest message, state chip and unread dot, mark read / mark all read and\n * dismiss. Renders nothing outside `<AthenaProvider enableThreadList>`.\n */\nexport function Inbox(props: InboxProps) {\n const list = useAthenaStatewireThreadList();\n const live = useContext(AthenaSessionsLiveContext);\n if (!list || !live) return null;\n return <InboxBody {...props} list={list} />;\n}\n\nexport interface InboxButtonProps extends Omit<InboxProps, 'className'> {\n className?: string;\n /** Classes for the popover panel. */\n panelClassName?: string;\n align?: 'start' | 'center' | 'end';\n}\n\nfunction InboxButtonBody({ className, panelClassName, align = 'end', onOpenSession, ...inboxProps }: InboxButtonProps) {\n const [open, setOpen] = useState(false);\n const unread = useAthenaInboxUnreadCount();\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-label={unread.count > 0 ? `Inbox, ${unread.label} unread` : 'Inbox'}\n data-testid=\"inbox-button\"\n className={cn(\n 'relative inline-flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground',\n FOCUS_RING_CLASS,\n className,\n )}\n >\n <BellIcon className=\"size-4\" aria-hidden />\n {unread.count > 0 ? (\n <span\n data-testid=\"inbox-badge\"\n className=\"absolute -top-0.5 -right-0.5 flex h-4 min-w-4 items-center justify-center rounded-full bg-primary px-1 font-semibold text-[10px] text-primary-foreground leading-none\"\n >\n {unread.label}\n </span>\n ) : null}\n </button>\n </PopoverTrigger>\n <PopoverContent align={align} className={cn('flex max-h-[70vh] w-96 flex-col p-2', panelClassName)}>\n <Inbox\n {...inboxProps}\n onOpenSession={(target) => {\n setOpen(false);\n onOpenSession?.(target);\n }}\n />\n </PopoverContent>\n </Popover>\n );\n}\n\n/**\n * A bell with the unread count that opens `Inbox` in a popover. Renders\n * nothing outside `<AthenaProvider enableThreadList>`.\n */\nexport function InboxButton(props: InboxButtonProps) {\n const live = useContext(AthenaSessionsLiveContext);\n if (!live) return null;\n return <InboxButtonBody {...props} />;\n}\n"],"names":[],"mappings":"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"}
@@ -3,9 +3,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const lucideReact = require("lucide-react");
5
5
  const react = require("react");
6
- const popover = require("../ui/popover.cjs");
7
6
  const api = require("./api.cjs");
8
7
  const sessionListModel = require("./session-list-model.cjs");
8
+ const sessionRowParts = require("./session-row-parts.cjs");
9
9
  const statewireThreadList = require("./statewire-thread-list.cjs");
10
10
  const threadPrefetcher = require("./thread-prefetcher.cjs");
11
11
  const cnfast = require("cnfast");
@@ -65,115 +65,6 @@ const LINE_TONE_CLASS = {
65
65
  error: "text-red-600",
66
66
  muted: "text-muted-foreground"
67
67
  };
68
- const PR_STATE_ICON = {
69
- open: lucideReact.GitPullRequestIcon,
70
- draft: lucideReact.GitPullRequestDraftIcon,
71
- merged: lucideReact.GitMergeIcon,
72
- closed: lucideReact.GitPullRequestClosedIcon
73
- };
74
- const PR_STATE_CLASS = {
75
- open: "text-green-600",
76
- draft: "text-muted-foreground",
77
- merged: "text-violet-600",
78
- closed: "text-red-600"
79
- };
80
- const FOCUS_RING_CLASS = "outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-0";
81
- const stopPropagation = (event) => event.stopPropagation();
82
- const PR_CHECKS_LABEL = {
83
- SUCCESS: "checks passed",
84
- FAILURE: "checks failing",
85
- PENDING: "checks running",
86
- NONE: ""
87
- };
88
- const PR_CHIP_CLASS = "inline-flex h-4 shrink-0 items-center gap-1 rounded-full border border-border/60 px-1.5 font-medium text-[11px] leading-none transition-colors hover:bg-muted";
89
- const PullRequestListRow = ({
90
- pullRequest,
91
- showRepo
92
- }) => {
93
- const state = sessionListModel.pullRequestChipState(pullRequest);
94
- const Icon = PR_STATE_ICON[state];
95
- const meta = [
96
- showRepo ? `${pullRequest.repoFullName} #${pullRequest.number}` : `#${pullRequest.number}`,
97
- state,
98
- PR_CHECKS_LABEL[pullRequest.checksState]
99
- ].filter(Boolean).join(" · ");
100
- return /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
101
- "a",
102
- {
103
- href: pullRequest.url,
104
- target: "_blank",
105
- rel: "noopener noreferrer",
106
- "data-pr-state": state,
107
- className: cnfast.cn(
108
- "flex items-start gap-2 rounded-sm px-2 py-1.5 text-xs transition-colors hover:bg-muted",
109
- FOCUS_RING_CLASS
110
- ),
111
- children: [
112
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: cnfast.cn("mt-0.5 size-3.5 shrink-0", PR_STATE_CLASS[state]), "aria-hidden": true }),
113
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 flex-1", children: [
114
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-foreground", children: pullRequest.title || `#${pullRequest.number}` }),
115
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block truncate text-muted-foreground", children: meta })
116
- ] })
117
- ]
118
- }
119
- ) });
120
- };
121
- const PullRequestChip = ({ chip, pullRequests }) => {
122
- var _a;
123
- const Icon = PR_STATE_ICON[chip.state];
124
- if (chip.count === 1) {
125
- return /* @__PURE__ */ jsxRuntime.jsxs(
126
- "a",
127
- {
128
- href: chip.url,
129
- target: "_blank",
130
- rel: "noopener noreferrer",
131
- onClick: stopPropagation,
132
- title: chip.title,
133
- "aria-label": `Pull request ${chip.label}, ${chip.state}`,
134
- "data-pr-state": chip.state,
135
- "data-pr-count": chip.count,
136
- className: cnfast.cn(PR_CHIP_CLASS, FOCUS_RING_CLASS, PR_STATE_CLASS[chip.state]),
137
- children: [
138
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-3", "aria-hidden": true }),
139
- chip.label
140
- ]
141
- }
142
- );
143
- }
144
- const listLabel = `${chip.count} pull requests`;
145
- const ordered = sessionListModel.orderedPullRequests(pullRequests);
146
- const repositories = new Set(ordered.map((pullRequest) => pullRequest.repoFullName));
147
- const sharedRepository = repositories.size === 1 ? ((_a = ordered[0]) == null ? void 0 : _a.repoFullName) ?? null : null;
148
- return /* @__PURE__ */ jsxRuntime.jsxs(popover.Popover, { children: [
149
- /* @__PURE__ */ jsxRuntime.jsx(popover.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
150
- "button",
151
- {
152
- type: "button",
153
- onClick: stopPropagation,
154
- "aria-label": `${chip.label}: show all ${listLabel}`,
155
- "data-pr-state": chip.state,
156
- "data-pr-count": chip.count,
157
- className: cnfast.cn(PR_CHIP_CLASS, FOCUS_RING_CLASS, PR_STATE_CLASS[chip.state]),
158
- children: [
159
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { className: "size-3", "aria-hidden": true }),
160
- chip.label
161
- ]
162
- }
163
- ) }),
164
- /* @__PURE__ */ jsxRuntime.jsxs(popover.PopoverContent, { align: "end", className: "w-80 p-0", "aria-label": listLabel, "data-pr-list": "", children: [
165
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate border-b border-border px-3 py-2 font-medium text-muted-foreground text-xs", children: sharedRepository ? `${listLabel} in ${sharedRepository}` : listLabel }),
166
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "max-h-72 overflow-y-auto p-1", children: ordered.map((pullRequest) => /* @__PURE__ */ jsxRuntime.jsx(
167
- PullRequestListRow,
168
- {
169
- pullRequest,
170
- showRepo: sharedRepository === null
171
- },
172
- `${pullRequest.repoFullName}#${pullRequest.number}`
173
- )) })
174
- ] })
175
- ] });
176
- };
177
68
  const RowActionButton = ({ label, onClick, pending, alwaysVisible, action, pressed, children }) => /* @__PURE__ */ jsxRuntime.jsx(
178
69
  "button",
179
70
  {
@@ -188,7 +79,7 @@ const RowActionButton = ({ label, onClick, pending, alwaysVisible, action, press
188
79
  "data-pending": pending || void 0,
189
80
  className: cnfast.cn(
190
81
  "rounded p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:cursor-wait disabled:opacity-60",
191
- FOCUS_RING_CLASS,
82
+ sessionRowParts.FOCUS_RING_CLASS,
192
83
  !alwaysVisible && !pending && "opacity-0 focus-visible:opacity-100 group-focus-within:opacity-100 group-hover:opacity-100"
193
84
  ),
194
85
  children
@@ -250,12 +141,14 @@ const SessionRow = ({
250
141
  onRename,
251
142
  renamePending,
252
143
  onArchive,
253
- archivePending
144
+ archivePending,
145
+ onOpenInNewTab,
146
+ originBadges
254
147
  }) => {
255
148
  const indicator = sessionListModel.sessionIndicator(thread);
256
149
  const line = sessionListModel.sessionSecondaryLine(thread);
257
150
  const chip = sessionListModel.pullRequestChip(thread.pullRequests);
258
- const origin = sessionListModel.sessionOriginLabel(thread);
151
+ const origin = sessionListModel.sessionOriginBadge(thread, originBadges);
259
152
  const title = thread.title ?? "Untitled";
260
153
  const hoverTimerRef = react.useRef(null);
261
154
  const cancelHover = react.useCallback(() => {
@@ -320,7 +213,22 @@ const SessionRow = ({
320
213
  if (archivePending) return;
321
214
  onArchive == null ? void 0 : onArchive(thread.id);
322
215
  };
323
- const hasActions = Boolean(onRename || onToggleFavorite || onArchive);
216
+ const openInNewTab = (event) => {
217
+ event.preventDefault();
218
+ event.stopPropagation();
219
+ onOpenInNewTab == null ? void 0 : onOpenInNewTab({ threadId: thread.id, title: thread.title });
220
+ };
221
+ const handleRowClick = (event) => {
222
+ if (onOpenInNewTab && (event.metaKey || event.ctrlKey)) {
223
+ openInNewTab(event);
224
+ return;
225
+ }
226
+ onSelect(thread.id);
227
+ };
228
+ const handleRowAuxClick = (event) => {
229
+ if (onOpenInNewTab && event.button === 1) openInNewTab(event);
230
+ };
231
+ const hasActions = Boolean(onRename || onToggleFavorite || onArchive || onOpenInNewTab);
324
232
  const body = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
325
233
  /* @__PURE__ */ jsxRuntime.jsx(SessionStatusIndicator, { kind: indicator }),
326
234
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "min-w-0 flex-1", children: [
@@ -337,10 +245,10 @@ const SessionRow = ({
337
245
  onChange: (event) => setDraft(event.target.value),
338
246
  onKeyDown: handleEditorKeyDown,
339
247
  onBlur: commitRename,
340
- onClick: stopPropagation,
248
+ onClick: sessionRowParts.stopPropagation,
341
249
  className: cnfast.cn(
342
250
  "h-5 min-w-0 flex-1 rounded border border-primary/60 bg-background px-1 font-medium text-foreground text-sm",
343
- FOCUS_RING_CLASS
251
+ sessionRowParts.FOCUS_RING_CLASS
344
252
  )
345
253
  }
346
254
  ) : /* @__PURE__ */ jsxRuntime.jsx("span", { "data-title": true, className: "min-w-0 truncate font-medium text-sm", children: title }),
@@ -396,17 +304,29 @@ const SessionRow = ({
396
304
  "button",
397
305
  {
398
306
  type: "button",
399
- onClick: () => onSelect(thread.id),
307
+ onClick: handleRowClick,
308
+ onAuxClick: handleRowAuxClick,
400
309
  onFocus: handleFocus,
401
310
  className: cnfast.cn(
402
311
  "flex min-w-0 flex-1 cursor-pointer items-start gap-2 rounded-lg p-2 pl-3 text-left",
403
- FOCUS_RING_CLASS
312
+ sessionRowParts.FOCUS_RING_CLASS
404
313
  ),
405
314
  children: body
406
315
  }
407
316
  ),
408
317
  chip || hasActions ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 flex-col items-end justify-between gap-0.5 py-2 pr-2", children: [
409
318
  hasActions ? /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-row-actions": true, className: "flex h-5 items-center gap-0.5", children: [
319
+ onOpenInNewTab ? /* @__PURE__ */ jsxRuntime.jsx(
320
+ RowActionButton,
321
+ {
322
+ label: "Open in new tab",
323
+ onClick: openInNewTab,
324
+ pending: false,
325
+ alwaysVisible: false,
326
+ action: "open-in-new-tab",
327
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SquareArrowOutUpRightIcon, { className: "size-3.5", "aria-hidden": true })
328
+ }
329
+ ) : null,
410
330
  onRename ? /* @__PURE__ */ jsxRuntime.jsx(
411
331
  RowActionButton,
412
332
  {
@@ -431,7 +351,7 @@ const SessionRow = ({
431
351
  }
432
352
  ) : null
433
353
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "h-5" }),
434
- chip ? /* @__PURE__ */ jsxRuntime.jsx(PullRequestChip, { chip, pullRequests: thread.pullRequests ?? [] }) : null
354
+ chip ? /* @__PURE__ */ jsxRuntime.jsx(sessionRowParts.PullRequestChip, { chip, pullRequests: thread.pullRequests ?? [] }) : null
435
355
  ] }) : null
436
356
  ]
437
357
  }
@@ -441,10 +361,13 @@ function SessionList({
441
361
  className,
442
362
  grouped = true,
443
363
  showSearch = true,
364
+ showNewChat = true,
365
+ originBadges = "all",
444
366
  showPinToggle = true,
445
367
  showRename = true,
446
368
  showArchive = true,
447
- prefetchOnHover = true
369
+ prefetchOnHover = true,
370
+ onOpenInNewTab
448
371
  }) {
449
372
  const list = statewireThreadList.useAthenaStatewireThreadList();
450
373
  if (!list) return null;
@@ -462,7 +385,7 @@ function SessionList({
462
385
  className: cnfast.cn("athena-sdk-chrome flex flex-col gap-2", className),
463
386
  "data-testid": "session-list",
464
387
  children: [
465
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
388
+ showNewChat ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
466
389
  /* @__PURE__ */ jsxRuntime.jsxs(
467
390
  "button",
468
391
  {
@@ -470,7 +393,7 @@ function SessionList({
470
393
  onClick: list.newThread,
471
394
  className: cnfast.cn(
472
395
  "flex h-9 flex-1 items-center gap-2 rounded-lg border border-border/60 px-3 font-medium text-muted-foreground text-sm transition-colors hover:bg-muted hover:text-foreground",
473
- FOCUS_RING_CLASS
396
+ sessionRowParts.FOCUS_RING_CLASS
474
397
  ),
475
398
  children: [
476
399
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlusIcon, { className: "size-4" }),
@@ -486,14 +409,14 @@ function SessionList({
486
409
  disabled: list.isFetching,
487
410
  className: cnfast.cn(
488
411
  "flex size-9 items-center justify-center rounded-lg border border-border/60 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:opacity-50",
489
- FOCUS_RING_CLASS
412
+ sessionRowParts.FOCUS_RING_CLASS
490
413
  ),
491
414
  title: "Refresh sessions",
492
415
  "aria-label": "Refresh sessions",
493
416
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCwIcon, { className: cnfast.cn("size-4", list.isFetching && "animate-spin") })
494
417
  }
495
418
  )
496
- ] }),
419
+ ] }) : null,
497
420
  showSearch ? /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "relative block", children: [
498
421
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SearchIcon, { className: "pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground" }),
499
422
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Search sessions" }),
@@ -527,7 +450,9 @@ function SessionList({
527
450
  onRename,
528
451
  renamePending: list.renamePendingThreadIds.has(thread.id),
529
452
  onArchive,
530
- archivePending: list.archivePendingThreadIds.has(thread.id)
453
+ archivePending: list.archivePendingThreadIds.has(thread.id),
454
+ onOpenInNewTab,
455
+ originBadges
531
456
  },
532
457
  thread.id
533
458
  )) })
@@ -543,7 +468,7 @@ function SessionList({
543
468
  onClick: list.fetchNextPage,
544
469
  className: cnfast.cn(
545
470
  "w-full rounded-lg py-2 text-muted-foreground text-xs transition-colors hover:bg-muted disabled:opacity-50",
546
- FOCUS_RING_CLASS
471
+ sessionRowParts.FOCUS_RING_CLASS
547
472
  ),
548
473
  children: list.isFetchingNextPage ? "Loading…" : "Load more"
549
474
  }