@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,305 @@
1
+ import { DEFAULT_COLLAB_CHANNEL } from "./sessions-query.js";
2
+ import { sessionOriginLabel } from "./session-list-model.js";
3
+ function mergedPullRequestOf(row) {
4
+ const pullRequests = row.pullRequests ?? [];
5
+ if (pullRequests.length === 0 || pullRequests.some((pr) => pr.state === "OPEN")) return null;
6
+ return pullRequests.some((pr) => pr.state === "MERGED") ? "merged" : "closed";
7
+ }
8
+ function sessionStatusChip(row) {
9
+ var _a;
10
+ const nextAction = ((_a = row.nextAction) == null ? void 0 : _a.trim()) || null;
11
+ switch (row.attention) {
12
+ case "needs_you":
13
+ return { label: nextAction ?? "Needs you", tone: "needs_you", detail: nextAction };
14
+ case "working":
15
+ return { label: "Working", tone: "working", detail: nextAction };
16
+ case "ready":
17
+ return { label: nextAction ?? "Ready for you", tone: "ready", detail: nextAction };
18
+ case "watching":
19
+ return {
20
+ label: row.attentionSource === "follow_up" ? "Sleeping" : nextAction ?? "Waiting",
21
+ tone: "watching",
22
+ detail: nextAction
23
+ };
24
+ case "error":
25
+ return { label: nextAction ?? "Error", tone: "error", detail: nextAction };
26
+ case "done": {
27
+ const merged = mergedPullRequestOf(row);
28
+ if (merged === "merged") return { label: "PR merged", tone: "done", detail: nextAction };
29
+ return { label: "Done", tone: "done", detail: nextAction };
30
+ }
31
+ }
32
+ if (row.runStatus === "needs_input" || row.sessionStatus === "needs_input") {
33
+ return { label: "Needs you", tone: "needs_you", detail: null };
34
+ }
35
+ if (row.runStatus === "running" || row.runStatus === "queued") {
36
+ return { label: "Working", tone: "working", detail: null };
37
+ }
38
+ if (row.runStatus === "failed" || row.sessionStatus === "error") {
39
+ return { label: "Error", tone: "error", detail: null };
40
+ }
41
+ if (row.runStatus === "completed") return { label: "Done", tone: "done", detail: null };
42
+ return { label: "Idle", tone: "muted", detail: null };
43
+ }
44
+ function inboxStateChip(row) {
45
+ switch (row.attention) {
46
+ case "needs_you":
47
+ return { label: "Needs you", tone: "needs_you" };
48
+ case "working":
49
+ return { label: "Working", tone: "working" };
50
+ case "ready":
51
+ return { label: row.attentionSource === "pull_request" ? "PR ready" : "Ready", tone: "ready" };
52
+ case "watching":
53
+ return {
54
+ label: row.attentionSource === "follow_up" ? "Sleeping" : "Waiting",
55
+ tone: "watching"
56
+ };
57
+ case "error":
58
+ return { label: "Error", tone: "error" };
59
+ case "done": {
60
+ const merged = mergedPullRequestOf(row);
61
+ if (merged === "merged") return { label: "PR merged", tone: "done" };
62
+ if (merged === "closed") return { label: "PR closed", tone: "done" };
63
+ return { label: "Answered", tone: "done" };
64
+ }
65
+ default: {
66
+ const fallback = sessionStatusChip(row);
67
+ return { label: fallback.label, tone: fallback.tone };
68
+ }
69
+ }
70
+ }
71
+ const ATTENTION_GROUPS = [
72
+ { key: "needs_you", label: "Needs you" },
73
+ { key: "working", label: "Working" },
74
+ { key: "ready", label: "Ready" },
75
+ { key: "watching", label: "Waiting" },
76
+ { key: "error", label: "Error" },
77
+ { key: "done", label: "Done" },
78
+ { key: "other", label: "Other" }
79
+ ];
80
+ const RUN_STATUS_LABEL = {
81
+ needs_input: "Needs input",
82
+ running: "Running",
83
+ queued: "Queued",
84
+ scheduled: "Scheduled",
85
+ completed: "Completed",
86
+ failed: "Failed",
87
+ canceled: "Canceled"
88
+ };
89
+ const SESSION_STATUS_LABEL = {
90
+ active: "Active",
91
+ needs_input: "Needs input",
92
+ idle: "Idle",
93
+ error: "Error"
94
+ };
95
+ function runStatusLabel(status) {
96
+ return status && RUN_STATUS_LABEL[status] || "No run";
97
+ }
98
+ function sessionStatusLabel(status) {
99
+ return SESSION_STATUS_LABEL[status] ?? status;
100
+ }
101
+ function groupSessionsBy(rows, groupBy) {
102
+ if (rows.length === 0) return [];
103
+ if (groupBy === "none") return [{ key: "all", label: null, items: [...rows] }];
104
+ const buckets = /* @__PURE__ */ new Map();
105
+ const keyOf = (row) => {
106
+ if (groupBy === "attention") {
107
+ return ATTENTION_GROUPS.some((group) => group.key === row.attention) ? row.attention : "other";
108
+ }
109
+ return row.runStatus && row.runStatus in RUN_STATUS_LABEL ? row.runStatus : "none";
110
+ };
111
+ for (const row of rows) {
112
+ const key = keyOf(row);
113
+ const bucket = buckets.get(key) ?? [];
114
+ bucket.push(row);
115
+ buckets.set(key, bucket);
116
+ }
117
+ const order = groupBy === "attention" ? ATTENTION_GROUPS : [
118
+ ...Object.entries(RUN_STATUS_LABEL).map(([key, label]) => ({ key, label })),
119
+ { key: "none", label: "No run" }
120
+ ];
121
+ return order.flatMap(({ key, label }) => {
122
+ const items = buckets.get(key);
123
+ return items ? [{ key, label, items }] : [];
124
+ });
125
+ }
126
+ const SESSIONS_COLUMNS = [
127
+ { id: "status", label: "Status", defaultVisible: true },
128
+ { id: "origin", label: "Origin", defaultVisible: true },
129
+ { id: "mode", label: "Mode", defaultVisible: false },
130
+ { id: "pullRequests", label: "Pull requests", defaultVisible: true },
131
+ { id: "creator", label: "Creator", defaultVisible: false },
132
+ { id: "created", label: "Created", defaultVisible: false },
133
+ { id: "updated", label: "Updated", defaultVisible: true }
134
+ ];
135
+ const DEFAULT_VISIBLE_SESSIONS_COLUMNS = SESSIONS_COLUMNS.filter(
136
+ (column) => column.defaultVisible
137
+ ).map((column) => column.id);
138
+ function humanizeId(value) {
139
+ const words = value.replace(/^asset_/, "").replace(/[-_]+/g, " ").trim();
140
+ if (/^[0-9a-f]{8} ?[0-9a-f]{4}/i.test(words)) return `${words.slice(0, 8)}…`;
141
+ return words ? words.charAt(0).toUpperCase() + words.slice(1) : value;
142
+ }
143
+ function agentLabel(agentId, labels) {
144
+ var _a;
145
+ return ((_a = labels == null ? void 0 : labels.agents) == null ? void 0 : _a[agentId]) ?? `Agent ${humanizeId(agentId)}`;
146
+ }
147
+ function channelLabel(channelId, labels) {
148
+ var _a;
149
+ const channel = channelId || DEFAULT_COLLAB_CHANNEL;
150
+ if ((_a = labels == null ? void 0 : labels.channels) == null ? void 0 : _a[channel]) return labels.channels[channel];
151
+ return channel === DEFAULT_COLLAB_CHANNEL ? "Default" : humanizeId(channel);
152
+ }
153
+ function plainExcerpt(text) {
154
+ if (!text) return "";
155
+ return text.replace(/<[^>]*>/g, "").replace(/!?\[([^\]]*)\]\([^)]*\)/g, "$1").replace(/(\*\*|__|`+|~~)/g, "").replace(/^\s{0,3}(#{1,6}|>|[-*+]|\d+\.)\s+/gm, "").replace(/&nbsp;/g, " ").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/\s+/g, " ").trim();
156
+ }
157
+ function creatorLabel(createdByMe) {
158
+ if (createdByMe === true) return "You";
159
+ if (createdByMe === false) return "Shared with you";
160
+ return "";
161
+ }
162
+ const dateLabel = (value) => {
163
+ const at = Date.parse(value);
164
+ return Number.isFinite(at) ? new Date(at).toLocaleDateString() : value;
165
+ };
166
+ function sessionsFilterChips(query, labels) {
167
+ var _a, _b, _c, _d, _e;
168
+ const chips = [];
169
+ const join = (values) => values.join(", ");
170
+ if ((_a = query.runStatuses) == null ? void 0 : _a.length) {
171
+ chips.push({ field: "runStatuses", label: `Status: ${join(query.runStatuses.map(runStatusLabel))}` });
172
+ }
173
+ if ((_b = query.sessionStatuses) == null ? void 0 : _b.length) {
174
+ chips.push({
175
+ field: "sessionStatuses",
176
+ label: `Session: ${join(query.sessionStatuses.map(sessionStatusLabel))}`
177
+ });
178
+ }
179
+ if (query.unreadOnly) chips.push({ field: "unreadOnly", label: "Unread" });
180
+ if (query.favoritesOnly) chips.push({ field: "favoritesOnly", label: "Pinned" });
181
+ if (query.hasPullRequests !== void 0) {
182
+ chips.push({
183
+ field: "hasPullRequests",
184
+ label: query.hasPullRequests ? "Has pull requests" : "No pull requests"
185
+ });
186
+ }
187
+ if (query.createdByMe !== void 0) {
188
+ chips.push({
189
+ field: "createdByMe",
190
+ label: query.createdByMe ? "Creator: You" : "Creator: Shared with you"
191
+ });
192
+ }
193
+ if ((_c = query.collabAgentIds) == null ? void 0 : _c.length) {
194
+ chips.push({
195
+ field: "collabAgentIds",
196
+ label: `Agent: ${join(query.collabAgentIds.map((id) => agentLabel(id, labels)))}`
197
+ });
198
+ }
199
+ if ((_d = query.collabChannelIds) == null ? void 0 : _d.length) {
200
+ chips.push({
201
+ field: "collabChannelIds",
202
+ label: `Mode: ${join(query.collabChannelIds.map((id) => channelLabel(id, labels)))}`
203
+ });
204
+ }
205
+ if ((_e = query.startChannels) == null ? void 0 : _e.length) {
206
+ chips.push({
207
+ field: "startChannels",
208
+ label: `Origin: ${join(
209
+ query.startChannels.map(
210
+ (channel) => sessionOriginLabel({ startChannel: channel, appId: null, triggerType: null }) ?? channel
211
+ )
212
+ )}`
213
+ });
214
+ }
215
+ if (query.createdAfter) chips.push({ field: "createdAfter", label: `Created since ${dateLabel(query.createdAfter)}` });
216
+ if (query.createdBefore) chips.push({ field: "createdBefore", label: `Created before ${dateLabel(query.createdBefore)}` });
217
+ if (query.updatedAfter) chips.push({ field: "updatedAfter", label: `Updated since ${dateLabel(query.updatedAfter)}` });
218
+ if (query.updatedBefore) chips.push({ field: "updatedBefore", label: `Updated before ${dateLabel(query.updatedBefore)}` });
219
+ if (query.excludeTriggered) chips.push({ field: "excludeTriggered", label: "Started by a person" });
220
+ return chips;
221
+ }
222
+ const SESSIONS_DATE_PRESETS = [
223
+ { id: "today", label: "Today" },
224
+ { id: "last7", label: "Last 7 days" },
225
+ { id: "last30", label: "Last 30 days" },
226
+ { id: "older30", label: "Older than 30 days" }
227
+ ];
228
+ function datePresetBounds(preset, now = /* @__PURE__ */ new Date()) {
229
+ const midnightDaysAgo = (days) => {
230
+ const midnight = new Date(now);
231
+ midnight.setHours(0, 0, 0, 0);
232
+ midnight.setDate(midnight.getDate() - days);
233
+ return midnight.toISOString();
234
+ };
235
+ if (preset === "today") return { after: midnightDaysAgo(0) };
236
+ if (preset === "last7") return { after: midnightDaysAgo(7) };
237
+ if (preset === "last30") return { after: midnightDaysAgo(30) };
238
+ return { before: midnightDaysAgo(30) };
239
+ }
240
+ function csvCell(value) {
241
+ if (value === null || value === void 0) return "";
242
+ let text = String(value);
243
+ if (/^[=+\-@\t\r]/.test(text)) text = `'${text}`;
244
+ return /[",\r\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
245
+ }
246
+ function sessionsCsv(rows, labels) {
247
+ const header = [
248
+ "Title",
249
+ "Status",
250
+ "Next action",
251
+ "Attention",
252
+ "Run status",
253
+ "Session status",
254
+ "Origin",
255
+ "Agent",
256
+ "Mode",
257
+ "Pull requests",
258
+ "Pinned",
259
+ "Unread",
260
+ "Creator",
261
+ "Created",
262
+ "Updated",
263
+ "Thread ID"
264
+ ];
265
+ const lines = rows.map((row) => {
266
+ const status = sessionStatusChip(row);
267
+ return [
268
+ row.title ?? "",
269
+ status.label,
270
+ row.nextAction ?? "",
271
+ row.attention ?? "",
272
+ row.runStatus ?? "",
273
+ row.sessionStatus ?? "",
274
+ sessionOriginLabel(row) ?? "",
275
+ row.collabAgentId ? agentLabel(row.collabAgentId, labels) : "",
276
+ row.collabAgentId ? channelLabel(row.collabChannelId, labels) : "",
277
+ (row.pullRequests ?? []).map((pr) => `${pr.repoFullName}#${pr.number} (${pr.state})`).join("; "),
278
+ row.isFavorited,
279
+ row.isUnread,
280
+ creatorLabel(row.createdByMe),
281
+ row.createdAt ?? "",
282
+ row.updatedAt,
283
+ row.id
284
+ ].map(csvCell).join(",");
285
+ });
286
+ return [header.map(csvCell).join(","), ...lines].join("\r\n");
287
+ }
288
+ export {
289
+ DEFAULT_VISIBLE_SESSIONS_COLUMNS,
290
+ SESSIONS_COLUMNS,
291
+ SESSIONS_DATE_PRESETS,
292
+ agentLabel,
293
+ channelLabel,
294
+ creatorLabel,
295
+ datePresetBounds,
296
+ groupSessionsBy,
297
+ inboxStateChip,
298
+ plainExcerpt,
299
+ runStatusLabel,
300
+ sessionStatusChip,
301
+ sessionStatusLabel,
302
+ sessionsCsv,
303
+ sessionsFilterChips
304
+ };
305
+ //# sourceMappingURL=sessions-page-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-page-model.js","sources":["../../src/threads/sessions-page-model.ts"],"sourcesContent":["/**\n * Pure derivations behind `SessionsPage` and `Inbox`: the status a row shows\n * (what the person must do, colour-coded by attention), the inbox state chip,\n * grouping, columns, the filter chips' labels and the CSV export. React-free\n * so the render tests stay thin and hosts drawing their own rows reuse them.\n */\nimport type { ConversationAttention } from '@athenaintel/agent-runtime';\nimport {\n type AthenaSessionsQuery,\n type AthenaSessionsQueryField,\n DEFAULT_COLLAB_CHANNEL,\n type SessionRunStatus,\n type SessionSessionStatus,\n} from './sessions-query';\nimport { sessionOriginLabel } from './session-list-model';\nimport type { AthenaStatewireThreadSummary } from './statewire-thread-list';\n\nexport type SessionStatusTone =\n | 'needs_you'\n | 'working'\n | 'ready'\n | 'watching'\n | 'done'\n | 'error'\n | 'muted';\n\nexport interface SessionStatusChip {\n /** Short and imperative where the person must act (\"Approve send email\", \"Merge #12\"). */\n label: string;\n tone: SessionStatusTone;\n /** The longer line behind the label (the full next action), for a tooltip. */\n detail: string | null;\n}\n\ntype StatusRow = Pick<\n AthenaStatewireThreadSummary,\n 'attention' | 'nextAction' | 'attentionSource' | 'runStatus' | 'sessionStatus' | 'pullRequests'\n>;\n\nfunction mergedPullRequestOf(row: Pick<StatusRow, 'pullRequests'>): 'merged' | 'closed' | null {\n const pullRequests = row.pullRequests ?? [];\n if (pullRequests.length === 0 || pullRequests.some((pr) => pr.state === 'OPEN')) return null;\n return pullRequests.some((pr) => pr.state === 'MERGED') ? 'merged' : 'closed';\n}\n\n/**\n * The row's status column: what the session needs from the person, from the\n * server's attention and next action (Devin-style — \"Approve design\", \"PR is\n * ready\", \"Sleeping\", \"Working\", \"Done\"). An older server's rows fall back to\n * the status planes.\n */\nexport function sessionStatusChip(row: StatusRow): SessionStatusChip {\n const nextAction = row.nextAction?.trim() || null;\n switch (row.attention) {\n case 'needs_you':\n return { label: nextAction ?? 'Needs you', tone: 'needs_you', detail: nextAction };\n case 'working':\n return { label: 'Working', tone: 'working', detail: nextAction };\n case 'ready':\n return { label: nextAction ?? 'Ready for you', tone: 'ready', detail: nextAction };\n case 'watching':\n return {\n label: row.attentionSource === 'follow_up' ? 'Sleeping' : (nextAction ?? 'Waiting'),\n tone: 'watching',\n detail: nextAction,\n };\n case 'error':\n return { label: nextAction ?? 'Error', tone: 'error', detail: nextAction };\n case 'done': {\n const merged = mergedPullRequestOf(row);\n if (merged === 'merged') return { label: 'PR merged', tone: 'done', detail: nextAction };\n return { label: 'Done', tone: 'done', detail: nextAction };\n }\n default:\n break;\n }\n if (row.runStatus === 'needs_input' || row.sessionStatus === 'needs_input') {\n return { label: 'Needs you', tone: 'needs_you', detail: null };\n }\n if (row.runStatus === 'running' || row.runStatus === 'queued') {\n return { label: 'Working', tone: 'working', detail: null };\n }\n if (row.runStatus === 'failed' || row.sessionStatus === 'error') {\n return { label: 'Error', tone: 'error', detail: null };\n }\n if (row.runStatus === 'completed') return { label: 'Done', tone: 'done', detail: null };\n return { label: 'Idle', tone: 'muted', detail: null };\n}\n\n/**\n * The inbox row's state chip (Devin's \"Answered\" / \"PR merged\"): what\n * happened last, rather than the next step the status column names.\n */\nexport function inboxStateChip(row: StatusRow): { label: string; tone: SessionStatusTone } {\n switch (row.attention) {\n case 'needs_you':\n return { label: 'Needs you', tone: 'needs_you' };\n case 'working':\n return { label: 'Working', tone: 'working' };\n case 'ready':\n return { label: row.attentionSource === 'pull_request' ? 'PR ready' : 'Ready', tone: 'ready' };\n case 'watching':\n return {\n label: row.attentionSource === 'follow_up' ? 'Sleeping' : 'Waiting',\n tone: 'watching',\n };\n case 'error':\n return { label: 'Error', tone: 'error' };\n case 'done': {\n const merged = mergedPullRequestOf(row);\n if (merged === 'merged') return { label: 'PR merged', tone: 'done' };\n if (merged === 'closed') return { label: 'PR closed', tone: 'done' };\n return { label: 'Answered', tone: 'done' };\n }\n default: {\n // An older server reports no attention: the status planes decide.\n const fallback = sessionStatusChip(row);\n return { label: fallback.label, tone: fallback.tone };\n }\n }\n}\n\nexport type SessionsGroupBy = 'attention' | 'status' | 'none';\n\nexport interface SessionsSection {\n key: string;\n /** `null` for the single ungrouped section. */\n label: string | null;\n items: AthenaStatewireThreadSummary[];\n}\n\nconst ATTENTION_GROUPS: ReadonlyArray<{ key: ConversationAttention | 'other'; label: string }> = [\n { key: 'needs_you', label: 'Needs you' },\n { key: 'working', label: 'Working' },\n { key: 'ready', label: 'Ready' },\n { key: 'watching', label: 'Waiting' },\n { key: 'error', label: 'Error' },\n { key: 'done', label: 'Done' },\n { key: 'other', label: 'Other' },\n];\n\nconst RUN_STATUS_LABEL: Record<SessionRunStatus, string> = {\n needs_input: 'Needs input',\n running: 'Running',\n queued: 'Queued',\n scheduled: 'Scheduled',\n completed: 'Completed',\n failed: 'Failed',\n canceled: 'Canceled',\n};\n\nconst SESSION_STATUS_LABEL: Record<SessionSessionStatus, string> = {\n active: 'Active',\n needs_input: 'Needs input',\n idle: 'Idle',\n error: 'Error',\n};\n\nexport function runStatusLabel(status: string | null | undefined): string {\n return (status && RUN_STATUS_LABEL[status as SessionRunStatus]) || 'No run';\n}\n\nexport function sessionStatusLabel(status: string): string {\n return SESSION_STATUS_LABEL[status as SessionSessionStatus] ?? status;\n}\n\n/** Sections in display order; empty groups are omitted and row order is kept within a group. */\nexport function groupSessionsBy(\n rows: readonly AthenaStatewireThreadSummary[],\n groupBy: SessionsGroupBy,\n): SessionsSection[] {\n if (rows.length === 0) return [];\n if (groupBy === 'none') return [{ key: 'all', label: null, items: [...rows] }];\n const buckets = new Map<string, AthenaStatewireThreadSummary[]>();\n const keyOf = (row: AthenaStatewireThreadSummary): string => {\n if (groupBy === 'attention') {\n return ATTENTION_GROUPS.some((group) => group.key === row.attention)\n ? (row.attention as string)\n : 'other';\n }\n return row.runStatus && row.runStatus in RUN_STATUS_LABEL ? row.runStatus : 'none';\n };\n for (const row of rows) {\n const key = keyOf(row);\n const bucket = buckets.get(key) ?? [];\n bucket.push(row);\n buckets.set(key, bucket);\n }\n const order: ReadonlyArray<{ key: string; label: string }> =\n groupBy === 'attention'\n ? ATTENTION_GROUPS\n : [\n ...Object.entries(RUN_STATUS_LABEL).map(([key, label]) => ({ key, label })),\n { key: 'none', label: 'No run' },\n ];\n return order.flatMap(({ key, label }) => {\n const items = buckets.get(key);\n return items ? [{ key, label, items }] : [];\n });\n}\n\nexport type SessionsColumnId =\n | 'status'\n | 'origin'\n | 'mode'\n | 'pullRequests'\n | 'creator'\n | 'created'\n | 'updated';\n\nexport interface SessionsColumn {\n id: SessionsColumnId;\n label: string;\n /** Shown until the person hides it. */\n defaultVisible: boolean;\n}\n\n/** Every column after the title, in display order. */\nexport const SESSIONS_COLUMNS: readonly SessionsColumn[] = [\n { id: 'status', label: 'Status', defaultVisible: true },\n { id: 'origin', label: 'Origin', defaultVisible: true },\n { id: 'mode', label: 'Mode', defaultVisible: false },\n { id: 'pullRequests', label: 'Pull requests', defaultVisible: true },\n { id: 'creator', label: 'Creator', defaultVisible: false },\n { id: 'created', label: 'Created', defaultVisible: false },\n { id: 'updated', label: 'Updated', defaultVisible: true },\n];\n\nexport const DEFAULT_VISIBLE_SESSIONS_COLUMNS: readonly SessionsColumnId[] = SESSIONS_COLUMNS.filter(\n (column) => column.defaultVisible,\n).map((column) => column.id);\n\n/** Names for agents and channels a host knows; ids are shown otherwise. */\nexport interface SessionsLabels {\n agents?: Readonly<Record<string, string>>;\n channels?: Readonly<Record<string, string>>;\n}\n\nfunction humanizeId(value: string): string {\n const words = value.replace(/^asset_/, '').replace(/[-_]+/g, ' ').trim();\n if (/^[0-9a-f]{8} ?[0-9a-f]{4}/i.test(words)) return `${words.slice(0, 8)}…`;\n return words ? words.charAt(0).toUpperCase() + words.slice(1) : value;\n}\n\nexport function agentLabel(agentId: string, labels?: SessionsLabels): string {\n return labels?.agents?.[agentId] ?? `Agent ${humanizeId(agentId)}`;\n}\n\n/** The session's mode: its agent channel, `Default` for the agent's default channel. */\nexport function channelLabel(channelId: string | null | undefined, labels?: SessionsLabels): string {\n const channel = channelId || DEFAULT_COLLAB_CHANNEL;\n if (labels?.channels?.[channel]) return labels.channels[channel];\n return channel === DEFAULT_COLLAB_CHANNEL ? 'Default' : humanizeId(channel);\n}\n\n/**\n * A message as one line of plain text for a preview: the mention markup the\n * server stores (`<a class=\"mention\" …>Name</a>`) keeps its text, markdown\n * links keep their label, and emphasis, code and heading marks drop.\n */\nexport function plainExcerpt(text: string | null | undefined): string {\n if (!text) return '';\n return text\n .replace(/<[^>]*>/g, '')\n .replace(/!?\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/(\\*\\*|__|`+|~~)/g, '')\n .replace(/^\\s{0,3}(#{1,6}|>|[-*+]|\\d+\\.)\\s+/gm, '')\n .replace(/&nbsp;/g, ' ')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nexport function creatorLabel(createdByMe: boolean | null | undefined): string {\n if (createdByMe === true) return 'You';\n if (createdByMe === false) return 'Shared with you';\n return '';\n}\n\nexport interface SessionsFilterChip {\n field: AthenaSessionsQueryField;\n label: string;\n}\n\nconst dateLabel = (value: string): string => {\n const at = Date.parse(value);\n return Number.isFinite(at) ? new Date(at).toLocaleDateString() : value;\n};\n\n/** One chip per active filter, in a fixed order (sort and search are not chips). */\nexport function sessionsFilterChips(\n query: AthenaSessionsQuery,\n labels?: SessionsLabels,\n): SessionsFilterChip[] {\n const chips: SessionsFilterChip[] = [];\n const join = (values: readonly string[]) => values.join(', ');\n if (query.runStatuses?.length) {\n chips.push({ field: 'runStatuses', label: `Status: ${join(query.runStatuses.map(runStatusLabel))}` });\n }\n if (query.sessionStatuses?.length) {\n chips.push({\n field: 'sessionStatuses',\n label: `Session: ${join(query.sessionStatuses.map(sessionStatusLabel))}`,\n });\n }\n if (query.unreadOnly) chips.push({ field: 'unreadOnly', label: 'Unread' });\n if (query.favoritesOnly) chips.push({ field: 'favoritesOnly', label: 'Pinned' });\n if (query.hasPullRequests !== undefined) {\n chips.push({\n field: 'hasPullRequests',\n label: query.hasPullRequests ? 'Has pull requests' : 'No pull requests',\n });\n }\n if (query.createdByMe !== undefined) {\n chips.push({\n field: 'createdByMe',\n label: query.createdByMe ? 'Creator: You' : 'Creator: Shared with you',\n });\n }\n if (query.collabAgentIds?.length) {\n chips.push({\n field: 'collabAgentIds',\n label: `Agent: ${join(query.collabAgentIds.map((id) => agentLabel(id, labels)))}`,\n });\n }\n if (query.collabChannelIds?.length) {\n chips.push({\n field: 'collabChannelIds',\n label: `Mode: ${join(query.collabChannelIds.map((id) => channelLabel(id, labels)))}`,\n });\n }\n if (query.startChannels?.length) {\n chips.push({\n field: 'startChannels',\n label: `Origin: ${join(\n query.startChannels.map(\n (channel) =>\n sessionOriginLabel({ startChannel: channel, appId: null, triggerType: null }) ?? channel,\n ),\n )}`,\n });\n }\n if (query.createdAfter) chips.push({ field: 'createdAfter', label: `Created since ${dateLabel(query.createdAfter)}` });\n if (query.createdBefore) chips.push({ field: 'createdBefore', label: `Created before ${dateLabel(query.createdBefore)}` });\n if (query.updatedAfter) chips.push({ field: 'updatedAfter', label: `Updated since ${dateLabel(query.updatedAfter)}` });\n if (query.updatedBefore) chips.push({ field: 'updatedBefore', label: `Updated before ${dateLabel(query.updatedBefore)}` });\n if (query.excludeTriggered) chips.push({ field: 'excludeTriggered', label: 'Started by a person' });\n return chips;\n}\n\nexport type SessionsDatePreset = 'today' | 'last7' | 'last30' | 'older30';\n\nexport const SESSIONS_DATE_PRESETS: ReadonlyArray<{ id: SessionsDatePreset; label: string }> = [\n { id: 'today', label: 'Today' },\n { id: 'last7', label: 'Last 7 days' },\n { id: 'last30', label: 'Last 30 days' },\n { id: 'older30', label: 'Older than 30 days' },\n];\n\n/**\n * The ISO bound a preset stands for, as of `now`: local midnight `0`, `7` or\n * `30` days back. Day-aligned, so the same preset yields the same bound all\n * day — a reopened menu still recognises the chosen preset (and a second\n * click removes it).\n */\nexport function datePresetBounds(\n preset: SessionsDatePreset,\n now: Date = new Date(),\n): { after?: string; before?: string } {\n const midnightDaysAgo = (days: number): string => {\n const midnight = new Date(now);\n midnight.setHours(0, 0, 0, 0);\n midnight.setDate(midnight.getDate() - days);\n return midnight.toISOString();\n };\n if (preset === 'today') return { after: midnightDaysAgo(0) };\n if (preset === 'last7') return { after: midnightDaysAgo(7) };\n if (preset === 'last30') return { after: midnightDaysAgo(30) };\n return { before: midnightDaysAgo(30) };\n}\n\n/** RFC 4180 quoting, with a leading `'` on cells a spreadsheet would run as a formula. */\nfunction csvCell(value: string | number | boolean | null | undefined): string {\n if (value === null || value === undefined) return '';\n let text = String(value);\n if (/^[=+\\-@\\t\\r]/.test(text)) text = `'${text}`;\n return /[\",\\r\\n]/.test(text) ? `\"${text.replace(/\"/g, '\"\"')}\"` : text;\n}\n\n/** The loaded rows as CSV (header first, CRLF line ends), the visible ones only. */\nexport function sessionsCsv(\n rows: readonly AthenaStatewireThreadSummary[],\n labels?: SessionsLabels,\n): string {\n const header = [\n 'Title',\n 'Status',\n 'Next action',\n 'Attention',\n 'Run status',\n 'Session status',\n 'Origin',\n 'Agent',\n 'Mode',\n 'Pull requests',\n 'Pinned',\n 'Unread',\n 'Creator',\n 'Created',\n 'Updated',\n 'Thread ID',\n ];\n const lines = rows.map((row) => {\n const status = sessionStatusChip(row);\n return [\n row.title ?? '',\n status.label,\n row.nextAction ?? '',\n row.attention ?? '',\n row.runStatus ?? '',\n row.sessionStatus ?? '',\n sessionOriginLabel(row) ?? '',\n row.collabAgentId ? agentLabel(row.collabAgentId, labels) : '',\n row.collabAgentId ? channelLabel(row.collabChannelId, labels) : '',\n (row.pullRequests ?? []).map((pr) => `${pr.repoFullName}#${pr.number} (${pr.state})`).join('; '),\n row.isFavorited,\n row.isUnread,\n creatorLabel(row.createdByMe),\n row.createdAt ?? '',\n row.updatedAt,\n row.id,\n ]\n .map(csvCell)\n .join(',');\n });\n return [header.map(csvCell).join(','), ...lines].join('\\r\\n');\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const sessionsQuery = require("./sessions-query.cjs");
4
+ const sessionsPageModel = require("./sessions-page-model.cjs");
5
+ const DEFAULT_SESSIONS_PAGE_DISPLAY = {
6
+ groupBy: "attention",
7
+ columns: [...sessionsPageModel.DEFAULT_VISIBLE_SESSIONS_COLUMNS]
8
+ };
9
+ const STORAGE_PREFIX = "athena-sdk:sessions-page:v1:";
10
+ function storage() {
11
+ try {
12
+ return typeof window === "undefined" ? null : window.localStorage;
13
+ } catch {
14
+ return null;
15
+ }
16
+ }
17
+ const isStringArray = (value) => Array.isArray(value) && value.every((item) => typeof item === "string");
18
+ function sanitizeSessionsQuery(value) {
19
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
20
+ const record = value;
21
+ const query = {};
22
+ for (const field of ["collabAgentIds", "collabChannelIds", "startChannels"]) {
23
+ if (isStringArray(record[field])) query[field] = record[field];
24
+ }
25
+ if (isStringArray(record.runStatuses)) {
26
+ query.runStatuses = record.runStatuses.filter(
27
+ (status) => sessionsQuery.SESSION_RUN_STATUSES.includes(status)
28
+ );
29
+ }
30
+ if (isStringArray(record.sessionStatuses)) {
31
+ query.sessionStatuses = record.sessionStatuses.filter(
32
+ (status) => sessionsQuery.SESSION_SESSION_STATUSES.includes(status)
33
+ );
34
+ }
35
+ for (const field of ["createdAfter", "createdBefore", "updatedAfter", "updatedBefore"]) {
36
+ if (typeof record[field] === "string") query[field] = record[field];
37
+ }
38
+ for (const field of [
39
+ "favoritesOnly",
40
+ "unreadOnly",
41
+ "hasPullRequests",
42
+ "createdByMe",
43
+ "excludeDismissed",
44
+ "excludeTriggered"
45
+ ]) {
46
+ if (typeof record[field] === "boolean") query[field] = record[field];
47
+ }
48
+ if (record.sort === "updated" || record.sort === "created") query.sort = record.sort;
49
+ if (record.direction === "desc" || record.direction === "asc") query.direction = record.direction;
50
+ return sessionsQuery.normalizeSessionsQuery(query);
51
+ }
52
+ function sanitizeDisplay(value) {
53
+ if (!value || typeof value !== "object") return DEFAULT_SESSIONS_PAGE_DISPLAY;
54
+ const record = value;
55
+ const groupBy = record.groupBy === "attention" || record.groupBy === "status" || record.groupBy === "none" ? record.groupBy : DEFAULT_SESSIONS_PAGE_DISPLAY.groupBy;
56
+ const known = new Set(sessionsPageModel.SESSIONS_COLUMNS.map((column) => column.id));
57
+ const columns = isStringArray(record.columns) ? record.columns.filter((column) => known.has(column)) : DEFAULT_SESSIONS_PAGE_DISPLAY.columns;
58
+ return { groupBy, columns };
59
+ }
60
+ function readSessionsPageSettings(key) {
61
+ var _a;
62
+ const raw = (_a = storage()) == null ? void 0 : _a.getItem(STORAGE_PREFIX + key);
63
+ if (!raw) return { defaultQuery: null, display: DEFAULT_SESSIONS_PAGE_DISPLAY };
64
+ try {
65
+ const parsed = JSON.parse(raw);
66
+ const record = parsed && typeof parsed === "object" ? parsed : {};
67
+ return {
68
+ defaultQuery: sanitizeSessionsQuery(record.defaultQuery),
69
+ display: sanitizeDisplay(record.display)
70
+ };
71
+ } catch {
72
+ return { defaultQuery: null, display: DEFAULT_SESSIONS_PAGE_DISPLAY };
73
+ }
74
+ }
75
+ function writeSessionsPageSettings(key, settings) {
76
+ var _a;
77
+ try {
78
+ const { search: _search, ...defaultQuery } = settings.defaultQuery ?? {};
79
+ (_a = storage()) == null ? void 0 : _a.setItem(
80
+ STORAGE_PREFIX + key,
81
+ JSON.stringify({
82
+ defaultQuery: settings.defaultQuery ? defaultQuery : null,
83
+ display: settings.display
84
+ })
85
+ );
86
+ } catch {
87
+ }
88
+ }
89
+ exports.DEFAULT_SESSIONS_PAGE_DISPLAY = DEFAULT_SESSIONS_PAGE_DISPLAY;
90
+ exports.readSessionsPageSettings = readSessionsPageSettings;
91
+ exports.sanitizeSessionsQuery = sanitizeSessionsQuery;
92
+ exports.writeSessionsPageSettings = writeSessionsPageSettings;
93
+ //# sourceMappingURL=sessions-page-storage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-page-storage.cjs","sources":["../../src/threads/sessions-page-storage.ts"],"sourcesContent":["/**\n * What `SessionsPage` remembers in this browser: the filters saved with\n * \"Save as default\" and the display options (grouping, columns). Per storage\n * key (a host with several pages names each); never a credential, never a\n * row. Unreadable or foreign values read as \"nothing saved\".\n */\nimport {\n type AthenaSessionsQuery,\n normalizeSessionsQuery,\n SESSION_RUN_STATUSES,\n SESSION_SESSION_STATUSES,\n} from './sessions-query';\nimport {\n DEFAULT_VISIBLE_SESSIONS_COLUMNS,\n SESSIONS_COLUMNS,\n type SessionsColumnId,\n type SessionsGroupBy,\n} from './sessions-page-model';\n\nexport interface SessionsPageDisplay {\n groupBy: SessionsGroupBy;\n columns: SessionsColumnId[];\n}\n\nexport interface SessionsPageSettings {\n /** The saved default filters and order (no search: a search is never a default). */\n defaultQuery: AthenaSessionsQuery | null;\n display: SessionsPageDisplay;\n}\n\nexport const DEFAULT_SESSIONS_PAGE_DISPLAY: SessionsPageDisplay = {\n groupBy: 'attention',\n columns: [...DEFAULT_VISIBLE_SESSIONS_COLUMNS],\n};\n\nconst STORAGE_PREFIX = 'athena-sdk:sessions-page:v1:';\n\nfunction storage(): Storage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\nconst isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every((item) => typeof item === 'string');\n\n/** Keep only the fields and values a query can carry. */\nexport function sanitizeSessionsQuery(value: unknown): AthenaSessionsQuery | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const query: AthenaSessionsQuery = {};\n for (const field of ['collabAgentIds', 'collabChannelIds', 'startChannels'] as const) {\n if (isStringArray(record[field])) query[field] = record[field];\n }\n if (isStringArray(record.runStatuses)) {\n query.runStatuses = record.runStatuses.filter((status) =>\n (SESSION_RUN_STATUSES as readonly string[]).includes(status),\n ) as AthenaSessionsQuery['runStatuses'];\n }\n if (isStringArray(record.sessionStatuses)) {\n query.sessionStatuses = record.sessionStatuses.filter((status) =>\n (SESSION_SESSION_STATUSES as readonly string[]).includes(status),\n ) as AthenaSessionsQuery['sessionStatuses'];\n }\n for (const field of ['createdAfter', 'createdBefore', 'updatedAfter', 'updatedBefore'] as const) {\n if (typeof record[field] === 'string') query[field] = record[field];\n }\n for (const field of [\n 'favoritesOnly',\n 'unreadOnly',\n 'hasPullRequests',\n 'createdByMe',\n 'excludeDismissed',\n 'excludeTriggered',\n ] as const) {\n if (typeof record[field] === 'boolean') query[field] = record[field];\n }\n if (record.sort === 'updated' || record.sort === 'created') query.sort = record.sort;\n if (record.direction === 'desc' || record.direction === 'asc') query.direction = record.direction;\n return normalizeSessionsQuery(query);\n}\n\nfunction sanitizeDisplay(value: unknown): SessionsPageDisplay {\n if (!value || typeof value !== 'object') return DEFAULT_SESSIONS_PAGE_DISPLAY;\n const record = value as Record<string, unknown>;\n const groupBy =\n record.groupBy === 'attention' || record.groupBy === 'status' || record.groupBy === 'none'\n ? record.groupBy\n : DEFAULT_SESSIONS_PAGE_DISPLAY.groupBy;\n const known = new Set<string>(SESSIONS_COLUMNS.map((column) => column.id));\n const columns = isStringArray(record.columns)\n ? (record.columns.filter((column) => known.has(column)) as SessionsColumnId[])\n : DEFAULT_SESSIONS_PAGE_DISPLAY.columns;\n return { groupBy, columns };\n}\n\nexport function readSessionsPageSettings(key: string): SessionsPageSettings {\n const raw = storage()?.getItem(STORAGE_PREFIX + key);\n if (!raw) return { defaultQuery: null, display: DEFAULT_SESSIONS_PAGE_DISPLAY };\n try {\n const parsed: unknown = JSON.parse(raw);\n const record = (parsed && typeof parsed === 'object' ? parsed : {}) as Record<string, unknown>;\n return {\n defaultQuery: sanitizeSessionsQuery(record.defaultQuery),\n display: sanitizeDisplay(record.display),\n };\n } catch {\n return { defaultQuery: null, display: DEFAULT_SESSIONS_PAGE_DISPLAY };\n }\n}\n\n/** Best effort: a full or blocked storage keeps the page working, unsaved. */\nexport function writeSessionsPageSettings(key: string, settings: SessionsPageSettings): void {\n try {\n const { search: _search, ...defaultQuery } = settings.defaultQuery ?? {};\n storage()?.setItem(\n STORAGE_PREFIX + key,\n JSON.stringify({\n defaultQuery: settings.defaultQuery ? defaultQuery : null,\n display: settings.display,\n }),\n );\n } catch {\n // Quota exceeded or storage disabled: nothing to do.\n }\n}\n"],"names":["DEFAULT_VISIBLE_SESSIONS_COLUMNS","SESSION_RUN_STATUSES","SESSION_SESSION_STATUSES","normalizeSessionsQuery","SESSIONS_COLUMNS"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * What `SessionsPage` remembers in this browser: the filters saved with
3
+ * "Save as default" and the display options (grouping, columns). Per storage
4
+ * key (a host with several pages names each); never a credential, never a
5
+ * row. Unreadable or foreign values read as "nothing saved".
6
+ */
7
+ import { type AthenaSessionsQuery } from './sessions-query';
8
+ import { type SessionsColumnId, type SessionsGroupBy } from './sessions-page-model';
9
+ export interface SessionsPageDisplay {
10
+ groupBy: SessionsGroupBy;
11
+ columns: SessionsColumnId[];
12
+ }
13
+ export interface SessionsPageSettings {
14
+ /** The saved default filters and order (no search: a search is never a default). */
15
+ defaultQuery: AthenaSessionsQuery | null;
16
+ display: SessionsPageDisplay;
17
+ }
18
+ export declare const DEFAULT_SESSIONS_PAGE_DISPLAY: SessionsPageDisplay;
19
+ /** Keep only the fields and values a query can carry. */
20
+ export declare function sanitizeSessionsQuery(value: unknown): AthenaSessionsQuery | null;
21
+ export declare function readSessionsPageSettings(key: string): SessionsPageSettings;
22
+ /** Best effort: a full or blocked storage keeps the page working, unsaved. */
23
+ export declare function writeSessionsPageSettings(key: string, settings: SessionsPageSettings): void;
@@ -0,0 +1,93 @@
1
+ import { SESSION_RUN_STATUSES, SESSION_SESSION_STATUSES, normalizeSessionsQuery } from "./sessions-query.js";
2
+ import { DEFAULT_VISIBLE_SESSIONS_COLUMNS, SESSIONS_COLUMNS } from "./sessions-page-model.js";
3
+ const DEFAULT_SESSIONS_PAGE_DISPLAY = {
4
+ groupBy: "attention",
5
+ columns: [...DEFAULT_VISIBLE_SESSIONS_COLUMNS]
6
+ };
7
+ const STORAGE_PREFIX = "athena-sdk:sessions-page:v1:";
8
+ function storage() {
9
+ try {
10
+ return typeof window === "undefined" ? null : window.localStorage;
11
+ } catch {
12
+ return null;
13
+ }
14
+ }
15
+ const isStringArray = (value) => Array.isArray(value) && value.every((item) => typeof item === "string");
16
+ function sanitizeSessionsQuery(value) {
17
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
18
+ const record = value;
19
+ const query = {};
20
+ for (const field of ["collabAgentIds", "collabChannelIds", "startChannels"]) {
21
+ if (isStringArray(record[field])) query[field] = record[field];
22
+ }
23
+ if (isStringArray(record.runStatuses)) {
24
+ query.runStatuses = record.runStatuses.filter(
25
+ (status) => SESSION_RUN_STATUSES.includes(status)
26
+ );
27
+ }
28
+ if (isStringArray(record.sessionStatuses)) {
29
+ query.sessionStatuses = record.sessionStatuses.filter(
30
+ (status) => SESSION_SESSION_STATUSES.includes(status)
31
+ );
32
+ }
33
+ for (const field of ["createdAfter", "createdBefore", "updatedAfter", "updatedBefore"]) {
34
+ if (typeof record[field] === "string") query[field] = record[field];
35
+ }
36
+ for (const field of [
37
+ "favoritesOnly",
38
+ "unreadOnly",
39
+ "hasPullRequests",
40
+ "createdByMe",
41
+ "excludeDismissed",
42
+ "excludeTriggered"
43
+ ]) {
44
+ if (typeof record[field] === "boolean") query[field] = record[field];
45
+ }
46
+ if (record.sort === "updated" || record.sort === "created") query.sort = record.sort;
47
+ if (record.direction === "desc" || record.direction === "asc") query.direction = record.direction;
48
+ return normalizeSessionsQuery(query);
49
+ }
50
+ function sanitizeDisplay(value) {
51
+ if (!value || typeof value !== "object") return DEFAULT_SESSIONS_PAGE_DISPLAY;
52
+ const record = value;
53
+ const groupBy = record.groupBy === "attention" || record.groupBy === "status" || record.groupBy === "none" ? record.groupBy : DEFAULT_SESSIONS_PAGE_DISPLAY.groupBy;
54
+ const known = new Set(SESSIONS_COLUMNS.map((column) => column.id));
55
+ const columns = isStringArray(record.columns) ? record.columns.filter((column) => known.has(column)) : DEFAULT_SESSIONS_PAGE_DISPLAY.columns;
56
+ return { groupBy, columns };
57
+ }
58
+ function readSessionsPageSettings(key) {
59
+ var _a;
60
+ const raw = (_a = storage()) == null ? void 0 : _a.getItem(STORAGE_PREFIX + key);
61
+ if (!raw) return { defaultQuery: null, display: DEFAULT_SESSIONS_PAGE_DISPLAY };
62
+ try {
63
+ const parsed = JSON.parse(raw);
64
+ const record = parsed && typeof parsed === "object" ? parsed : {};
65
+ return {
66
+ defaultQuery: sanitizeSessionsQuery(record.defaultQuery),
67
+ display: sanitizeDisplay(record.display)
68
+ };
69
+ } catch {
70
+ return { defaultQuery: null, display: DEFAULT_SESSIONS_PAGE_DISPLAY };
71
+ }
72
+ }
73
+ function writeSessionsPageSettings(key, settings) {
74
+ var _a;
75
+ try {
76
+ const { search: _search, ...defaultQuery } = settings.defaultQuery ?? {};
77
+ (_a = storage()) == null ? void 0 : _a.setItem(
78
+ STORAGE_PREFIX + key,
79
+ JSON.stringify({
80
+ defaultQuery: settings.defaultQuery ? defaultQuery : null,
81
+ display: settings.display
82
+ })
83
+ );
84
+ } catch {
85
+ }
86
+ }
87
+ export {
88
+ DEFAULT_SESSIONS_PAGE_DISPLAY,
89
+ readSessionsPageSettings,
90
+ sanitizeSessionsQuery,
91
+ writeSessionsPageSettings
92
+ };
93
+ //# sourceMappingURL=sessions-page-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions-page-storage.js","sources":["../../src/threads/sessions-page-storage.ts"],"sourcesContent":["/**\n * What `SessionsPage` remembers in this browser: the filters saved with\n * \"Save as default\" and the display options (grouping, columns). Per storage\n * key (a host with several pages names each); never a credential, never a\n * row. Unreadable or foreign values read as \"nothing saved\".\n */\nimport {\n type AthenaSessionsQuery,\n normalizeSessionsQuery,\n SESSION_RUN_STATUSES,\n SESSION_SESSION_STATUSES,\n} from './sessions-query';\nimport {\n DEFAULT_VISIBLE_SESSIONS_COLUMNS,\n SESSIONS_COLUMNS,\n type SessionsColumnId,\n type SessionsGroupBy,\n} from './sessions-page-model';\n\nexport interface SessionsPageDisplay {\n groupBy: SessionsGroupBy;\n columns: SessionsColumnId[];\n}\n\nexport interface SessionsPageSettings {\n /** The saved default filters and order (no search: a search is never a default). */\n defaultQuery: AthenaSessionsQuery | null;\n display: SessionsPageDisplay;\n}\n\nexport const DEFAULT_SESSIONS_PAGE_DISPLAY: SessionsPageDisplay = {\n groupBy: 'attention',\n columns: [...DEFAULT_VISIBLE_SESSIONS_COLUMNS],\n};\n\nconst STORAGE_PREFIX = 'athena-sdk:sessions-page:v1:';\n\nfunction storage(): Storage | null {\n try {\n return typeof window === 'undefined' ? null : window.localStorage;\n } catch {\n return null;\n }\n}\n\nconst isStringArray = (value: unknown): value is string[] =>\n Array.isArray(value) && value.every((item) => typeof item === 'string');\n\n/** Keep only the fields and values a query can carry. */\nexport function sanitizeSessionsQuery(value: unknown): AthenaSessionsQuery | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const query: AthenaSessionsQuery = {};\n for (const field of ['collabAgentIds', 'collabChannelIds', 'startChannels'] as const) {\n if (isStringArray(record[field])) query[field] = record[field];\n }\n if (isStringArray(record.runStatuses)) {\n query.runStatuses = record.runStatuses.filter((status) =>\n (SESSION_RUN_STATUSES as readonly string[]).includes(status),\n ) as AthenaSessionsQuery['runStatuses'];\n }\n if (isStringArray(record.sessionStatuses)) {\n query.sessionStatuses = record.sessionStatuses.filter((status) =>\n (SESSION_SESSION_STATUSES as readonly string[]).includes(status),\n ) as AthenaSessionsQuery['sessionStatuses'];\n }\n for (const field of ['createdAfter', 'createdBefore', 'updatedAfter', 'updatedBefore'] as const) {\n if (typeof record[field] === 'string') query[field] = record[field];\n }\n for (const field of [\n 'favoritesOnly',\n 'unreadOnly',\n 'hasPullRequests',\n 'createdByMe',\n 'excludeDismissed',\n 'excludeTriggered',\n ] as const) {\n if (typeof record[field] === 'boolean') query[field] = record[field];\n }\n if (record.sort === 'updated' || record.sort === 'created') query.sort = record.sort;\n if (record.direction === 'desc' || record.direction === 'asc') query.direction = record.direction;\n return normalizeSessionsQuery(query);\n}\n\nfunction sanitizeDisplay(value: unknown): SessionsPageDisplay {\n if (!value || typeof value !== 'object') return DEFAULT_SESSIONS_PAGE_DISPLAY;\n const record = value as Record<string, unknown>;\n const groupBy =\n record.groupBy === 'attention' || record.groupBy === 'status' || record.groupBy === 'none'\n ? record.groupBy\n : DEFAULT_SESSIONS_PAGE_DISPLAY.groupBy;\n const known = new Set<string>(SESSIONS_COLUMNS.map((column) => column.id));\n const columns = isStringArray(record.columns)\n ? (record.columns.filter((column) => known.has(column)) as SessionsColumnId[])\n : DEFAULT_SESSIONS_PAGE_DISPLAY.columns;\n return { groupBy, columns };\n}\n\nexport function readSessionsPageSettings(key: string): SessionsPageSettings {\n const raw = storage()?.getItem(STORAGE_PREFIX + key);\n if (!raw) return { defaultQuery: null, display: DEFAULT_SESSIONS_PAGE_DISPLAY };\n try {\n const parsed: unknown = JSON.parse(raw);\n const record = (parsed && typeof parsed === 'object' ? parsed : {}) as Record<string, unknown>;\n return {\n defaultQuery: sanitizeSessionsQuery(record.defaultQuery),\n display: sanitizeDisplay(record.display),\n };\n } catch {\n return { defaultQuery: null, display: DEFAULT_SESSIONS_PAGE_DISPLAY };\n }\n}\n\n/** Best effort: a full or blocked storage keeps the page working, unsaved. */\nexport function writeSessionsPageSettings(key: string, settings: SessionsPageSettings): void {\n try {\n const { search: _search, ...defaultQuery } = settings.defaultQuery ?? {};\n storage()?.setItem(\n STORAGE_PREFIX + key,\n JSON.stringify({\n defaultQuery: settings.defaultQuery ? defaultQuery : null,\n display: settings.display,\n }),\n );\n } catch {\n // Quota exceeded or storage disabled: nothing to do.\n }\n}\n"],"names":[],"mappings":"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"}