@athenaintel/react 0.57.2 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (852) hide show
  1. package/README.md +795 -12
  2. package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
  3. package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
  4. package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
  5. package/dist/agent-runtime/src/addressed-agents.js +16 -0
  6. package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-label.cjs +4 -3
  8. package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
  9. package/dist/agent-runtime/src/answer-label.d.ts +13 -6
  10. package/dist/agent-runtime/src/answer-label.js +4 -3
  11. package/dist/agent-runtime/src/answer-label.js.map +1 -1
  12. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
  13. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
  14. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
  15. package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
  16. package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
  18. package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
  19. package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
  21. package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
  23. package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
  24. package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
  26. package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
  28. package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
  29. package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
  31. package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
  32. package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
  33. package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
  34. package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
  35. package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
  36. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
  37. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
  38. package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
  39. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
  40. package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
  41. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  42. package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
  43. package/dist/agent-runtime/src/chat-outbox.js +492 -547
  44. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  45. package/dist/agent-runtime/src/composer-markdown.cjs +0 -16
  46. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  48. package/dist/agent-runtime/src/composer-markdown.js +1 -17
  49. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  53. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  54. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  55. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  56. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  57. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  58. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  59. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  60. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  61. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  62. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  63. package/dist/agent-runtime/src/errors.cjs +1 -0
  64. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  65. package/dist/agent-runtime/src/errors.js +1 -0
  66. package/dist/agent-runtime/src/errors.js.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  68. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  69. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  70. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  71. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  72. package/dist/agent-runtime/src/index.d.ts +14 -8
  73. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  74. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  75. package/dist/agent-runtime/src/lane-follow.js +289 -0
  76. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  78. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  79. package/dist/agent-runtime/src/lane-images.js +387 -0
  80. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  81. package/dist/agent-runtime/src/message-window.js +1 -1
  82. package/dist/agent-runtime/src/messages.cjs +19 -1
  83. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  84. package/dist/agent-runtime/src/messages.d.ts +8 -0
  85. package/dist/agent-runtime/src/messages.js +21 -3
  86. package/dist/agent-runtime/src/messages.js.map +1 -1
  87. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  88. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  89. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  90. package/dist/agent-runtime/src/named-agents.js +301 -0
  91. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  92. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  93. package/dist/agent-runtime/src/offline-status.d.ts +93 -2
  94. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  95. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  97. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  98. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  99. package/dist/agent-runtime/src/queue.cjs +2 -2
  100. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  101. package/dist/agent-runtime/src/queue.d.ts +20 -25
  102. package/dist/agent-runtime/src/queue.js +2 -2
  103. package/dist/agent-runtime/src/queue.js.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  107. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  108. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  109. package/dist/agent-runtime/src/run-send.cjs +54 -0
  110. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  111. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  112. package/dist/agent-runtime/src/run-send.js +54 -0
  113. package/dist/agent-runtime/src/run-send.js.map +1 -0
  114. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  116. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  117. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  118. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  119. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  120. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  121. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  122. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  123. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  125. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  126. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  127. package/dist/agent-runtime/src/send-recovery.js +90 -118
  128. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  129. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  130. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  133. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  134. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  135. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  136. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  137. package/dist/agent-runtime/src/statewire-state.js +4 -0
  138. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  140. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  141. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  142. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  143. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  145. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  146. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  147. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  148. package/dist/agent-runtime/src/subagents.cjs +22 -29
  149. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  150. package/dist/agent-runtime/src/subagents.js +23 -30
  151. package/dist/agent-runtime/src/subagents.js.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  153. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  154. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  155. package/dist/agent-runtime/src/thread-extras.js +27 -19
  156. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  157. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  158. package/dist/agent-runtime/src/tool-metadata.cjs +19 -0
  159. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  160. package/dist/agent-runtime/src/tool-metadata.js +19 -0
  161. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  163. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  164. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  165. package/dist/agent-runtime/src/tool-names.js +21 -0
  166. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  170. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  171. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  173. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  174. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  175. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  176. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  177. package/dist/agent-runtime/src/types.d.ts +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  179. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  180. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  181. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  182. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  186. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  187. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  191. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  192. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  194. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  196. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  197. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  200. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  201. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  202. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  203. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  204. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  205. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  206. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  207. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  208. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  209. package/dist/assets/asset-panel-store.cjs +13 -5
  210. package/dist/assets/asset-panel-store.cjs.map +1 -1
  211. package/dist/assets/asset-panel-store.d.ts +33 -2
  212. package/dist/assets/asset-panel-store.js +13 -5
  213. package/dist/assets/asset-panel-store.js.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  215. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  216. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  217. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  218. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  219. package/dist/auth/account-identity.cjs +13 -2
  220. package/dist/auth/account-identity.cjs.map +1 -1
  221. package/dist/auth/account-identity.d.ts +9 -0
  222. package/dist/auth/account-identity.js +13 -2
  223. package/dist/auth/account-identity.js.map +1 -1
  224. package/dist/auth/credential-source.cjs +20 -4
  225. package/dist/auth/credential-source.cjs.map +1 -1
  226. package/dist/auth/credential-source.d.ts +9 -0
  227. package/dist/auth/credential-source.js +20 -4
  228. package/dist/auth/credential-source.js.map +1 -1
  229. package/dist/catalog/chat-pickers.cjs +31 -0
  230. package/dist/catalog/chat-pickers.cjs.map +1 -1
  231. package/dist/catalog/chat-pickers.d.ts +17 -0
  232. package/dist/catalog/chat-pickers.js +33 -2
  233. package/dist/catalog/chat-pickers.js.map +1 -1
  234. package/dist/catalog/runtime-catalog.cjs +63 -3
  235. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  236. package/dist/catalog/runtime-catalog.d.ts +63 -3
  237. package/dist/catalog/runtime-catalog.js +64 -4
  238. package/dist/catalog/runtime-catalog.js.map +1 -1
  239. package/dist/chat/AthenaChat.cjs +301 -98
  240. package/dist/chat/AthenaChat.cjs.map +1 -1
  241. package/dist/chat/AthenaChat.d.ts +80 -4
  242. package/dist/chat/AthenaChat.js +302 -99
  243. package/dist/chat/AthenaChat.js.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  245. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  246. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  247. package/dist/chat/StatewireApprovalCard.js +37 -7
  248. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  250. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  251. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  252. package/dist/chat/StatewireQueuedMessages.js +18 -3
  253. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  254. package/dist/chat/chat-agent-mentions.cjs +70 -0
  255. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  256. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  257. package/dist/chat/chat-agent-mentions.js +70 -0
  258. package/dist/chat/chat-agent-mentions.js.map +1 -0
  259. package/dist/chat/composer-actions.cjs +12 -0
  260. package/dist/chat/composer-actions.cjs.map +1 -0
  261. package/dist/chat/composer-actions.d.ts +22 -0
  262. package/dist/chat/composer-actions.js +12 -0
  263. package/dist/chat/composer-actions.js.map +1 -0
  264. package/dist/chat/follow-up-suggestions.cjs +185 -0
  265. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  266. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  267. package/dist/chat/follow-up-suggestions.js +185 -0
  268. package/dist/chat/follow-up-suggestions.js.map +1 -0
  269. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  270. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  271. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  272. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  273. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  274. package/dist/chat/turn-changes.cjs +284 -0
  275. package/dist/chat/turn-changes.cjs.map +1 -0
  276. package/dist/chat/turn-changes.d.ts +130 -0
  277. package/dist/chat/turn-changes.js +284 -0
  278. package/dist/chat/turn-changes.js.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  282. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  283. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  285. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  286. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  287. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  288. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  290. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  291. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  292. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  293. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  297. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  298. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  302. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  303. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  307. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  308. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  310. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  311. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  312. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  313. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  317. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  318. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  338. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  339. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  343. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  344. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  348. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  349. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  351. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  352. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  353. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  354. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  356. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  357. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  358. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  359. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  363. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  364. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  366. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  367. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  368. package/dist/chat-ui/composer/slash-commands.js +74 -0
  369. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  370. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  371. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  372. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  373. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  374. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  375. package/dist/chat-ui/index.cjs +5 -0
  376. package/dist/chat-ui/index.cjs.map +1 -1
  377. package/dist/chat-ui/index.d.ts +4 -2
  378. package/dist/chat-ui/index.js +5 -0
  379. package/dist/chat-ui/index.js.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
  381. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  382. package/dist/chat-ui/mentions/mention-chip.js +11 -5
  383. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  386. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  387. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  391. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +20 -2
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
  395. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
  396. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  398. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  399. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  400. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +45 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +48 -0
  404. package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
  405. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  406. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
  407. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
  408. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
  409. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
  410. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
  411. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
  412. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
  414. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
  415. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
  417. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  419. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +274 -27
  420. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  421. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  422. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  423. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  424. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  425. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  426. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  427. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  428. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  429. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  430. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  431. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  432. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  433. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  434. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs +12 -0
  435. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
  436. package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
  437. package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
  438. package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
  439. package/dist/chat-ui/statewire.d.ts +1 -1
  440. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  441. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  442. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  443. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  444. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  445. package/dist/collab/client.cjs +41 -6
  446. package/dist/collab/client.cjs.map +1 -1
  447. package/dist/collab/client.d.ts +38 -7
  448. package/dist/collab/client.js +41 -6
  449. package/dist/collab/client.js.map +1 -1
  450. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  451. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  452. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  453. package/dist/composer/ComposerAttachedReferences.js +119 -0
  454. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  455. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  456. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  457. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  458. package/dist/composer/ComposerNamedAgents.js +63 -0
  459. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  460. package/dist/composer/attached-references.cjs +159 -0
  461. package/dist/composer/attached-references.cjs.map +1 -0
  462. package/dist/composer/attached-references.d.ts +86 -0
  463. package/dist/composer/attached-references.js +159 -0
  464. package/dist/composer/attached-references.js.map +1 -0
  465. package/dist/composer/build-composed-message.cjs +14 -7
  466. package/dist/composer/build-composed-message.cjs.map +1 -1
  467. package/dist/composer/build-composed-message.d.ts +6 -1
  468. package/dist/composer/build-composed-message.js +14 -7
  469. package/dist/composer/build-composed-message.js.map +1 -1
  470. package/dist/composer/composer-handoff.cjs +6 -2
  471. package/dist/composer/composer-handoff.cjs.map +1 -1
  472. package/dist/composer/composer-handoff.d.ts +7 -1
  473. package/dist/composer/composer-handoff.js +6 -2
  474. package/dist/composer/composer-handoff.js.map +1 -1
  475. package/dist/composer/folder-upload.cjs +149 -0
  476. package/dist/composer/folder-upload.cjs.map +1 -0
  477. package/dist/composer/folder-upload.d.ts +79 -0
  478. package/dist/composer/folder-upload.js +149 -0
  479. package/dist/composer/folder-upload.js.map +1 -0
  480. package/dist/composer/index.d.ts +1 -1
  481. package/dist/composer/staged-message-metadata.cjs +12 -0
  482. package/dist/composer/staged-message-metadata.cjs.map +1 -0
  483. package/dist/composer/staged-message-metadata.d.ts +15 -0
  484. package/dist/composer/staged-message-metadata.js +12 -0
  485. package/dist/composer/staged-message-metadata.js.map +1 -0
  486. package/dist/composer/useAttachToChat.cjs +35 -0
  487. package/dist/composer/useAttachToChat.cjs.map +1 -0
  488. package/dist/composer/useAttachToChat.d.ts +54 -0
  489. package/dist/composer/useAttachToChat.js +35 -0
  490. package/dist/composer/useAttachToChat.js.map +1 -0
  491. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  492. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  493. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  494. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  495. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  496. package/dist/composer/useFileUpload.cjs +95 -7
  497. package/dist/composer/useFileUpload.cjs.map +1 -1
  498. package/dist/composer/useFileUpload.d.ts +21 -2
  499. package/dist/composer/useFileUpload.js +95 -7
  500. package/dist/composer/useFileUpload.js.map +1 -1
  501. package/dist/data/athena-api-error.cjs +125 -0
  502. package/dist/data/athena-api-error.cjs.map +1 -0
  503. package/dist/data/athena-api-error.d.ts +96 -0
  504. package/dist/data/athena-api-error.js +125 -0
  505. package/dist/data/athena-api-error.js.map +1 -0
  506. package/dist/data/athena-data-client.cjs +106 -0
  507. package/dist/data/athena-data-client.cjs.map +1 -0
  508. package/dist/data/athena-data-client.d.ts +74 -0
  509. package/dist/data/athena-data-client.js +106 -0
  510. package/dist/data/athena-data-client.js.map +1 -0
  511. package/dist/data/athena-member.cjs +93 -0
  512. package/dist/data/athena-member.cjs.map +1 -0
  513. package/dist/data/athena-member.d.ts +125 -0
  514. package/dist/data/athena-member.js +93 -0
  515. package/dist/data/athena-member.js.map +1 -0
  516. package/dist/data/athena-request.cjs +460 -0
  517. package/dist/data/athena-request.cjs.map +1 -0
  518. package/dist/data/athena-request.d.ts +120 -0
  519. package/dist/data/athena-request.js +460 -0
  520. package/dist/data/athena-request.js.map +1 -0
  521. package/dist/data/use-athena-fetch.cjs +14 -0
  522. package/dist/data/use-athena-fetch.cjs.map +1 -0
  523. package/dist/data/use-athena-fetch.d.ts +19 -0
  524. package/dist/data/use-athena-fetch.js +14 -0
  525. package/dist/data/use-athena-fetch.js.map +1 -0
  526. package/dist/data/use-athena-graphql.cjs +66 -0
  527. package/dist/data/use-athena-graphql.cjs.map +1 -0
  528. package/dist/data/use-athena-graphql.d.ts +56 -0
  529. package/dist/data/use-athena-graphql.js +66 -0
  530. package/dist/data/use-athena-graphql.js.map +1 -0
  531. package/dist/data/use-athena-rest.cjs +33 -0
  532. package/dist/data/use-athena-rest.cjs.map +1 -0
  533. package/dist/data/use-athena-rest.d.ts +21 -0
  534. package/dist/data/use-athena-rest.js +33 -0
  535. package/dist/data/use-athena-rest.js.map +1 -0
  536. package/dist/data/use-semantic-query.cjs +44 -0
  537. package/dist/data/use-semantic-query.cjs.map +1 -0
  538. package/dist/data/use-semantic-query.d.ts +92 -0
  539. package/dist/data/use-semantic-query.js +44 -0
  540. package/dist/data/use-semantic-query.js.map +1 -0
  541. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  542. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  543. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  544. package/dist/diagnostics/errors.cjs +7 -0
  545. package/dist/diagnostics/errors.cjs.map +1 -1
  546. package/dist/diagnostics/errors.d.ts +7 -0
  547. package/dist/diagnostics/errors.js +7 -0
  548. package/dist/diagnostics/errors.js.map +1 -1
  549. package/dist/index.cjs +155 -11
  550. package/dist/index.cjs.map +1 -1
  551. package/dist/index.d.ts +72 -13
  552. package/dist/index.js +148 -4
  553. package/dist/index.js.map +1 -1
  554. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  555. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  556. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  557. package/dist/keryx-http/src/initial-sync.js +64 -16
  558. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  559. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  560. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  561. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  562. package/dist/keryx-http/src/own-awareness.js +20 -0
  563. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  564. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  565. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  566. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  567. package/dist/keryx-http/src/update-attributions.js +26 -1
  568. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  569. package/dist/offline/chat-outbox.cjs +262 -26
  570. package/dist/offline/chat-outbox.cjs.map +1 -1
  571. package/dist/offline/chat-outbox.d.ts +90 -12
  572. package/dist/offline/chat-outbox.js +263 -27
  573. package/dist/offline/chat-outbox.js.map +1 -1
  574. package/dist/provider/AthenaProvider.cjs +60 -22
  575. package/dist/provider/AthenaProvider.cjs.map +1 -1
  576. package/dist/provider/AthenaProvider.d.ts +24 -8
  577. package/dist/provider/AthenaProvider.js +61 -23
  578. package/dist/provider/AthenaProvider.js.map +1 -1
  579. package/dist/react/package.json.cjs +1 -1
  580. package/dist/react/package.json.js +1 -1
  581. package/dist/references/src/anchors/parse.cjs +11 -1
  582. package/dist/references/src/anchors/parse.cjs.map +1 -1
  583. package/dist/references/src/anchors/parse.js +11 -1
  584. package/dist/references/src/anchors/parse.js.map +1 -1
  585. package/dist/references/src/anchors/schemas.d.ts +1 -0
  586. package/dist/references/src/anchors/serialize.cjs +1 -0
  587. package/dist/references/src/anchors/serialize.cjs.map +1 -1
  588. package/dist/references/src/anchors/serialize.js +1 -0
  589. package/dist/references/src/anchors/serialize.js.map +1 -1
  590. package/dist/references/src/anchors/types.cjs +5 -0
  591. package/dist/references/src/anchors/types.cjs.map +1 -1
  592. package/dist/references/src/anchors/types.d.ts +9 -0
  593. package/dist/references/src/anchors/types.js +5 -0
  594. package/dist/references/src/anchors/types.js.map +1 -1
  595. package/dist/references/src/attachable.cjs +149 -0
  596. package/dist/references/src/attachable.cjs.map +1 -0
  597. package/dist/references/src/attachable.d.ts +87 -0
  598. package/dist/references/src/attachable.js +149 -0
  599. package/dist/references/src/attachable.js.map +1 -0
  600. package/dist/references/src/schemas.d.ts +2 -0
  601. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  602. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  603. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  604. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  605. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  606. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  607. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  608. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  609. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  610. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  611. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  612. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  613. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  614. package/dist/runtime/statewire-plan-mode.js +71 -0
  615. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  616. package/dist/runtime/statewire-run-config.cjs +3 -1
  617. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  618. package/dist/runtime/statewire-run-config.d.ts +7 -0
  619. package/dist/runtime/statewire-run-config.js +3 -1
  620. package/dist/runtime/statewire-run-config.js.map +1 -1
  621. package/dist/runtime/statewire-session-key.cjs +11 -5
  622. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  623. package/dist/runtime/statewire-session-key.d.ts +22 -10
  624. package/dist/runtime/statewire-session-key.js +11 -5
  625. package/dist/runtime/statewire-session-key.js.map +1 -1
  626. package/dist/runtime/useAthenaStatewireRuntime.cjs +64 -9
  627. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  628. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  629. package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
  630. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  631. package/dist/search/useAthenaAssets.cjs +394 -0
  632. package/dist/search/useAthenaAssets.cjs.map +1 -0
  633. package/dist/search/useAthenaAssets.d.ts +186 -0
  634. package/dist/search/useAthenaAssets.js +394 -0
  635. package/dist/search/useAthenaAssets.js.map +1 -0
  636. package/dist/sheet-range/index.cjs +4 -0
  637. package/dist/sheet-range/index.cjs.map +1 -1
  638. package/dist/sheet-range/index.d.ts +4 -2
  639. package/dist/sheet-range/index.js +4 -0
  640. package/dist/sheet-range/index.js.map +1 -1
  641. package/dist/sheet-range/query-range.cjs +102 -0
  642. package/dist/sheet-range/query-range.cjs.map +1 -0
  643. package/dist/sheet-range/query-range.d.ts +46 -0
  644. package/dist/sheet-range/query-range.js +102 -0
  645. package/dist/sheet-range/query-range.js.map +1 -0
  646. package/dist/styles.css +1 -1
  647. package/dist/subagents/index.cjs +49 -0
  648. package/dist/subagents/index.cjs.map +1 -0
  649. package/dist/subagents/index.d.ts +16 -0
  650. package/dist/subagents/index.js +49 -0
  651. package/dist/subagents/index.js.map +1 -0
  652. package/dist/subagents/lane-follow.cjs +19 -0
  653. package/dist/subagents/lane-follow.cjs.map +1 -0
  654. package/dist/subagents/lane-follow.d.ts +9 -0
  655. package/dist/subagents/lane-follow.js +19 -0
  656. package/dist/subagents/lane-follow.js.map +1 -0
  657. package/dist/subagents/lane-model.cjs +178 -0
  658. package/dist/subagents/lane-model.cjs.map +1 -0
  659. package/dist/subagents/lane-model.d.ts +140 -0
  660. package/dist/subagents/lane-model.js +178 -0
  661. package/dist/subagents/lane-model.js.map +1 -0
  662. package/dist/subagents/lane-parts.cjs +517 -0
  663. package/dist/subagents/lane-parts.cjs.map +1 -0
  664. package/dist/subagents/lane-parts.d.ts +130 -0
  665. package/dist/subagents/lane-parts.js +517 -0
  666. package/dist/subagents/lane-parts.js.map +1 -0
  667. package/dist/subagents/subagent-lane-group.cjs +215 -0
  668. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  669. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  670. package/dist/subagents/subagent-lane-group.js +215 -0
  671. package/dist/subagents/subagent-lane-group.js.map +1 -0
  672. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  673. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  674. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  675. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  676. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  677. package/dist/subagents/task-subagent-group.cjs +115 -0
  678. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  679. package/dist/subagents/task-subagent-group.d.ts +36 -0
  680. package/dist/subagents/task-subagent-group.js +115 -0
  681. package/dist/subagents/task-subagent-group.js.map +1 -0
  682. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  683. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  684. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  685. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  686. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  687. package/dist/threads/Inbox.cjs +2 -2
  688. package/dist/threads/Inbox.cjs.map +1 -1
  689. package/dist/threads/SessionList.cjs +6 -6
  690. package/dist/threads/SessionList.cjs.map +1 -1
  691. package/dist/threads/SessionsPage.cjs +13 -7
  692. package/dist/threads/SessionsPage.cjs.map +1 -1
  693. package/dist/threads/SessionsPage.d.ts +10 -1
  694. package/dist/threads/SessionsPage.js +9 -3
  695. package/dist/threads/SessionsPage.js.map +1 -1
  696. package/dist/threads/session-list-model.cjs.map +1 -1
  697. package/dist/threads/session-list-model.d.ts +2 -1
  698. package/dist/threads/session-list-model.js.map +1 -1
  699. package/dist/threads/session-row-parts.cjs +3 -3
  700. package/dist/threads/session-row-parts.cjs.map +1 -1
  701. package/dist/threads/sessions-page-model.cjs +13 -5
  702. package/dist/threads/sessions-page-model.cjs.map +1 -1
  703. package/dist/threads/sessions-page-model.d.ts +7 -0
  704. package/dist/threads/sessions-page-model.js +11 -3
  705. package/dist/threads/sessions-page-model.js.map +1 -1
  706. package/dist/threads/sessions-page-storage.cjs +8 -8
  707. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  708. package/dist/threads/sessions-page-storage.d.ts +5 -1
  709. package/dist/threads/sessions-page-storage.js +8 -8
  710. package/dist/threads/sessions-page-storage.js.map +1 -1
  711. package/dist/threads/statewire-thread-list.cjs +14 -2
  712. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  713. package/dist/threads/statewire-thread-list.d.ts +11 -2
  714. package/dist/threads/statewire-thread-list.js +14 -2
  715. package/dist/threads/statewire-thread-list.js.map +1 -1
  716. package/dist/threads/use-athena-sessions.cjs +1 -0
  717. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  718. package/dist/threads/use-athena-sessions.d.ts +7 -0
  719. package/dist/threads/use-athena-sessions.js +1 -0
  720. package/dist/threads/use-athena-sessions.js.map +1 -1
  721. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  722. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  723. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  724. package/dist/threads/use-athena-thread-agent.js +31 -0
  725. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  726. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  727. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  728. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  729. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  730. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  731. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  732. package/dist/tools/agent-creations.cjs +97 -0
  733. package/dist/tools/agent-creations.cjs.map +1 -0
  734. package/dist/tools/agent-creations.d.ts +38 -0
  735. package/dist/tools/agent-creations.js +97 -0
  736. package/dist/tools/agent-creations.js.map +1 -0
  737. package/dist/tools/agent-highlights.cjs +100 -0
  738. package/dist/tools/agent-highlights.cjs.map +1 -0
  739. package/dist/tools/agent-highlights.d.ts +57 -0
  740. package/dist/tools/agent-highlights.js +100 -0
  741. package/dist/tools/agent-highlights.js.map +1 -0
  742. package/dist/tools/append-document-tool-ui.cjs +1 -0
  743. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  744. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  745. package/dist/tools/append-document-tool-ui.js +2 -1
  746. package/dist/tools/append-document-tool-ui.js.map +1 -1
  747. package/dist/tools/auto-open-tools.cjs +144 -71
  748. package/dist/tools/auto-open-tools.cjs.map +1 -1
  749. package/dist/tools/auto-open-tools.d.ts +131 -1
  750. package/dist/tools/auto-open-tools.js +145 -72
  751. package/dist/tools/auto-open-tools.js.map +1 -1
  752. package/dist/tools/browser-tool-uis.cjs +594 -0
  753. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  754. package/dist/tools/browser-tool-uis.d.ts +8 -0
  755. package/dist/tools/browser-tool-uis.js +594 -0
  756. package/dist/tools/browser-tool-uis.js.map +1 -0
  757. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  758. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  759. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  760. package/dist/tools/computer-asset-tool-uis.js +313 -0
  761. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  762. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  763. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  764. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  765. package/dist/tools/document-edit-tool-uis.js +218 -0
  766. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  767. package/dist/tools/drive-tool-uis.cjs +429 -0
  768. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  769. package/dist/tools/drive-tool-uis.d.ts +121 -0
  770. package/dist/tools/drive-tool-uis.js +429 -0
  771. package/dist/tools/drive-tool-uis.js.map +1 -0
  772. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  773. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  774. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  775. package/dist/tools/email-calendar-tool-uis.js +789 -0
  776. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  777. package/dist/tools/ontology-tool-uis.cjs +83 -0
  778. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  779. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  780. package/dist/tools/ontology-tool-uis.js +83 -0
  781. package/dist/tools/ontology-tool-uis.js.map +1 -0
  782. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  783. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  784. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  785. package/dist/tools/orchestration-tool-uis.js +586 -0
  786. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  787. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  788. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  789. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  790. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  791. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  792. package/dist/tools/project-tool-uis.cjs +213 -0
  793. package/dist/tools/project-tool-uis.cjs.map +1 -0
  794. package/dist/tools/project-tool-uis.d.ts +14 -0
  795. package/dist/tools/project-tool-uis.js +213 -0
  796. package/dist/tools/project-tool-uis.js.map +1 -0
  797. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  798. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  799. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  800. package/dist/tools/sandbox-tool-uis.js +491 -0
  801. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  802. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  803. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  804. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  805. package/dist/tools/sheet-query-tool-ui.js +138 -0
  806. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  807. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  808. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  809. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  810. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  811. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  812. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  813. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  814. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  815. package/dist/tools/subagent-task-tool-ui.js +28 -479
  816. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  817. package/dist/tools/tool-summary.cjs +36 -0
  818. package/dist/tools/tool-summary.cjs.map +1 -1
  819. package/dist/tools/tool-summary.js +36 -0
  820. package/dist/tools/tool-summary.js.map +1 -1
  821. package/dist/tools/tool-uis.cjs +181 -53
  822. package/dist/tools/tool-uis.cjs.map +1 -1
  823. package/dist/tools/tool-uis.d.ts +40 -0
  824. package/dist/tools/tool-uis.js +183 -55
  825. package/dist/tools/tool-uis.js.map +1 -1
  826. package/dist/typed-interrupts/index.cjs +15 -0
  827. package/dist/typed-interrupts/index.cjs.map +1 -0
  828. package/dist/typed-interrupts/index.d.ts +20 -0
  829. package/dist/typed-interrupts/index.js +15 -0
  830. package/dist/typed-interrupts/index.js.map +1 -0
  831. package/dist/version.cjs +4 -0
  832. package/dist/version.cjs.map +1 -1
  833. package/dist/version.d.ts +9 -0
  834. package/dist/version.js +4 -0
  835. package/dist/version.js.map +1 -1
  836. package/dist/workbench/live-desktop-api.cjs +2 -1
  837. package/dist/workbench/live-desktop-api.cjs.map +1 -1
  838. package/dist/workbench/live-desktop-api.js +2 -1
  839. package/dist/workbench/live-desktop-api.js.map +1 -1
  840. package/dist/workbench/session-workbench-panes.cjs +6 -6
  841. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  842. package/dist/workbench/session-workspace-api.cjs +7 -2
  843. package/dist/workbench/session-workspace-api.cjs.map +1 -1
  844. package/dist/workbench/session-workspace-api.d.ts +10 -0
  845. package/dist/workbench/session-workspace-api.js +7 -2
  846. package/dist/workbench/session-workspace-api.js.map +1 -1
  847. package/package.json +28 -6
  848. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  849. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  850. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  851. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  852. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const PLAN_MODE_TOOL = "write_todos";
