@kortix/sdk 0.11.0 → 0.12.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 (194) hide show
  1. package/README.md +110 -73
  2. package/dist/browser/cache/idb-sync-cache-key.d.ts +2 -0
  3. package/dist/browser/cache/idb-sync-cache-key.d.ts.map +1 -0
  4. package/dist/browser/cache/idb-sync-cache-key.js +7 -0
  5. package/dist/browser/cache/idb-sync-cache-key.js.map +1 -0
  6. package/dist/browser/cache/idb-sync-cache.d.ts +3 -3
  7. package/dist/browser/cache/idb-sync-cache.d.ts.map +1 -1
  8. package/dist/browser/cache/idb-sync-cache.js +49 -26
  9. package/dist/browser/cache/idb-sync-cache.js.map +1 -1
  10. package/dist/browser/session-sync/session-cache-ownership.d.ts +36 -0
  11. package/dist/browser/session-sync/session-cache-ownership.d.ts.map +1 -0
  12. package/dist/browser/session-sync/session-cache-ownership.js +66 -0
  13. package/dist/browser/session-sync/session-cache-ownership.js.map +1 -0
  14. package/dist/browser/session-sync/session-sync-registry.d.ts +8 -6
  15. package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
  16. package/dist/browser/session-sync/session-sync-registry.js +86 -33
  17. package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
  18. package/dist/browser/session-sync/session-transcript-cache.d.ts +55 -0
  19. package/dist/browser/session-sync/session-transcript-cache.d.ts.map +1 -0
  20. package/dist/browser/session-sync/session-transcript-cache.js +69 -0
  21. package/dist/browser/session-sync/session-transcript-cache.js.map +1 -0
  22. package/dist/core/client/kortix.d.ts +72 -25
  23. package/dist/core/client/kortix.d.ts.map +1 -1
  24. package/dist/core/client/kortix.js +76 -17
  25. package/dist/core/client/kortix.js.map +1 -1
  26. package/dist/core/rest/platform-client/host-boundary.d.ts +7 -0
  27. package/dist/core/rest/platform-client/host-boundary.d.ts.map +1 -1
  28. package/dist/core/rest/platform-client/host-boundary.js +14 -0
  29. package/dist/core/rest/platform-client/host-boundary.js.map +1 -1
  30. package/dist/core/rest/projects-client/access.d.ts +1 -2
  31. package/dist/core/rest/projects-client/access.d.ts.map +1 -1
  32. package/dist/core/rest/projects-client/access.js +9 -6
  33. package/dist/core/rest/projects-client/access.js.map +1 -1
  34. package/dist/core/rest/projects-client/agent-config.d.ts +15 -7
  35. package/dist/core/rest/projects-client/agent-config.d.ts.map +1 -1
  36. package/dist/core/rest/projects-client/agent-config.js +43 -2
  37. package/dist/core/rest/projects-client/agent-config.js.map +1 -1
  38. package/dist/core/rest/projects-client/agent-scope.d.ts +4 -0
  39. package/dist/core/rest/projects-client/agent-scope.d.ts.map +1 -1
  40. package/dist/core/rest/projects-client/agent-scope.js +34 -1
  41. package/dist/core/rest/projects-client/agent-scope.js.map +1 -1
  42. package/dist/core/rest/projects-client/audit.d.ts +34 -0
  43. package/dist/core/rest/projects-client/audit.d.ts.map +1 -1
  44. package/dist/core/rest/projects-client/audit.js +49 -4
  45. package/dist/core/rest/projects-client/audit.js.map +1 -1
  46. package/dist/core/rest/projects-client/billing.d.ts +26 -14
  47. package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
  48. package/dist/core/rest/projects-client/billing.js +4 -5
  49. package/dist/core/rest/projects-client/billing.js.map +1 -1
  50. package/dist/core/rest/projects-client/connectors.d.ts +106 -45
  51. package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
  52. package/dist/core/rest/projects-client/connectors.js +95 -58
  53. package/dist/core/rest/projects-client/connectors.js.map +1 -1
  54. package/dist/core/rest/projects-client/iam.d.ts +17 -0
  55. package/dist/core/rest/projects-client/iam.d.ts.map +1 -1
  56. package/dist/core/rest/projects-client/iam.js +14 -0
  57. package/dist/core/rest/projects-client/iam.js.map +1 -1
  58. package/dist/core/rest/projects-client/index.d.ts +1 -0
  59. package/dist/core/rest/projects-client/index.d.ts.map +1 -1
  60. package/dist/core/rest/projects-client/index.js +1 -0
  61. package/dist/core/rest/projects-client/index.js.map +1 -1
  62. package/dist/core/rest/projects-client/policies.d.ts +18 -0
  63. package/dist/core/rest/projects-client/policies.d.ts.map +1 -1
  64. package/dist/core/rest/projects-client/policies.js.map +1 -1
  65. package/dist/core/rest/projects-client/projects.d.ts +8 -1
  66. package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
  67. package/dist/core/rest/projects-client/projects.js.map +1 -1
  68. package/dist/core/rest/projects-client/sandbox.d.ts +50 -0
  69. package/dist/core/rest/projects-client/sandbox.d.ts.map +1 -1
  70. package/dist/core/rest/projects-client/sandbox.js.map +1 -1
  71. package/dist/core/rest/projects-client/session-costs.d.ts +102 -0
  72. package/dist/core/rest/projects-client/session-costs.d.ts.map +1 -0
  73. package/dist/core/rest/projects-client/session-costs.js +25 -0
  74. package/dist/core/rest/projects-client/session-costs.js.map +1 -0
  75. package/dist/core/rest/projects-client/session-sandbox.d.ts +0 -2
  76. package/dist/core/rest/projects-client/session-sandbox.d.ts.map +1 -1
  77. package/dist/core/rest/projects-client/session-sandbox.js +1 -10
  78. package/dist/core/rest/projects-client/session-sandbox.js.map +1 -1
  79. package/dist/core/rest/projects-client/sessions.d.ts +80 -44
  80. package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
  81. package/dist/core/rest/projects-client/sessions.js +9 -15
  82. package/dist/core/rest/projects-client/sessions.js.map +1 -1
  83. package/dist/core/rest/projects-client/setup-links.d.ts +37 -0
  84. package/dist/core/rest/projects-client/setup-links.d.ts.map +1 -1
  85. package/dist/core/rest/projects-client/setup-links.js +11 -0
  86. package/dist/core/rest/projects-client/setup-links.js.map +1 -1
  87. package/dist/core/session/index.d.ts +1 -1
  88. package/dist/core/session/index.d.ts.map +1 -1
  89. package/dist/core/session/index.js +1 -1
  90. package/dist/core/session/index.js.map +1 -1
  91. package/dist/core/session/preview-auth.d.ts +32 -0
  92. package/dist/core/session/preview-auth.d.ts.map +1 -0
  93. package/dist/core/session/preview-auth.js +53 -0
  94. package/dist/core/session/preview-auth.js.map +1 -0
  95. package/dist/core/session/server-store/url-helpers.d.ts.map +1 -1
  96. package/dist/core/session/server-store/url-helpers.js +5 -3
  97. package/dist/core/session/server-store/url-helpers.js.map +1 -1
  98. package/dist/core/session-sync/session-sync-controller.d.ts +12 -1
  99. package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
  100. package/dist/core/session-sync/session-sync-controller.js +34 -2
  101. package/dist/core/session-sync/session-sync-controller.js.map +1 -1
  102. package/dist/index.d.ts +1 -2
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +0 -1
  105. package/dist/index.js.map +1 -1
  106. package/dist/kortix.esm.min.js +19 -24
  107. package/dist/kortix.global.js +19 -24
  108. package/dist/platform/auth-core.d.ts +5 -3
  109. package/dist/platform/auth-core.d.ts.map +1 -1
  110. package/dist/platform/auth-core.js +6 -4
  111. package/dist/platform/auth-core.js.map +1 -1
  112. package/dist/react/index.d.ts +0 -1
  113. package/dist/react/index.d.ts.map +1 -1
  114. package/dist/react/index.js +0 -1
  115. package/dist/react/index.js.map +1 -1
  116. package/dist/react/model-flatten.d.ts +8 -0
  117. package/dist/react/model-flatten.d.ts.map +1 -1
  118. package/dist/react/model-flatten.js +1 -0
  119. package/dist/react/model-flatten.js.map +1 -1
  120. package/dist/react/opencode.d.ts +1 -1
  121. package/dist/react/opencode.d.ts.map +1 -1
  122. package/dist/react/opencode.js +1 -1
  123. package/dist/react/opencode.js.map +1 -1
  124. package/dist/react/session-title-sync.d.ts +9 -5
  125. package/dist/react/session-title-sync.d.ts.map +1 -1
  126. package/dist/react/session-title-sync.js +14 -10
  127. package/dist/react/session-title-sync.js.map +1 -1
  128. package/dist/react/use-canonical-opencode-session.d.ts +2 -2
  129. package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
  130. package/dist/react/use-model-store.d.ts +6 -14
  131. package/dist/react/use-model-store.d.ts.map +1 -1
  132. package/dist/react/use-model-store.js +30 -52
  133. package/dist/react/use-model-store.js.map +1 -1
  134. package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -1
  135. package/dist/react/use-opencode-events/handle-event.js +103 -41
  136. package/dist/react/use-opencode-events/handle-event.js.map +1 -1
  137. package/dist/react/use-opencode-sessions/keys.d.ts +3 -1
  138. package/dist/react/use-opencode-sessions/keys.d.ts.map +1 -1
  139. package/dist/react/use-opencode-sessions/keys.js +2 -0
  140. package/dist/react/use-opencode-sessions/keys.js.map +1 -1
  141. package/dist/react/use-opencode-sessions/sessions.d.ts.map +1 -1
  142. package/dist/react/use-opencode-sessions/sessions.js +16 -7
  143. package/dist/react/use-opencode-sessions/sessions.js.map +1 -1
  144. package/dist/react/use-opencode-sessions/shared.d.ts +3 -2
  145. package/dist/react/use-opencode-sessions/shared.d.ts.map +1 -1
  146. package/dist/react/use-opencode-sessions/shared.js +6 -3
  147. package/dist/react/use-opencode-sessions/shared.js.map +1 -1
  148. package/dist/react/use-opencode-sessions/sharing.js +2 -2
  149. package/dist/react/use-opencode-sessions/sharing.js.map +1 -1
  150. package/dist/react/use-session-sync.d.ts +13 -1
  151. package/dist/react/use-session-sync.d.ts.map +1 -1
  152. package/dist/react/use-session-sync.js +85 -17
  153. package/dist/react/use-session-sync.js.map +1 -1
  154. package/dist/react/use-session.d.ts +36 -39
  155. package/dist/react/use-session.d.ts.map +1 -1
  156. package/dist/react/use-session.js +100 -205
  157. package/dist/react/use-session.js.map +1 -1
  158. package/package.json +2 -2
  159. package/dist/core/acp/client.d.ts +0 -45
  160. package/dist/core/acp/client.d.ts.map +0 -1
  161. package/dist/core/acp/client.js +0 -277
  162. package/dist/core/acp/client.js.map +0 -1
  163. package/dist/core/acp/index.d.ts +0 -5
  164. package/dist/core/acp/index.d.ts.map +0 -1
  165. package/dist/core/acp/index.js +0 -5
  166. package/dist/core/acp/index.js.map +0 -1
  167. package/dist/core/acp/projection.d.ts +0 -23
  168. package/dist/core/acp/projection.d.ts.map +0 -1
  169. package/dist/core/acp/projection.js +0 -603
  170. package/dist/core/acp/projection.js.map +0 -1
  171. package/dist/core/acp/session-controller.d.ts +0 -90
  172. package/dist/core/acp/session-controller.d.ts.map +0 -1
  173. package/dist/core/acp/session-controller.js +0 -530
  174. package/dist/core/acp/session-controller.js.map +0 -1
  175. package/dist/core/acp/types.d.ts +0 -66
  176. package/dist/core/acp/types.d.ts.map +0 -1
  177. package/dist/core/acp/types.js +0 -21
  178. package/dist/core/acp/types.js.map +0 -1
  179. package/dist/core/session/runtime-transport.d.ts +0 -16
  180. package/dist/core/session/runtime-transport.d.ts.map +0 -1
  181. package/dist/core/session/runtime-transport.js +0 -30
  182. package/dist/core/session/runtime-transport.js.map +0 -1
  183. package/dist/react/session-busy.d.ts +0 -8
  184. package/dist/react/session-busy.d.ts.map +0 -1
  185. package/dist/react/session-busy.js +0 -4
  186. package/dist/react/session-busy.js.map +0 -1
  187. package/dist/react/use-acp-session-runtime.d.ts +0 -34
  188. package/dist/react/use-acp-session-runtime.d.ts.map +0 -1
  189. package/dist/react/use-acp-session-runtime.js +0 -84
  190. package/dist/react/use-acp-session-runtime.js.map +0 -1
  191. package/dist/react/use-admin-users.d.ts +0 -98
  192. package/dist/react/use-admin-users.d.ts.map +0 -1
  193. package/dist/react/use-admin-users.js +0 -121
  194. package/dist/react/use-admin-users.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Tracks which sandbox currently owns each bare OpenCode session id in the
