@beeuni/sdk 0.1.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 (938) hide show
  1. package/README.md +1234 -0
  2. package/dist/beeuni.esm.min.js +96 -0
  3. package/dist/beeuni.global.js +96 -0
  4. package/dist/browser/cache/idb-sync-cache.d.ts +12 -0
  5. package/dist/browser/cache/idb-sync-cache.js +88 -0
  6. package/dist/browser/session-sync/mirror-paging.d.ts +7 -0
  7. package/dist/browser/session-sync/mirror-paging.js +10 -0
  8. package/dist/browser/session-sync/server-transcript-mirror.d.ts +33 -0
  9. package/dist/browser/session-sync/server-transcript-mirror.js +112 -0
  10. package/dist/browser/session-sync/session-cache-ownership.d.ts +8 -0
  11. package/dist/browser/session-sync/session-cache-ownership.js +36 -0
  12. package/dist/browser/session-sync/session-sync-registry.d.ts +44 -0
  13. package/dist/browser/session-sync/session-sync-registry.js +253 -0
  14. package/dist/browser/session-sync/visibility.d.ts +6 -0
  15. package/dist/browser/session-sync/visibility.js +21 -0
  16. package/dist/browser/stores/diagnostics-store.d.ts +61 -0
  17. package/dist/browser/stores/diagnostics-store.js +216 -0
  18. package/dist/browser/stores/opencode-compaction-store.d.ts +7 -0
  19. package/dist/browser/stores/opencode-compaction-store.js +21 -0
  20. package/dist/browser/stores/opencode-pending-store.d.ts +19 -0
  21. package/dist/browser/stores/opencode-pending-store.js +65 -0
  22. package/dist/browser/stores/sandbox-connection-store.d.ts +35 -0
  23. package/dist/browser/stores/sandbox-connection-store.js +230 -0
  24. package/dist/browser/stores/server-store.d.ts +4 -0
  25. package/dist/browser/stores/server-store.js +7 -0
  26. package/dist/browser/stores/session-working-store.d.ts +21 -0
  27. package/dist/browser/stores/session-working-store.js +106 -0
  28. package/dist/browser/stores/sync-store/ascending-id.d.ts +1 -0
  29. package/dist/browser/stores/sync-store/ascending-id.js +17 -0
  30. package/dist/browser/stores/sync-store/binary.d.ts +6 -0
  31. package/dist/browser/stores/sync-store/binary.js +17 -0
  32. package/dist/browser/stores/sync-store/delta-event-window.d.ts +1 -0
  33. package/dist/browser/stores/sync-store/delta-event-window.js +1 -0
  34. package/dist/browser/stores/sync-store/reconcile-parts.d.ts +12 -0
  35. package/dist/browser/stores/sync-store/reconcile-parts.js +53 -0
  36. package/dist/browser/stores/sync-store/types.d.ts +20 -0
  37. package/dist/browser/stores/sync-store/types.js +1 -0
  38. package/dist/browser/stores/sync-store.d.ts +65 -0
  39. package/dist/browser/stores/sync-store.js +1336 -0
  40. package/dist/core/agents/composer-agents.d.ts +19 -0
  41. package/dist/core/agents/composer-agents.js +57 -0
  42. package/dist/core/attachments/limits.d.ts +3 -0
  43. package/dist/core/attachments/limits.js +3 -0
  44. package/dist/core/attachments/prompt-attachments.d.ts +37 -0
  45. package/dist/core/attachments/prompt-attachments.js +377 -0
  46. package/dist/core/auth/app-viewer.d.ts +43 -0
  47. package/dist/core/auth/app-viewer.js +104 -0
  48. package/dist/core/auth/beeuni-member.d.ts +31 -0
  49. package/dist/core/auth/beeuni-member.js +168 -0
  50. package/dist/core/auth/session.d.ts +24 -0
  51. package/dist/core/auth/session.js +145 -0
  52. package/dist/core/cache/persisted-query-cache.d.ts +55 -0
  53. package/dist/core/cache/persisted-query-cache.js +220 -0
  54. package/dist/core/client/beeuni.d.ts +1216 -0
  55. package/dist/core/client/beeuni.js +96 -0
  56. package/dist/core/client/binding-types.d.ts +1 -0
  57. package/dist/core/client/binding-types.js +1 -0
  58. package/dist/core/client/facade-accounts.d.ts +51 -0
  59. package/dist/core/client/facade-accounts.js +53 -0
  60. package/dist/core/client/facade-catalog.d.ts +54 -0
  61. package/dist/core/client/facade-catalog.js +53 -0
  62. package/dist/core/client/facade-commerce.d.ts +39 -0
  63. package/dist/core/client/facade-commerce.js +40 -0
  64. package/dist/core/client/facade-iam.d.ts +43 -0
  65. package/dist/core/client/facade-iam.js +45 -0
  66. package/dist/core/client/facade-identity.d.ts +103 -0
  67. package/dist/core/client/facade-identity.js +33 -0
  68. package/dist/core/client/facade-preview.d.ts +3 -0
  69. package/dist/core/client/facade-preview.js +30 -0
  70. package/dist/core/client/project-access-resources.d.ts +65 -0
  71. package/dist/core/client/project-access-resources.js +54 -0
  72. package/dist/core/client/project-access-security.d.ts +109 -0
  73. package/dist/core/client/project-access-security.js +33 -0
  74. package/dist/core/client/project-connections.d.ts +32 -0
  75. package/dist/core/client/project-connections.js +18 -0
  76. package/dist/core/client/project-connectors.d.ts +15 -0
  77. package/dist/core/client/project-connectors.js +34 -0
  78. package/dist/core/client/project-core.d.ts +74 -0
  79. package/dist/core/client/project-core.js +25 -0
  80. package/dist/core/client/project-membership.d.ts +62 -0
  81. package/dist/core/client/project-membership.js +24 -0
  82. package/dist/core/client/project-operations-admin.d.ts +125 -0
  83. package/dist/core/client/project-operations-admin.js +26 -0
  84. package/dist/core/client/project-operations-review.d.ts +35 -0
  85. package/dist/core/client/project-operations-review.js +24 -0
  86. package/dist/core/client/project-operations-workspace.d.ts +94 -0
  87. package/dist/core/client/project-operations-workspace.js +36 -0
  88. package/dist/core/client/project-operations.d.ts +237 -0
  89. package/dist/core/client/project-operations.js +41 -0
  90. package/dist/core/client/project-platform-resources.d.ts +34 -0
  91. package/dist/core/client/project-platform-resources.js +27 -0
  92. package/dist/core/client/project-platform-security.d.ts +76 -0
  93. package/dist/core/client/project-platform-security.js +31 -0
  94. package/dist/core/client/project-platform-settings.d.ts +53 -0
  95. package/dist/core/client/project-platform-settings.js +23 -0
  96. package/dist/core/client/session-actions-resources.d.ts +7 -0
  97. package/dist/core/client/session-actions-resources.js +13 -0
  98. package/dist/core/client/session-actions-security.d.ts +22 -0
  99. package/dist/core/client/session-actions-security.js +38 -0
  100. package/dist/core/client/session-actions-services.d.ts +39 -0
  101. package/dist/core/client/session-actions-services.js +34 -0
  102. package/dist/core/client/session-context.d.ts +21 -0
  103. package/dist/core/client/session-context.js +1 -0
  104. package/dist/core/client/session-defaults.d.ts +8 -0
  105. package/dist/core/client/session-defaults.js +35 -0
  106. package/dist/core/client/session-files.d.ts +20 -0
  107. package/dist/core/client/session-files.js +18 -0
  108. package/dist/core/client/session-handle.d.ts +207 -0
  109. package/dist/core/client/session-handle.js +53 -0
  110. package/dist/core/client/session-lifecycle-resources.d.ts +76 -0
  111. package/dist/core/client/session-lifecycle-resources.js +44 -0
  112. package/dist/core/client/session-lifecycle-security.d.ts +42 -0
  113. package/dist/core/client/session-lifecycle-security.js +31 -0
  114. package/dist/core/client/session-preview.d.ts +7 -0
  115. package/dist/core/client/session-preview.js +11 -0
  116. package/dist/core/client/session-readiness.d.ts +10 -0
  117. package/dist/core/client/session-readiness.js +54 -0
  118. package/dist/core/client/session-runtime.d.ts +21 -0
  119. package/dist/core/client/session-runtime.js +15 -0
  120. package/dist/core/client/session-shared.d.ts +20 -0
  121. package/dist/core/client/session-shared.js +22 -0
  122. package/dist/core/client/session-start.d.ts +2 -0
  123. package/dist/core/client/session-start.js +39 -0
  124. package/dist/core/files/client.d.ts +68 -0
  125. package/dist/core/files/client.js +491 -0
  126. package/dist/core/files/types.d.ts +75 -0
  127. package/dist/core/files/types.js +1 -0
  128. package/dist/core/http/abort-error.d.ts +5 -0
  129. package/dist/core/http/abort-error.js +74 -0
  130. package/dist/core/http/abort.d.ts +3 -0
  131. package/dist/core/http/abort.js +34 -0
  132. package/dist/core/http/api/errors.d.ts +68 -0
  133. package/dist/core/http/api/errors.js +132 -0
  134. package/dist/core/http/api-client.d.ts +44 -0
  135. package/dist/core/http/api-client.js +121 -0
  136. package/dist/core/http/auth.d.ts +12 -0
  137. package/dist/core/http/auth.js +37 -0
  138. package/dist/core/http/authenticated-request.d.ts +5 -0
  139. package/dist/core/http/authenticated-request.js +11 -0
  140. package/dist/core/http/config.d.ts +35 -0
  141. package/dist/core/http/config.js +23 -0
  142. package/dist/core/http/env.d.ts +1 -0
  143. package/dist/core/http/env.js +8 -0
  144. package/dist/core/http/feature-flags.d.ts +8 -0
  145. package/dist/core/http/feature-flags.js +41 -0
  146. package/dist/core/http/fresh-sessions.d.ts +3 -0
  147. package/dist/core/http/fresh-sessions.js +17 -0
  148. package/dist/core/http/impersonation.d.ts +14 -0
  149. package/dist/core/http/impersonation.js +110 -0
  150. package/dist/core/http/instance-routes.d.ts +16 -0
  151. package/dist/core/http/instance-routes.js +99 -0
  152. package/dist/core/http/logger.d.ts +10 -0
  153. package/dist/core/http/logger.js +29 -0
  154. package/dist/core/http/request.d.ts +2 -0
  155. package/dist/core/http/request.js +194 -0
  156. package/dist/core/http/response-error.d.ts +2 -0
  157. package/dist/core/http/response-error.js +92 -0
  158. package/dist/core/http/runtime-errors.d.ts +32 -0
  159. package/dist/core/http/runtime-errors.js +116 -0
  160. package/dist/core/http/session-stopped.d.ts +2 -0
  161. package/dist/core/http/session-stopped.js +16 -0
  162. package/dist/core/http/transport.d.ts +20 -0
  163. package/dist/core/http/transport.js +133 -0
  164. package/dist/core/models/bedrock-invokable.d.ts +3 -0
  165. package/dist/core/models/bedrock-invokable.js +22 -0
  166. package/dist/core/models/composer-model.d.ts +20 -0
  167. package/dist/core/models/composer-model.js +57 -0
  168. package/dist/core/models/model-flatten.d.ts +43 -0
  169. package/dist/core/models/model-flatten.js +73 -0
  170. package/dist/core/models/model-key.d.ts +8 -0
  171. package/dist/core/models/model-key.js +18 -0
  172. package/dist/core/models/model-lookup.d.ts +2 -0
  173. package/dist/core/models/model-lookup.js +3 -0
  174. package/dist/core/models/model-visibility.d.ts +28 -0
  175. package/dist/core/models/model-visibility.js +110 -0
  176. package/dist/core/models/provider-selection.d.ts +72 -0
  177. package/dist/core/models/provider-selection.js +307 -0
  178. package/dist/core/rest/platform-client/auth.d.ts +139 -0
  179. package/dist/core/rest/platform-client/auth.js +92 -0
  180. package/dist/core/rest/platform-client/backups.d.ts +18 -0
  181. package/dist/core/rest/platform-client/backups.js +12 -0
  182. package/dist/core/rest/platform-client/connector-setup.d.ts +35 -0
  183. package/dist/core/rest/platform-client/connector-setup.js +105 -0
  184. package/dist/core/rest/platform-client/github-app.d.ts +45 -0
  185. package/dist/core/rest/platform-client/github-app.js +54 -0
  186. package/dist/core/rest/platform-client/host-boundary.d.ts +140 -0
  187. package/dist/core/rest/platform-client/host-boundary.js +188 -0
  188. package/dist/core/rest/platform-client/index.d.ts +12 -0
  189. package/dist/core/rest/platform-client/index.js +12 -0
  190. package/dist/core/rest/platform-client/instance-admin.d.ts +53 -0
  191. package/dist/core/rest/platform-client/instance-admin.js +20 -0
  192. package/dist/core/rest/platform-client/invites.d.ts +31 -0
  193. package/dist/core/rest/platform-client/invites.js +11 -0
  194. package/dist/core/rest/platform-client/lifecycle.d.ts +27 -0
  195. package/dist/core/rest/platform-client/lifecycle.js +80 -0
  196. package/dist/core/rest/platform-client/members.d.ts +14 -0
  197. package/dist/core/rest/platform-client/members.js +28 -0
  198. package/dist/core/rest/platform-client/shared.d.ts +18 -0
  199. package/dist/core/rest/platform-client/shared.js +99 -0
  200. package/dist/core/rest/platform-client/ssh.d.ts +21 -0
  201. package/dist/core/rest/platform-client/ssh.js +6 -0
  202. package/dist/core/rest/platform-client/types.d.ts +47 -0
  203. package/dist/core/rest/platform-client/types.js +10 -0
  204. package/dist/core/rest/platform-client/updates.d.ts +77 -0
  205. package/dist/core/rest/platform-client/updates.js +54 -0
  206. package/dist/core/rest/platform-client/urls.d.ts +3 -0
  207. package/dist/core/rest/platform-client/urls.js +16 -0
  208. package/dist/core/rest/projects-client/access.d.ts +226 -0
  209. package/dist/core/rest/projects-client/access.js +82 -0
  210. package/dist/core/rest/projects-client/account-lifecycle.d.ts +21 -0
  211. package/dist/core/rest/projects-client/account-lifecycle.js +25 -0
  212. package/dist/core/rest/projects-client/account-secret-resources.d.ts +60 -0
  213. package/dist/core/rest/projects-client/account-secret-resources.js +40 -0
  214. package/dist/core/rest/projects-client/accounts.d.ts +240 -0
  215. package/dist/core/rest/projects-client/accounts.js +82 -0
  216. package/dist/core/rest/projects-client/admin-providers.d.ts +131 -0
  217. package/dist/core/rest/projects-client/admin-providers.js +39 -0
  218. package/dist/core/rest/projects-client/agent-config.d.ts +72 -0
  219. package/dist/core/rest/projects-client/agent-config.js +39 -0
  220. package/dist/core/rest/projects-client/agent-connectors.d.ts +6 -0
  221. package/dist/core/rest/projects-client/agent-connectors.js +32 -0
  222. package/dist/core/rest/projects-client/agent-scope.d.ts +13 -0
  223. package/dist/core/rest/projects-client/agent-scope.js +7 -0
  224. package/dist/core/rest/projects-client/apps-fleet.d.ts +82 -0
  225. package/dist/core/rest/projects-client/apps-fleet.js +45 -0
  226. package/dist/core/rest/projects-client/apps.d.ts +356 -0
  227. package/dist/core/rest/projects-client/apps.js +126 -0
  228. package/dist/core/rest/projects-client/assignments.d.ts +73 -0
  229. package/dist/core/rest/projects-client/assignments.js +45 -0
  230. package/dist/core/rest/projects-client/audit-filter.d.ts +4 -0
  231. package/dist/core/rest/projects-client/audit-filter.js +9 -0
  232. package/dist/core/rest/projects-client/audit.d.ts +125 -0
  233. package/dist/core/rest/projects-client/audit.js +49 -0
  234. package/dist/core/rest/projects-client/billing.d.ts +390 -0
  235. package/dist/core/rest/projects-client/billing.js +257 -0
  236. package/dist/core/rest/projects-client/change-requests.d.ts +116 -0
  237. package/dist/core/rest/projects-client/change-requests.js +50 -0
  238. package/dist/core/rest/projects-client/channels.d.ts +131 -0
  239. package/dist/core/rest/projects-client/channels.js +112 -0
  240. package/dist/core/rest/projects-client/connector-run.d.ts +62 -0
  241. package/dist/core/rest/projects-client/connector-run.js +155 -0
  242. package/dist/core/rest/projects-client/connectors.d.ts +721 -0
  243. package/dist/core/rest/projects-client/connectors.js +421 -0
  244. package/dist/core/rest/projects-client/drives.d.ts +149 -0
  245. package/dist/core/rest/projects-client/drives.js +88 -0
  246. package/dist/core/rest/projects-client/files.d.ts +45 -0
  247. package/dist/core/rest/projects-client/files.js +69 -0
  248. package/dist/core/rest/projects-client/gateway.d.ts +257 -0
  249. package/dist/core/rest/projects-client/gateway.js +72 -0
  250. package/dist/core/rest/projects-client/git-backend.d.ts +15 -0
  251. package/dist/core/rest/projects-client/git-backend.js +15 -0
  252. package/dist/core/rest/projects-client/git-history.d.ts +78 -0
  253. package/dist/core/rest/projects-client/git-history.js +47 -0
  254. package/dist/core/rest/projects-client/github.d.ts +128 -0
  255. package/dist/core/rest/projects-client/github.js +54 -0
  256. package/dist/core/rest/projects-client/iam-audit.d.ts +81 -0
  257. package/dist/core/rest/projects-client/iam-audit.js +21 -0
  258. package/dist/core/rest/projects-client/iam-enterprise.d.ts +2 -0
  259. package/dist/core/rest/projects-client/iam-enterprise.js +11 -0
  260. package/dist/core/rest/projects-client/iam-grants.d.ts +21 -0
  261. package/dist/core/rest/projects-client/iam-grants.js +6 -0
  262. package/dist/core/rest/projects-client/iam-groups.d.ts +65 -0
  263. package/dist/core/rest/projects-client/iam-groups.js +42 -0
  264. package/dist/core/rest/projects-client/iam-policies.d.ts +53 -0
  265. package/dist/core/rest/projects-client/iam-policies.js +26 -0
  266. package/dist/core/rest/projects-client/iam-probe.d.ts +27 -0
  267. package/dist/core/rest/projects-client/iam-probe.js +16 -0
  268. package/dist/core/rest/projects-client/iam-query.d.ts +1 -0
  269. package/dist/core/rest/projects-client/iam-query.js +9 -0
  270. package/dist/core/rest/projects-client/iam-roles.d.ts +47 -0
  271. package/dist/core/rest/projects-client/iam-roles.js +43 -0
  272. package/dist/core/rest/projects-client/iam-scim.d.ts +22 -0
  273. package/dist/core/rest/projects-client/iam-scim.js +14 -0
  274. package/dist/core/rest/projects-client/iam-security.d.ts +28 -0
  275. package/dist/core/rest/projects-client/iam-security.js +17 -0
  276. package/dist/core/rest/projects-client/iam-service-accounts.d.ts +26 -0
  277. package/dist/core/rest/projects-client/iam-service-accounts.js +14 -0
  278. package/dist/core/rest/projects-client/iam-sessions.d.ts +27 -0
  279. package/dist/core/rest/projects-client/iam-sessions.js +25 -0
  280. package/dist/core/rest/projects-client/iam-shared.d.ts +6 -0
  281. package/dist/core/rest/projects-client/iam-shared.js +8 -0
  282. package/dist/core/rest/projects-client/iam-sso.d.ts +60 -0
  283. package/dist/core/rest/projects-client/iam-sso.js +28 -0
  284. package/dist/core/rest/projects-client/iam-types.d.ts +52 -0
  285. package/dist/core/rest/projects-client/iam-types.js +1 -0
  286. package/dist/core/rest/projects-client/iam.d.ts +13 -0
  287. package/dist/core/rest/projects-client/iam.js +13 -0
  288. package/dist/core/rest/projects-client/index.d.ts +55 -0
  289. package/dist/core/rest/projects-client/index.js +54 -0
  290. package/dist/core/rest/projects-client/marketplace-catalog.d.ts +74 -0
  291. package/dist/core/rest/projects-client/marketplace-catalog.js +41 -0
  292. package/dist/core/rest/projects-client/model-access.d.ts +13 -0
  293. package/dist/core/rest/projects-client/model-access.js +8 -0
  294. package/dist/core/rest/projects-client/model-defaults.d.ts +28 -0
  295. package/dist/core/rest/projects-client/model-defaults.js +15 -0
  296. package/dist/core/rest/projects-client/model-enablement.d.ts +4 -0
  297. package/dist/core/rest/projects-client/model-enablement.js +5 -0
  298. package/dist/core/rest/projects-client/notifications.d.ts +95 -0
  299. package/dist/core/rest/projects-client/notifications.js +61 -0
  300. package/dist/core/rest/projects-client/oauth-clients.d.ts +41 -0
  301. package/dist/core/rest/projects-client/oauth-clients.js +24 -0
  302. package/dist/core/rest/projects-client/policies.d.ts +26 -0
  303. package/dist/core/rest/projects-client/policies.js +8 -0
  304. package/dist/core/rest/projects-client/presentations.d.ts +11 -0
  305. package/dist/core/rest/projects-client/presentations.js +8 -0
  306. package/dist/core/rest/projects-client/project-agents.d.ts +10 -0
  307. package/dist/core/rest/projects-client/project-agents.js +22 -0
  308. package/dist/core/rest/projects-client/projects.d.ts +376 -0
  309. package/dist/core/rest/projects-client/projects.js +237 -0
  310. package/dist/core/rest/projects-client/prompt-attachments.d.ts +31 -0
  311. package/dist/core/rest/projects-client/prompt-attachments.js +294 -0
  312. package/dist/core/rest/projects-client/provider-connections.d.ts +54 -0
  313. package/dist/core/rest/projects-client/provider-connections.js +28 -0
  314. package/dist/core/rest/projects-client/public-session-shares.d.ts +49 -0
  315. package/dist/core/rest/projects-client/public-session-shares.js +35 -0
  316. package/dist/core/rest/projects-client/referrals.d.ts +52 -0
  317. package/dist/core/rest/projects-client/referrals.js +19 -0
  318. package/dist/core/rest/projects-client/review-items.d.ts +139 -0
  319. package/dist/core/rest/projects-client/review-items.js +217 -0
  320. package/dist/core/rest/projects-client/review.d.ts +56 -0
  321. package/dist/core/rest/projects-client/review.js +23 -0
  322. package/dist/core/rest/projects-client/sandbox-shares.d.ts +21 -0
  323. package/dist/core/rest/projects-client/sandbox-shares.js +19 -0
  324. package/dist/core/rest/projects-client/sandbox.d.ts +144 -0
  325. package/dist/core/rest/projects-client/sandbox.js +35 -0
  326. package/dist/core/rest/projects-client/secrets.d.ts +187 -0
  327. package/dist/core/rest/projects-client/secrets.js +79 -0
  328. package/dist/core/rest/projects-client/session-attachments.d.ts +22 -0
  329. package/dist/core/rest/projects-client/session-attachments.js +166 -0
  330. package/dist/core/rest/projects-client/session-costs.d.ts +193 -0
  331. package/dist/core/rest/projects-client/session-costs.js +87 -0
  332. package/dist/core/rest/projects-client/session-prompt-actions.d.ts +10 -0
  333. package/dist/core/rest/projects-client/session-prompt-actions.js +4 -0
  334. package/dist/core/rest/projects-client/session-reminders.d.ts +58 -0
  335. package/dist/core/rest/projects-client/session-reminders.js +50 -0
  336. package/dist/core/rest/projects-client/session-sandbox.d.ts +85 -0
  337. package/dist/core/rest/projects-client/session-sandbox.js +113 -0
  338. package/dist/core/rest/projects-client/sessions.d.ts +670 -0
  339. package/dist/core/rest/projects-client/sessions.js +321 -0
  340. package/dist/core/rest/projects-client/setup-links.d.ts +54 -0
  341. package/dist/core/rest/projects-client/setup-links.js +22 -0
  342. package/dist/core/rest/projects-client/shared.d.ts +51 -0
  343. package/dist/core/rest/projects-client/shared.js +29 -0
  344. package/dist/core/rest/projects-client/skills.d.ts +11 -0
  345. package/dist/core/rest/projects-client/skills.js +8 -0
  346. package/dist/core/rest/projects-client/starter-suggestions.d.ts +17 -0
  347. package/dist/core/rest/projects-client/starter-suggestions.js +5 -0
  348. package/dist/core/rest/projects-client/templates.d.ts +47 -0
  349. package/dist/core/rest/projects-client/templates.js +7 -0
  350. package/dist/core/rest/projects-client/tokens.d.ts +94 -0
  351. package/dist/core/rest/projects-client/tokens.js +46 -0
  352. package/dist/core/rest/projects-client/triggers.d.ts +175 -0
  353. package/dist/core/rest/projects-client/triggers.js +29 -0
  354. package/dist/core/runtime/attachment-part.d.ts +3 -0
  355. package/dist/core/runtime/attachment-part.js +18 -0
  356. package/dist/core/runtime/beeuni-master.d.ts +477 -0
  357. package/dist/core/runtime/beeuni-master.js +264 -0
  358. package/dist/core/runtime/client.d.ts +30 -0
  359. package/dist/core/runtime/client.js +124 -0
  360. package/dist/core/runtime/env.d.ts +8 -0
  361. package/dist/core/runtime/env.js +42 -0
  362. package/dist/core/runtime/pty.d.ts +43 -0
  363. package/dist/core/runtime/pty.js +117 -0
  364. package/dist/core/runtime/runtime-rest-client.d.ts +414 -0
  365. package/dist/core/runtime/runtime-rest-client.js +296 -0
  366. package/dist/core/runtime/runtime-types.d.ts +1094 -0
  367. package/dist/core/runtime/runtime-types.js +1 -0
  368. package/dist/core/runtime/transcript-types.d.ts +507 -0
  369. package/dist/core/runtime/transcript-types.js +31 -0
  370. package/dist/core/runtime/triggers.d.ts +1 -0
  371. package/dist/core/runtime/triggers.js +18 -0
  372. package/dist/core/session/compaction.d.ts +10 -0
  373. package/dist/core/session/compaction.js +22 -0
  374. package/dist/core/session/connection.d.ts +20 -0
  375. package/dist/core/session/connection.js +52 -0
  376. package/dist/core/session/control-stream.d.ts +62 -0
  377. package/dist/core/session/control-stream.js +329 -0
  378. package/dist/core/session/current-runtime.d.ts +14 -0
  379. package/dist/core/session/current-runtime.js +34 -0
  380. package/dist/core/session/health.d.ts +41 -0
  381. package/dist/core/session/health.js +53 -0
  382. package/dist/core/session/host-signals.d.ts +3 -0
  383. package/dist/core/session/host-signals.js +16 -0
  384. package/dist/core/session/index.d.ts +15 -0
  385. package/dist/core/session/index.js +14 -0
  386. package/dist/core/session/message-queue.d.ts +43 -0
  387. package/dist/core/session/message-queue.js +101 -0
  388. package/dist/core/session/open-bundle.d.ts +24 -0
  389. package/dist/core/session/open-bundle.js +135 -0
  390. package/dist/core/session/poll-owner.d.ts +5 -0
  391. package/dist/core/session/poll-owner.js +58 -0
  392. package/dist/core/session/presentation.d.ts +11 -0
  393. package/dist/core/session/presentation.js +70 -0
  394. package/dist/core/session/preview-auth.d.ts +6 -0
  395. package/dist/core/session/preview-auth.js +36 -0
  396. package/dist/core/session/preview-config.d.ts +5 -0
  397. package/dist/core/session/preview-config.js +54 -0
  398. package/dist/core/session/preview-options.d.ts +9 -0
  399. package/dist/core/session/preview-options.js +12 -0
  400. package/dist/core/session/preview-origin-trust.d.ts +7 -0
  401. package/dist/core/session/preview-origin-trust.js +64 -0
  402. package/dist/core/session/preview-probe.d.ts +7 -0
  403. package/dist/core/session/preview-probe.js +36 -0
  404. package/dist/core/session/preview.d.ts +3 -0
  405. package/dist/core/session/preview.js +66 -0
  406. package/dist/core/session/project-session-read.d.ts +5 -0
  407. package/dist/core/session/project-session-read.js +12 -0
  408. package/dist/core/session/rewind.d.ts +29 -0
  409. package/dist/core/session/rewind.js +53 -0
  410. package/dist/core/session/runtime-gone.d.ts +5 -0
  411. package/dist/core/session/runtime-gone.js +14 -0
  412. package/dist/core/session/runtime-sessions.d.ts +7 -0
  413. package/dist/core/session/runtime-sessions.js +26 -0
  414. package/dist/core/session/runtime-verbs.d.ts +34 -0
  415. package/dist/core/session/runtime-verbs.js +94 -0
  416. package/dist/core/session/server-store/active.d.ts +7 -0
  417. package/dist/core/session/server-store/active.js +35 -0
  418. package/dist/core/session/server-store/types.d.ts +4 -0
  419. package/dist/core/session/server-store/types.js +1 -0
  420. package/dist/core/session/server-store/url-helpers.d.ts +5 -0
  421. package/dist/core/session/server-store/url-helpers.js +25 -0
  422. package/dist/core/session/session-runtime-registry.d.ts +9 -0
  423. package/dist/core/session/session-runtime-registry.js +28 -0
  424. package/dist/core/session/single-flight.d.ts +3 -0
  425. package/dist/core/session/single-flight.js +22 -0
  426. package/dist/core/session/static-file-preview.d.ts +10 -0
  427. package/dist/core/session/static-file-preview.js +34 -0
  428. package/dist/core/session/status-vocabulary.d.ts +23 -0
  429. package/dist/core/session/status-vocabulary.js +59 -0
  430. package/dist/core/session/turn-end-cause.d.ts +22 -0
  431. package/dist/core/session/turn-end-cause.js +41 -0
  432. package/dist/core/session/turn-end-settle.d.ts +1 -0
  433. package/dist/core/session/turn-end-settle.js +1 -0
  434. package/dist/core/session/url.d.ts +49 -0
  435. package/dist/core/session/url.js +415 -0
  436. package/dist/core/session/wake-escalation.d.ts +37 -0
  437. package/dist/core/session/wake-escalation.js +104 -0
  438. package/dist/core/session/wire-id-unwrap.d.ts +2 -0
  439. package/dist/core/session/wire-id-unwrap.js +15 -0
  440. package/dist/core/session/wire-message-id.d.ts +27 -0
  441. package/dist/core/session/wire-message-id.js +88 -0
  442. package/dist/core/session/working-evidence.d.ts +13 -0
  443. package/dist/core/session/working-evidence.js +25 -0
  444. package/dist/core/session/working-project.d.ts +2 -0
  445. package/dist/core/session/working-project.js +145 -0
  446. package/dist/core/session/working-runtime.d.ts +3 -0
  447. package/dist/core/session/working-runtime.js +16 -0
  448. package/dist/core/session/working-server.d.ts +20 -0
  449. package/dist/core/session/working-server.js +57 -0
  450. package/dist/core/session/working-time.d.ts +1 -0
  451. package/dist/core/session/working-time.js +6 -0
  452. package/dist/core/session/working.d.ts +58 -0
  453. package/dist/core/session/working.js +48 -0
  454. package/dist/core/session-sync/fragment.d.ts +4 -0
  455. package/dist/core/session-sync/fragment.js +3 -0
  456. package/dist/core/session-sync/saved-copy-store.d.ts +23 -0
  457. package/dist/core/session-sync/saved-copy-store.js +232 -0
  458. package/dist/core/session-sync/saved-transcript.d.ts +20 -0
  459. package/dist/core/session-sync/saved-transcript.js +35 -0
  460. package/dist/core/session-sync/session-sync-controller.d.ts +111 -0
  461. package/dist/core/session-sync/session-sync-controller.js +440 -0
  462. package/dist/core/stream/chat-events.d.ts +96 -0
  463. package/dist/core/stream/chat-events.js +95 -0
  464. package/dist/core/stream/event-stream.d.ts +52 -0
  465. package/dist/core/stream/event-stream.js +372 -0
  466. package/dist/core/stream/fetch-sse.d.ts +20 -0
  467. package/dist/core/stream/fetch-sse.js +136 -0
  468. package/dist/core/stream/keepalive.d.ts +4 -0
  469. package/dist/core/stream/keepalive.js +6 -0
  470. package/dist/core/stream/platform-event-transport.d.ts +2 -0
  471. package/dist/core/stream/platform-event-transport.js +20 -0
  472. package/dist/core/turns/classify.d.ts +131 -0
  473. package/dist/core/turns/classify.js +306 -0
  474. package/dist/core/turns/errors.d.ts +24 -0
  475. package/dist/core/turns/errors.js +355 -0
  476. package/dist/core/turns/grouping.d.ts +47 -0
  477. package/dist/core/turns/grouping.js +247 -0
  478. package/dist/core/turns/index.d.ts +13 -0
  479. package/dist/core/turns/index.js +12 -0
  480. package/dist/core/turns/open-turn.d.ts +13 -0
  481. package/dist/core/turns/open-turn.js +17 -0
  482. package/dist/core/turns/parts.d.ts +60 -0
  483. package/dist/core/turns/parts.js +414 -0
  484. package/dist/core/turns/segments/burst-summary.d.ts +9 -0
  485. package/dist/core/turns/segments/burst-summary.js +45 -0
  486. package/dist/core/turns/segments/compaction-state.d.ts +19 -0
  487. package/dist/core/turns/segments/compaction-state.js +42 -0
  488. package/dist/core/turns/segments/group-steps.d.ts +11 -0
  489. package/dist/core/turns/segments/group-steps.js +65 -0
  490. package/dist/core/turns/segments/index.d.ts +12 -0
  491. package/dist/core/turns/segments/index.js +12 -0
  492. package/dist/core/turns/segments/merge-steps.d.ts +21 -0
  493. package/dist/core/turns/segments/merge-steps.js +100 -0
  494. package/dist/core/turns/segments/message-time.d.ts +12 -0
  495. package/dist/core/turns/segments/message-time.js +82 -0
  496. package/dist/core/turns/segments/narration.d.ts +9 -0
  497. package/dist/core/turns/segments/narration.js +573 -0
  498. package/dist/core/turns/segments/segment-turn.d.ts +15 -0
  499. package/dist/core/turns/segments/segment-turn.js +32 -0
  500. package/dist/core/turns/segments/session-activity-groups.d.ts +20 -0
  501. package/dist/core/turns/segments/session-activity-groups.js +56 -0
  502. package/dist/core/turns/segments/show-group.d.ts +23 -0
  503. package/dist/core/turns/segments/show-group.js +101 -0
  504. package/dist/core/turns/segments/step-label.d.ts +10 -0
  505. package/dist/core/turns/segments/step-label.js +85 -0
  506. package/dist/core/turns/segments/turn-busy-visibility.d.ts +6 -0
  507. package/dist/core/turns/segments/turn-busy-visibility.js +9 -0
  508. package/dist/core/turns/segments/working-turn.d.ts +70 -0
  509. package/dist/core/turns/segments/working-turn.js +98 -0
  510. package/dist/core/turns/shell.d.ts +5 -0
  511. package/dist/core/turns/shell.js +21 -0
  512. package/dist/core/turns/state.d.ts +24 -0
  513. package/dist/core/turns/state.js +364 -0
  514. package/dist/core/turns/text-scan.d.ts +21 -0
  515. package/dist/core/turns/text-scan.js +347 -0
  516. package/dist/core/turns/tool-kind.d.ts +3 -0
  517. package/dist/core/turns/tool-kind.js +99 -0
  518. package/dist/core/turns/tool-registry.d.ts +8 -0
  519. package/dist/core/turns/tool-registry.js +87 -0
  520. package/dist/core/turns/tools/agent-helpers.d.ts +9 -0
  521. package/dist/core/turns/tools/agent-helpers.js +53 -0
  522. package/dist/core/turns/tools/file-verb.d.ts +10 -0
  523. package/dist/core/turns/tools/file-verb.js +22 -0
  524. package/dist/core/turns/tools/index.d.ts +14 -0
  525. package/dist/core/turns/tools/index.js +14 -0
  526. package/dist/core/turns/tools/memory-helpers.d.ts +15 -0
  527. package/dist/core/turns/tools/memory-helpers.js +50 -0
  528. package/dist/core/turns/tools/patch-summary.d.ts +6 -0
  529. package/dist/core/turns/tools/patch-summary.js +21 -0
  530. package/dist/core/turns/tools/presentation-helpers.d.ts +15 -0
  531. package/dist/core/turns/tools/presentation-helpers.js +17 -0
  532. package/dist/core/turns/tools/question-helpers.d.ts +9 -0
  533. package/dist/core/turns/tools/question-helpers.js +12 -0
  534. package/dist/core/turns/tools/read-helpers.d.ts +7 -0
  535. package/dist/core/turns/tools/read-helpers.js +24 -0
  536. package/dist/core/turns/tools/search-query.d.ts +1 -0
  537. package/dist/core/turns/tools/search-query.js +73 -0
  538. package/dist/core/turns/tools/show-availability.d.ts +11 -0
  539. package/dist/core/turns/tools/show-availability.js +38 -0
  540. package/dist/core/turns/tools/skill-helpers.d.ts +5 -0
  541. package/dist/core/turns/tools/skill-helpers.js +61 -0
  542. package/dist/core/turns/tools/tool-meta.d.ts +30 -0
  543. package/dist/core/turns/tools/tool-meta.js +146 -0
  544. package/dist/core/turns/tools/tool-outcome.d.ts +15 -0
  545. package/dist/core/turns/tools/tool-outcome.js +147 -0
  546. package/dist/core/turns/tools/tool-output-format.d.ts +17 -0
  547. package/dist/core/turns/tools/tool-output-format.js +124 -0
  548. package/dist/core/turns/tools/web-helpers.d.ts +34 -0
  549. package/dist/core/turns/tools/web-helpers.js +229 -0
  550. package/dist/core/turns/types.d.ts +110 -0
  551. package/dist/core/turns/types.js +1 -0
  552. package/dist/core/turns/view-model.d.ts +76 -0
  553. package/dist/core/turns/view-model.js +300 -0
  554. package/dist/deprecated/api-client.d.ts +1 -0
  555. package/dist/deprecated/api-client.js +1 -0
  556. package/dist/deprecated/auth.d.ts +1 -0
  557. package/dist/deprecated/auth.js +1 -0
  558. package/dist/deprecated/config.d.ts +1 -0
  559. package/dist/deprecated/config.js +1 -0
  560. package/dist/deprecated/event-stream.d.ts +1 -0
  561. package/dist/deprecated/event-stream.js +1 -0
  562. package/dist/deprecated/feature-flags.d.ts +1 -0
  563. package/dist/deprecated/feature-flags.js +1 -0
  564. package/dist/deprecated/files.d.ts +1 -0
  565. package/dist/deprecated/files.js +1 -0
  566. package/dist/deprecated/fresh-sessions.d.ts +1 -0
  567. package/dist/deprecated/fresh-sessions.js +1 -0
  568. package/dist/deprecated/idb-sync-cache.d.ts +1 -0
  569. package/dist/deprecated/idb-sync-cache.js +1 -0
  570. package/dist/deprecated/instance-routes.d.ts +1 -0
  571. package/dist/deprecated/instance-routes.js +1 -0
  572. package/dist/deprecated/opencode-client.d.ts +1 -0
  573. package/dist/deprecated/opencode-client.js +1 -0
  574. package/dist/deprecated/opencode-errors.d.ts +1 -0
  575. package/dist/deprecated/opencode-errors.js +1 -0
  576. package/dist/deprecated/opencode-pending-store.d.ts +1 -0
  577. package/dist/deprecated/opencode-pending-store.js +1 -0
  578. package/dist/deprecated/platform-client.d.ts +1 -0
  579. package/dist/deprecated/platform-client.js +1 -0
  580. package/dist/deprecated/projects-client.d.ts +1 -0
  581. package/dist/deprecated/projects-client.js +1 -0
  582. package/dist/deprecated/sandbox-connection-store.d.ts +1 -0
  583. package/dist/deprecated/sandbox-connection-store.js +1 -0
  584. package/dist/deprecated/server-store.d.ts +1 -0
  585. package/dist/deprecated/server-store.js +1 -0
  586. package/dist/deprecated/session-url.d.ts +1 -0
  587. package/dist/deprecated/session-url.js +1 -0
  588. package/dist/deprecated/session.d.ts +1 -0
  589. package/dist/deprecated/session.js +1 -0
  590. package/dist/deprecated/sync-store.d.ts +1 -0
  591. package/dist/deprecated/sync-store.js +1 -0
  592. package/dist/deprecated/turns.d.ts +1 -0
  593. package/dist/deprecated/turns.js +1 -0
  594. package/dist/index.d.ts +61 -0
  595. package/dist/index.js +53 -0
  596. package/dist/internal/diagnostics-store.d.ts +1 -0
  597. package/dist/internal/diagnostics-store.js +1 -0
  598. package/dist/internal/idb-sync-cache.d.ts +1 -0
  599. package/dist/internal/idb-sync-cache.js +1 -0
  600. package/dist/internal/managed-storage.d.ts +1 -0
  601. package/dist/internal/managed-storage.js +1 -0
  602. package/dist/internal/opencode-pending-store.d.ts +1 -0
  603. package/dist/internal/opencode-pending-store.js +1 -0
  604. package/dist/internal/sandbox-connection-store.d.ts +1 -0
  605. package/dist/internal/sandbox-connection-store.js +1 -0
  606. package/dist/internal/server-store.d.ts +1 -0
  607. package/dist/internal/server-store.js +1 -0
  608. package/dist/internal/sync-store.d.ts +1 -0
  609. package/dist/internal/sync-store.js +1 -0
  610. package/dist/node/app-guard.d.ts +36 -0
  611. package/dist/node/app-guard.js +118 -0
  612. package/dist/node/app-viewer.d.ts +30 -0
  613. package/dist/node/app-viewer.js +113 -0
  614. package/dist/node/auth.d.ts +52 -0
  615. package/dist/node/auth.js +387 -0
  616. package/dist/node/scoped-client.d.ts +9 -0
  617. package/dist/node/scoped-client.js +106 -0
  618. package/dist/node/server.d.ts +8 -0
  619. package/dist/node/server.js +5 -0
  620. package/dist/platform/auth-core.d.ts +10 -0
  621. package/dist/platform/auth-core.js +44 -0
  622. package/dist/platform/config-node.d.ts +4 -0
  623. package/dist/platform/config-node.js +13 -0
  624. package/dist/platform/session-id.d.ts +1 -0
  625. package/dist/platform/session-id.js +15 -0
  626. package/dist/platform/storage/managed-storage.d.ts +25 -0
  627. package/dist/platform/storage/managed-storage.js +215 -0
  628. package/dist/platform/strings.d.ts +1 -0
  629. package/dist/platform/strings.js +6 -0
  630. package/dist/platform/ui.d.ts +5 -0
  631. package/dist/platform/ui.js +16 -0
  632. package/dist/react/agent-selection-scope.d.ts +7 -0
  633. package/dist/react/agent-selection-scope.js +3 -0
  634. package/dist/react/bedrock-invokable.d.ts +1 -0
  635. package/dist/react/bedrock-invokable.js +1 -0
  636. package/dist/react/chat/index.d.ts +2 -0
  637. package/dist/react/chat/index.js +3 -0
  638. package/dist/react/chat/render-parts.d.ts +11 -0
  639. package/dist/react/chat/render-parts.js +10 -0
  640. package/dist/react/chat/use-chat-turns.d.ts +9 -0
  641. package/dist/react/chat/use-chat-turns.js +9 -0
  642. package/dist/react/connector-setup.d.ts +21 -0
  643. package/dist/react/connector-setup.js +130 -0
  644. package/dist/react/file-keys.d.ts +16 -0
  645. package/dist/react/file-keys.js +16 -0
  646. package/dist/react/hold-live-start.d.ts +3 -0
  647. package/dist/react/hold-live-start.js +27 -0
  648. package/dist/react/human-presence.d.ts +15 -0
  649. package/dist/react/human-presence.js +62 -0
  650. package/dist/react/identity-reset-registry.d.ts +2 -0
  651. package/dist/react/identity-reset-registry.js +14 -0
  652. package/dist/react/index.d.ts +62 -0
  653. package/dist/react/index.js +63 -0
  654. package/dist/react/initial-session-pin.d.ts +14 -0
  655. package/dist/react/initial-session-pin.js +28 -0
  656. package/dist/react/invalidate-project.d.ts +22 -0
  657. package/dist/react/invalidate-project.js +26 -0
  658. package/dist/react/model-flatten.d.ts +1 -0
  659. package/dist/react/model-flatten.js +1 -0
  660. package/dist/react/opencode.d.ts +43 -0
  661. package/dist/react/opencode.js +43 -0
  662. package/dist/react/prefetch-session-open.d.ts +5 -0
  663. package/dist/react/prefetch-session-open.js +48 -0
  664. package/dist/react/prefetch-session-start.d.ts +2 -0
  665. package/dist/react/prefetch-session-start.js +9 -0
  666. package/dist/react/provider-refresh.d.ts +9 -0
  667. package/dist/react/provider-refresh.js +72 -0
  668. package/dist/react/provider-selection.d.ts +1 -0
  669. package/dist/react/provider-selection.js +1 -0
  670. package/dist/react/pty-query-state.d.ts +2 -0
  671. package/dist/react/pty-query-state.js +6 -0
  672. package/dist/react/query-contracts.d.ts +49 -0
  673. package/dist/react/query-contracts.js +63 -0
  674. package/dist/react/query-keys.d.ts +105 -0
  675. package/dist/react/query-keys.js +115 -0
  676. package/dist/react/reset-identity-state.d.ts +2 -0
  677. package/dist/react/reset-identity-state.js +19 -0
  678. package/dist/react/retired-endpoint.d.ts +3 -0
  679. package/dist/react/retired-endpoint.js +15 -0
  680. package/dist/react/route-project.d.ts +6 -0
  681. package/dist/react/route-project.js +9 -0
  682. package/dist/react/run-pty-command.d.ts +4 -0
  683. package/dist/react/run-pty-command.js +41 -0
  684. package/dist/react/runtime-actions.d.ts +31 -0
  685. package/dist/react/runtime-actions.js +87 -0
  686. package/dist/react/self-heal-poll-gate.d.ts +8 -0
  687. package/dist/react/self-heal-poll-gate.js +5 -0
  688. package/dist/react/session-agent-name-guard.d.ts +1 -0
  689. package/dist/react/session-agent-name-guard.js +5 -0
  690. package/dist/react/session-cache-write.d.ts +8 -0
  691. package/dist/react/session-cache-write.js +116 -0
  692. package/dist/react/session-start-giveup.d.ts +4 -0
  693. package/dist/react/session-start-giveup.js +5 -0
  694. package/dist/react/session-start-stash.d.ts +17 -0
  695. package/dist/react/session-start-stash.js +146 -0
  696. package/dist/react/session-stop.d.ts +20 -0
  697. package/dist/react/session-stop.js +63 -0
  698. package/dist/react/session-title-sync.d.ts +12 -0
  699. package/dist/react/session-title-sync.js +88 -0
  700. package/dist/react/session-transcript-subscription.d.ts +7 -0
  701. package/dist/react/session-transcript-subscription.js +71 -0
  702. package/dist/react/sign-in-with-beeuni.d.ts +330 -0
  703. package/dist/react/sign-in-with-beeuni.js +51 -0
  704. package/dist/react/teams-install-polling.d.ts +3 -0
  705. package/dist/react/teams-install-polling.js +4 -0
  706. package/dist/react/use-accounts.d.ts +47 -0
  707. package/dist/react/use-accounts.js +31 -0
  708. package/dist/react/use-admin-accounts.d.ts +236 -0
  709. package/dist/react/use-admin-accounts.js +287 -0
  710. package/dist/react/use-admin-activity-analytics.d.ts +48 -0
  711. package/dist/react/use-admin-activity-analytics.js +47 -0
  712. package/dist/react/use-admin-analytics.d.ts +331 -0
  713. package/dist/react/use-admin-analytics.js +85 -0
  714. package/dist/react/use-admin-billing.d.ts +26 -0
  715. package/dist/react/use-admin-billing.js +13 -0
  716. package/dist/react/use-admin-feedback.d.ts +118 -0
  717. package/dist/react/use-admin-feedback.js +46 -0
  718. package/dist/react/use-admin-projects.d.ts +31 -0
  719. package/dist/react/use-admin-projects.js +27 -0
  720. package/dist/react/use-admin-providers.d.ts +20 -0
  721. package/dist/react/use-admin-providers.js +45 -0
  722. package/dist/react/use-admin-role.d.ts +4 -0
  723. package/dist/react/use-admin-role.js +15 -0
  724. package/dist/react/use-admin-sandboxes.d.ts +156 -0
  725. package/dist/react/use-admin-sandboxes.js +52 -0
  726. package/dist/react/use-authenticated-preview-url.d.ts +3 -0
  727. package/dist/react/use-authenticated-preview-url.js +96 -0
  728. package/dist/react/use-beeuni-app-viewer.d.ts +12 -0
  729. package/dist/react/use-beeuni-app-viewer.js +19 -0
  730. package/dist/react/use-beeuni-master.d.ts +333 -0
  731. package/dist/react/use-beeuni-master.js +845 -0
  732. package/dist/react/use-can.d.ts +35 -0
  733. package/dist/react/use-can.js +129 -0
  734. package/dist/react/use-canonical-opencode-session.d.ts +21 -0
  735. package/dist/react/use-canonical-opencode-session.js +44 -0
  736. package/dist/react/use-change-requests.d.ts +291 -0
  737. package/dist/react/use-change-requests.js +31 -0
  738. package/dist/react/use-connector-query.d.ts +7 -0
  739. package/dist/react/use-connector-query.js +23 -0
  740. package/dist/react/use-current-runtime.d.ts +2 -0
  741. package/dist/react/use-current-runtime.js +6 -0
  742. package/dist/react/use-feature-flag.d.ts +6 -0
  743. package/dist/react/use-feature-flag.js +25 -0
  744. package/dist/react/use-gateway-catalog-sync.d.ts +1 -0
  745. package/dist/react/use-gateway-catalog-sync.js +40 -0
  746. package/dist/react/use-gateway-routing-policy.d.ts +8 -0
  747. package/dist/react/use-gateway-routing-policy.js +36 -0
  748. package/dist/react/use-impersonation.d.ts +20 -0
  749. package/dist/react/use-impersonation.js +55 -0
  750. package/dist/react/use-model-access.d.ts +9 -0
  751. package/dist/react/use-model-access.js +46 -0
  752. package/dist/react/use-model-defaults.d.ts +23 -0
  753. package/dist/react/use-model-defaults.js +115 -0
  754. package/dist/react/use-model-enablement.d.ts +8 -0
  755. package/dist/react/use-model-enablement.js +69 -0
  756. package/dist/react/use-model-store.d.ts +47 -0
  757. package/dist/react/use-model-store.js +234 -0
  758. package/dist/react/use-notifications.d.ts +618 -0
  759. package/dist/react/use-notifications.js +104 -0
  760. package/dist/react/use-opencode-config.d.ts +12 -0
  761. package/dist/react/use-opencode-config.js +69 -0
  762. package/dist/react/use-opencode-events/diagnostics.d.ts +4 -0
  763. package/dist/react/use-opencode-events/diagnostics.js +42 -0
  764. package/dist/react/use-opencode-events/handle-event.d.ts +23 -0
  765. package/dist/react/use-opencode-events/handle-event.js +57 -0
  766. package/dist/react/use-opencode-events/handle-interaction-event.d.ts +3 -0
  767. package/dist/react/use-opencode-events/handle-interaction-event.js +41 -0
  768. package/dist/react/use-opencode-events/handle-message-event.d.ts +3 -0
  769. package/dist/react/use-opencode-events/handle-message-event.js +32 -0
  770. package/dist/react/use-opencode-events/handle-session-event.d.ts +4 -0
  771. package/dist/react/use-opencode-events/handle-session-event.js +240 -0
  772. package/dist/react/use-opencode-events/handle-workspace-event.d.ts +3 -0
  773. package/dist/react/use-opencode-events/handle-workspace-event.js +112 -0
  774. package/dist/react/use-opencode-events/handler-context.d.ts +28 -0
  775. package/dist/react/use-opencode-events/handler-context.js +1 -0
  776. package/dist/react/use-opencode-events/helpers.d.ts +27 -0
  777. package/dist/react/use-opencode-events/helpers.js +126 -0
  778. package/dist/react/use-opencode-events/hydrate-core.d.ts +22 -0
  779. package/dist/react/use-opencode-events/hydrate-core.js +78 -0
  780. package/dist/react/use-opencode-events/index.d.ts +9 -0
  781. package/dist/react/use-opencode-events/index.js +181 -0
  782. package/dist/react/use-opencode-events/rehydrate-targets.d.ts +1 -0
  783. package/dist/react/use-opencode-events/rehydrate-targets.js +3 -0
  784. package/dist/react/use-opencode-events/runtime-stream-signals.d.ts +19 -0
  785. package/dist/react/use-opencode-events/runtime-stream-signals.js +22 -0
  786. package/dist/react/use-opencode-events/stream-revival.d.ts +11 -0
  787. package/dist/react/use-opencode-events/stream-revival.js +60 -0
  788. package/dist/react/use-opencode-events/types.d.ts +2 -0
  789. package/dist/react/use-opencode-events/types.js +1 -0
  790. package/dist/react/use-opencode-events/use-event-stream-refs.d.ts +16 -0
  791. package/dist/react/use-opencode-events/use-event-stream-refs.js +129 -0
  792. package/dist/react/use-opencode-local.d.ts +72 -0
  793. package/dist/react/use-opencode-local.js +306 -0
  794. package/dist/react/use-opencode-mcp.d.ts +29 -0
  795. package/dist/react/use-opencode-mcp.js +149 -0
  796. package/dist/react/use-opencode-pty.d.ts +39 -0
  797. package/dist/react/use-opencode-pty.js +61 -0
  798. package/dist/react/use-opencode-sessions/agents.d.ts +11 -0
  799. package/dist/react/use-opencode-sessions/agents.js +57 -0
  800. package/dist/react/use-opencode-sessions/commands.d.ts +16 -0
  801. package/dist/react/use-opencode-sessions/commands.js +42 -0
  802. package/dist/react/use-opencode-sessions/files.d.ts +2 -0
  803. package/dist/react/use-opencode-sessions/files.js +144 -0
  804. package/dist/react/use-opencode-sessions/index.d.ts +15 -0
  805. package/dist/react/use-opencode-sessions/index.js +15 -0
  806. package/dist/react/use-opencode-sessions/keys.d.ts +102 -0
  807. package/dist/react/use-opencode-sessions/keys.js +38 -0
  808. package/dist/react/use-opencode-sessions/mcp.d.ts +2 -0
  809. package/dist/react/use-opencode-sessions/mcp.js +19 -0
  810. package/dist/react/use-opencode-sessions/messages.d.ts +57 -0
  811. package/dist/react/use-opencode-sessions/messages.js +342 -0
  812. package/dist/react/use-opencode-sessions/no-compaction-model-error.d.ts +3 -0
  813. package/dist/react/use-opencode-sessions/no-compaction-model-error.js +6 -0
  814. package/dist/react/use-opencode-sessions/parts.d.ts +12 -0
  815. package/dist/react/use-opencode-sessions/parts.js +31 -0
  816. package/dist/react/use-opencode-sessions/permissions.d.ts +5 -0
  817. package/dist/react/use-opencode-sessions/permissions.js +44 -0
  818. package/dist/react/use-opencode-sessions/projects.d.ts +6 -0
  819. package/dist/react/use-opencode-sessions/projects.js +49 -0
  820. package/dist/react/use-opencode-sessions/provider-load-plan.d.ts +5 -0
  821. package/dist/react/use-opencode-sessions/provider-load-plan.js +3 -0
  822. package/dist/react/use-opencode-sessions/providers.d.ts +10 -0
  823. package/dist/react/use-opencode-sessions/providers.js +98 -0
  824. package/dist/react/use-opencode-sessions/sessions.d.ts +34 -0
  825. package/dist/react/use-opencode-sessions/sessions.js +330 -0
  826. package/dist/react/use-opencode-sessions/shared.d.ts +10 -0
  827. package/dist/react/use-opencode-sessions/shared.js +36 -0
  828. package/dist/react/use-opencode-sessions/sharing.d.ts +3 -0
  829. package/dist/react/use-opencode-sessions/sharing.js +51 -0
  830. package/dist/react/use-opencode-sessions/tools.d.ts +5 -0
  831. package/dist/react/use-opencode-sessions/tools.js +48 -0
  832. package/dist/react/use-opencode-sessions/vcs.d.ts +7 -0
  833. package/dist/react/use-opencode-sessions/vcs.js +24 -0
  834. package/dist/react/use-ops-overview.d.ts +63 -0
  835. package/dist/react/use-ops-overview.js +15 -0
  836. package/dist/react/use-permission-self-heal.d.ts +10 -0
  837. package/dist/react/use-permission-self-heal.js +114 -0
  838. package/dist/react/use-poll-owner.d.ts +1 -0
  839. package/dist/react/use-poll-owner.js +14 -0
  840. package/dist/react/use-project-apps.d.ts +879 -0
  841. package/dist/react/use-project-apps.js +185 -0
  842. package/dist/react/use-project-config.d.ts +2 -0
  843. package/dist/react/use-project-config.js +16 -0
  844. package/dist/react/use-project-files.d.ts +87 -0
  845. package/dist/react/use-project-files.js +109 -0
  846. package/dist/react/use-project-gateway.d.ts +26 -0
  847. package/dist/react/use-project-gateway.js +111 -0
  848. package/dist/react/use-project-llm-gateway.d.ts +6 -0
  849. package/dist/react/use-project-llm-gateway.js +20 -0
  850. package/dist/react/use-project-models.d.ts +4 -0
  851. package/dist/react/use-project-models.js +31 -0
  852. package/dist/react/use-project-name.d.ts +4 -0
  853. package/dist/react/use-project-name.js +35 -0
  854. package/dist/react/use-project-secrets.d.ts +279 -0
  855. package/dist/react/use-project-secrets.js +34 -0
  856. package/dist/react/use-project-session.d.ts +4 -0
  857. package/dist/react/use-project-session.js +18 -0
  858. package/dist/react/use-project-sessions.d.ts +447 -0
  859. package/dist/react/use-project-sessions.js +86 -0
  860. package/dist/react/use-project-starter-suggestions.d.ts +2 -0
  861. package/dist/react/use-project-starter-suggestions.js +13 -0
  862. package/dist/react/use-project-triggers.d.ts +221 -0
  863. package/dist/react/use-project-triggers.js +53 -0
  864. package/dist/react/use-prompt-attachments.d.ts +3 -0
  865. package/dist/react/use-prompt-attachments.js +34 -0
  866. package/dist/react/use-provider-secrets.d.ts +229 -0
  867. package/dist/react/use-provider-secrets.js +38 -0
  868. package/dist/react/use-question-self-heal.d.ts +7 -0
  869. package/dist/react/use-question-self-heal.js +81 -0
  870. package/dist/react/use-reminders.d.ts +501 -0
  871. package/dist/react/use-reminders.js +51 -0
  872. package/dist/react/use-runtime-boot-stalled.d.ts +2 -0
  873. package/dist/react/use-runtime-boot-stalled.js +18 -0
  874. package/dist/react/use-runtime-phase.d.ts +2 -0
  875. package/dist/react/use-runtime-phase.js +13 -0
  876. package/dist/react/use-runtime-reconnect.d.ts +52 -0
  877. package/dist/react/use-runtime-reconnect.js +248 -0
  878. package/dist/react/use-runtime-supports.d.ts +2 -0
  879. package/dist/react/use-runtime-supports.js +5 -0
  880. package/dist/react/use-sandbox-image.d.ts +33 -0
  881. package/dist/react/use-sandbox-image.js +119 -0
  882. package/dist/react/use-session-audit.d.ts +4 -0
  883. package/dist/react/use-session-audit.js +25 -0
  884. package/dist/react/use-session-message-authors.d.ts +1 -0
  885. package/dist/react/use-session-message-authors.js +14 -0
  886. package/dist/react/use-session-messages.d.ts +11 -0
  887. package/dist/react/use-session-messages.js +62 -0
  888. package/dist/react/use-session-model-selection.d.ts +8 -0
  889. package/dist/react/use-session-model-selection.js +20 -0
  890. package/dist/react/use-session-model-usage.d.ts +1 -0
  891. package/dist/react/use-session-model-usage.js +13 -0
  892. package/dist/react/use-session-participants.d.ts +4 -0
  893. package/dist/react/use-session-participants.js +13 -0
  894. package/dist/react/use-session-phase.d.ts +8 -0
  895. package/dist/react/use-session-phase.js +9 -0
  896. package/dist/react/use-session-picks.d.ts +13 -0
  897. package/dist/react/use-session-picks.js +65 -0
  898. package/dist/react/use-session-prefetch.d.ts +6 -0
  899. package/dist/react/use-session-prefetch.js +22 -0
  900. package/dist/react/use-session-prompts.d.ts +53 -0
  901. package/dist/react/use-session-prompts.js +378 -0
  902. package/dist/react/use-session-send.d.ts +97 -0
  903. package/dist/react/use-session-send.js +233 -0
  904. package/dist/react/use-session-start-give-up.d.ts +19 -0
  905. package/dist/react/use-session-start-give-up.js +59 -0
  906. package/dist/react/use-session-stream.d.ts +17 -0
  907. package/dist/react/use-session-stream.js +181 -0
  908. package/dist/react/use-session-sync.d.ts +43 -0
  909. package/dist/react/use-session-sync.js +252 -0
  910. package/dist/react/use-session-transcript-history.d.ts +6 -0
  911. package/dist/react/use-session-transcript-history.js +38 -0
  912. package/dist/react/use-session-working.d.ts +37 -0
  913. package/dist/react/use-session-working.js +217 -0
  914. package/dist/react/use-session.d.ts +201 -0
  915. package/dist/react/use-session.js +893 -0
  916. package/dist/react/use-sessions-needing-input.d.ts +5 -0
  917. package/dist/react/use-sessions-needing-input.js +23 -0
  918. package/dist/react/use-static-file-preview.d.ts +9 -0
  919. package/dist/react/use-static-file-preview.js +72 -0
  920. package/dist/react/use-system-status.d.ts +38 -0
  921. package/dist/react/use-system-status.js +5 -0
  922. package/dist/react/use-teams-installations.d.ts +41 -0
  923. package/dist/react/use-teams-installations.js +95 -0
  924. package/dist/react/use-tunnel.d.ts +165 -0
  925. package/dist/react/use-tunnel.js +186 -0
  926. package/dist/react/use-visible-agents.d.ts +9 -0
  927. package/dist/react/use-visible-agents.js +12 -0
  928. package/dist/react/use-wake-escalation.d.ts +31 -0
  929. package/dist/react/use-wake-escalation.js +82 -0
  930. package/dist/transcript.d.ts +50 -0
  931. package/dist/transcript.js +93 -0
  932. package/dist/workspace-search/client.d.ts +19 -0
  933. package/dist/workspace-search/client.js +229 -0
  934. package/dist/workspace-search/core.d.ts +21 -0
  935. package/dist/workspace-search/core.js +259 -0
  936. package/dist/workspace-search/index.d.ts +2 -0
  937. package/dist/workspace-search/index.js +2 -0
  938. package/package.json +178 -0