4
+ const PLAN_MODE_MIDDLEWARE = "TodoListMiddleware";
5
+ const EXCLUDED_TOOLS = "excluded_tools";
6
+ const EXCLUDED_MIDDLEWARE = "excluded_middleware";
7
+ const PLAN_MODE_EXCLUSIONS = [
8
+ { key: EXCLUDED_TOOLS, name: PLAN_MODE_TOOL },
9
+ { key: EXCLUDED_MIDDLEWARE, name: PLAN_MODE_MIDDLEWARE }
10
+ ];
11
+ const stringItems = (value) => Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
12
+ function planModeOf(custom) {
13
+ return PLAN_MODE_EXCLUSIONS.every(({ key, name }) => !stringItems(custom[key]).includes(name));
14
+ }
15
+ function planModeListEdits({
16
+ custom,
17
+ planMode
18
+ }) {
19
+ const edits = {};
20
+ if (planModeOf(custom) === planMode) return edits;
21
+ for (const { key, name } of PLAN_MODE_EXCLUSIONS) {
22
+ const items = stringItems(custom[key]);
23
+ const excluded = items.includes(name);
24
+ if (planMode && excluded) {
25
+ const kept = items.filter((item) => item !== name);
26
+ edits[key] = kept.length > 0 ? kept : null;
27
+ } else if (!planMode && !excluded) {
28
+ edits[key] = [...items, name];
29
+ }
30
+ }
31
+ return edits;
32
+ }
33
+ function withPlanMode({
34
+ custom,
35
+ planMode
36
+ }) {
37
+ if (planMode === void 0) return custom;
38
+ const edits = planModeListEdits({ custom, planMode });
39
+ if (Object.keys(edits).length === 0) return custom;
40
+ const next = { ...custom };
41
+ for (const [key, value] of Object.entries(edits)) {
42
+ if (value === null) delete next[key];
43
+ else next[key] = value;
44
+ }
45
+ return next;
46
+ }
47
+ function threadPlanModeFromLane({
48
+ lane,
49
+ ready
50
+ }) {
51
+ if (!ready || lane === null) return { planMode: null, configured: false, ready };
52
+ return { planMode: planModeOf(lane.custom), configured: true, ready };
53
+ }
54
+ function decidePlanModeLanePatch({
55
+ planMode,
56
+ landed,
57
+ configVersion,
58
+ custom
59
+ }) {
60
+ if (!landed || configVersion <= 0) return { kind: "wait" };
61
+ const patch = planModeListEdits({ custom, planMode });
62
+ return Object.keys(patch).length === 0 ? { kind: "done" } : { kind: "patch", patch };
63
+ }
64
+ exports.PLAN_MODE_MIDDLEWARE = PLAN_MODE_MIDDLEWARE;
65
+ exports.PLAN_MODE_TOOL = PLAN_MODE_TOOL;
66
+ exports.decidePlanModeLanePatch = decidePlanModeLanePatch;
67
+ exports.planModeListEdits = planModeListEdits;
68
+ exports.planModeOf = planModeOf;
69
+ exports.threadPlanModeFromLane = threadPlanModeFromLane;
70
+ exports.withPlanMode = withPlanMode;
71
+ //# sourceMappingURL=statewire-plan-mode.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statewire-plan-mode.cjs","sources":["../../src/runtime/statewire-plan-mode.ts"],"sourcesContent":["import type {\n DeepAgentServerConfig,\n ThreadConfigCustom,\n ThreadConfigPatch,\n} from '@athenaintel/agent-runtime';\n\n/**\n * Plan mode: the deep agent keeps a to-do plan for multi-step work and checks\n * its steps off as it goes. That is the `write_todos` tool and the\n * `TodoListMiddleware` that provides it with its planning prompt, which agora\n * binds on every run unless the run's config excludes either one\n * (`excluded_tools`, `excluded_middleware`). The two go together, as Olympus's\n * Plan Mode switch flips them (`applyPlanningEnabled`): a config plans unless\n * it excludes either.\n */\nexport const PLAN_MODE_TOOL = 'write_todos';\n\n/** The middleware that provides {@link PLAN_MODE_TOOL} and its planning prompt. */\nexport const PLAN_MODE_MIDDLEWARE = 'TodoListMiddleware';\n\nconst EXCLUDED_TOOLS = 'excluded_tools';\nconst EXCLUDED_MIDDLEWARE = 'excluded_middleware';\n\n/** The two lists plan mode edits, each with the one name plan mode owns in it. */\nconst PLAN_MODE_EXCLUSIONS = [\n { key: EXCLUDED_TOOLS, name: PLAN_MODE_TOOL },\n { key: EXCLUDED_MIDDLEWARE, name: PLAN_MODE_MIDDLEWARE },\n] as const;\n\nconst stringItems = (value: unknown): string[] =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n\n/** Whether a config (a send's `runConfig.custom`, or a thread's server config) plans. Pure. */\nexport function planModeOf(custom: ThreadConfigCustom): boolean {\n return PLAN_MODE_EXCLUSIONS.every(({ key, name }) => !stringItems(custom[key]).includes(name));\n}\n\n/**\n * The exclusion lists that put `custom` in plan mode `planMode`, keyed as a\n * config carries them, and only those that change: plan mode off adds\n * `write_todos` to `excluded_tools` and `TodoListMiddleware` to\n * `excluded_middleware` after what each already lists; on takes them out, and\n * a list left empty is `null` (a `config/patch` unsets it). Every other name in\n * either list stays where it is. `{}` when `custom` is in that plan mode\n * already (off: it excludes either one). Pure.\n */\nexport function planModeListEdits({\n custom,\n planMode,\n}: {\n custom: ThreadConfigCustom;\n planMode: boolean;\n}): ThreadConfigPatch {\n const edits: ThreadConfigPatch = {};\n if (planModeOf(custom) === planMode) return edits;\n for (const { key, name } of PLAN_MODE_EXCLUSIONS) {\n const items = stringItems(custom[key]);\n const excluded = items.includes(name);\n if (planMode && excluded) {\n const kept = items.filter((item) => item !== name);\n edits[key] = kept.length > 0 ? kept : null;\n } else if (!planMode && !excluded) {\n edits[key] = [...items, name];\n }\n }\n return edits;\n}\n\n/**\n * A send's `runConfig.custom` in plan mode `planMode`, after everything else\n * (the host's `extraRunConfig` included) is merged: `undefined` leaves it as it\n * is; otherwise {@link planModeListEdits}, an emptied list omitted. Pure.\n */\nexport function withPlanMode({\n custom,\n planMode,\n}: {\n custom: Record<string, unknown>;\n planMode: boolean | undefined;\n}): Record<string, unknown> {\n if (planMode === undefined) return custom;\n const edits = planModeListEdits({ custom, planMode });\n if (Object.keys(edits).length === 0) return custom;\n const next: Record<string, unknown> = { ...custom };\n for (const [key, value] of Object.entries(edits)) {\n if (value === null) delete next[key];\n else next[key] = value;\n }\n return next;\n}\n\n/** A thread's plan mode, read from its server config lane. */\nexport interface AthenaThreadPlanMode {\n /**\n * Whether the thread's server config plans (`true`) or not (`false`); `null`\n * while it has none, when every turn runs with what the send carries (the\n * provider's `planMode`, and a plan when the provider sets none).\n */\n planMode: boolean | null;\n /** `true` once the thread has a server config lane (version > 0). */\n configured: boolean;\n /**\n * `true` once the statewire host's snapshot of this thread has arrived (the\n * placeholder or remembered snapshot a thread shows while it loads may carry\n * no lane, or an older one). Before that `planMode` is `null`.\n */\n ready: boolean;\n}\n\n/** {@link AthenaThreadPlanMode} from the lane and the landed flag. Pure. */\nexport function threadPlanModeFromLane({\n lane,\n ready,\n}: {\n lane: DeepAgentServerConfig | null;\n ready: boolean;\n}): AthenaThreadPlanMode {\n if (!ready || lane === null) return { planMode: null, configured: false, ready };\n return { planMode: planModeOf(lane.custom), configured: true, ready };\n}\n\n/**\n * What to do with a `planMode` change the host made during an attach, decided\n * as every provider-owned thread-config key is (`decideThreadConfigLanePatch`):\n *\n * - `wait`: keep it pending. The thread's snapshot has not landed, or the\n * thread has no lane yet (version 0), where the next send carries plan mode.\n * It stays pending so that a lane an EARLIER send seeds is corrected once it\n * lands.\n * - `done`: the lane already plans that way (this client's own unacknowledged\n * writes folded over); nothing to write.\n * - `patch`: issue one `config/patch` carrying the exclusion lists that change,\n * computed from the lane's own, so a name another client excluded stays.\n */\nexport type PlanModeLaneDecision =\n | { kind: 'wait' }\n | { kind: 'done' }\n | { kind: 'patch'; patch: ThreadConfigPatch };\n\nexport function decidePlanModeLanePatch({\n planMode,\n landed,\n configVersion,\n custom,\n}: {\n /** The provider's `planMode` after the change. */\n planMode: boolean;\n landed: boolean;\n configVersion: number;\n /** The effective lane: the server config with this client's pending writes folded over. */\n custom: ThreadConfigCustom;\n}): PlanModeLaneDecision {\n if (!landed || configVersion <= 0) return { kind: 'wait' };\n const patch = planModeListEdits({ custom, planMode });\n return Object.keys(patch).length === 0 ? { kind: 'done' } : { kind: 'patch', patch };\n}\n"],"names":[],"mappings":";;AAeO,MAAM,iBAAiB;AAGvB,MAAM,uBAAuB;AAEpC,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAG5B,MAAM,uBAAuB;AAAA,EAC3B,EAAE,KAAK,gBAAgB,MAAM,eAAA;AAAA,EAC7B,EAAE,KAAK,qBAAqB,MAAM,qBAAA;AACpC;AAEA,MAAM,cAAc,CAAC,UACnB,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ,IAAI,CAAA;AAGrF,SAAS,WAAW,QAAqC;AAC9D,SAAO,qBAAqB,MAAM,CAAC,EAAE,KAAK,KAAA,MAAW,CAAC,YAAY,OAAO,GAAG,CAAC,EAAE,SAAS,IAAI,CAAC;AAC/F;AAWO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAGsB;AACpB,QAAM,QAA2B,CAAA;AACjC,MAAI,WAAW,MAAM,MAAM,SAAU,QAAO;AAC5C,aAAW,EAAE,KAAK,KAAA,KAAU,sBAAsB;AAChD,UAAM,QAAQ,YAAY,OAAO,GAAG,CAAC;AACrC,UAAM,WAAW,MAAM,SAAS,IAAI;AACpC,QAAI,YAAY,UAAU;AACxB,YAAM,OAAO,MAAM,OAAO,CAAC,SAAS,SAAS,IAAI;AACjD,YAAM,GAAG,IAAI,KAAK,SAAS,IAAI,OAAO;AAAA,IACxC,WAAW,CAAC,YAAY,CAAC,UAAU;AACjC,YAAM,GAAG,IAAI,CAAC,GAAG,OAAO,IAAI;AAAA,IAC9B;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAG4B;AAC1B,MAAI,aAAa,OAAW,QAAO;AACnC,QAAM,QAAQ,kBAAkB,EAAE,QAAQ,UAAU;AACpD,MAAI,OAAO,KAAK,KAAK,EAAE,WAAW,EAAG,QAAO;AAC5C,QAAM,OAAgC,EAAE,GAAG,OAAA;AAC3C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,UAAU,KAAM,QAAO,KAAK,GAAG;AAAA,QAC9B,MAAK,GAAG,IAAI;AAAA,EACnB;AACA,SAAO;AACT;AAqBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AACF,GAGyB;AACvB,MAAI,CAAC,SAAS,SAAS,KAAM,QAAO,EAAE,UAAU,MAAM,YAAY,OAAO,MAAA;AACzE,SAAO,EAAE,UAAU,WAAW,KAAK,MAAM,GAAG,YAAY,MAAM,MAAA;AAChE;AAoBO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOyB;AACvB,MAAI,CAAC,UAAU,iBAAiB,EAAG,QAAO,EAAE,MAAM,OAAA;AAClD,QAAM,QAAQ,kBAAkB,EAAE,QAAQ,UAAU;AACpD,SAAO,OAAO,KAAK,KAAK,EAAE,WAAW,IAAI,EAAE,MAAM,OAAA,IAAW,EAAE,MAAM,SAAS,MAAA;AAC/E;;;;;;;;"}
@@ -0,0 +1,88 @@
1
+ import type { DeepAgentServerConfig, ThreadConfigCustom, ThreadConfigPatch } from '../agent-runtime/src/index';
2
+ /**
3
+ * Plan mode: the deep agent keeps a to-do plan for multi-step work and checks
4
+ * its steps off as it goes. That is the `write_todos` tool and the
5
+ * `TodoListMiddleware` that provides it with its planning prompt, which agora
6
+ * binds on every run unless the run's config excludes either one
7
+ * (`excluded_tools`, `excluded_middleware`). The two go together, as Olympus's
8
+ * Plan Mode switch flips them (`applyPlanningEnabled`): a config plans unless
9
+ * it excludes either.
10
+ */
11
+ export declare const PLAN_MODE_TOOL = "write_todos";
12
+ /** The middleware that provides {@link PLAN_MODE_TOOL} and its planning prompt. */
13
+ export declare const PLAN_MODE_MIDDLEWARE = "TodoListMiddleware";
14
+ /** Whether a config (a send's `runConfig.custom`, or a thread's server config) plans. Pure. */
15
+ export declare function planModeOf(custom: ThreadConfigCustom): boolean;
16
+ /**
17
+ * The exclusion lists that put `custom` in plan mode `planMode`, keyed as a
18
+ * config carries them, and only those that change: plan mode off adds
19
+ * `write_todos` to `excluded_tools` and `TodoListMiddleware` to
20
+ * `excluded_middleware` after what each already lists; on takes them out, and
21
+ * a list left empty is `null` (a `config/patch` unsets it). Every other name in
22
+ * either list stays where it is. `{}` when `custom` is in that plan mode
23
+ * already (off: it excludes either one). Pure.
24
+ */
25
+ export declare function planModeListEdits({ custom, planMode, }: {
26
+ custom: ThreadConfigCustom;
27
+ planMode: boolean;
28
+ }): ThreadConfigPatch;
29
+ /**
30
+ * A send's `runConfig.custom` in plan mode `planMode`, after everything else
31
+ * (the host's `extraRunConfig` included) is merged: `undefined` leaves it as it
32
+ * is; otherwise {@link planModeListEdits}, an emptied list omitted. Pure.
33
+ */
34
+ export declare function withPlanMode({ custom, planMode, }: {
35
+ custom: Record<string, unknown>;
36
+ planMode: boolean | undefined;
37
+ }): Record<string, unknown>;
38
+ /** A thread's plan mode, read from its server config lane. */
39
+ export interface AthenaThreadPlanMode {
40
+ /**
41
+ * Whether the thread's server config plans (`true`) or not (`false`); `null`
42
+ * while it has none, when every turn runs with what the send carries (the
43
+ * provider's `planMode`, and a plan when the provider sets none).
44
+ */
45
+ planMode: boolean | null;
46
+ /** `true` once the thread has a server config lane (version > 0). */
47
+ configured: boolean;
48
+ /**
49
+ * `true` once the statewire host's snapshot of this thread has arrived (the
50
+ * placeholder or remembered snapshot a thread shows while it loads may carry
51
+ * no lane, or an older one). Before that `planMode` is `null`.
52
+ */
53
+ ready: boolean;
54
+ }
55
+ /** {@link AthenaThreadPlanMode} from the lane and the landed flag. Pure. */
56
+ export declare function threadPlanModeFromLane({ lane, ready, }: {
57
+ lane: DeepAgentServerConfig | null;
58
+ ready: boolean;
59
+ }): AthenaThreadPlanMode;
60
+ /**
61
+ * What to do with a `planMode` change the host made during an attach, decided
62
+ * as every provider-owned thread-config key is (`decideThreadConfigLanePatch`):
63
+ *
64
+ * - `wait`: keep it pending. The thread's snapshot has not landed, or the
65
+ * thread has no lane yet (version 0), where the next send carries plan mode.
66
+ * It stays pending so that a lane an EARLIER send seeds is corrected once it
67
+ * lands.
68
+ * - `done`: the lane already plans that way (this client's own unacknowledged
69
+ * writes folded over); nothing to write.
70
+ * - `patch`: issue one `config/patch` carrying the exclusion lists that change,
71
+ * computed from the lane's own, so a name another client excluded stays.
72
+ */
73
+ export type PlanModeLaneDecision = {
74
+ kind: 'wait';
75
+ } | {
76
+ kind: 'done';
77
+ } | {
78
+ kind: 'patch';
79
+ patch: ThreadConfigPatch;
80
+ };
81
+ export declare function decidePlanModeLanePatch({ planMode, landed, configVersion, custom, }: {
82
+ /** The provider's `planMode` after the change. */
83
+ planMode: boolean;
84
+ landed: boolean;
85
+ configVersion: number;
86
+ /** The effective lane: the server config with this client's pending writes folded over. */
87
+ custom: ThreadConfigCustom;
88
+ }): PlanModeLaneDecision;
@@ -0,0 +1,71 @@
1
+ const PLAN_MODE_TOOL = "write_todos";
2
+ const PLAN_MODE_MIDDLEWARE = "TodoListMiddleware";
3
+ const EXCLUDED_TOOLS = "excluded_tools";
4
+ const EXCLUDED_MIDDLEWARE = "excluded_middleware";
5
+ const PLAN_MODE_EXCLUSIONS = [
6
+ { key: EXCLUDED_TOOLS, name: PLAN_MODE_TOOL },
7
+ { key: EXCLUDED_MIDDLEWARE, name: PLAN_MODE_MIDDLEWARE }
8
+ ];
9
+ const stringItems = (value) => Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
10
+ function planModeOf(custom) {
11
+ return PLAN_MODE_EXCLUSIONS.every(({ key, name }) => !stringItems(custom[key]).includes(name));
12
+ }
13
+ function planModeListEdits({
14
+ custom,
15
+ planMode
16
+ }) {
17
+ const edits = {};
18
+ if (planModeOf(custom) === planMode) return edits;
19
+ for (const { key, name } of PLAN_MODE_EXCLUSIONS) {
20
+ const items = stringItems(custom[key]);
21
+ const excluded = items.includes(name);
22
+ if (planMode && excluded) {
23
+ const kept = items.filter((item) => item !== name);
24
+ edits[key] = kept.length > 0 ? kept : null;
25
+ } else if (!planMode && !excluded) {
26
+ edits[key] = [...items, name];
27
+ }
28
+ }
29
+ return edits;
30
+ }
31
+ function withPlanMode({
32
+ custom,
33
+ planMode
34
+ }) {
35
+ if (planMode === void 0) return custom;
36
+ const edits = planModeListEdits({ custom, planMode });
37
+ if (Object.keys(edits).length === 0) return custom;
38
+ const next = { ...custom };
39
+ for (const [key, value] of Object.entries(edits)) {
40
+ if (value === null) delete next[key];
41
+ else next[key] = value;
42
+ }
43
+ return next;
44
+ }
45
+ function threadPlanModeFromLane({
46
+ lane,
47
+ ready
48
+ }) {
49
+ if (!ready || lane === null) return { planMode: null, configured: false, ready };
50
+ return { planMode: planModeOf(lane.custom), configured: true, ready };
51
+ }
52
+ function decidePlanModeLanePatch({
53
+ planMode,
54
+ landed,
55
+ configVersion,
56
+ custom
57
+ }) {
58
+ if (!landed || configVersion <= 0) return { kind: "wait" };
59
+ const patch = planModeListEdits({ custom, planMode });
60
+ return Object.keys(patch).length === 0 ? { kind: "done" } : { kind: "patch", patch };
61
+ }
62
+ export {
63
+ PLAN_MODE_MIDDLEWARE,
64
+ PLAN_MODE_TOOL,
65
+ decidePlanModeLanePatch,
66
+ planModeListEdits,
67
+ planModeOf,
68
+ threadPlanModeFromLane,
69
+ withPlanMode
70
+ };
71
+ //# sourceMappingURL=statewire-plan-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statewire-plan-mode.js","sources":["../../src/runtime/statewire-plan-mode.ts"],"sourcesContent":["import type {\n DeepAgentServerConfig,\n ThreadConfigCustom,\n ThreadConfigPatch,\n} from '@athenaintel/agent-runtime';\n\n/**\n * Plan mode: the deep agent keeps a to-do plan for multi-step work and checks\n * its steps off as it goes. That is the `write_todos` tool and the\n * `TodoListMiddleware` that provides it with its planning prompt, which agora\n * binds on every run unless the run's config excludes either one\n * (`excluded_tools`, `excluded_middleware`). The two go together, as Olympus's\n * Plan Mode switch flips them (`applyPlanningEnabled`): a config plans unless\n * it excludes either.\n */\nexport const PLAN_MODE_TOOL = 'write_todos';\n\n/** The middleware that provides {@link PLAN_MODE_TOOL} and its planning prompt. */\nexport const PLAN_MODE_MIDDLEWARE = 'TodoListMiddleware';\n\nconst EXCLUDED_TOOLS = 'excluded_tools';\nconst EXCLUDED_MIDDLEWARE = 'excluded_middleware';\n\n/** The two lists plan mode edits, each with the one name plan mode owns in it. */\nconst PLAN_MODE_EXCLUSIONS = [\n { key: EXCLUDED_TOOLS, name: PLAN_MODE_TOOL },\n { key: EXCLUDED_MIDDLEWARE, name: PLAN_MODE_MIDDLEWARE },\n] as const;\n\nconst stringItems = (value: unknown): string[] =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n\n/** Whether a config (a send's `runConfig.custom`, or a thread's server config) plans. Pure. */\nexport function planModeOf(custom: ThreadConfigCustom): boolean {\n return PLAN_MODE_EXCLUSIONS.every(({ key, name }) => !stringItems(custom[key]).includes(name));\n}\n\n/**\n * The exclusion lists that put `custom` in plan mode `planMode`, keyed as a\n * config carries them, and only those that change: plan mode off adds\n * `write_todos` to `excluded_tools` and `TodoListMiddleware` to\n * `excluded_middleware` after what each already lists; on takes them out, and\n * a list left empty is `null` (a `config/patch` unsets it). Every other name in\n * either list stays where it is. `{}` when `custom` is in that plan mode\n * already (off: it excludes either one). Pure.\n */\nexport function planModeListEdits({\n custom,\n planMode,\n}: {\n custom: ThreadConfigCustom;\n planMode: boolean;\n}): ThreadConfigPatch {\n const edits: ThreadConfigPatch = {};\n if (planModeOf(custom) === planMode) return edits;\n for (const { key, name } of PLAN_MODE_EXCLUSIONS) {\n const items = stringItems(custom[key]);\n const excluded = items.includes(name);\n if (planMode && excluded) {\n const kept = items.filter((item) => item !== name);\n edits[key] = kept.length > 0 ? kept : null;\n } else if (!planMode && !excluded) {\n edits[key] = [...items, name];\n }\n }\n return edits;\n}\n\n/**\n * A send's `runConfig.custom` in plan mode `planMode`, after everything else\n * (the host's `extraRunConfig` included) is merged: `undefined` leaves it as it\n * is; otherwise {@link planModeListEdits}, an emptied list omitted. Pure.\n */\nexport function withPlanMode({\n custom,\n planMode,\n}: {\n custom: Record<string, unknown>;\n planMode: boolean | undefined;\n}): Record<string, unknown> {\n if (planMode === undefined) return custom;\n const edits = planModeListEdits({ custom, planMode });\n if (Object.keys(edits).length === 0) return custom;\n const next: Record<string, unknown> = { ...custom };\n for (const [key, value] of Object.entries(edits)) {\n if (value === null) delete next[key];\n else next[key] = value;\n }\n return next;\n}\n\n/** A thread's plan mode, read from its server config lane. */\nexport interface AthenaThreadPlanMode {\n /**\n * Whether the thread's server config plans (`true`) or not (`false`); `null`\n * while it has none, when every turn runs with what the send carries (the\n * provider's `planMode`, and a plan when the provider sets none).\n */\n planMode: boolean | null;\n /** `true` once the thread has a server config lane (version > 0). */\n configured: boolean;\n /**\n * `true` once the statewire host's snapshot of this thread has arrived (the\n * placeholder or remembered snapshot a thread shows while it loads may carry\n * no lane, or an older one). Before that `planMode` is `null`.\n */\n ready: boolean;\n}\n\n/** {@link AthenaThreadPlanMode} from the lane and the landed flag. Pure. */\nexport function threadPlanModeFromLane({\n lane,\n ready,\n}: {\n lane: DeepAgentServerConfig | null;\n ready: boolean;\n}): AthenaThreadPlanMode {\n if (!ready || lane === null) return { planMode: null, configured: false, ready };\n return { planMode: planModeOf(lane.custom), configured: true, ready };\n}\n\n/**\n * What to do with a `planMode` change the host made during an attach, decided\n * as every provider-owned thread-config key is (`decideThreadConfigLanePatch`):\n *\n * - `wait`: keep it pending. The thread's snapshot has not landed, or the\n * thread has no lane yet (version 0), where the next send carries plan mode.\n * It stays pending so that a lane an EARLIER send seeds is corrected once it\n * lands.\n * - `done`: the lane already plans that way (this client's own unacknowledged\n * writes folded over); nothing to write.\n * - `patch`: issue one `config/patch` carrying the exclusion lists that change,\n * computed from the lane's own, so a name another client excluded stays.\n */\nexport type PlanModeLaneDecision =\n | { kind: 'wait' }\n | { kind: 'done' }\n | { kind: 'patch'; patch: ThreadConfigPatch };\n\nexport function decidePlanModeLanePatch({\n planMode,\n landed,\n configVersion,\n custom,\n}: {\n /** The provider's `planMode` after the change. */\n planMode: boolean;\n landed: boolean;\n configVersion: number;\n /** The effective lane: the server config with this client's pending writes folded over. */\n custom: ThreadConfigCustom;\n}): PlanModeLaneDecision {\n if (!landed || configVersion <= 0) return { kind: 'wait' };\n const patch = planModeListEdits({ custom, planMode });\n return Object.keys(patch).length === 0 ? { kind: 'done' } : { kind: 'patch', patch };\n}\n"],"names":[],"mappings":"AAeO,MAAM,iBAAiB;AAGvB,MAAM,uBAAuB;AAEpC,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAG5B,MAAM,uBAAuB;AAAA,EAC3B,EAAE,KAAK,gBAAgB,MAAM,eAAA;AAAA,EAC7B,EAAE,KAAK,qBAAqB,MAAM,qBAAA;AACpC;AAEA,MAAM,cAAc,CAAC,UACnB,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ,IAAI,CAAA;AAGrF,SAAS,WAAW,QAAqC;AAC9D,SAAO,qBAAqB,MAAM,CAAC,EAAE,KAAK,KAAA,MAAW,CAAC,YAAY,OAAO,GAAG,CAAC,EAAE,SAAS,IAAI,CAAC;AAC/F;AAWO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAGsB;AACpB,QAAM,QAA2B,CAAA;AACjC,MAAI,WAAW,MAAM,MAAM,SAAU,QAAO;AAC5C,aAAW,EAAE,KAAK,KAAA,KAAU,sBAAsB;AAChD,UAAM,QAAQ,YAAY,OAAO,GAAG,CAAC;AACrC,UAAM,WAAW,MAAM,SAAS,IAAI;AACpC,QAAI,YAAY,UAAU;AACxB,YAAM,OAAO,MAAM,OAAO,CAAC,SAAS,SAAS,IAAI;AACjD,YAAM,GAAG,IAAI,KAAK,SAAS,IAAI,OAAO;AAAA,IACxC,WAAW,CAAC,YAAY,CAAC,UAAU;AACjC,YAAM,GAAG,IAAI,CAAC,GAAG,OAAO,IAAI;AAAA,IAC9B;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AACF,GAG4B;AAC1B,MAAI,aAAa,OAAW,QAAO;AACnC,QAAM,QAAQ,kBAAkB,EAAE,QAAQ,UAAU;AACpD,MAAI,OAAO,KAAK,KAAK,EAAE,WAAW,EAAG,QAAO;AAC5C,QAAM,OAAgC,EAAE,GAAG,OAAA;AAC3C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,UAAU,KAAM,QAAO,KAAK,GAAG;AAAA,QAC9B,MAAK,GAAG,IAAI;AAAA,EACnB;AACA,SAAO;AACT;AAqBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AACF,GAGyB;AACvB,MAAI,CAAC,SAAS,SAAS,KAAM,QAAO,EAAE,UAAU,MAAM,YAAY,OAAO,MAAA;AACzE,SAAO,EAAE,UAAU,WAAW,KAAK,MAAM,GAAG,YAAY,MAAM,MAAA;AAChE;AAoBO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOyB;AACvB,MAAI,CAAC,UAAU,iBAAiB,EAAG,QAAO,EAAE,MAAM,OAAA;AAClD,QAAM,QAAQ,kBAAkB,EAAE,QAAQ,UAAU;AACpD,SAAO,OAAO,KAAK,KAAK,EAAE,WAAW,IAAI,EAAE,MAAM,OAAA,IAAW,EAAE,MAAM,SAAS,MAAA;AAC/E;"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const statewirePlanMode = require("./statewire-plan-mode.cjs");
3
4
  const DEEP_AGENT_RUNTIME_MARKER = "athena_deep_agent";