3
+ * compatibility sync store. OpenCode ids are local to a sandbox. A restored
4
+ * snapshot can therefore expose the same id from two different sandboxes.
5
+ *
6
+ * Two kinds of owner scope exist, and the difference matters:
7
+ *
8
+ * - `kortix:<projectId>/<sessionId>` — AUTHORITATIVE. The consumer was told
9
+ * which Kortix session it is reading, so it survives a sandbox replacement
10
+ * for that session (the transcript is not wiped when the box is re-created).
11
+ * - `runtime:<sandboxId>` — FALLBACK, for a standalone consumer that was given
12
+ * nothing but a bare OpenCode id.
13
+ *
14
+ * The two kinds must never be read as a disagreement. They describe the SAME
15
+ * session from two consumers that simply know different amounts about it, and
16
+ * both live in the one active runtime. Treating that as a collision made the
17
+ * two hooks evict each other: whichever claimed last owned the id, and the
18
+ * other one read an empty transcript for the rest of the page's life.
19
+ */
20
+ export declare function resolveSessionCacheOwnerScope(runtimeScope: string, kortixSessionScope?: string): string | null;
21
+ /**
22
+ * Do two owner scopes name genuinely DIFFERENT owners of the same OpenCode id
23
+ * — i.e. is the cached data for this id foreign to the asking consumer?
24
+ *
25
+ * Only two scopes of the same KIND can disagree. That is the real case this
26
+ * module exists to catch: another sandbox (or another Kortix session) reusing
27
+ * an OpenCode id. A fallback scope never contradicts an authoritative one.
28
+ */
29
+ export declare function sessionCacheOwnerScopesConflict(a: string | null, b: string | null): boolean;
30
+ export declare function getSessionCacheOwnership(sessionId: string): string | null;
31
+ export declare function claimSessionCacheOwnership(sessionId: string, ownerScope: string): {
32
+ changed: boolean;
33
+ previousOwnerScope: string | null;
34
+ };
35
+ export declare function resetSessionCacheOwnership(): void;
36
+ //# sourceMappingURL=session-cache-ownership.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cache-ownership.d.ts","sourceRoot":"","sources":["../../../src/browser/session-sync/session-cache-ownership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,MAAM,GAAG,IAAI,CAIf;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAG3F;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzE;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAgBzD;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Tracks which sandbox currently owns each bare OpenCode session id in the
3
+ * compatibility sync store. OpenCode ids are local to a sandbox. A restored
4
+ * snapshot can therefore expose the same id from two different sandboxes.
5
+ *
6
+ * Two kinds of owner scope exist, and the difference matters:
7
+ *
8
+ * - `kortix:<projectId>/<sessionId>` — AUTHORITATIVE. The consumer was told
9
+ * which Kortix session it is reading, so it survives a sandbox replacement
10
+ * for that session (the transcript is not wiped when the box is re-created).
11
+ * - `runtime:<sandboxId>` — FALLBACK, for a standalone consumer that was given
12
+ * nothing but a bare OpenCode id.
13
+ *
14
+ * The two kinds must never be read as a disagreement. They describe the SAME
15
+ * session from two consumers that simply know different amounts about it, and
16
+ * both live in the one active runtime. Treating that as a collision made the
17
+ * two hooks evict each other: whichever claimed last owned the id, and the
18
+ * other one read an empty transcript for the rest of the page's life.
19
+ */
20
+ const owners = new Map();
21
+ const AUTHORITATIVE_PREFIX = 'kortix:';
22
+ function isAuthoritative(ownerScope) {
23
+ return ownerScope.startsWith(AUTHORITATIVE_PREFIX);
24
+ }
25
+ export function resolveSessionCacheOwnerScope(runtimeScope, kortixSessionScope) {
26
+ if (kortixSessionScope)
27
+ return `${AUTHORITATIVE_PREFIX}${kortixSessionScope}`;
28
+ if (!runtimeScope || runtimeScope === 'none')
29
+ return null;
30
+ return `runtime:${runtimeScope}`;
31
+ }
32
+ /**
33
+ * Do two owner scopes name genuinely DIFFERENT owners of the same OpenCode id
34
+ * — i.e. is the cached data for this id foreign to the asking consumer?
35
+ *
36
+ * Only two scopes of the same KIND can disagree. That is the real case this
37
+ * module exists to catch: another sandbox (or another Kortix session) reusing
38
+ * an OpenCode id. A fallback scope never contradicts an authoritative one.
39
+ */
40
+ export function sessionCacheOwnerScopesConflict(a, b) {
41
+ if (!a || !b || a === b)
42
+ return false;
43
+ return isAuthoritative(a) === isAuthoritative(b);
44
+ }
45
+ export function getSessionCacheOwnership(sessionId) {
46
+ return owners.get(sessionId) ?? null;
47
+ }
48
+ export function claimSessionCacheOwnership(sessionId, ownerScope) {
49
+ const previousOwnerScope = getSessionCacheOwnership(sessionId);
50
+ if (previousOwnerScope === ownerScope) {
51
+ return { changed: false, previousOwnerScope };
52
+ }
53
+ // A fallback claim never displaces an authoritative one — the consumer that
54
+ // knows which Kortix session this is stays the owner of record.
55
+ if (previousOwnerScope !== null &&
56
+ !isAuthoritative(ownerScope) &&
57
+ isAuthoritative(previousOwnerScope)) {
58
+ return { changed: false, previousOwnerScope };
59
+ }
60
+ owners.set(sessionId, ownerScope);
61
+ return { changed: true, previousOwnerScope };
62
+ }
63
+ export function resetSessionCacheOwnership() {
64
+ owners.clear();
65
+ }
66
+ //# sourceMappingURL=session-cache-ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cache-ownership.js","sourceRoot":"","sources":["../../../src/browser/session-sync/session-cache-ownership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEzC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAEvC,SAAS,eAAe,CAAC,UAAkB;IACzC,OAAO,UAAU,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,YAAoB,EACpB,kBAA2B;IAE3B,IAAI,kBAAkB;QAAE,OAAO,GAAG,oBAAoB,GAAG,kBAAkB,EAAE,CAAC;IAC9E,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,WAAW,YAAY,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,+BAA+B,CAAC,CAAgB,EAAE,CAAgB;IAChF,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACxD,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,UAAkB;IAElB,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC/D,IAAI,kBAAkB,KAAK,UAAU,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAChD,CAAC;IACD,4EAA4E;IAC5E,gEAAgE;IAChE,IACE,kBAAkB,KAAK,IAAI;QAC3B,CAAC,eAAe,CAAC,UAAU,CAAC;QAC5B,eAAe,CAAC,kBAAkB,CAAC,EACnC,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -25,18 +25,20 @@ export declare function readSessionMessagePage(client: SessionMessageClient, ses
25
25
  limit: number;
