@athenaintel/react 0.57.2 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (852) hide show
  1. package/README.md +795 -12
  2. package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
  3. package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
  4. package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
  5. package/dist/agent-runtime/src/addressed-agents.js +16 -0
  6. package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-label.cjs +4 -3
  8. package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
  9. package/dist/agent-runtime/src/answer-label.d.ts +13 -6
  10. package/dist/agent-runtime/src/answer-label.js +4 -3
  11. package/dist/agent-runtime/src/answer-label.js.map +1 -1
  12. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
  13. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
  14. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
  15. package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
  16. package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
  18. package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
  19. package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
  21. package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
  23. package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
  24. package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
  26. package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
  28. package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
  29. package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
  31. package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
  32. package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
  33. package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
  34. package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
  35. package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
  36. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
  37. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
  38. package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
  39. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
  40. package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
  41. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  42. package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
  43. package/dist/agent-runtime/src/chat-outbox.js +492 -547
  44. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  45. package/dist/agent-runtime/src/composer-markdown.cjs +0 -16
  46. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  48. package/dist/agent-runtime/src/composer-markdown.js +1 -17
  49. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  53. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  54. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  55. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  56. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  57. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  58. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  59. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  60. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  61. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  62. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  63. package/dist/agent-runtime/src/errors.cjs +1 -0
  64. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  65. package/dist/agent-runtime/src/errors.js +1 -0
  66. package/dist/agent-runtime/src/errors.js.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  68. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  69. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  70. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  71. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  72. package/dist/agent-runtime/src/index.d.ts +14 -8
  73. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  74. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  75. package/dist/agent-runtime/src/lane-follow.js +289 -0
  76. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  78. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  79. package/dist/agent-runtime/src/lane-images.js +387 -0
  80. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  81. package/dist/agent-runtime/src/message-window.js +1 -1
  82. package/dist/agent-runtime/src/messages.cjs +19 -1
  83. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  84. package/dist/agent-runtime/src/messages.d.ts +8 -0
  85. package/dist/agent-runtime/src/messages.js +21 -3
  86. package/dist/agent-runtime/src/messages.js.map +1 -1
  87. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  88. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  89. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  90. package/dist/agent-runtime/src/named-agents.js +301 -0
  91. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  92. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  93. package/dist/agent-runtime/src/offline-status.d.ts +93 -2
  94. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  95. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  97. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  98. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  99. package/dist/agent-runtime/src/queue.cjs +2 -2
  100. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  101. package/dist/agent-runtime/src/queue.d.ts +20 -25
  102. package/dist/agent-runtime/src/queue.js +2 -2
  103. package/dist/agent-runtime/src/queue.js.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  107. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  108. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  109. package/dist/agent-runtime/src/run-send.cjs +54 -0
  110. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  111. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  112. package/dist/agent-runtime/src/run-send.js +54 -0
  113. package/dist/agent-runtime/src/run-send.js.map +1 -0
  114. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  116. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  117. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  118. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  119. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  120. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  121. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  122. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  123. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  125. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  126. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  127. package/dist/agent-runtime/src/send-recovery.js +90 -118
  128. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  129. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  130. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  133. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  134. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  135. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  136. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  137. package/dist/agent-runtime/src/statewire-state.js +4 -0
  138. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  140. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  141. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  142. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  143. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  145. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  146. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  147. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  148. package/dist/agent-runtime/src/subagents.cjs +22 -29
  149. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  150. package/dist/agent-runtime/src/subagents.js +23 -30
  151. package/dist/agent-runtime/src/subagents.js.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  153. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  154. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  155. package/dist/agent-runtime/src/thread-extras.js +27 -19
  156. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  157. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  158. package/dist/agent-runtime/src/tool-metadata.cjs +19 -0
  159. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  160. package/dist/agent-runtime/src/tool-metadata.js +19 -0
  161. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  163. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  164. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  165. package/dist/agent-runtime/src/tool-names.js +21 -0
  166. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  170. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  171. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  173. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  174. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  175. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  176. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  177. package/dist/agent-runtime/src/types.d.ts +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  179. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  180. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  181. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  182. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  186. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  187. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  191. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  192. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  194. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  196. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  197. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  200. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  201. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  202. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  203. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  204. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  205. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  206. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  207. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  208. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  209. package/dist/assets/asset-panel-store.cjs +13 -5
  210. package/dist/assets/asset-panel-store.cjs.map +1 -1
  211. package/dist/assets/asset-panel-store.d.ts +33 -2
  212. package/dist/assets/asset-panel-store.js +13 -5
  213. package/dist/assets/asset-panel-store.js.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  215. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  216. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  217. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  218. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  219. package/dist/auth/account-identity.cjs +13 -2
  220. package/dist/auth/account-identity.cjs.map +1 -1
  221. package/dist/auth/account-identity.d.ts +9 -0
  222. package/dist/auth/account-identity.js +13 -2
  223. package/dist/auth/account-identity.js.map +1 -1
  224. package/dist/auth/credential-source.cjs +20 -4
  225. package/dist/auth/credential-source.cjs.map +1 -1
  226. package/dist/auth/credential-source.d.ts +9 -0
  227. package/dist/auth/credential-source.js +20 -4
  228. package/dist/auth/credential-source.js.map +1 -1
  229. package/dist/catalog/chat-pickers.cjs +31 -0
  230. package/dist/catalog/chat-pickers.cjs.map +1 -1
  231. package/dist/catalog/chat-pickers.d.ts +17 -0
  232. package/dist/catalog/chat-pickers.js +33 -2
  233. package/dist/catalog/chat-pickers.js.map +1 -1
  234. package/dist/catalog/runtime-catalog.cjs +63 -3
  235. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  236. package/dist/catalog/runtime-catalog.d.ts +63 -3
  237. package/dist/catalog/runtime-catalog.js +64 -4
  238. package/dist/catalog/runtime-catalog.js.map +1 -1
  239. package/dist/chat/AthenaChat.cjs +301 -98
  240. package/dist/chat/AthenaChat.cjs.map +1 -1
  241. package/dist/chat/AthenaChat.d.ts +80 -4
  242. package/dist/chat/AthenaChat.js +302 -99
  243. package/dist/chat/AthenaChat.js.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  245. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  246. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  247. package/dist/chat/StatewireApprovalCard.js +37 -7
  248. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  250. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  251. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  252. package/dist/chat/StatewireQueuedMessages.js +18 -3
  253. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  254. package/dist/chat/chat-agent-mentions.cjs +70 -0
  255. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  256. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  257. package/dist/chat/chat-agent-mentions.js +70 -0
  258. package/dist/chat/chat-agent-mentions.js.map +1 -0
  259. package/dist/chat/composer-actions.cjs +12 -0
  260. package/dist/chat/composer-actions.cjs.map +1 -0
  261. package/dist/chat/composer-actions.d.ts +22 -0
  262. package/dist/chat/composer-actions.js +12 -0
  263. package/dist/chat/composer-actions.js.map +1 -0
  264. package/dist/chat/follow-up-suggestions.cjs +185 -0
  265. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  266. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  267. package/dist/chat/follow-up-suggestions.js +185 -0
  268. package/dist/chat/follow-up-suggestions.js.map +1 -0
  269. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  270. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  271. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  272. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  273. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  274. package/dist/chat/turn-changes.cjs +284 -0
  275. package/dist/chat/turn-changes.cjs.map +1 -0
  276. package/dist/chat/turn-changes.d.ts +130 -0
  277. package/dist/chat/turn-changes.js +284 -0
  278. package/dist/chat/turn-changes.js.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  282. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  283. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  285. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  286. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  287. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  288. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  290. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  291. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  292. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  293. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  297. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  298. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  302. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  303. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  307. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  308. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  310. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  311. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  312. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  313. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  317. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  318. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  338. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  339. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  343. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  344. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  348. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  349. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  351. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  352. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  353. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  354. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  356. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  357. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  358. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  359. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  363. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  364. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  366. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  367. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  368. package/dist/chat-ui/composer/slash-commands.js +74 -0
  369. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  370. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  371. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  372. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  373. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  374. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  375. package/dist/chat-ui/index.cjs +5 -0
  376. package/dist/chat-ui/index.cjs.map +1 -1
  377. package/dist/chat-ui/index.d.ts +4 -2
  378. package/dist/chat-ui/index.js +5 -0
  379. package/dist/chat-ui/index.js.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
  381. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  382. package/dist/chat-ui/mentions/mention-chip.js +11 -5
  383. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  386. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  387. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  391. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +20 -2
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
  395. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
  396. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  398. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  399. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  400. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +45 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +48 -0
  404. package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
  405. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  406. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
  407. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
  408. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
  409. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
  410. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
  411. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
  412. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
  414. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
  415. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
  417. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  419. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +274 -27
  420. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  421. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  422. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  423. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  424. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  425. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  426. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  427. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  428. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  429. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  430. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  431. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  432. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  433. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  434. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs +12 -0
  435. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
  436. package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
  437. package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
  438. package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
  439. package/dist/chat-ui/statewire.d.ts +1 -1
  440. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  441. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  442. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  443. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  444. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  445. package/dist/collab/client.cjs +41 -6
  446. package/dist/collab/client.cjs.map +1 -1
  447. package/dist/collab/client.d.ts +38 -7
  448. package/dist/collab/client.js +41 -6
  449. package/dist/collab/client.js.map +1 -1
  450. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  451. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  452. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  453. package/dist/composer/ComposerAttachedReferences.js +119 -0
  454. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  455. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  456. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  457. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  458. package/dist/composer/ComposerNamedAgents.js +63 -0
  459. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  460. package/dist/composer/attached-references.cjs +159 -0
  461. package/dist/composer/attached-references.cjs.map +1 -0
  462. package/dist/composer/attached-references.d.ts +86 -0
  463. package/dist/composer/attached-references.js +159 -0
  464. package/dist/composer/attached-references.js.map +1 -0
  465. package/dist/composer/build-composed-message.cjs +14 -7
  466. package/dist/composer/build-composed-message.cjs.map +1 -1
  467. package/dist/composer/build-composed-message.d.ts +6 -1
  468. package/dist/composer/build-composed-message.js +14 -7
  469. package/dist/composer/build-composed-message.js.map +1 -1
  470. package/dist/composer/composer-handoff.cjs +6 -2
  471. package/dist/composer/composer-handoff.cjs.map +1 -1
  472. package/dist/composer/composer-handoff.d.ts +7 -1
  473. package/dist/composer/composer-handoff.js +6 -2
  474. package/dist/composer/composer-handoff.js.map +1 -1
  475. package/dist/composer/folder-upload.cjs +149 -0
  476. package/dist/composer/folder-upload.cjs.map +1 -0
  477. package/dist/composer/folder-upload.d.ts +79 -0
  478. package/dist/composer/folder-upload.js +149 -0
  479. package/dist/composer/folder-upload.js.map +1 -0
  480. package/dist/composer/index.d.ts +1 -1
  481. package/dist/composer/staged-message-metadata.cjs +12 -0
  482. package/dist/composer/staged-message-metadata.cjs.map +1 -0
  483. package/dist/composer/staged-message-metadata.d.ts +15 -0
  484. package/dist/composer/staged-message-metadata.js +12 -0
  485. package/dist/composer/staged-message-metadata.js.map +1 -0
  486. package/dist/composer/useAttachToChat.cjs +35 -0
  487. package/dist/composer/useAttachToChat.cjs.map +1 -0
  488. package/dist/composer/useAttachToChat.d.ts +54 -0
  489. package/dist/composer/useAttachToChat.js +35 -0
  490. package/dist/composer/useAttachToChat.js.map +1 -0
  491. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  492. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  493. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  494. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  495. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  496. package/dist/composer/useFileUpload.cjs +95 -7
  497. package/dist/composer/useFileUpload.cjs.map +1 -1
  498. package/dist/composer/useFileUpload.d.ts +21 -2
  499. package/dist/composer/useFileUpload.js +95 -7
  500. package/dist/composer/useFileUpload.js.map +1 -1
  501. package/dist/data/athena-api-error.cjs +125 -0
  502. package/dist/data/athena-api-error.cjs.map +1 -0
  503. package/dist/data/athena-api-error.d.ts +96 -0
  504. package/dist/data/athena-api-error.js +125 -0
  505. package/dist/data/athena-api-error.js.map +1 -0
  506. package/dist/data/athena-data-client.cjs +106 -0
  507. package/dist/data/athena-data-client.cjs.map +1 -0
  508. package/dist/data/athena-data-client.d.ts +74 -0
  509. package/dist/data/athena-data-client.js +106 -0
  510. package/dist/data/athena-data-client.js.map +1 -0
  511. package/dist/data/athena-member.cjs +93 -0
  512. package/dist/data/athena-member.cjs.map +1 -0
  513. package/dist/data/athena-member.d.ts +125 -0
  514. package/dist/data/athena-member.js +93 -0
  515. package/dist/data/athena-member.js.map +1 -0
  516. package/dist/data/athena-request.cjs +460 -0
  517. package/dist/data/athena-request.cjs.map +1 -0
  518. package/dist/data/athena-request.d.ts +120 -0
  519. package/dist/data/athena-request.js +460 -0
  520. package/dist/data/athena-request.js.map +1 -0
  521. package/dist/data/use-athena-fetch.cjs +14 -0
  522. package/dist/data/use-athena-fetch.cjs.map +1 -0
  523. package/dist/data/use-athena-fetch.d.ts +19 -0
  524. package/dist/data/use-athena-fetch.js +14 -0
  525. package/dist/data/use-athena-fetch.js.map +1 -0
  526. package/dist/data/use-athena-graphql.cjs +66 -0
  527. package/dist/data/use-athena-graphql.cjs.map +1 -0
  528. package/dist/data/use-athena-graphql.d.ts +56 -0
  529. package/dist/data/use-athena-graphql.js +66 -0
  530. package/dist/data/use-athena-graphql.js.map +1 -0
  531. package/dist/data/use-athena-rest.cjs +33 -0
  532. package/dist/data/use-athena-rest.cjs.map +1 -0
  533. package/dist/data/use-athena-rest.d.ts +21 -0
  534. package/dist/data/use-athena-rest.js +33 -0
  535. package/dist/data/use-athena-rest.js.map +1 -0
  536. package/dist/data/use-semantic-query.cjs +44 -0
  537. package/dist/data/use-semantic-query.cjs.map +1 -0
  538. package/dist/data/use-semantic-query.d.ts +92 -0
  539. package/dist/data/use-semantic-query.js +44 -0
  540. package/dist/data/use-semantic-query.js.map +1 -0
  541. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  542. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  543. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  544. package/dist/diagnostics/errors.cjs +7 -0
  545. package/dist/diagnostics/errors.cjs.map +1 -1
  546. package/dist/diagnostics/errors.d.ts +7 -0
  547. package/dist/diagnostics/errors.js +7 -0
  548. package/dist/diagnostics/errors.js.map +1 -1
  549. package/dist/index.cjs +155 -11
  550. package/dist/index.cjs.map +1 -1
  551. package/dist/index.d.ts +72 -13
  552. package/dist/index.js +148 -4
  553. package/dist/index.js.map +1 -1
  554. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  555. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  556. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  557. package/dist/keryx-http/src/initial-sync.js +64 -16
  558. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  559. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  560. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  561. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  562. package/dist/keryx-http/src/own-awareness.js +20 -0
  563. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  564. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  565. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  566. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  567. package/dist/keryx-http/src/update-attributions.js +26 -1
  568. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  569. package/dist/offline/chat-outbox.cjs +262 -26
  570. package/dist/offline/chat-outbox.cjs.map +1 -1
  571. package/dist/offline/chat-outbox.d.ts +90 -12
  572. package/dist/offline/chat-outbox.js +263 -27
  573. package/dist/offline/chat-outbox.js.map +1 -1
  574. package/dist/provider/AthenaProvider.cjs +60 -22
  575. package/dist/provider/AthenaProvider.cjs.map +1 -1
  576. package/dist/provider/AthenaProvider.d.ts +24 -8
  577. package/dist/provider/AthenaProvider.js +61 -23
  578. package/dist/provider/AthenaProvider.js.map +1 -1
  579. package/dist/react/package.json.cjs +1 -1
  580. package/dist/react/package.json.js +1 -1
  581. package/dist/references/src/anchors/parse.cjs +11 -1
  582. package/dist/references/src/anchors/parse.cjs.map +1 -1
  583. package/dist/references/src/anchors/parse.js +11 -1
  584. package/dist/references/src/anchors/parse.js.map +1 -1
  585. package/dist/references/src/anchors/schemas.d.ts +1 -0
  586. package/dist/references/src/anchors/serialize.cjs +1 -0
  587. package/dist/references/src/anchors/serialize.cjs.map +1 -1
  588. package/dist/references/src/anchors/serialize.js +1 -0
  589. package/dist/references/src/anchors/serialize.js.map +1 -1
  590. package/dist/references/src/anchors/types.cjs +5 -0
  591. package/dist/references/src/anchors/types.cjs.map +1 -1
  592. package/dist/references/src/anchors/types.d.ts +9 -0
  593. package/dist/references/src/anchors/types.js +5 -0
  594. package/dist/references/src/anchors/types.js.map +1 -1
  595. package/dist/references/src/attachable.cjs +149 -0
  596. package/dist/references/src/attachable.cjs.map +1 -0
  597. package/dist/references/src/attachable.d.ts +87 -0
  598. package/dist/references/src/attachable.js +149 -0
  599. package/dist/references/src/attachable.js.map +1 -0
  600. package/dist/references/src/schemas.d.ts +2 -0
  601. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  602. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  603. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  604. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  605. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  606. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  607. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  608. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  609. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  610. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  611. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  612. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  613. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  614. package/dist/runtime/statewire-plan-mode.js +71 -0
  615. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  616. package/dist/runtime/statewire-run-config.cjs +3 -1
  617. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  618. package/dist/runtime/statewire-run-config.d.ts +7 -0
  619. package/dist/runtime/statewire-run-config.js +3 -1
  620. package/dist/runtime/statewire-run-config.js.map +1 -1
  621. package/dist/runtime/statewire-session-key.cjs +11 -5
  622. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  623. package/dist/runtime/statewire-session-key.d.ts +22 -10
  624. package/dist/runtime/statewire-session-key.js +11 -5
  625. package/dist/runtime/statewire-session-key.js.map +1 -1
  626. package/dist/runtime/useAthenaStatewireRuntime.cjs +64 -9
  627. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  628. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  629. package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
  630. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  631. package/dist/search/useAthenaAssets.cjs +394 -0
  632. package/dist/search/useAthenaAssets.cjs.map +1 -0
  633. package/dist/search/useAthenaAssets.d.ts +186 -0
  634. package/dist/search/useAthenaAssets.js +394 -0
  635. package/dist/search/useAthenaAssets.js.map +1 -0
  636. package/dist/sheet-range/index.cjs +4 -0
  637. package/dist/sheet-range/index.cjs.map +1 -1
  638. package/dist/sheet-range/index.d.ts +4 -2
  639. package/dist/sheet-range/index.js +4 -0
  640. package/dist/sheet-range/index.js.map +1 -1
  641. package/dist/sheet-range/query-range.cjs +102 -0
  642. package/dist/sheet-range/query-range.cjs.map +1 -0
  643. package/dist/sheet-range/query-range.d.ts +46 -0
  644. package/dist/sheet-range/query-range.js +102 -0
  645. package/dist/sheet-range/query-range.js.map +1 -0
  646. package/dist/styles.css +1 -1
  647. package/dist/subagents/index.cjs +49 -0
  648. package/dist/subagents/index.cjs.map +1 -0
  649. package/dist/subagents/index.d.ts +16 -0
  650. package/dist/subagents/index.js +49 -0
  651. package/dist/subagents/index.js.map +1 -0
  652. package/dist/subagents/lane-follow.cjs +19 -0
  653. package/dist/subagents/lane-follow.cjs.map +1 -0
  654. package/dist/subagents/lane-follow.d.ts +9 -0
  655. package/dist/subagents/lane-follow.js +19 -0
  656. package/dist/subagents/lane-follow.js.map +1 -0
  657. package/dist/subagents/lane-model.cjs +178 -0
  658. package/dist/subagents/lane-model.cjs.map +1 -0
  659. package/dist/subagents/lane-model.d.ts +140 -0
  660. package/dist/subagents/lane-model.js +178 -0
  661. package/dist/subagents/lane-model.js.map +1 -0
  662. package/dist/subagents/lane-parts.cjs +517 -0
  663. package/dist/subagents/lane-parts.cjs.map +1 -0
  664. package/dist/subagents/lane-parts.d.ts +130 -0
  665. package/dist/subagents/lane-parts.js +517 -0
  666. package/dist/subagents/lane-parts.js.map +1 -0
  667. package/dist/subagents/subagent-lane-group.cjs +215 -0
  668. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  669. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  670. package/dist/subagents/subagent-lane-group.js +215 -0
  671. package/dist/subagents/subagent-lane-group.js.map +1 -0
  672. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  673. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  674. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  675. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  676. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  677. package/dist/subagents/task-subagent-group.cjs +115 -0
  678. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  679. package/dist/subagents/task-subagent-group.d.ts +36 -0
  680. package/dist/subagents/task-subagent-group.js +115 -0
  681. package/dist/subagents/task-subagent-group.js.map +1 -0
  682. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  683. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  684. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  685. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  686. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  687. package/dist/threads/Inbox.cjs +2 -2
  688. package/dist/threads/Inbox.cjs.map +1 -1
  689. package/dist/threads/SessionList.cjs +6 -6
  690. package/dist/threads/SessionList.cjs.map +1 -1
  691. package/dist/threads/SessionsPage.cjs +13 -7
  692. package/dist/threads/SessionsPage.cjs.map +1 -1
  693. package/dist/threads/SessionsPage.d.ts +10 -1
  694. package/dist/threads/SessionsPage.js +9 -3
  695. package/dist/threads/SessionsPage.js.map +1 -1
  696. package/dist/threads/session-list-model.cjs.map +1 -1
  697. package/dist/threads/session-list-model.d.ts +2 -1
  698. package/dist/threads/session-list-model.js.map +1 -1
  699. package/dist/threads/session-row-parts.cjs +3 -3
  700. package/dist/threads/session-row-parts.cjs.map +1 -1
  701. package/dist/threads/sessions-page-model.cjs +13 -5
  702. package/dist/threads/sessions-page-model.cjs.map +1 -1
  703. package/dist/threads/sessions-page-model.d.ts +7 -0
  704. package/dist/threads/sessions-page-model.js +11 -3
  705. package/dist/threads/sessions-page-model.js.map +1 -1
  706. package/dist/threads/sessions-page-storage.cjs +8 -8
  707. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  708. package/dist/threads/sessions-page-storage.d.ts +5 -1
  709. package/dist/threads/sessions-page-storage.js +8 -8
  710. package/dist/threads/sessions-page-storage.js.map +1 -1
  711. package/dist/threads/statewire-thread-list.cjs +14 -2
  712. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  713. package/dist/threads/statewire-thread-list.d.ts +11 -2
  714. package/dist/threads/statewire-thread-list.js +14 -2
  715. package/dist/threads/statewire-thread-list.js.map +1 -1
  716. package/dist/threads/use-athena-sessions.cjs +1 -0
  717. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  718. package/dist/threads/use-athena-sessions.d.ts +7 -0
  719. package/dist/threads/use-athena-sessions.js +1 -0
  720. package/dist/threads/use-athena-sessions.js.map +1 -1
  721. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  722. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  723. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  724. package/dist/threads/use-athena-thread-agent.js +31 -0
  725. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  726. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  727. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  728. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  729. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  730. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  731. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  732. package/dist/tools/agent-creations.cjs +97 -0
  733. package/dist/tools/agent-creations.cjs.map +1 -0
  734. package/dist/tools/agent-creations.d.ts +38 -0
  735. package/dist/tools/agent-creations.js +97 -0
  736. package/dist/tools/agent-creations.js.map +1 -0
  737. package/dist/tools/agent-highlights.cjs +100 -0
  738. package/dist/tools/agent-highlights.cjs.map +1 -0
  739. package/dist/tools/agent-highlights.d.ts +57 -0
  740. package/dist/tools/agent-highlights.js +100 -0
  741. package/dist/tools/agent-highlights.js.map +1 -0
  742. package/dist/tools/append-document-tool-ui.cjs +1 -0
  743. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  744. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  745. package/dist/tools/append-document-tool-ui.js +2 -1
  746. package/dist/tools/append-document-tool-ui.js.map +1 -1
  747. package/dist/tools/auto-open-tools.cjs +144 -71
  748. package/dist/tools/auto-open-tools.cjs.map +1 -1
  749. package/dist/tools/auto-open-tools.d.ts +131 -1
  750. package/dist/tools/auto-open-tools.js +145 -72
  751. package/dist/tools/auto-open-tools.js.map +1 -1
  752. package/dist/tools/browser-tool-uis.cjs +594 -0
  753. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  754. package/dist/tools/browser-tool-uis.d.ts +8 -0
  755. package/dist/tools/browser-tool-uis.js +594 -0
  756. package/dist/tools/browser-tool-uis.js.map +1 -0
  757. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  758. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  759. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  760. package/dist/tools/computer-asset-tool-uis.js +313 -0
  761. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  762. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  763. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  764. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  765. package/dist/tools/document-edit-tool-uis.js +218 -0
  766. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  767. package/dist/tools/drive-tool-uis.cjs +429 -0
  768. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  769. package/dist/tools/drive-tool-uis.d.ts +121 -0
  770. package/dist/tools/drive-tool-uis.js +429 -0
  771. package/dist/tools/drive-tool-uis.js.map +1 -0
  772. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  773. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  774. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  775. package/dist/tools/email-calendar-tool-uis.js +789 -0
  776. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  777. package/dist/tools/ontology-tool-uis.cjs +83 -0
  778. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  779. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  780. package/dist/tools/ontology-tool-uis.js +83 -0
  781. package/dist/tools/ontology-tool-uis.js.map +1 -0
  782. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  783. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  784. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  785. package/dist/tools/orchestration-tool-uis.js +586 -0
  786. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  787. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  788. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  789. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  790. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  791. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  792. package/dist/tools/project-tool-uis.cjs +213 -0
  793. package/dist/tools/project-tool-uis.cjs.map +1 -0
  794. package/dist/tools/project-tool-uis.d.ts +14 -0
  795. package/dist/tools/project-tool-uis.js +213 -0
  796. package/dist/tools/project-tool-uis.js.map +1 -0
  797. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  798. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  799. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  800. package/dist/tools/sandbox-tool-uis.js +491 -0
  801. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  802. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  803. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  804. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  805. package/dist/tools/sheet-query-tool-ui.js +138 -0
  806. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  807. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  808. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  809. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  810. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  811. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  812. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  813. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  814. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  815. package/dist/tools/subagent-task-tool-ui.js +28 -479
  816. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  817. package/dist/tools/tool-summary.cjs +36 -0
  818. package/dist/tools/tool-summary.cjs.map +1 -1
  819. package/dist/tools/tool-summary.js +36 -0
  820. package/dist/tools/tool-summary.js.map +1 -1
  821. package/dist/tools/tool-uis.cjs +181 -53
  822. package/dist/tools/tool-uis.cjs.map +1 -1
  823. package/dist/tools/tool-uis.d.ts +40 -0
  824. package/dist/tools/tool-uis.js +183 -55
  825. package/dist/tools/tool-uis.js.map +1 -1
  826. package/dist/typed-interrupts/index.cjs +15 -0
  827. package/dist/typed-interrupts/index.cjs.map +1 -0
  828. package/dist/typed-interrupts/index.d.ts +20 -0
  829. package/dist/typed-interrupts/index.js +15 -0
  830. package/dist/typed-interrupts/index.js.map +1 -0
  831. package/dist/version.cjs +4 -0
  832. package/dist/version.cjs.map +1 -1
  833. package/dist/version.d.ts +9 -0
  834. package/dist/version.js +4 -0
  835. package/dist/version.js.map +1 -1
  836. package/dist/workbench/live-desktop-api.cjs +2 -1
  837. package/dist/workbench/live-desktop-api.cjs.map +1 -1
  838. package/dist/workbench/live-desktop-api.js +2 -1
  839. package/dist/workbench/live-desktop-api.js.map +1 -1
  840. package/dist/workbench/session-workbench-panes.cjs +6 -6
  841. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  842. package/dist/workbench/session-workspace-api.cjs +7 -2
  843. package/dist/workbench/session-workspace-api.cjs.map +1 -1
  844. package/dist/workbench/session-workspace-api.d.ts +10 -0
  845. package/dist/workbench/session-workspace-api.js +7 -2
  846. package/dist/workbench/session-workspace-api.js.map +1 -1
  847. package/package.json +28 -6
  848. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  849. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  850. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  851. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  852. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