@@ -0,0 +1,1336 @@
1
+ "use client";
2
+ import { create } from "zustand";
3
+ import { commitSessionRewind, isWithinRewindWindow, stageSessionRewind, } from "../../core/session/rewind.js";
4
+ import { isRetryableTurnError } from "../../core/turns/open-turn.js";
5
+ import { ascendingId } from "./sync-store/ascending-id.js";
6
+ import { Binary } from "./sync-store/binary.js";
7
+ import { DELTA_EVENT_TAIL_LIMIT } from "./sync-store/delta-event-window.js";
8
+ import { reconcileHydratedParts } from "./sync-store/reconcile-parts.js";
9
+ export { ascendingId, Binary };
10
+ export function sameSessionStatus(a, b) {
11
+ if (a === b)
12
+ return true;
13
+ if (!a || !b)
14
+ return false;
15
+ if (a.type !== b.type)
16
+ return false;
17
+ if (a.type !== "retry" || b.type !== "retry")
18
+ return true;
19
+ return a.attempt === b.attempt && a.message === b.message && a.next === b.next;
20
+ }
21
+ function syntheticEventOrigin(event) {
22
+ return event?.synthetic === true
23
+ ? "local"
24
+ : "wire";
25
+ }
26
+ function isTextLikePart(part) {
27
+ return part.type === "text" || part.type === "reasoning";
28
+ }
29
+ const ACTIVITY_STAMP_RESOLUTION_MS = 1_000;
30
+ function isOpenMessage(info) {
31
+ if (info?.role !== "assistant")
32
+ return false;
33
+ const { time, error } = info;
34
+ return !time?.completed && !error;
35
+ }
36
+ function isOpenPart(part) {
37
+ if (part.type === "step-finish" || part.type === "patch")
38
+ return false;
39
+ if (part.type === "tool") {
40
+ const status = part.state?.status;
41
+ return status !== "completed" && status !== "error";
42
+ }
43
+ return !part.time?.end;
44
+ }
45
+ function indexOfId(list, id, idOf) {
46
+ const result = Binary.search(list, id, idOf);
47
+ if (result.found && list[result.index] !== undefined && idOf(list[result.index]) === id) {
48
+ return result.index;
49
+ }
50
+ return list.findIndex((item) => idOf(item) === id);
51
+ }
52
+ function insertIndexByTime(list, message) {
53
+ const created = message.time?.created;
54
+ if (created === undefined)
55
+ return list.length;
56
+ for (let index = 0; index < list.length; index++) {
57
+ const other = list[index].time?.created;
58
+ if (other === undefined)
59
+ continue;
60
+ if (other > created)
61
+ return index;
62
+ if (other === created && list[index].id > message.id)
63
+ return index;
64
+ }
65
+ return list.length;
66
+ }
67
+ const optimisticIds = new Map();
68
+ const dispatchedOptimisticIds = new Map();
69
+ const inboxBackedOptimisticIds = new Map();
70
+ const optimisticEchoes = new Map();
71
+ const optimisticOrigins = new Map();
72
+ const controlPlaneOwnedIds = new Map();
73
+ const cancelledMessageIds = new Map();
74
+ const cacheSourcedIds = new Map();
75
+ export function hasOnlyCacheSourcedMessages(sessionID) {
76
+ const messages = useSyncStore.getState().messages[sessionID];
77
+ if (!messages || messages.length === 0)
78
+ return false;
79
+ const cached = cacheSourcedIds.get(sessionID);
80
+ if (!cached)
81
+ return false;
82
+ return messages.every((message) => cached.has(message.id));
83
+ }
84
+ function recordOptimisticEcho(sessionID, optimisticID, echoID) {
85
+ if (optimisticID === echoID)
86
+ return;
87
+ const origin = optimisticOrigins.get(sessionID)?.get(optimisticID) ?? optimisticID;
88
+ let fwd = optimisticEchoes.get(sessionID);
89
+ if (!fwd)
90
+ optimisticEchoes.set(sessionID, (fwd = new Map()));
91
+ fwd.set(origin, echoID);
92
+ if (origin !== optimisticID)
93
+ fwd.set(optimisticID, echoID);
94
+ let rev = optimisticOrigins.get(sessionID);
95
+ if (!rev)
96
+ optimisticOrigins.set(sessionID, (rev = new Map()));
97
+ rev.set(echoID, origin);
98
+ }
99
+ function releaseOptimisticId(sessionID, id) {
100
+ untrackId(optimisticIds, sessionID, id);
101
+ untrackId(dispatchedOptimisticIds, sessionID, id);
102
+ untrackId(inboxBackedOptimisticIds, sessionID, id);
103
+ }
104
+ function releaseConfirmedOptimisticId(sessionID, optimisticID, echoID) {
105
+ if (hasTrackedId(inboxBackedOptimisticIds, sessionID, optimisticID)) {
106
+ trackId(controlPlaneOwnedIds, sessionID, echoID);
107
+ }
108
+ releaseOptimisticId(sessionID, optimisticID);
109
+ }
110
+ function trackId(store, sessionID, id) {
111
+ const bucket = store.get(sessionID);
112
+ if (bucket)
113
+ bucket.add(id);
114
+ else
115
+ store.set(sessionID, new Set([id]));
116
+ }
117
+ function untrackId(store, sessionID, id) {
118
+ const bucket = store.get(sessionID);
119
+ if (!bucket)
120
+ return;
121
+ bucket.delete(id);
122
+ if (bucket.size === 0)
123
+ store.delete(sessionID);
124
+ }
125
+ function hasTrackedId(store, sessionID, id) {
126
+ return store.get(sessionID)?.has(id) ?? false;
127
+ }
128
+ function forgetSessionIds(sessionID) {
129
+ optimisticIds.delete(sessionID);
130
+ dispatchedOptimisticIds.delete(sessionID);
131
+ inboxBackedOptimisticIds.delete(sessionID);
132
+ optimisticEchoes.delete(sessionID);
133
+ optimisticOrigins.delete(sessionID);
134
+ controlPlaneOwnedIds.delete(sessionID);
135
+ cacheSourcedIds.delete(sessionID);
136
+ cancelledMessageIds.delete(sessionID);
137
+ sessionMessageRows.delete(sessionID);
138
+ deltaActiveParts.delete(sessionID);
139
+ bridgedPartIds.delete(sessionID);
140
+ deltaEventTails.delete(sessionID);
141
+ stubAssistantIds.delete(sessionID);
142
+ }
143
+ const isOptimistic = (sessionID, messageID) => hasTrackedId(optimisticIds, sessionID, messageID);
144
+ const isDispatched = (sessionID, messageID) => hasTrackedId(dispatchedOptimisticIds, sessionID, messageID);
145
+ const awaitsUserEcho = (sessionID, messageID) => {
146
+ if (optimisticOrigins.get(sessionID)?.has(messageID))
147
+ return true;
148
+ const pending = optimisticIds.get(sessionID);
149
+ if (!pending)
150
+ return false;
151
+ for (const id of pending) {
152
+ if (!isDispatched(sessionID, id))
153
+ continue;
154
+ if (optimisticEchoes.get(sessionID)?.get(id))
155
+ continue;
156
+ return true;
157
+ }
158
+ return false;
159
+ };
160
+ const bridgedPartIds = new Map();
161
+ const deltaActiveParts = new Map();
162
+ const deltaEventTails = new Map();
163
+ const stubAssistantIds = new Map();
164
+ function trackStub(sessionID, stubId, parentId) {
165
+ const bucket = stubAssistantIds.get(sessionID);
166
+ if (bucket)
167
+ bucket.set(stubId, parentId);
168
+ else
169
+ stubAssistantIds.set(sessionID, new Map([[stubId, parentId]]));
170
+ }
171
+ function untrackStub(sessionID, stubId) {
172
+ const bucket = stubAssistantIds.get(sessionID);
173
+ if (!bucket)
174
+ return;
175
+ bucket.delete(stubId);
176
+ if (bucket.size === 0)
177
+ stubAssistantIds.delete(sessionID);
178
+ }
179
+ const stubIdFor = (userId) => `${userId}_error`;
180
+ const isStubShaped = (id) => id.endsWith("_error");
181
+ function findAssistantForTurn(messages, parentId) {
182
+ const parentCreated = parentId
183
+ ? messages.find((m) => m.id === parentId)?.time?.created
184
+ : undefined;
185
+ return messages.findIndex((m) => m.role === "assistant" &&
186
+ !isStubShaped(m.id) &&
187
+ (!parentId ||
188
+ m.parentID === parentId ||
189
+ (!m.parentID &&
190
+ parentCreated !== undefined &&
191
+ m.time?.created !== undefined &&
192
+ m.time.created >= parentCreated)));
193
+ }
194
+ function hasAssistantForTurn(messages, parentId) {
195
+ return findAssistantForTurn(messages, parentId) !== -1;
196
+ }
197
+ function rekeyStubParent(sessionID, list, fromId, toId) {
198
+ const bucket = stubAssistantIds.get(sessionID);
199
+ if (!bucket)
200
+ return list;
201
+ const moved = [...bucket.entries()].filter(([, parentId]) => parentId === fromId);
202
+ if (moved.length === 0)
203
+ return list;
204
+ let next = [...list];
205
+ for (const [stubId] of moved) {
206
+ untrackStub(sessionID, stubId);
207
+ const idx = next.findIndex((m) => m.id === stubId);
208
+ if (idx === -1)
209
+ continue;
210
+ const nextId = stubIdFor(toId);
211
+ trackStub(sessionID, nextId, toId);
212
+ const rekeyed = { ...next[idx], id: nextId, parentID: toId };
213
+ next.splice(idx, 1);
214
+ const parentIdx = next.findIndex((m) => m.id === toId);
215
+ if (parentIdx === -1)
216
+ next = [...next, rekeyed];
217
+ else
218
+ next.splice(parentIdx + 1, 0, rekeyed);
219
+ }
220
+ return next;
221
+ }
222
+ const DETACHED_SESSION_LIMIT = 8;
223
+ const MESSAGE_ROWS_LIMIT = 20;
224
+ const sessionMessageRows = new Map();
225
+ const EMPTY_MESSAGE_ROWS = [];
226
+ function touchSessionMessageRows(sessionID, entry) {
227
+ sessionMessageRows.delete(sessionID);
228
+ sessionMessageRows.set(sessionID, entry);
229
+ if (sessionMessageRows.size > MESSAGE_ROWS_LIMIT) {
230
+ const leastRecentlyUsed = sessionMessageRows.keys().next().value;
231
+ if (leastRecentlyUsed)
232
+ sessionMessageRows.delete(leastRecentlyUsed);
233
+ }
234
+ }
235
+ const sessionConsumers = new Map();
236
+ const detachedSessions = new Set();
237
+ const evictedSessions = new Set();
238
+ function deleteOrphanPartBuckets(parts, sessionIDs) {
239
+ const dropped = new Set(sessionIDs);
240
+ for (const messageID of Object.keys(parts)) {
241
+ const bucket = parts[messageID];
242
+ if (!bucket || bucket.length === 0)
243
+ continue;
244
+ const owner = bucket[0].sessionID;
245
+ if (!owner || !dropped.has(owner))
246
+ continue;
247
+ if (bucket.every((part) => part.sessionID === owner))
248
+ delete parts[messageID];
249
+ }
250
+ }
251
+ function dropSessionData(state, sessionIDs) {
252
+ const messages = { ...state.messages };
253
+ const parts = { ...state.parts };
254
+ const diffs = { ...state.diffs };
255
+ const todos = { ...state.todos };
256
+ for (const sessionID of sessionIDs) {
257
+ for (const message of messages[sessionID] ?? [])
258
+ delete parts[message.id];
259
+ delete messages[sessionID];
260
+ delete diffs[sessionID];
261
+ delete todos[sessionID];
262
+ }
263
+ deleteOrphanPartBuckets(parts, sessionIDs);
264
+ return { messages, parts, sessionStatus: state.sessionStatus, diffs, todos };
265
+ }
266
+ function pruneDetachedSessions(messages) {
267
+ const evicted = [];
268
+ while (detachedSessions.size > DETACHED_SESSION_LIMIT) {
269
+ const oldest = detachedSessions.values().next().value;
270
+ if (oldest === undefined)
271
+ break;
272
+ detachedSessions.delete(oldest);
273
+ evicted.push(oldest);
274
+ }
275
+ for (const sessionID of evictedSessions) {
276
+ if (sessionConsumers.has(sessionID) || detachedSessions.has(sessionID))
277
+ continue;
278
+ if (sessionID in messages)
279
+ evicted.push(sessionID);
280
+ }
281
+ return evicted;
282
+ }
283
+ function appendPartDeltas(sessionID, messageID, partID, field, pieces) {
284
+ trackId(deltaActiveParts, sessionID, partID);
285
+ let applied = false;
286
+ useSyncStore.setState((s) => {
287
+ const list = s.parts[messageID];
288
+ if (!list)
289
+ return s;
290
+ const result = Binary.search(list, partID, (p) => p.id);
291
+ if (!result.found)
292
+ return s;
293
+ let delta = "";
294
+ for (const piece of pieces) {
295
+ if (piece.id) {
296
+ const tailKey = `${messageID}:${partID}:${field}`;
297
+ let sessionTails = deltaEventTails.get(sessionID);
298
+ if (!sessionTails) {
299
+ sessionTails = new Map();
300
+ deltaEventTails.set(sessionID, sessionTails);
301
+ }
302
+ let appliedIds = sessionTails.get(tailKey);
303
+ if (appliedIds?.has(piece.id))
304
+ continue;
305
+ if (!appliedIds) {
306
+ appliedIds = new Set();
307
+ sessionTails.set(tailKey, appliedIds);
308
+ }
309
+ appliedIds.add(piece.id);
310
+ if (appliedIds.size > DELTA_EVENT_TAIL_LIMIT) {
311
+ const oldest = appliedIds.values().next().value;
312
+ if (oldest !== undefined)
313
+ appliedIds.delete(oldest);
314
+ }
315
+ }
316
+ delta += piece.delta;
317
+ applied = true;
318
+ }
319
+ if (!applied)
320
+ return s;
321
+ const next = [...list];
322
+ const part = { ...next[result.index] };
323
+ const existing = part[field];
324
+ part[field] = (existing ?? "") + delta;
325
+ next[result.index] = part;
326
+ return { parts: { ...s.parts, [messageID]: next } };
327
+ });
328
+ if (applied)
329
+ useSyncStore.getState().noteSessionActivity(sessionID);
330
+ }
331
+ export const useSyncStore = create()((set, get) => ({
332
+ messages: {},
333
+ parts: {},
334
+ sessionStatus: {},
335
+ sessionStatusOrigin: {},
336
+ sessionStatusAt: {},
337
+ sessionActivityAt: {},
338
+ diffs: {},
339
+ todos: {},
340
+ sessionRevert: {},
341
+ sessionRevertNeedsTailReconcile: {},
342
+ get statuses() {
343
+ return get().sessionStatus;
344
+ },
345
+ upsertMessage: (sessionID, message) => set((s) => {
346
+ const list = s.messages[sessionID] ?? [];
347
+ const result = Binary.search(list, message.id, (m) => m.id);
348
+ const bsValid = result.found && list[result.index]?.id === message.id;
349
+ if (bsValid) {
350
+ const next = [...list];
351
+ next[result.index] = message;
352
+ return { messages: { ...s.messages, [sessionID]: next } };
353
+ }
354
+ const linearIdx = list.findIndex((m) => m.id === message.id);
355
+ if (linearIdx !== -1) {
356
+ const next = [...list];
357
+ next[linearIdx] = message;
358
+ return { messages: { ...s.messages, [sessionID]: next } };
359
+ }
360
+ const next = [...list];
361
+ next.splice(insertIndexByTime(next, message), 0, message);
362
+ return { messages: { ...s.messages, [sessionID]: next } };
363
+ }),
364
+ removeMessage: (sessionID, messageID) => set((s) => {
365
+ const list = s.messages[sessionID];
366
+ if (!list)
367
+ return s;
368
+ const result = Binary.search(list, messageID, (m) => m.id);
369
+ const idx = (result.found && list[result.index]?.id === messageID)
370
+ ? result.index
371
+ : list.findIndex((m) => m.id === messageID);
372
+ if (idx === -1)
373
+ return s;
374
+ const next = [...list];
375
+ next.splice(idx, 1);
376
+ const { [messageID]: _, ...restParts } = s.parts;
377
+ return {
378
+ messages: { ...s.messages, [sessionID]: next },
379
+ parts: restParts,
380
+ };
381
+ }),
382
+ upsertPart: (messageID, part, sessionID) => set((s) => {
383
+ const partSessionID = sessionID ?? part.sessionID;
384
+ let list;
385
+ let bridgeCleared = false;
386
+ if (hasTrackedId(bridgedPartIds, partSessionID, messageID)) {
387
+ untrackId(bridgedPartIds, partSessionID, messageID);
388
+ list = [];
389
+ bridgeCleared = true;
390
+ }
391
+ else {
392
+ list = s.parts[messageID] ?? [];
393
+ }
394
+ const result = Binary.search(list, part.id, (p) => p.id);
395
+ if (result.found) {
396
+ const prev = list[result.index];
397
+ const prevIsTextLike = isTextLikePart(prev);
398
+ const incomingIsTextLike = isTextLikePart(part);
399
+ const tracksStreamingText = prevIsTextLike && incomingIsTextLike;
400
+ const prevText = prevIsTextLike ? prev.text : null;
401
+ const incomingText = incomingIsTextLike ? part.text : null;
402
+ if (tracksStreamingText &&
403
+ prevText !== null &&
404
+ incomingText !== null &&
405
+ prevText.length > 0) {
406
+ const isPrefixGrowth = incomingText.startsWith(prevText);
407
+ if (!isPrefixGrowth) {
408
+ if (!bridgeCleared)
409
+ return s;
410
+ const next = [...list];
411
+ next[result.index] = prev;
412
+ return { parts: { ...s.parts, [messageID]: next } };
413
+ }
414
+ }
415
+ }
416
+ const next = [...list];
417
+ if (result.found) {
418
+ next[result.index] = part;
419
+ }
420
+ else {
421
+ if (hasTrackedId(deltaActiveParts, partSessionID, part.id) && isTextLikePart(part)) {
422
+ const allParts = Object.values(s.parts);
423
+ for (const pl of allParts) {
424
+ if (pl && pl.some((p) => p.id === part.id)) {
425
+ return s;
426
+ }
427
+ }
428
+ }
429
+ next.splice(result.index, 0, part);
430
+ }
431
+ return { parts: { ...s.parts, [messageID]: next } };
432
+ }),
433
+ removePart: (messageID, partID) => set((s) => {
434
+ const list = s.parts[messageID];
435
+ if (!list)
436
+ return s;
437
+ const result = Binary.search(list, partID, (p) => p.id);
438
+ if (!result.found)
439
+ return s;
440
+ const next = [...list];
441
+ next.splice(result.index, 1);
442
+ if (next.length === 0) {
443
+ const { [messageID]: _, ...restParts } = s.parts;
444
+ return { parts: restParts };
445
+ }
446
+ return { parts: { ...s.parts, [messageID]: next } };
447
+ }),
448
+ applyPartDelta: (sessionID, messageID, partID, field, delta, eventID) => appendPartDeltas(sessionID, messageID, partID, field, [{ id: eventID, delta }]),
449
+ setStatus: (sessionID, status, origin = "wire") => set((s) => {
450
+ if (sameSessionStatus(s.sessionStatus[sessionID], status)) {
451
+ if ((s.sessionStatusOrigin[sessionID] ?? "wire") === origin)
452
+ return s;
453
+ return {
454
+ sessionStatusOrigin: { ...s.sessionStatusOrigin, [sessionID]: origin },
455
+ sessionStatusAt: { ...s.sessionStatusAt, [sessionID]: Date.now() },
456
+ };
457
+ }
458
+ return {
459
+ sessionStatus: { ...s.sessionStatus, [sessionID]: status },
460
+ sessionStatusOrigin: { ...s.sessionStatusOrigin, [sessionID]: origin },
461
+ sessionStatusAt: { ...s.sessionStatusAt, [sessionID]: Date.now() },
462
+ };
463
+ }),
464
+ setDiff: (sessionID, diffs) => set((s) => ({
465
+ diffs: { ...s.diffs, [sessionID]: diffs },
466
+ })),
467
+ setTodo: (sessionID, todos) => set((s) => ({
468
+ todos: { ...s.todos, [sessionID]: todos },
469
+ })),
470
+ stageSessionRevert: (sessionId, messageId) => set((s) => {
471
+ const current = s.sessionRevert[sessionId];
472
+ if (current?.staged && current.messageId === messageId)
473
+ return s;
474
+ return {
475
+ sessionRevert: {
476
+ ...s.sessionRevert,
477
+ [sessionId]: stageSessionRewind(get().getMessages(sessionId), messageId),
478
+ },
479
+ };
480
+ }),
481
+ commitSessionRevert: (sessionId) => set((s) => {
482
+ const current = s.sessionRevert[sessionId] ?? null;
483
+ const next = commitSessionRewind(current);
484
+ if (next === current)
485
+ return s;
486
+ return { sessionRevert: { ...s.sessionRevert, [sessionId]: next } };
487
+ }),
488
+ clearSessionRevert: (sessionId) => set((s) => {
489
+ if (!s.sessionRevert[sessionId])
490
+ return s;
491
+ return { sessionRevert: { ...s.sessionRevert, [sessionId]: null } };
492
+ }),
493
+ applyCommittedRevert: (sessionId, boundaryId, watermark, hiddenIds) => set((s) => {
494
+ const list = s.messages[sessionId];
495
+ if (!list || list.length === 0) {
496
+ return { sessionRevert: { ...s.sessionRevert, [sessionId]: null } };
497
+ }
498
+ const rewind = {
499
+ messageId: boundaryId,
500
+ watermark,
501
+ ...(hiddenIds ? { hiddenIds } : {}),
502
+ staged: false,
503
+ };
504
+ const removedIds = [];
505
+ const kept = list.filter((m) => {
506
+ if (isWithinRewindWindow(m.id, rewind)) {
507
+ removedIds.push(m.id);
508
+ return false;
509
+ }
510
+ return true;
511
+ });
512
+ const nextParts = { ...s.parts };
513
+ for (const id of removedIds)
514
+ delete nextParts[id];
515
+ return {
516
+ messages: { ...s.messages, [sessionId]: kept },
517
+ parts: nextParts,
518
+ sessionRevert: { ...s.sessionRevert, [sessionId]: null },
519
+ };
520
+ }),
521
+ markSessionRevertNeedsTailReconcile: (sessionId) => set((s) => {
522
+ if (s.sessionRevertNeedsTailReconcile[sessionId])
523
+ return s;
524
+ return {
525
+ sessionRevertNeedsTailReconcile: {
526
+ ...s.sessionRevertNeedsTailReconcile,
527
+ [sessionId]: true,
528
+ },
529
+ };
530
+ }),
531
+ clearSessionRevertNeedsTailReconcile: (sessionId) => set((s) => {
532
+ if (!s.sessionRevertNeedsTailReconcile[sessionId])
533
+ return s;
534
+ const { [sessionId]: _, ...rest } = s.sessionRevertNeedsTailReconcile;
535
+ return { sessionRevertNeedsTailReconcile: rest };
536
+ }),
537
+ syncSessionRevertFromInfo: (sessionId, revert) => {
538
+ if (!revert?.messageID)
539
+ return;
540
+ const current = get().sessionRevert[sessionId];
541
+ if (current === null)
542
+ return;
543
+ if (current?.messageId === revert.messageID)
544
+ return;
545
+ get().stageSessionRevert(sessionId, revert.messageID);
546
+ },
547
+ optimisticAdd: (sessionID, message, messageParts) => {
548
+ trackId(optimisticIds, sessionID, message.id);
549
+ evictedSessions.delete(sessionID);
550
+ set((s) => {
551
+ const list = s.messages[sessionID] ?? [];
552
+ const nextMsgs = [...list.filter((m) => m.id !== message.id), message];
553
+ const sorted = messageParts
554
+ .filter((p) => !!p?.id)
555
+ .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
556
+ return {
557
+ messages: { ...s.messages, [sessionID]: nextMsgs },
558
+ parts: { ...s.parts, [message.id]: sorted },
559
+ };
560
+ });
561
+ },
562
+ markOptimisticDispatched: (sessionID, messageID) => {
563
+ if (isOptimistic(sessionID, messageID))
564
+ trackId(dispatchedOptimisticIds, sessionID, messageID);
565
+ },
566
+ markOptimisticInboxBacked: (sessionID, messageID) => {
567
+ if (isOptimistic(sessionID, messageID))
568
+ trackId(inboxBackedOptimisticIds, sessionID, messageID);
569
+ },
570
+ optimisticEchoOf: (sessionID, optimisticID) => optimisticEchoes.get(sessionID)?.get(optimisticID),
571
+ optimisticOriginOf: (sessionID, echoID) => optimisticOrigins.get(sessionID)?.get(echoID),
572
+ isOptimisticMessage: (sessionID, messageID) => isOptimistic(sessionID, messageID),
573
+ forgetControlPlaneMessage: (sessionID, messageID) => {
574
+ untrackId(controlPlaneOwnedIds, sessionID, messageID);
575
+ releaseOptimisticId(sessionID, messageID);
576
+ trackId(cancelledMessageIds, sessionID, messageID);
577
+ get().removeMessage(sessionID, messageID);
578
+ },
579
+ registerOptimisticEcho: (sessionID, optimisticID, echoID) => {
580
+ if (optimisticID === echoID)
581
+ return;
582
+ const live = isOptimistic(sessionID, optimisticID)
583
+ ? optimisticID
584
+ : optimisticEchoes.get(sessionID)?.get(optimisticID);
585
+ if (!live || live === echoID || !isOptimistic(sessionID, live))
586
+ return;
587
+ recordOptimisticEcho(sessionID, live, echoID);
588
+ if (!get().messages[sessionID]?.some((m) => m.id === echoID))
589
+ return;
590
+ releaseConfirmedOptimisticId(sessionID, live, echoID);
591
+ set((s) => {
592
+ const list = s.messages[sessionID] ?? [];
593
+ if (!list.some((m) => m.id === live))
594
+ return s;
595
+ let next = list.filter((m) => m.id !== live);
596
+ next = rekeyStubParent(sessionID, next, live, echoID);
597
+ const newParts = { ...s.parts };
598
+ const bridge = newParts[live];
599
+ delete newParts[live];
600
+ if (bridge?.length && !newParts[echoID]?.length) {
601
+ newParts[echoID] = bridge;
602
+ trackId(bridgedPartIds, sessionID, echoID);
603
+ }
604
+ return { messages: { ...s.messages, [sessionID]: next }, parts: newParts };
605
+ });
606
+ },
607
+ reclaimRemovedMessage: (sessionID, messageID) => {
608
+ if (!hasTrackedId(controlPlaneOwnedIds, sessionID, messageID))
609
+ return false;
610
+ const list = get().messages[sessionID];
611
+ const message = list?.find((m) => m.id === messageID);
612
+ if (!message || message.role !== "user")
613
+ return false;
614
+ untrackId(controlPlaneOwnedIds, sessionID, messageID);
615
+ trackId(optimisticIds, sessionID, messageID);
616
+ trackId(dispatchedOptimisticIds, sessionID, messageID);
617
+ trackId(inboxBackedOptimisticIds, sessionID, messageID);
618
+ return true;
619
+ },
620
+ optimisticRemove: (sessionID, messageID) => {
621
+ if (!isOptimistic(sessionID, messageID))
622
+ return;
623
+ releaseOptimisticId(sessionID, messageID);
624
+ set((s) => {
625
+ const list = s.messages[sessionID];
626
+ if (!list)
627
+ return s;
628
+ const idx = list.findIndex((m) => m.id === messageID);
629
+ if (idx === -1)
630
+ return s;
631
+ const nextMsgs = [...list];
632
+ nextMsgs.splice(idx, 1);
633
+ const { [messageID]: _, ...restParts } = s.parts;
634
+ return {
635
+ messages: { ...s.messages, [sessionID]: nextMsgs },
636
+ parts: restParts,
637
+ };
638
+ });
639
+ },
640
+ noteSessionActivity: (sessionID, atMs) => {
641
+ if (!sessionID)
642
+ return;
643
+ const now = atMs ?? Date.now();
644
+ const previous = get().sessionActivityAt[sessionID];
645
+ if (previous !== undefined && now - previous < ACTIVITY_STAMP_RESOLUTION_MS)
646
+ return;
647
+ set((s) => ({ sessionActivityAt: { ...s.sessionActivityAt, [sessionID]: now } }));
648
+ },
649
+ clearOptimisticMessages: (sessionID) => {
650
+ set((s) => {
651
+ const list = s.messages[sessionID];
652
+ if (!list)
653
+ return s;
654
+ const optIds = list
655
+ .filter((m) => isOptimistic(sessionID, m.id) &&
656
+ !hasTrackedId(inboxBackedOptimisticIds, sessionID, m.id))
657
+ .map((m) => m.id);
658
+ if (optIds.length === 0)
659
+ return s;
660
+ for (const id of optIds)
661
+ releaseOptimisticId(sessionID, id);
662
+ const filtered = list.filter((m) => !optIds.includes(m.id));
663
+ const newParts = { ...s.parts };
664
+ for (const id of optIds)
665
+ delete newParts[id];
666
+ return {
667
+ messages: { ...s.messages, [sessionID]: filtered },
668
+ parts: newParts,
669
+ };
670
+ });
671
+ },
672
+ clearSession: (sessionID) => set((s) => {
673
+ forgetSessionIds(sessionID);
674
+ evictedSessions.delete(sessionID);
675
+ const existingMessages = s.messages[sessionID] ?? [];
676
+ const nextParts = { ...s.parts };
677
+ for (const message of existingMessages)
678
+ delete nextParts[message.id];
679
+ deleteOrphanPartBuckets(nextParts, [sessionID]);
680
+ const nextActivity = { ...s.sessionActivityAt };
681
+ delete nextActivity[sessionID];
682
+ return {
683
+ messages: { ...s.messages, [sessionID]: [] },
684
+ parts: nextParts,
685
+ sessionActivityAt: nextActivity,
686
+ sessionStatus: { ...s.sessionStatus, [sessionID]: { type: "idle" } },
687
+ sessionStatusOrigin: { ...s.sessionStatusOrigin, [sessionID]: "local" },
688
+ sessionStatusAt: { ...s.sessionStatusAt, [sessionID]: Date.now() },
689
+ diffs: { ...s.diffs, [sessionID]: [] },
690
+ todos: { ...s.todos, [sessionID]: [] },
691
+ sessionRevert: { ...s.sessionRevert, [sessionID]: null },
692
+ sessionRevertNeedsTailReconcile: (() => {
693
+ const { [sessionID]: _, ...rest } = s.sessionRevertNeedsTailReconcile;
694
+ return rest;
695
+ })(),
696
+ };
697
+ }),
698
+ retainSession: (sessionID) => {
699
+ if (!sessionID)
700
+ return () => { };
701
+ detachedSessions.delete(sessionID);
702
+ sessionConsumers.set(sessionID, (sessionConsumers.get(sessionID) ?? 0) + 1);
703
+ const evicted = pruneDetachedSessions(get().messages);
704
+ if (evicted.length > 0) {
705
+ for (const id of evicted) {
706
+ forgetSessionIds(id);
707
+ evictedSessions.add(id);
708
+ }
709
+ set((s) => dropSessionData(s, evicted));
710
+ }
711
+ let released = false;
712
+ return () => {
713
+ if (released)
714
+ return;
715
+ released = true;
716
+ const held = sessionConsumers.get(sessionID);
717
+ if (held === undefined)
718
+ return;
719
+ if (held > 1) {
720
+ sessionConsumers.set(sessionID, held - 1);
721
+ return;
722
+ }
723
+ sessionConsumers.delete(sessionID);
724
+ detachedSessions.delete(sessionID);
725
+ detachedSessions.add(sessionID);
726
+ };
727
+ },
728
+ wasTranscriptEvicted: (sessionID) => evictedSessions.has(sessionID),
729
+ buildSessionMessages: (sessionID, msgs, parts) => {
730
+ if (!msgs || msgs.length === 0)
731
+ return EMPTY_MESSAGE_ROWS;
732
+ const cached = sessionMessageRows.get(sessionID);
733
+ if (cached && cached.msgs === msgs) {
734
+ let same = cached.partRefs.length === msgs.length;
735
+ if (same) {
736
+ for (let i = 0; i < msgs.length; i++) {
737
+ if (parts[msgs[i].id] !== cached.partRefs[i]) {
738
+ same = false;
739
+ break;
740
+ }
741
+ }
742
+ }
743
+ if (same) {
744
+ touchSessionMessageRows(sessionID, cached);
745
+ return cached.result;
746
+ }
747
+ }
748
+ let previousById = null;
749
+ const partRefs = [];
750
+ const result = [];
751
+ for (let i = 0; i < msgs.length; i++) {
752
+ const info = msgs[i];
753
+ const messageParts = parts[info.id];
754
+ partRefs.push(messageParts);
755
+ let reuse;
756
+ const aligned = cached?.result[i];
757
+ if (aligned && aligned.info === info) {
758
+ if (cached.partRefs[i] === messageParts)
759
+ reuse = aligned;
760
+ }
761
+ else if (cached) {
762
+ if (!previousById) {
763
+ previousById = new Map();
764
+ for (let j = 0; j < cached.result.length; j++) {
765
+ previousById.set(cached.result[j].info.id, {
766
+ row: cached.result[j],
767
+ partRef: cached.partRefs[j],
768
+ });
769
+ }
770
+ }
771
+ const previous = previousById.get(info.id);
772
+ if (previous && previous.row.info === info && previous.partRef === messageParts) {
773
+ reuse = previous.row;
774
+ }
775
+ }
776
+ result.push(reuse ?? { info, parts: messageParts ?? [] });
777
+ }
778
+ touchSessionMessageRows(sessionID, { msgs, partRefs, result });
779
+ return result;
780
+ },
781
+ hydrate: (sessionID, msgs, opts) => {
782
+ let stampRuntimeActivity = false;
783
+ set((s) => {
784
+ evictedSessions.delete(sessionID);
785
+ const tombstones = cancelledMessageIds.get(sessionID);
786
+ const incoming = msgs
787
+ .filter((m) => !!m?.info?.id && !tombstones?.has(m.info.id))
788
+ .map((m) => m.info);
789
+ const fromCache = opts?.source === "cache";
790
+ if (fromCache) {
791
+ for (const m of incoming)
792
+ trackId(cacheSourcedIds, sessionID, m.id);
793
+ }
794
+ let droppedPhantoms = null;
795
+ const provisional = fromCache ? undefined : cacheSourcedIds.get(sessionID);
796
+ if (provisional && provisional.size > 0 && incoming.length > 0) {
797
+ let oldestIncoming = incoming[0].id;
798
+ for (const m of incoming)
799
+ if (m.id < oldestIncoming)
800
+ oldestIncoming = m.id;
801
+ const incomingIds = new Set(incoming.map((m) => m.id));
802
+ for (const id of [...provisional]) {
803
+ if (incomingIds.has(id)) {
804
+ untrackId(cacheSourcedIds, sessionID, id);
805
+ continue;
806
+ }
807
+ if (id >= oldestIncoming && !isOptimistic(sessionID, id)) {
808
+ untrackId(cacheSourcedIds, sessionID, id);
809
+ (droppedPhantoms ??= new Set()).add(id);
810
+ }
811
+ }
812
+ }
813
+ for (const info of incoming) {
814
+ if (info.role !== "assistant" || !isStubShaped(info.id))
815
+ continue;
816
+ if (!info.error)
817
+ continue;
818
+ if (stubAssistantIds.get(sessionID)?.has(info.id))
819
+ continue;
820
+ trackStub(sessionID, info.id, info.parentID ?? null);
821
+ }
822
+ const trackedStubIds = stubAssistantIds.get(sessionID);
823
+ const pendingStubs = [];
824
+ const existingAll = s.messages[sessionID] ?? [];
825
+ const existing = droppedPhantoms
826
+ ? existingAll.filter((m) => !droppedPhantoms.has(m.id))
827
+ : existingAll;
828
+ const merged = [];
829
+ const seen = new Set();
830
+ const existingIds = new Set(existing.map((m) => m.id));
831
+ if (!fromCache && existingAll.length > 0) {
832
+ const tail = incoming[incoming.length - 1];
833
+ const tailOpen = !!tail &&
834
+ tail.role === "assistant" &&
835
+ !tail.time?.completed &&
836
+ !tail.error;
837
+ if (tailOpen) {
838
+ stampRuntimeActivity =
839
+ incoming.some((m) => !existingIds.has(m.id)) ||
840
+ msgs.some((entry) => {
841
+ const mid = entry?.info?.id;
842
+ if (!mid || isOptimistic(sessionID, mid) || !existingIds.has(mid)) {
843
+ return false;
844
+ }
845
+ const prev = s.parts[mid];
846
+ if (!prev || prev.length === 0)
847
+ return (entry.parts?.length ?? 0) > 0;
848
+ const prevById = new Map(prev.map((p) => [p.id, p]));
849
+ return (entry.parts ?? []).some((p) => {
850
+ if (!p?.id)
851
+ return false;
852
+ const prevPart = prevById.get(p.id);
853
+ if (!prevPart)
854
+ return true;
855
+ return (isTextLikePart(p) &&
856
+ isTextLikePart(prevPart) &&
857
+ (p.text?.length ?? 0) > (prevPart.text?.length ?? 0));
858
+ });
859
+ });
860
+ }
861
+ }
862
+ for (const m of incoming) {
863
+ if (m.role !== "user" || !isOptimistic(sessionID, m.id))
864
+ continue;
865
+ releaseConfirmedOptimisticId(sessionID, m.id, m.id);
866
+ const optimisticParts = s.parts[m.id];
867
+ const entry = msgs.find((x) => x.info.id === m.id);
868
+ if ((entry?.parts?.length ?? 0) === 0 && optimisticParts?.length) {
869
+ trackId(bridgedPartIds, sessionID, m.id);
870
+ }
871
+ }
872
+ const candidateEchoes = incoming.filter((m) => m.role === "user" &&
873
+ !isOptimistic(sessionID, m.id) &&
874
+ !existingIds.has(m.id));
875
+ const unclaimedEchoes = new Set(candidateEchoes.map((m) => m.id));
876
+ const echoByPartId = new Map();
877
+ for (const echo of candidateEchoes) {
878
+ const entry = msgs.find((m) => m.info.id === echo.id);
879
+ for (const p of entry?.parts ?? []) {
880
+ if (p?.id)
881
+ echoByPartId.set(p.id, echo.id);
882
+ }
883
+ }
884
+ for (const m of incoming) {
885
+ merged.push(m);
886
+ seen.add(m.id);
887
+ }
888
+ const deferredOptimistic = [];
889
+ const supersededOptimistic = [];
890
+ const supersededBy = new Map();
891
+ const unmatchedOptimisticUsers = [];
892
+ for (const m of existing) {
893
+ if (!seen.has(m.id)) {
894
+ if (trackedStubIds?.has(m.id)) {
895
+ pendingStubs.push(m);
896
+ continue;
897
+ }
898
+ if (isOptimistic(sessionID, m.id)) {
899
+ if (m.role !== "user") {
900
+ deferredOptimistic.push(m);
901
+ continue;
902
+ }
903
+ const echoId = (s.parts[m.id] ?? [])
904
+ .map((p) => echoByPartId.get(p.id))
905
+ .find((id) => !!id);
906
+ if (echoId) {
907
+ supersededOptimistic.push(m.id);
908
+ supersededBy.set(m.id, echoId);
909
+ unclaimedEchoes.delete(echoId);
910
+ }
911
+ else {
912
+ unmatchedOptimisticUsers.push(m);
913
+ }
914
+ }
915
+ else {
916
+ merged.splice(insertIndexByTime(merged, m), 0, m);
917
+ }
918
+ }
919
+ }
920
+ const claimed = new Set();
921
+ for (const m of unmatchedOptimisticUsers) {
922
+ const alias = optimisticEchoes.get(sessionID)?.get(m.id);
923
+ if (alias && unclaimedEchoes.has(alias) && !claimed.has(alias)) {
924
+ claimed.add(alias);
925
+ supersededOptimistic.push(m.id);
926
+ supersededBy.set(m.id, alias);
927
+ }
928
+ }
929
+ const claimable = candidateEchoes.filter((m) => unclaimedEchoes.has(m.id) && !claimed.has(m.id));
930
+ let next = 0;
931
+ for (const m of unmatchedOptimisticUsers) {
932
+ if (supersededBy.has(m.id))
933
+ continue;
934
+ const echo = isDispatched(sessionID, m.id) &&
935
+ !hasTrackedId(inboxBackedOptimisticIds, sessionID, m.id) &&
936
+ !optimisticEchoes.get(sessionID)?.get(m.id)
937
+ ? claimable[next]
938
+ : undefined;
939
+ if (echo) {
940
+ next += 1;
941
+ supersededOptimistic.push(m.id);
942
+ supersededBy.set(m.id, echo.id);
943
+ }
944
+ else {
945
+ deferredOptimistic.push(m);
946
+ }
947
+ }
948
+ for (const id of supersededOptimistic) {
949
+ const echoId = supersededBy.get(id);
950
+ if (echoId) {
951
+ releaseConfirmedOptimisticId(sessionID, id, echoId);
952
+ recordOptimisticEcho(sessionID, id, echoId);
953
+ }
954
+ else {
955
+ releaseOptimisticId(sessionID, id);
956
+ }
957
+ }
958
+ for (const m of deferredOptimistic) {
959
+ merged.push(m);
960
+ }
961
+ for (const stub of pendingStubs) {
962
+ const trackedParent = trackedStubIds?.get(stub.id) ?? null;
963
+ const parentId = (trackedParent && supersededBy.get(trackedParent)) || trackedParent;
964
+ untrackStub(sessionID, stub.id);
965
+ if (hasAssistantForTurn(incoming, parentId)) {
966
+ const replyIdx = findAssistantForTurn(merged, parentId);
967
+ const reply = replyIdx === -1 ? undefined : merged[replyIdx];
968
+ const stubError = stub.error;
969
+ if (reply && !reply.error && stubError) {
970
+ merged[replyIdx] = { ...reply, error: stubError };
971
+ }
972
+ continue;
973
+ }
974
+ const stubId = parentId ? stubIdFor(parentId) : stub.id;
975
+ const placed = stubId === stub.id && stub.parentID === (parentId ?? undefined)
976
+ ? stub
977
+ : { ...stub, id: stubId, ...(parentId ? { parentID: parentId } : {}) };
978
+ trackStub(sessionID, stubId, parentId);
979
+ const parentIdx = parentId ? merged.findIndex((m) => m.id === parentId) : -1;
980
+ if (parentIdx !== -1) {
981
+ merged.splice(parentIdx + 1, 0, placed);
982
+ continue;
983
+ }
984
+ if (indexOfId(merged, placed.id, (x) => x.id) === -1) {
985
+ merged.splice(insertIndexByTime(merged, placed), 0, placed);
986
+ }
987
+ }
988
+ const newParts = { ...s.parts };
989
+ if (droppedPhantoms)
990
+ for (const id of droppedPhantoms)
991
+ delete newParts[id];
992
+ for (const id of supersededOptimistic) {
993
+ const echoId = supersededBy.get(id);
994
+ const bridge = newParts[id];
995
+ delete newParts[id];
996
+ if (!echoId || !bridge?.length)
997
+ continue;
998
+ const echoEntry = msgs.find((m) => m.info.id === echoId);
999
+ const serverHasParts = (echoEntry?.parts?.length ?? 0) > 0;
1000
+ if (serverHasParts || newParts[echoId]?.length)
1001
+ continue;
1002
+ newParts[echoId] = bridge;
1003
+ trackId(bridgedPartIds, sessionID, echoId);
1004
+ }
1005
+ reconcileHydratedParts(msgs, newParts, {
1006
+ isOptimistic: (id) => isOptimistic(sessionID, id),
1007
+ isBridged: (id) => hasTrackedId(bridgedPartIds, sessionID, id),
1008
+ clearBridge: (id) => untrackId(bridgedPartIds, sessionID, id),
1009
+ isDeltaActive: (id) => hasTrackedId(deltaActiveParts, sessionID, id),
1010
+ });
1011
+ return {
1012
+ messages: { ...s.messages, [sessionID]: merged },
1013
+ parts: newParts,
1014
+ };
1015
+ });
1016
+ if (stampRuntimeActivity)
1017
+ get().noteSessionActivity(sessionID);
1018
+ },
1019
+ reset: () => {
1020
+ optimisticIds.clear();
1021
+ dispatchedOptimisticIds.clear();
1022
+ inboxBackedOptimisticIds.clear();
1023
+ optimisticEchoes.clear();
1024
+ optimisticOrigins.clear();
1025
+ bridgedPartIds.clear();
1026
+ deltaActiveParts.clear();
1027
+ deltaEventTails.clear();
1028
+ stubAssistantIds.clear();
1029
+ sessionConsumers.clear();
1030
+ detachedSessions.clear();
1031
+ evictedSessions.clear();
1032
+ sessionMessageRows.clear();
1033
+ set({
1034
+ messages: {},
1035
+ parts: {},
1036
+ sessionStatus: {},
1037
+ sessionStatusOrigin: {},
1038
+ sessionStatusAt: {},
1039
+ sessionActivityAt: {},
1040
+ diffs: {},
1041
+ todos: {},
1042
+ sessionRevert: {},
1043
+ sessionRevertNeedsTailReconcile: {},
1044
+ });
1045
+ },
1046
+ hasOptimisticMessages: (sessionID) => {
1047
+ const list = get().messages[sessionID];
1048
+ if (!list || list.length === 0)
1049
+ return false;
1050
+ return list.some((m) => isOptimistic(sessionID, m.id));
1051
+ },
1052
+ getMessages: (sessionID) => {
1053
+ const s = get();
1054
+ const msgs = s.messages[sessionID];
1055
+ if (!msgs)
1056
+ return [];
1057
+ return msgs.map((info) => ({
1058
+ info,
1059
+ parts: s.parts[info.id] ?? [],
1060
+ }));
1061
+ },
1062
+ applyEvent: (event) => {
1063
+ const store = get();
1064
+ switch (event.type) {
1065
+ case "message.updated": {
1066
+ {
1067
+ const info = event.properties?.info;
1068
+ const sid = info?.sessionID ?? event.properties?.sessionID;
1069
+ if (sid && isOpenMessage(info))
1070
+ get().noteSessionActivity(sid);
1071
+ }
1072
+ const info = event.properties.info;
1073
+ if (!info?.sessionID)
1074
+ return;
1075
+ if (cancelledMessageIds.get(info.sessionID)?.has(info.id))
1076
+ return;
1077
+ if (info.role === "user" && isOptimistic(info.sessionID, info.id)) {
1078
+ releaseOptimisticId(info.sessionID, info.id);
1079
+ if (get().parts[info.id]?.length) {
1080
+ trackId(bridgedPartIds, info.sessionID, info.id);
1081
+ }
1082
+ store.upsertMessage(info.sessionID, info);
1083
+ return;
1084
+ }
1085
+ if (info.role === "user" && !isOptimistic(info.sessionID, info.id)) {
1086
+ const msgs = get().messages[info.sessionID];
1087
+ if (msgs) {
1088
+ if (msgs.some((message) => message.id === info.id)) {
1089
+ store.upsertMessage(info.sessionID, info);
1090
+ return;
1091
+ }
1092
+ const state = get();
1093
+ const optimisticUsers = msgs.filter((m) => m.role === "user" && isOptimistic(info.sessionID, m.id));
1094
+ const incomingPartIds = new Set((state.parts[info.id] ?? []).map((p) => p.id));
1095
+ const byPartId = optimisticUsers.find((m) => (state.parts[m.id] ?? []).some((p) => incomingPartIds.has(p.id)));
1096
+ const byAlias = optimisticUsers.find((m) => optimisticEchoes.get(info.sessionID)?.get(m.id) === info.id);
1097
+ const eligible = optimisticUsers.filter((m) => isDispatched(info.sessionID, m.id) &&
1098
+ !hasTrackedId(inboxBackedOptimisticIds, info.sessionID, m.id) &&
1099
+ !optimisticEchoes.get(info.sessionID)?.get(m.id));
1100
+ const matched = byPartId ?? byAlias ?? (eligible.length === 1 ? eligible[0] : undefined);
1101
+ const optIds = matched ? [matched.id] : [];
1102
+ if (optIds.length > 0) {
1103
+ for (const id of optIds) {
1104
+ releaseConfirmedOptimisticId(info.sessionID, id, info.id);
1105
+ recordOptimisticEcho(info.sessionID, id, info.id);
1106
+ }
1107
+ set((s) => {
1108
+ const list = s.messages[info.sessionID] ?? [];
1109
+ const without = list.filter((m) => !optIds.includes(m.id));
1110
+ const at = indexOfId(without, info.id, (m) => m.id);
1111
+ let next = [...without];
1112
+ if (at !== -1) {
1113
+ next[at] = info;
1114
+ }
1115
+ else {
1116
+ next.splice(insertIndexByTime(next, info), 0, info);
1117
+ }
1118
+ for (const id of optIds) {
1119
+ next = rekeyStubParent(info.sessionID, next, id, info.id);
1120
+ }
1121
+ const newParts = { ...s.parts };
1122
+ let bridge;
1123
+ for (const id of optIds) {
1124
+ if (!bridge && newParts[id]?.length) {
1125
+ bridge = newParts[id];
1126
+ }
1127
+ delete newParts[id];
1128
+ }
1129
+ if (bridge && !newParts[info.id]?.length) {
1130
+ newParts[info.id] = bridge;
1131
+ trackId(bridgedPartIds, info.sessionID, info.id);
1132
+ }
1133
+ return {
1134
+ messages: { ...s.messages, [info.sessionID]: next },
1135
+ parts: newParts,
1136
+ };
1137
+ });
1138
+ return;
1139
+ }
1140
+ }
1141
+ }
1142
+ store.upsertMessage(info.sessionID, info);
1143
+ return;
1144
+ }
1145
+ case "message.removed": {
1146
+ const props = event.properties;
1147
+ if (!props.sessionID || !props.messageID)
1148
+ return;
1149
+ if (store.reclaimRemovedMessage(props.sessionID, props.messageID))
1150
+ return;
1151
+ store.removeMessage(props.sessionID, props.messageID);
1152
+ return;
1153
+ }
1154
+ case "message.part.updated": {
1155
+ const part = event.properties.part;
1156
+ if (!part?.messageID)
1157
+ return;
1158
+ const eventSessionID = event.properties?.sessionID;
1159
+ let resolvedSessionID = part.sessionID ?? eventSessionID;
1160
+ if (!resolvedSessionID) {
1161
+ const sessionsById = get().messages;
1162
+ for (const [sid, msgs] of Object.entries(sessionsById)) {
1163
+ if (msgs?.some((m) => m.id === part.messageID)) {
1164
+ resolvedSessionID = sid;
1165
+ break;
1166
+ }
1167
+ }
1168
+ }
1169
+ if (resolvedSessionID && isOpenPart(part))
1170
+ get().noteSessionActivity(resolvedSessionID);
1171
+ const existingMsgs = resolvedSessionID
1172
+ ? get().messages[resolvedSessionID]
1173
+ : undefined;
1174
+ const exists = existingMsgs?.some((m) => m.id === part.messageID);
1175
+ const sessionHasUserMessage = existingMsgs?.some((m) => m.role === "user") ?? false;
1176
+ if (!exists &&
1177
+ resolvedSessionID &&
1178
+ sessionHasUserMessage &&
1179
+ !awaitsUserEcho(resolvedSessionID, part.messageID)) {
1180
+ store.upsertMessage(resolvedSessionID, {
1181
+ id: part.messageID,
1182
+ sessionID: resolvedSessionID,
1183
+ role: "assistant",
1184
+ });
1185
+ }
1186
+ store.upsertPart(part.messageID, part, resolvedSessionID);
1187
+ return;
1188
+ }
1189
+ case "message.part.removed": {
1190
+ const props = event.properties;
1191
+ if (!props.messageID || !props.partID)
1192
+ return;
1193
+ store.removePart(props.messageID, props.partID);
1194
+ return;
1195
+ }
1196
+ case "message.part.delta": {
1197
+ const props = event.properties;
1198
+ if (!props.messageID || !props.partID || !props.field)
1199
+ return;
1200
+ const partList = get().parts[props.messageID];
1201
+ const partExists = partList && partList.some((p) => p.id === props.partID);
1202
+ if (!partExists) {
1203
+ if (props.sessionID) {
1204
+ const existingMsgs = get().messages[props.sessionID];
1205
+ const hasUserMsg = existingMsgs?.some((m) => m.role === "user");
1206
+ const msgExists = existingMsgs?.some((m) => m.id === props.messageID);
1207
+ if (!msgExists && hasUserMsg) {
1208
+ store.upsertMessage(props.sessionID, {
1209
+ id: props.messageID,
1210
+ sessionID: props.sessionID,
1211
+ role: "assistant",
1212
+ });
1213
+ }
1214
+ }
1215
+ store.upsertPart(props.messageID, {
1216
+ id: props.partID,
1217
+ sessionID: props.sessionID,
1218
+ messageID: props.messageID,
1219
+ type: "text",
1220
+ [props.field]: "",
1221
+ });
1222
+ }
1223
+ const wire = event.coalesced ?? [event];
1224
+ appendPartDeltas(props.sessionID, props.messageID, props.partID, props.field, wire.map((e) => ({
1225
+ id: e.id,
1226
+ delta: e.properties.delta,
1227
+ })));
1228
+ return;
1229
+ }
1230
+ case "session.status": {
1231
+ const props = event.properties;
1232
+ if (props.sessionID && props.status)
1233
+ store.setStatus(props.sessionID, props.status, syntheticEventOrigin(event));
1234
+ return;
1235
+ }
1236
+ case "session.idle": {
1237
+ const sessionID = event.properties.sessionID;
1238
+ if (sessionID)
1239
+ store.setStatus(sessionID, { type: "idle" }, syntheticEventOrigin(event));
1240
+ if (sessionID)
1241
+ deltaActiveParts.delete(sessionID);
1242
+ return;
1243
+ }
1244
+ case "session.error": {
1245
+ const props = event.properties;
1246
+ if (!props.sessionID || !props.error)
1247
+ return;
1248
+ const sid = props.sessionID;
1249
+ const error = props.error;
1250
+ if (!isRetryableTurnError(error)) {
1251
+ store.setStatus(sid, { type: "idle" }, syntheticEventOrigin(event));
1252
+ }
1253
+ deltaActiveParts.delete(sid);
1254
+ deltaEventTails.delete(sid);
1255
+ set((s) => {
1256
+ const msgs = s.messages[sid] ?? [];
1257
+ let userIdx = -1;
1258
+ for (let i = msgs.length - 1; i >= 0; i--) {
1259
+ if (msgs[i].role === "user") {
1260
+ userIdx = i;
1261
+ break;
1262
+ }
1263
+ }
1264
+ const userId = userIdx === -1 ? null : msgs[userIdx].id;
1265
+ for (let i = msgs.length - 1; i > userIdx; i--) {
1266
+ const msg = msgs[i];
1267
+ if (msg.role !== "assistant")
1268
+ continue;
1269
+ if (userId && msg.parentID && msg.parentID !== userId)
1270
+ continue;
1271
+ if (msg.error)
1272
+ return s;
1273
+ const next = [...msgs];
1274
+ next[i] = { ...msg, error };
1275
+ return { messages: { ...s.messages, [sid]: next } };
1276
+ }
1277
+ const stubId = userId ? stubIdFor(userId) : ascendingId("msg");
1278
+ if (msgs.some((m) => m.id === stubId))
1279
+ return s;
1280
+ trackStub(sid, stubId, userId);
1281
+ const stubMsg = {
1282
+ id: stubId,
1283
+ sessionID: sid,
1284
+ role: "assistant",
1285
+ ...(userId ? { parentID: userId } : {}),
1286
+ error,
1287
+ };
1288
+ const next = [...msgs];
1289
+ next.splice(userIdx === -1 ? next.length : userIdx + 1, 0, stubMsg);
1290
+ return { messages: { ...s.messages, [sid]: next } };
1291
+ });
1292
+ return;
1293
+ }
1294
+ case "session.next.revert.staged": {
1295
+ const props = event.properties;
1296
+ if (props.sessionID && props.revert?.messageID) {
1297
+ store.stageSessionRevert(props.sessionID, props.revert.messageID);
1298
+ }
1299
+ return;
1300
+ }
1301
+ case "session.next.revert.cleared": {
1302
+ const props = event.properties;
1303
+ if (props.sessionID)
1304
+ store.clearSessionRevert(props.sessionID);
1305
+ return;
1306
+ }
1307
+ case "session.next.revert.committed": {
1308
+ const props = event.properties;
1309
+ if (props.sessionID && props.messageID) {
1310
+ const tracked = get().sessionRevert[props.sessionID];
1311
+ if (tracked) {
1312
+ store.applyCommittedRevert(props.sessionID, props.messageID, tracked.watermark, tracked.messageId === props.messageID ? tracked.hiddenIds : undefined);
1313
+ }
1314
+ else {
1315
+ store.markSessionRevertNeedsTailReconcile(props.sessionID);
1316
+ }
1317
+ }
1318
+ return;
1319
+ }
1320
+ case "session.diff": {
1321
+ const props = event.properties;
1322
+ if (props.sessionID)
1323
+ store.setDiff(props.sessionID, props.diff);
1324
+ return;
1325
+ }
1326
+ case "todo.updated": {
1327
+ const props = event.properties;
1328
+ if (props.sessionID)
1329
+ store.setTodo(props.sessionID, props.todos);
1330
+ return;
1331
+ }
1332
+ default:
1333
+ return;
1334
+ }
1335
+ },
1336
+ }));