@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.
Files changed (147) hide show
  1. package/README.md +168 -31
  2. package/dist/agent.d.ts +37 -87
  3. package/dist/agent.js +101 -1116
  4. package/dist/agent.js.map +1 -1
  5. package/dist/controller.d.ts +13 -4
  6. package/dist/controller.js +184 -19
  7. package/dist/controller.js.map +1 -1
  8. package/dist/engine/call.d.ts +8 -0
  9. package/dist/engine/call.js +136 -0
  10. package/dist/engine/call.js.map +1 -0
  11. package/dist/engine/checkpoint.d.ts +11 -0
  12. package/dist/engine/checkpoint.js +187 -0
  13. package/dist/engine/checkpoint.js.map +1 -0
  14. package/dist/engine/delivery.js +6 -13
  15. package/dist/engine/delivery.js.map +1 -1
  16. package/dist/engine/execution.d.ts +5 -0
  17. package/dist/engine/execution.js +292 -0
  18. package/dist/engine/execution.js.map +1 -0
  19. package/dist/engine/frame.d.ts +77 -0
  20. package/dist/engine/frame.js +83 -0
  21. package/dist/engine/frame.js.map +1 -0
  22. package/dist/engine/hooks.d.ts +4 -0
  23. package/dist/engine/hooks.js +138 -0
  24. package/dist/engine/hooks.js.map +1 -0
  25. package/dist/engine/interrupt.d.ts +1 -1
  26. package/dist/engine/lineage.d.ts +1 -1
  27. package/dist/engine/recovery.d.ts +1 -2
  28. package/dist/engine/recovery.js +4 -2
  29. package/dist/engine/recovery.js.map +1 -1
  30. package/dist/engine/resume.d.ts +12 -1
  31. package/dist/engine/resume.js +189 -0
  32. package/dist/engine/resume.js.map +1 -1
  33. package/dist/engine/runtime.d.ts +16 -0
  34. package/dist/engine/runtime.js +29 -0
  35. package/dist/engine/runtime.js.map +1 -0
  36. package/dist/engine/services.d.ts +3 -0
  37. package/dist/engine/services.js +125 -0
  38. package/dist/engine/services.js.map +1 -0
  39. package/dist/engine/tool-executor.d.ts +8 -2
  40. package/dist/engine/tool-executor.js +266 -3
  41. package/dist/engine/tool-executor.js.map +1 -1
  42. package/dist/engine/tracked-effects.js +5 -6
  43. package/dist/engine/tracked-effects.js.map +1 -1
  44. package/dist/errors.js +24 -9
  45. package/dist/errors.js.map +1 -1
  46. package/dist/events/definition.d.ts +2 -0
  47. package/dist/events/definition.js +2 -0
  48. package/dist/events/definition.js.map +1 -1
  49. package/dist/events/dispatcher.d.ts +1 -1
  50. package/dist/events/dispatcher.js +35 -4
  51. package/dist/events/dispatcher.js.map +1 -1
  52. package/dist/events/observer.d.ts +3 -0
  53. package/dist/events/observer.js +13 -0
  54. package/dist/events/observer.js.map +1 -0
  55. package/dist/events/{catalog.d.ts → type.d.ts} +170 -47
  56. package/dist/events/type.js +175 -0
  57. package/dist/events/type.js.map +1 -0
  58. package/dist/identity.d.ts +1 -0
  59. package/dist/identity.js +23 -0
  60. package/dist/identity.js.map +1 -0
  61. package/dist/index.d.ts +4 -2
  62. package/dist/index.js +4 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/instructions/instruction.d.ts +2 -0
  65. package/dist/instructions/instruction.js +10 -3
  66. package/dist/instructions/instruction.js.map +1 -1
  67. package/dist/loop.d.ts +5 -5
  68. package/dist/loop.js +44 -204
  69. package/dist/loop.js.map +1 -1
  70. package/dist/messages/codec.js +4 -2
  71. package/dist/messages/codec.js.map +1 -1
  72. package/dist/messages/message.d.ts +2 -3
  73. package/dist/messages/message.js +3 -3
  74. package/dist/messages/message.js.map +1 -1
  75. package/dist/models/contract.d.ts +15 -0
  76. package/dist/models/options.d.ts +3 -0
  77. package/dist/models/options.js +13 -0
  78. package/dist/models/options.js.map +1 -0
  79. package/dist/models/registry.d.ts +2 -0
  80. package/dist/models/registry.js +18 -1
  81. package/dist/models/registry.js.map +1 -1
  82. package/dist/models/resolver.d.ts +4 -2
  83. package/dist/models/resolver.js +9 -4
  84. package/dist/models/resolver.js.map +1 -1
  85. package/dist/models/stream.d.ts +6 -0
  86. package/dist/models/stream.js +61 -2
  87. package/dist/models/stream.js.map +1 -1
  88. package/dist/plugins/context.d.ts +27 -2
  89. package/dist/plugins/host.d.ts +5 -1
  90. package/dist/plugins/host.js +33 -11
  91. package/dist/plugins/host.js.map +1 -1
  92. package/dist/plugins/registry.d.ts +1 -1
  93. package/dist/plugins/registry.js +18 -10
  94. package/dist/plugins/registry.js.map +1 -1
  95. package/dist/session.d.ts +16 -6
  96. package/dist/session.js +126 -55
  97. package/dist/session.js.map +1 -1
  98. package/dist/state/commit.d.ts +5 -0
  99. package/dist/state/commit.js +50 -5
  100. package/dist/state/commit.js.map +1 -1
  101. package/dist/state/fork.js +27 -6
  102. package/dist/state/fork.js.map +1 -1
  103. package/dist/state/memory-backend.js +307 -38
  104. package/dist/state/memory-backend.js.map +1 -1
  105. package/dist/state/plugin-state.js +73 -18
  106. package/dist/state/plugin-state.js.map +1 -1
  107. package/dist/state/queries.d.ts +14 -14
  108. package/dist/state/queries.js +150 -48
  109. package/dist/state/queries.js.map +1 -1
  110. package/dist/state/schema.d.ts +47 -6
  111. package/dist/state/schema.js +9 -1
  112. package/dist/state/schema.js.map +1 -1
  113. package/dist/state/scope.js +3 -2
  114. package/dist/state/scope.js.map +1 -1
  115. package/dist/state/sessions.d.ts +2 -0
  116. package/dist/state/sessions.js +21 -0
  117. package/dist/state/sessions.js.map +1 -0
  118. package/dist/state/storage-ports.d.ts +16 -2
  119. package/dist/state/threads.d.ts +1 -0
  120. package/dist/state/threads.js +77 -12
  121. package/dist/state/threads.js.map +1 -1
  122. package/dist/testing/harness.d.ts +2 -1
  123. package/dist/testing/harness.js +6 -4
  124. package/dist/testing/harness.js.map +1 -1
  125. package/dist/testing/scripted-provider.d.ts +1 -0
  126. package/dist/testing/scripted-provider.js +7 -0
  127. package/dist/testing/scripted-provider.js.map +1 -1
  128. package/dist/testing/storage-conformance.js +111 -0
  129. package/dist/testing/storage-conformance.js.map +1 -1
  130. package/dist/thread.d.ts +4 -2
  131. package/dist/thread.js +14 -6
  132. package/dist/thread.js.map +1 -1
  133. package/dist/tools/tool.d.ts +11 -12
  134. package/dist/tools/tool.js +27 -10
  135. package/dist/tools/tool.js.map +1 -1
  136. package/dist/trace/records.d.ts +11 -6
  137. package/dist/trace/records.js +28 -1
  138. package/dist/trace/records.js.map +1 -1
  139. package/package.json +7 -1
  140. package/dist/events/catalog.js +0 -89
  141. package/dist/events/catalog.js.map +0 -1
  142. package/dist/models/cache.d.ts +0 -12
  143. package/dist/models/cache.js +0 -17
  144. package/dist/models/cache.js.map +0 -1
  145. package/dist/session-events.d.ts +0 -60
  146. package/dist/session-events.js +0 -14
  147. package/dist/session-events.js.map +0 -1
