@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
@@ -0,0 +1,292 @@
1
+ import { stream as streamHooks, model as modelHooks, input as inputHooks, } from "../events/type.js";
2
+ import { TessarError, errorInfo, errorFromInfo, fail } from "../errors.js";
3
+ import { aggregateUsage } from "../trace/usage.js";
4
+ import { bindExecutionModel } from "../models/stream.js";
5
+ import { loop } from "../loop.js";
6
+ import { createDelivery, } from "./delivery.js";
7
+ import { createFrame, loadRecords, watchLease, } from "./frame.js";
8
+ import { eventContext } from "./hooks.js";
9
+ import { Suspension } from "./interrupt.js";
10
+ import { resolveChildAdmission } from "./lineage.js";
11
+ import { prepareResume, prepareRecovery, restoreFrame } from "./resume.js";
12
+ import { recoverTools } from "./tool-executor.js";
13
+ export async function execute(execution, request, sink, registry) {
14
+ let frame;
15
+ let pendingLease;
16
+ try {
17
+ if (sink.controller.signal.aborted)
18
+ fail("Cancelled", "Execution cancelled before admission");
19
+ if (request.kind === "resume") {
20
+ frame = await prepareResume(execution, request, sink, registry);
21
+ execution.active.set(frame.stream.id, frame);
22
+ watchLease(execution, frame);
23
+ sink.admitted();
24
+ await execution.hook(frame, streamHooks.resumed, {
25
+ checkpointId: frame.cp.id,
26
+ interruptId: request.interruptId,
27
+ reason: "response",
28
+ });
29
+ const cursor = frame.cp.execution.handlerCursor;
30
+ if (cursor?.eventId === streamHooks.before) {
31
+ const result = await execution.hook(frame, streamHooks.before, cursor.payload);
32
+ if (result?.decision === "deny" || result?.decision === "stop") {
33
+ await execution.finish(frame, "stopped", result.reason ?? "PolicyStopped");
34
+ return;
35
+ }
36
+ }
37
+ if (cursor?.eventId === modelHooks.recover) {
38
+ const result = await execution.hook(frame, modelHooks.recover, cursor.payload);
39
+ if (result?.decision !== "retry")
40
+ fail("ProviderError", "Recovery policy declined retry");
41
+ frame.cp.execution.phase = "BeforeModel";
42
+ await execution.commit(frame, "ExecutionTransition");
43
+ }
44
+ await loop(frame, execution);
45
+ return;
46
+ }
47
+ if (request.kind === "recover") {
48
+ frame = await prepareRecovery(execution, request, sink, registry);
49
+ execution.active.set(frame.stream.id, frame);
50
+ watchLease(execution, frame);
51
+ sink.admitted();
52
+ if (frame.cp.execution?.pendingInterruptId) {
53
+ const interrupt = await execution.runtime.backend.executions.get("interrupts", frame.cp.execution.pendingInterruptId, { threadId: request.threadId });
54
+ await execution.hook(frame, streamHooks.suspended, {
55
+ checkpointId: frame.cp.id,
56
+ interrupt: interrupt,
57
+ });
58
+ return;
59
+ }
60
+ await execution.hook(frame, streamHooks.resumed, {
61
+ checkpointId: frame.cp.id,
62
+ interruptId: null,
63
+ reason: "recovery",
64
+ });
65
+ await loop(frame, execution);
66
+ return;
67
+ }
68
+ const head = await execution.runtime.backend.threads.get(request.threadId);
69
+ if (!head)
70
+ fail("ThreadNotFound", "Thread not found");
71
+ if (head.activeStreamId)
72
+ fail("ThreadBusy", "Thread already has unfinished execution");
73
+ const lease = await execution.runtime.backend.ownership.acquire({
74
+ threadId: request.threadId,
75
+ ownerToken: execution.ids.next("owner"),
76
+ ttlMs: 30000,
77
+ });
78
+ pendingLease = lease;
79
+ const cp = structuredClone((await execution.runtime.backend.checkpoints.get(head.currentCheckpointId)));
80
+ const streamId = request.origin
81
+ ? await resolveChildAdmission(execution.runtime.backend, request.origin, request.threadId)
82
+ : execution.ids.next("stream"), usage = aggregateUsage([]);
83
+ const stream = {
84
+ id: streamId,
85
+ threadId: request.threadId,
86
+ scope: head.scope,
87
+ parentStreamId: request.origin?.parentStreamId ?? null,
88
+ parentToolExecutionId: request.origin?.parentToolExecutionId ?? null,
89
+ triggerMessageId: null,
90
+ status: "running",
91
+ stopReason: null,
92
+ startedAt: execution.clock.now(),
93
+ endedAt: null,
94
+ durationMs: null,
95
+ error: null,
96
+ directUsage: usage,
97
+ inclusiveUsage: usage,
98
+ outputMessageIds: [],
99
+ };
100
+ const records = await loadRecords(execution, request.threadId);
101
+ frame = createFrame(execution, {
102
+ request,
103
+ sink,
104
+ registry,
105
+ lease,
106
+ cp,
107
+ stream,
108
+ records,
109
+ admitted: false,
110
+ });
111
+ execution.put(frame, "streams", stream);
112
+ sink.setId(streamId);
113
+ execution.active.set(streamId, frame);
114
+ watchLease(execution, frame);
115
+ cp.execution = {
116
+ timing: { completedActiveMs: 0, segmentOpen: true, complete: true },
117
+ streamId,
118
+ turnId: null,
119
+ phase: "BeforeTurn",
120
+ modelRef: request.model,
121
+ ...(request.modelOptions ? { modelOptions: request.modelOptions } : {}),
122
+ baseInstructions: execution.agent.instructions,
123
+ pendingToolExecutionIds: [],
124
+ pendingInterruptId: null,
125
+ handlerCursor: null,
126
+ budgets: {
127
+ turns: 0,
128
+ modelAttempts: 0,
129
+ toolCalls: 0,
130
+ limits: { ...execution.agent.limits, ...request.limits },
131
+ },
132
+ registryManifest: [
133
+ ...registry.values.map((r) => ({
134
+ pluginId: r.pluginId,
135
+ kind: r.kind,
136
+ id: r.id,
137
+ version: r.version,
138
+ pluginVersion: r.pluginVersion,
139
+ configurationId: r.configurationId,
140
+ requiredForContinuation: true,
141
+ })),
142
+ ...registry.handlers.map((r) => ({
143
+ pluginId: r.pluginId,
144
+ kind: "handler",
145
+ id: r.id,
146
+ version: r.version,
147
+ pluginVersion: r.pluginVersion,
148
+ configurationId: r.configurationId,
149
+ requiredForContinuation: r.kind !== "notification",
150
+ })),
151
+ ],
152
+ };
153
+ bindExecutionModel(registry, cp.execution, request.adapter);
154
+ const input = await execution.hook(frame, inputHooks.prepare, {
155
+ messages: request.input,
156
+ });
157
+ if (input.rejected)
158
+ throw errorFromInfo(input.rejected);
159
+ for (const message of input.messages)
160
+ cp.state = {
161
+ ...cp.state,
162
+ messages: [
163
+ ...cp.state.messages,
164
+ await execution.prepareMessage(frame, message),
165
+ ],
166
+ };
167
+ stream.triggerMessageId = input.messages[0]?.id ?? null;
168
+ await execution.commit(frame, "InputCommitted");
169
+ frame.admitted = true;
170
+ sink.admitted();
171
+ await execution.hook(frame, streamHooks.started, {
172
+ modelRef: request.model,
173
+ checkpointId: frame.cp.id,
174
+ });
175
+ await execution.hook(frame, inputHooks.received, {
176
+ messages: input.messages,
177
+ });
178
+ if (input.handled) {
179
+ for (const message of input.handled.output)
180
+ await execution.appendMessage(frame, message);
181
+ await execution.finish(frame, "completed", null);
182
+ return;
183
+ }
184
+ const before = await execution.hook(frame, streamHooks.before, {
185
+ input: input.messages,
186
+ });
187
+ if (before?.decision === "deny" || before?.decision === "stop") {
188
+ await execution.finish(frame, "stopped", before.reason ?? "PolicyStopped");
189
+ return;
190
+ }
191
+ await loop(frame, execution);
192
+ }
193
+ catch (error) {
194
+ if (error instanceof Suspension)
195
+ return;
196
+ if (frame?.ownershipError)
197
+ error = new TessarError("OwnershipLost", "Execution ownership was lost");
198
+ const info = errorInfo(error);
199
+ if (frame?.admitted &&
200
+ info.source !== "storage" &&
201
+ ![
202
+ "StorageUnavailable",
203
+ "CommitConflict",
204
+ "OwnershipLost",
205
+ "RecoveryRequired",
206
+ ].includes(info.code)) {
207
+ try {
208
+ await execution.finish(frame, sink.controller.signal.aborted ? "cancelled" : "failed", info.code, info);
209
+ return error;
210
+ }
211
+ catch (finalizeError) {
212
+ error = finalizeError;
213
+ }
214
+ }
215
+ const finalError = errorInfo(error);
216
+ execution.runtime.report(finalError, eventContext(execution, frame));
217
+ sink.emit(streamHooks.error, {
218
+ error: finalError,
219
+ lastKnownCheckpointId: frame?.cp.id ?? null,
220
+ persistedStatus: frame?.stream.status ?? null,
221
+ }, eventContext(execution, frame));
222
+ sink.rejected(finalError);
223
+ return error;
224
+ }
225
+ finally {
226
+ if (frame) {
227
+ if (["completed", "failed", "stopped", "cancelled"].includes(frame.stream.status) ||
228
+ !frame.admitted)
229
+ execution.pendingModels.delete(frame.request.threadId);
230
+ if (frame.heartbeat)
231
+ clearInterval(frame.heartbeat);
232
+ execution.active.delete(frame.stream.id);
233
+ try {
234
+ await execution.runtime.backend.ownership.release(frame.lease);
235
+ }
236
+ catch {
237
+ /* recovery uses lease expiry */
238
+ }
239
+ }
240
+ else if (pendingLease) {
241
+ try {
242
+ await execution.runtime.backend.ownership.release(pendingLease);
243
+ }
244
+ catch {
245
+ /* lease expiry remains authoritative */
246
+ }
247
+ }
248
+ await registry.release();
249
+ sink.close();
250
+ }
251
+ }
252
+ export async function cancel(execution, threadId, streamId, reason = "Cancelled", target = { kind: "observer", observe: () => { } }, context = {}) {
253
+ const active = execution.active.get(streamId);
254
+ if (active) {
255
+ if (active.cp.threadId !== threadId)
256
+ fail("InvalidTransition", "Execution belongs to a different thread");
257
+ await execution.hook(active, streamHooks.cancel, { reason });
258
+ active.sink.controller.abort(reason);
259
+ return;
260
+ }
261
+ const registry = execution.runtime.hooks.capture(), sink = createDelivery(threadId, execution.ids, target, undefined, execution.runtime.report);
262
+ let frame;
263
+ try {
264
+ frame = await restoreFrame(execution, { ...context, kind: "recover", threadId, streamId }, sink, registry, false);
265
+ watchLease(execution, frame);
266
+ if (frame.cp.execution?.pendingToolExecutionIds.length)
267
+ await recoverTools(frame, execution, true);
268
+ for (const interrupt of execution.rows(frame, "interrupts"))
269
+ if (interrupt.streamId === streamId && interrupt.status === "pending") {
270
+ interrupt.status = "cancelled";
271
+ interrupt.resolvedAt = execution.clock.now();
272
+ }
273
+ for (const attempt of execution.rows(frame, "model_attempts"))
274
+ if (attempt.streamId === streamId && attempt.status === "running") {
275
+ attempt.status = "cancelled";
276
+ attempt.endedAt = execution.clock.now();
277
+ }
278
+ await execution.hook(frame, streamHooks.cancel, { reason });
279
+ await execution.finish(frame, "cancelled", reason);
280
+ execution.pendingModels.delete(threadId);
281
+ }
282
+ finally {
283
+ if (frame) {
284
+ if (frame.heartbeat)
285
+ clearInterval(frame.heartbeat);
286
+ await execution.runtime.backend.ownership.release(frame.lease);
287
+ }
288
+ await registry.release();
289
+ sink.close();
290
+ }
291
+ }
292
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/engine/execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { Agent } from "../agent.js";
2
+ import type { ExecutionRuntime } from "./runtime.js";
3
+ import { type ErrorInfo } from "../errors.js";
4
+ import type { JsonObject, JsonValue } from "../json.js";
5
+ import type { MessageData } from "../messages/message.js";
6
+ import type { ModelAdapter, ModelRef } from "../models/contract.js";
7
+ import type { RegistryLease } from "../plugins/registry.js";
8
+ import { PluginStateAccess } from "../state/plugin-state.js";
9
+ import type { Lease } from "../state/storage-ports.js";
10
+ import type { Checkpoint, RecordEntry, StreamLimits } from "../state/schema.js";
11
+ import type { StreamRecord } from "../trace/records.js";
12
+ import type { LoopContext } from "../loop.js";
13
+ import type { Attachment } from "./delivery.js";
14
+ import type { SessionHookHandle, ThreadHookHandle } from "../plugins/context.js";
15
+ export interface ExecutionOrigin {
16
+ parentStreamId: string;
17
+ parentToolExecutionId?: string;
18
+ dispatchId: string;
19
+ }
20
+ export type ExecutionRequest = ({
21
+ kind: "input";
22
+ threadId: string;
23
+ input: readonly MessageData[];
24
+ model: ModelRef;
25
+ origin?: ExecutionOrigin;
26
+ context?: JsonObject;
27
+ limits?: Partial<StreamLimits>;
28
+ } | {
29
+ kind: "resume";
30
+ threadId: string;
31
+ interruptId: string;
32
+ value: JsonValue;
33
+ model?: ModelRef;
34
+ } | {
35
+ kind: "recover";
36
+ threadId: string;
37
+ streamId: string;
38
+ model?: ModelRef;
39
+ }) & {
40
+ signal?: AbortSignal;
41
+ adapter?: ModelAdapter;
42
+ modelOptions?: JsonObject;
43
+ session?: SessionHookHandle;
44
+ thread?: ThreadHookHandle;
45
+ };
46
+ export interface ExecutionFrame {
47
+ activeSegmentStartedAt?: number;
48
+ turnStartedAt?: number;
49
+ effectLocks?: Map<string, Promise<unknown>>;
50
+ commitQueue?: Promise<void>;
51
+ heartbeat?: ReturnType<typeof setInterval>;
52
+ ownershipError?: ErrorInfo;
53
+ request: ExecutionRequest;
54
+ sink: Attachment;
55
+ registry: RegistryLease;
56
+ lease: Lease;
57
+ cp: Checkpoint;
58
+ stream: StreamRecord;
59
+ records: Map<string, RecordEntry>;
60
+ state: PluginStateAccess;
61
+ admitted: boolean;
62
+ sequence: number;
63
+ }
64
+ export type ExecutionContext = Omit<LoopContext, "finish"> & {
65
+ agent: Agent;
66
+ runtime: ExecutionRuntime;
67
+ active: Map<string, ExecutionFrame>;
68
+ pendingModels: Map<string, ModelAdapter>;
69
+ resumeAdmissions: Map<string, Promise<ExecutionFrame>>;
70
+ prepareMessage(frame: ExecutionFrame, message: MessageData): Promise<MessageData>;
71
+ finish(frame: ExecutionFrame, status: "completed" | "stopped" | "failed" | "cancelled", reason: string | null, error?: ErrorInfo | null): Promise<void>;
72
+ };
73
+ export declare function loadRecords(execution: ExecutionContext, threadId: string): Promise<Map<string, RecordEntry>>;
74
+ export declare function createFrame(execution: ExecutionContext, options: Pick<ExecutionFrame, "request" | "sink" | "registry" | "lease" | "cp" | "stream" | "records" | "admitted">): ExecutionFrame;
75
+ export declare function watchLease(execution: ExecutionContext, frame: ExecutionFrame): void;
76
+ /** Account only observed attachment time; a crashed open segment is incomplete. */
77
+ export declare function sampleActiveTime(frame: ExecutionFrame, close?: boolean): void;
@@ -0,0 +1,83 @@
1
+ import { errorInfo } from "../errors.js";
2
+ import { PluginStateAccess, } from "../state/plugin-state.js";
3
+ import { childStateDefinition } from "./tracked-effects.js";
4
+ export async function loadRecords(execution, threadId) {
5
+ const records = new Map();
6
+ for (const kind of [
7
+ "streams",
8
+ "turns",
9
+ "model_attempts",
10
+ "tool_executions",
11
+ "interrupts",
12
+ ])
13
+ for (const row of await execution.runtime.backend.executions.listRecords(kind, threadId)) {
14
+ const id = "id" in row ? row.id : "";
15
+ records.set(kind + ":" + id, {
16
+ kind,
17
+ id,
18
+ threadId,
19
+ data: structuredClone(row),
20
+ });
21
+ }
22
+ return records;
23
+ }
24
+ export function createFrame(execution, options) {
25
+ if (options.request.adapter)
26
+ execution.pendingModels.set(options.request.threadId, options.request.adapter);
27
+ else if (options.request.kind !== "input")
28
+ options = {
29
+ ...options,
30
+ request: {
31
+ ...options.request,
32
+ adapter: execution.pendingModels.get(options.request.threadId),
33
+ },
34
+ };
35
+ let frame;
36
+ const state = new PluginStateAccess([
37
+ childStateDefinition,
38
+ ...options.registry.list("state"),
39
+ ], { type: "thread", id: options.request.threadId }, options.cp.state.pluginStates, async () => {
40
+ await execution.commit(frame, "PluginStateCommitted");
41
+ return frame.cp.id;
42
+ }, undefined, execution.runtime.backend.ownedState);
43
+ const timing = options.cp.execution?.timing;
44
+ if (options.cp.execution)
45
+ options.cp.execution.timing = {
46
+ completedActiveMs: timing?.completedActiveMs ?? 0,
47
+ complete: timing !== undefined && timing.complete && !timing.segmentOpen,
48
+ segmentOpen: true,
49
+ };
50
+ frame = {
51
+ ...options,
52
+ state,
53
+ sequence: 0,
54
+ activeSegmentStartedAt: performance.now(),
55
+ };
56
+ return frame;
57
+ }
58
+ export function watchLease(execution, frame) {
59
+ if (frame.heartbeat)
60
+ return;
61
+ frame.heartbeat = setInterval(() => {
62
+ void execution.runtime.backend.ownership.renew(frame.lease, 30000).then((lease) => {
63
+ frame.lease = lease;
64
+ }, (error) => {
65
+ frame.ownershipError = errorInfo(error, {
66
+ source: "storage",
67
+ backendId: execution.runtime.backend.id,
68
+ });
69
+ frame.sink.controller.abort("OwnershipLost");
70
+ });
71
+ }, 10000);
72
+ }
73
+ /** Account only observed attachment time; a crashed open segment is incomplete. */
74
+ export function sampleActiveTime(frame, close = false) {
75
+ const timing = frame.cp.execution?.timing;
76
+ if (!timing || frame.activeSegmentStartedAt === undefined)
77
+ return;
78
+ const now = performance.now();
79
+ timing.completedActiveMs += Math.max(0, now - frame.activeSegmentStartedAt);
80
+ timing.segmentOpen = !close;
81
+ frame.activeSegmentStartedAt = close ? undefined : now;
82
+ }
83
+ //# sourceMappingURL=frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/engine/frame.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AnyEvent, EventContext, PayloadOf, ResultOf } from "../events/definition.js";
2
+ import type { ExecutionContext, ExecutionFrame } from "./frame.js";
3
+ export declare function eventContext(execution: ExecutionContext, frame?: ExecutionFrame): EventContext;
4
+ export declare function hook<D extends AnyEvent>(execution: ExecutionContext, frame: ExecutionFrame, definition: D, payload: PayloadOf<D>, toolExecutionId?: string): Promise<ResultOf<D>>;
@@ -0,0 +1,138 @@
1
+ import { stream as streamHooks } from "../events/type.js";
2
+ import { fail } from "../errors.js";
3
+ import { immutable } from "../json.js";
4
+ import {} from "../events/type.js";
5
+ import { canonicalJson } from "../state/commit.js";
6
+ import { Suspension } from "./interrupt.js";
7
+ import { phaseForEvent } from "./resume.js";
8
+ export function eventContext(execution, frame) {
9
+ return {
10
+ agentId: execution.agent.id,
11
+ controllerId: execution.runtime.id,
12
+ ...(frame
13
+ ? {
14
+ scope: frame.cp.state.scope,
15
+ sessionId: frame.request.session?.id,
16
+ streamId: frame.stream.id,
17
+ threadId: frame.cp.threadId,
18
+ sequence: ++frame.sequence,
19
+ timestamp: execution.clock.now(),
20
+ }
21
+ : {}),
22
+ };
23
+ }
24
+ export async function hook(execution, frame, definition, payload, toolExecutionId) {
25
+ const cursor = frame.cp.execution?.handlerCursor?.eventId === definition
26
+ ? frame.cp.execution.handlerCursor
27
+ : null;
28
+ const decisions = cursor?.decisions.slice() ?? [];
29
+ const kind = execution.runtime.hooks.kind(definition);
30
+ const mutable = kind === "transformation" || kind === "decision";
31
+ const context = {
32
+ ...eventContext(execution, frame),
33
+ ...(frame.request.session ? { session: frame.request.session } : {}),
34
+ ...(frame.request.thread ? { thread: frame.request.thread } : {}),
35
+ ...(mutable
36
+ ? {
37
+ ...execution.services(frame, toolExecutionId),
38
+ state: frame.state,
39
+ }
40
+ : {}),
41
+ signal: frame.sink.controller.signal,
42
+ context: frame.request.kind === "input" ? frame.request.context : undefined,
43
+ turnId: frame.cp.execution?.turnId,
44
+ streamId: frame.stream.id,
45
+ threadId: frame.cp.threadId,
46
+ startIndex: cursor?.nextIndex ?? 0,
47
+ initialDecision: decisions.at(-1) ?? undefined,
48
+ allowedHandlerIds: frame.cp.execution?.registryManifest
49
+ .filter((r) => r.kind === "handler")
50
+ .map((r) => r.id),
51
+ suspend: kind === "decision"
52
+ ? (def, data) => {
53
+ phaseForEvent(definition);
54
+ const binding = frame.registry.find("interruption", def.id);
55
+ if (!binding || binding.definition.version !== def.version)
56
+ fail("ResumeIncompatible", "Interruption definition is not registered");
57
+ return {
58
+ decision: "suspend",
59
+ definitionId: def.id,
60
+ definitionVersion: def.version,
61
+ pluginId: binding.pluginId,
62
+ payload: immutable(def.payload ? def.payload.parse(data) : data),
63
+ };
64
+ }
65
+ : undefined,
66
+ onDecision: execution.runtime.hooks.kind(definition) === "decision"
67
+ ? async (entry) => {
68
+ const value = entry.decision;
69
+ decisions.push(value ? immutable(value) : null);
70
+ frame.cp.execution.handlerCursor = {
71
+ eventId: definition,
72
+ handlerId: entry.handlerId,
73
+ nextIndex: entry.index + 1,
74
+ payload: immutable(cursor?.payload ?? payload),
75
+ decisions,
76
+ };
77
+ if (value?.decision !== "suspend")
78
+ await execution.commit(frame, "ExecutionTransition");
79
+ }
80
+ : undefined,
81
+ };
82
+ const value = await execution.runtime.hooks.dispatch(definition, payload, context, frame.registry);
83
+ if (execution.runtime.hooks.kind(definition) === "decision") {
84
+ if (value?.decision === "suspend")
85
+ await suspend(execution, frame, value, toolExecutionId);
86
+ if (frame.cp.execution?.handlerCursor?.eventId === definition)
87
+ frame.cp.execution.handlerCursor = null;
88
+ }
89
+ if (execution.runtime.hooks.kind(definition) === "notification")
90
+ frame.sink.emit(definition, payload, context);
91
+ return value;
92
+ }
93
+ async function suspend(execution, frame, decision, toolExecutionId) {
94
+ if (decision.decision !== "suspend")
95
+ fail("InvalidTransition", "Expected suspension decision");
96
+ const binding = frame.registry.find("interruption", decision.definitionId);
97
+ const position = frame.cp.execution, id = execution.ids.next("interrupt");
98
+ const tool = toolExecutionId
99
+ ? execution
100
+ .rows(frame, "tool_executions")
101
+ .find((t) => t.id === toolExecutionId)
102
+ : null;
103
+ const interrupt = {
104
+ id,
105
+ threadId: frame.cp.threadId,
106
+ streamId: frame.stream.id,
107
+ checkpointId: frame.cp.id,
108
+ definitionId: decision.definitionId,
109
+ definitionVersion: decision.definitionVersion,
110
+ pluginId: decision.pluginId,
111
+ payload: decision.payload,
112
+ responseSchema: binding.definition.response.jsonSchema,
113
+ actionRef: tool
114
+ ? {
115
+ toolExecutionId: tool.id,
116
+ toolName: tool.toolName,
117
+ argumentsDigest: canonicalJson(tool.arguments),
118
+ }
119
+ : null,
120
+ status: "pending",
121
+ response: null,
122
+ resolvedDecision: null,
123
+ createdAt: execution.clock.now(),
124
+ resolvedAt: null,
125
+ revision: frame.cp.revision,
126
+ };
127
+ execution.put(frame, "interrupts", interrupt);
128
+ position.pendingInterruptId = id;
129
+ position.phase = "Suspended";
130
+ frame.stream.status = "suspended";
131
+ await execution.commit(frame, "Suspended");
132
+ await execution.hook(frame, streamHooks.suspended, {
133
+ checkpointId: frame.cp.id,
134
+ interrupt,
135
+ });
136
+ throw new Suspension();
137
+ }
138
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/engine/hooks.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type JsonValue } from "../json.js";
2
2
  import type { InputDefinition } from "../tools/input-definition.js";
3
- import type { ControlDecision } from "../events/catalog.js";
3
+ import type { ControlDecision } from "../events/type.js";
4
4
  import type { PluginStateAccess } from "../state/plugin-state.js";
5
5
  import type { ExecutionHookContext } from "./tracked-effects.js";
6
6
  export interface InterruptionDefinition<R = any, D extends ControlDecision = ControlDecision, P extends JsonValue = JsonValue> {
@@ -2,7 +2,7 @@ import type { StorageBackend } from "../state/storage-ports.js";
2
2
  import type { PluginStateSnapshot } from "../state/schema.js";
3
3
  import type { ModelAttemptRecord } from "../trace/records.js";
4
4
  import { type ChildReservation } from "./tracked-effects.js";
5
- import type { ExecutionOrigin } from "../agent.js";
5
+ import type { ExecutionOrigin } from "./frame.js";
6
6
  export declare function reservations(states: readonly PluginStateSnapshot[], streamId: string): ChildReservation[];
7
7
  export declare function resolveChildAdmission(backend: StorageBackend, origin: ExecutionOrigin, threadId: string): Promise<string>;
8
8
  export declare function summarizeStreamUsage(backend: StorageBackend, streamId: string, local?: {