@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.
- package/README.md +110 -73
- package/dist/browser/cache/idb-sync-cache-key.d.ts +2 -0
- package/dist/browser/cache/idb-sync-cache-key.d.ts.map +1 -0
- package/dist/browser/cache/idb-sync-cache-key.js +7 -0
- package/dist/browser/cache/idb-sync-cache-key.js.map +1 -0
- package/dist/browser/cache/idb-sync-cache.d.ts +3 -3
- package/dist/browser/cache/idb-sync-cache.d.ts.map +1 -1
- package/dist/browser/cache/idb-sync-cache.js +49 -26
- package/dist/browser/cache/idb-sync-cache.js.map +1 -1
- package/dist/browser/session-sync/session-cache-ownership.d.ts +36 -0
- package/dist/browser/session-sync/session-cache-ownership.d.ts.map +1 -0
- package/dist/browser/session-sync/session-cache-ownership.js +66 -0
- package/dist/browser/session-sync/session-cache-ownership.js.map +1 -0
- package/dist/browser/session-sync/session-sync-registry.d.ts +8 -6
- package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
- package/dist/browser/session-sync/session-sync-registry.js +86 -33
- package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
- package/dist/browser/session-sync/session-transcript-cache.d.ts +55 -0
- package/dist/browser/session-sync/session-transcript-cache.d.ts.map +1 -0
- package/dist/browser/session-sync/session-transcript-cache.js +69 -0
- package/dist/browser/session-sync/session-transcript-cache.js.map +1 -0
- package/dist/core/client/kortix.d.ts +72 -25
- package/dist/core/client/kortix.d.ts.map +1 -1
- package/dist/core/client/kortix.js +76 -17
- package/dist/core/client/kortix.js.map +1 -1
- package/dist/core/rest/platform-client/host-boundary.d.ts +7 -0
- package/dist/core/rest/platform-client/host-boundary.d.ts.map +1 -1
- package/dist/core/rest/platform-client/host-boundary.js +14 -0
- package/dist/core/rest/platform-client/host-boundary.js.map +1 -1
- package/dist/core/rest/projects-client/access.d.ts +1 -2
- package/dist/core/rest/projects-client/access.d.ts.map +1 -1
- package/dist/core/rest/projects-client/access.js +9 -6
- package/dist/core/rest/projects-client/access.js.map +1 -1
- package/dist/core/rest/projects-client/agent-config.d.ts +15 -7
- package/dist/core/rest/projects-client/agent-config.d.ts.map +1 -1
- package/dist/core/rest/projects-client/agent-config.js +43 -2
- package/dist/core/rest/projects-client/agent-config.js.map +1 -1
- package/dist/core/rest/projects-client/agent-scope.d.ts +4 -0
- package/dist/core/rest/projects-client/agent-scope.d.ts.map +1 -1
- package/dist/core/rest/projects-client/agent-scope.js +34 -1
- package/dist/core/rest/projects-client/agent-scope.js.map +1 -1
- package/dist/core/rest/projects-client/audit.d.ts +34 -0
- package/dist/core/rest/projects-client/audit.d.ts.map +1 -1
- package/dist/core/rest/projects-client/audit.js +49 -4
- package/dist/core/rest/projects-client/audit.js.map +1 -1
- package/dist/core/rest/projects-client/billing.d.ts +26 -14
- package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
- package/dist/core/rest/projects-client/billing.js +4 -5
- package/dist/core/rest/projects-client/billing.js.map +1 -1
- package/dist/core/rest/projects-client/connectors.d.ts +106 -45
- package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
- package/dist/core/rest/projects-client/connectors.js +95 -58
- package/dist/core/rest/projects-client/connectors.js.map +1 -1
- package/dist/core/rest/projects-client/iam.d.ts +17 -0
- package/dist/core/rest/projects-client/iam.d.ts.map +1 -1
- package/dist/core/rest/projects-client/iam.js +14 -0
- package/dist/core/rest/projects-client/iam.js.map +1 -1
- package/dist/core/rest/projects-client/index.d.ts +1 -0
- package/dist/core/rest/projects-client/index.d.ts.map +1 -1
- package/dist/core/rest/projects-client/index.js +1 -0
- package/dist/core/rest/projects-client/index.js.map +1 -1
- package/dist/core/rest/projects-client/policies.d.ts +18 -0
- package/dist/core/rest/projects-client/policies.d.ts.map +1 -1
- package/dist/core/rest/projects-client/policies.js.map +1 -1
- package/dist/core/rest/projects-client/projects.d.ts +8 -1
- package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
- package/dist/core/rest/projects-client/projects.js.map +1 -1
- package/dist/core/rest/projects-client/sandbox.d.ts +50 -0
- package/dist/core/rest/projects-client/sandbox.d.ts.map +1 -1
- package/dist/core/rest/projects-client/sandbox.js.map +1 -1
- package/dist/core/rest/projects-client/session-costs.d.ts +102 -0
- package/dist/core/rest/projects-client/session-costs.d.ts.map +1 -0
- package/dist/core/rest/projects-client/session-costs.js +25 -0
- package/dist/core/rest/projects-client/session-costs.js.map +1 -0
- package/dist/core/rest/projects-client/session-sandbox.d.ts +0 -2
- package/dist/core/rest/projects-client/session-sandbox.d.ts.map +1 -1
- package/dist/core/rest/projects-client/session-sandbox.js +1 -10
- package/dist/core/rest/projects-client/session-sandbox.js.map +1 -1
- package/dist/core/rest/projects-client/sessions.d.ts +80 -44
- package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
- package/dist/core/rest/projects-client/sessions.js +9 -15
- package/dist/core/rest/projects-client/sessions.js.map +1 -1
- package/dist/core/rest/projects-client/setup-links.d.ts +37 -0
- package/dist/core/rest/projects-client/setup-links.d.ts.map +1 -1
- package/dist/core/rest/projects-client/setup-links.js +11 -0
- package/dist/core/rest/projects-client/setup-links.js.map +1 -1
- package/dist/core/session/index.d.ts +1 -1
- package/dist/core/session/index.d.ts.map +1 -1
- package/dist/core/session/index.js +1 -1
- package/dist/core/session/index.js.map +1 -1
- package/dist/core/session/preview-auth.d.ts +32 -0
- package/dist/core/session/preview-auth.d.ts.map +1 -0
- package/dist/core/session/preview-auth.js +53 -0
- package/dist/core/session/preview-auth.js.map +1 -0
- package/dist/core/session/server-store/url-helpers.d.ts.map +1 -1
- package/dist/core/session/server-store/url-helpers.js +5 -3
- package/dist/core/session/server-store/url-helpers.js.map +1 -1
- package/dist/core/session-sync/session-sync-controller.d.ts +12 -1
- package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
- package/dist/core/session-sync/session-sync-controller.js +34 -2
- package/dist/core/session-sync/session-sync-controller.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/kortix.esm.min.js +19 -24
- package/dist/kortix.global.js +19 -24
- package/dist/platform/auth-core.d.ts +5 -3
- package/dist/platform/auth-core.d.ts.map +1 -1
- package/dist/platform/auth-core.js +6 -4
- package/dist/platform/auth-core.js.map +1 -1
- package/dist/react/index.d.ts +0 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +0 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/model-flatten.d.ts +8 -0
- package/dist/react/model-flatten.d.ts.map +1 -1
- package/dist/react/model-flatten.js +1 -0
- package/dist/react/model-flatten.js.map +1 -1
- package/dist/react/opencode.d.ts +1 -1
- package/dist/react/opencode.d.ts.map +1 -1
- package/dist/react/opencode.js +1 -1
- package/dist/react/opencode.js.map +1 -1
- package/dist/react/session-title-sync.d.ts +9 -5
- package/dist/react/session-title-sync.d.ts.map +1 -1
- package/dist/react/session-title-sync.js +14 -10
- package/dist/react/session-title-sync.js.map +1 -1
- package/dist/react/use-canonical-opencode-session.d.ts +2 -2
- package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
- package/dist/react/use-model-store.d.ts +6 -14
- package/dist/react/use-model-store.d.ts.map +1 -1
- package/dist/react/use-model-store.js +30 -52
- package/dist/react/use-model-store.js.map +1 -1
- package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -1
- package/dist/react/use-opencode-events/handle-event.js +103 -41
- package/dist/react/use-opencode-events/handle-event.js.map +1 -1
- package/dist/react/use-opencode-sessions/keys.d.ts +3 -1
- package/dist/react/use-opencode-sessions/keys.d.ts.map +1 -1
- package/dist/react/use-opencode-sessions/keys.js +2 -0
- package/dist/react/use-opencode-sessions/keys.js.map +1 -1
- package/dist/react/use-opencode-sessions/sessions.d.ts.map +1 -1
- package/dist/react/use-opencode-sessions/sessions.js +16 -7
- package/dist/react/use-opencode-sessions/sessions.js.map +1 -1
- package/dist/react/use-opencode-sessions/shared.d.ts +3 -2
- package/dist/react/use-opencode-sessions/shared.d.ts.map +1 -1
- package/dist/react/use-opencode-sessions/shared.js +6 -3
- package/dist/react/use-opencode-sessions/shared.js.map +1 -1
- package/dist/react/use-opencode-sessions/sharing.js +2 -2
- package/dist/react/use-opencode-sessions/sharing.js.map +1 -1
- package/dist/react/use-session-sync.d.ts +13 -1
- package/dist/react/use-session-sync.d.ts.map +1 -1
- package/dist/react/use-session-sync.js +85 -17
- package/dist/react/use-session-sync.js.map +1 -1
- package/dist/react/use-session.d.ts +36 -39
- package/dist/react/use-session.d.ts.map +1 -1
- package/dist/react/use-session.js +100 -205
- package/dist/react/use-session.js.map +1 -1
- package/package.json +2 -2
- package/dist/core/acp/client.d.ts +0 -45
- package/dist/core/acp/client.d.ts.map +0 -1
- package/dist/core/acp/client.js +0 -277
- package/dist/core/acp/client.js.map +0 -1
- package/dist/core/acp/index.d.ts +0 -5
- package/dist/core/acp/index.d.ts.map +0 -1
- package/dist/core/acp/index.js +0 -5
- package/dist/core/acp/index.js.map +0 -1
- package/dist/core/acp/projection.d.ts +0 -23
- package/dist/core/acp/projection.d.ts.map +0 -1
- package/dist/core/acp/projection.js +0 -603
- package/dist/core/acp/projection.js.map +0 -1
- package/dist/core/acp/session-controller.d.ts +0 -90
- package/dist/core/acp/session-controller.d.ts.map +0 -1
- package/dist/core/acp/session-controller.js +0 -530
- package/dist/core/acp/session-controller.js.map +0 -1
- package/dist/core/acp/types.d.ts +0 -66
- package/dist/core/acp/types.d.ts.map +0 -1
- package/dist/core/acp/types.js +0 -21
- package/dist/core/acp/types.js.map +0 -1
- package/dist/core/session/runtime-transport.d.ts +0 -16
- package/dist/core/session/runtime-transport.d.ts.map +0 -1
- package/dist/core/session/runtime-transport.js +0 -30
- package/dist/core/session/runtime-transport.js.map +0 -1
- package/dist/react/session-busy.d.ts +0 -8
- package/dist/react/session-busy.d.ts.map +0 -1
- package/dist/react/session-busy.js +0 -4
- package/dist/react/session-busy.js.map +0 -1
- package/dist/react/use-acp-session-runtime.d.ts +0 -34
- package/dist/react/use-acp-session-runtime.d.ts.map +0 -1
- package/dist/react/use-acp-session-runtime.js +0 -84
- package/dist/react/use-acp-session-runtime.js.map +0 -1
- package/dist/react/use-admin-users.d.ts +0 -98
- package/dist/react/use-admin-users.d.ts.map +0 -1
- package/dist/react/use-admin-users.js +0 -121
- package/dist/react/use-admin-users.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharing.js","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/sharing.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,MAAM,UAAU,eAAe;IAC7B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC,MAAM,CAAY,CAAC;QACnC,CAAC;QACD,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE;YAC5B,0CAA0C;YAC1C,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"sharing.js","sourceRoot":"","sources":["../../../src/react/use-opencode-sessions/sharing.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,MAAM,UAAU,eAAe;IAC7B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACpE,OAAO,MAAM,CAAC,MAAM,CAAY,CAAC;QACnC,CAAC;QACD,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE;YAC5B,0CAA0C;YAC1C,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;YACzF,WAAW,CAAC,YAAY,CAAY,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnE,IAAI,CAAC,GAAG;oBAAE,OAAO,GAAG,CAAC;gBACrB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAI,GAAG,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC;gBACxB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC;QACjB,UAAU,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YACtE,OAAO,MAAM,CAAC,MAAM,CAAY,CAAC;QACnC,CAAC;QACD,SAAS,EAAE,CAAC,cAAc,EAAE,EAAE;YAC5B,4CAA4C;YAC5C,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;YACzF,WAAW,CAAC,YAAY,CAAY,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnE,IAAI,CAAC,GAAG;oBAAE,OAAO,GAAG,CAAC;gBACrB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAI,GAAG,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC;gBACxB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -11,7 +11,19 @@ type FileDiff = Omit<import('@opencode-ai/sdk/v2/client').SnapshotFileDiff, 'pat
|
|
|
11
11
|
* Returns the current session tail and explicit history-loading state.
|
|
12
12
|
* Network synchronization lives in the framework-free SessionSyncController.
|
|
13
13
|
*/
|
|
14
|
-
|
|
14
|
+
interface UseSessionSyncOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Stable Kortix `(projectId, sessionId)` scope for disk transcript ownership.
|
|
17
|
+
* This prevents equal OpenCode ids in different sandboxes from sharing data.
|
|
18
|
+
*/
|
|
19
|
+
kortixSessionScope?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Allow live REST reconciliation against the current runtime.
|
|
22
|
+
* Set false while `/start` has not switched this Kortix session's sandbox.
|
|
23
|
+
*/
|
|
24
|
+
networkEnabled?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function useSessionSync(sessionId: string, options?: UseSessionSyncOptions): {
|
|
15
27
|
messages: MessageWithParts[];
|
|
16
28
|
status: SessionStatus;
|
|
17
29
|
freshness: import("../core/session-sync/session-sync-controller.js").SessionSyncFreshness;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-session-sync.d.ts","sourceRoot":"","sources":["../../src/react/use-session-sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,aAAa,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"use-session-sync.d.ts","sourceRoot":"","sources":["../../src/react/use-session-sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,aAAa,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAQrF,OAAO,EAEL,6BAA6B,EAG9B,MAAM,+CAA+C,CAAC;AAQvD,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,8BAA8B,CAAC;AAInF,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC,KAAK,QAAQ,GAAG,IAAI,CAAC,OAAO,4BAA4B,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsDF;;;GAGG;AACH,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;;;;;;;;;;;EAgIpF"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { useEffect, useSyncExternalStore } from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { claimSessionCacheOwnership, getSessionCacheOwnership, resolveSessionCacheOwnerScope, sessionCacheOwnerScopesConflict, } from '../browser/session-sync/session-cache-ownership.js';
|
|
4
|
+
import { getSessionSyncController, loadSessionTranscriptMessages, resetSessionSyncControllersForSession, retainSessionSyncController, } from '../browser/session-sync/session-sync-registry.js';
|
|
5
|
+
import { readCachedTranscript, shouldHydrateFromCache, toHydrateEntries, writeCachedTranscript, } from '../browser/session-sync/session-transcript-cache.js';
|
|
4
6
|
import { useSandboxConnectionStore } from '../browser/stores/sandbox-connection-store.js';
|
|
5
7
|
import { useSyncStore } from '../browser/stores/sync-store.js';
|
|
8
|
+
import { useCurrentRuntime } from './use-current-runtime.js';
|
|
6
9
|
import { canQueryOpenCodeSession } from './use-opencode-sessions/index.js';
|
|
7
10
|
export { loadSessionTranscriptMessages };
|
|
8
11
|
const EMPTY_MESSAGES = [];
|
|
@@ -43,18 +46,61 @@ function buildMessages(sessionId, msgs, parts) {
|
|
|
43
46
|
touchMessageCache(sessionId);
|
|
44
47
|
return result;
|
|
45
48
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
* Network synchronization lives in the framework-free SessionSyncController.
|
|
49
|
-
*/
|
|
50
|
-
export function useSessionSync(sessionId) {
|
|
49
|
+
export function useSessionSync(sessionId, options = {}) {
|
|
50
|
+
const { kortixSessionScope, networkEnabled = true } = options;
|
|
51
51
|
const runtimeHealthy = useSandboxConnectionStore((state) => state.healthy === true);
|
|
52
|
-
const
|
|
52
|
+
const runtimeScope = useCurrentRuntime((state) => state.sandboxId) ?? 'none';
|
|
53
|
+
const cacheOwnerScope = resolveSessionCacheOwnerScope(runtimeScope, kortixSessionScope);
|
|
54
|
+
const currentOwner = getSessionCacheOwnership(sessionId);
|
|
55
|
+
const cacheBelongsToAnotherRuntime = !!sessionId && sessionCacheOwnerScopesConflict(currentOwner, cacheOwnerScope);
|
|
56
|
+
const readableSessionId = cacheBelongsToAnotherRuntime ? '' : sessionId;
|
|
57
|
+
const controller = getSessionSyncController(sessionId, undefined, runtimeScope);
|
|
53
58
|
const sync = useSyncExternalStore(controller.subscribe, controller.getSnapshot, controller.getSnapshot);
|
|
54
59
|
useEffect(() => {
|
|
55
|
-
if (!canQueryOpenCodeSession(sessionId) || !
|
|
60
|
+
if (!canQueryOpenCodeSession(sessionId) || !cacheOwnerScope)
|
|
56
61
|
return;
|
|
57
|
-
const
|
|
62
|
+
const claim = claimSessionCacheOwnership(sessionId, cacheOwnerScope);
|
|
63
|
+
if (!sessionCacheOwnerScopesConflict(claim.previousOwnerScope, cacheOwnerScope)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
resetSessionSyncControllersForSession(sessionId, runtimeScope === 'none' ? undefined : runtimeScope);
|
|
67
|
+
useSyncStore.getState().clearSession(sessionId);
|
|
68
|
+
messageCache.delete(sessionId);
|
|
69
|
+
}, [cacheOwnerScope, runtimeScope, sessionId]);
|
|
70
|
+
// Paint from disk FIRST, and deliberately without waiting on `runtimeHealthy`.
|
|
71
|
+
// The transcript is settled history; gating it on a woken sandbox is what made
|
|
72
|
+
// opening a hibernated session a blank screen for the length of a VM boot.
|
|
73
|
+
// `shouldHydrateFromCache` keeps this strictly additive — the moment the store
|
|
74
|
+
// holds anything for this session, live data owns it and the cache stands down.
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
if (!canQueryOpenCodeSession(sessionId))
|
|
77
|
+
return;
|
|
78
|
+
let cancelled = false;
|
|
79
|
+
void (async () => {
|
|
80
|
+
const cached = await readCachedTranscript(sessionId, kortixSessionScope);
|
|
81
|
+
if (cancelled || !cached)
|
|
82
|
+
return;
|
|
83
|
+
const store = useSyncStore.getState();
|
|
84
|
+
if (!shouldHydrateFromCache({
|
|
85
|
+
storeHasSession: sessionId in store.messages,
|
|
86
|
+
cachedMessageCount: cached.messages.length,
|
|
87
|
+
})) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
store.hydrate(sessionId, toHydrateEntries(cached));
|
|
91
|
+
})();
|
|
92
|
+
return () => {
|
|
93
|
+
cancelled = true;
|
|
94
|
+
};
|
|
95
|
+
}, [kortixSessionScope, sessionId]);
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
if (!networkEnabled ||
|
|
98
|
+
!canQueryOpenCodeSession(sessionId) ||
|
|
99
|
+
!runtimeHealthy ||
|
|
100
|
+
runtimeScope === 'none')
|
|
101
|
+
return;
|
|
102
|
+
resetSessionSyncControllersForSession(sessionId, runtimeScope);
|
|
103
|
+
const release = retainSessionSyncController(sessionId, runtimeScope);
|
|
58
104
|
// Cached messages render immediately. Revalidate one bounded tail so
|
|
59
105
|
// events produced while this route was inactive are not skipped.
|
|
60
106
|
void controller.reconcile('initial');
|
|
@@ -62,17 +108,39 @@ export function useSessionSync(sessionId) {
|
|
|
62
108
|
release();
|
|
63
109
|
messageCache.delete(sessionId);
|
|
64
110
|
};
|
|
65
|
-
}, [controller, runtimeHealthy, sessionId]);
|
|
66
|
-
|
|
67
|
-
|
|
111
|
+
}, [controller, networkEnabled, runtimeHealthy, runtimeScope, sessionId]);
|
|
112
|
+
// Mirror the tail back to disk as it changes, so the NEXT open of this session
|
|
113
|
+
// has something to paint. Subscribing to the store (rather than reacting to
|
|
114
|
+
// rendered output) also captures SSE updates that arrive while the transcript
|
|
115
|
+
// is scrolled out of view. The IDB layer batches these on its own timer.
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
if (!canQueryOpenCodeSession(sessionId))
|
|
118
|
+
return;
|
|
119
|
+
let lastMessages;
|
|
120
|
+
let lastParts;
|
|
121
|
+
const persist = (state) => {
|
|
122
|
+
// The store is shared by every session and also carries status/todos, so
|
|
123
|
+
// most notifications are irrelevant here. Compare the two slices this
|
|
124
|
+
// cache actually mirrors before rebuilding anything.
|
|
125
|
+
if (state.messages[sessionId] === lastMessages && state.parts === lastParts)
|
|
126
|
+
return;
|
|
127
|
+
lastMessages = state.messages[sessionId];
|
|
128
|
+
lastParts = state.parts;
|
|
129
|
+
void writeCachedTranscript(state, sessionId, kortixSessionScope);
|
|
130
|
+
};
|
|
131
|
+
persist(useSyncStore.getState());
|
|
132
|
+
return useSyncStore.subscribe(persist);
|
|
133
|
+
}, [kortixSessionScope, sessionId]);
|
|
134
|
+
const messages = useSyncStore((state) => buildMessages(readableSessionId, state.messages[readableSessionId], state.parts));
|
|
135
|
+
const runtimeStatus = useSyncStore((state) => state.sessionStatus[readableSessionId] ?? IDLE_STATUS);
|
|
68
136
|
const status = sync.isPromptObservedBusy && runtimeStatus.type === 'idle' ? BUSY_STATUS : runtimeStatus;
|
|
69
|
-
const diffs = useSyncStore((state) => state.diffs[
|
|
70
|
-
const todos = useSyncStore((state) => state.todos[
|
|
137
|
+
const diffs = useSyncStore((state) => state.diffs[readableSessionId]);
|
|
138
|
+
const todos = useSyncStore((state) => state.todos[readableSessionId]);
|
|
71
139
|
const isBusy = status.type === 'busy' || status.type === 'retry';
|
|
72
|
-
const isLoading = !useSyncStore((state) =>
|
|
140
|
+
const isLoading = !useSyncStore((state) => readableSessionId in state.messages);
|
|
73
141
|
useEffect(() => {
|
|
74
|
-
controller.setBusy(runtimeHealthy && isBusy);
|
|
75
|
-
}, [controller, isBusy, runtimeHealthy]);
|
|
142
|
+
controller.setBusy(networkEnabled && runtimeHealthy && isBusy);
|
|
143
|
+
}, [controller, isBusy, networkEnabled, runtimeHealthy]);
|
|
76
144
|
return {
|
|
77
145
|
messages,
|
|
78
146
|
status,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-session-sync.js","sourceRoot":"","sources":["../../src/react/use-session-sync.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAyB,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAQzC,MAAM,cAAc,GAAuB,EAAE,CAAC;AAC9C,MAAM,WAAW,GAAe,EAAE,CAAC;AACnC,MAAM,WAAW,GAAW,EAAE,CAAC;AAC/B,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,MAAM,EAAmB,CAAC;AACtD,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,MAAM,EAAmB,CAAC;AACtD,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAOzB,CAAC;AAEJ,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC;QACV,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAChD,IAAI,MAAM;YAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,SAAiB,EACjB,IAA2B,EAC3B,KAA6B;IAE7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC;IAEtD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GACR,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YACtC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvF,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI;QACJ,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;KAC5B,CAAC,CAAC,CAAC;IACJ,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-session-sync.js","sourceRoot":"","sources":["../../src/react/use-session-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type SessionStartResult } from '../core/rest/projects-client/index.js';
|
|
2
2
|
import { BillingError } from '../core/http/api/errors.js';
|
|
3
3
|
import type { ModelKey } from './use-model-store.js';
|
|
4
4
|
import { type PromptPart } from './use-opencode-sessions/index.js';
|
|
@@ -12,6 +12,32 @@ export type SessionPhase = 'starting' | 'ready' | 'error';
|
|
|
12
12
|
* SessionStartErrors never retry; transient transport failures retry a few times.
|
|
13
13
|
*/
|
|
14
14
|
export declare function shouldRetrySessionStart(failureCount: number, error: unknown, sessionId: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Gap between `/start` polls. The server long-polls each tick, so this is the
|
|
17
|
+
* pause between holds, not the latency to observe `ready`.
|
|
18
|
+
*/
|
|
19
|
+
export declare const SESSION_START_POLL_MS = 1500;
|
|
20
|
+
/**
|
|
21
|
+
* Should the `/start` boot poll fire again, given the last tick's outcome?
|
|
22
|
+
* `false` = stop: a terminal stage, or a terminal client error that no amount
|
|
23
|
+
* of polling can fix. Everything else keeps polling — including a `null`
|
|
24
|
+
* payload from a transient transport failure, since the box is still coming up.
|
|
25
|
+
*/
|
|
26
|
+
export declare function shouldPollSessionStart(error: unknown, data: SessionStartResult | null | undefined): number | false;
|
|
27
|
+
/**
|
|
28
|
+
* TanStack Query pauses interval fetches while the document is hidden unless
|
|
29
|
+
* this option is true. Session readiness must continue because it gates the
|
|
30
|
+
* runtime switch, event stream, and queued-prompt replay.
|
|
31
|
+
*/
|
|
32
|
+
export declare const SESSION_START_POLL_OPTIONS: {
|
|
33
|
+
readonly refetchInterval: (query: {
|
|
34
|
+
state: {
|
|
35
|
+
error: unknown;
|
|
36
|
+
data: SessionStartResult | null | undefined;
|
|
37
|
+
};
|
|
38
|
+
}) => number | false;
|
|
39
|
+
readonly refetchIntervalInBackground: true;
|
|
40
|
+
};
|
|
15
41
|
/** Discriminant for `KortixSendError` — what kind of failure interrupted a send. */
|
|
16
42
|
export type KortixSendErrorKind = 'billing' | 'runtime-not-ready' | 'runtime-error';
|
|
17
43
|
/** Typed failure surfaced by `send` (via `sendError`) and thrown by
|
|
@@ -68,21 +94,10 @@ export declare function sendStateOnStart(text: string): SendState;
|
|
|
68
94
|
/** New state when a send fails — drops the optimistic message and classifies
|
|
69
95
|
* the error. */
|
|
70
96
|
export declare function sendStateOnError(error: unknown): SendState;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
*
|
|
75
|
-
* The runtime can accept the prompt before the browser receives its first SSE
|
|
76
|
-
* status event. Without this optimistic busy state, the 10-second liveness
|
|
77
|
-
* reconciliation never starts. The transcript can then stay at the user
|
|
78
|
-
* message even though the agent completed the turn.
|
|
79
|
-
*/
|
|
80
|
-
export declare function beginRestPromptObservation(sessionId: string): void;
|
|
81
|
-
/** Clear the optimistic REST busy state when the prompt never starts or stops. */
|
|
82
|
-
export declare function endRestPromptObservation(sessionId: string): void;
|
|
83
|
-
/** Stage a reversible OpenCode rollback on one canonical session. */
|
|
97
|
+
export declare function beginRestPromptObservation(sessionId: string, runtimeScope?: string): void;
|
|
98
|
+
export declare function endRestPromptObservation(sessionId: string, runtimeScope?: string): void;
|
|
99
|
+
export declare function sendRestPromptWithObservation(sessionId: string, runtimeScope: string | undefined, sendPrompt: () => Promise<void>): Promise<void>;
|
|
84
100
|
export declare function rewindOpenCodeSession(sessionId: string, messageId: string): Promise<void>;
|
|
85
|
-
/** Restore a staged OpenCode rollback before a replacement prompt commits it. */
|
|
86
101
|
export declare function restoreOpenCodeSessionRewind(sessionId: string): Promise<void>;
|
|
87
102
|
/**
|
|
88
103
|
* Answer an agent question through the session's runtime and drop it from
|
|
@@ -98,12 +113,6 @@ export declare function answerPermission(requestId: string, reply: 'once' | 'alw
|
|
|
98
113
|
export interface UseSessionOptions {
|
|
99
114
|
/** Long-poll budget (ms) the client requests on `/start`; the server clamps it. */
|
|
100
115
|
waitMs?: number;
|
|
101
|
-
/**
|
|
102
|
-
* Override the server-selected AI transport for this hook instance.
|
|
103
|
-
* Hosts can use this for page-scoped diagnostics without changing project
|
|
104
|
-
* configuration. Omit it to use `/start.runtime_transport`.
|
|
105
|
-
*/
|
|
106
|
-
runtimeTransport?: SessionRuntimeTransport;
|
|
107
116
|
/**
|
|
108
117
|
* Replay a stashed first message (prompt + model + agent from the "new session"
|
|
109
118
|
* screen) once the runtime is ready and the thread is empty. Default true. Hosts
|
|
@@ -117,11 +126,8 @@ export interface UseSessionOptions {
|
|
|
117
126
|
*/
|
|
118
127
|
enabled?: boolean;
|
|
119
128
|
/**
|
|
120
|
-
* A server-authorized OpenCode session pin
|
|
121
|
-
*
|
|
122
|
-
* while `/start` runs. The pin returned by `/start` remains authoritative.
|
|
123
|
-
*
|
|
124
|
-
* Do not accept this value from an untrusted browser tenant selector.
|
|
129
|
+
* A server-authorized OpenCode session pin associated with this Kortix
|
|
130
|
+
* session. The `/start` response remains authoritative.
|
|
125
131
|
*/
|
|
126
132
|
initialOpenCodeSessionId?: string | null;
|
|
127
133
|
/**
|
|
@@ -153,10 +159,7 @@ export declare function useSession(projectId: string, sessionId: string, options
|
|
|
153
159
|
sessionId: string;
|
|
154
160
|
/** Canonical OpenCode root id, or null while resolving. */
|
|
155
161
|
opencodeSessionId: string | null;
|
|
156
|
-
|
|
157
|
-
runtimeTransport: SessionRuntimeTransport;
|
|
158
|
-
/** Runtime sessions available for legacy deep-link selection.
|
|
159
|
-
* ACP exposes only the canonical session during this canary. */
|
|
162
|
+
runtimeTransport: "rest";
|
|
160
163
|
runtimeSessions: import("@opencode-ai/sdk/v2/types").Session[];
|
|
161
164
|
runtimeSessionsLoading: boolean;
|
|
162
165
|
runtimeSessionsListed: boolean;
|
|
@@ -202,11 +205,8 @@ export declare function useSession(projectId: string, sessionId: string, options
|
|
|
202
205
|
/** Last `send` failure, typed (billing / runtime-not-ready / runtime-error),
|
|
203
206
|
* or null. Reset on every new `send` call. */
|
|
204
207
|
sendError: KortixSendError | null;
|
|
205
|
-
/** Selected user message while a reversible history rewind is staged. */
|
|
206
208
|
rewindMessageId: string | null;
|
|
207
|
-
/** True while the runtime stages or restores a history rewind. */
|
|
208
209
|
rewindPending: boolean;
|
|
209
|
-
/** Last history rewind failure, or null. */
|
|
210
210
|
rewindError: KortixSendError | null;
|
|
211
211
|
models: import("./model-flatten.js").FlatModel[];
|
|
212
212
|
agents: import("@opencode-ai/sdk/v2/types").Agent[];
|
|
@@ -222,27 +222,24 @@ export declare function useSession(projectId: string, sessionId: string, options
|
|
|
222
222
|
agent?: string | null;
|
|
223
223
|
variant?: string | null;
|
|
224
224
|
}) => void;
|
|
225
|
-
/** Send text and file prompt parts through the selected SDK transport. */
|
|
226
225
|
sendParts: (parts: PromptPart[], override?: {
|
|
227
226
|
model?: ModelKey | null;
|
|
228
227
|
agent?: string | null;
|
|
229
228
|
variant?: string | null;
|
|
230
229
|
directory?: string | null;
|
|
231
230
|
}) => Promise<void>;
|
|
232
|
-
/** Rewind this canonical session to one user message. */
|
|
233
231
|
rewind: (messageId: string) => Promise<void>;
|
|
234
|
-
/** Restore the removed path before a replacement prompt commits it. */
|
|
235
232
|
restoreRewind: () => Promise<void>;
|
|
236
233
|
cancel: () => void;
|
|
237
234
|
runCommand: (command: string, args: string, options?: SessionCommandOptions) => Promise<void>;
|
|
238
235
|
/** Answer an agent question through the server and drop it from pending
|
|
239
236
|
* state on success; throws a `KortixSendError` and leaves it pending on
|
|
240
237
|
* failure. */
|
|
241
|
-
answerQuestion:
|
|
238
|
+
answerQuestion: typeof answerQuestion;
|
|
242
239
|
/** Reject an agent question through the server (see `answerQuestion`). */
|
|
243
|
-
rejectQuestion:
|
|
240
|
+
rejectQuestion: typeof rejectQuestion;
|
|
244
241
|
/** Answer an agent permission request through the server (see `answerQuestion`). */
|
|
245
|
-
answerPermission:
|
|
242
|
+
answerPermission: typeof answerPermission;
|
|
246
243
|
/** @deprecated Drops the question from local state WITHOUT replying to the
|
|
247
244
|
* server — the agent run stays blocked waiting on it. Use `answerQuestion`
|
|
248
245
|
* / `rejectQuestion` instead. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-session.d.ts","sourceRoot":"","sources":["../../src/react/use-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-session.d.ts","sourceRoot":"","sources":["../../src/react/use-session.ts"],"names":[],"mappings":"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"}
|