@@ -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 interface HistoryOptions extends PageOptions {
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?: PageOptions, query?: StateQuery): Promise<Page<RecordTypes[K]>>;
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>>;
@@ -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 ? { forkable: false, unsafeReason: "UnresolvedToolCalls" } : { forkable: true, unsafeReason: null };
14
+ return pending.size
15
+ ? { forkable: false, unsafeReason: "UnresolvedToolCalls" }
16
+ : { forkable: true, unsafeReason: null };
15
17
  }
16
- function limitOf(limit = 50) { if (!Number.isInteger(limit) || limit < 1 || limit > 200)
17
- fail("InvalidConfiguration", "Page limit must be 1..200"); return limit; }
18
- export function encodeCursor(value) { return encodeURIComponent(JSON.stringify(value)); }
19
- export function decodeCursor(value) { try {
20
- return JSON.parse(decodeURIComponent(value));
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) => { const dated = row; return (dated.createdAt ?? dated.startedAt ?? "") + "\u0000" + row.id; };
27
- const limit = limitOf(options.limit), sorted = rows.slice().sort((a, b) => key(a).localeCompare(key(b)));
28
- let index = 0;
29
- if (options.cursor) {
30
- const cursor = decodeCursor(options.cursor);
31
- if (cursor.binding !== binding || cursor.v !== 1)
32
- fail("InvalidCursor", "Cursor belongs to another query");
33
- index = sorted.findIndex(r => key(r) > cursor.after);
34
- if (index < 0)
35
- index = sorted.length;
36
- }
37
- const items = sorted.slice(index, index + limit);
38
- return { items, nextCursor: index + limit < sorted.length ? encodeCursor({ v: 1, binding, after: key(items.at(-1)) }) : null };
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 = {}) { const info = await this.backend.threads.get(id); return info && matchesScope(info.scope, query.scope) ? info : null; }
46
- async requireThread(id, query = {}) { const info = await this.getThread(id, query); if (!info)
47
- fail("ThreadNotFound", "Thread does not match query"); return info; }
48
- async listThreads(query = {}) { const rows = (await this.backend.threads.list()).filter(r => matchesScope(r.scope, query.scope)); return pageRows(rows, query, canonicalJson(query.scope ?? {})); }
49
- async snapshot(id, query = {}) { const info = await this.requireThread(id, query); return (await this.backend.checkpoints.get(info.currentCheckpointId)); }
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
- const head = await this.requireThread(id, query), limit = limitOf(options.limit), binding = canonicalJson({ threadId: id, scope: query.scope ?? {} });
52
- const cursor = options.cursor ? decodeCursor(options.cursor) : null;
53
- if (cursor && (cursor.v !== 1 || cursor.binding !== binding || (options.atCheckpointId && options.atCheckpointId !== cursor.checkpointId)))
54
- fail("InvalidCursor", "History cursor mismatch");
55
- const cp = await this.backend.checkpoints.get(cursor?.checkpointId ?? options.atCheckpointId ?? head.currentCheckpointId);
56
- if (!cp || cp.threadId !== id)
57
- fail("CheckpointNotFound", "No checkpoint for history");
58
- const end = cursor?.end ?? cp.state.messages.length;
59
- if (!Number.isInteger(end) || end < 0 || end > cp.state.messages.length)
60
- fail("InvalidCursor", "Invalid history position");
61
- const begin = Math.max(0, end - limit), items = Object.freeze(cp.state.messages.slice(begin, end).map(m => MessageCodec.decode(m)));
62
- return { items, checkpointId: cp.id, revision: cp.revision, nextCursor: begin > 0 ? encodeCursor({ v: 1, binding, checkpointId: cp.id, end: begin }) : null };
63
- }
64
- async getCheckpoint(threadId, id, query = {}) { await this.requireThread(threadId, query); const cp = await this.backend.checkpoints.get(id); return cp?.threadId === threadId ? cp : null; }
65
- async listCheckpoints(threadId, options = {}, query = {}) { await this.requireThread(threadId, query); return pageRows((await this.backend.checkpoints.list(threadId)).map(cp => ({ id: cp.id, threadId, revision: cp.revision, createdAt: cp.createdAt, cause: cp.cause, ...checkpointSafety(cp) })), options, "checkpoints:" + threadId); }
66
- async getRecord(kind, threadId, id, query = {}) { await this.requireThread(threadId, query); return this.backend.executions.get(kind, id, { threadId }); }
67
- async listRecords(kind, threadId, options = {}, query = {}) { await this.requireThread(threadId, query); const rows = await this.backend.executions.listRecords(kind, threadId); return pageRows(rows, options, kind + ":" + threadId); }
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 = {}) { await this.requireThread(threadId, query); return pageRows((await this.backend.executions.listRecords("turns", threadId)).filter(r => r.streamId === streamId), options, "turns:" + streamId); }
72
- async listModelAttempts(threadId, turnId, options = {}, query = {}) { await this.requireThread(threadId, query); return pageRows((await this.backend.executions.listRecords("model_attempts", threadId)).filter(r => r.turnId === turnId), options, "attempts:" + turnId); }
73
- async listToolExecutions(threadId, turnId, options = {}, query = {}) { await this.requireThread(threadId, query); return pageRows((await this.backend.executions.listRecords("tool_executions", threadId)).filter(r => r.turnId === turnId), options, "tools:" + turnId); }
74
- async listInterrupts(threadId, options = {}, query = {}) { await this.requireThread(threadId, query); return pageRows((await this.backend.executions.listRecords("interrupts", threadId)).filter(r => !options.status || r.status === options.status), options, "interrupts:" + threadId + ":" + options.status); }
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":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/state/queries.ts"],"names":[],"mappings":"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"}
@@ -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
+ }
@@ -1,2 +1,10 @@
1
- export const ExecutionPhase = { BeforeTurn: "BeforeTurn", BeforeModel: "BeforeModel", ModelPending: "ModelPending", BeforeTool: "BeforeTool", ToolPending: "ToolPending", AfterTool: "AfterTool", TurnBoundary: "TurnBoundary", Finalizing: "Finalizing", Suspended: "Suspended" };
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
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/state/schema.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,cAAc,GAAC,EAAC,UAAU,EAAC,YAAY,EAAC,WAAW,EAAC,aAAa,EAAC,YAAY,EAAC,cAAc,EAAC,UAAU,EAAC,YAAY,EAAC,WAAW,EAAC,aAAa,EAAC,SAAS,EAAC,WAAW,EAAC,YAAY,EAAC,cAAc,EAAC,UAAU,EAAC,YAAY,EAAC,SAAS,EAAC,WAAW,EAAU,CAAC"}
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"}
@@ -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) || (typeof entry === "number" && !Number.isFinite(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
@@ -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,GAAO,EAAE;IAC3C,IAAG,CAAC,KAAK,IAAE,OAAO,KAAK,KAAG,QAAQ,IAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAC,IAAI,CAAC,sBAAsB,EAAC,yBAAyB,CAAC,CAAC;IAChH,KAAI,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAAC,IAAG,CAAC,CAAC,QAAQ,EAAC,QAAQ,EAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAE,CAAC,OAAO,KAAK,KAAG,QAAQ,IAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,sBAAsB,EAAC,qCAAqC,CAAC,CAAC;IACxN,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AACD,MAAM,UAAU,YAAY,CAAC,KAAW,EAAC,MAAM,GAAO,EAAE;IACtD,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA,EAAE,CAAA,MAAM,CAAC,MAAM,CAAC,KAAK,EAAC,GAAG,CAAC,IAAE,KAAK,CAAC,GAAG,CAAC,KAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5F,CAAC"}
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,2 @@
1
+ import type { SessionRecord, ThreadInfo } from "./schema.js";
2
+ export declare function validateSession(value: SessionRecord, previous: SessionRecord | null, expected: number, thread: ThreadInfo | null): void;
@@ -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
- get(id: string): Promise<ThreadInfo | null>;
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>;
@@ -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
  }