@kortix/sdk 0.11.0 → 0.12.1
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/github.d.ts +7 -1
- package/dist/core/rest/projects-client/github.d.ts.map +1 -1
- package/dist/core/rest/projects-client/github.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 +2 -0
- package/dist/core/rest/projects-client/index.d.ts.map +1 -1
- package/dist/core/rest/projects-client/index.js +2 -0
- package/dist/core/rest/projects-client/index.js.map +1 -1
- package/dist/core/rest/projects-client/model-enablement.d.ts +9 -0
- package/dist/core/rest/projects-client/model-enablement.d.ts.map +1 -0
- package/dist/core/rest/projects-client/model-enablement.js +16 -0
- package/dist/core/rest/projects-client/model-enablement.js.map +1 -0
- 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 +87 -1
- package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
- package/dist/core/rest/projects-client/projects.js +8 -0
- 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 +94 -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 +1 -2
- 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 +20 -0
- package/dist/react/model-flatten.d.ts.map +1 -1
- package/dist/react/model-flatten.js +12 -0
- package/dist/react/model-flatten.js.map +1 -1
- package/dist/react/opencode.d.ts +4 -3
- package/dist/react/opencode.d.ts.map +1 -1
- package/dist/react/opencode.js +4 -3
- package/dist/react/opencode.js.map +1 -1
- package/dist/react/provider-selection.d.ts +9 -0
- package/dist/react/provider-selection.d.ts.map +1 -1
- package/dist/react/provider-selection.js +23 -0
- package/dist/react/provider-selection.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-enablement.d.ts +25 -0
- package/dist/react/use-model-enablement.d.ts.map +1 -0
- package/dist/react/use-model-enablement.js +92 -0
- package/dist/react/use-model-enablement.js.map +1 -0
- 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-local.d.ts +5 -4
- package/dist/react/use-opencode-local.d.ts.map +1 -1
- package/dist/react/use-opencode-local.js +20 -37
- package/dist/react/use-opencode-local.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 +60 -40
- package/dist/react/use-session.d.ts.map +1 -1
- package/dist/react/use-session.js +160 -202
- 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
|
@@ -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,8 +12,47 @@ 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
|
-
export type KortixSendErrorKind = 'billing' | 'runtime-not-ready' | 'runtime-error';
|
|
42
|
+
export type KortixSendErrorKind = 'billing' | 'connector' | 'runtime-not-ready' | 'runtime-error';
|
|
43
|
+
/** One connector the session needs and has no usable connection for. */
|
|
44
|
+
export interface KortixSendErrorConnector {
|
|
45
|
+
id: string;
|
|
46
|
+
slug: string;
|
|
47
|
+
name: string;
|
|
48
|
+
/**
|
|
49
|
+
* `project` — one shared connection serves everyone, so anyone who can mint a
|
|
50
|
+
* setup link fixes it once. `user` — the connection must belong to the account
|
|
51
|
+
* the session RUNS AS, which in a wrapper is the operator, not the end-user.
|
|
52
|
+
* The distinction decides whether a connect button can help at all.
|
|
53
|
+
*/
|
|
54
|
+
authorization_strategy: 'project' | 'user';
|
|
55
|
+
}
|
|
17
56
|
/** Typed failure surfaced by `send` (via `sendError`) and thrown by
|
|
18
57
|
* `answerQuestion`/`rejectQuestion`/`answerPermission`. */
|
|
19
58
|
export interface KortixSendError {
|
|
@@ -22,6 +61,16 @@ export interface KortixSendError {
|
|
|
22
61
|
message: string;
|
|
23
62
|
/** Present when `kind === 'billing'` — the parsed 402 detail. */
|
|
24
63
|
billing?: BillingError;
|
|
64
|
+
/**
|
|
65
|
+
* Present when `kind === 'connector'` — the connectors this session requires
|
|
66
|
+
* and has no usable connection for.
|
|
67
|
+
*
|
|
68
|
+
* The platform refuses these turns BEFORE the sandbox sees them, so nothing
|
|
69
|
+
* streamed and nothing was spent. Without this field the refusal collapsed
|
|
70
|
+
* into a generic `runtime-error`, and the host could only show "something went
|
|
71
|
+
* wrong" for the one failure that has an obvious remedy.
|
|
72
|
+
*/
|
|
73
|
+
connectors?: KortixSendErrorConnector[];
|
|
25
74
|
/**
|
|
26
75
|
* Present when `kind === 'runtime-error'` and the failure carries the LLM
|
|
27
76
|
* gateway's structured error envelope (provider/code/suggestion/...) — see
|
|
@@ -68,21 +117,10 @@ export declare function sendStateOnStart(text: string): SendState;
|
|
|
68
117
|
/** New state when a send fails — drops the optimistic message and classifies
|
|
69
118
|
* the error. */
|
|
70
119
|
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. */
|
|
120
|
+
export declare function beginRestPromptObservation(sessionId: string, runtimeScope?: string): void;
|
|
121
|
+
export declare function endRestPromptObservation(sessionId: string, runtimeScope?: string): void;
|
|
122
|
+
export declare function sendRestPromptWithObservation(sessionId: string, runtimeScope: string | undefined, sendPrompt: () => Promise<void>): Promise<void>;
|
|
84
123
|
export declare function rewindOpenCodeSession(sessionId: string, messageId: string): Promise<void>;
|
|
85
|
-
/** Restore a staged OpenCode rollback before a replacement prompt commits it. */
|
|
86
124
|
export declare function restoreOpenCodeSessionRewind(sessionId: string): Promise<void>;
|
|
87
125
|
/**
|
|
88
126
|
* Answer an agent question through the session's runtime and drop it from
|
|
@@ -98,12 +136,6 @@ export declare function answerPermission(requestId: string, reply: 'once' | 'alw
|
|
|
98
136
|
export interface UseSessionOptions {
|
|
99
137
|
/** Long-poll budget (ms) the client requests on `/start`; the server clamps it. */
|
|
100
138
|
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
139
|
/**
|
|
108
140
|
* Replay a stashed first message (prompt + model + agent from the "new session"
|
|
109
141
|
* screen) once the runtime is ready and the thread is empty. Default true. Hosts
|
|
@@ -117,11 +149,8 @@ export interface UseSessionOptions {
|
|
|
117
149
|
*/
|
|
118
150
|
enabled?: boolean;
|
|
119
151
|
/**
|
|
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.
|
|
152
|
+
* A server-authorized OpenCode session pin associated with this Kortix
|
|
153
|
+
* session. The `/start` response remains authoritative.
|
|
125
154
|
*/
|
|
126
155
|
initialOpenCodeSessionId?: string | null;
|
|
127
156
|
/**
|
|
@@ -153,10 +182,7 @@ export declare function useSession(projectId: string, sessionId: string, options
|
|
|
153
182
|
sessionId: string;
|
|
154
183
|
/** Canonical OpenCode root id, or null while resolving. */
|
|
155
184
|
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. */
|
|
185
|
+
runtimeTransport: "rest";
|
|
160
186
|
runtimeSessions: import("@opencode-ai/sdk/v2/types").Session[];
|
|
161
187
|
runtimeSessionsLoading: boolean;
|
|
162
188
|
runtimeSessionsListed: boolean;
|
|
@@ -202,11 +228,8 @@ export declare function useSession(projectId: string, sessionId: string, options
|
|
|
202
228
|
/** Last `send` failure, typed (billing / runtime-not-ready / runtime-error),
|
|
203
229
|
* or null. Reset on every new `send` call. */
|
|
204
230
|
sendError: KortixSendError | null;
|
|
205
|
-
/** Selected user message while a reversible history rewind is staged. */
|
|
206
231
|
rewindMessageId: string | null;
|
|
207
|
-
/** True while the runtime stages or restores a history rewind. */
|
|
208
232
|
rewindPending: boolean;
|
|
209
|
-
/** Last history rewind failure, or null. */
|
|
210
233
|
rewindError: KortixSendError | null;
|
|
211
234
|
models: import("./model-flatten.js").FlatModel[];
|
|
212
235
|
agents: import("@opencode-ai/sdk/v2/types").Agent[];
|
|
@@ -222,27 +245,24 @@ export declare function useSession(projectId: string, sessionId: string, options
|
|
|
222
245
|
agent?: string | null;
|
|
223
246
|
variant?: string | null;
|
|
224
247
|
}) => void;
|
|
225
|
-
/** Send text and file prompt parts through the selected SDK transport. */
|
|
226
248
|
sendParts: (parts: PromptPart[], override?: {
|
|
227
249
|
model?: ModelKey | null;
|
|
228
250
|
agent?: string | null;
|
|
229
251
|
variant?: string | null;
|
|
230
252
|
directory?: string | null;
|
|
231
253
|
}) => Promise<void>;
|
|
232
|
-
/** Rewind this canonical session to one user message. */
|
|
233
254
|
rewind: (messageId: string) => Promise<void>;
|
|
234
|
-
/** Restore the removed path before a replacement prompt commits it. */
|
|
235
255
|
restoreRewind: () => Promise<void>;
|
|
236
256
|
cancel: () => void;
|
|
237
257
|
runCommand: (command: string, args: string, options?: SessionCommandOptions) => Promise<void>;
|
|
238
258
|
/** Answer an agent question through the server and drop it from pending
|
|
239
259
|
* state on success; throws a `KortixSendError` and leaves it pending on
|
|
240
260
|
* failure. */
|
|
241
|
-
answerQuestion:
|
|
261
|
+
answerQuestion: typeof answerQuestion;
|
|
242
262
|
/** Reject an agent question through the server (see `answerQuestion`). */
|
|
243
|
-
rejectQuestion:
|
|
263
|
+
rejectQuestion: typeof rejectQuestion;
|
|
244
264
|
/** Answer an agent permission request through the server (see `answerQuestion`). */
|
|
245
|
-
answerPermission:
|
|
265
|
+
answerPermission: typeof answerPermission;
|
|
246
266
|
/** @deprecated Drops the question from local state WITHOUT replying to the
|
|
247
267
|
* server — the agent run stays blocked waiting on it. Use `answerQuestion`
|
|
248
268
|
* / `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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"}
|