4
5
  const STATEWIRE_START_CHANNEL = "web";
5
6
  const STATEWIRE_RUN_LABEL = "Athena SDK";
@@ -54,7 +55,7 @@ function buildStatewireRunConfig(options = {}) {
54
55
  /* @__PURE__ */ new Set([...options.tools ?? [], ...options.frontendToolIds ?? []])
55
56
  );
56
57
  const systemPrompt = ((_c = options.systemPrompt) == null ? void 0 : _c.trim()) ?? "";
57
- return {
58
+ const built = {
58
59
  custom: {
59
60
  runtime: DEEP_AGENT_RUNTIME_MARKER,
60
61
  // With a collab channel selected, omit the SDK's own 'web' stamp: the
@@ -88,6 +89,7 @@ function buildStatewireRunConfig(options = {}) {
88
89
  ...options.extraRunConfig ?? {}
89
90
  }
90
91
  };
92
+ return { custom: statewirePlanMode.withPlanMode({ custom: built.custom, planMode: options.planMode }) };
91
93
  }
92
94
  exports.COLLAB_AGENT_REF_PREFIX = COLLAB_AGENT_REF_PREFIX;
93
95
  exports.COLLAB_AGENT_REF_SHAPE = COLLAB_AGENT_REF_SHAPE;
@@ -1 +1 @@
1
- {"version":3,"file":"statewire-run-config.cjs","sources":["../../src/runtime/statewire-run-config.ts"],"sourcesContent":["/** Runtime marker the deep-agent session substrate stamps on sessions. */\nconst DEEP_AGENT_RUNTIME_MARKER = 'athena_deep_agent';\n\n/** Session-origin channel. The backend clamps unknown values to 'web', which\n * is how every SDK-started session has always classified. */\n/** The start channel every run this SDK starts is stamped with (unless a collab channel decides). */\nexport const STATEWIRE_START_CHANNEL = 'web';\n\n/** Session label persisted in the thread's panel config (mirrors\n * 'Athena Chrome' / 'Athena mobile' in the sibling statewire hosts). */\nconst STATEWIRE_RUN_LABEL = 'Athena SDK';\n\n/** Deep-agent default model — matches the Olympus and mobile statewire hosts. */\nexport const DEFAULT_STATEWIRE_MODEL = 'claude-sonnet-5-5';\n\n/** Agent-id namespace for collab agents (`collab_agent:<asset_id>`). */\nexport const COLLAB_AGENT_REF_PREFIX = 'collab_agent:';\n\n/** The only shape the `agent` prop accepts, for error messages and docs. */\nexport const COLLAB_AGENT_REF_SHAPE = 'collab_agent:<asset_id>';\n\n/** The asset id when `agent` is a `collab_agent:<asset_id>` ref, else null. */\nexport function parseCollabAgentRef(agent: string | undefined | null): string | null {\n if (typeof agent !== 'string' || !agent.startsWith(COLLAB_AGENT_REF_PREFIX)) return null;\n const assetId = agent.slice(COLLAB_AGENT_REF_PREFIX.length).trim();\n return assetId || null;\n}\n\n/**\n * Resolve the provider's `agent` prop to a collab-agent asset id.\n *\n * An omitted or blank `agent` means \"no agent selected\" — the thread runs the\n * Athena deep agent — and resolves to `null`. A `collab_agent:<asset_id>` ref\n * resolves to the asset id. Any other non-blank value throws: the statewire\n * host cannot honour it, and a selector that is silently dropped would let a\n * misconfigured deployment ship answers from the wrong agent.\n */\nexport function resolveAgentProp({ agent }: { agent: string | undefined | null }): string | null {\n if (agent === undefined || agent === null || agent.trim() === '') return null;\n const assetId = parseCollabAgentRef(agent.trim());\n if (assetId) return assetId;\n throw new Error(\n `[AthenaSDK] Unsupported \\`agent\\` prop ${JSON.stringify(agent)}. The only accepted shape is '${COLLAB_AGENT_REF_SHAPE}' (the asset id of a published collab agent). Named agents are not supported — the statewire host always runs the Athena deep agent; omit \\`agent\\` to use it.`,\n );\n}\n\nexport interface StatewireRunConfigOptions {\n /** LLM model identifier. Defaults to the deep-agent default model — unless a\n * collab agent is selected and its author set one (the backend overlay\n * applies the agent's model when the run sends none), in which case no\n * model is sent so the agent's choice wins. */\n model?: string;\n /** Agent selector. Only the `collab_agent:<asset_id>` shape is accepted: the\n * run executes AS that published collab agent (prompt, tools, model\n * default). Any other non-empty value throws (see {@link resolveAgentProp}). */\n agent?: string;\n /** Collab-agent channel id (built-in like `email`/`sms`, or a user-defined\n * custom channel id) selecting that channel's configuration overrides.\n * Sent as `collab_channel_id`; only meaningful with a collab `agent`. */\n channel?: string;\n /** The agent's mode this send runs in, picked from the chat's mode menu\n * (`AthenaProvider` `modes`): `base` or a mode's id. Sent as\n * `collab_channel_id` in place of `channel`, which then rides as\n * `collab_entry_channel_id` so a session the pick starts still enters\n * through the channel (its switch list, lock and thread list). Only\n * meaningful with a collab `agent`. */\n mode?: string;\n /** Backend toolkit IDs to enable. */\n tools?: string[];\n /** Frontend tool IDs to include in enabled_tools. */\n frontendToolIds?: string[];\n /** Asset IDs to include in the workbench. */\n workbench?: string[];\n /** Knowledge base IDs for RAG context. */\n knowledgeBase?: string[];\n /** System prompt override. */\n systemPrompt?: string;\n /** Client app identifier, passed through as app_id. */\n appId?: string;\n /** Client-executed tool declarations, passed through as client_tools. The\n * deep-agent runtime binds each as an interrupt-backed tool the client\n * answers via the statewire client-tool bridge. */\n clientTools?: Record<string, unknown>[];\n /** Additional fields merged into runConfig.custom. */\n extraRunConfig?: Record<string, unknown>;\n}\n\n/**\n * The model a send carries for the host's `model` and `extraRunConfig`, with\n * the precedence {@link buildStatewireRunConfig} applies: `extraRunConfig` is\n * merged last, so its `model` key (when it has one) wins over the `model`\n * prop. `undefined` when the send carries no explicit model.\n */\nexport function effectiveStatewireModel({\n model,\n extraRunConfig,\n}: {\n model: string | undefined;\n extraRunConfig: Record<string, unknown> | undefined;\n}): string | undefined {\n if (extraRunConfig !== undefined && Object.hasOwn(extraRunConfig, 'model')) {\n const override = extraRunConfig.model;\n return typeof override === 'string' && override !== '' ? override : undefined;\n }\n return model === '' ? undefined : model;\n}\n\n/**\n * The `start_channel` a send stamps on its run, with the precedence\n * {@link buildStatewireRunConfig} applies: the host's\n * `extraRunConfig.start_channel` wins; a selected collab channel (or mode)\n * stamps nothing, so the backend stamps that channel's own kind; otherwise the\n * SDK's own {@link STATEWIRE_START_CHANNEL}. `null` when the backend decides,\n * since the provenance is then unknown until the server reports the session.\n */\nexport function effectiveStatewireStartChannel({\n agent,\n channel,\n mode,\n extraRunConfig,\n}: Pick<StatewireRunConfigOptions, 'agent' | 'channel' | 'mode' | 'extraRunConfig'>): string | null {\n if (extraRunConfig !== undefined && Object.hasOwn(extraRunConfig, 'start_channel')) {\n const override = extraRunConfig.start_channel;\n return typeof override === 'string' && override.trim() !== '' ? override : null;\n }\n // The non-throwing parse: an agent prop of another shape makes the runtime\n // refuse to start (`resolveAgentProp`), so nothing is sent to stamp.\n const collabChannelSelected =\n parseCollabAgentRef(agent?.trim()) !== null && Boolean(mode?.trim() || channel?.trim());\n return collabChannelSelected ? null : STATEWIRE_START_CHANNEL;\n}\n\n/**\n * Build the `runConfig` a deep-agent statewire run is driven by. Commands\n * travel bare on the statewire channel, so this payload rides the ambient\n * model context (`config.runConfig`) instead of the request body.\n *\n * The flattened `custom` fields drive the run, while `panel_config` carries a\n * minimal panel state the backend persists per thread and replays on the\n * statewire snapshot — so a session started from the SDK stays configured\n * when reopened elsewhere.\n */\nexport function buildStatewireRunConfig(\n options: StatewireRunConfigOptions = {},\n): Record<string, unknown> {\n const collabAgentId = resolveAgentProp({ agent: options.agent });\n const channel = collabAgentId ? options.channel?.trim() || undefined : undefined;\n const mode = collabAgentId ? options.mode?.trim() || undefined : undefined;\n const collabChannelId = mode ?? channel;\n const collabEntryChannelId = mode && channel && mode !== channel ? channel : undefined;\n // With a collab agent selected and no explicit model, send NO model: the\n // backend overlay then applies the model the agent's author configured\n // instead of the SDK default overriding it.\n const model = options.model ?? (collabAgentId ? undefined : DEFAULT_STATEWIRE_MODEL);\n const enabledTools = Array.from(\n new Set([...(options.tools ?? []), ...(options.frontendToolIds ?? [])]),\n );\n const systemPrompt = options.systemPrompt?.trim() ?? '';\n\n return {\n custom: {\n runtime: DEEP_AGENT_RUNTIME_MARKER,\n // With a collab channel selected, omit the SDK's own 'web' stamp: the\n // request's explicit start_channel would win over the backend overlay's\n // kind-mapped provenance (a custom SMS channel must stamp 'sms').\n ...(collabChannelId ? {} : { start_channel: STATEWIRE_START_CHANNEL }),\n ...(model ? { model } : {}),\n // An empty list is behavior-identical to an absent key for the parser\n // (both coerce to []), but the collab-agent overlay merges request keys\n // OVER the agent definition — so an explicit empty list would erase the\n // agent's configured tools. Omit it when empty.\n ...(enabledTools.length > 0 ? { enabled_tools: enabledTools } : {}),\n panel_config: {\n // A collab agent's thread with no explicit model names none here\n // either: agora stores this panel on the thread's first run and\n // replays it to every client, and a stored SDK default would show as\n // the session's model while the agent's own model runs.\n ...(model ? { model } : {}),\n enabled_tools: enabledTools,\n system_prompt: systemPrompt,\n run_label: STATEWIRE_RUN_LABEL,\n },\n ...(collabAgentId ? { collab_agent_id: collabAgentId } : {}),\n ...(collabChannelId ? { collab_channel_id: collabChannelId } : {}),\n ...(collabEntryChannelId ? { collab_entry_channel_id: collabEntryChannelId } : {}),\n ...(systemPrompt ? { system_prompt: systemPrompt } : {}),\n ...(options.workbench?.length ? { workbench: options.workbench } : {}),\n ...(options.knowledgeBase?.length\n ? { knowledge_base: options.knowledgeBase }\n : {}),\n ...(options.appId ? { app_id: options.appId } : {}),\n ...(options.clientTools?.length ? { client_tools: options.clientTools } : {}),\n ...(options.extraRunConfig ?? {}),\n },\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"statewire-run-config.cjs","sources":["../../src/runtime/statewire-run-config.ts"],"sourcesContent":["import { withPlanMode } from './statewire-plan-mode';\n\n/** Runtime marker the deep-agent session substrate stamps on sessions. */\nconst DEEP_AGENT_RUNTIME_MARKER = 'athena_deep_agent';\n\n/** Session-origin channel. The backend clamps unknown values to 'web', which\n * is how every SDK-started session has always classified. */\n/** The start channel every run this SDK starts is stamped with (unless a collab channel decides). */\nexport const STATEWIRE_START_CHANNEL = 'web';\n\n/** Session label persisted in the thread's panel config (mirrors\n * 'Athena Chrome' / 'Athena mobile' in the sibling statewire hosts). */\nconst STATEWIRE_RUN_LABEL = 'Athena SDK';\n\n/** Deep-agent default model — matches the Olympus and mobile statewire hosts. */\nexport const DEFAULT_STATEWIRE_MODEL = 'claude-sonnet-5-5';\n\n/** Agent-id namespace for collab agents (`collab_agent:<asset_id>`). */\nexport const COLLAB_AGENT_REF_PREFIX = 'collab_agent:';\n\n/** The only shape the `agent` prop accepts, for error messages and docs. */\nexport const COLLAB_AGENT_REF_SHAPE = 'collab_agent:<asset_id>';\n\n/** The asset id when `agent` is a `collab_agent:<asset_id>` ref, else null. */\nexport function parseCollabAgentRef(agent: string | undefined | null): string | null {\n if (typeof agent !== 'string' || !agent.startsWith(COLLAB_AGENT_REF_PREFIX)) return null;\n const assetId = agent.slice(COLLAB_AGENT_REF_PREFIX.length).trim();\n return assetId || null;\n}\n\n/**\n * Resolve the provider's `agent` prop to a collab-agent asset id.\n *\n * An omitted or blank `agent` means \"no agent selected\" — the thread runs the\n * Athena deep agent — and resolves to `null`. A `collab_agent:<asset_id>` ref\n * resolves to the asset id. Any other non-blank value throws: the statewire\n * host cannot honour it, and a selector that is silently dropped would let a\n * misconfigured deployment ship answers from the wrong agent.\n */\nexport function resolveAgentProp({ agent }: { agent: string | undefined | null }): string | null {\n if (agent === undefined || agent === null || agent.trim() === '') return null;\n const assetId = parseCollabAgentRef(agent.trim());\n if (assetId) return assetId;\n throw new Error(\n `[AthenaSDK] Unsupported \\`agent\\` prop ${JSON.stringify(agent)}. The only accepted shape is '${COLLAB_AGENT_REF_SHAPE}' (the asset id of a published collab agent). Named agents are not supported — the statewire host always runs the Athena deep agent; omit \\`agent\\` to use it.`,\n );\n}\n\nexport interface StatewireRunConfigOptions {\n /** LLM model identifier. Defaults to the deep-agent default model — unless a\n * collab agent is selected and its author set one (the backend overlay\n * applies the agent's model when the run sends none), in which case no\n * model is sent so the agent's choice wins. */\n model?: string;\n /** Agent selector. Only the `collab_agent:<asset_id>` shape is accepted: the\n * run executes AS that published collab agent (prompt, tools, model\n * default). Any other non-empty value throws (see {@link resolveAgentProp}). */\n agent?: string;\n /** Collab-agent channel id (built-in like `email`/`sms`, or a user-defined\n * custom channel id) selecting that channel's configuration overrides.\n * Sent as `collab_channel_id`; only meaningful with a collab `agent`. */\n channel?: string;\n /** The agent's mode this send runs in, picked from the chat's mode menu\n * (`AthenaProvider` `modes`): `base` or a mode's id. Sent as\n * `collab_channel_id` in place of `channel`, which then rides as\n * `collab_entry_channel_id` so a session the pick starts still enters\n * through the channel (its switch list, lock and thread list). Only\n * meaningful with a collab `agent`. */\n mode?: string;\n /** Backend toolkit IDs to enable. */\n tools?: string[];\n /** Frontend tool IDs to include in enabled_tools. */\n frontendToolIds?: string[];\n /** Asset IDs to include in the workbench. */\n workbench?: string[];\n /** Knowledge base IDs for RAG context. */\n knowledgeBase?: string[];\n /** System prompt override. */\n systemPrompt?: string;\n /** Client app identifier, passed through as app_id. */\n appId?: string;\n /** Client-executed tool declarations, passed through as client_tools. The\n * deep-agent runtime binds each as an interrupt-backed tool the client\n * answers via the statewire client-tool bridge. */\n clientTools?: Record<string, unknown>[];\n /** Additional fields merged into runConfig.custom. */\n extraRunConfig?: Record<string, unknown>;\n /**\n * Plan mode (`AthenaProviderProps.planMode`), applied last: `false` adds\n * `write_todos` and `TodoListMiddleware` to the exclusion lists, after\n * anything `extraRunConfig` excludes; `true` takes them out; `undefined`\n * leaves the lists as they are.\n */\n planMode?: boolean;\n}\n\n/**\n * The model a send carries for the host's `model` and `extraRunConfig`, with\n * the precedence {@link buildStatewireRunConfig} applies: `extraRunConfig` is\n * merged last, so its `model` key (when it has one) wins over the `model`\n * prop. `undefined` when the send carries no explicit model.\n */\nexport function effectiveStatewireModel({\n model,\n extraRunConfig,\n}: {\n model: string | undefined;\n extraRunConfig: Record<string, unknown> | undefined;\n}): string | undefined {\n if (extraRunConfig !== undefined && Object.hasOwn(extraRunConfig, 'model')) {\n const override = extraRunConfig.model;\n return typeof override === 'string' && override !== '' ? override : undefined;\n }\n return model === '' ? undefined : model;\n}\n\n/**\n * The `start_channel` a send stamps on its run, with the precedence\n * {@link buildStatewireRunConfig} applies: the host's\n * `extraRunConfig.start_channel` wins; a selected collab channel (or mode)\n * stamps nothing, so the backend stamps that channel's own kind; otherwise the\n * SDK's own {@link STATEWIRE_START_CHANNEL}. `null` when the backend decides,\n * since the provenance is then unknown until the server reports the session.\n */\nexport function effectiveStatewireStartChannel({\n agent,\n channel,\n mode,\n extraRunConfig,\n}: Pick<StatewireRunConfigOptions, 'agent' | 'channel' | 'mode' | 'extraRunConfig'>): string | null {\n if (extraRunConfig !== undefined && Object.hasOwn(extraRunConfig, 'start_channel')) {\n const override = extraRunConfig.start_channel;\n return typeof override === 'string' && override.trim() !== '' ? override : null;\n }\n // The non-throwing parse: an agent prop of another shape makes the runtime\n // refuse to start (`resolveAgentProp`), so nothing is sent to stamp.\n const collabChannelSelected =\n parseCollabAgentRef(agent?.trim()) !== null && Boolean(mode?.trim() || channel?.trim());\n return collabChannelSelected ? null : STATEWIRE_START_CHANNEL;\n}\n\n/**\n * Build the `runConfig` a deep-agent statewire run is driven by. Commands\n * travel bare on the statewire channel, so this payload rides the ambient\n * model context (`config.runConfig`) instead of the request body.\n *\n * The flattened `custom` fields drive the run, while `panel_config` carries a\n * minimal panel state the backend persists per thread and replays on the\n * statewire snapshot — so a session started from the SDK stays configured\n * when reopened elsewhere.\n */\nexport function buildStatewireRunConfig(\n options: StatewireRunConfigOptions = {},\n): Record<string, unknown> {\n const collabAgentId = resolveAgentProp({ agent: options.agent });\n const channel = collabAgentId ? options.channel?.trim() || undefined : undefined;\n const mode = collabAgentId ? options.mode?.trim() || undefined : undefined;\n const collabChannelId = mode ?? channel;\n const collabEntryChannelId = mode && channel && mode !== channel ? channel : undefined;\n // With a collab agent selected and no explicit model, send NO model: the\n // backend overlay then applies the model the agent's author configured\n // instead of the SDK default overriding it.\n const model = options.model ?? (collabAgentId ? undefined : DEFAULT_STATEWIRE_MODEL);\n const enabledTools = Array.from(\n new Set([...(options.tools ?? []), ...(options.frontendToolIds ?? [])]),\n );\n const systemPrompt = options.systemPrompt?.trim() ?? '';\n\n const built: { custom: Record<string, unknown> } = {\n custom: {\n runtime: DEEP_AGENT_RUNTIME_MARKER,\n // With a collab channel selected, omit the SDK's own 'web' stamp: the\n // request's explicit start_channel would win over the backend overlay's\n // kind-mapped provenance (a custom SMS channel must stamp 'sms').\n ...(collabChannelId ? {} : { start_channel: STATEWIRE_START_CHANNEL }),\n ...(model ? { model } : {}),\n // An empty list is behavior-identical to an absent key for the parser\n // (both coerce to []), but the collab-agent overlay merges request keys\n // OVER the agent definition — so an explicit empty list would erase the\n // agent's configured tools. Omit it when empty.\n ...(enabledTools.length > 0 ? { enabled_tools: enabledTools } : {}),\n panel_config: {\n // A collab agent's thread with no explicit model names none here\n // either: agora stores this panel on the thread's first run and\n // replays it to every client, and a stored SDK default would show as\n // the session's model while the agent's own model runs.\n ...(model ? { model } : {}),\n enabled_tools: enabledTools,\n system_prompt: systemPrompt,\n run_label: STATEWIRE_RUN_LABEL,\n },\n ...(collabAgentId ? { collab_agent_id: collabAgentId } : {}),\n ...(collabChannelId ? { collab_channel_id: collabChannelId } : {}),\n ...(collabEntryChannelId ? { collab_entry_channel_id: collabEntryChannelId } : {}),\n ...(systemPrompt ? { system_prompt: systemPrompt } : {}),\n ...(options.workbench?.length ? { workbench: options.workbench } : {}),\n ...(options.knowledgeBase?.length\n ? { knowledge_base: options.knowledgeBase }\n : {}),\n ...(options.appId ? { app_id: options.appId } : {}),\n ...(options.clientTools?.length ? { client_tools: options.clientTools } : {}),\n ...(options.extraRunConfig ?? {}),\n },\n };\n // Plan mode edits the exclusion lists last, so it composes with an\n // `extraRunConfig` that excludes other tools or middleware.\n return { custom: withPlanMode({ custom: built.custom, planMode: options.planMode }) };\n}\n"],"names":["withPlanMode"],"mappings":"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"}
@@ -61,6 +61,13 @@ export interface StatewireRunConfigOptions {
61
61
  clientTools?: Record<string, unknown>[];
62
62
  /** Additional fields merged into runConfig.custom. */
63
63
  extraRunConfig?: Record<string, unknown>;
64
+ /**
65
+ * Plan mode (`AthenaProviderProps.planMode`), applied last: `false` adds
66
+ * `write_todos` and `TodoListMiddleware` to the exclusion lists, after
67
+ * anything `extraRunConfig` excludes; `true` takes them out; `undefined`
68
+ * leaves the lists as they are.
69
+ */
70
+ planMode?: boolean;
64
71
  }
65
72
  /**
66
73
  * The model a send carries for the host's `model` and `extraRunConfig`, with
@@ -1,3 +1,4 @@
1
+ import { withPlanMode } from "./statewire-plan-mode.js";
1
2
  const DEEP_AGENT_RUNTIME_MARKER = "athena_deep_agent";
2
3
  const STATEWIRE_START_CHANNEL = "web";
3
4
  const STATEWIRE_RUN_LABEL = "Athena SDK";
@@ -52,7 +53,7 @@ function buildStatewireRunConfig(options = {}) {
52
53
  /* @__PURE__ */ new Set([...options.tools ?? [], ...options.frontendToolIds ?? []])
53
54
  );
54
55
  const systemPrompt = ((_c = options.systemPrompt) == null ? void 0 : _c.trim()) ?? "";
55
- return {
56
+ const built = {
56
57
  custom: {
57
58
  runtime: DEEP_AGENT_RUNTIME_MARKER,
58
59
  // With a collab channel selected, omit the SDK's own 'web' stamp: the
@@ -86,6 +87,7 @@ function buildStatewireRunConfig(options = {}) {
86
87
  ...options.extraRunConfig ?? {}
87
88
  }
88
89
  };
90
+ return { custom: withPlanMode({ custom: built.custom, planMode: options.planMode }) };
89
91
  }
90
92
  export {
91
93
  COLLAB_AGENT_REF_PREFIX,
@@ -1 +1 @@
1
- {"version":3,"file":"statewire-run-config.js","sources":["../../src/runtime/statewire-run-config.ts"],"sourcesContent":["/** Runtime marker the deep-agent session substrate stamps on sessions. */\nconst DEEP_AGENT_RUNTIME_MARKER = 'athena_deep_agent';\n\n/** Session-origin channel. The backend clamps unknown values to 'web', which\n * is how every SDK-started session has always classified. */\n/** The start channel every run this SDK starts is stamped with (unless a collab channel decides). */\nexport const STATEWIRE_START_CHANNEL = 'web';\n\n/** Session label persisted in the thread's panel config (mirrors\n * 'Athena Chrome' / 'Athena mobile' in the sibling statewire hosts). */\nconst STATEWIRE_RUN_LABEL = 'Athena SDK';\n\n/** Deep-agent default model — matches the Olympus and mobile statewire hosts. */\nexport const DEFAULT_STATEWIRE_MODEL = 'claude-sonnet-5-5';\n\n/** Agent-id namespace for collab agents (`collab_agent:<asset_id>`). */\nexport const COLLAB_AGENT_REF_PREFIX = 'collab_agent:';\n\n/** The only shape the `agent` prop accepts, for error messages and docs. */\nexport const COLLAB_AGENT_REF_SHAPE = 'collab_agent:<asset_id>';\n\n/** The asset id when `agent` is a `collab_agent:<asset_id>` ref, else null. */\nexport function parseCollabAgentRef(agent: string | undefined | null): string | null {\n if (typeof agent !== 'string' || !agent.startsWith(COLLAB_AGENT_REF_PREFIX)) return null;\n const assetId = agent.slice(COLLAB_AGENT_REF_PREFIX.length).trim();\n return assetId || null;\n}\n\n/**\n * Resolve the provider's `agent` prop to a collab-agent asset id.\n *\n * An omitted or blank `agent` means \"no agent selected\" — the thread runs the\n * Athena deep agent — and resolves to `null`. A `collab_agent:<asset_id>` ref\n * resolves to the asset id. Any other non-blank value throws: the statewire\n * host cannot honour it, and a selector that is silently dropped would let a\n * misconfigured deployment ship answers from the wrong agent.\n */\nexport function resolveAgentProp({ agent }: { agent: string | undefined | null }): string | null {\n if (agent === undefined || agent === null || agent.trim() === '') return null;\n const assetId = parseCollabAgentRef(agent.trim());\n if (assetId) return assetId;\n throw new Error(\n `[AthenaSDK] Unsupported \\`agent\\` prop ${JSON.stringify(agent)}. The only accepted shape is '${COLLAB_AGENT_REF_SHAPE}' (the asset id of a published collab agent). Named agents are not supported — the statewire host always runs the Athena deep agent; omit \\`agent\\` to use it.`,\n );\n}\n\nexport interface StatewireRunConfigOptions {\n /** LLM model identifier. Defaults to the deep-agent default model — unless a\n * collab agent is selected and its author set one (the backend overlay\n * applies the agent's model when the run sends none), in which case no\n * model is sent so the agent's choice wins. */\n model?: string;\n /** Agent selector. Only the `collab_agent:<asset_id>` shape is accepted: the\n * run executes AS that published collab agent (prompt, tools, model\n * default). Any other non-empty value throws (see {@link resolveAgentProp}). */\n agent?: string;\n /** Collab-agent channel id (built-in like `email`/`sms`, or a user-defined\n * custom channel id) selecting that channel's configuration overrides.\n * Sent as `collab_channel_id`; only meaningful with a collab `agent`. */\n channel?: string;\n /** The agent's mode this send runs in, picked from the chat's mode menu\n * (`AthenaProvider` `modes`): `base` or a mode's id. Sent as\n * `collab_channel_id` in place of `channel`, which then rides as\n * `collab_entry_channel_id` so a session the pick starts still enters\n * through the channel (its switch list, lock and thread list). Only\n * meaningful with a collab `agent`. */\n mode?: string;\n /** Backend toolkit IDs to enable. */\n tools?: string[];\n /** Frontend tool IDs to include in enabled_tools. */\n frontendToolIds?: string[];\n /** Asset IDs to include in the workbench. */\n workbench?: string[];\n /** Knowledge base IDs for RAG context. */\n knowledgeBase?: string[];\n /** System prompt override. */\n systemPrompt?: string;\n /** Client app identifier, passed through as app_id. */\n appId?: string;\n /** Client-executed tool declarations, passed through as client_tools. The\n * deep-agent runtime binds each as an interrupt-backed tool the client\n * answers via the statewire client-tool bridge. */\n clientTools?: Record<string, unknown>[];\n /** Additional fields merged into runConfig.custom. */\n extraRunConfig?: Record<string, unknown>;\n}\n\n/**\n * The model a send carries for the host's `model` and `extraRunConfig`, with\n * the precedence {@link buildStatewireRunConfig} applies: `extraRunConfig` is\n * merged last, so its `model` key (when it has one) wins over the `model`\n * prop. `undefined` when the send carries no explicit model.\n */\nexport function effectiveStatewireModel({\n model,\n extraRunConfig,\n}: {\n model: string | undefined;\n extraRunConfig: Record<string, unknown> | undefined;\n}): string | undefined {\n if (extraRunConfig !== undefined && Object.hasOwn(extraRunConfig, 'model')) {\n const override = extraRunConfig.model;\n return typeof override === 'string' && override !== '' ? override : undefined;\n }\n return model === '' ? undefined : model;\n}\n\n/**\n * The `start_channel` a send stamps on its run, with the precedence\n * {@link buildStatewireRunConfig} applies: the host's\n * `extraRunConfig.start_channel` wins; a selected collab channel (or mode)\n * stamps nothing, so the backend stamps that channel's own kind; otherwise the\n * SDK's own {@link STATEWIRE_START_CHANNEL}. `null` when the backend decides,\n * since the provenance is then unknown until the server reports the session.\n */\nexport function effectiveStatewireStartChannel({\n agent,\n channel,\n mode,\n extraRunConfig,\n}: Pick<StatewireRunConfigOptions, 'agent' | 'channel' | 'mode' | 'extraRunConfig'>): string | null {\n if (extraRunConfig !== undefined && Object.hasOwn(extraRunConfig, 'start_channel')) {\n const override = extraRunConfig.start_channel;\n return typeof override === 'string' && override.trim() !== '' ? override : null;\n }\n // The non-throwing parse: an agent prop of another shape makes the runtime\n // refuse to start (`resolveAgentProp`), so nothing is sent to stamp.\n const collabChannelSelected =\n parseCollabAgentRef(agent?.trim()) !== null && Boolean(mode?.trim() || channel?.trim());\n return collabChannelSelected ? null : STATEWIRE_START_CHANNEL;\n}\n\n/**\n * Build the `runConfig` a deep-agent statewire run is driven by. Commands\n * travel bare on the statewire channel, so this payload rides the ambient\n * model context (`config.runConfig`) instead of the request body.\n *\n * The flattened `custom` fields drive the run, while `panel_config` carries a\n * minimal panel state the backend persists per thread and replays on the\n * statewire snapshot — so a session started from the SDK stays configured\n * when reopened elsewhere.\n */\nexport function buildStatewireRunConfig(\n options: StatewireRunConfigOptions = {},\n): Record<string, unknown> {\n const collabAgentId = resolveAgentProp({ agent: options.agent });\n const channel = collabAgentId ? options.channel?.trim() || undefined : undefined;\n const mode = collabAgentId ? options.mode?.trim() || undefined : undefined;\n const collabChannelId = mode ?? channel;\n const collabEntryChannelId = mode && channel && mode !== channel ? channel : undefined;\n // With a collab agent selected and no explicit model, send NO model: the\n // backend overlay then applies the model the agent's author configured\n // instead of the SDK default overriding it.\n const model = options.model ?? (collabAgentId ? undefined : DEFAULT_STATEWIRE_MODEL);\n const enabledTools = Array.from(\n new Set([...(options.tools ?? []), ...(options.frontendToolIds ?? [])]),\n );\n const systemPrompt = options.systemPrompt?.trim() ?? '';\n\n return {\n custom: {\n runtime: DEEP_AGENT_RUNTIME_MARKER,\n // With a collab channel selected, omit the SDK's own 'web' stamp: the\n // request's explicit start_channel would win over the backend overlay's\n // kind-mapped provenance (a custom SMS channel must stamp 'sms').\n ...(collabChannelId ? {} : { start_channel: STATEWIRE_START_CHANNEL }),\n ...(model ? { model } : {}),\n // An empty list is behavior-identical to an absent key for the parser\n // (both coerce to []), but the collab-agent overlay merges request keys\n // OVER the agent definition — so an explicit empty list would erase the\n // agent's configured tools. Omit it when empty.\n ...(enabledTools.length > 0 ? { enabled_tools: enabledTools } : {}),\n panel_config: {\n // A collab agent's thread with no explicit model names none here\n // either: agora stores this panel on the thread's first run and\n // replays it to every client, and a stored SDK default would show as\n // the session's model while the agent's own model runs.\n ...(model ? { model } : {}),\n enabled_tools: enabledTools,\n system_prompt: systemPrompt,\n run_label: STATEWIRE_RUN_LABEL,\n },\n ...(collabAgentId ? { collab_agent_id: collabAgentId } : {}),\n ...(collabChannelId ? { collab_channel_id: collabChannelId } : {}),\n ...(collabEntryChannelId ? { collab_entry_channel_id: collabEntryChannelId } : {}),\n ...(systemPrompt ? { system_prompt: systemPrompt } : {}),\n ...(options.workbench?.length ? { workbench: options.workbench } : {}),\n ...(options.knowledgeBase?.length\n ? { knowledge_base: options.knowledgeBase }\n : {}),\n ...(options.appId ? { app_id: options.appId } : {}),\n ...(options.clientTools?.length ? { client_tools: options.clientTools } : {}),\n ...(options.extraRunConfig ?? {}),\n },\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"statewire-run-config.js","sources":["../../src/runtime/statewire-run-config.ts"],"sourcesContent":["import { withPlanMode } from './statewire-plan-mode';\n\n/** Runtime marker the deep-agent session substrate stamps on sessions. */\nconst DEEP_AGENT_RUNTIME_MARKER = 'athena_deep_agent';\n\n/** Session-origin channel. The backend clamps unknown values to 'web', which\n * is how every SDK-started session has always classified. */\n/** The start channel every run this SDK starts is stamped with (unless a collab channel decides). */\nexport const STATEWIRE_START_CHANNEL = 'web';\n\n/** Session label persisted in the thread's panel config (mirrors\n * 'Athena Chrome' / 'Athena mobile' in the sibling statewire hosts). */\nconst STATEWIRE_RUN_LABEL = 'Athena SDK';\n\n/** Deep-agent default model — matches the Olympus and mobile statewire hosts. */\nexport const DEFAULT_STATEWIRE_MODEL = 'claude-sonnet-5-5';\n\n/** Agent-id namespace for collab agents (`collab_agent:<asset_id>`). */\nexport const COLLAB_AGENT_REF_PREFIX = 'collab_agent:';\n\n/** The only shape the `agent` prop accepts, for error messages and docs. */\nexport const COLLAB_AGENT_REF_SHAPE = 'collab_agent:<asset_id>';\n\n/** The asset id when `agent` is a `collab_agent:<asset_id>` ref, else null. */\nexport function parseCollabAgentRef(agent: string | undefined | null): string | null {\n if (typeof agent !== 'string' || !agent.startsWith(COLLAB_AGENT_REF_PREFIX)) return null;\n const assetId = agent.slice(COLLAB_AGENT_REF_PREFIX.length).trim();\n return assetId || null;\n}\n\n/**\n * Resolve the provider's `agent` prop to a collab-agent asset id.\n *\n * An omitted or blank `agent` means \"no agent selected\" — the thread runs the\n * Athena deep agent — and resolves to `null`. A `collab_agent:<asset_id>` ref\n * resolves to the asset id. Any other non-blank value throws: the statewire\n * host cannot honour it, and a selector that is silently dropped would let a\n * misconfigured deployment ship answers from the wrong agent.\n */\nexport function resolveAgentProp({ agent }: { agent: string | undefined | null }): string | null {\n if (agent === undefined || agent === null || agent.trim() === '') return null;\n const assetId = parseCollabAgentRef(agent.trim());\n if (assetId) return assetId;\n throw new Error(\n `[AthenaSDK] Unsupported \\`agent\\` prop ${JSON.stringify(agent)}. The only accepted shape is '${COLLAB_AGENT_REF_SHAPE}' (the asset id of a published collab agent). Named agents are not supported — the statewire host always runs the Athena deep agent; omit \\`agent\\` to use it.`,\n );\n}\n\nexport interface StatewireRunConfigOptions {\n /** LLM model identifier. Defaults to the deep-agent default model — unless a\n * collab agent is selected and its author set one (the backend overlay\n * applies the agent's model when the run sends none), in which case no\n * model is sent so the agent's choice wins. */\n model?: string;\n /** Agent selector. Only the `collab_agent:<asset_id>` shape is accepted: the\n * run executes AS that published collab agent (prompt, tools, model\n * default). Any other non-empty value throws (see {@link resolveAgentProp}). */\n agent?: string;\n /** Collab-agent channel id (built-in like `email`/`sms`, or a user-defined\n * custom channel id) selecting that channel's configuration overrides.\n * Sent as `collab_channel_id`; only meaningful with a collab `agent`. */\n channel?: string;\n /** The agent's mode this send runs in, picked from the chat's mode menu\n * (`AthenaProvider` `modes`): `base` or a mode's id. Sent as\n * `collab_channel_id` in place of `channel`, which then rides as\n * `collab_entry_channel_id` so a session the pick starts still enters\n * through the channel (its switch list, lock and thread list). Only\n * meaningful with a collab `agent`. */\n mode?: string;\n /** Backend toolkit IDs to enable. */\n tools?: string[];\n /** Frontend tool IDs to include in enabled_tools. */\n frontendToolIds?: string[];\n /** Asset IDs to include in the workbench. */\n workbench?: string[];\n /** Knowledge base IDs for RAG context. */\n knowledgeBase?: string[];\n /** System prompt override. */\n systemPrompt?: string;\n /** Client app identifier, passed through as app_id. */\n appId?: string;\n /** Client-executed tool declarations, passed through as client_tools. The\n * deep-agent runtime binds each as an interrupt-backed tool the client\n * answers via the statewire client-tool bridge. */\n clientTools?: Record<string, unknown>[];\n /** Additional fields merged into runConfig.custom. */\n extraRunConfig?: Record<string, unknown>;\n /**\n * Plan mode (`AthenaProviderProps.planMode`), applied last: `false` adds\n * `write_todos` and `TodoListMiddleware` to the exclusion lists, after\n * anything `extraRunConfig` excludes; `true` takes them out; `undefined`\n * leaves the lists as they are.\n */\n planMode?: boolean;\n}\n\n/**\n * The model a send carries for the host's `model` and `extraRunConfig`, with\n * the precedence {@link buildStatewireRunConfig} applies: `extraRunConfig` is\n * merged last, so its `model` key (when it has one) wins over the `model`\n * prop. `undefined` when the send carries no explicit model.\n */\nexport function effectiveStatewireModel({\n model,\n extraRunConfig,\n}: {\n model: string | undefined;\n extraRunConfig: Record<string, unknown> | undefined;\n}): string | undefined {\n if (extraRunConfig !== undefined && Object.hasOwn(extraRunConfig, 'model')) {\n const override = extraRunConfig.model;\n return typeof override === 'string' && override !== '' ? override : undefined;\n }\n return model === '' ? undefined : model;\n}\n\n/**\n * The `start_channel` a send stamps on its run, with the precedence\n * {@link buildStatewireRunConfig} applies: the host's\n * `extraRunConfig.start_channel` wins; a selected collab channel (or mode)\n * stamps nothing, so the backend stamps that channel's own kind; otherwise the\n * SDK's own {@link STATEWIRE_START_CHANNEL}. `null` when the backend decides,\n * since the provenance is then unknown until the server reports the session.\n */\nexport function effectiveStatewireStartChannel({\n agent,\n channel,\n mode,\n extraRunConfig,\n}: Pick<StatewireRunConfigOptions, 'agent' | 'channel' | 'mode' | 'extraRunConfig'>): string | null {\n if (extraRunConfig !== undefined && Object.hasOwn(extraRunConfig, 'start_channel')) {\n const override = extraRunConfig.start_channel;\n return typeof override === 'string' && override.trim() !== '' ? override : null;\n }\n // The non-throwing parse: an agent prop of another shape makes the runtime\n // refuse to start (`resolveAgentProp`), so nothing is sent to stamp.\n const collabChannelSelected =\n parseCollabAgentRef(agent?.trim()) !== null && Boolean(mode?.trim() || channel?.trim());\n return collabChannelSelected ? null : STATEWIRE_START_CHANNEL;\n}\n\n/**\n * Build the `runConfig` a deep-agent statewire run is driven by. Commands\n * travel bare on the statewire channel, so this payload rides the ambient\n * model context (`config.runConfig`) instead of the request body.\n *\n * The flattened `custom` fields drive the run, while `panel_config` carries a\n * minimal panel state the backend persists per thread and replays on the\n * statewire snapshot — so a session started from the SDK stays configured\n * when reopened elsewhere.\n */\nexport function buildStatewireRunConfig(\n options: StatewireRunConfigOptions = {},\n): Record<string, unknown> {\n const collabAgentId = resolveAgentProp({ agent: options.agent });\n const channel = collabAgentId ? options.channel?.trim() || undefined : undefined;\n const mode = collabAgentId ? options.mode?.trim() || undefined : undefined;\n const collabChannelId = mode ?? channel;\n const collabEntryChannelId = mode && channel && mode !== channel ? channel : undefined;\n // With a collab agent selected and no explicit model, send NO model: the\n // backend overlay then applies the model the agent's author configured\n // instead of the SDK default overriding it.\n const model = options.model ?? (collabAgentId ? undefined : DEFAULT_STATEWIRE_MODEL);\n const enabledTools = Array.from(\n new Set([...(options.tools ?? []), ...(options.frontendToolIds ?? [])]),\n );\n const systemPrompt = options.systemPrompt?.trim() ?? '';\n\n const built: { custom: Record<string, unknown> } = {\n custom: {\n runtime: DEEP_AGENT_RUNTIME_MARKER,\n // With a collab channel selected, omit the SDK's own 'web' stamp: the\n // request's explicit start_channel would win over the backend overlay's\n // kind-mapped provenance (a custom SMS channel must stamp 'sms').\n ...(collabChannelId ? {} : { start_channel: STATEWIRE_START_CHANNEL }),\n ...(model ? { model } : {}),\n // An empty list is behavior-identical to an absent key for the parser\n // (both coerce to []), but the collab-agent overlay merges request keys\n // OVER the agent definition — so an explicit empty list would erase the\n // agent's configured tools. Omit it when empty.\n ...(enabledTools.length > 0 ? { enabled_tools: enabledTools } : {}),\n panel_config: {\n // A collab agent's thread with no explicit model names none here\n // either: agora stores this panel on the thread's first run and\n // replays it to every client, and a stored SDK default would show as\n // the session's model while the agent's own model runs.\n ...(model ? { model } : {}),\n enabled_tools: enabledTools,\n system_prompt: systemPrompt,\n run_label: STATEWIRE_RUN_LABEL,\n },\n ...(collabAgentId ? { collab_agent_id: collabAgentId } : {}),\n ...(collabChannelId ? { collab_channel_id: collabChannelId } : {}),\n ...(collabEntryChannelId ? { collab_entry_channel_id: collabEntryChannelId } : {}),\n ...(systemPrompt ? { system_prompt: systemPrompt } : {}),\n ...(options.workbench?.length ? { workbench: options.workbench } : {}),\n ...(options.knowledgeBase?.length\n ? { knowledge_base: options.knowledgeBase }\n : {}),\n ...(options.appId ? { app_id: options.appId } : {}),\n ...(options.clientTools?.length ? { client_tools: options.clientTools } : {}),\n ...(options.extraRunConfig ?? {}),\n },\n };\n // Plan mode edits the exclusion lists last, so it composes with an\n // `extraRunConfig` that excludes other tools or middleware.\n return { custom: withPlanMode({ custom: built.custom, planMode: options.planMode }) };\n}\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- function statewireSessionKey({
3
+ const quotaSafeLocalStorageSession = require("../agent-runtime/src/quota-safe-local-storage-session.cjs");
4
+ const ANONYMOUS_SESSION_PRINCIPAL = "anonymous";
5
+ function statewireSessionLanes({
4
6
  syncUrl,
5
- principal,
6
- threadId
7
+ principal
7
8
  }) {
8
- return `${syncUrl}:${principal || "anon"}:${threadId}`;
9
+ return {
10
+ namespace: `${syncUrl}:`,
11
+ principal: principal ? quotaSafeLocalStorageSession.sessionPrincipal(principal) : ANONYMOUS_SESSION_PRINCIPAL,
12
+ unscopedPrefix: `${syncUrl}:${principal || "anon"}:`
13
+ };
9
14
  }
10
15
  function statewireSessionPrincipal(auth) {
11
16
  var _a;
@@ -13,6 +18,7 @@ function statewireSessionPrincipal(auth) {
13
18
  if (userId) return userId;
14
19
  return (auth == null ? void 0 : auth.isLoading) ? null : "";
15
20
  }
16
- exports.statewireSessionKey = statewireSessionKey;
21
+ exports.ANONYMOUS_SESSION_PRINCIPAL = ANONYMOUS_SESSION_PRINCIPAL;
22
+ exports.statewireSessionLanes = statewireSessionLanes;
17
23
  exports.statewireSessionPrincipal = statewireSessionPrincipal;
18
24
  //# sourceMappingURL=statewire-session-key.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"statewire-session-key.cjs","sources":["../../src/runtime/statewire-session-key.ts"],"sourcesContent":["import type { AthenaAuthState } from '../auth/types';\n\n/**\n * Scope of the persisted statewire command lane: the sync host, the signed-in\n * principal, and the thread. A thread id is only meaningful against the\n * backend that minted it, and a shared browser must never resend one user's\n * un-settled commands under the next user's token — so the key carries WHO is\n * signed in as well as where. The principal is a non-secret user id;\n * API-key-only hosts (no auth provider above) share one anonymous scope.\n */\nexport function statewireSessionKey({\n syncUrl,\n principal,\n threadId,\n}: {\n syncUrl: string;\n principal: string;\n threadId: string;\n}): string {\n return `${syncUrl}:${principal || 'anon'}:${threadId}`;\n}\n\n/**\n * The principal a thread's persisted command lane is scoped by\n * ({@link statewireSessionKey}): the signed-in user's id (also while the\n * sign-in provider refreshes and still names them), `''` (the one anonymous\n * scope) with no sign-in provider above or none signed in, and `null` while\n * the sign-in provider is still resolving who is signed in.\n *\n * A lane belongs to one principal. When the principal changes under a mounted\n * chat (a provider signs a signed-out person in, or picks up another account),\n * the runtime remounts the conversation on the new principal's lane as a new\n * client: nothing the previous principal queued is sent as the new one, and\n * the previous principal's record stays for their next sign-in. While the\n * provider is still resolving who is signed in, the lane stays `pending`\n * (`null` here) rather than taking a stand-in key, which would make the first\n * sign-in a principal change and a second attach (see\n * `useAthenaStatewireRuntime`).\n */\nexport function statewireSessionPrincipal(\n auth: Pick<AthenaAuthState, 'isLoading' | 'user'> | null,\n): string | null {\n const userId = auth?.user?.userId;\n if (userId) return userId;\n return auth?.isLoading ? null : '';\n}\n"],"names":[],"mappings":";;AAUO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAIW;AACT,SAAO,GAAG,OAAO,IAAI,aAAa,MAAM,IAAI,QAAQ;AACtD;AAmBO,SAAS,0BACd,MACe;;AACf,QAAM,UAAS,kCAAM,SAAN,mBAAY;AAC3B,MAAI,OAAQ,QAAO;AACnB,UAAO,6BAAM,aAAY,OAAO;AAClC;;;"}
1
+ {"version":3,"file":"statewire-session-key.cjs","sources":["../../src/runtime/statewire-session-key.ts"],"sourcesContent":["import { sessionPrincipal } from '@athenaintel/agent-runtime';\nimport type { AthenaAuthState } from '../auth/types';\n\n/** The statewire principal of API-key-only hosts (no sign-in provider above, or none signed in). */\nexport const ANONYMOUS_SESSION_PRINCIPAL = 'anonymous';\n\n/** Where a principal's persisted statewire command lanes are kept in localStorage. */\nexport interface StatewireSessionLanes {\n /** The backend the lanes belong to: the sync host and `:`. */\n namespace: string;\n /** Statewire's principal: `user:<userId>`, or {@link ANONYMOUS_SESSION_PRINCIPAL}. */\n principal: string;\n /** Where statewire 0.24 kept them (`<syncUrl>:<userId or \"anon\">:`), moved on mount. */\n unscopedPrefix: string;\n}\n\n/**\n * Scope of the persisted statewire command lanes: the sync host and the\n * signed-in principal (a lane is stored at `<syncUrl>:<principal>:<threadId>`).\n * A thread id is only meaningful against the backend that minted it, and a\n * shared browser must never resend one user's un-settled commands under the\n * next user's token, so the lane carries WHO is signed in as well as where.\n * The principal is the signed-in user's id (`user:<userId>`); API-key-only\n * hosts (no auth provider above) share one anonymous scope.\n */\nexport function statewireSessionLanes({\n syncUrl,\n principal,\n}: {\n syncUrl: string;\n /** {@link statewireSessionPrincipal}: the user id, or `''` for the anonymous scope. */\n principal: string;\n}): StatewireSessionLanes {\n return {\n namespace: `${syncUrl}:`,\n principal: principal ? sessionPrincipal(principal) : ANONYMOUS_SESSION_PRINCIPAL,\n unscopedPrefix: `${syncUrl}:${principal || 'anon'}:`,\n };\n}\n\n/**\n * The principal a thread's persisted command lane is scoped by\n * ({@link statewireSessionLanes}): the signed-in user's id (also while the\n * sign-in provider refreshes and still names them), `''` (the one anonymous\n * scope) with no sign-in provider above or none signed in, and `null` while\n * the sign-in provider is still resolving who is signed in.\n *\n * A lane belongs to one principal. When the principal changes under a mounted\n * chat (a provider signs a signed-out person in, or picks up another account),\n * the runtime remounts the conversation on the new principal's lane as a new\n * client: nothing the previous principal queued is sent as the new one, and\n * the previous principal's record stays for their next sign-in. While the\n * provider is still resolving who is signed in, the lane stays `pending`\n * (`null` here) rather than taking a stand-in key, which would make the first\n * sign-in a principal change and a second attach (see\n * `useAthenaStatewireRuntime`).\n */\nexport function statewireSessionPrincipal(\n auth: Pick<AthenaAuthState, 'isLoading' | 'user'> | null,\n): string | null {\n const userId = auth?.user?.userId;\n if (userId) return userId;\n return auth?.isLoading ? null : '';\n}\n"],"names":["sessionPrincipal"],"mappings":";;;AAIO,MAAM,8BAA8B;AAqBpC,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AACF,GAI0B;AACxB,SAAO;AAAA,IACL,WAAW,GAAG,OAAO;AAAA,IACrB,WAAW,YAAYA,8CAAiB,SAAS,IAAI;AAAA,IACrD,gBAAgB,GAAG,OAAO,IAAI,aAAa,MAAM;AAAA,EAAA;AAErD;AAmBO,SAAS,0BACd,MACe;;AACf,QAAM,UAAS,kCAAM,SAAN,mBAAY;AAC3B,MAAI,OAAQ,QAAO;AACnB,UAAO,6BAAM,aAAY,OAAO;AAClC;;;;"}
@@ -1,20 +1,32 @@
1
1
  import type { AthenaAuthState } from '../auth/types';
2
+ /** The statewire principal of API-key-only hosts (no sign-in provider above, or none signed in). */
3
+ export declare const ANONYMOUS_SESSION_PRINCIPAL = "anonymous";
4
+ /** Where a principal's persisted statewire command lanes are kept in localStorage. */
5
+ export interface StatewireSessionLanes {
6
+ /** The backend the lanes belong to: the sync host and `:`. */
7
+ namespace: string;
8
+ /** Statewire's principal: `user:<userId>`, or {@link ANONYMOUS_SESSION_PRINCIPAL}. */
9
+ principal: string;
10
+ /** Where statewire 0.24 kept them (`<syncUrl>:<userId or "anon">:`), moved on mount. */
11
+ unscopedPrefix: string;
12
+ }
2
13
  /**
3
- * Scope of the persisted statewire command lane: the sync host, the signed-in
4
- * principal, and the thread. A thread id is only meaningful against the
5
- * backend that minted it, and a shared browser must never resend one user's
6
- * un-settled commands under the next user's token — so the key carries WHO is
7
- * signed in as well as where. The principal is a non-secret user id;
8
- * API-key-only hosts (no auth provider above) share one anonymous scope.
14
+ * Scope of the persisted statewire command lanes: the sync host and the
15
+ * signed-in principal (a lane is stored at `<syncUrl>:<principal>:<threadId>`).
16
+ * A thread id is only meaningful against the backend that minted it, and a
17
+ * shared browser must never resend one user's un-settled commands under the
18
+ * next user's token, so the lane carries WHO is signed in as well as where.
19
+ * The principal is the signed-in user's id (`user:<userId>`); API-key-only
20
+ * hosts (no auth provider above) share one anonymous scope.
9
21
  */
10
- export declare function statewireSessionKey({ syncUrl, principal, threadId, }: {
22
+ export declare function statewireSessionLanes({ syncUrl, principal, }: {
11
23
  syncUrl: string;
24
+ /** {@link statewireSessionPrincipal}: the user id, or `''` for the anonymous scope. */
12
25
  principal: string;
13
- threadId: string;
14
- }): string;
26
+ }): StatewireSessionLanes;
15
27
  /**
16
28
  * The principal a thread's persisted command lane is scoped by
17
- * ({@link statewireSessionKey}): the signed-in user's id (also while the
29
+ * ({@link statewireSessionLanes}): the signed-in user's id (also while the
18
30
  * sign-in provider refreshes and still names them), `''` (the one anonymous
19
31
  * scope) with no sign-in provider above or none signed in, and `null` while
20
32
  * the sign-in provider is still resolving who is signed in.
@@ -1,9 +1,14 @@
1
- function statewireSessionKey({
1
+ import { sessionPrincipal } from "../agent-runtime/src/quota-safe-local-storage-session.js";
2
+ const ANONYMOUS_SESSION_PRINCIPAL = "anonymous";
3
+ function statewireSessionLanes({
2
4
  syncUrl,
3
- principal,
4
- threadId
5
+ principal
5
6
  }) {
6
- return `${syncUrl}:${principal || "anon"}:${threadId}`;
7
+ return {
8
+ namespace: `${syncUrl}:`,
9
+ principal: principal ? sessionPrincipal(principal) : ANONYMOUS_SESSION_PRINCIPAL,
10
+ unscopedPrefix: `${syncUrl}:${principal || "anon"}:`
11
+ };
7
12
  }
8
13
  function statewireSessionPrincipal(auth) {
9
14
  var _a;
@@ -12,7 +17,8 @@ function statewireSessionPrincipal(auth) {
12
17
  return (auth == null ? void 0 : auth.isLoading) ? null : "";
13
18
  }
14
19
  export {
15
- statewireSessionKey,
20
+ ANONYMOUS_SESSION_PRINCIPAL,
21
+ statewireSessionLanes,
16
22
  statewireSessionPrincipal
17
23
  };
18
24
  //# sourceMappingURL=statewire-session-key.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"statewire-session-key.js","sources":["../../src/runtime/statewire-session-key.ts"],"sourcesContent":["import type { AthenaAuthState } from '../auth/types';\n\n/**\n * Scope of the persisted statewire command lane: the sync host, the signed-in\n * principal, and the thread. A thread id is only meaningful against the\n * backend that minted it, and a shared browser must never resend one user's\n * un-settled commands under the next user's token — so the key carries WHO is\n * signed in as well as where. The principal is a non-secret user id;\n * API-key-only hosts (no auth provider above) share one anonymous scope.\n */\nexport function statewireSessionKey({\n syncUrl,\n principal,\n threadId,\n}: {\n syncUrl: string;\n principal: string;\n threadId: string;\n}): string {\n return `${syncUrl}:${principal || 'anon'}:${threadId}`;\n}\n\n/**\n * The principal a thread's persisted command lane is scoped by\n * ({@link statewireSessionKey}): the signed-in user's id (also while the\n * sign-in provider refreshes and still names them), `''` (the one anonymous\n * scope) with no sign-in provider above or none signed in, and `null` while\n * the sign-in provider is still resolving who is signed in.\n *\n * A lane belongs to one principal. When the principal changes under a mounted\n * chat (a provider signs a signed-out person in, or picks up another account),\n * the runtime remounts the conversation on the new principal's lane as a new\n * client: nothing the previous principal queued is sent as the new one, and\n * the previous principal's record stays for their next sign-in. While the\n * provider is still resolving who is signed in, the lane stays `pending`\n * (`null` here) rather than taking a stand-in key, which would make the first\n * sign-in a principal change and a second attach (see\n * `useAthenaStatewireRuntime`).\n */\nexport function statewireSessionPrincipal(\n auth: Pick<AthenaAuthState, 'isLoading' | 'user'> | null,\n): string | null {\n const userId = auth?.user?.userId;\n if (userId) return userId;\n return auth?.isLoading ? null : '';\n}\n"],"names":[],"mappings":"AAUO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAIW;AACT,SAAO,GAAG,OAAO,IAAI,aAAa,MAAM,IAAI,QAAQ;AACtD;AAmBO,SAAS,0BACd,MACe;AA/BV;AAgCL,QAAM,UAAS,kCAAM,SAAN,mBAAY;AAC3B,MAAI,OAAQ,QAAO;AACnB,UAAO,6BAAM,aAAY,OAAO;AAClC;"}
1
+ {"version":3,"file":"statewire-session-key.js","sources":["../../src/runtime/statewire-session-key.ts"],"sourcesContent":["import { sessionPrincipal } from '@athenaintel/agent-runtime';\nimport type { AthenaAuthState } from '../auth/types';\n\n/** The statewire principal of API-key-only hosts (no sign-in provider above, or none signed in). */\nexport const ANONYMOUS_SESSION_PRINCIPAL = 'anonymous';\n\n/** Where a principal's persisted statewire command lanes are kept in localStorage. */\nexport interface StatewireSessionLanes {\n /** The backend the lanes belong to: the sync host and `:`. */\n namespace: string;\n /** Statewire's principal: `user:<userId>`, or {@link ANONYMOUS_SESSION_PRINCIPAL}. */\n principal: string;\n /** Where statewire 0.24 kept them (`<syncUrl>:<userId or \"anon\">:`), moved on mount. */\n unscopedPrefix: string;\n}\n\n/**\n * Scope of the persisted statewire command lanes: the sync host and the\n * signed-in principal (a lane is stored at `<syncUrl>:<principal>:<threadId>`).\n * A thread id is only meaningful against the backend that minted it, and a\n * shared browser must never resend one user's un-settled commands under the\n * next user's token, so the lane carries WHO is signed in as well as where.\n * The principal is the signed-in user's id (`user:<userId>`); API-key-only\n * hosts (no auth provider above) share one anonymous scope.\n */\nexport function statewireSessionLanes({\n syncUrl,\n principal,\n}: {\n syncUrl: string;\n /** {@link statewireSessionPrincipal}: the user id, or `''` for the anonymous scope. */\n principal: string;\n}): StatewireSessionLanes {\n return {\n namespace: `${syncUrl}:`,\n principal: principal ? sessionPrincipal(principal) : ANONYMOUS_SESSION_PRINCIPAL,\n unscopedPrefix: `${syncUrl}:${principal || 'anon'}:`,\n };\n}\n\n/**\n * The principal a thread's persisted command lane is scoped by\n * ({@link statewireSessionLanes}): the signed-in user's id (also while the\n * sign-in provider refreshes and still names them), `''` (the one anonymous\n * scope) with no sign-in provider above or none signed in, and `null` while\n * the sign-in provider is still resolving who is signed in.\n *\n * A lane belongs to one principal. When the principal changes under a mounted\n * chat (a provider signs a signed-out person in, or picks up another account),\n * the runtime remounts the conversation on the new principal's lane as a new\n * client: nothing the previous principal queued is sent as the new one, and\n * the previous principal's record stays for their next sign-in. While the\n * provider is still resolving who is signed in, the lane stays `pending`\n * (`null` here) rather than taking a stand-in key, which would make the first\n * sign-in a principal change and a second attach (see\n * `useAthenaStatewireRuntime`).\n */\nexport function statewireSessionPrincipal(\n auth: Pick<AthenaAuthState, 'isLoading' | 'user'> | null,\n): string | null {\n const userId = auth?.user?.userId;\n if (userId) return userId;\n return auth?.isLoading ? null : '';\n}\n"],"names":[],"mappings":";AAIO,MAAM,8BAA8B;AAqBpC,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AACF,GAI0B;AACxB,SAAO;AAAA,IACL,WAAW,GAAG,OAAO;AAAA,IACrB,WAAW,YAAY,iBAAiB,SAAS,IAAI;AAAA,IACrD,gBAAgB,GAAG,OAAO,IAAI,aAAa,MAAM;AAAA,EAAA;AAErD;AAmBO,SAAS,0BACd,MACe;;AACf,QAAM,UAAS,kCAAM,SAAN,mBAAY;AAC3B,MAAI,OAAQ,QAAO;AACnB,UAAO,6BAAM,aAAY,OAAO;AAClC;"}