@tessar/core 0.1.0-alpha.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -31
- package/dist/agent.d.ts +37 -87
- package/dist/agent.js +101 -1116
- package/dist/agent.js.map +1 -1
- package/dist/controller.d.ts +13 -4
- package/dist/controller.js +184 -19
- package/dist/controller.js.map +1 -1
- package/dist/engine/call.d.ts +8 -0
- package/dist/engine/call.js +136 -0
- package/dist/engine/call.js.map +1 -0
- package/dist/engine/checkpoint.d.ts +11 -0
- package/dist/engine/checkpoint.js +187 -0
- package/dist/engine/checkpoint.js.map +1 -0
- package/dist/engine/delivery.js +6 -13
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/execution.d.ts +5 -0
- package/dist/engine/execution.js +292 -0
- package/dist/engine/execution.js.map +1 -0
- package/dist/engine/frame.d.ts +77 -0
- package/dist/engine/frame.js +83 -0
- package/dist/engine/frame.js.map +1 -0
- package/dist/engine/hooks.d.ts +4 -0
- package/dist/engine/hooks.js +138 -0
- package/dist/engine/hooks.js.map +1 -0
- package/dist/engine/interrupt.d.ts +1 -1
- package/dist/engine/lineage.d.ts +1 -1
- package/dist/engine/recovery.d.ts +1 -2
- package/dist/engine/recovery.js +4 -2
- package/dist/engine/recovery.js.map +1 -1
- package/dist/engine/resume.d.ts +12 -1
- package/dist/engine/resume.js +189 -0
- package/dist/engine/resume.js.map +1 -1
- package/dist/engine/runtime.d.ts +16 -0
- package/dist/engine/runtime.js +29 -0
- package/dist/engine/runtime.js.map +1 -0
- package/dist/engine/services.d.ts +3 -0
- package/dist/engine/services.js +125 -0
- package/dist/engine/services.js.map +1 -0
- package/dist/engine/tool-executor.d.ts +8 -2
- package/dist/engine/tool-executor.js +266 -3
- package/dist/engine/tool-executor.js.map +1 -1
- package/dist/engine/tracked-effects.js +5 -6
- package/dist/engine/tracked-effects.js.map +1 -1
- package/dist/errors.js +24 -9
- package/dist/errors.js.map +1 -1
- package/dist/events/definition.d.ts +2 -0
- package/dist/events/definition.js +2 -0
- package/dist/events/definition.js.map +1 -1
- package/dist/events/dispatcher.d.ts +1 -1
- package/dist/events/dispatcher.js +35 -4
- package/dist/events/dispatcher.js.map +1 -1
- package/dist/events/observer.d.ts +3 -0
- package/dist/events/observer.js +13 -0
- package/dist/events/observer.js.map +1 -0
- package/dist/events/{catalog.d.ts → type.d.ts} +170 -47
- package/dist/events/type.js +175 -0
- package/dist/events/type.js.map +1 -0
- package/dist/identity.d.ts +1 -0
- package/dist/identity.js +23 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/instructions/instruction.d.ts +2 -0
- package/dist/instructions/instruction.js +10 -3
- package/dist/instructions/instruction.js.map +1 -1
- package/dist/loop.d.ts +5 -5
- package/dist/loop.js +44 -204
- package/dist/loop.js.map +1 -1
- package/dist/messages/codec.js +4 -2
- package/dist/messages/codec.js.map +1 -1
- package/dist/messages/message.d.ts +2 -3
- package/dist/messages/message.js +3 -3
- package/dist/messages/message.js.map +1 -1
- package/dist/models/contract.d.ts +15 -0
- package/dist/models/options.d.ts +3 -0
- package/dist/models/options.js +13 -0
- package/dist/models/options.js.map +1 -0
- package/dist/models/registry.d.ts +2 -0
- package/dist/models/registry.js +18 -1
- package/dist/models/registry.js.map +1 -1
- package/dist/models/resolver.d.ts +4 -2
- package/dist/models/resolver.js +9 -4
- package/dist/models/resolver.js.map +1 -1
- package/dist/models/stream.d.ts +6 -0
- package/dist/models/stream.js +61 -2
- package/dist/models/stream.js.map +1 -1
- package/dist/plugins/context.d.ts +27 -2
- package/dist/plugins/host.d.ts +5 -1
- package/dist/plugins/host.js +33 -11
- package/dist/plugins/host.js.map +1 -1
- package/dist/plugins/registry.d.ts +1 -1
- package/dist/plugins/registry.js +18 -10
- package/dist/plugins/registry.js.map +1 -1
- package/dist/session.d.ts +16 -6
- package/dist/session.js +126 -55
- package/dist/session.js.map +1 -1
- package/dist/state/commit.d.ts +5 -0
- package/dist/state/commit.js +50 -5
- package/dist/state/commit.js.map +1 -1
- package/dist/state/fork.js +27 -6
- package/dist/state/fork.js.map +1 -1
- package/dist/state/memory-backend.js +307 -38
- package/dist/state/memory-backend.js.map +1 -1
- package/dist/state/plugin-state.js +73 -18
- package/dist/state/plugin-state.js.map +1 -1
- package/dist/state/queries.d.ts +14 -14
- package/dist/state/queries.js +150 -48
- package/dist/state/queries.js.map +1 -1
- package/dist/state/schema.d.ts +47 -6
- package/dist/state/schema.js +9 -1
- package/dist/state/schema.js.map +1 -1
- package/dist/state/scope.js +3 -2
- package/dist/state/scope.js.map +1 -1
- package/dist/state/sessions.d.ts +2 -0
- package/dist/state/sessions.js +21 -0
- package/dist/state/sessions.js.map +1 -0
- package/dist/state/storage-ports.d.ts +16 -2
- package/dist/state/threads.d.ts +1 -0
- package/dist/state/threads.js +77 -12
- package/dist/state/threads.js.map +1 -1
- package/dist/testing/harness.d.ts +2 -1
- package/dist/testing/harness.js +6 -4
- package/dist/testing/harness.js.map +1 -1
- package/dist/testing/scripted-provider.d.ts +1 -0
- package/dist/testing/scripted-provider.js +7 -0
- package/dist/testing/scripted-provider.js.map +1 -1
- package/dist/testing/storage-conformance.js +111 -0
- package/dist/testing/storage-conformance.js.map +1 -1
- package/dist/thread.d.ts +4 -2
- package/dist/thread.js +14 -6
- package/dist/thread.js.map +1 -1
- package/dist/tools/tool.d.ts +11 -12
- package/dist/tools/tool.js +27 -10
- package/dist/tools/tool.js.map +1 -1
- package/dist/trace/records.d.ts +11 -6
- package/dist/trace/records.js +28 -1
- package/dist/trace/records.js.map +1 -1
- package/package.json +7 -1
- package/dist/events/catalog.js +0 -89
- package/dist/events/catalog.js.map +0 -1
- package/dist/models/cache.d.ts +0 -12
- package/dist/models/cache.js +0 -17
- package/dist/models/cache.js.map +0 -1
- package/dist/session-events.d.ts +0 -60
- package/dist/session-events.js +0 -14
- package/dist/session-events.js.map +0 -1
package/dist/state/queries.d.ts
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import type { Message } from "../messages/message.js";
|
|
2
2
|
import type { StorageBackend } from "./storage-ports.js";
|
|
3
|
-
import type { Checkpoint, Page, PageOptions, StateQuery, ThreadInfo, RecordKind, RecordTypes } from "./schema.js";
|
|
4
|
-
export
|
|
5
|
-
atCheckpointId?: string;
|
|
6
|
-
}
|
|
3
|
+
import type { Checkpoint, HistoryOptions, CheckpointInfo, RecordQuery, Page, PageOptions, StateQuery, ThreadInfo, RecordKind, RecordTypes } from "./schema.js";
|
|
4
|
+
export type { HistoryOptions, CheckpointInfo } from "./schema.js";
|
|
7
5
|
export interface HistoryPage extends Page<Message> {
|
|
8
6
|
checkpointId: string;
|
|
9
7
|
revision: number;
|
|
10
8
|
}
|
|
11
|
-
export interface CheckpointInfo {
|
|
12
|
-
id: string;
|
|
13
|
-
threadId: string;
|
|
14
|
-
revision: number;
|
|
15
|
-
createdAt: string;
|
|
16
|
-
cause: string;
|
|
17
|
-
forkable: boolean;
|
|
18
|
-
unsafeReason: string | null;
|
|
19
|
-
}
|
|
20
9
|
export declare function checkpointSafety(cp: Checkpoint): {
|
|
21
10
|
forkable: boolean;
|
|
22
11
|
unsafeReason: string | null;
|
|
23
12
|
};
|
|
13
|
+
export declare function limitOf(limit?: number): number;
|
|
24
14
|
export declare function encodeCursor(value: unknown): string;
|
|
25
15
|
export declare function decodeCursor(value: string): any;
|
|
16
|
+
export declare function compareOrdinal(a: string, b: string): number;
|
|
17
|
+
export declare function pageAfter(options: PageOptions, binding: string): [string, string] | null;
|
|
26
18
|
export declare function pageRows<T extends {
|
|
27
19
|
id: string;
|
|
28
20
|
}>(rows: readonly T[], options?: PageOptions, binding?: string): Page<T>;
|
|
21
|
+
export declare function recordBinding(kind: RecordKind, threadId: string, query: RecordQuery): string;
|
|
22
|
+
export declare function historyCursor(id: string, options: HistoryOptions, query: StateQuery): {
|
|
23
|
+
binding: string;
|
|
24
|
+
cursor: {
|
|
25
|
+
checkpointId: string;
|
|
26
|
+
end: number;
|
|
27
|
+
} | null;
|
|
28
|
+
};
|
|
29
29
|
export declare class StateQueries {
|
|
30
30
|
readonly backend: StorageBackend;
|
|
31
31
|
constructor(backend: StorageBackend);
|
|
@@ -37,7 +37,7 @@ export declare class StateQueries {
|
|
|
37
37
|
getCheckpoint(threadId: string, id: string, query?: StateQuery): Promise<Checkpoint | null>;
|
|
38
38
|
listCheckpoints(threadId: string, options?: PageOptions, query?: StateQuery): Promise<Page<CheckpointInfo>>;
|
|
39
39
|
getRecord<K extends RecordKind>(kind: K, threadId: string, id: string, query?: StateQuery): Promise<RecordTypes[K] | null>;
|
|
40
|
-
listRecords<K extends RecordKind>(kind: K, threadId: string, options?:
|
|
40
|
+
listRecords<K extends RecordKind>(kind: K, threadId: string, options?: RecordQuery, query?: StateQuery): Promise<Page<RecordTypes[K]>>;
|
|
41
41
|
getStream: (threadId: string, id: string, query?: StateQuery) => Promise<import("../index.js").StreamRecord | null>;
|
|
42
42
|
getInterrupt: (threadId: string, id: string, query?: StateQuery) => Promise<import("./schema.js").InterruptRecord | null>;
|
|
43
43
|
listStreams: (threadId: string, options?: PageOptions, query?: StateQuery) => Promise<Page<import("../index.js").StreamRecord>>;
|
package/dist/state/queries.js
CHANGED
|
@@ -11,66 +11,168 @@ export function checkpointSafety(cp) {
|
|
|
11
11
|
if (message.role === "tool")
|
|
12
12
|
pending.delete(message.toolCallId);
|
|
13
13
|
}
|
|
14
|
-
return pending.size
|
|
14
|
+
return pending.size
|
|
15
|
+
? { forkable: false, unsafeReason: "UnresolvedToolCalls" }
|
|
16
|
+
: { forkable: true, unsafeReason: null };
|
|
15
17
|
}
|
|
16
|
-
function limitOf(limit = 50) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
export function limitOf(limit = 50) {
|
|
19
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > 200)
|
|
20
|
+
fail("InvalidConfiguration", "Page limit must be 1..200");
|
|
21
|
+
return limit;
|
|
22
|
+
}
|
|
23
|
+
export function encodeCursor(value) {
|
|
24
|
+
return encodeURIComponent(JSON.stringify(value));
|
|
25
|
+
}
|
|
26
|
+
export function decodeCursor(value) {
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(decodeURIComponent(value));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
fail("InvalidCursor", "Malformed cursor");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function compareOrdinal(a, b) {
|
|
35
|
+
const x = new TextEncoder().encode(a), y = new TextEncoder().encode(b);
|
|
36
|
+
for (let i = 0; i < Math.min(x.length, y.length); i++)
|
|
37
|
+
if (x[i] !== y[i])
|
|
38
|
+
return x[i] - y[i];
|
|
39
|
+
return x.length - y.length;
|
|
40
|
+
}
|
|
41
|
+
export function pageAfter(options, binding) {
|
|
42
|
+
if (!options.cursor)
|
|
43
|
+
return null;
|
|
44
|
+
const cursor = decodeCursor(options.cursor);
|
|
45
|
+
if (!cursor ||
|
|
46
|
+
cursor.v !== 2 ||
|
|
47
|
+
cursor.binding !== binding ||
|
|
48
|
+
!Array.isArray(cursor.after) ||
|
|
49
|
+
cursor.after.length !== 2 ||
|
|
50
|
+
cursor.after.some((v) => typeof v !== "string"))
|
|
51
|
+
fail("InvalidCursor", "Cursor belongs to another query");
|
|
52
|
+
return cursor.after;
|
|
21
53
|
}
|
|
22
|
-
catch {
|
|
23
|
-
fail("InvalidCursor", "Malformed cursor");
|
|
24
|
-
} }
|
|
25
54
|
export function pageRows(rows, options = {}, binding = "") {
|
|
26
|
-
const key = (row) =>
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const items = sorted.slice(
|
|
38
|
-
return {
|
|
55
|
+
const key = (row) => [
|
|
56
|
+
row.createdAt ??
|
|
57
|
+
row.startedAt ??
|
|
58
|
+
"",
|
|
59
|
+
row.id,
|
|
60
|
+
];
|
|
61
|
+
const compare = (a, b) => compareOrdinal(a[0], b[0]) || compareOrdinal(a[1], b[1]);
|
|
62
|
+
const limit = limitOf(options.limit), after = pageAfter(options, binding);
|
|
63
|
+
const sorted = rows
|
|
64
|
+
.filter((row) => !after || compare(key(row), after) > 0)
|
|
65
|
+
.sort((a, b) => compare(key(a), key(b)));
|
|
66
|
+
const items = sorted.slice(0, limit);
|
|
67
|
+
return {
|
|
68
|
+
items,
|
|
69
|
+
nextCursor: sorted.length > limit
|
|
70
|
+
? encodeCursor({ v: 2, binding, after: key(items.at(-1)) })
|
|
71
|
+
: null,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function recordBinding(kind, threadId, query) {
|
|
75
|
+
return canonicalJson({
|
|
76
|
+
kind,
|
|
77
|
+
threadId,
|
|
78
|
+
streamId: query.streamId ?? null,
|
|
79
|
+
turnId: query.turnId ?? null,
|
|
80
|
+
status: query.status ?? null,
|
|
81
|
+
checkpointId: query.atCheckpointId ?? null,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
export function historyCursor(id, options, query) {
|
|
85
|
+
const binding = canonicalJson({ threadId: id, scope: query.scope ?? {} });
|
|
86
|
+
const cursor = options.cursor ? decodeCursor(options.cursor) : null;
|
|
87
|
+
if (options.cursor &&
|
|
88
|
+
(!cursor ||
|
|
89
|
+
cursor.v !== 1 ||
|
|
90
|
+
cursor.binding !== binding ||
|
|
91
|
+
typeof cursor.checkpointId !== "string" ||
|
|
92
|
+
!Number.isInteger(cursor.end) ||
|
|
93
|
+
cursor.end < 0 ||
|
|
94
|
+
(options.atCheckpointId &&
|
|
95
|
+
options.atCheckpointId !== cursor.checkpointId)))
|
|
96
|
+
fail("InvalidCursor", "History cursor mismatch");
|
|
97
|
+
return {
|
|
98
|
+
binding,
|
|
99
|
+
cursor: cursor,
|
|
100
|
+
};
|
|
39
101
|
}
|
|
40
102
|
export class StateQueries {
|
|
41
103
|
backend;
|
|
42
104
|
constructor(backend) {
|
|
43
105
|
this.backend = backend;
|
|
44
106
|
}
|
|
45
|
-
async getThread(id, query = {}) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
async
|
|
107
|
+
async getThread(id, query = {}) {
|
|
108
|
+
const info = await this.backend.threads.get(id);
|
|
109
|
+
return info && matchesScope(info.scope, query.scope) ? info : null;
|
|
110
|
+
}
|
|
111
|
+
async requireThread(id, query = {}) {
|
|
112
|
+
const info = await this.getThread(id, query);
|
|
113
|
+
if (!info)
|
|
114
|
+
fail("ThreadNotFound", "Thread does not match query");
|
|
115
|
+
return info;
|
|
116
|
+
}
|
|
117
|
+
async listThreads(query = {}) {
|
|
118
|
+
return this.backend.threads.page(query);
|
|
119
|
+
}
|
|
120
|
+
async snapshot(id, query = {}) {
|
|
121
|
+
const info = await this.requireThread(id, query);
|
|
122
|
+
return (await this.backend.checkpoints.get(info.currentCheckpointId));
|
|
123
|
+
}
|
|
50
124
|
async getHistory(id, options = {}, query = {}) {
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
async
|
|
125
|
+
await this.requireThread(id, query);
|
|
126
|
+
const page = await this.backend.checkpoints.history(id, options, query);
|
|
127
|
+
return {
|
|
128
|
+
...page,
|
|
129
|
+
items: Object.freeze(page.items.map((message) => MessageCodec.decode(message))),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
async getCheckpoint(threadId, id, query = {}) {
|
|
133
|
+
await this.requireThread(threadId, query);
|
|
134
|
+
const cp = await this.backend.checkpoints.get(id);
|
|
135
|
+
return cp?.threadId === threadId ? cp : null;
|
|
136
|
+
}
|
|
137
|
+
async listCheckpoints(threadId, options = {}, query = {}) {
|
|
138
|
+
await this.requireThread(threadId, query);
|
|
139
|
+
return this.backend.checkpoints.page(threadId, options);
|
|
140
|
+
}
|
|
141
|
+
async getRecord(kind, threadId, id, query = {}) {
|
|
142
|
+
await this.requireThread(threadId, query);
|
|
143
|
+
return this.backend.executions.get(kind, id, { threadId });
|
|
144
|
+
}
|
|
145
|
+
async listRecords(kind, threadId, options = {}, query = {}) {
|
|
146
|
+
await this.requireThread(threadId, query);
|
|
147
|
+
return this.backend.executions.page(kind, threadId, options);
|
|
148
|
+
}
|
|
68
149
|
getStream = (threadId, id, query) => this.getRecord("streams", threadId, id, query);
|
|
69
150
|
getInterrupt = (threadId, id, query) => this.getRecord("interrupts", threadId, id, query);
|
|
70
151
|
listStreams = (threadId, options, query) => this.listRecords("streams", threadId, options, query);
|
|
71
|
-
async listTurns(threadId, streamId, options = {}, query = {}) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
152
|
+
async listTurns(threadId, streamId, options = {}, query = {}) {
|
|
153
|
+
await this.requireThread(threadId, query);
|
|
154
|
+
return this.backend.executions.page("turns", threadId, {
|
|
155
|
+
...options,
|
|
156
|
+
streamId,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async listModelAttempts(threadId, turnId, options = {}, query = {}) {
|
|
160
|
+
await this.requireThread(threadId, query);
|
|
161
|
+
return this.backend.executions.page("model_attempts", threadId, {
|
|
162
|
+
...options,
|
|
163
|
+
turnId,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
async listToolExecutions(threadId, turnId, options = {}, query = {}) {
|
|
167
|
+
await this.requireThread(threadId, query);
|
|
168
|
+
return this.backend.executions.page("tool_executions", threadId, {
|
|
169
|
+
...options,
|
|
170
|
+
turnId,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
async listInterrupts(threadId, options = {}, query = {}) {
|
|
174
|
+
await this.requireThread(threadId, query);
|
|
175
|
+
return this.backend.executions.page("interrupts", threadId, options);
|
|
176
|
+
}
|
|
75
177
|
}
|
|
76
178
|
//# sourceMappingURL=queries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/state/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/state/queries.ts"],"names":[],"mappings":"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"}
|
package/dist/state/schema.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Instruction } from "../instructions/instruction.js";
|
|
2
2
|
import type { JsonObject, JsonValue } from "../json.js";
|
|
3
3
|
import type { MessageData } from "../messages/message.js";
|
|
4
|
-
import type { ModelRef } from "../models/contract.js";
|
|
4
|
+
import type { ModelRef, ModelConnectionDescriptor } from "../models/contract.js";
|
|
5
5
|
import type { StreamRecord, TurnRecord, ModelAttemptRecord, ToolExecutionRecord } from "../trace/records.js";
|
|
6
6
|
export type Scope = Readonly<Record<string, string | number | boolean>>;
|
|
7
7
|
export interface PluginStateSnapshot {
|
|
@@ -26,12 +26,10 @@ export declare const ExecutionPhase: {
|
|
|
26
26
|
readonly ModelPending: "ModelPending";
|
|
27
27
|
readonly BeforeTool: "BeforeTool";
|
|
28
28
|
readonly ToolPending: "ToolPending";
|
|
29
|
-
readonly AfterTool: "AfterTool";
|
|
30
29
|
readonly TurnBoundary: "TurnBoundary";
|
|
31
|
-
readonly Finalizing: "Finalizing";
|
|
32
30
|
readonly Suspended: "Suspended";
|
|
33
31
|
};
|
|
34
|
-
export type ExecutionPhase = typeof ExecutionPhase[keyof typeof ExecutionPhase];
|
|
32
|
+
export type ExecutionPhase = (typeof ExecutionPhase)[keyof typeof ExecutionPhase];
|
|
35
33
|
export interface StreamLimits {
|
|
36
34
|
maxTurns: number;
|
|
37
35
|
maxModelAttempts: number;
|
|
@@ -60,17 +58,23 @@ export interface HandlerCursor {
|
|
|
60
58
|
decisions: readonly JsonValue[];
|
|
61
59
|
}
|
|
62
60
|
export interface ExecutionPosition {
|
|
61
|
+
timing?: {
|
|
62
|
+
completedActiveMs: number;
|
|
63
|
+
segmentOpen: boolean;
|
|
64
|
+
complete: boolean;
|
|
65
|
+
};
|
|
63
66
|
streamId: string;
|
|
64
67
|
turnId: string | null;
|
|
65
68
|
phase: ExecutionPhase;
|
|
66
69
|
modelRef: ModelRef;
|
|
70
|
+
modelConnection?: ModelConnectionDescriptor;
|
|
71
|
+
modelOptions?: JsonObject;
|
|
67
72
|
baseInstructions: Instruction;
|
|
68
73
|
pendingToolExecutionIds: readonly string[];
|
|
69
74
|
pendingInterruptId: string | null;
|
|
70
75
|
handlerCursor: HandlerCursor | null;
|
|
71
76
|
budgets: StreamBudgetState;
|
|
72
77
|
registryManifest: readonly RegistrationRequirement[];
|
|
73
|
-
recordRevision: number;
|
|
74
78
|
}
|
|
75
79
|
export type CheckpointCause = "ThreadCreated" | "InputCommitted" | "MessageCommitted" | "ExecutionTransition" | "PluginStateCommitted" | "Suspended" | "Resumed" | "Terminal" | "ForkCreated";
|
|
76
80
|
export interface Checkpoint {
|
|
@@ -121,7 +125,6 @@ export interface RecordTypes {
|
|
|
121
125
|
model_attempts: ModelAttemptRecord;
|
|
122
126
|
tool_executions: ToolExecutionRecord;
|
|
123
127
|
interrupts: InterruptRecord;
|
|
124
|
-
plugin_states: PluginStateSnapshot;
|
|
125
128
|
}
|
|
126
129
|
export type RecordKind = keyof RecordTypes;
|
|
127
130
|
export type RecordEntry = {
|
|
@@ -143,3 +146,41 @@ export interface Page<T> {
|
|
|
143
146
|
items: readonly T[];
|
|
144
147
|
nextCursor: string | null;
|
|
145
148
|
}
|
|
149
|
+
export interface HistoryOptions extends PageOptions {
|
|
150
|
+
atCheckpointId?: string;
|
|
151
|
+
}
|
|
152
|
+
export interface HistoryDataPage extends Page<MessageData> {
|
|
153
|
+
checkpointId: string;
|
|
154
|
+
revision: number;
|
|
155
|
+
}
|
|
156
|
+
export interface CheckpointInfo {
|
|
157
|
+
id: string;
|
|
158
|
+
threadId: string;
|
|
159
|
+
revision: number;
|
|
160
|
+
createdAt: string;
|
|
161
|
+
cause: string;
|
|
162
|
+
forkable: boolean;
|
|
163
|
+
unsafeReason: string | null;
|
|
164
|
+
}
|
|
165
|
+
export interface RecordQuery extends PageOptions {
|
|
166
|
+
streamId?: string;
|
|
167
|
+
turnId?: string;
|
|
168
|
+
status?: string;
|
|
169
|
+
atCheckpointId?: string;
|
|
170
|
+
}
|
|
171
|
+
export interface StoredModelSelection {
|
|
172
|
+
ref: ModelRef;
|
|
173
|
+
options?: JsonObject;
|
|
174
|
+
connection?: ModelConnectionDescriptor;
|
|
175
|
+
}
|
|
176
|
+
export interface SessionRecord {
|
|
177
|
+
id: string;
|
|
178
|
+
agentId: string;
|
|
179
|
+
scope: Scope;
|
|
180
|
+
metadata: JsonObject;
|
|
181
|
+
selectedThreadId: string | null;
|
|
182
|
+
selectedModel: StoredModelSelection;
|
|
183
|
+
revision: number;
|
|
184
|
+
createdAt: string;
|
|
185
|
+
updatedAt: string;
|
|
186
|
+
}
|
package/dist/state/schema.js
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
export const ExecutionPhase = {
|
|
1
|
+
export const ExecutionPhase = {
|
|
2
|
+
BeforeTurn: "BeforeTurn",
|
|
3
|
+
BeforeModel: "BeforeModel",
|
|
4
|
+
ModelPending: "ModelPending",
|
|
5
|
+
BeforeTool: "BeforeTool",
|
|
6
|
+
ToolPending: "ToolPending",
|
|
7
|
+
TurnBoundary: "TurnBoundary",
|
|
8
|
+
Suspended: "Suspended",
|
|
9
|
+
};
|
|
2
10
|
//# sourceMappingURL=schema.js.map
|
package/dist/state/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/state/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/state/schema.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;CACd,CAAC"}
|
package/dist/state/scope.js
CHANGED
|
@@ -4,12 +4,13 @@ export function normalizeScope(value = {}) {
|
|
|
4
4
|
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
5
5
|
fail("InvalidConfiguration", "Scope must be an object");
|
|
6
6
|
for (const entry of Object.values(value))
|
|
7
|
-
if (!["string", "number", "boolean"].includes(typeof entry) ||
|
|
7
|
+
if (!["string", "number", "boolean"].includes(typeof entry) ||
|
|
8
|
+
(typeof entry === "number" && !Number.isFinite(entry)))
|
|
8
9
|
fail("InvalidConfiguration", "Scope values must be finite scalars");
|
|
9
10
|
return immutable(value);
|
|
10
11
|
}
|
|
11
12
|
export function matchesScope(state, filter = {}) {
|
|
12
13
|
normalizeScope(filter);
|
|
13
|
-
return Object.keys(filter).every(key => Object.hasOwn(state, key) && state[key] === filter[key]);
|
|
14
|
+
return Object.keys(filter).every((key) => Object.hasOwn(state, key) && state[key] === filter[key]);
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=scope.js.map
|
package/dist/state/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/state/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,UAAU,cAAc,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/state/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,UAAU,cAAc,CAAC,KAAK,GAAU,EAAE;IAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7D,IAAI,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;IAC1D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QACtC,IACE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC;YACvD,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtD,IAAI,CAAC,sBAAsB,EAAE,qCAAqC,CAAC,CAAC;IACxE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,MAAM,GAAU,EAAE;IAC3D,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,CACjE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { fail, requireId } from "../errors.js";
|
|
2
|
+
import { immutable } from "../json.js";
|
|
3
|
+
import { canonicalJson } from "./commit.js";
|
|
4
|
+
import { matchesScope, normalizeScope } from "./scope.js";
|
|
5
|
+
export function validateSession(value, previous, expected, thread) {
|
|
6
|
+
requireId(value.id);
|
|
7
|
+
requireId(value.agentId);
|
|
8
|
+
normalizeScope(value.scope);
|
|
9
|
+
immutable(value);
|
|
10
|
+
if ((previous?.revision ?? 0) !== expected || value.revision !== expected + 1)
|
|
11
|
+
fail("CommitConflict", "Session revision changed");
|
|
12
|
+
if (previous &&
|
|
13
|
+
(previous.agentId !== value.agentId ||
|
|
14
|
+
canonicalJson(previous.scope) !== canonicalJson(value.scope) ||
|
|
15
|
+
previous.createdAt !== value.createdAt))
|
|
16
|
+
fail("InvalidConfiguration", "Session identity and scope are immutable");
|
|
17
|
+
if (value.selectedThreadId &&
|
|
18
|
+
(!thread || thread.deleted || !matchesScope(thread.scope, value.scope)))
|
|
19
|
+
fail("ThreadNotFound", "Selected thread does not match Session scope");
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/state/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG1D,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,QAA8B,EAC9B,QAAgB,EAChB,MAAyB;IAEzB,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,IAAI,CAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,GAAG,CAAC;QAC3E,IAAI,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;IACrD,IACE,QAAQ;QACR,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;YACjC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5D,QAAQ,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC;QAEzC,IAAI,CAAC,sBAAsB,EAAE,0CAA0C,CAAC,CAAC;IAC3E,IACE,KAAK,CAAC,gBAAgB;QACtB,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAEvE,IAAI,CAAC,gBAAgB,EAAE,8CAA8C,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Checkpoint, ThreadInfo, RecordEntry, RecordKind, RecordTypes, StateQuery, PluginStateSnapshot } from "./schema.js";
|
|
1
|
+
import type { Checkpoint, Page, PageOptions, CheckpointInfo, HistoryOptions, HistoryDataPage, RecordQuery, SessionRecord, ThreadInfo, RecordEntry, RecordKind, RecordTypes, StateQuery, PluginStateSnapshot } from "./schema.js";
|
|
2
2
|
export interface Lease {
|
|
3
3
|
threadId: string;
|
|
4
4
|
ownerToken: string;
|
|
@@ -30,10 +30,15 @@ export interface PublishRequest {
|
|
|
30
30
|
lease: Lease;
|
|
31
31
|
}
|
|
32
32
|
export interface ThreadStore {
|
|
33
|
-
|
|
33
|
+
purge(id: string, query?: StateQuery): Promise<void>;
|
|
34
|
+
get(id: string, options?: {
|
|
35
|
+
includeDeleted?: boolean;
|
|
36
|
+
}): Promise<ThreadInfo | null>;
|
|
37
|
+
page(query: StateQuery & PageOptions): Promise<Page<ThreadInfo>>;
|
|
34
38
|
list(query?: StateQuery): Promise<readonly ThreadInfo[]>;
|
|
35
39
|
}
|
|
36
40
|
export interface ExecutionStore {
|
|
41
|
+
page<K extends RecordKind>(kind: K, threadId: string, query: RecordQuery): Promise<Page<RecordTypes[K]>>;
|
|
37
42
|
get<K extends RecordKind>(kind: K, id: string, options?: {
|
|
38
43
|
threadId?: string;
|
|
39
44
|
atCheckpointId?: string;
|
|
@@ -43,6 +48,8 @@ export interface ExecutionStore {
|
|
|
43
48
|
}): Promise<readonly RecordTypes[K][]>;
|
|
44
49
|
}
|
|
45
50
|
export interface CheckpointStore {
|
|
51
|
+
page(threadId: string, options: PageOptions): Promise<Page<CheckpointInfo>>;
|
|
52
|
+
history(threadId: string, options: HistoryOptions, query?: StateQuery): Promise<HistoryDataPage>;
|
|
46
53
|
get(id: string): Promise<Checkpoint | null>;
|
|
47
54
|
list(threadId: string): Promise<readonly Checkpoint[]>;
|
|
48
55
|
}
|
|
@@ -61,6 +68,13 @@ export interface OwnershipPort {
|
|
|
61
68
|
release(lease: Lease): Promise<void>;
|
|
62
69
|
}
|
|
63
70
|
export interface StorageBackend {
|
|
71
|
+
readonly sessions: {
|
|
72
|
+
get(id: string, query?: StateQuery): Promise<SessionRecord | null>;
|
|
73
|
+
page(query: StateQuery & PageOptions & {
|
|
74
|
+
agentId: string;
|
|
75
|
+
}): Promise<Page<SessionRecord>>;
|
|
76
|
+
compareAndSet(value: SessionRecord, expectedRevision: number): Promise<void>;
|
|
77
|
+
};
|
|
64
78
|
readonly ownedState: {
|
|
65
79
|
get(key: Pick<PluginStateSnapshot, "ownerType" | "ownerId" | "pluginId" | "namespace">): Promise<PluginStateSnapshot | null>;
|
|
66
80
|
compareAndSet(state: PluginStateSnapshot, expectedRevision: number): Promise<void>;
|
package/dist/state/threads.d.ts
CHANGED
|
@@ -24,5 +24,6 @@ export declare class ThreadService {
|
|
|
24
24
|
}): Promise<ThreadInfo>;
|
|
25
25
|
mutate(id: string, transform: (cp: Checkpoint) => Checkpoint, query?: StateQuery, deleteThread?: boolean): Promise<void>;
|
|
26
26
|
rename(id: string, title: string, query?: StateQuery): Promise<void>;
|
|
27
|
+
purge(id: string, query?: StateQuery): Promise<void>;
|
|
27
28
|
delete(id: string, query?: StateQuery): Promise<void>;
|
|
28
29
|
}
|