26
26
  before?: string;
27
27
  }): Promise<SessionSyncPage>;
28
- export declare function getSessionSyncController(sessionId: string, client?: SessionMessageClient): SessionSyncController;
28
+ export declare function getSessionSyncController(sessionId: string, client?: SessionMessageClient, runtimeScope?: string): SessionSyncController;
29
29
  export declare function prefetchSessionSyncOnce(sessionId: string, source: SessionPrefetchSource, client?: SessionMessageClient): Promise<boolean>;
30
30
  export declare function clearActiveSessionPrefetches(): void;
31
- export declare function retainSessionSyncController(sessionId: string): () => void;
32
- export declare function reconcileSessionTail(sessionId: string, reason: SessionSyncReason): Promise<void>;
33
- export declare function beginSessionPromptObservation(sessionId: string): void;
34
- export declare function endSessionPromptObservation(sessionId: string): void;
31
+ export declare function retainSessionSyncController(sessionId: string, runtimeScope?: string): () => void;
32
+ export declare function reconcileSessionTail(sessionId: string, reason: SessionSyncReason, runtimeScope?: string): Promise<void>;
33
+ export declare function beginSessionPromptObservation(sessionId: string, runtimeScope?: string): void;
34
+ export declare function endSessionPromptObservation(sessionId: string, runtimeScope?: string): void;
35
35
  export declare function loadSessionTranscriptMessages(sessionId: string): Promise<SessionSyncPage['messages']>;