@@ -1,14 +1,22 @@
1
1
  import { MentionMenuSection } from "../types.js";
2
- import { fetchGraphQL, SIMPLE_SEARCH_QUERY, PAGINATED_ASSETS_QUERY, TOOL_CATALOG_QUERY, WORKSPACE_MEMBERS_QUERY } from "../api-client.js";
3
- import { assetTypeToThumb, assetTypeToIcon } from "./asset-type-icons.js";
4
- function assetToMenuItem(asset) {
2
+ import { fetchGraphQL, SIMPLE_SEARCH_QUERY, MENTION_EMAIL_METADATA_QUERY, PAGINATED_ASSETS_QUERY, TOOL_CATALOG_QUERY, WORKSPACE_MEMBERS_QUERY, WORKSPACE_GROUPS_QUERY, PERSON_MENTION_CANDIDATES_QUERY } from "../api-client.js";
3
+ import { filterItems } from "../utils/filter-items.js";
4
+ import { assetTypeToThumb, isEmailAssetType, assetTypeToIcon, emailProviderThumb } from "./asset-type-icons.js";
5
+ function assetDisplayType(asset) {
6
+ return asset.athenaOriginalType || asset.athenaConvertedType;
7
+ }
8
+ function assetToMenuItem({
9
+ asset,
10
+ metadata,
11
+ appUrl
12
+ }) {
5
13
  const isFolder = asset.athenaOriginalType === "folder";
6
- const displayType = asset.athenaConvertedType || asset.athenaOriginalType;
14
+ const displayType = assetDisplayType(asset);
7
15
  return {
8
16
  id: asset.id,
9
17
  name: asset.title || "Untitled",
10
18
  type: isFolder ? "folder" : "asset",
11
- thumbnailUrl: assetTypeToThumb(displayType),
19
+ thumbnailUrl: emailProviderThumb({ assetType: displayType, metadata, appUrl }) ?? assetTypeToThumb(displayType, { appUrl }),
12
20
  fallbackIcon: assetTypeToIcon(displayType),
13
21
  navigatesToScope: isFolder ? asset.id : void 0,
14
22
  visibleInScopes: /* @__PURE__ */ new Set(),
@@ -20,6 +28,30 @@ function assetToMenuItem(asset) {
20
28
  }
21
29
  };
22
30
  }
31
+ const EMAIL_METADATA_TIMEOUT_MS = 2e3;
32
+ async function readEmailMetadata(auth, assets) {
33
+ const assetIds = assets.filter((asset) => isEmailAssetType(assetDisplayType(asset))).map((asset) => asset.id);
34
+ if (!assetIds.length) return /* @__PURE__ */ new Map();
35
+ try {
36
+ const data = await fetchGraphQL(
37
+ auth,
38
+ MENTION_EMAIL_METADATA_QUERY,
39
+ { assetIds },
40
+ typeof AbortSignal.timeout === "function" ? { signal: AbortSignal.timeout(EMAIL_METADATA_TIMEOUT_MS) } : {}
41
+ );
42
+ return new Map(
43
+ (data.getAssetsByIds ?? []).map((row) => [row.id, row.athenaMetadata])
44
+ );
45
+ } catch {
46
+ return /* @__PURE__ */ new Map();
47
+ }
48
+ }
49
+ async function assetsToMenuItems(auth, assets) {
50
+ const metadata = await readEmailMetadata(auth, assets);
51
+ return assets.map(
52
+ (asset) => assetToMenuItem({ asset, metadata: metadata.get(asset.id), appUrl: auth.appUrl })
53
+ );
54
+ }
23
55
  async function querySimpleSearch(auth, opts) {
24
56
  var _a, _b;
25
57
  const searchRequest = {
@@ -39,10 +71,11 @@ async function querySimpleSearch(auth, opts) {
39
71
  const data = await fetchGraphQL(auth, SIMPLE_SEARCH_QUERY, { input });
40
72
  const assets = ((_b = data.simpleSearch) == null ? void 0 : _b.assets) || [];
41
73
  return {
42
- items: assets.map(assetToMenuItem),
74
+ items: await assetsToMenuItems(auth, assets),
43
75
  hasMore: assets.length === opts.limit
44
76
  };
45
77
  }
78
+ const CHAT_AGENTS_SCOPE = "athena_chat_agents";
46
79
  const CATEGORY_DEFS = {
47
80
  favorites: { name: "Favorites", icon: "star", scope: "favorites" },
48
81
  assets: { name: "Assets", icon: "file-text", scope: "athena_assets" },
@@ -60,6 +93,7 @@ const CATEGORY_DEFS = {
60
93
  tools: { name: "Tools", icon: "wrench", scope: "tools" },
61
94
  toolkits: { name: "Toolkits", icon: "package", scope: "toolkits" },
62
95
  team: { name: "Team", icon: "users", scope: "team" },
96
+ agents: { name: "Agents", icon: "bot", scope: CHAT_AGENTS_SCOPE },
63
97
  drives: { name: "Drives", icon: "hard-drive", scope: "drive_catalogs" }
64
98
  };
65
99
  function webpageDescription(webpage) {
@@ -90,10 +124,11 @@ function webpageToMenuItem(webpage) {
90
124
  }
91
125
  function buildRootMenuItems({
92
126
  categories,
93
- webpages
127
+ webpages,
128
+ hasChatAgents = false
94
129
  }) {
95
130
  const webpageItems = webpages.map(webpageToMenuItem);
96
- const categoryItems = categories.filter((cat) => CATEGORY_DEFS[cat]).map((cat) => {
131
+ const categoryItems = categories.filter((cat) => CATEGORY_DEFS[cat]).filter((cat) => cat !== "agents" || hasChatAgents).map((cat) => {
97
132
  const def = CATEGORY_DEFS[cat];
98
133
  return {
99
134
  id: cat,
@@ -109,10 +144,12 @@ function buildRootMenuItems({
109
144
  return [...webpageItems, ...categoryItems];
110
145
  }
111
146
  const transformRootCategories = async (context) => {
147
+ var _a;
112
148
  const { sourceConfig } = context;
113
149
  const items = buildRootMenuItems({
114
150
  categories: sourceConfig.categories,
115
- webpages: sourceConfig.getWebpages()
151
+ webpages: sourceConfig.getWebpages(),
152
+ hasChatAgents: (((_a = sourceConfig.getChatAgents) == null ? void 0 : _a.call(sourceConfig).length) ?? 0) > 0
116
153
  });
117
154
  return { items, pagination: { hasMore: false } };
118
155
  };
@@ -149,7 +186,7 @@ const fetchFavorites = async (context) => {
149
186
  }
150
187
  });
151
188
  const assets = data.getPaginatedAssetsForWorkspace || [];
152
- const items = assets.map(assetToMenuItem);
189
+ const items = await assetsToMenuItems(sourceConfig.auth, assets);
153
190
  return {
154
191
  items,
155
192
  pagination: { hasMore: assets.length === limit }
@@ -192,7 +229,7 @@ const fetchFolderContents = async (context) => {
192
229
  const assets = rawAssets.filter(
193
230
  (a) => a.athenaConvertedType !== "catalog" && a.athenaOriginalType !== "catalog"
194
231
  );
195
- const items = assets.map(assetToMenuItem);
232
+ const items = await assetsToMenuItems(sourceConfig.auth, assets);
196
233
  return {
197
234
  items,
198
235
  pagination: {
@@ -217,8 +254,56 @@ const fetchTypedAssets = async (context) => {
217
254
  pagination: { hasMore: result.hasMore }
218
255
  };
219
256
  };
220
- function memberToMenuItem(member) {
221
- const displayName = [member.firstName, member.lastName].filter(Boolean).join(" ").trim() || member.email;
257
+ const SAVED_PERSON_ASSET_ID_EXTRA = "savedPersonAssetId";
258
+ const PERSON_CANDIDATES_LIMIT = 500;
259
+ function normalizeEmail(email) {
260
+ return (email ?? "").trim().toLowerCase();
261
+ }
262
+ function rankTeam({
263
+ members,
264
+ people
265
+ }) {
266
+ if (people.length === 0) {
267
+ return members.map((member) => ({
268
+ kind: "member",
269
+ member,
270
+ savedName: null,
271
+ savedPersonAssetId: null
272
+ }));
273
+ }
274
+ const membersByEmail = new Map(
275
+ members.map((member) => [normalizeEmail(member.email), member])
276
+ );
277
+ const placed = /* @__PURE__ */ new Set();
278
+ const entries = [];
279
+ for (const person of people) {
280
+ const member = membersByEmail.get(normalizeEmail(person.email));
281
+ if (member) {
282
+ if (placed.has(member)) continue;
283
+ placed.add(member);
284
+ entries.push({
285
+ kind: "member",
286
+ member,
287
+ savedName: person.savedPersonAssetId ? person.displayName : null,
288
+ savedPersonAssetId: person.savedPersonAssetId ?? null
289
+ });
290
+ } else if (person.savedPersonAssetId) {
291
+ entries.push({ kind: "saved", person });
292
+ }
293
+ }
294
+ for (const member of members) {
295
+ if (!placed.has(member)) {
296
+ entries.push({ kind: "member", member, savedName: null, savedPersonAssetId: null });
297
+ }
298
+ }
299
+ return entries;
300
+ }
301
+ function memberToMenuItem({
302
+ member,
303
+ savedName,
304
+ savedPersonAssetId
305
+ }) {
306
+ const displayName = savedName || [member.firstName, member.lastName].filter(Boolean).join(" ").trim() || member.email;
222
307
  return {
223
308
  id: member.email,
224
309
  name: displayName,
@@ -227,11 +312,42 @@ function memberToMenuItem(member) {
227
312
  thumbnailUrl: member.avatarUrl || void 0,
228
313
  visibleInScopes: /* @__PURE__ */ new Set(),
229
314
  email: member.email,
230
- extra: { isAdmin: member.isAdmin }
315
+ extra: {
316
+ isAdmin: member.isAdmin,
317
+ ...savedPersonAssetId ? { [SAVED_PERSON_ASSET_ID_EXTRA]: savedPersonAssetId } : {}
318
+ }
319
+ };
320
+ }
321
+ function savedPersonToMenuItem(person) {
322
+ return {
323
+ id: person.email,
324
+ name: person.displayName,
325
+ type: "user",
326
+ fallbackIcon: "user",
327
+ thumbnailUrl: person.photoUrl || void 0,
328
+ visibleInScopes: /* @__PURE__ */ new Set(),
329
+ email: person.email,
330
+ ...person.savedPersonAssetId ? { extra: { [SAVED_PERSON_ASSET_ID_EXTRA]: person.savedPersonAssetId } } : {}
231
331
  };
232
332
  }
233
- async function queryTeam(auth) {
234
- if (!auth.workspaceId) return [];
333
+ function groupMemberCount(count) {
334
+ return count === 1 ? "1 member" : `${count} members`;
335
+ }
336
+ function groupToMenuItem(group) {
337
+ return {
338
+ id: group.id,
339
+ name: group.name,
340
+ type: "group",
341
+ fallbackIcon: "users",
342
+ description: groupMemberCount(group.memberCount),
343
+ visibleInScopes: /* @__PURE__ */ new Set(),
344
+ extra: {
345
+ memberCount: group.memberCount,
346
+ ...group.slug ? { slug: group.slug } : {}
347
+ }
348
+ };
349
+ }
350
+ async function queryMembers(auth) {
235
351
  const data = await fetchGraphQL(
236
352
  auth,
237
353
  WORKSPACE_MEMBERS_QUERY,
@@ -239,21 +355,65 @@ async function queryTeam(auth) {
239
355
  );
240
356
  return (data.getUsersInWorkspace || []).filter(
241
357
  (member) => Boolean(member.email)
242
- ).map(memberToMenuItem);
358
+ );
243
359
  }
244
- function createTeamLoader(auth) {
360
+ async function queryGroups(auth) {
361
+ try {
362
+ const data = await fetchGraphQL(
363
+ auth,
364
+ WORKSPACE_GROUPS_QUERY,
365
+ { workspaceId: auth.workspaceId }
366
+ );
367
+ return (data.getWorkspaceGroups || []).filter((group) => group.archivedAt == null);
368
+ } catch {
369
+ return [];
370
+ }
371
+ }
372
+ async function queryPeople(auth) {
373
+ try {
374
+ const data = await fetchGraphQL(
375
+ auth,
376
+ PERSON_MENTION_CANDIDATES_QUERY,
377
+ { limit: PERSON_CANDIDATES_LIMIT }
378
+ );
379
+ return data.personMentionCandidates || [];
380
+ } catch {
381
+ return [];
382
+ }
383
+ }
384
+ async function queryTeam(auth, { isAdmin }) {
385
+ const { workspaceId } = auth;
386
+ if (!workspaceId) return [];
387
+ const scoped = { ...auth, workspaceId };
388
+ const [members, groups, people] = await Promise.all([
389
+ queryMembers(scoped),
390
+ queryGroups(scoped),
391
+ isAdmin ? queryPeople(auth) : Promise.resolve([])
392
+ ]);
393
+ return [
394
+ ...rankTeam({ members, people }).map(
395
+ (entry) => entry.kind === "member" ? memberToMenuItem(entry) : savedPersonToMenuItem(entry.person)
396
+ ),
397
+ ...groups.map(groupToMenuItem)
398
+ ];
399
+ }
400
+ function createTeamLoader(auth, { getIsAdmin = () => false } = {}) {
245
401
  let pending = null;
246
402
  return () => {
247
- pending ?? (pending = queryTeam(auth).catch((error) => {
248
- pending = null;
249
- throw error;
250
- }));
251
- return pending;
403
+ const isAdmin = getIsAdmin();
404
+ if ((pending == null ? void 0 : pending.isAdmin) !== isAdmin) {
405
+ const team = queryTeam(auth, { isAdmin }).catch((error) => {
406
+ if ((pending == null ? void 0 : pending.team) === team) pending = null;
407
+ throw error;
408
+ });
409
+ pending = { isAdmin, team };
410
+ }
411
+ return pending.team;
252
412
  };
253
413
  }
254
414
  const fetchTeam = async (context) => {
255
415
  const { auth, loadTeam } = context.sourceConfig;
256
- const items = await (loadTeam ? loadTeam() : queryTeam(auth));
416
+ const items = await (loadTeam ? loadTeam() : queryTeam(auth, { isAdmin: false }));
257
417
  return { items, pagination: { hasMore: false } };
258
418
  };
259
419
  const TEAM_WAIT_MS = 1500;
@@ -266,19 +426,47 @@ function withinTeamWait(members) {
266
426
  () => clearTimeout(timer)
267
427
  );
268
428
  }
429
+ function savedPeopleListedAsPeople(team) {
430
+ var _a;
431
+ const rows = /* @__PURE__ */ new Map();
432
+ for (const item of team) {
433
+ const assetId = (_a = item.extra) == null ? void 0 : _a[SAVED_PERSON_ASSET_ID_EXTRA];
434
+ if (item.type === "user" && typeof assetId === "string") rows.set(assetId, item);
435
+ }
436
+ return rows;
437
+ }
438
+ function withoutListedSavedPeople({
439
+ items,
440
+ listed,
441
+ query
442
+ }) {
443
+ if (listed.size === 0) return items;
444
+ return items.filter((item) => {
445
+ if (item.type === "user") return true;
446
+ const person = listed.get(item.id);
447
+ if (!person) return true;
448
+ return filterItems([item], query).length > 0 && filterItems([person], query).length === 0;
449
+ });
450
+ }
269
451
  function withTeam(source, loadTeam) {
270
452
  return keepOfflineItems(source, async (context) => {
271
453
  var _a, _b, _c;
272
454
  const meta = context.fetchState.meta || {};
273
455
  const isFirstPage = (meta.validatedCount || 0) === 0;
456
+ const query = ((_a = context.query) == null ? void 0 : _a.trim()) ?? "";
274
457
  const [result, team] = await Promise.all([
275
458
  source(context),
276
- isFirstPage && ((_a = context.query) == null ? void 0 : _a.trim()) ? withinTeamWait(loadTeam()) : Promise.resolve([])
459
+ query ? withinTeamWait(loadTeam()) : Promise.resolve([])
277
460
  ]);
278
461
  if (team.length === 0) return result;
462
+ const items = withoutListedSavedPeople({
463
+ items: result.items,
464
+ listed: savedPeopleListedAsPeople(team),
465
+ query
466
+ });
279
467
  return {
280
468
  ...result,
281
- items: [...team, ...result.items],
469
+ items: isFirstPage ? [...team, ...items] : items,
282
470
  pagination: {
283
471
  ...result.pagination,
284
472
  hasMore: ((_b = result.pagination) == null ? void 0 : _b.hasMore) ?? false,
@@ -404,15 +592,71 @@ function offlineItemsOf(sourceFn) {
404
592
  var _a;
405
593
  return ((_a = OFFLINE_ITEMS.get(sourceFn)) == null ? void 0 : _a()) ?? [];
406
594
  }
595
+ const CHAT_AGENT_ITEM_ID_PREFIX = "agent:";
596
+ function chatAgentMenuItem(agent) {
597
+ return {
598
+ id: `${CHAT_AGENT_ITEM_ID_PREFIX}${agent.ref}`,
599
+ name: agent.name,
600
+ type: "agent",
601
+ fallbackIcon: agent.icon || "bot",
602
+ visibleInScopes: /* @__PURE__ */ new Set(),
603
+ extra: { agentRef: agent.ref, agentAssetId: agent.assetId }
604
+ };
605
+ }
606
+ function chatAgentFromMenuItem(item) {
607
+ var _a, _b;
608
+ if (item.type !== "agent") return null;
609
+ const ref = (_a = item.extra) == null ? void 0 : _a.agentRef;
610
+ if (typeof ref !== "string" || !ref) return null;
611
+ const assetId = (_b = item.extra) == null ? void 0 : _b.agentAssetId;
612
+ return {
613
+ ref,
614
+ name: item.name,
615
+ assetId: typeof assetId === "string" && assetId ? assetId : null,
616
+ icon: item.fallbackIcon
617
+ };
618
+ }
619
+ const transformChatAgents = async (context) => {
620
+ const items = context.sourceConfig.getAgents().map(chatAgentMenuItem);
621
+ return { items, pagination: { hasMore: false, totalCount: items.length } };
622
+ };
623
+ function withChatAgents(source, getAgents) {
624
+ const wrapped = async (context) => {
625
+ var _a, _b;
626
+ const result = await source(context);
627
+ const agents = getAgents().map(chatAgentMenuItem);
628
+ if (agents.length === 0) return result;
629
+ return {
630
+ ...result,
631
+ items: [...agents, ...result.items],
632
+ pagination: {
633
+ ...result.pagination,
634
+ hasMore: ((_a = result.pagination) == null ? void 0 : _a.hasMore) ?? false,
635
+ consumedCount: ((_b = result.pagination) == null ? void 0 : _b.consumedCount) ?? result.items.length
636
+ }
637
+ };
638
+ };
639
+ const inner = OFFLINE_ITEMS.get(source);
640
+ OFFLINE_ITEMS.set(wrapped, () => [
641
+ ...getAgents().map(chatAgentMenuItem),
642
+ ...(inner == null ? void 0 : inner()) ?? []
643
+ ]);
644
+ return wrapped;
645
+ }
407
646
  const LOCAL_SOURCES = /* @__PURE__ */ new Set([
408
647
  transformRootCategories,
409
- transformProvidedTools
648
+ transformProvidedTools,
649
+ transformChatAgents
410
650
  ]);
411
651
  function sourceAsksAthena(sourceFn) {
412
652
  return !LOCAL_SOURCES.has(sourceFn);
413
653
  }
414
654
  export {
655
+ CHAT_AGENTS_SCOPE,
656
+ SAVED_PERSON_ASSET_ID_EXTRA,
415
657
  buildRootMenuItems,
658
+ chatAgentFromMenuItem,
659
+ chatAgentMenuItem,
416
660
  createTeamLoader,
417
661
  fetchAssets,
418
662
  fetchDrives,
@@ -426,9 +670,12 @@ export {
426
670
  fetchTypedAssets,
427
671
  offlineItemsOf,
428
672
  providedToolMenuItems,
673
+ rankTeam,
429
674
  sourceAsksAthena,
675
+ transformChatAgents,
430
676
  transformProvidedTools,
431
677
  transformRootCategories,
678
+ withChatAgents,
432
679
  withProvidedTools,
433
680
  withTeam
434
681
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/chat-ui/mentions/suggestions/data/sources/index.ts"],"sourcesContent":["/**\n * Mention data sources shared by every chat host.\n *\n * Each source function implements the SourceFn interface:\n * (context: SourceContext) => Promise<SourceResult>\n *\n * Sources are either:\n * - FETCHERS: Call GraphQL API (assets, folders, team, etc.)\n * - TRANSFORMERS: Return static/local data (root categories, host-provided items)\n */\n\nimport type {\n MenuItem,\n MentionTool,\n SourceFn,\n SourceResult,\n SourceToRegister,\n FetchMetadata,\n WebpageMention,\n} from \"../types\";\nimport { MentionMenuSection } from \"../types\";\nimport {\n fetchGraphQL,\n SIMPLE_SEARCH_QUERY,\n PAGINATED_ASSETS_QUERY,\n WORKSPACE_MEMBERS_QUERY,\n TOOL_CATALOG_QUERY,\n type MentionAuthContext,\n type AssetResult,\n type WorkspaceMember,\n type ToolCatalogResult,\n} from \"../api-client\";\nimport { assetTypeToThumb, assetTypeToIcon } from \"./asset-type-icons\";\n\n// ── Helpers ──\n\nfunction assetToMenuItem(asset: AssetResult): MenuItem {\n const isFolder = asset.athenaOriginalType === \"folder\";\n const displayType = asset.athenaConvertedType || asset.athenaOriginalType;\n return {\n id: asset.id,\n name: asset.title || \"Untitled\",\n type: isFolder ? \"folder\" : \"asset\",\n thumbnailUrl: assetTypeToThumb(displayType),\n fallbackIcon: assetTypeToIcon(displayType),\n navigatesToScope: isFolder ? asset.id : undefined,\n visibleInScopes: new Set(),\n updatedAt: asset.updatedAt ?? undefined,\n extra: {\n athenaOriginalType: asset.athenaOriginalType,\n athenaConvertedType: asset.athenaConvertedType,\n parentFolderId: asset.parentFolderId,\n },\n };\n}\n\nasync function querySimpleSearch(\n auth: MentionAuthContext,\n opts: {\n query?: string;\n limit: number;\n offset: number;\n includeTypes?: string[];\n excludeTypes?: string[];\n },\n): Promise<{ items: MenuItem[]; hasMore: boolean }> {\n const searchRequest: Record<string, any> = {\n query: opts.query?.trim() || \"\",\n type: opts.includeTypes || [],\n notType: opts.excludeTypes || [],\n limit: opts.limit,\n offset: opts.offset,\n };\n\n const input = {\n searchRequest,\n returnFullAsset: true,\n shouldCalculateTotal: false,\n sort: { field: \"UPDATED_AT\", direction: \"DESC\" },\n filterColumns: { isArchived: false, isHidden: false },\n };\n\n const data = await fetchGraphQL<{\n simpleSearch: { assets: AssetResult[]; totalCount: number };\n }>(auth, SIMPLE_SEARCH_QUERY, { input });\n\n const assets = data.simpleSearch?.assets || [];\n return {\n items: assets.map(assetToMenuItem),\n hasMore: assets.length === opts.limit,\n };\n}\n\n// ══════════════════════════════════════════════════════════════════════\n// ROOT CATEGORIES (Transformer)\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface RootCategoriesConfig {\n categories: string[];\n getWebpages: () => readonly WebpageMention[];\n}\n\nconst CATEGORY_DEFS: Record<\n string,\n { name: string; icon: string; scope: string }\n> = {\n favorites: { name: \"Favorites\", icon: \"star\", scope: \"favorites\" },\n assets: { name: \"Assets\", icon: \"file-text\", scope: \"athena_assets\" },\n projects: {\n name: \"Projects\",\n icon: \"folder-kanban\",\n scope: \"athena_projects\",\n },\n browse_profiles: {\n name: \"Browse Profiles\",\n icon: \"globe\",\n scope: \"athena_browse_profiles\",\n },\n folders: { name: \"Folders\", icon: \"folder\", scope: \"athena_folders\" },\n tools: { name: \"Tools\", icon: \"wrench\", scope: \"tools\" },\n toolkits: { name: \"Toolkits\", icon: \"package\", scope: \"toolkits\" },\n team: { name: \"Team\", icon: \"users\", scope: \"team\" },\n drives: { name: \"Drives\", icon: \"hard-drive\", scope: \"drive_catalogs\" },\n};\n\nfunction webpageDescription(webpage: WebpageMention): string {\n try {\n const hostname = new URL(webpage.url).hostname;\n return webpage.isCurrent ? `${webpage.title} · ${hostname}` : hostname;\n } catch {\n return webpage.title;\n }\n}\n\nfunction webpageToMenuItem(webpage: WebpageMention): MenuItem {\n return {\n id: `webpage-tab-${webpage.tabId}`,\n name: webpage.isCurrent ? \"This webpage\" : webpage.title,\n type: \"tab\",\n thumbnailUrl: assetTypeToThumb(\"web_page\"),\n fallbackIcon: \"globe\",\n visibleInScopes: new Set([\"root\"]),\n description: webpageDescription(webpage),\n url: webpage.url,\n menuSection: webpage.isCurrent\n ? MentionMenuSection.CURRENT_WEBPAGE\n : MentionMenuSection.OTHER_WEBPAGES,\n extra: {\n tabId: webpage.tabId,\n title: webpage.title,\n isCurrent: webpage.isCurrent,\n },\n };\n}\n\nexport function buildRootMenuItems({\n categories,\n webpages,\n}: {\n categories: readonly string[];\n webpages: readonly WebpageMention[];\n}): MenuItem[] {\n const webpageItems = webpages.map(webpageToMenuItem);\n const categoryItems = categories\n .filter((cat: string) => CATEGORY_DEFS[cat])\n .map((cat: string) => {\n const def = CATEGORY_DEFS[cat];\n return {\n id: cat,\n name: def.name,\n type: \"menu\" as const,\n fallbackIcon: def.icon,\n visibleInScopes: new Set([\"root\"]),\n navigatesToScope: def.scope,\n isNavigationOnly: true,\n menuSection: MentionMenuSection.LIBRARY,\n };\n });\n\n return [...webpageItems, ...categoryItems];\n}\n\nexport const transformRootCategories: SourceFn<RootCategoriesConfig> = async (\n context,\n) => {\n const { sourceConfig } = context;\n const items = buildRootMenuItems({\n categories: sourceConfig.categories,\n webpages: sourceConfig.getWebpages(),\n });\n\n return { items, pagination: { hasMore: false } };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// ASSETS (Fetcher) — All non-folder assets via SimpleSearch\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface AssetsConfig {\n auth: MentionAuthContext;\n limit?: number;\n}\n\nexport const fetchAssets: SourceFn<AssetsConfig> = async (context) => {\n const { query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n query,\n limit,\n offset,\n excludeTypes: [\"folder\", \"catalog\", \"session\"],\n });\n\n return {\n items: result.items,\n pagination: { hasMore: result.hasMore },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// FAVORITES (Fetcher) — Favorited assets\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface FavoritesConfig {\n auth: MentionAuthContext;\n limit?: number;\n}\n\nexport const fetchFavorites: SourceFn<FavoritesConfig> = async (context) => {\n const { query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const data = await fetchGraphQL<{\n getPaginatedAssetsForWorkspace: AssetResult[];\n }>(sourceConfig.auth, PAGINATED_ASSETS_QUERY, {\n limit,\n offset,\n parentFolderId: null,\n filterTypes: null,\n filterColumns: {\n isFavorited: true,\n isArchived: false,\n isHidden: false,\n },\n });\n\n const assets = data.getPaginatedAssetsForWorkspace || [];\n const items = assets.map(assetToMenuItem);\n\n return {\n items,\n pagination: { hasMore: assets.length === limit },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// FOLDERS (Fetcher) — All folders as flat list\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface FoldersConfig {\n auth: MentionAuthContext;\n limit?: number;\n}\n\nexport const fetchFolders: SourceFn<FoldersConfig> = async (context) => {\n const { query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n query,\n limit,\n offset,\n includeTypes: [\"folder\"],\n });\n\n return {\n items: result.items,\n pagination: { hasMore: result.hasMore },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// FOLDER CONTENTS (Fetcher) — Contents of a specific folder\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface FolderContentsConfig {\n auth: MentionAuthContext;\n limit?: number;\n}\n\nexport const fetchFolderContents: SourceFn<FolderContentsConfig> = async (\n context,\n) => {\n const { scope, query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n // Scope IS the folder ID (or 'internal_drive' for root)\n const parentFolderId = scope === \"internal_drive\" ? null : scope;\n\n const data = await fetchGraphQL<{\n getPaginatedAssetsForWorkspace: AssetResult[];\n }>(sourceConfig.auth, PAGINATED_ASSETS_QUERY, {\n limit,\n offset,\n parentFolderId,\n filterTypes: null,\n filterColumns: {\n isArchived: false,\n isHidden: false,\n ...(query ? { title: [{ op: \"LIKE\", value: `%${query}%` }] } : {}),\n },\n });\n\n const rawAssets = data.getPaginatedAssetsForWorkspace || [];\n // Exclude catalogs from folder contents\n const assets = rawAssets.filter(\n (a) =>\n a.athenaConvertedType !== \"catalog\" && a.athenaOriginalType !== \"catalog\",\n );\n const items = assets.map(assetToMenuItem);\n\n return {\n items,\n pagination: {\n hasMore: rawAssets.length === limit,\n consumedCount: rawAssets.length,\n },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// PROJECTS (Fetcher) — Project assets\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface TypedAssetsConfig {\n auth: MentionAuthContext;\n includeOnlyTypes: string[];\n limit?: number;\n}\n\nexport const fetchTypedAssets: SourceFn<TypedAssetsConfig> = async (\n context,\n) => {\n const { query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n query,\n limit,\n offset,\n includeTypes: sourceConfig.includeOnlyTypes,\n });\n\n return {\n items: result.items,\n pagination: { hasMore: result.hasMore },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// TEAM (Fetcher) — Workspace members\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface TeamConfig {\n auth: MentionAuthContext;\n /** Shared member loader, so browsing Team and searching read one fetch. */\n loadTeam?: () => Promise<MenuItem[]>;\n}\n\n// Person mentions are keyed on email (`mention://person?id=<email>&email=…`),\n// so a member without one cannot be mentioned.\nfunction memberToMenuItem(\n member: WorkspaceMember & { email: string },\n): MenuItem {\n const displayName =\n [member.firstName, member.lastName].filter(Boolean).join(\" \").trim() ||\n member.email;\n\n return {\n id: member.email,\n name: displayName,\n type: \"user\" as const,\n fallbackIcon: \"user\",\n thumbnailUrl: member.avatarUrl || undefined,\n visibleInScopes: new Set<string>(),\n email: member.email,\n extra: { isAdmin: member.isAdmin },\n };\n}\n\nasync function queryTeam(auth: MentionAuthContext): Promise<MenuItem[]> {\n if (!auth.workspaceId) return [];\n const data = await fetchGraphQL<{ getUsersInWorkspace: WorkspaceMember[] }>(\n auth,\n WORKSPACE_MEMBERS_QUERY,\n { workspaceId: auth.workspaceId },\n );\n return (data.getUsersInWorkspace || [])\n .filter((member): member is WorkspaceMember & { email: string } =>\n Boolean(member.email),\n )\n .map(memberToMenuItem);\n}\n\n/**\n * One workspace-member fetch per store: every keystroke of a root search\n * reads the same list. A failed fetch is forgotten so the next one retries.\n */\nexport function createTeamLoader(\n auth: MentionAuthContext,\n): () => Promise<MenuItem[]> {\n let pending: Promise<MenuItem[]> | null = null;\n return () => {\n pending ??= queryTeam(auth).catch((error: unknown) => {\n pending = null;\n throw error;\n });\n return pending;\n };\n}\n\nexport const fetchTeam: SourceFn<TeamConfig> = async (context) => {\n const { auth, loadTeam } = context.sourceConfig;\n const items = await (loadTeam ? loadTeam() : queryTeam(auth));\n return { items, pagination: { hasMore: false } };\n};\n\n// Asset results never wait on the roster for longer than this; a slow roster\n// lands on a later keystroke, which reads the same pending request.\nconst TEAM_WAIT_MS = 1500;\n\nfunction withinTeamWait(members: Promise<MenuItem[]>): Promise<MenuItem[]> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<MenuItem[]>((resolve) => {\n timer = setTimeout(() => resolve([]), TEAM_WAIT_MS);\n });\n return Promise.race([members.catch(() => []), timeout]).finally(() =>\n clearTimeout(timer),\n );\n}\n\n/**\n * Add workspace members to a root search's first page, so `@<name>` finds\n * people beside assets (the cache filters them by the query). Like\n * `withProvidedTools`, `consumedCount` stays the server's row count so the\n * members never advance the asset offset; a failed member fetch leaves the\n * asset results alone.\n */\nexport function withTeam<TConfig>(\n source: SourceFn<TConfig>,\n loadTeam: () => Promise<MenuItem[]>,\n): SourceFn<TConfig> {\n // Members come from Athena: while it can't be reached, only what the wrapped source can list\n // without it stands in (a host's own tools).\n return keepOfflineItems(source, async (context) => {\n const meta = (context.fetchState.meta as FetchMetadata) || {};\n const isFirstPage = (meta.validatedCount || 0) === 0;\n const [result, team] = await Promise.all([\n source(context),\n isFirstPage && context.query?.trim()\n ? withinTeamWait(loadTeam())\n : Promise.resolve([]),\n ]);\n if (team.length === 0) return result;\n return {\n ...result,\n items: [...team, ...result.items],\n pagination: {\n ...result.pagination,\n hasMore: result.pagination?.hasMore ?? false,\n consumedCount: result.pagination?.consumedCount ?? result.items.length,\n },\n };\n });\n}\n\n// ══════════════════════════════════════════════════════════════════════\n// TOOLS / TOOLKITS (Fetcher) — Mentionable tool catalog\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface ToolCatalogConfig {\n auth: MentionAuthContext;\n}\n\n// getToolkitToToolsMapping is already filtered server-side for the\n// authenticated user (admin-only entries, beta allowlist, workspace registry),\n// so only mention/menu visibility is applied here.\nasync function queryToolCatalog(\n auth: MentionAuthContext,\n): Promise<ToolCatalogResult[\"getToolkitToToolsMapping\"]> {\n const data = await fetchGraphQL<ToolCatalogResult>(auth, TOOL_CATALOG_QUERY);\n return data.getToolkitToToolsMapping;\n}\n\nexport const fetchTools: SourceFn<ToolCatalogConfig> = async (context) => {\n const catalog = await queryToolCatalog(context.sourceConfig.auth);\n\n const items: MenuItem[] = catalog.tools\n .filter((tool) => tool.isMentionable)\n .map((tool) => ({\n id: tool.id,\n name: tool.name,\n type: \"tool\" as const,\n fallbackIcon: tool.icon,\n description: tool.description ?? undefined,\n visibleInScopes: new Set<string>(),\n ...(tool.adminOnly ? { extra: { isAdminOnly: true } } : {}),\n }));\n\n return { items, pagination: { hasMore: false } };\n};\n\nexport const fetchToolkits: SourceFn<ToolCatalogConfig> = async (context) => {\n const catalog = await queryToolCatalog(context.sourceConfig.auth);\n\n const items: MenuItem[] = catalog.toolkits\n .filter((toolkit) => toolkit.isMentionable && !toolkit.hideFromMenu)\n .map((toolkit) => ({\n id: toolkit.name,\n name: toolkit.displayName,\n type: \"toolkit\" as const,\n fallbackIcon: toolkit.icon,\n description: toolkit.description || undefined,\n visibleInScopes: new Set<string>(),\n ...(toolkit.onlyAdmin ? { extra: { isAdminOnly: true } } : {}),\n }));\n\n return { items, pagination: { hasMore: false } };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// DRIVES (Fetcher) — Drive catalog assets\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface DrivesConfig {\n auth: MentionAuthContext;\n}\n\nexport const fetchDrives: SourceFn<DrivesConfig> = async (context) => {\n const { fetchState, sourceConfig } = context;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n limit: 50,\n offset,\n includeTypes: [\"catalog\"],\n });\n\n // Drive catalogs are navigation-only (navigate into them to see contents)\n const items: MenuItem[] = result.items.map((item) => ({\n ...item,\n type: \"drive_catalog\" as const,\n fallbackIcon: \"hard-drive\",\n isNavigationOnly: true,\n navigatesToScope: item.id,\n }));\n\n // Register folder contents source for each catalog\n const sources: SourceToRegister[] = items.map((item) => ({\n scope: item.id,\n sourceFn: fetchFolderContents,\n sourceConfig: { auth: sourceConfig.auth, limit: 50 },\n }));\n\n return {\n items,\n pagination: { hasMore: result.hasMore },\n sources,\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// GLOBAL SEARCH (Fetcher) — Aggregated search across all sources\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface GlobalSearchConfig {\n auth: MentionAuthContext;\n}\n\nexport const fetchGlobalSearch: SourceFn<GlobalSearchConfig> = async (\n context,\n) => {\n const { query, fetchState, sourceConfig } = context;\n if (!query?.trim()) return { items: [], pagination: { hasMore: false } };\n\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n query,\n limit: 50,\n offset,\n excludeTypes: [\"catalog\", \"session\"],\n });\n\n return {\n items: result.items,\n pagination: { hasMore: result.hasMore },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// HOST-PROVIDED TOOLS (Transformer) — a host's own Tools / Toolkits list\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface ProvidedToolsConfig {\n getTools: () => readonly MentionTool[];\n type: MentionTool[\"type\"];\n}\n\n/** Menu items for a host-provided tool list, in the host's order. */\nexport function providedToolMenuItems(\n tools: readonly MentionTool[],\n type?: MentionTool[\"type\"],\n): MenuItem[] {\n return tools\n .filter((tool) => type === undefined || tool.type === type)\n .map((tool) => ({\n id: tool.id,\n name: tool.name,\n type: tool.type,\n fallbackIcon: tool.icon ?? (tool.type === \"toolkit\" ? \"Package\" : \"Wrench\"),\n description: tool.description,\n visibleInScopes: new Set<string>(),\n }));\n}\n\nexport const transformProvidedTools: SourceFn<ProvidedToolsConfig> = async (\n context,\n) => ({\n items: providedToolMenuItems(\n context.sourceConfig.getTools(),\n context.sourceConfig.type,\n ),\n pagination: { hasMore: false },\n});\n\n/**\n * Prepend a host's tool list to another source's items so a root query matches\n * them the way it matches assets (the cache filters by query and sorts\n * toolkits first). The wrapped source's offset bookkeeping is preserved:\n * `consumedCount` stays the number of rows the server returned, so the added\n * items never advance the next page's offset.\n */\nexport function withProvidedTools<TConfig>(\n source: SourceFn<TConfig>,\n getTools: () => readonly MentionTool[],\n): SourceFn<TConfig> {\n const wrapped: SourceFn<TConfig> = async (context) => {\n const result = await source(context);\n return {\n ...result,\n items: [...providedToolMenuItems(getTools()), ...result.items],\n pagination: {\n ...result.pagination,\n hasMore: result.pagination?.hasMore ?? false,\n consumedCount: result.pagination?.consumedCount ?? result.items.length,\n },\n };\n };\n // The host's tools are the host's own: while Athena can't be reached, a search still finds them.\n OFFLINE_ITEMS.set(wrapped as SourceFn, () => providedToolMenuItems(getTools()));\n return wrapped;\n}\n\n/**\n * What a source that asks Athena can still list while Athena can't be reached: the host's own items\n * it carries (a host's tool list), by source. The source itself is never called then.\n */\nconst OFFLINE_ITEMS = new WeakMap<SourceFn, () => MenuItem[]>();\n\n/** `wrapped` keeps what `inner` lists without Athena (a wrapper that adds Athena's items alone). */\nfunction keepOfflineItems<TConfig>(\n inner: SourceFn<TConfig>,\n wrapped: SourceFn<TConfig>,\n): SourceFn<TConfig> {\n const offline = OFFLINE_ITEMS.get(inner as SourceFn);\n if (offline) OFFLINE_ITEMS.set(wrapped as SourceFn, offline);\n return wrapped;\n}\n\n/**\n * The host's own items a source asking Athena can still list while Athena can't be reached (a\n * root search's host tools), unfiltered; none for a source that holds no such items.\n */\nexport function offlineItemsOf(sourceFn: SourceFn): MenuItem[] {\n return OFFLINE_ITEMS.get(sourceFn)?.() ?? [];\n}\n\n// ══════════════════════════════════════════════════════════════════════\n// LOCAL SOURCES — what a scope can show while Athena can't be reached\n// ══════════════════════════════════════════════════════════════════════\n\n/**\n * The transformers: they read only what the host already holds (its tabs, its\n * own tool list), so their scopes keep working while Athena can't be reached.\n * Every other source asks Athena.\n */\nconst LOCAL_SOURCES: ReadonlySet<SourceFn> = new Set<SourceFn>([\n transformRootCategories,\n transformProvidedTools,\n]);\n\n/** Whether a scope's source asks Athena for its items (a fetcher, not a transformer). */\nexport function sourceAsksAthena(sourceFn: SourceFn): boolean {\n return !LOCAL_SOURCES.has(sourceFn);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/chat-ui/mentions/suggestions/data/sources/index.ts"],"sourcesContent":["/**\n * Mention data sources shared by every chat host.\n *\n * Each source function implements the SourceFn interface:\n * (context: SourceContext) => Promise<SourceResult>\n *\n * Sources are either:\n * - FETCHERS: Call GraphQL API (assets, folders, team, etc.)\n * - TRANSFORMERS: Return static/local data (root categories, host-provided items)\n */\n\nimport type {\n MenuItem,\n MentionChatAgent,\n MentionTool,\n SourceFn,\n SourceResult,\n SourceToRegister,\n FetchMetadata,\n WebpageMention,\n} from \"../types\";\nimport { MentionMenuSection } from \"../types\";\nimport {\n fetchGraphQL,\n SIMPLE_SEARCH_QUERY,\n PAGINATED_ASSETS_QUERY,\n MENTION_EMAIL_METADATA_QUERY,\n WORKSPACE_MEMBERS_QUERY,\n WORKSPACE_GROUPS_QUERY,\n PERSON_MENTION_CANDIDATES_QUERY,\n TOOL_CATALOG_QUERY,\n type MentionAuthContext,\n type AssetResult,\n type WorkspaceMember,\n type WorkspaceGroup,\n type PersonMentionCandidate,\n type ToolCatalogResult,\n} from \"../api-client\";\nimport { filterItems } from \"../utils/filter-items\";\nimport {\n assetTypeToIcon,\n assetTypeToThumb,\n emailProviderThumb,\n isEmailAssetType,\n} from \"./asset-type-icons\";\n\n// ── Helpers ──\n\n/** The type an asset row is drawn as: its own type, as Olympus's menu reads it. */\nfunction assetDisplayType(asset: AssetResult): string | null {\n return asset.athenaOriginalType || asset.athenaConvertedType;\n}\n\nfunction assetToMenuItem({\n asset,\n metadata,\n appUrl,\n}: {\n asset: AssetResult;\n /** The row's metadata, read for email rows alone (`readEmailMetadata`). */\n metadata?: unknown;\n /** The Athena web app the chat talks to, which serves the icons. */\n appUrl: string | undefined;\n}): MenuItem {\n const isFolder = asset.athenaOriginalType === \"folder\";\n const displayType = assetDisplayType(asset);\n return {\n id: asset.id,\n name: asset.title || \"Untitled\",\n type: isFolder ? \"folder\" : \"asset\",\n thumbnailUrl:\n emailProviderThumb({ assetType: displayType, metadata, appUrl }) ??\n assetTypeToThumb(displayType, { appUrl }),\n fallbackIcon: assetTypeToIcon(displayType),\n navigatesToScope: isFolder ? asset.id : undefined,\n visibleInScopes: new Set(),\n updatedAt: asset.updatedAt ?? undefined,\n extra: {\n athenaOriginalType: asset.athenaOriginalType,\n athenaConvertedType: asset.athenaConvertedType,\n parentFolderId: asset.parentFolderId,\n },\n };\n}\n\n/** How long a page waits for its email rows' metadata before it lists them with the mail icon. */\nconst EMAIL_METADATA_TIMEOUT_MS = 2_000;\n\n/**\n * The metadata of a page's email rows, which names the mailbox whose logo\n * each draws (Olympus draws Gmail's or Outlook's). Only those rows are read,\n * so the search itself stays slim; a page without one reads nothing, and a\n * failed or slow read lists the rows with the mail icon.\n */\nasync function readEmailMetadata(\n auth: MentionAuthContext,\n assets: readonly AssetResult[],\n): Promise<ReadonlyMap<string, unknown>> {\n const assetIds = assets\n .filter((asset) => isEmailAssetType(assetDisplayType(asset)))\n .map((asset) => asset.id);\n if (!assetIds.length) return new Map();\n try {\n const data = await fetchGraphQL<{\n getAssetsByIds: { id: string; athenaMetadata: unknown }[] | null;\n }>(\n auth,\n MENTION_EMAIL_METADATA_QUERY,\n { assetIds },\n typeof AbortSignal.timeout === \"function\"\n ? { signal: AbortSignal.timeout(EMAIL_METADATA_TIMEOUT_MS) }\n : {},\n );\n return new Map(\n (data.getAssetsByIds ?? []).map((row) => [row.id, row.athenaMetadata]),\n );\n } catch {\n return new Map();\n }\n}\n\n/** A page of assets as menu items, each email row with its mailbox's logo. */\nasync function assetsToMenuItems(\n auth: MentionAuthContext,\n assets: readonly AssetResult[],\n): Promise<MenuItem[]> {\n const metadata = await readEmailMetadata(auth, assets);\n return assets.map((asset) =>\n assetToMenuItem({ asset, metadata: metadata.get(asset.id), appUrl: auth.appUrl }),\n );\n}\n\nasync function querySimpleSearch(\n auth: MentionAuthContext,\n opts: {\n query?: string;\n limit: number;\n offset: number;\n includeTypes?: string[];\n excludeTypes?: string[];\n },\n): Promise<{ items: MenuItem[]; hasMore: boolean }> {\n const searchRequest: Record<string, any> = {\n query: opts.query?.trim() || \"\",\n type: opts.includeTypes || [],\n notType: opts.excludeTypes || [],\n limit: opts.limit,\n offset: opts.offset,\n };\n\n const input = {\n searchRequest,\n returnFullAsset: true,\n shouldCalculateTotal: false,\n sort: { field: \"UPDATED_AT\", direction: \"DESC\" },\n filterColumns: { isArchived: false, isHidden: false },\n };\n\n const data = await fetchGraphQL<{\n simpleSearch: { assets: AssetResult[]; totalCount: number };\n }>(auth, SIMPLE_SEARCH_QUERY, { input });\n\n const assets = data.simpleSearch?.assets || [];\n return {\n items: await assetsToMenuItems(auth, assets),\n hasMore: assets.length === opts.limit,\n };\n}\n\n// ══════════════════════════════════════════════════════════════════════\n// ROOT CATEGORIES (Transformer)\n// ══════════════════════════════════════════════════════════════════════\n\n/** The scope of the composer's Agents section (Olympus's `CHAT_AGENTS_SCOPE`). */\nexport const CHAT_AGENTS_SCOPE = \"athena_chat_agents\";\n\nexport interface RootCategoriesConfig {\n categories: string[];\n getWebpages: () => readonly WebpageMention[];\n /**\n * The agents the Agents category offers now: the category shows only while\n * there is one to name (it hides once eight are named, or for a viewer who is\n * offered none).\n */\n getChatAgents?: () => readonly MentionChatAgent[];\n}\n\nconst CATEGORY_DEFS: Record<\n string,\n { name: string; icon: string; scope: string }\n> = {\n favorites: { name: \"Favorites\", icon: \"star\", scope: \"favorites\" },\n assets: { name: \"Assets\", icon: \"file-text\", scope: \"athena_assets\" },\n projects: {\n name: \"Projects\",\n icon: \"folder-kanban\",\n scope: \"athena_projects\",\n },\n browse_profiles: {\n name: \"Browse Profiles\",\n icon: \"globe\",\n scope: \"athena_browse_profiles\",\n },\n folders: { name: \"Folders\", icon: \"folder\", scope: \"athena_folders\" },\n tools: { name: \"Tools\", icon: \"wrench\", scope: \"tools\" },\n toolkits: { name: \"Toolkits\", icon: \"package\", scope: \"toolkits\" },\n team: { name: \"Team\", icon: \"users\", scope: \"team\" },\n agents: { name: \"Agents\", icon: \"bot\", scope: CHAT_AGENTS_SCOPE },\n drives: { name: \"Drives\", icon: \"hard-drive\", scope: \"drive_catalogs\" },\n};\n\nfunction webpageDescription(webpage: WebpageMention): string {\n try {\n const hostname = new URL(webpage.url).hostname;\n return webpage.isCurrent ? `${webpage.title} · ${hostname}` : hostname;\n } catch {\n return webpage.title;\n }\n}\n\nfunction webpageToMenuItem(webpage: WebpageMention): MenuItem {\n return {\n id: `webpage-tab-${webpage.tabId}`,\n name: webpage.isCurrent ? \"This webpage\" : webpage.title,\n type: \"tab\",\n thumbnailUrl: assetTypeToThumb(\"web_page\"),\n fallbackIcon: \"globe\",\n visibleInScopes: new Set([\"root\"]),\n description: webpageDescription(webpage),\n url: webpage.url,\n menuSection: webpage.isCurrent\n ? MentionMenuSection.CURRENT_WEBPAGE\n : MentionMenuSection.OTHER_WEBPAGES,\n extra: {\n tabId: webpage.tabId,\n title: webpage.title,\n isCurrent: webpage.isCurrent,\n },\n };\n}\n\nexport function buildRootMenuItems({\n categories,\n webpages,\n hasChatAgents = false,\n}: {\n categories: readonly string[];\n webpages: readonly WebpageMention[];\n /** Whether the Agents category has an agent to offer (it shows only then). */\n hasChatAgents?: boolean;\n}): MenuItem[] {\n const webpageItems = webpages.map(webpageToMenuItem);\n const categoryItems = categories\n .filter((cat: string) => CATEGORY_DEFS[cat])\n .filter((cat: string) => cat !== \"agents\" || hasChatAgents)\n .map((cat: string) => {\n const def = CATEGORY_DEFS[cat];\n return {\n id: cat,\n name: def.name,\n type: \"menu\" as const,\n fallbackIcon: def.icon,\n visibleInScopes: new Set([\"root\"]),\n navigatesToScope: def.scope,\n isNavigationOnly: true,\n menuSection: MentionMenuSection.LIBRARY,\n };\n });\n\n return [...webpageItems, ...categoryItems];\n}\n\nexport const transformRootCategories: SourceFn<RootCategoriesConfig> = async (\n context,\n) => {\n const { sourceConfig } = context;\n const items = buildRootMenuItems({\n categories: sourceConfig.categories,\n webpages: sourceConfig.getWebpages(),\n hasChatAgents: (sourceConfig.getChatAgents?.().length ?? 0) > 0,\n });\n\n return { items, pagination: { hasMore: false } };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// ASSETS (Fetcher) — All non-folder assets via SimpleSearch\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface AssetsConfig {\n auth: MentionAuthContext;\n limit?: number;\n}\n\nexport const fetchAssets: SourceFn<AssetsConfig> = async (context) => {\n const { query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n query,\n limit,\n offset,\n excludeTypes: [\"folder\", \"catalog\", \"session\"],\n });\n\n return {\n items: result.items,\n pagination: { hasMore: result.hasMore },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// FAVORITES (Fetcher) — Favorited assets\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface FavoritesConfig {\n auth: MentionAuthContext;\n limit?: number;\n}\n\nexport const fetchFavorites: SourceFn<FavoritesConfig> = async (context) => {\n const { query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const data = await fetchGraphQL<{\n getPaginatedAssetsForWorkspace: AssetResult[];\n }>(sourceConfig.auth, PAGINATED_ASSETS_QUERY, {\n limit,\n offset,\n parentFolderId: null,\n filterTypes: null,\n filterColumns: {\n isFavorited: true,\n isArchived: false,\n isHidden: false,\n },\n });\n\n const assets = data.getPaginatedAssetsForWorkspace || [];\n const items = await assetsToMenuItems(sourceConfig.auth, assets);\n\n return {\n items,\n pagination: { hasMore: assets.length === limit },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// FOLDERS (Fetcher) — All folders as flat list\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface FoldersConfig {\n auth: MentionAuthContext;\n limit?: number;\n}\n\nexport const fetchFolders: SourceFn<FoldersConfig> = async (context) => {\n const { query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n query,\n limit,\n offset,\n includeTypes: [\"folder\"],\n });\n\n return {\n items: result.items,\n pagination: { hasMore: result.hasMore },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// FOLDER CONTENTS (Fetcher) — Contents of a specific folder\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface FolderContentsConfig {\n auth: MentionAuthContext;\n limit?: number;\n}\n\nexport const fetchFolderContents: SourceFn<FolderContentsConfig> = async (\n context,\n) => {\n const { scope, query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n // Scope IS the folder ID (or 'internal_drive' for root)\n const parentFolderId = scope === \"internal_drive\" ? null : scope;\n\n const data = await fetchGraphQL<{\n getPaginatedAssetsForWorkspace: AssetResult[];\n }>(sourceConfig.auth, PAGINATED_ASSETS_QUERY, {\n limit,\n offset,\n parentFolderId,\n filterTypes: null,\n filterColumns: {\n isArchived: false,\n isHidden: false,\n ...(query ? { title: [{ op: \"LIKE\", value: `%${query}%` }] } : {}),\n },\n });\n\n const rawAssets = data.getPaginatedAssetsForWorkspace || [];\n // Exclude catalogs from folder contents\n const assets = rawAssets.filter(\n (a) =>\n a.athenaConvertedType !== \"catalog\" && a.athenaOriginalType !== \"catalog\",\n );\n const items = await assetsToMenuItems(sourceConfig.auth, assets);\n\n return {\n items,\n pagination: {\n hasMore: rawAssets.length === limit,\n consumedCount: rawAssets.length,\n },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// PROJECTS (Fetcher) — Project assets\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface TypedAssetsConfig {\n auth: MentionAuthContext;\n includeOnlyTypes: string[];\n limit?: number;\n}\n\nexport const fetchTypedAssets: SourceFn<TypedAssetsConfig> = async (\n context,\n) => {\n const { query, fetchState, sourceConfig } = context;\n const limit = sourceConfig.limit ?? 50;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n query,\n limit,\n offset,\n includeTypes: sourceConfig.includeOnlyTypes,\n });\n\n return {\n items: result.items,\n pagination: { hasMore: result.hasMore },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// TEAM (Fetcher) — Workspace members, the viewer's people, the workspace's groups\n// ══════════════════════════════════════════════════════════════════════\n\n/** Loads the Team list; browsing Team and every root search read one fetch. */\nexport type TeamLoader = () => Promise<MenuItem[]>;\n\nexport interface TeamConfig {\n auth: MentionAuthContext;\n /** Shared member loader, so browsing Team and searching read one fetch. */\n loadTeam?: TeamLoader;\n}\n\nexport interface TeamLoaderOptions {\n /**\n * Whether the viewer is an Athena admin, read at each load: while Person is in\n * preview the ranked people are an admin's alone, as in Olympus.\n */\n getIsAdmin?: () => boolean;\n}\n\n/**\n * Where a Team item names the saved person asset it stands for: a root search\n * drops that asset's own row, since the person is already listed once, as\n * themselves (Olympus's `SAVED_PERSON_ASSET_ID_EXTRA`).\n */\nexport const SAVED_PERSON_ASSET_ID_EXTRA = \"savedPersonAssetId\";\n\n/** How many of the viewer's people Team reads (agora's most). */\nconst PERSON_CANDIDATES_LIMIT = 500;\n\nfunction normalizeEmail(email: string | null | undefined): string {\n return (email ?? \"\").trim().toLowerCase();\n}\n\ntype MemberWithEmail = WorkspaceMember & { email: string };\n\ntype TeamEntry =\n | {\n kind: \"member\";\n member: MemberWithEmail;\n savedName: string | null;\n savedPersonAssetId: string | null;\n }\n | { kind: \"saved\"; person: PersonMentionCandidate };\n\n/**\n * One ordered Team list, as Olympus ranks it: the viewer's people in their\n * order (most recently talked to first) — a member under the name the viewer\n * saved them as, a saved person who is not a member as themselves — then the\n * members the ranking did not reach. Without people the members keep their\n * order.\n */\nexport function rankTeam({\n members,\n people,\n}: {\n members: readonly MemberWithEmail[];\n people: readonly PersonMentionCandidate[];\n}): TeamEntry[] {\n if (people.length === 0) {\n return members.map((member) => ({\n kind: \"member\",\n member,\n savedName: null,\n savedPersonAssetId: null,\n }));\n }\n const membersByEmail = new Map(\n members.map((member) => [normalizeEmail(member.email), member]),\n );\n const placed = new Set<MemberWithEmail>();\n const entries: TeamEntry[] = [];\n for (const person of people) {\n const member = membersByEmail.get(normalizeEmail(person.email));\n if (member) {\n if (placed.has(member)) continue;\n placed.add(member);\n entries.push({\n kind: \"member\",\n member,\n savedName: person.savedPersonAssetId ? person.displayName : null,\n savedPersonAssetId: person.savedPersonAssetId ?? null,\n });\n } else if (person.savedPersonAssetId) {\n entries.push({ kind: \"saved\", person });\n }\n }\n for (const member of members) {\n if (!placed.has(member)) {\n entries.push({ kind: \"member\", member, savedName: null, savedPersonAssetId: null });\n }\n }\n return entries;\n}\n\n// Person mentions are keyed on email (`mention://person?id=<email>&email=…`),\n// so a member without one cannot be mentioned.\nfunction memberToMenuItem({\n member,\n savedName,\n savedPersonAssetId,\n}: {\n member: MemberWithEmail;\n savedName: string | null;\n savedPersonAssetId: string | null;\n}): MenuItem {\n // The viewer's own name for them, else first + last name, else the email.\n const displayName =\n savedName ||\n [member.firstName, member.lastName].filter(Boolean).join(\" \").trim() ||\n member.email;\n\n return {\n id: member.email,\n name: displayName,\n type: \"user\" as const,\n fallbackIcon: \"user\",\n thumbnailUrl: member.avatarUrl || undefined,\n visibleInScopes: new Set<string>(),\n email: member.email,\n extra: {\n isAdmin: member.isAdmin,\n ...(savedPersonAssetId ? { [SAVED_PERSON_ASSET_ID_EXTRA]: savedPersonAssetId } : {}),\n },\n };\n}\n\n/** A saved person who is not a member mentions like a member: a person reference keyed on email. */\nfunction savedPersonToMenuItem(person: PersonMentionCandidate): MenuItem {\n return {\n id: person.email,\n name: person.displayName,\n type: \"user\" as const,\n fallbackIcon: \"user\",\n thumbnailUrl: person.photoUrl || undefined,\n visibleInScopes: new Set<string>(),\n email: person.email,\n ...(person.savedPersonAssetId\n ? { extra: { [SAVED_PERSON_ASSET_ID_EXTRA]: person.savedPersonAssetId } }\n : {}),\n };\n}\n\nfunction groupMemberCount(count: number): string {\n return count === 1 ? \"1 member\" : `${count} members`;\n}\n\n/**\n * A workspace group: a pointer to the group, not to its members\n * (`mention://group?id=…&name=…`). It shares nothing and notifies nobody, which\n * is why the row shows the member count rather than the members.\n */\nfunction groupToMenuItem(group: WorkspaceGroup): MenuItem {\n return {\n id: group.id,\n name: group.name,\n type: \"group\" as const,\n fallbackIcon: \"users\",\n description: groupMemberCount(group.memberCount),\n visibleInScopes: new Set<string>(),\n extra: {\n memberCount: group.memberCount,\n ...(group.slug ? { slug: group.slug } : {}),\n },\n };\n}\n\nasync function queryMembers(\n auth: MentionAuthContext & { workspaceId: string },\n): Promise<MemberWithEmail[]> {\n const data = await fetchGraphQL<{ getUsersInWorkspace: WorkspaceMember[] }>(\n auth,\n WORKSPACE_MEMBERS_QUERY,\n { workspaceId: auth.workspaceId },\n );\n return (data.getUsersInWorkspace || []).filter(\n (member): member is MemberWithEmail => Boolean(member.email),\n );\n}\n\n/** The workspace's groups, archived ones never offered; none from an agora that predates groups. */\nasync function queryGroups(\n auth: MentionAuthContext & { workspaceId: string },\n): Promise<WorkspaceGroup[]> {\n try {\n const data = await fetchGraphQL<{ getWorkspaceGroups: WorkspaceGroup[] }>(\n auth,\n WORKSPACE_GROUPS_QUERY,\n { workspaceId: auth.workspaceId },\n );\n return (data.getWorkspaceGroups || []).filter((group) => group.archivedAt == null);\n } catch {\n return [];\n }\n}\n\n/** The viewer's people, for an admin; none when agora refuses them (Person's gate, an older agora). */\nasync function queryPeople(auth: MentionAuthContext): Promise<PersonMentionCandidate[]> {\n try {\n const data = await fetchGraphQL<{ personMentionCandidates: PersonMentionCandidate[] }>(\n auth,\n PERSON_MENTION_CANDIDATES_QUERY,\n { limit: PERSON_CANDIDATES_LIMIT },\n );\n return data.personMentionCandidates || [];\n } catch {\n return [];\n }\n}\n\n/**\n * The Team list Olympus offers: the members (ranked by the viewer's people for\n * an admin, with the people they saved who are not members), then the\n * workspace's groups. The members' read decides: when it fails the list fails,\n * and the next load asks again.\n */\nasync function queryTeam(\n auth: MentionAuthContext,\n { isAdmin }: { isAdmin: boolean },\n): Promise<MenuItem[]> {\n const { workspaceId } = auth;\n if (!workspaceId) return [];\n const scoped = { ...auth, workspaceId };\n const [members, groups, people] = await Promise.all([\n queryMembers(scoped),\n queryGroups(scoped),\n isAdmin ? queryPeople(auth) : Promise.resolve<PersonMentionCandidate[]>([]),\n ]);\n return [\n ...rankTeam({ members, people }).map((entry) =>\n entry.kind === \"member\" ? memberToMenuItem(entry) : savedPersonToMenuItem(entry.person),\n ),\n ...groups.map(groupToMenuItem),\n ];\n}\n\n/**\n * One Team fetch per store (and per admin answer): every keystroke of a root\n * search reads the same list. A failed fetch is forgotten so the next one\n * retries.\n */\nexport function createTeamLoader(\n auth: MentionAuthContext,\n { getIsAdmin = () => false }: TeamLoaderOptions = {},\n): TeamLoader {\n let pending: { isAdmin: boolean; team: Promise<MenuItem[]> } | null = null;\n return () => {\n const isAdmin = getIsAdmin();\n if (pending?.isAdmin !== isAdmin) {\n const team = queryTeam(auth, { isAdmin }).catch((error: unknown) => {\n if (pending?.team === team) pending = null;\n throw error;\n });\n pending = { isAdmin, team };\n }\n return pending.team;\n };\n}\n\nexport const fetchTeam: SourceFn<TeamConfig> = async (context) => {\n const { auth, loadTeam } = context.sourceConfig;\n const items = await (loadTeam ? loadTeam() : queryTeam(auth, { isAdmin: false }));\n return { items, pagination: { hasMore: false } };\n};\n\n// Asset results never wait on the roster for longer than this; a slow roster\n// lands on a later keystroke, which reads the same pending request.\nconst TEAM_WAIT_MS = 1500;\n\nfunction withinTeamWait(members: Promise<MenuItem[]>): Promise<MenuItem[]> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<MenuItem[]>((resolve) => {\n timer = setTimeout(() => resolve([]), TEAM_WAIT_MS);\n });\n return Promise.race([members.catch(() => []), timeout]).finally(() =>\n clearTimeout(timer),\n );\n}\n\n/** The saved person assets Team lists, each with its person row. */\nfunction savedPeopleListedAsPeople(team: readonly MenuItem[]): ReadonlyMap<string, MenuItem> {\n const rows = new Map<string, MenuItem>();\n for (const item of team) {\n const assetId: unknown = item.extra?.[SAVED_PERSON_ASSET_ID_EXTRA];\n if (item.type === \"user\" && typeof assetId === \"string\") rows.set(assetId, item);\n }\n return rows;\n}\n\n/**\n * Drops the asset row of a saved person Team lists: one person is one row, the\n * person mention. A query only the asset answers (a pasted asset id) keeps the\n * asset row, since the person row cannot match it.\n */\nfunction withoutListedSavedPeople({\n items,\n listed,\n query,\n}: {\n items: MenuItem[];\n listed: ReadonlyMap<string, MenuItem>;\n query: string;\n}): MenuItem[] {\n if (listed.size === 0) return items;\n return items.filter((item) => {\n if (item.type === \"user\") return true;\n const person = listed.get(item.id);\n if (!person) return true;\n return (\n filterItems([item], query, \"global_search\").length > 0 &&\n filterItems([person], query, \"global_search\").length === 0\n );\n });\n}\n\n/**\n * Add the Team list to a root search's first page, so `@<name>` finds people\n * and groups beside assets (the cache filters them by the query), and drop the\n * asset row of a saved person Team lists, on every page. Like\n * `withProvidedTools`, `consumedCount` stays the server's row count so the\n * members never advance the asset offset; a failed member fetch leaves the\n * asset results alone.\n */\nexport function withTeam<TConfig>(\n source: SourceFn<TConfig>,\n loadTeam: TeamLoader,\n): SourceFn<TConfig> {\n // Members come from Athena: while it can't be reached, only what the wrapped source can list\n // without it stands in (a host's own tools).\n return keepOfflineItems(source, async (context) => {\n const meta = (context.fetchState.meta as FetchMetadata) || {};\n const isFirstPage = (meta.validatedCount || 0) === 0;\n const query = context.query?.trim() ?? \"\";\n const [result, team] = await Promise.all([\n source(context),\n query ? withinTeamWait(loadTeam()) : Promise.resolve([]),\n ]);\n if (team.length === 0) return result;\n const items = withoutListedSavedPeople({\n items: result.items,\n listed: savedPeopleListedAsPeople(team),\n query,\n });\n return {\n ...result,\n items: isFirstPage ? [...team, ...items] : items,\n pagination: {\n ...result.pagination,\n hasMore: result.pagination?.hasMore ?? false,\n consumedCount: result.pagination?.consumedCount ?? result.items.length,\n },\n };\n });\n}\n\n// ══════════════════════════════════════════════════════════════════════\n// TOOLS / TOOLKITS (Fetcher) — Mentionable tool catalog\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface ToolCatalogConfig {\n auth: MentionAuthContext;\n}\n\n// getToolkitToToolsMapping is already filtered server-side for the\n// authenticated user (admin-only entries, beta allowlist, workspace registry),\n// so only mention/menu visibility is applied here.\nasync function queryToolCatalog(\n auth: MentionAuthContext,\n): Promise<ToolCatalogResult[\"getToolkitToToolsMapping\"]> {\n const data = await fetchGraphQL<ToolCatalogResult>(auth, TOOL_CATALOG_QUERY);\n return data.getToolkitToToolsMapping;\n}\n\nexport const fetchTools: SourceFn<ToolCatalogConfig> = async (context) => {\n const catalog = await queryToolCatalog(context.sourceConfig.auth);\n\n const items: MenuItem[] = catalog.tools\n .filter((tool) => tool.isMentionable)\n .map((tool) => ({\n id: tool.id,\n name: tool.name,\n type: \"tool\" as const,\n fallbackIcon: tool.icon,\n description: tool.description ?? undefined,\n visibleInScopes: new Set<string>(),\n ...(tool.adminOnly ? { extra: { isAdminOnly: true } } : {}),\n }));\n\n return { items, pagination: { hasMore: false } };\n};\n\nexport const fetchToolkits: SourceFn<ToolCatalogConfig> = async (context) => {\n const catalog = await queryToolCatalog(context.sourceConfig.auth);\n\n const items: MenuItem[] = catalog.toolkits\n .filter((toolkit) => toolkit.isMentionable && !toolkit.hideFromMenu)\n .map((toolkit) => ({\n id: toolkit.name,\n name: toolkit.displayName,\n type: \"toolkit\" as const,\n fallbackIcon: toolkit.icon,\n description: toolkit.description || undefined,\n visibleInScopes: new Set<string>(),\n ...(toolkit.onlyAdmin ? { extra: { isAdminOnly: true } } : {}),\n }));\n\n return { items, pagination: { hasMore: false } };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// DRIVES (Fetcher) — Drive catalog assets\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface DrivesConfig {\n auth: MentionAuthContext;\n}\n\nexport const fetchDrives: SourceFn<DrivesConfig> = async (context) => {\n const { fetchState, sourceConfig } = context;\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n limit: 50,\n offset,\n includeTypes: [\"catalog\"],\n });\n\n // Drive catalogs are navigation-only (navigate into them to see contents)\n const items: MenuItem[] = result.items.map((item) => ({\n ...item,\n type: \"drive_catalog\" as const,\n fallbackIcon: \"hard-drive\",\n isNavigationOnly: true,\n navigatesToScope: item.id,\n }));\n\n // Register folder contents source for each catalog\n const sources: SourceToRegister[] = items.map((item) => ({\n scope: item.id,\n sourceFn: fetchFolderContents,\n sourceConfig: { auth: sourceConfig.auth, limit: 50 },\n }));\n\n return {\n items,\n pagination: { hasMore: result.hasMore },\n sources,\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// GLOBAL SEARCH (Fetcher) — Aggregated search across all sources\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface GlobalSearchConfig {\n auth: MentionAuthContext;\n}\n\nexport const fetchGlobalSearch: SourceFn<GlobalSearchConfig> = async (\n context,\n) => {\n const { query, fetchState, sourceConfig } = context;\n if (!query?.trim()) return { items: [], pagination: { hasMore: false } };\n\n const meta = (fetchState.meta as FetchMetadata) || {};\n const offset = meta.validatedCount || 0;\n\n const result = await querySimpleSearch(sourceConfig.auth, {\n query,\n limit: 50,\n offset,\n excludeTypes: [\"catalog\", \"session\"],\n });\n\n return {\n items: result.items,\n pagination: { hasMore: result.hasMore },\n };\n};\n\n// ══════════════════════════════════════════════════════════════════════\n// HOST-PROVIDED TOOLS (Transformer) — a host's own Tools / Toolkits list\n// ══════════════════════════════════════════════════════════════════════\n\nexport interface ProvidedToolsConfig {\n getTools: () => readonly MentionTool[];\n type: MentionTool[\"type\"];\n}\n\n/** Menu items for a host-provided tool list, in the host's order. */\nexport function providedToolMenuItems(\n tools: readonly MentionTool[],\n type?: MentionTool[\"type\"],\n): MenuItem[] {\n return tools\n .filter((tool) => type === undefined || tool.type === type)\n .map((tool) => ({\n id: tool.id,\n name: tool.name,\n type: tool.type,\n fallbackIcon: tool.icon ?? (tool.type === \"toolkit\" ? \"Package\" : \"Wrench\"),\n description: tool.description,\n visibleInScopes: new Set<string>(),\n }));\n}\n\nexport const transformProvidedTools: SourceFn<ProvidedToolsConfig> = async (\n context,\n) => ({\n items: providedToolMenuItems(\n context.sourceConfig.getTools(),\n context.sourceConfig.type,\n ),\n pagination: { hasMore: false },\n});\n\n/**\n * Prepend a host's tool list to another source's items so a root query matches\n * them the way it matches assets (the cache filters by query and sorts\n * toolkits first). The wrapped source's offset bookkeeping is preserved:\n * `consumedCount` stays the number of rows the server returned, so the added\n * items never advance the next page's offset.\n */\nexport function withProvidedTools<TConfig>(\n source: SourceFn<TConfig>,\n getTools: () => readonly MentionTool[],\n): SourceFn<TConfig> {\n const wrapped: SourceFn<TConfig> = async (context) => {\n const result = await source(context);\n return {\n ...result,\n items: [...providedToolMenuItems(getTools()), ...result.items],\n pagination: {\n ...result.pagination,\n hasMore: result.pagination?.hasMore ?? false,\n consumedCount: result.pagination?.consumedCount ?? result.items.length,\n },\n };\n };\n // The host's tools are the host's own: while Athena can't be reached, a search still finds them.\n OFFLINE_ITEMS.set(wrapped as SourceFn, () => providedToolMenuItems(getTools()));\n return wrapped;\n}\n\n/**\n * What a source that asks Athena can still list while Athena can't be reached: the host's own items\n * it carries (a host's tool list), by source. The source itself is never called then.\n */\nconst OFFLINE_ITEMS = new WeakMap<SourceFn, () => MenuItem[]>();\n\n/** `wrapped` keeps what `inner` lists without Athena (a wrapper that adds Athena's items alone). */\nfunction keepOfflineItems<TConfig>(\n inner: SourceFn<TConfig>,\n wrapped: SourceFn<TConfig>,\n): SourceFn<TConfig> {\n const offline = OFFLINE_ITEMS.get(inner as SourceFn);\n if (offline) OFFLINE_ITEMS.set(wrapped as SourceFn, offline);\n return wrapped;\n}\n\n/**\n * The host's own items a source asking Athena can still list while Athena can't be reached (a\n * root search's host tools), unfiltered; none for a source that holds no such items.\n */\nexport function offlineItemsOf(sourceFn: SourceFn): MenuItem[] {\n return OFFLINE_ITEMS.get(sourceFn)?.() ?? [];\n}\n\n// ══════════════════════════════════════════════════════════════════════\n// CHAT AGENTS (Transformer) — the agents a chat message can name\n// ══════════════════════════════════════════════════════════════════════\n\n/** Item ids stay apart from every other item's (asset ids, tool names) in the shared cache. */\nconst CHAT_AGENT_ITEM_ID_PREFIX = \"agent:\";\n\nexport interface ChatAgentsConfig {\n /** Reactive getter for the agents offered now. */\n getAgents: () => readonly MentionChatAgent[];\n}\n\n/**\n * The menu item that names `agent`: choosing it names the agent for the\n * message (a chip on the composer's To line) and never writes a mention into\n * the text.\n */\nexport function chatAgentMenuItem(agent: MentionChatAgent): MenuItem {\n return {\n id: `${CHAT_AGENT_ITEM_ID_PREFIX}${agent.ref}`,\n name: agent.name,\n type: \"agent\" as const,\n fallbackIcon: agent.icon || \"bot\",\n visibleInScopes: new Set<string>(),\n extra: { agentRef: agent.ref, agentAssetId: agent.assetId },\n };\n}\n\n/** The agent an `agent` item names, or `null` for any other item. */\nexport function chatAgentFromMenuItem(item: MenuItem): MentionChatAgent | null {\n if (item.type !== \"agent\") return null;\n const ref: unknown = item.extra?.agentRef;\n if (typeof ref !== \"string\" || !ref) return null;\n const assetId: unknown = item.extra?.agentAssetId;\n return {\n ref,\n name: item.name,\n assetId: typeof assetId === \"string\" && assetId ? assetId : null,\n icon: item.fallbackIcon,\n };\n}\n\n/**\n * The agents the composer offers (`MentionChatAgents.getAgents`): the person's\n * own assistant and the collab agents the agent picker lists, minus those\n * already named. agora checks every name a message carries, so nothing here\n * gates.\n */\nexport const transformChatAgents: SourceFn<ChatAgentsConfig> = async (context) => {\n const items = context.sourceConfig.getAgents().map(chatAgentMenuItem);\n return { items, pagination: { hasMore: false, totalCount: items.length } };\n};\n\n/**\n * Prepend the agents offered now to a root search, so typing an agent's name\n * after `@` finds it beside assets (the cache filters them by the query).\n * `consumedCount` stays the wrapped source's row count, so the agents never\n * advance the next page's offset. The agents are the host's own list: while\n * Athena can't be reached, a search still finds them.\n */\nexport function withChatAgents<TConfig>(\n source: SourceFn<TConfig>,\n getAgents: () => readonly MentionChatAgent[],\n): SourceFn<TConfig> {\n const wrapped: SourceFn<TConfig> = async (context) => {\n const result = await source(context);\n const agents = getAgents().map(chatAgentMenuItem);\n if (agents.length === 0) return result;\n return {\n ...result,\n items: [...agents, ...result.items],\n pagination: {\n ...result.pagination,\n hasMore: result.pagination?.hasMore ?? false,\n consumedCount: result.pagination?.consumedCount ?? result.items.length,\n },\n };\n };\n const inner = OFFLINE_ITEMS.get(source as SourceFn);\n OFFLINE_ITEMS.set(wrapped as SourceFn, () => [\n ...getAgents().map(chatAgentMenuItem),\n ...(inner?.() ?? []),\n ]);\n return wrapped;\n}\n\n// ══════════════════════════════════════════════════════════════════════\n// LOCAL SOURCES — what a scope can show while Athena can't be reached\n// ══════════════════════════════════════════════════════════════════════\n\n/**\n * The transformers: they read only what the host already holds (its tabs, its\n * own tool list, the agents it offers to name), so their scopes keep working\n * while Athena can't be reached.\n * Every other source asks Athena.\n */\nconst LOCAL_SOURCES: ReadonlySet<SourceFn> = new Set<SourceFn>([\n transformRootCategories,\n transformProvidedTools,\n transformChatAgents,\n]);\n\n/** Whether a scope's source asks Athena for its items (a fetcher, not a transformer). */\nexport function sourceAsksAthena(sourceFn: SourceFn): boolean {\n return !LOCAL_SOURCES.has(sourceFn);\n}\n"],"names":[],"mappings":"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"}