@trigger.dev/sdk 0.0.0-prerelease-20260908122921 → 0.0.0-prerelease-20260909071038
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/dist/commonjs/v3/ai-shared.d.ts +15 -0
- package/dist/commonjs/v3/ai-shared.js +35 -1
- package/dist/commonjs/v3/ai-shared.js.map +1 -1
- package/dist/commonjs/v3/ai.d.ts +76 -9
- package/dist/commonjs/v3/ai.js +316 -222
- package/dist/commonjs/v3/ai.js.map +1 -1
- package/dist/commonjs/v3/chat-client.d.ts +8 -0
- package/dist/commonjs/v3/chat-client.js +199 -109
- package/dist/commonjs/v3/chat-client.js.map +1 -1
- package/dist/commonjs/v3/chat-react.d.ts +54 -0
- package/dist/commonjs/v3/chat-react.js +83 -0
- package/dist/commonjs/v3/chat-react.js.map +1 -1
- package/dist/commonjs/v3/chat.d.ts +11 -0
- package/dist/commonjs/v3/chat.js +36 -27
- package/dist/commonjs/v3/chat.js.map +1 -1
- package/dist/commonjs/v3/chatSnapshotIo.d.ts +2 -0
- package/dist/commonjs/v3/chatSnapshotIo.js +174 -0
- package/dist/commonjs/v3/chatSnapshotIo.js.map +1 -0
- package/dist/commonjs/v3/test/index.d.ts +1 -0
- package/dist/commonjs/v3/test/index.js +3 -1
- package/dist/commonjs/v3/test/index.js.map +1 -1
- package/dist/commonjs/v3/test/mock-chat-agent.d.ts +4 -4
- package/dist/commonjs/v3/test/mock-chat-agent.js +25 -4
- package/dist/commonjs/v3/test/mock-chat-agent.js.map +1 -1
- package/dist/commonjs/v3/test/transcript-storage-tests.d.ts +40 -0
- package/dist/commonjs/v3/test/transcript-storage-tests.js +258 -0
- package/dist/commonjs/v3/test/transcript-storage-tests.js.map +1 -0
- package/dist/commonjs/v3/transcriptStorage.d.ts +229 -0
- package/dist/commonjs/v3/transcriptStorage.js +321 -0
- package/dist/commonjs/v3/transcriptStorage.js.map +1 -0
- package/dist/commonjs/version.js +1 -1
- package/dist/esm/v3/ai-shared.d.ts +15 -0
- package/dist/esm/v3/ai-shared.js +33 -0
- package/dist/esm/v3/ai-shared.js.map +1 -1
- package/dist/esm/v3/ai.d.ts +76 -9
- package/dist/esm/v3/ai.js +306 -217
- package/dist/esm/v3/ai.js.map +1 -1
- package/dist/esm/v3/chat-client.d.ts +8 -0
- package/dist/esm/v3/chat-client.js +200 -110
- package/dist/esm/v3/chat-client.js.map +1 -1
- package/dist/esm/v3/chat-react.d.ts +54 -0
- package/dist/esm/v3/chat-react.js +81 -0
- package/dist/esm/v3/chat-react.js.map +1 -1
- package/dist/esm/v3/chat.d.ts +11 -0
- package/dist/esm/v3/chat.js +36 -27
- package/dist/esm/v3/chat.js.map +1 -1
- package/dist/esm/v3/chatSnapshotIo.d.ts +2 -0
- package/dist/esm/v3/chatSnapshotIo.js +166 -0
- package/dist/esm/v3/chatSnapshotIo.js.map +1 -0
- package/dist/esm/v3/test/index.d.ts +1 -0
- package/dist/esm/v3/test/index.js +1 -0
- package/dist/esm/v3/test/index.js.map +1 -1
- package/dist/esm/v3/test/mock-chat-agent.d.ts +4 -4
- package/dist/esm/v3/test/mock-chat-agent.js +25 -4
- package/dist/esm/v3/test/mock-chat-agent.js.map +1 -1
- package/dist/esm/v3/test/transcript-storage-tests.d.ts +40 -0
- package/dist/esm/v3/test/transcript-storage-tests.js +255 -0
- package/dist/esm/v3/test/transcript-storage-tests.js.map +1 -0
- package/dist/esm/v3/transcriptStorage.d.ts +229 -0
- package/dist/esm/v3/transcriptStorage.js +309 -0
- package/dist/esm/v3/transcriptStorage.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/docs/ai-chat/actions.mdx +2 -2
- package/docs/ai-chat/background-injection.mdx +2 -0
- package/docs/ai-chat/compaction.mdx +2 -0
- package/docs/ai-chat/frontend.mdx +2 -0
- package/docs/ai-chat/lifecycle-hooks.mdx +6 -2
- package/docs/ai-chat/patterns/database-persistence.mdx +6 -2
- package/docs/ai-chat/patterns/persistence-and-replay.mdx +34 -23
- package/docs/ai-chat/reference.mdx +56 -5
- package/docs/ai-chat/transcript-storage.mdx +233 -0
- package/docs/config/extensions/syncEnvVars.mdx +6 -0
- package/docs/deploy-environment-variables.mdx +23 -2
- package/package.json +2 -2
- package/skills/trigger-authoring-chat-agent/SKILL.md +3 -2
- package/skills/trigger-chat-agent-advanced/SKILL.md +5 -5
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { type TaskRunContext, type TranscriptSnapshotEntry } from "@trigger.dev/core/v3";
|
|
2
|
+
import type { ModelMessage, UIMessage } from "ai";
|
|
3
|
+
/**
|
|
4
|
+
* One change to a transcript. Ops address messages by id; position is the
|
|
5
|
+
* storage's own concern.
|
|
6
|
+
*
|
|
7
|
+
* - `put` upserts by `message.id`: an unknown id appends, a known id is
|
|
8
|
+
* replaced in place. `final` is false when the runtime captured a partial
|
|
9
|
+
* assistant message from an errored or stopped turn; it defaults to true.
|
|
10
|
+
* - `remove` deletes by id and is a no-op for an unknown id.
|
|
11
|
+
* - `truncateAfter` drops every message ordered after `afterId` (a rollback)
|
|
12
|
+
* and is a no-op when `afterId` is unknown.
|
|
13
|
+
* - `state` replaces the opaque runtime record; `null` clears it.
|
|
14
|
+
*/
|
|
15
|
+
export type TranscriptChange = {
|
|
16
|
+
op: "put";
|
|
17
|
+
message: UIMessage;
|
|
18
|
+
final?: boolean;
|
|
19
|
+
} | {
|
|
20
|
+
op: "remove";
|
|
21
|
+
id: string;
|
|
22
|
+
} | {
|
|
23
|
+
op: "truncateAfter";
|
|
24
|
+
afterId: string;
|
|
25
|
+
} | {
|
|
26
|
+
op: "state";
|
|
27
|
+
value: unknown | null;
|
|
28
|
+
};
|
|
29
|
+
export type TranscriptChangeReason = "turn-complete" | "turn-error" | "action" | "compaction" | "recovery";
|
|
30
|
+
export type TranscriptCursors = {
|
|
31
|
+
lastOutEventId?: string;
|
|
32
|
+
lastInEventId?: string;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* What the runtime hands to `save`: the ordered changes since the last save
|
|
36
|
+
* (one transaction where the backend supports it), the whole transcript as
|
|
37
|
+
* it stands after those changes, and the stream cursors the next boot should
|
|
38
|
+
* resume from. A row-per-message store applies `changes`; a store that keeps
|
|
39
|
+
* the conversation as one document writes `transcript` as-is and needs no
|
|
40
|
+
* state of its own. Cursors are runtime-computed and persisted opaquely; a
|
|
41
|
+
* storage never interprets them.
|
|
42
|
+
*/
|
|
43
|
+
export type TranscriptChangeset = {
|
|
44
|
+
reason: TranscriptChangeReason;
|
|
45
|
+
changes: TranscriptChange[];
|
|
46
|
+
transcript: TranscriptState;
|
|
47
|
+
cursors?: TranscriptCursors;
|
|
48
|
+
};
|
|
49
|
+
/** The tenant scope of a read. A render read has no run, so this is all `load` gets. */
|
|
50
|
+
export type TranscriptScope<TClientData = unknown> = {
|
|
51
|
+
chatId: string;
|
|
52
|
+
clientData: TClientData;
|
|
53
|
+
};
|
|
54
|
+
/** The run context of a write. Supplied by the runtime; always in-run. */
|
|
55
|
+
export type TranscriptStorageContext<TClientData = unknown> = TranscriptScope<TClientData> & {
|
|
56
|
+
turn: number;
|
|
57
|
+
trigger: "submit-message" | "regenerate-message" | "action";
|
|
58
|
+
runId: string;
|
|
59
|
+
ctx: TaskRunContext;
|
|
60
|
+
};
|
|
61
|
+
export type TranscriptLoadOptions = {
|
|
62
|
+
/** Return at most this many messages, the most recent ones. */
|
|
63
|
+
limit?: number;
|
|
64
|
+
/** Return messages ordered before this message id (a `nextCursor` from a previous page). */
|
|
65
|
+
before?: string;
|
|
66
|
+
};
|
|
67
|
+
export type TranscriptLoadResult<TUIMessage extends UIMessage = UIMessage> = {
|
|
68
|
+
messages: TUIMessage[];
|
|
69
|
+
state: unknown | null;
|
|
70
|
+
cursors?: TranscriptCursors;
|
|
71
|
+
/** The id to pass as `before` for the previous page; absent on the last page. */
|
|
72
|
+
nextCursor?: string;
|
|
73
|
+
/**
|
|
74
|
+
* Ids among `messages` that were saved with `final: false` (a partial
|
|
75
|
+
* answer). A storage that keeps `final` returns them so a partial stays
|
|
76
|
+
* partial when a continuation saves it again unchanged; a storage that
|
|
77
|
+
* does not keep `final` may leave this out.
|
|
78
|
+
*/
|
|
79
|
+
nonFinalIds?: string[];
|
|
80
|
+
};
|
|
81
|
+
/** What `loadContext` receives on every turn and action. */
|
|
82
|
+
export type LoadContextEvent<TClientData = unknown, TUIMessage extends UIMessage = UIMessage> = {
|
|
83
|
+
chatId: string;
|
|
84
|
+
/** The turn number (0-indexed). */
|
|
85
|
+
turn: number;
|
|
86
|
+
trigger: "submit-message" | "regenerate-message" | "action";
|
|
87
|
+
/** The messages the frontend sent for this turn. Empty for actions. */
|
|
88
|
+
incomingMessages: TUIMessage[];
|
|
89
|
+
/** The runtime's transcript before this turn, including any tail it recovered. */
|
|
90
|
+
previousMessages: TUIMessage[];
|
|
91
|
+
clientData?: TClientData;
|
|
92
|
+
continuation: boolean;
|
|
93
|
+
previousRunId?: string;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* A persistence adapter for a `chat.agent` transcript. The runtime calls
|
|
97
|
+
* `load` once at a continuation boot and `save` after every change to the
|
|
98
|
+
* conversation. Both are best-effort from the runtime's point of view: an
|
|
99
|
+
* error is logged and the turn continues.
|
|
100
|
+
*
|
|
101
|
+
* `loadContext` is optional. Its presence declares that the application
|
|
102
|
+
* owns the model's context: the runtime calls it on every turn and action
|
|
103
|
+
* and uses what it returns as the conversation, instead of the transcript
|
|
104
|
+
* it accumulated. Tail recovery still runs and `save` is still called.
|
|
105
|
+
*/
|
|
106
|
+
export type TranscriptStorage<TClientData = unknown> = {
|
|
107
|
+
load<TUIMessage extends UIMessage = UIMessage>(scope: TranscriptScope<TClientData>, opts?: TranscriptLoadOptions): Promise<TranscriptLoadResult<TUIMessage>>;
|
|
108
|
+
save(ctx: TranscriptStorageContext<TClientData>, changeset: TranscriptChangeset): Promise<void>;
|
|
109
|
+
loadContext?<TUIMessage extends UIMessage = UIMessage>(scope: TranscriptScope<TClientData>, event: LoadContextEvent<TClientData, TUIMessage>): Promise<TUIMessage[]> | TUIMessage[];
|
|
110
|
+
};
|
|
111
|
+
/** An in-memory transcript: ordered entries plus the opaque state record. */
|
|
112
|
+
export type TranscriptState<TUIMessage extends UIMessage = UIMessage> = {
|
|
113
|
+
entries: TranscriptSnapshotEntry<TUIMessage>[];
|
|
114
|
+
state: unknown | null;
|
|
115
|
+
};
|
|
116
|
+
export declare function emptyTranscriptState<TUIMessage extends UIMessage = UIMessage>(): TranscriptState<TUIMessage>;
|
|
117
|
+
/**
|
|
118
|
+
* Apply changes to a transcript, in order. Pure: returns a new state and
|
|
119
|
+
* never mutates the input. Replaying the same changes converges, which is
|
|
120
|
+
* what lets a storage retry a failed write without checking what landed.
|
|
121
|
+
*/
|
|
122
|
+
export declare function reduceTranscriptChanges<TUIMessage extends UIMessage = UIMessage>(prev: TranscriptState<TUIMessage>, changes: readonly TranscriptChange[]): TranscriptState<TUIMessage>;
|
|
123
|
+
/**
|
|
124
|
+
* What the runtime remembers about the transcript it last handed to
|
|
125
|
+
* `save`: the ids in order and a fingerprint per message, so the next
|
|
126
|
+
* changeset can be derived from the accumulator without asking the storage.
|
|
127
|
+
*/
|
|
128
|
+
export type TranscriptShadow = {
|
|
129
|
+
ids: string[];
|
|
130
|
+
fingerprints: Map<string, string>;
|
|
131
|
+
/** Ids last saved with `final: false`. Everything else was saved final. */
|
|
132
|
+
nonFinal: Set<string>;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Build the shadow for `messages`. An id is non-final when this save says so
|
|
136
|
+
* (`nonFinalIds`) or when it was non-final before and its content has not
|
|
137
|
+
* changed: a partial answer stays partial until the message itself changes.
|
|
138
|
+
*/
|
|
139
|
+
export declare function createTranscriptShadow(messages: readonly UIMessage[], nonFinalIds?: ReadonlySet<string>, previous?: TranscriptShadow): TranscriptShadow;
|
|
140
|
+
/**
|
|
141
|
+
* Derive the changes that take `shadow` to `next`.
|
|
142
|
+
*
|
|
143
|
+
* The common prefix (by id) is compared message by message and a changed
|
|
144
|
+
* message becomes an in-place `put`. Past the prefix, everything the shadow
|
|
145
|
+
* still had is dropped with one `truncateAfter` on the last common id (or
|
|
146
|
+
* one `remove` per message when there is no common prefix) and everything
|
|
147
|
+
* `next` has is appended with `put`, in order. Applying the result with
|
|
148
|
+
* {@link reduceTranscriptChanges} reproduces `next` exactly, including
|
|
149
|
+
* order, for any two lists.
|
|
150
|
+
*/
|
|
151
|
+
export declare function diffTranscript(shadow: TranscriptShadow, next: readonly UIMessage[], options?: {
|
|
152
|
+
nonFinalIds?: ReadonlySet<string>;
|
|
153
|
+
}): {
|
|
154
|
+
changes: TranscriptChange[];
|
|
155
|
+
shadow: TranscriptShadow;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* The built-in storage: the whole transcript as one versioned blob in the
|
|
159
|
+
* platform's object store, the same blob the Sessions dashboard renders.
|
|
160
|
+
*
|
|
161
|
+
* Stateless. Every changeset carries the whole transcript as it stands after
|
|
162
|
+
* the changes, so `save` serialises that and rewrites the blob: one PUT per
|
|
163
|
+
* turn, no read and nothing kept in memory between saves.
|
|
164
|
+
*/
|
|
165
|
+
export declare function snapshotTranscriptStorage(): TranscriptStorage<unknown>;
|
|
166
|
+
/** The storage `chat.agent` uses when none is configured: {@link snapshotTranscriptStorage}. */
|
|
167
|
+
export declare const defaultStorage: TranscriptStorage<unknown>;
|
|
168
|
+
export type MemoryTranscriptStorage = TranscriptStorage<unknown> & {
|
|
169
|
+
/** The stored transcript for a chat, or `undefined` when nothing has been saved. */
|
|
170
|
+
transcript(chatId: string): (TranscriptState & {
|
|
171
|
+
cursors?: TranscriptCursors;
|
|
172
|
+
}) | undefined;
|
|
173
|
+
/** Every changeset `save` received, in order. */
|
|
174
|
+
readonly changesets: Array<{
|
|
175
|
+
ctx: TranscriptStorageContext<unknown>;
|
|
176
|
+
changeset: TranscriptChangeset;
|
|
177
|
+
}>;
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* A storage that keeps every transcript in process memory. The reference
|
|
181
|
+
* implementation for the conformance tests, and a way to inspect exactly
|
|
182
|
+
* what the runtime hands a storage.
|
|
183
|
+
*/
|
|
184
|
+
export declare function memoryTranscriptStorage(): MemoryTranscriptStorage;
|
|
185
|
+
type ModelLaneInjection = {
|
|
186
|
+
afterId: string;
|
|
187
|
+
messages: ModelMessage[];
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* What the runtime keeps in the storage's `state` slot: the parts of the
|
|
191
|
+
* model's context that cannot be rebuilt from the transcript. Opaque to a
|
|
192
|
+
* storage; only the runtime reads it.
|
|
193
|
+
*
|
|
194
|
+
* `compaction` is the whole model lane after a compaction, valid for the
|
|
195
|
+
* transcript prefix ending at `throughId` whose fingerprint matches, so a
|
|
196
|
+
* rollback or edit of that prefix makes it unusable and the next save
|
|
197
|
+
* clears it. `injections` are conversational messages `chat.inject` added,
|
|
198
|
+
* anchored after the transcript message they followed.
|
|
199
|
+
*/
|
|
200
|
+
export type TranscriptRuntimeState = {
|
|
201
|
+
v: 1;
|
|
202
|
+
compaction?: {
|
|
203
|
+
modelMessages: ModelMessage[];
|
|
204
|
+
throughId: string;
|
|
205
|
+
fingerprint: string;
|
|
206
|
+
};
|
|
207
|
+
injections?: ModelLaneInjection[];
|
|
208
|
+
/** `chat.inject` messages queued but not yet drained into a turn when the save happened. */
|
|
209
|
+
queued?: ModelMessage[];
|
|
210
|
+
};
|
|
211
|
+
export declare function parseTranscriptRuntimeState(value: unknown): TranscriptRuntimeState | undefined;
|
|
212
|
+
/**
|
|
213
|
+
* A 32-bit FNV-1a hash over the fingerprints of the messages up to and
|
|
214
|
+
* including `throughId`, in order. Cheap enough to compute on every save
|
|
215
|
+
* because the per-message fingerprints already exist in the shadow.
|
|
216
|
+
*/
|
|
217
|
+
export declare function prefixFingerprint(shadow: TranscriptShadow, throughId: string): string;
|
|
218
|
+
/**
|
|
219
|
+
* Rebuild the model lane for a transcript at boot. Uses the persisted
|
|
220
|
+
* compacted lane when the transcript prefix it covers is unchanged, then
|
|
221
|
+
* converts the rest of the transcript, re-inserting persisted injections
|
|
222
|
+
* after the messages they followed.
|
|
223
|
+
*/
|
|
224
|
+
export declare function restoreModelLane<TUIMessage extends UIMessage>(messages: TUIMessage[], state: TranscriptRuntimeState | undefined, convert: (messages: TUIMessage[]) => Promise<ModelMessage[]>): Promise<{
|
|
225
|
+
messages: ModelMessage[];
|
|
226
|
+
compacted: boolean;
|
|
227
|
+
injections: ModelLaneInjection[];
|
|
228
|
+
}>;
|
|
229
|
+
export {};
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultStorage = void 0;
|
|
4
|
+
exports.emptyTranscriptState = emptyTranscriptState;
|
|
5
|
+
exports.reduceTranscriptChanges = reduceTranscriptChanges;
|
|
6
|
+
exports.createTranscriptShadow = createTranscriptShadow;
|
|
7
|
+
exports.diffTranscript = diffTranscript;
|
|
8
|
+
exports.snapshotTranscriptStorage = snapshotTranscriptStorage;
|
|
9
|
+
exports.memoryTranscriptStorage = memoryTranscriptStorage;
|
|
10
|
+
exports.parseTranscriptRuntimeState = parseTranscriptRuntimeState;
|
|
11
|
+
exports.prefixFingerprint = prefixFingerprint;
|
|
12
|
+
exports.restoreModelLane = restoreModelLane;
|
|
13
|
+
const v3_1 = require("@trigger.dev/core/v3");
|
|
14
|
+
const chatSnapshotIo_js_1 = require("./chatSnapshotIo.js");
|
|
15
|
+
function emptyTranscriptState() {
|
|
16
|
+
return { entries: [], state: null };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Apply changes to a transcript, in order. Pure: returns a new state and
|
|
20
|
+
* never mutates the input. Replaying the same changes converges, which is
|
|
21
|
+
* what lets a storage retry a failed write without checking what landed.
|
|
22
|
+
*/
|
|
23
|
+
function reduceTranscriptChanges(prev, changes) {
|
|
24
|
+
let entries = prev.entries.slice();
|
|
25
|
+
let state = prev.state;
|
|
26
|
+
for (const change of changes) {
|
|
27
|
+
switch (change.op) {
|
|
28
|
+
case "put": {
|
|
29
|
+
const message = change.message;
|
|
30
|
+
const entry = { id: message.id, final: change.final ?? true, message };
|
|
31
|
+
const idx = entries.findIndex((e) => e.id === message.id);
|
|
32
|
+
if (idx === -1)
|
|
33
|
+
entries.push(entry);
|
|
34
|
+
else
|
|
35
|
+
entries[idx] = entry;
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
case "remove": {
|
|
39
|
+
entries = entries.filter((e) => e.id !== change.id);
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
case "truncateAfter": {
|
|
43
|
+
const idx = entries.findIndex((e) => e.id === change.afterId);
|
|
44
|
+
if (idx !== -1)
|
|
45
|
+
entries = entries.slice(0, idx + 1);
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
case "state": {
|
|
49
|
+
state = change.value ?? null;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return { entries, state };
|
|
55
|
+
}
|
|
56
|
+
function fingerprintMessage(message) {
|
|
57
|
+
return JSON.stringify(message);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build the shadow for `messages`. An id is non-final when this save says so
|
|
61
|
+
* (`nonFinalIds`) or when it was non-final before and its content has not
|
|
62
|
+
* changed: a partial answer stays partial until the message itself changes.
|
|
63
|
+
*/
|
|
64
|
+
function createTranscriptShadow(messages, nonFinalIds, previous) {
|
|
65
|
+
const ids = [];
|
|
66
|
+
const fingerprints = new Map();
|
|
67
|
+
const nonFinal = new Set();
|
|
68
|
+
for (const message of messages) {
|
|
69
|
+
const fingerprint = fingerprintMessage(message);
|
|
70
|
+
ids.push(message.id);
|
|
71
|
+
fingerprints.set(message.id, fingerprint);
|
|
72
|
+
if (nonFinalIds?.has(message.id) ||
|
|
73
|
+
(previous?.nonFinal.has(message.id) && previous.fingerprints.get(message.id) === fingerprint)) {
|
|
74
|
+
nonFinal.add(message.id);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return { ids, fingerprints, nonFinal };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Derive the changes that take `shadow` to `next`.
|
|
81
|
+
*
|
|
82
|
+
* The common prefix (by id) is compared message by message and a changed
|
|
83
|
+
* message becomes an in-place `put`. Past the prefix, everything the shadow
|
|
84
|
+
* still had is dropped with one `truncateAfter` on the last common id (or
|
|
85
|
+
* one `remove` per message when there is no common prefix) and everything
|
|
86
|
+
* `next` has is appended with `put`, in order. Applying the result with
|
|
87
|
+
* {@link reduceTranscriptChanges} reproduces `next` exactly, including
|
|
88
|
+
* order, for any two lists.
|
|
89
|
+
*/
|
|
90
|
+
function diffTranscript(shadow, next, options = {}) {
|
|
91
|
+
const nextShadow = createTranscriptShadow(next, options.nonFinalIds, shadow);
|
|
92
|
+
const changes = [];
|
|
93
|
+
const put = (message) => {
|
|
94
|
+
const final = nextShadow.nonFinal.has(message.id) ? false : undefined;
|
|
95
|
+
changes.push(final === undefined ? { op: "put", message } : { op: "put", message, final });
|
|
96
|
+
};
|
|
97
|
+
let lcp = 0;
|
|
98
|
+
while (lcp < shadow.ids.length && lcp < next.length && shadow.ids[lcp] === next[lcp].id) {
|
|
99
|
+
lcp++;
|
|
100
|
+
}
|
|
101
|
+
for (let i = 0; i < lcp; i++) {
|
|
102
|
+
const message = next[i];
|
|
103
|
+
if (shadow.fingerprints.get(message.id) !== nextShadow.fingerprints.get(message.id) ||
|
|
104
|
+
shadow.nonFinal.has(message.id) !== nextShadow.nonFinal.has(message.id)) {
|
|
105
|
+
put(message);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (shadow.ids.length > lcp) {
|
|
109
|
+
if (lcp > 0) {
|
|
110
|
+
changes.push({ op: "truncateAfter", afterId: shadow.ids[lcp - 1] });
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
for (const id of shadow.ids)
|
|
114
|
+
changes.push({ op: "remove", id });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
for (let i = lcp; i < next.length; i++) {
|
|
118
|
+
put(next[i]);
|
|
119
|
+
}
|
|
120
|
+
return { changes, shadow: nextShadow };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The built-in storage: the whole transcript as one versioned blob in the
|
|
124
|
+
* platform's object store, the same blob the Sessions dashboard renders.
|
|
125
|
+
*
|
|
126
|
+
* Stateless. Every changeset carries the whole transcript as it stands after
|
|
127
|
+
* the changes, so `save` serialises that and rewrites the blob: one PUT per
|
|
128
|
+
* turn, no read and nothing kept in memory between saves.
|
|
129
|
+
*/
|
|
130
|
+
function snapshotTranscriptStorage() {
|
|
131
|
+
return {
|
|
132
|
+
async load(scope, opts) {
|
|
133
|
+
if (opts?.limit !== undefined || opts?.before !== undefined) {
|
|
134
|
+
const page = await readTranscriptPage(scope.chatId, opts);
|
|
135
|
+
if (page)
|
|
136
|
+
return page;
|
|
137
|
+
}
|
|
138
|
+
const snapshot = await (0, chatSnapshotIo_js_1.readChatSnapshot)(scope.chatId);
|
|
139
|
+
const full = snapshot
|
|
140
|
+
? { entries: snapshot.messages, state: snapshot.state }
|
|
141
|
+
: emptyTranscriptState();
|
|
142
|
+
return {
|
|
143
|
+
...pageEntries(full.entries, opts),
|
|
144
|
+
state: full.state,
|
|
145
|
+
cursors: snapshot
|
|
146
|
+
? { lastOutEventId: snapshot.lastOutEventId, lastInEventId: snapshot.lastInEventId }
|
|
147
|
+
: undefined,
|
|
148
|
+
};
|
|
149
|
+
},
|
|
150
|
+
async save(ctx, changeset) {
|
|
151
|
+
await (0, chatSnapshotIo_js_1.writeChatSnapshot)(ctx.chatId, {
|
|
152
|
+
version: 2,
|
|
153
|
+
savedAt: Date.now(),
|
|
154
|
+
messages: changeset.transcript.entries,
|
|
155
|
+
state: changeset.transcript.state,
|
|
156
|
+
lastOutEventId: changeset.cursors?.lastOutEventId,
|
|
157
|
+
lastInEventId: changeset.cursors?.lastInEventId,
|
|
158
|
+
});
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* A page of the platform transcript read server-side, for a render read with
|
|
164
|
+
* `limit`/`before` from an app server holding a secret key. `undefined` when
|
|
165
|
+
* the call is not possible from here (a run's public token cannot use the
|
|
166
|
+
* endpoint), so the caller falls back to reading the whole blob.
|
|
167
|
+
*/
|
|
168
|
+
async function readTranscriptPage(chatId, opts) {
|
|
169
|
+
try {
|
|
170
|
+
const page = await v3_1.apiClientManager.clientOrThrow().getSessionTranscript(chatId, opts);
|
|
171
|
+
return {
|
|
172
|
+
messages: page.messages,
|
|
173
|
+
state: page.state ?? null,
|
|
174
|
+
cursors: page.cursors,
|
|
175
|
+
nextCursor: page.nextCursor,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
catch {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/** The storage `chat.agent` uses when none is configured: {@link snapshotTranscriptStorage}. */
|
|
183
|
+
exports.defaultStorage = snapshotTranscriptStorage();
|
|
184
|
+
function pageEntries(all, opts) {
|
|
185
|
+
const page = (0, v3_1.pageTranscriptEntries)(all, opts);
|
|
186
|
+
return {
|
|
187
|
+
messages: page.entries.map((e) => e.message),
|
|
188
|
+
nextCursor: page.nextCursor,
|
|
189
|
+
nonFinalIds: page.entries.filter((e) => !e.final).map((e) => e.id),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* A storage that keeps every transcript in process memory. The reference
|
|
194
|
+
* implementation for the conformance tests, and a way to inspect exactly
|
|
195
|
+
* what the runtime hands a storage.
|
|
196
|
+
*/
|
|
197
|
+
function memoryTranscriptStorage() {
|
|
198
|
+
const transcripts = new Map();
|
|
199
|
+
const changesets = [];
|
|
200
|
+
return {
|
|
201
|
+
changesets,
|
|
202
|
+
transcript(chatId) {
|
|
203
|
+
return transcripts.get(chatId);
|
|
204
|
+
},
|
|
205
|
+
async load(scope, opts) {
|
|
206
|
+
const stored = transcripts.get(scope.chatId);
|
|
207
|
+
if (!stored)
|
|
208
|
+
return { messages: [], state: null, cursors: undefined, nextCursor: undefined };
|
|
209
|
+
return {
|
|
210
|
+
...pageEntries(stored.entries, opts),
|
|
211
|
+
state: stored.state,
|
|
212
|
+
cursors: stored.cursors,
|
|
213
|
+
};
|
|
214
|
+
},
|
|
215
|
+
async save(ctx, changeset) {
|
|
216
|
+
changesets.push({ ctx, changeset });
|
|
217
|
+
const prev = transcripts.get(ctx.chatId);
|
|
218
|
+
const next = reduceTranscriptChanges(prev ?? emptyTranscriptState(), changeset.changes);
|
|
219
|
+
transcripts.set(ctx.chatId, { ...next, cursors: changeset.cursors ?? prev?.cursors });
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function parseTranscriptRuntimeState(value) {
|
|
224
|
+
if (!value || typeof value !== "object")
|
|
225
|
+
return undefined;
|
|
226
|
+
const record = value;
|
|
227
|
+
if (record.v !== 1)
|
|
228
|
+
return undefined;
|
|
229
|
+
const out = { v: 1 };
|
|
230
|
+
const compaction = record.compaction;
|
|
231
|
+
if (compaction &&
|
|
232
|
+
typeof compaction === "object" &&
|
|
233
|
+
Array.isArray(compaction.modelMessages) &&
|
|
234
|
+
typeof compaction.throughId === "string" &&
|
|
235
|
+
typeof compaction.fingerprint === "string") {
|
|
236
|
+
out.compaction = {
|
|
237
|
+
modelMessages: compaction.modelMessages,
|
|
238
|
+
throughId: compaction.throughId,
|
|
239
|
+
fingerprint: compaction.fingerprint,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
if (Array.isArray(record.injections)) {
|
|
243
|
+
out.injections = record.injections.flatMap((entry) => {
|
|
244
|
+
const inj = entry;
|
|
245
|
+
return inj && typeof inj.afterId === "string" && Array.isArray(inj.messages)
|
|
246
|
+
? [{ afterId: inj.afterId, messages: inj.messages }]
|
|
247
|
+
: [];
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
if (Array.isArray(record.queued) && record.queued.length > 0) {
|
|
251
|
+
out.queued = record.queued;
|
|
252
|
+
}
|
|
253
|
+
return out;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* A 32-bit FNV-1a hash over the fingerprints of the messages up to and
|
|
257
|
+
* including `throughId`, in order. Cheap enough to compute on every save
|
|
258
|
+
* because the per-message fingerprints already exist in the shadow.
|
|
259
|
+
*/
|
|
260
|
+
function prefixFingerprint(shadow, throughId) {
|
|
261
|
+
let hash = 0x811c9dc5;
|
|
262
|
+
if (throughId === "")
|
|
263
|
+
return hash.toString(16).padStart(8, "0");
|
|
264
|
+
const mix = (s) => {
|
|
265
|
+
for (let i = 0; i < s.length; i++) {
|
|
266
|
+
hash ^= s.charCodeAt(i);
|
|
267
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
for (const id of shadow.ids) {
|
|
271
|
+
mix(id);
|
|
272
|
+
mix("");
|
|
273
|
+
mix(shadow.fingerprints.get(id) ?? "");
|
|
274
|
+
mix("");
|
|
275
|
+
if (id === throughId)
|
|
276
|
+
return hash.toString(16).padStart(8, "0");
|
|
277
|
+
}
|
|
278
|
+
return "";
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Rebuild the model lane for a transcript at boot. Uses the persisted
|
|
282
|
+
* compacted lane when the transcript prefix it covers is unchanged, then
|
|
283
|
+
* converts the rest of the transcript, re-inserting persisted injections
|
|
284
|
+
* after the messages they followed.
|
|
285
|
+
*/
|
|
286
|
+
async function restoreModelLane(messages, state, convert) {
|
|
287
|
+
const lane = [];
|
|
288
|
+
let start = 0;
|
|
289
|
+
let compacted = false;
|
|
290
|
+
if (state?.compaction) {
|
|
291
|
+
const throughId = state.compaction.throughId;
|
|
292
|
+
const idx = throughId === "" ? -1 : messages.findIndex((m) => m.id === throughId);
|
|
293
|
+
if ((idx !== -1 || throughId === "") &&
|
|
294
|
+
prefixFingerprint(createTranscriptShadow(messages), throughId) ===
|
|
295
|
+
state.compaction.fingerprint) {
|
|
296
|
+
lane.push(...state.compaction.modelMessages);
|
|
297
|
+
start = idx + 1;
|
|
298
|
+
compacted = true;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
const anchored = (state?.injections ?? [])
|
|
302
|
+
.map((inj) => ({
|
|
303
|
+
inj,
|
|
304
|
+
idx: inj.afterId === "" ? -1 : messages.findIndex((m) => m.id === inj.afterId),
|
|
305
|
+
}))
|
|
306
|
+
.filter(({ inj, idx }) => (inj.afterId === "" ? start === 0 : idx >= start))
|
|
307
|
+
.sort((a, b) => a.idx - b.idx);
|
|
308
|
+
let cursor = start;
|
|
309
|
+
for (const { inj, idx } of anchored) {
|
|
310
|
+
if (idx + 1 > cursor) {
|
|
311
|
+
lane.push(...(await convert(messages.slice(cursor, idx + 1))));
|
|
312
|
+
cursor = idx + 1;
|
|
313
|
+
}
|
|
314
|
+
lane.push(...inj.messages);
|
|
315
|
+
}
|
|
316
|
+
if (cursor < messages.length) {
|
|
317
|
+
lane.push(...(await convert(messages.slice(cursor))));
|
|
318
|
+
}
|
|
319
|
+
return { messages: lane, compacted, injections: anchored.map(({ inj }) => inj) };
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=transcriptStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcriptStorage.js","sourceRoot":"","sources":["../../../src/v3/transcriptStorage.ts"],"names":[],"mappings":"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"}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -139,3 +139,18 @@ export declare function slimSubmitMessageForWire<TMsg extends UIMessage | undefi
|
|
|
139
139
|
* long ID degrades to "not filterable by chat" rather than failing to start.
|
|
140
140
|
*/
|
|
141
141
|
export declare function chatRunTags(chatId: string, userTags?: string[]): string[];
|
|
142
|
+
/**
|
|
143
|
+
* A session body that ends without a turn-complete is only terminal when the
|
|
144
|
+
* server says the session settled — otherwise the turn is still running and
|
|
145
|
+
* the connection was lost (long-poll window closed, proxy restarted). Both
|
|
146
|
+
* transports resubscribe from the last event id, bounded so a permanently
|
|
147
|
+
* empty stream can't spin.
|
|
148
|
+
*/
|
|
149
|
+
export declare const MAX_EOF_RESUBSCRIBES = 5;
|
|
150
|
+
/**
|
|
151
|
+
* Backoff before the nth (1-based) EOF resubscribe, jittered so many clients
|
|
152
|
+
* dropped by the same window don't reconnect in lockstep. Resolves early on
|
|
153
|
+
* abort — otherwise a stop landing mid-backoff leaves the stream open for the
|
|
154
|
+
* rest of it.
|
|
155
|
+
*/
|
|
156
|
+
export declare function waitBeforeEofResubscribe(attempt: number, signal: AbortSignal): Promise<void>;
|
package/dist/esm/v3/ai-shared.js
CHANGED
|
@@ -172,4 +172,37 @@ export function chatRunTags(chatId, userTags = []) {
|
|
|
172
172
|
const tags = chatTag.length <= MAX_RUN_TAG_LENGTH ? [chatTag, ...userTags] : [...userTags];
|
|
173
173
|
return tags.slice(0, MAX_RUN_TAGS);
|
|
174
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* A session body that ends without a turn-complete is only terminal when the
|
|
177
|
+
* server says the session settled — otherwise the turn is still running and
|
|
178
|
+
* the connection was lost (long-poll window closed, proxy restarted). Both
|
|
179
|
+
* transports resubscribe from the last event id, bounded so a permanently
|
|
180
|
+
* empty stream can't spin.
|
|
181
|
+
*/
|
|
182
|
+
export const MAX_EOF_RESUBSCRIBES = 5;
|
|
183
|
+
/**
|
|
184
|
+
* Backoff before the nth (1-based) EOF resubscribe, jittered so many clients
|
|
185
|
+
* dropped by the same window don't reconnect in lockstep. Resolves early on
|
|
186
|
+
* abort — otherwise a stop landing mid-backoff leaves the stream open for the
|
|
187
|
+
* rest of it.
|
|
188
|
+
*/
|
|
189
|
+
export function waitBeforeEofResubscribe(attempt, signal) {
|
|
190
|
+
// An already-aborted signal never fires `abort` again, so a listener added
|
|
191
|
+
// here would wait out the whole backoff.
|
|
192
|
+
if (signal.aborted)
|
|
193
|
+
return Promise.resolve();
|
|
194
|
+
return new Promise((resolve) => {
|
|
195
|
+
let timer;
|
|
196
|
+
const done = () => {
|
|
197
|
+
clearTimeout(timer);
|
|
198
|
+
signal.removeEventListener("abort", done);
|
|
199
|
+
resolve();
|
|
200
|
+
};
|
|
201
|
+
const backoff = Math.min(100 * 2 ** (attempt - 1), 5_000);
|
|
202
|
+
timer = setTimeout(done, backoff * (0.5 + Math.random() * 0.5));
|
|
203
|
+
signal.addEventListener("abort", done);
|
|
204
|
+
if (signal.aborted)
|
|
205
|
+
done();
|
|
206
|
+
});
|
|
207
|
+
}
|
|
175
208
|
//# sourceMappingURL=ai-shared.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-shared.js","sourceRoot":"","sources":["../../../src/v3/ai-shared.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-shared.js","sourceRoot":"","sources":["../../../src/v3/ai-shared.ts"],"names":[],"mappings":"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"}
|