36
36
  export declare function noteSessionSyncEvent(event: {
37
37
  type?: string;
38
- properties: unknown;
38
+ properties?: unknown;
39
39
  }): void;
40
40
  export declare function resetSessionSyncControllers(): void;
41
+ /** Retire controllers for one wire id after a different sandbox claims it. */
42
+ export declare function resetSessionSyncControllersForSession(sessionId: string, keepRuntimeScope?: string): void;
41
43
  export {};
42
44
  //# sourceMappingURL=session-sync-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-sync-registry.d.ts","sourceRoot":"","sources":["../../../src/browser/session-sync/session-sync-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG/E,OAAO,EACL,qBAAqB,EAErB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEvB,MAAM,iDAAiD,CAAC;AAEzD,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE;QACP,QAAQ,EAAE,CAAC,OAAO,EAAE;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;SAAE,CAAC,CAAC;KAClE,CAAC;CACH;AAED,eAAO,MAAM,8BAA8B,eAAoC,CAAC;AAChF,KAAK,qBAAqB,GAAG,MAAM,GAAG,OAAO,8BAA8B,CAAC;AAa5E,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,eAAe,CAAC,CAU1B;AAoED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,oBAAoB,GAC5B,qBAAqB,CAIvB;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,qBAAqB,EAC7B,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAMnD;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI,CAmBzE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhG;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAErE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEnE;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAItC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA6BxF;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD"}
