@kortix/sdk 0.12.8 → 0.13.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 +3 -6
- package/dist/browser/session-sync/session-sync-registry.d.ts +7 -2
- package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
- package/dist/browser/session-sync/session-sync-registry.js +33 -44
- package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
- package/dist/browser/session-sync/session-transcript-cache.d.ts +9 -2
- package/dist/browser/session-sync/session-transcript-cache.d.ts.map +1 -1
- package/dist/browser/session-sync/session-transcript-cache.js +15 -5
- package/dist/browser/session-sync/session-transcript-cache.js.map +1 -1
- package/dist/browser/stores/opencode-compaction-store.d.ts +9 -3
- package/dist/browser/stores/opencode-compaction-store.d.ts.map +1 -1
- package/dist/browser/stores/opencode-compaction-store.js +5 -12
- package/dist/browser/stores/opencode-compaction-store.js.map +1 -1
- package/dist/browser/stores/sandbox-connection-store.d.ts +28 -17
- package/dist/browser/stores/sandbox-connection-store.d.ts.map +1 -1
- package/dist/browser/stores/sandbox-connection-store.js +32 -84
- package/dist/browser/stores/sandbox-connection-store.js.map +1 -1
- package/dist/browser/stores/session-working-store.d.ts +73 -0
- package/dist/browser/stores/session-working-store.d.ts.map +1 -0
- package/dist/browser/stores/session-working-store.js +86 -0
- package/dist/browser/stores/session-working-store.js.map +1 -0
- package/dist/browser/stores/sync-store/types.d.ts +14 -4
- package/dist/browser/stores/sync-store/types.d.ts.map +1 -1
- package/dist/browser/stores/sync-store.d.ts +179 -4
- package/dist/browser/stores/sync-store.d.ts.map +1 -1
- package/dist/browser/stores/sync-store.js +777 -65
- package/dist/browser/stores/sync-store.js.map +1 -1
- package/dist/core/client/kortix.d.ts +95 -0
- package/dist/core/client/kortix.d.ts.map +1 -1
- package/dist/core/client/kortix.js +78 -0
- package/dist/core/client/kortix.js.map +1 -1
- package/dist/core/files/client.d.ts +50 -2
- package/dist/core/files/client.d.ts.map +1 -1
- package/dist/core/files/client.js +253 -44
- package/dist/core/files/client.js.map +1 -1
- package/dist/core/files/types.d.ts +11 -0
- package/dist/core/files/types.d.ts.map +1 -1
- package/dist/core/http/abort-error.d.ts +89 -0
- package/dist/core/http/abort-error.d.ts.map +1 -0
- package/dist/core/http/abort-error.js +190 -0
- package/dist/core/http/abort-error.js.map +1 -0
- package/dist/core/http/api-client.d.ts.map +1 -1
- package/dist/core/http/api-client.js +18 -4
- package/dist/core/http/api-client.js.map +1 -1
- package/dist/core/http/opencode-errors.d.ts +7 -0
- package/dist/core/http/opencode-errors.d.ts.map +1 -1
- package/dist/core/http/opencode-errors.js +45 -13
- package/dist/core/http/opencode-errors.js.map +1 -1
- package/dist/core/rest/platform-client/github-app.d.ts +13 -0
- package/dist/core/rest/platform-client/github-app.d.ts.map +1 -1
- package/dist/core/rest/platform-client/github-app.js +2 -0
- package/dist/core/rest/platform-client/github-app.js.map +1 -1
- package/dist/core/rest/platform-client/members.d.ts +10 -64
- package/dist/core/rest/platform-client/members.d.ts.map +1 -1
- package/dist/core/rest/platform-client/members.js +10 -28
- package/dist/core/rest/platform-client/members.js.map +1 -1
- package/dist/core/rest/projects-client/accounts.d.ts +30 -5
- package/dist/core/rest/projects-client/accounts.d.ts.map +1 -1
- package/dist/core/rest/projects-client/accounts.js +1 -1
- package/dist/core/rest/projects-client/accounts.js.map +1 -1
- package/dist/core/rest/projects-client/apps.d.ts +13 -0
- package/dist/core/rest/projects-client/apps.d.ts.map +1 -1
- package/dist/core/rest/projects-client/apps.js.map +1 -1
- package/dist/core/rest/projects-client/assignments.d.ts +114 -0
- package/dist/core/rest/projects-client/assignments.d.ts.map +1 -0
- package/dist/core/rest/projects-client/assignments.js +91 -0
- package/dist/core/rest/projects-client/assignments.js.map +1 -0
- package/dist/core/rest/projects-client/billing.d.ts +10 -1
- package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
- package/dist/core/rest/projects-client/billing.js +11 -2
- package/dist/core/rest/projects-client/billing.js.map +1 -1
- package/dist/core/rest/projects-client/connectors.d.ts +69 -1
- package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
- package/dist/core/rest/projects-client/connectors.js +17 -0
- package/dist/core/rest/projects-client/connectors.js.map +1 -1
- package/dist/core/rest/projects-client/files.js +2 -2
- package/dist/core/rest/projects-client/files.js.map +1 -1
- package/dist/core/rest/projects-client/gateway.d.ts +51 -0
- package/dist/core/rest/projects-client/gateway.d.ts.map +1 -1
- package/dist/core/rest/projects-client/gateway.js.map +1 -1
- package/dist/core/rest/projects-client/iam.d.ts +51 -3
- package/dist/core/rest/projects-client/iam.d.ts.map +1 -1
- package/dist/core/rest/projects-client/iam.js +18 -1
- 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/projects.d.ts +1 -1
- package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
- package/dist/core/rest/projects-client/projects.js +2 -0
- package/dist/core/rest/projects-client/projects.js.map +1 -1
- package/dist/core/rest/projects-client/secrets.d.ts +19 -1
- package/dist/core/rest/projects-client/secrets.d.ts.map +1 -1
- package/dist/core/rest/projects-client/secrets.js +1 -1
- package/dist/core/rest/projects-client/secrets.js.map +1 -1
- package/dist/core/rest/projects-client/session-costs.d.ts +33 -0
- package/dist/core/rest/projects-client/session-costs.d.ts.map +1 -1
- package/dist/core/rest/projects-client/session-costs.js.map +1 -1
- package/dist/core/rest/projects-client/sessions.d.ts +261 -2
- package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
- package/dist/core/rest/projects-client/sessions.js +106 -4
- package/dist/core/rest/projects-client/sessions.js.map +1 -1
- package/dist/core/rest/projects-client/shared.d.ts +10 -1
- package/dist/core/rest/projects-client/shared.d.ts.map +1 -1
- package/dist/core/rest/projects-client/shared.js.map +1 -1
- package/dist/core/rest/projects-client/tokens.d.ts +13 -1
- package/dist/core/rest/projects-client/tokens.d.ts.map +1 -1
- package/dist/core/rest/projects-client/tokens.js +7 -2
- package/dist/core/rest/projects-client/tokens.js.map +1 -1
- package/dist/core/rest/projects-client/triggers.d.ts +69 -2
- package/dist/core/rest/projects-client/triggers.d.ts.map +1 -1
- package/dist/core/rest/projects-client/triggers.js +1 -1
- package/dist/core/rest/projects-client/triggers.js.map +1 -1
- package/dist/core/session/compaction.d.ts +98 -0
- package/dist/core/session/compaction.d.ts.map +1 -0
- package/dist/core/session/compaction.js +108 -0
- package/dist/core/session/compaction.js.map +1 -0
- package/dist/core/session/health.d.ts +22 -0
- package/dist/core/session/health.d.ts.map +1 -1
- package/dist/core/session/health.js +31 -5
- package/dist/core/session/health.js.map +1 -1
- package/dist/core/session/index.d.ts +2 -0
- package/dist/core/session/index.d.ts.map +1 -1
- package/dist/core/session/index.js +2 -0
- package/dist/core/session/index.js.map +1 -1
- package/dist/core/session/message-queue.d.ts +79 -15
- package/dist/core/session/message-queue.d.ts.map +1 -1
- package/dist/core/session/message-queue.js +73 -27
- package/dist/core/session/message-queue.js.map +1 -1
- package/dist/core/session/rewind.d.ts +76 -10
- package/dist/core/session/rewind.d.ts.map +1 -1
- package/dist/core/session/rewind.js +68 -11
- package/dist/core/session/rewind.js.map +1 -1
- package/dist/core/session/working.d.ts +241 -0
- package/dist/core/session/working.d.ts.map +1 -0
- package/dist/core/session/working.js +261 -0
- package/dist/core/session/working.js.map +1 -0
- package/dist/core/session-sync/session-sync-controller.d.ts +35 -20
- package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
- package/dist/core/session-sync/session-sync-controller.js +48 -115
- package/dist/core/session-sync/session-sync-controller.js.map +1 -1
- package/dist/core/stream/event-stream.d.ts +22 -0
- package/dist/core/stream/event-stream.d.ts.map +1 -1
- package/dist/core/stream/event-stream.js +132 -36
- package/dist/core/stream/event-stream.js.map +1 -1
- package/dist/core/turns/grouping.d.ts +18 -2
- package/dist/core/turns/grouping.d.ts.map +1 -1
- package/dist/core/turns/grouping.js +45 -2
- package/dist/core/turns/grouping.js.map +1 -1
- package/dist/core/turns/index.d.ts +1 -0
- package/dist/core/turns/index.d.ts.map +1 -1
- package/dist/core/turns/index.js +1 -0
- package/dist/core/turns/index.js.map +1 -1
- package/dist/core/turns/open-turn.d.ts +81 -0
- package/dist/core/turns/open-turn.d.ts.map +1 -0
- package/dist/core/turns/open-turn.js +77 -0
- package/dist/core/turns/open-turn.js.map +1 -0
- package/dist/core/turns/state.js +26 -26
- package/dist/core/turns/state.js.map +1 -1
- package/dist/core/turns/types.d.ts +5 -0
- package/dist/core/turns/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/kortix.esm.min.js +25 -25
- package/dist/kortix.global.js +25 -25
- package/dist/node/server.d.ts.map +1 -1
- package/dist/node/server.js +14 -2
- package/dist/node/server.js.map +1 -1
- package/dist/react/index.d.ts +2 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +7 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/initial-session-pin.d.ts +17 -0
- package/dist/react/initial-session-pin.d.ts.map +1 -1
- package/dist/react/initial-session-pin.js +58 -0
- package/dist/react/initial-session-pin.js.map +1 -1
- package/dist/react/opencode.d.ts +6 -2
- package/dist/react/opencode.d.ts.map +1 -1
- package/dist/react/opencode.js +5 -1
- package/dist/react/opencode.js.map +1 -1
- package/dist/react/prefetch-session-start.d.ts +10 -4
- package/dist/react/prefetch-session-start.d.ts.map +1 -1
- package/dist/react/prefetch-session-start.js +10 -4
- package/dist/react/prefetch-session-start.js.map +1 -1
- package/dist/react/query-contracts.d.ts +2 -0
- package/dist/react/query-contracts.d.ts.map +1 -1
- package/dist/react/query-contracts.js +2 -0
- package/dist/react/query-contracts.js.map +1 -1
- package/dist/react/query-keys.d.ts +13 -2
- package/dist/react/query-keys.d.ts.map +1 -1
- package/dist/react/query-keys.js +13 -2
- package/dist/react/query-keys.js.map +1 -1
- package/dist/react/session-start-stash.d.ts +25 -0
- package/dist/react/session-start-stash.d.ts.map +1 -1
- package/dist/react/session-start-stash.js +34 -3
- package/dist/react/session-start-stash.js.map +1 -1
- package/dist/react/session-title-sync.d.ts +5 -1
- package/dist/react/session-title-sync.d.ts.map +1 -1
- package/dist/react/session-title-sync.js +16 -4
- package/dist/react/session-title-sync.js.map +1 -1
- package/dist/react/use-can.d.ts +105 -0
- package/dist/react/use-can.d.ts.map +1 -0
- package/dist/react/use-can.js +190 -0
- package/dist/react/use-can.js.map +1 -0
- package/dist/react/use-canonical-opencode-session.d.ts +6 -1
- package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
- package/dist/react/use-canonical-opencode-session.js +46 -3
- package/dist/react/use-canonical-opencode-session.js.map +1 -1
- package/dist/react/use-opencode-events/handle-event.d.ts +10 -0
- package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -1
- package/dist/react/use-opencode-events/handle-event.js +76 -7
- package/dist/react/use-opencode-events/handle-event.js.map +1 -1
- package/dist/react/use-opencode-events/helpers.d.ts +21 -8
- package/dist/react/use-opencode-events/helpers.d.ts.map +1 -1
- package/dist/react/use-opencode-events/helpers.js +25 -26
- package/dist/react/use-opencode-events/helpers.js.map +1 -1
- package/dist/react/use-opencode-events/index.d.ts.map +1 -1
- package/dist/react/use-opencode-events/index.js +43 -26
- package/dist/react/use-opencode-events/index.js.map +1 -1
- package/dist/react/use-opencode-events/use-event-stream-refs.d.ts.map +1 -1
- package/dist/react/use-opencode-events/use-event-stream-refs.js +66 -3
- package/dist/react/use-opencode-events/use-event-stream-refs.js.map +1 -1
- package/dist/react/use-opencode-local.d.ts +17 -0
- package/dist/react/use-opencode-local.d.ts.map +1 -1
- package/dist/react/use-opencode-local.js +41 -7
- package/dist/react/use-opencode-local.js.map +1 -1
- package/dist/react/use-opencode-sessions/messages.d.ts +101 -1
- package/dist/react/use-opencode-sessions/messages.d.ts.map +1 -1
- package/dist/react/use-opencode-sessions/messages.js +481 -63
- package/dist/react/use-opencode-sessions/messages.js.map +1 -1
- package/dist/react/use-project-apps.d.ts +24 -1
- package/dist/react/use-project-apps.d.ts.map +1 -1
- package/dist/react/use-project-apps.js +5 -3
- package/dist/react/use-project-apps.js.map +1 -1
- package/dist/react/use-runtime-boot-stalled.d.ts +32 -0
- package/dist/react/use-runtime-boot-stalled.d.ts.map +1 -0
- package/dist/react/use-runtime-boot-stalled.js +48 -0
- package/dist/react/use-runtime-boot-stalled.js.map +1 -0
- package/dist/react/use-runtime-reconnect.d.ts +67 -1
- package/dist/react/use-runtime-reconnect.d.ts.map +1 -1
- package/dist/react/use-runtime-reconnect.js +116 -18
- package/dist/react/use-runtime-reconnect.js.map +1 -1
- package/dist/react/use-session-prompts.d.ts +113 -0
- package/dist/react/use-session-prompts.d.ts.map +1 -0
- package/dist/react/use-session-prompts.js +250 -0
- package/dist/react/use-session-prompts.js.map +1 -0
- package/dist/react/use-session-send.d.ts +169 -20
- package/dist/react/use-session-send.d.ts.map +1 -1
- package/dist/react/use-session-send.js +183 -30
- package/dist/react/use-session-send.js.map +1 -1
- package/dist/react/use-session-sync.d.ts +35 -2
- package/dist/react/use-session-sync.d.ts.map +1 -1
- package/dist/react/use-session-sync.js +49 -11
- package/dist/react/use-session-sync.js.map +1 -1
- package/dist/react/use-session-working.d.ts +57 -0
- package/dist/react/use-session-working.d.ts.map +1 -0
- package/dist/react/use-session-working.js +178 -0
- package/dist/react/use-session-working.js.map +1 -0
- package/dist/react/use-session.d.ts +131 -5
- package/dist/react/use-session.d.ts.map +1 -1
- package/dist/react/use-session.js +358 -69
- package/dist/react/use-session.js.map +1 -1
- package/package.json +2 -2
- package/dist/browser/stores/tab-store.d.ts +0 -91
- package/dist/browser/stores/tab-store.d.ts.map +0 -1
- package/dist/browser/stores/tab-store.js +0 -369
- package/dist/browser/stores/tab-store.js.map +0 -1
- package/dist/core/session/send-queue.d.ts +0 -70
- package/dist/core/session/send-queue.d.ts.map +0 -1
- package/dist/core/session/send-queue.js +0 -116
- package/dist/core/session/send-queue.js.map +0 -1
|
@@ -1,15 +1,58 @@
|
|
|
1
1
|
import type { Message, Event as OpenCodeEvent, Part, SessionStatus, Todo } from "@opencode-ai/sdk/v2/client";
|
|
2
2
|
import { ascendingId } from "./sync-store/ascending-id.js";
|
|
3
3
|
import { Binary } from "./sync-store/binary.js";
|
|
4
|
-
import type { FileDiff, MessageError, MessageWithParts } from "./sync-store/types.js";
|
|
4
|
+
import type { FileDiff, MessageError, MessageWithParts, SessionRewindState } from "./sync-store/types.js";
|
|
5
5
|
export { ascendingId, Binary };
|
|
6
|
-
export type { MessageError, MessageWithParts };
|
|
6
|
+
export type { MessageError, MessageWithParts, SessionRewindState };
|
|
7
|
+
/**
|
|
8
|
+
* Do two `SessionStatus` values say the same thing?
|
|
9
|
+
*
|
|
10
|
+
* NOT a deep equality: it compares `type` plus exactly the fields the retry
|
|
11
|
+
* readers actually read — `getRetryInfo` / `getRetryMessage` in
|
|
12
|
+
* `core/turns/state.ts` take `attempt`, `message` and `next`. A blanket
|
|
13
|
+
* deep-equal would also compare `action`, which nothing reads, and would then
|
|
14
|
+
* mint a new observation for a change no surface can render.
|
|
15
|
+
*
|
|
16
|
+
* The point of the comparison is object identity, not the boolean: a status
|
|
17
|
+
* frame is an OBSERVATION, and `useSessionWorking` dates it by the identity of
|
|
18
|
+
* the object in the store. Two equal values are one observation.
|
|
19
|
+
*/
|
|
20
|
+
export declare function sameSessionStatus(a: SessionStatus | undefined, b: SessionStatus | undefined): boolean;
|
|
7
21
|
interface SyncState {
|
|
8
22
|
messages: Record<string, Message[]>;
|
|
9
23
|
parts: Record<string, Part[]>;
|
|
10
24
|
sessionStatus: Record<string, SessionStatus>;
|
|
11
25
|
diffs: Record<string, FileDiff[]>;
|
|
12
26
|
todos: Record<string, Todo[]>;
|
|
27
|
+
/**
|
|
28
|
+
* T22 — the client's mirror of the server's staged/committed session
|
|
29
|
+
* revert, per session. `null` means "no revert pointer" (either never
|
|
30
|
+
* staged, or observed cleared/committed-and-deleted). Absent from the
|
|
31
|
+
* record entirely (`undefined` via plain lookup) means the same thing as
|
|
32
|
+
* `null` — no session has ever had one tracked.
|
|
33
|
+
*
|
|
34
|
+
* Driven by three independent sources that must all converge on the same
|
|
35
|
+
* shape: a local `rewind()` REST call (`useSession`), the wire events
|
|
36
|
+
* `session.next.revert.staged/.cleared/.committed` (below, via
|
|
37
|
+
* `applyEvent`), and a `Session.revert` field read off `session.created`/
|
|
38
|
+
* `session.updated` (`syncSessionRevertFromInfo`, called from
|
|
39
|
+
* `use-opencode-events/handle-event.ts` — the reload/cross-tab recovery
|
|
40
|
+
* path, since a hard reload observes neither of the other two).
|
|
41
|
+
*/
|
|
42
|
+
sessionRevert: Record<string, SessionRewindState | null>;
|
|
43
|
+
/**
|
|
44
|
+
* F2 — set when a `session.next.revert.committed` event arrives for a
|
|
45
|
+
* session with NO tracked local `sessionRevert` record (a fresh mount, or
|
|
46
|
+
* a second tab that never observed `.staged`). The store deliberately
|
|
47
|
+
* does not guess a watermark and delete a range in that case — see
|
|
48
|
+
* `markSessionRevertNeedsTailReconcile`'s doc comment for why — so this
|
|
49
|
+
* is the signal a consumer (the sync controller / `use-opencode-events`)
|
|
50
|
+
* reads to know it must fetch the session's real transcript instead of
|
|
51
|
+
* trusting local messages. `true` means "reconcile owed"; absent or
|
|
52
|
+
* `false` means nothing is owed. Cleared by
|
|
53
|
+
* `clearSessionRevertNeedsTailReconcile` once a consumer has acted on it.
|
|
54
|
+
*/
|
|
55
|
+
sessionRevertNeedsTailReconcile: Record<string, boolean>;
|
|
13
56
|
applyEvent: (event: OpenCodeEvent) => void;
|
|
14
57
|
upsertMessage: (sessionID: string, message: Message) => void;
|
|
15
58
|
removeMessage: (sessionID: string, messageID: string) => void;
|
|
@@ -45,11 +88,84 @@ interface SyncState {
|
|
|
45
88
|
* it technically part of the published surface, so an out-of-repo consumer
|
|
46
89
|
* calling it directly would fail to compile — that needs a semver-relevant
|
|
47
90
|
* callout in the next release notes.
|
|
91
|
+
*
|
|
92
|
+
* `eventID` (T14): the wire's own `message.part.delta` event id
|
|
93
|
+
* (`event.id`, not `event.properties.id` — see `deltaEventTails` above for
|
|
94
|
+
* why this is the correct duplicate-delivery key). Optional and additive:
|
|
95
|
+
* omitting it reproduces this function's exact pre-existing behavior, so
|
|
96
|
+
* the one in-repo caller change (`applyEvent`) is the only place this
|
|
97
|
+
* matters, and appending a trailing optional param is not a breaking
|
|
98
|
+
* arity change.
|
|
48
99
|
*/
|
|
49
|
-
applyPartDelta: (sessionID: string, messageID: string, partID: string, field: string, delta: string) => void;
|
|
100
|
+
applyPartDelta: (sessionID: string, messageID: string, partID: string, field: string, delta: string, eventID?: string) => void;
|
|
50
101
|
setStatus: (sessionID: string, status: SessionStatus) => void;
|
|
51
102
|
setDiff: (sessionID: string, diffs: FileDiff[]) => void;
|
|
52
103
|
setTodo: (sessionID: string, todos: Todo[]) => void;
|
|
104
|
+
/**
|
|
105
|
+
* Stage a rewind's local hide window. Idempotent per boundary id: calling
|
|
106
|
+
* this again for the SAME `messageID` while already staged is a no-op —
|
|
107
|
+
* whichever caller stages first freezes the watermark, and a redundant
|
|
108
|
+
* echo (the local REST caller AND the wire's `.staged` confirmation both
|
|
109
|
+
* call this for the same action) must never widen it after messages have
|
|
110
|
+
* moved on. A DIFFERENT `messageID` replaces the record with a fresh
|
|
111
|
+
* watermark computed from the CURRENTLY known message list.
|
|
112
|
+
*/
|
|
113
|
+
stageSessionRevert: (sessionId: string, messageId: string) => void;
|
|
114
|
+
/** Mark a staged rewind committed (Restore stops being offered) without
|
|
115
|
+
* dropping its hide window — see `commitSessionRewind`'s doc comment.
|
|
116
|
+
* No-op when nothing is tracked for this session. */
|
|
117
|
+
commitSessionRevert: (sessionId: string) => void;
|
|
118
|
+
/** Drop the local revert record entirely — `unrevert` succeeded, or a
|
|
119
|
+
* `session.next.revert.cleared` wire event says the server dropped it.
|
|
120
|
+
* The window was only ever HIDDEN while staged, never deleted, so
|
|
121
|
+
* clearing alone is enough to make every row visible again. */
|
|
122
|
+
clearSessionRevert: (sessionId: string) => void;
|
|
123
|
+
/**
|
|
124
|
+
* The `.committed` event's actual cleanup: delete every message (and its
|
|
125
|
+
* parts) inside `[boundaryId, watermark]` and drop the revert record. The
|
|
126
|
+
* first explicit deletion this store performs for rewind — `hydrate`
|
|
127
|
+
* never deletes (see its own doc comment), by design; this is a
|
|
128
|
+
* dedicated, separately tested action instead of a weakening of that
|
|
129
|
+
* invariant. A session with no local messages (or nothing in range)
|
|
130
|
+
* safely clears the record and does nothing else.
|
|
131
|
+
*/
|
|
132
|
+
applyCommittedRevert: (sessionId: string, boundaryId: string, watermark: string) => void;
|
|
133
|
+
/**
|
|
134
|
+
* F2 — mark `sessionId` as owing a tail reconcile: a
|
|
135
|
+
* `session.next.revert.committed` event arrived with no tracked local
|
|
136
|
+
* `sessionRevert` record to source a trustworthy watermark from. The
|
|
137
|
+
* REMOVED fallback (`newestMessageId(local messages)`) could be the
|
|
138
|
+
* user's own REPLACEMENT prompt — if its `message.updated` happened to
|
|
139
|
+
* arrive before this `.committed` event, that fallback deleted the
|
|
140
|
+
* replacement and its answer along with the abandoned range. Deliberately
|
|
141
|
+
* does NOT touch `messages`/`parts`/`sessionRevert` — the server's own
|
|
142
|
+
* transcript (fetched by whatever the flagged consumer's reconcile reads)
|
|
143
|
+
* is the only trustworthy source of the real truncation here, not a
|
|
144
|
+
* local guess.
|
|
145
|
+
*/
|
|
146
|
+
markSessionRevertNeedsTailReconcile: (sessionId: string) => void;
|
|
147
|
+
/** Consumer-side ack for {@link markSessionRevertNeedsTailReconcile} — call
|
|
148
|
+
* once the flagged session's tail has actually been reconciled against
|
|
149
|
+
* the server. */
|
|
150
|
+
clearSessionRevertNeedsTailReconcile: (sessionId: string) => void;
|
|
151
|
+
/**
|
|
152
|
+
* Reconcile the local revert record against a `Session.revert` field read
|
|
153
|
+
* off a `session.created`/`session.updated` event's `info` — the reload
|
|
154
|
+
* and cross-tab recovery path. A hard page reload observes neither a
|
|
155
|
+
* fresh `rewind()` call nor a `.staged` wire transition (that already
|
|
156
|
+
* happened, possibly in a different tab or before this tab existed), so
|
|
157
|
+
* this is the only way a reload can rediscover an already-staged revert.
|
|
158
|
+
*
|
|
159
|
+
* Deliberately asymmetric: a PRESENT `revert.messageID` seeds a fresh
|
|
160
|
+
* local record (via `stageSessionRevert`, so the same idempotency and
|
|
161
|
+
* watermark-freezing rules apply) — but an ABSENT one never clears an
|
|
162
|
+
* existing record. The three wire events are the sole authority for
|
|
163
|
+
* transitions; a stale or momentarily-absent `Session.revert` snapshot
|
|
164
|
+
* must never race ahead of (or override) them.
|
|
165
|
+
*/
|
|
166
|
+
syncSessionRevertFromInfo: (sessionId: string, revert: {
|
|
167
|
+
messageID: string;
|
|
168
|
+
} | null | undefined) => void;
|
|
53
169
|
optimisticAdd: (sessionID: string, message: Message, messageParts: Part[]) => void;
|
|
54
170
|
optimisticRemove: (sessionID: string, messageID: string) => void;
|
|
55
171
|
/**
|
|
@@ -64,11 +180,61 @@ interface SyncState {
|
|
|
64
180
|
* part-id correlation still supersedes their messages normally.
|
|
65
181
|
*/
|
|
66
182
|
markOptimisticDispatched: (sessionID: string, messageID: string) => void;
|
|
183
|
+
/**
|
|
184
|
+
* Mark an optimistic message as held DURABLY by the control plane — its
|
|
185
|
+
* prompt-inbox row landed (the POST returned). From here the message is not
|
|
186
|
+
* "unconfirmed": the server has it and will deliver it, so the local idle
|
|
187
|
+
* sweep ({@link SyncState.clearOptimisticMessages}) must not delete it. It
|
|
188
|
+
* leaves the transcript only by the runtime's echo (same id, or a re-minted
|
|
189
|
+
* one — see {@link SyncState.optimisticEchoOf}), by
|
|
190
|
+
* {@link SyncState.optimisticRemove}, or with the session.
|
|
191
|
+
*/
|
|
192
|
+
markOptimisticInboxBacked: (sessionID: string, messageID: string) => void;
|
|
67
193
|
clearOptimisticMessages: (sessionID: string) => void;
|
|
194
|
+
/**
|
|
195
|
+
* The runtime's id for an optimistic message that was superseded under a
|
|
196
|
+
* DIFFERENT id (the control plane re-mints a wire id that would sort below
|
|
197
|
+
* the transcript tip). Lets a host keep ONE identity for the prompt across
|
|
198
|
+
* the swap — a React key, an inbox row's `message_id` — instead of seeing
|
|
199
|
+
* two. Undefined for a message confirmed under its own id or never
|
|
200
|
+
* superseded.
|
|
201
|
+
*/
|
|
202
|
+
optimisticEchoOf: (sessionID: string, optimisticID: string) => string | undefined;
|
|
203
|
+
/** The inverse of {@link SyncState.optimisticEchoOf}. */
|
|
204
|
+
optimisticOriginOf: (sessionID: string, echoID: string) => string | undefined;
|
|
205
|
+
/**
|
|
206
|
+
* Announce, AHEAD of the echo, which runtime id an optimistic message will
|
|
207
|
+
* come back under. The control plane re-mints a queued prompt's wire id at
|
|
208
|
+
* delivery and lists BOTH ids on the row — so the pairing is known before
|
|
209
|
+
* any `message.updated` arrives. With it recorded, the echo supersedes ITS
|
|
210
|
+
* OWN bubble; without it, an echo whose parts had not landed yet fell back
|
|
211
|
+
* to superseding the OLDEST in-flight optimistic message (measured: a
|
|
212
|
+
* burst's first bubble vanished, replaced by the second's echo).
|
|
213
|
+
*/
|
|
214
|
+
registerOptimisticEcho: (sessionID: string, optimisticID: string, echoID: string) => void;
|
|
215
|
+
/**
|
|
216
|
+
* The user CANCELLED this message (`DELETE .../prompts`): drop its bubble
|
|
217
|
+
* and every claim on it — the reclaim that normally protects a
|
|
218
|
+
* control-plane-owned message from `message.removed` must not resurrect
|
|
219
|
+
* something the user explicitly removed.
|
|
220
|
+
*/
|
|
221
|
+
forgetControlPlaneMessage: (sessionID: string, messageID: string) => void;
|
|
68
222
|
/** True when the session's message list still holds an unconfirmed optimistic
|
|
69
223
|
* message — lets the SSE reconciler avoid idling+clearing a brand-new session
|
|
70
224
|
* whose first prompt the server hasn't registered yet. */
|
|
71
225
|
hasOptimisticMessages: (sessionID: string) => boolean;
|
|
226
|
+
/** Is this message still this tab's optimistic stub (not yet confirmed
|
|
227
|
+
* by the runtime)? Hosts use it to keep stubs out of anything that must
|
|
228
|
+
* only hold what the runtime holds — the disk transcript cache. */
|
|
229
|
+
isOptimisticMessage: (sessionID: string, messageID: string) => boolean;
|
|
230
|
+
/**
|
|
231
|
+
* A `message.removed` for a user message the control plane still owns
|
|
232
|
+
* (an inbox-backed send the runtime confirmed) is a RE-PLACEMENT in
|
|
233
|
+
* progress — the server took the copy out to insert it again under a new
|
|
234
|
+
* id. Keeps the bubble as an optimistic stub for the next echo to
|
|
235
|
+
* supersede. Returns true when the removal was absorbed this way.
|
|
236
|
+
*/
|
|
237
|
+
reclaimRemovedMessage: (sessionID: string, messageID: string) => boolean;
|
|
72
238
|
clearSession: (sessionID: string) => void;
|
|
73
239
|
/**
|
|
74
240
|
* Take a hold on `sessionID`'s transcript for one mounted consumer, and get
|
|
@@ -126,7 +292,16 @@ interface SyncState {
|
|
|
126
292
|
hydrate: (sessionID: string, msgs: Array<{
|
|
127
293
|
info: Message;
|
|
128
294
|
parts: Part[];
|
|
129
|
-
}
|
|
295
|
+
}>,
|
|
296
|
+
/**
|
|
297
|
+
* Where this snapshot came from. `cache` (the disk transcript cache)
|
|
298
|
+
* paints messages PROVISIONALLY: the next runtime hydrate whose tail
|
|
299
|
+
* covers their position drops any it does not contain. Default:
|
|
300
|
+
* the runtime.
|
|
301
|
+
*/
|
|
302
|
+
opts?: {
|
|
303
|
+
source?: "cache" | "runtime";
|
|
304
|
+
}) => void;
|
|
130
305
|
reset: () => void;
|
|
131
306
|
getMessages: (sessionID: string) => MessageWithParts[];
|
|
132
307
|
statuses: Record<string, SessionStatus>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-store.d.ts","sourceRoot":"","sources":["../../../src/browser/stores/sync-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,OAAO,EACP,KAAK,IAAI,aAAa,EACtB,IAAI,EAEJ,aAAa,EAEb,IAAI,EACJ,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-store.d.ts","sourceRoot":"","sources":["../../../src/browser/stores/sync-store.ts"],"names":[],"mappings":"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"}
|