1
+ {"version":3,"file":"session-sync-registry.d.ts","sourceRoot":"","sources":["../../../src/browser/session-sync/session-sync-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAGvB,MAAM,iDAAiD,CAAC;AAIzD,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE;QACP,QAAQ,EAAE,CAAC,OAAO,EAAE;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,CAAC,EAAE,MAAM,CAAC;SACjB,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;SAAE,CAAC,CAAC;KAClE,CAAC;CACH;AAED,eAAO,MAAM,8BAA8B,eAAoC,CAAC;AAChF,KAAK,qBAAqB,GAAG,MAAM,GAAG,OAAO,8BAA8B,CAAC;AA4C5E,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,eAAe,CAAC,CAU1B;AAwED,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,YAAY,CAAC,EAAE,MAAM,GACpB,qBAAqB,CAKvB;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,qBAAqB,EAC7B,MAAM,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED,wBAAgB,4BAA4B,IAAI,IAAI,CAMnD;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAoBhG;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,iBAAiB,EACzB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAW5F;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAE1F;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAItC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,IAAI,CA8BP;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAGlD;AAED,8EAA8E;AAC9E,wBAAgB,qCAAqC,CACnD,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,IAAI,CAMN"}
@@ -1,9 +1,36 @@
1
- import { useSyncStore } from '../stores/sync-store.js';
2
1
  import { getClient } from '../../core/runtime/client.js';
3
2
  import { SessionSyncController, loadCompleteSessionHistory, } from '../../core/session-sync/session-sync-controller.js';
3
+ import { getCurrentRuntimeSandboxId } from '../../core/session/current-runtime.js';
4
+ import { useSyncStore } from '../stores/sync-store.js';
4
5
  export const ACTIVE_SESSION_PREFETCH_SOURCE = Symbol('active-session-prefetch');
5
6
  const MAX_CONTROLLERS = 20;
6
7
  const controllers = new Map();
8
+ function runtimeScopeKey(runtimeScope) {
9
+ return runtimeScope ?? getCurrentRuntimeSandboxId() ?? 'none';
10
+ }
11
+ function controllerKey(sessionId, runtimeScope) {
12
+ return `${runtimeScopeKey(runtimeScope)}\n${sessionId}`;
13
+ }
14
+ function findExistingSessionEntry(sessionId, runtimeScope) {
15
+ const exact = controllers.get(controllerKey(sessionId, runtimeScope));
16
+ if (exact)
17
+ return exact;
18
+ // During a React runtime switch, the framework-free current-runtime store can
19
+ // be briefly unbound while the session's sandbox-scoped controller remains
20
+ // mounted. Reuse that controller only when the wire id has one unambiguous
21
+ // owner. Never route across multiple sandboxes that contain the same id.
22
+ if (runtimeScopeKey(runtimeScope) !== 'none')
23
+ return undefined;
24
+ let match;
25
+ for (const entry of controllers.values()) {
26
+ if (entry.sessionId !== sessionId)
27
+ continue;
28
+ if (match)
29
+ return undefined;
30
+ match = entry;
31
+ }
32
+ return match;
33
+ }
7
34
  export async function readSessionMessagePage(client, sessionId, request) {
8
35
  const result = await client.session.messages({
9
36
  sessionID: sessionId,
@@ -18,15 +45,15 @@ export async function readSessionMessagePage(client, sessionId, request) {
18
45
  function reportTelemetry(sessionId, event) {
19
46
  console.debug('[session-sync]', { sessionId, ...event });
20
47
  }
21
- function resolveClient(sessionId) {
22
- return controllers.get(sessionId)?.client ?? getClient();
48
+ function resolveClient(key) {
49
+ return controllers.get(key)?.client ?? getClient();
23
50
  }
24
- function createController(sessionId) {
51
+ function createController(sessionId, key) {
25
52
  return new SessionSyncController({
26
53
  sessionId,
27
- loadPage: (request) => readSessionMessagePage(resolveClient(sessionId), sessionId, request),
54
+ loadPage: (request) => readSessionMessagePage(resolveClient(key), sessionId, request),
28
55
  loadStatus: async () => {
29
- const loadStatus = resolveClient(sessionId).session.status;
56
+ const loadStatus = resolveClient(key).session.status;
30
57
  if (!loadStatus)
31
58
  return { type: 'idle' };
32
59
  const result = await loadStatus();
@@ -41,55 +68,61 @@ function createController(sessionId) {
41
68
  state.hydrate(sessionId, []);
42
69
  },
43
70
  setStatus: (status) => {
44
- controllers.get(sessionId)?.controller.observePromptStatus(status);
71
+ controllers.get(key)?.controller.observePromptStatus(status);
45
72
  useSyncStore.getState().setStatus(sessionId, status);
46
73
  },
47
74
  onTelemetry: (event) => reportTelemetry(sessionId, event),
48
75
  });
49
76
  }
50
- function evictInactiveControllers(protectedSessionId) {
77
+ function evictInactiveControllers(protectedKey) {
51
78
  if (controllers.size <= MAX_CONTROLLERS)
52
79
  return;
53
80
  const inactive = [...controllers.entries()]
54
- .filter(([sessionId, entry]) => entry.consumers === 0 && sessionId !== protectedSessionId)
81
+ .filter(([key, entry]) => entry.consumers === 0 && key !== protectedKey)
55
82
  .sort((a, b) => a[1].lastUsedAt - b[1].lastUsedAt);
56
- for (const [sessionId, entry] of inactive) {
83
+ for (const [key, entry] of inactive) {
57
84
  entry.controller.destroy();
58
- controllers.delete(sessionId);
85
+ controllers.delete(key);
59
86
  if (controllers.size <= MAX_CONTROLLERS)
60
87
  return;
61
88
  }
62
89
  }
63
- function getOrCreateRegistryEntry(sessionId, client, initialConsumers = 0) {
64
- const existing = controllers.get(sessionId);
90
+ function getOrCreateRegistryEntry(sessionId, client, initialConsumers = 0, runtimeScope) {
91
+ const key = controllerKey(sessionId, runtimeScope);
92
+ const existing = controllers.get(key);
65
93
  if (existing) {
66
94
  existing.client = client;
67
95
  existing.lastUsedAt = Date.now();
68
96
  return existing;
69
97
  }
70
98
  const entry = {
71
- controller: createController(sessionId),
99
+ sessionId,
100
+ runtimeScope: runtimeScopeKey(runtimeScope),
101
+ controller: createController(sessionId, key),
72
102
  client,
73
103
  consumers: initialConsumers,
74
104
  lastUsedAt: Date.now(),
75
105
  };
76
- controllers.set(sessionId, entry);
106
+ controllers.set(key, entry);
77
107
  return entry;
78
108
  }
79
- export function getSessionSyncController(sessionId, client) {
80
- const entry = getOrCreateRegistryEntry(sessionId, client);
81
- evictInactiveControllers(sessionId);
109
+ export function getSessionSyncController(sessionId, client, runtimeScope) {
110
+ const key = controllerKey(sessionId, runtimeScope);
111
+ const entry = getOrCreateRegistryEntry(sessionId, client, 0, runtimeScope);
112
+ evictInactiveControllers(key);
82
113
  return entry.controller;
83
114
  }
84
115
  export async function prefetchSessionSyncOnce(sessionId, source, client) {
85
- const existing = controllers.get(sessionId);
86
- const entry = getOrCreateRegistryEntry(sessionId, existing?.consumers ? undefined : client);
87
- evictInactiveControllers(sessionId);
116
+ const runtimeScope = source === ACTIVE_SESSION_PREFETCH_SOURCE ? runtimeScopeKey() : source;
117
+ const key = controllerKey(sessionId, runtimeScope);
118
+ const existing = controllers.get(key);
119
+ const entry = getOrCreateRegistryEntry(sessionId, existing?.consumers ? undefined : client, 0, runtimeScope);
120
+ evictInactiveControllers(key);
88
121
  if (entry.prefetchedSource === source)
89
122
  return true;
90
123
  await entry.controller.reconcile('manual');
91
124
  const succeeded = entry.controller.getSnapshot().freshness === 'fresh';
92
- const current = controllers.get(sessionId);
125
+ const current = controllers.get(key);
93
126
  if (succeeded && current === entry)
94
127
  current.prefetchedSource = source;
95
128
  return succeeded;
@@ -101,20 +134,21 @@ export function clearActiveSessionPrefetches() {
101
134
  }
102
135
  }
103
136
  }
104
- export function retainSessionSyncController(sessionId) {
105
- let entry = controllers.get(sessionId);
137
+ export function retainSessionSyncController(sessionId, runtimeScope) {
138
+ const key = controllerKey(sessionId, runtimeScope);
139
+ let entry = controllers.get(key);
106
140
  if (entry) {
107
141
  entry.client = undefined;
108
142
  entry.consumers += 1;
109
143
  entry.lastUsedAt = Date.now();
110
144
  }
111
145
  else {
112
- entry = getOrCreateRegistryEntry(sessionId, undefined, 1);
146
+ entry = getOrCreateRegistryEntry(sessionId, undefined, 1, runtimeScope);
113
147
  }
114
148
  evictInactiveControllers();
115
149
  const controller = entry.controller;
116
150
  return () => {
117
- const current = controllers.get(sessionId);
151
+ const current = controllers.get(key);
118
152
  if (!current || current.controller !== controller)
119
153
  return;
120
154
  current.consumers = Math.max(0, current.consumers - 1);
@@ -124,19 +158,29 @@ export function retainSessionSyncController(sessionId) {
124
158
  evictInactiveControllers();
125
159
  };
126
160
  }
127
- export function reconcileSessionTail(sessionId, reason) {
128
- return getSessionSyncController(sessionId).reconcile(reason);
161
+ export function reconcileSessionTail(sessionId, reason, runtimeScope) {
162
+ return getSessionSyncController(sessionId, undefined, runtimeScope).reconcile(reason);
129
163
  }
130
- export function beginSessionPromptObservation(sessionId) {
131
- getSessionSyncController(sessionId).beginPromptObservation();
164
+ export function beginSessionPromptObservation(sessionId, runtimeScope) {
165
+ const existing = findExistingSessionEntry(sessionId, runtimeScope);
166
+ if (existing) {
167
+ existing.controller.beginPromptObservation();
168
+ return;
169
+ }
170
+ const hasAmbiguousOwner = [...controllers.values()].some((entry) => entry.sessionId === sessionId);
171
+ if (runtimeScopeKey(runtimeScope) === 'none' && hasAmbiguousOwner)
172
+ return;
173
+ getSessionSyncController(sessionId, undefined, runtimeScope).beginPromptObservation();
132
174
  }
133
- export function endSessionPromptObservation(sessionId) {
134
- controllers.get(sessionId)?.controller.endPromptObservation();
175
+ export function endSessionPromptObservation(sessionId, runtimeScope) {
176
+ findExistingSessionEntry(sessionId, runtimeScope)?.controller.endPromptObservation();
135
177
  }
136
178
  export function loadSessionTranscriptMessages(sessionId) {
137
179
  return loadCompleteSessionHistory((request) => readSessionMessagePage(getClient(), sessionId, request));
138
180
  }
139
181
  export function noteSessionSyncEvent(event) {
182
+ if (!event.properties || typeof event.properties !== 'object')
183
+ return;
140
184
  const properties = event.properties;
141
185
  const info = properties.info;
142
186
  const part = properties.part;
@@ -145,7 +189,7 @@ export function noteSessionSyncEvent(event) {
145
189
  part?.sessionID;
146
190
  if (!sessionId)
147
191
  return;
148
- const controller = controllers.get(sessionId)?.controller;
192
+ const controller = findExistingSessionEntry(sessionId)?.controller;
149
193
  if (!controller)
150
194
  return;
151
195
  controller.noteActivity();
@@ -172,4 +216,13 @@ export function resetSessionSyncControllers() {
172
216
  entry.controller.destroy();
173
217
  controllers.clear();
174
218
  }
219
+ /** Retire controllers for one wire id after a different sandbox claims it. */
220
+ export function resetSessionSyncControllersForSession(sessionId, keepRuntimeScope) {
221
+ for (const [key, entry] of controllers) {
222
+ if (entry.sessionId !== sessionId || entry.runtimeScope === keepRuntimeScope)
223
+ continue;
224
+ entry.controller.destroy();
225
+ controllers.delete(key);
226
+ }
227
+ }
175
228
  //# sourceMappingURL=session-sync-registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-sync-registry.js","sourceRoot":"","sources":["../../../src/browser/session-sync/session-sync-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-sync-registry.js","sourceRoot":"","sources":["../../../src/browser/session-sync/session-sync-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Local transcript cache — the reason a session can paint before its sandbox
3
+ * is awake.
4
+ *
5
+ * Reading a transcript used to be gated on booting a VM: the messages live on
6
+ * the opencode runtime *inside* the session's sandbox, reachable only through
7
+ * `/p/{externalId}/…`, so opening a hibernated session meant waiting out the
8
+ * whole `/start` wake before a single word appeared. The transcript is already
9
+ * settled history; it does not need a running machine to be shown.
10
+ *
11
+ * So: mirror the tail into IndexedDB as it arrives, and hydrate straight back
12
+ * out of it on open. The live runtime still reconciles behind it — this only
13
+ * changes WHEN the user sees what is already theirs, never what is true.
14
+ */
15
+ import type { Message, Part } from '@opencode-ai/sdk/v2/client';
16
+ export interface CachedTranscript {
17
+ messages: Message[];
18
+ parts: Record<string, Part[]>;
19
+ }
20
+ interface TranscriptStoreSlice {
21
+ messages: Record<string, Message[]>;
22
+ parts: Record<string, Part[]>;
23
+ }
24
+ /**
25
+ * Pull one session's messages, plus only the parts belonging to them, out of
26
+ * the (globally part-keyed) sync store. Returns null when there is nothing
27
+ * worth persisting — an absent session and an empty one are the same to a
28
+ * cache whose entire job is having something to show.
29
+ */
30
+ export declare function selectSessionTranscript(state: TranscriptStoreSlice, sessionId: string): CachedTranscript | null;
31
+ /** Reshape a cached transcript into the `{ info, parts }` rows `hydrate` takes. */
32
+ export declare function toHydrateEntries(transcript: CachedTranscript): Array<{
33
+ info: Message;
34
+ parts: Part[];
35
+ }>;
36
+ /**
37
+ * The cache is a first-paint accelerator, never a source of truth. Once the
38
+ * store holds anything for this session — from SSE, an optimistic send, or a
39
+ * completed reconcile — it outranks whatever is on disk, so hydrating again
40
+ * could only ever move the transcript backwards.
41
+ */
42
+ export declare function shouldHydrateFromCache(input: {
43
+ storeHasSession: boolean;
44
+ cachedMessageCount: number;
45
+ }): boolean;
46
+ /**
47
+ * Read this session's cached transcript. Resolves to null when there is no
48
+ * usable entry — the caller then simply waits for the runtime, exactly as
49
+ * before this cache existed.
50
+ */
51
+ export declare function readCachedTranscript(sessionId: string, kortixSessionScope?: string): Promise<CachedTranscript | null>;
52
+ /** Mirror the session's current tail to disk. Debounced inside the IDB layer. */
53
+ export declare function writeCachedTranscript(state: TranscriptStoreSlice, sessionId: string, kortixSessionScope?: string): Promise<void>;
54
+ export {};
55
+ //# sourceMappingURL=session-transcript-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-transcript-cache.d.ts","sourceRoot":"","sources":["../../../src/browser/session-sync/session-transcript-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAIhE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;CAC/B;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,oBAAoB,EAC3B,SAAS,EAAE,MAAM,GAChB,gBAAgB,GAAG,IAAI,CASzB;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,gBAAgB,GAC3B,KAAK,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAIzC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,GAAG,OAAO,CAGV;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAIlC;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,oBAAoB,EAC3B,SAAS,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Local transcript cache — the reason a session can paint before its sandbox
3
+ * is awake.
4
+ *
5
+ * Reading a transcript used to be gated on booting a VM: the messages live on
6
+ * the opencode runtime *inside* the session's sandbox, reachable only through
7
+ * `/p/{externalId}/…`, so opening a hibernated session meant waiting out the
8
+ * whole `/start` wake before a single word appeared. The transcript is already
9
+ * settled history; it does not need a running machine to be shown.
10
+ *
11
+ * So: mirror the tail into IndexedDB as it arrives, and hydrate straight back
12
+ * out of it on open. The live runtime still reconciles behind it — this only
13
+ * changes WHEN the user sees what is already theirs, never what is true.
14
+ */
15
+ import { loadSessionFromIDB, saveSessionToIDB } from '../cache/idb-sync-cache.js';
16
+ /**
17
+ * Pull one session's messages, plus only the parts belonging to them, out of
18
+ * the (globally part-keyed) sync store. Returns null when there is nothing
19
+ * worth persisting — an absent session and an empty one are the same to a
20
+ * cache whose entire job is having something to show.
21
+ */
22
+ export function selectSessionTranscript(state, sessionId) {
23
+ const messages = state.messages[sessionId];
24
+ if (!messages || messages.length === 0)
25
+ return null;
26
+ const parts = {};
27
+ for (const message of messages) {
28
+ if (!message?.id)
29
+ continue;
30
+ parts[message.id] = state.parts[message.id] ?? [];
31
+ }
32
+ return { messages, parts };
33
+ }
34
+ /** Reshape a cached transcript into the `{ info, parts }` rows `hydrate` takes. */
35
+ export function toHydrateEntries(transcript) {
36
+ return (transcript.messages ?? [])
37
+ .filter((message) => !!message?.id)
38
+ .map((message) => ({ info: message, parts: transcript.parts?.[message.id] ?? [] }));
39
+ }
40
+ /**
41
+ * The cache is a first-paint accelerator, never a source of truth. Once the
42
+ * store holds anything for this session — from SSE, an optimistic send, or a
43
+ * completed reconcile — it outranks whatever is on disk, so hydrating again
44
+ * could only ever move the transcript backwards.
45
+ */
46
+ export function shouldHydrateFromCache(input) {
47
+ if (input.storeHasSession)
48
+ return false;
49
+ return input.cachedMessageCount > 0;
50
+ }
51
+ /**
52
+ * Read this session's cached transcript. Resolves to null when there is no
53
+ * usable entry — the caller then simply waits for the runtime, exactly as
54
+ * before this cache existed.
55
+ */
56
+ export async function readCachedTranscript(sessionId, kortixSessionScope) {
57
+ const cached = await loadSessionFromIDB(sessionId, kortixSessionScope);
58
+ if (!cached || !Array.isArray(cached.messages) || cached.messages.length === 0)
59
+ return null;
60
+ return { messages: cached.messages, parts: cached.parts ?? {} };
61
+ }
62
+ /** Mirror the session's current tail to disk. Debounced inside the IDB layer. */
63
+ export function writeCachedTranscript(state, sessionId, kortixSessionScope) {
64
+ const transcript = selectSessionTranscript(state, sessionId);
65
+ if (!transcript)
66
+ return Promise.resolve();
67
+ return saveSessionToIDB(sessionId, transcript.messages, transcript.parts, kortixSessionScope);
68
+ }
69
+ //# sourceMappingURL=session-transcript-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-transcript-cache.js","sourceRoot":"","sources":["../../../src/browser/session-sync/session-transcript-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAY/E;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAA2B,EAC3B,SAAiB;IAEjB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,EAAE;YAAE,SAAS;QAC3B,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAC9B,UAA4B;IAE5B,OAAO,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC/B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;SAClC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAGtC;IACC,IAAI,KAAK,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAiB,EACjB,kBAA2B;IAE3B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;AAClE,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CACnC,KAA2B,EAC3B,SAAiB,EACjB,kBAA2B;IAE3B,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1C,OAAO,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAChG,CAAC"}