stitchkit 0.68.4 → 0.68.6

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 (32) hide show
  1. package/README.md +4 -1
  2. package/dist/agent-runtime/coordinator.d.ts +5 -2
  3. package/dist/agent-runtime/coordinator.d.ts.map +1 -1
  4. package/dist/agent-runtime/event-schema.d.ts +1349 -0
  5. package/dist/agent-runtime/event-schema.d.ts.map +1 -0
  6. package/dist/agent-runtime/events.d.ts +2 -1347
  7. package/dist/agent-runtime/events.d.ts.map +1 -1
  8. package/dist/agent-runtime/run-execution.d.ts +2 -0
  9. package/dist/agent-runtime/run-execution.d.ts.map +1 -1
  10. package/dist/agent-runtime/runtime.d.ts +2 -0
  11. package/dist/agent-runtime/runtime.d.ts.map +1 -1
  12. package/dist/agent-runtime/schemas.d.ts +12 -0
  13. package/dist/agent-runtime/schemas.d.ts.map +1 -1
  14. package/dist/agent-runtime/store-driver.d.ts +12 -0
  15. package/dist/agent-runtime/store-driver.d.ts.map +1 -1
  16. package/dist/agent-runtime/store.d.ts +37 -6
  17. package/dist/agent-runtime/store.d.ts.map +1 -1
  18. package/dist/agent-runtime/terminal-commit.d.ts +2 -0
  19. package/dist/agent-runtime/terminal-commit.d.ts.map +1 -1
  20. package/dist/agent-runtime-browser.d.ts +4 -0
  21. package/dist/agent-runtime-browser.d.ts.map +1 -0
  22. package/dist/agent-runtime-browser.js +424 -0
  23. package/dist/agent-runtime.js +169 -93
  24. package/dist/browser/cancellation.d.ts.map +1 -1
  25. package/dist/{index-thcy3w8c.js → index-n34x0q5e.js} +6 -6
  26. package/dist/{index-fhsmrzj7.js → index-ysphyxax.js} +4 -1
  27. package/dist/index.js +6 -6
  28. package/dist/remote.js +1 -1
  29. package/dist/testing/agent-store-conformance.d.ts.map +1 -1
  30. package/dist/testing.js +117 -6
  31. package/llms-full.txt +71 -10
  32. package/package.json +6 -2
@@ -0,0 +1,424 @@
1
+ // src/agent-runtime/event-schema.ts
2
+ import { z as z2 } from "zod";
3
+
4
+ // src/agent-runtime/schemas.ts
5
+ import { z } from "zod";
6
+ var AgentRecordIdSchema = z.string().min(1);
7
+ var AgentRecordVersionSchema = z.int().nonnegative();
8
+ var AgentTimestampSchema = z.iso.datetime({ offset: true });
9
+ var AgentJsonObjectSchema = z.record(z.string(), z.json());
10
+ var AgentProviderEnvelopeSchema = z.object({
11
+ schemaVersion: z.int().positive(),
12
+ provider: z.string().min(1),
13
+ data: AgentJsonObjectSchema
14
+ });
15
+ var AgentTextPartSchema = z.object({
16
+ type: z.literal("text"),
17
+ text: z.string()
18
+ });
19
+ var AgentReasoningPartSchema = z.object({
20
+ type: z.literal("reasoning"),
21
+ text: z.string(),
22
+ provider: AgentProviderEnvelopeSchema.optional()
23
+ });
24
+ var AgentFilePartSchema = z.object({
25
+ type: z.literal("file"),
26
+ mediaType: z.string().min(1),
27
+ reference: z.string().min(1),
28
+ filename: z.string().min(1).optional()
29
+ });
30
+ var AgentSourcePartSchema = z.object({
31
+ type: z.literal("source"),
32
+ sourceId: z.string().min(1),
33
+ url: z.url().optional(),
34
+ title: z.string().optional()
35
+ });
36
+ var AgentToolCallPartSchema = z.object({
37
+ type: z.literal("tool-call"),
38
+ callId: z.string().min(1),
39
+ toolName: z.string().min(1),
40
+ input: z.json(),
41
+ provider: AgentProviderEnvelopeSchema.optional()
42
+ });
43
+ var AgentToolResultPartSchema = z.object({
44
+ type: z.literal("tool-result"),
45
+ callId: z.string().min(1),
46
+ toolName: z.string().min(1),
47
+ outcome: z.enum(["success", "error", "interrupted"]),
48
+ output: z.json().optional()
49
+ });
50
+ var AgentOpaquePartSchema = z.object({
51
+ type: z.literal("provider"),
52
+ envelope: AgentProviderEnvelopeSchema
53
+ });
54
+ var AgentControlPartSchema = z.object({
55
+ type: z.literal("control"),
56
+ reason: z.enum(["run-interrupted", "stale-run"])
57
+ });
58
+ var AgentMessagePartSchema = z.discriminatedUnion("type", [
59
+ AgentTextPartSchema,
60
+ AgentReasoningPartSchema,
61
+ AgentFilePartSchema,
62
+ AgentSourcePartSchema,
63
+ AgentToolCallPartSchema,
64
+ AgentToolResultPartSchema,
65
+ AgentOpaquePartSchema,
66
+ AgentControlPartSchema
67
+ ]);
68
+ var AgentMessageRoleSchema = z.enum(["user", "assistant", "system", "summary"]);
69
+ var AgentMessageStatusSchema = z.enum([
70
+ "committed",
71
+ "streaming",
72
+ "completed",
73
+ "interrupted",
74
+ "superseded",
75
+ "failed"
76
+ ]);
77
+ var AgentMessageSchema = z.object({
78
+ schemaVersion: z.literal(1),
79
+ id: AgentRecordIdSchema,
80
+ conversationId: AgentRecordIdSchema,
81
+ runId: AgentRecordIdSchema.optional(),
82
+ role: AgentMessageRoleSchema,
83
+ status: AgentMessageStatusSchema,
84
+ parts: z.array(AgentMessagePartSchema),
85
+ metadata: AgentJsonObjectSchema.optional(),
86
+ createdAt: AgentTimestampSchema,
87
+ updatedAt: AgentTimestampSchema
88
+ });
89
+ var AgentAssistantPlaceholderSchema = z.object({
90
+ schemaVersion: z.literal(1),
91
+ id: AgentRecordIdSchema,
92
+ conversationId: AgentRecordIdSchema,
93
+ runId: AgentRecordIdSchema,
94
+ status: z.literal("pending"),
95
+ createdAt: AgentTimestampSchema,
96
+ updatedAt: AgentTimestampSchema
97
+ });
98
+ var AgentRunStateSchema = z.enum([
99
+ "queued",
100
+ "running",
101
+ "interrupt_requested",
102
+ "completed",
103
+ "interrupted",
104
+ "superseded",
105
+ "failed",
106
+ "cancelled",
107
+ "abandoned"
108
+ ]);
109
+ var AgentRunQueuePrioritySchema = z.enum(["interrupt-next"]);
110
+ var AgentTerminalReasonSchema = z.enum([
111
+ "success",
112
+ "policy_stop",
113
+ "provider_stop",
114
+ "interrupted",
115
+ "superseded",
116
+ "cancelled",
117
+ "timeout",
118
+ "shutdown",
119
+ "provider_failure",
120
+ "context_overflow",
121
+ "absorbed",
122
+ "abandoned"
123
+ ]);
124
+ function runStateForTerminalReason(reason) {
125
+ if (reason === "success" || reason === "policy_stop" || reason === "provider_stop") {
126
+ return "completed";
127
+ }
128
+ if (reason === "interrupted")
129
+ return "interrupted";
130
+ if (reason === "superseded" || reason === "absorbed")
131
+ return "superseded";
132
+ if (reason === "cancelled" || reason === "shutdown" || reason === "timeout") {
133
+ return "cancelled";
134
+ }
135
+ if (reason === "abandoned")
136
+ return "abandoned";
137
+ return "failed";
138
+ }
139
+ var AgentProvenanceSchema = z.enum([
140
+ "provider-reported",
141
+ "measured",
142
+ "computed",
143
+ "estimated",
144
+ "unavailable"
145
+ ]);
146
+ var AgentUsageValueSchema = z.object({
147
+ value: z.int().nonnegative().optional(),
148
+ provenance: AgentProvenanceSchema.extract([
149
+ "provider-reported",
150
+ "computed",
151
+ "estimated",
152
+ "unavailable"
153
+ ])
154
+ });
155
+ var AgentCostValueSchema = z.object({
156
+ value: z.number().nonnegative().optional(),
157
+ currency: z.string().length(3).optional(),
158
+ provenance: AgentProvenanceSchema.extract([
159
+ "provider-reported",
160
+ "computed",
161
+ "estimated",
162
+ "unavailable"
163
+ ])
164
+ });
165
+ var AgentUsageSchema = z.object({
166
+ inputTokens: AgentUsageValueSchema,
167
+ outputTokens: AgentUsageValueSchema,
168
+ reasoningTokens: AgentUsageValueSchema.optional(),
169
+ cacheReadTokens: AgentUsageValueSchema.optional(),
170
+ cacheWriteTokens: AgentUsageValueSchema.optional(),
171
+ cost: AgentCostValueSchema.optional()
172
+ });
173
+ var AgentRunFieldsSchema = z.object({
174
+ schemaVersion: z.literal(1),
175
+ id: AgentRecordIdSchema,
176
+ conversationId: AgentRecordIdSchema,
177
+ inputMessageIds: z.array(AgentRecordIdSchema).min(1),
178
+ assistantMessageId: AgentRecordIdSchema,
179
+ state: AgentRunStateSchema,
180
+ revision: AgentRecordVersionSchema,
181
+ queuePriority: AgentRunQueuePrioritySchema.optional(),
182
+ executionSequence: AgentRecordVersionSchema.optional(),
183
+ ownerId: z.string().min(1).optional(),
184
+ fencingToken: AgentRecordVersionSchema.optional(),
185
+ terminalReason: AgentTerminalReasonSchema.optional(),
186
+ terminalPolicyName: z.string().min(1).optional(),
187
+ absorbedIntoRunId: AgentRecordIdSchema.optional(),
188
+ usage: AgentUsageSchema.optional(),
189
+ createdAt: AgentTimestampSchema,
190
+ updatedAt: AgentTimestampSchema
191
+ });
192
+ var AgentRunSchema = AgentRunFieldsSchema.superRefine((run, ctx) => {
193
+ if (run.terminalReason !== "absorbed" && run.absorbedIntoRunId !== undefined) {
194
+ ctx.addIssue({
195
+ code: "custom",
196
+ path: ["absorbedIntoRunId"],
197
+ message: "Only an absorbed run names the run that answered it"
198
+ });
199
+ }
200
+ if (run.terminalReason === undefined) {
201
+ if (TERMINAL_RUN_STATES.has(run.state)) {
202
+ ctx.addIssue({
203
+ code: "custom",
204
+ path: ["terminalReason"],
205
+ message: `A run in terminal state "${run.state}" must say why it ended`
206
+ });
207
+ }
208
+ return;
209
+ }
210
+ const expected = runStateForTerminalReason(run.terminalReason);
211
+ if (run.state !== expected) {
212
+ ctx.addIssue({
213
+ code: "custom",
214
+ path: ["state"],
215
+ message: `Terminal reason "${run.terminalReason}" ends a run in state "${expected}", not "${run.state}"`
216
+ });
217
+ }
218
+ if (run.terminalReason === "policy_stop" && run.terminalPolicyName === undefined) {
219
+ ctx.addIssue({
220
+ code: "custom",
221
+ path: ["terminalPolicyName"],
222
+ message: "A policy stop names the policy that stopped the run"
223
+ });
224
+ }
225
+ if (run.terminalReason === "absorbed" && run.absorbedIntoRunId === undefined) {
226
+ ctx.addIssue({
227
+ code: "custom",
228
+ path: ["absorbedIntoRunId"],
229
+ message: "An absorbed run names the run that answered its input"
230
+ });
231
+ }
232
+ if (run.absorbedIntoRunId === run.id) {
233
+ ctx.addIssue({
234
+ code: "custom",
235
+ path: ["absorbedIntoRunId"],
236
+ message: "A run cannot absorb itself"
237
+ });
238
+ }
239
+ });
240
+ var TERMINAL_RUN_STATES = new Set([
241
+ "completed",
242
+ "interrupted",
243
+ "superseded",
244
+ "cancelled",
245
+ "abandoned",
246
+ "failed"
247
+ ]);
248
+ var AgentSnapshotSchema = z.object({
249
+ schemaVersion: z.literal(1),
250
+ conversationId: AgentRecordIdSchema,
251
+ version: AgentRecordVersionSchema,
252
+ messages: z.array(AgentMessageSchema),
253
+ runs: z.array(AgentRunSchema)
254
+ });
255
+ var AgentRunMetricsSchema = z.object({
256
+ partial: z.boolean(),
257
+ usage: AgentUsageSchema,
258
+ durationMs: z.number().nonnegative().optional(),
259
+ ttftMs: z.number().nonnegative().optional()
260
+ });
261
+
262
+ // src/agent-runtime/event-schema.ts
263
+ var AgentAdmissionEventSchema = z2.object({
264
+ type: z2.literal("admission"),
265
+ eventId: AgentRecordIdSchema,
266
+ conversationId: AgentRecordIdSchema,
267
+ runId: AgentRecordIdSchema,
268
+ snapshotVersion: AgentRecordVersionSchema,
269
+ input: AgentMessageSchema,
270
+ run: AgentRunSchema,
271
+ assistant: z2.union([AgentAssistantPlaceholderSchema, AgentMessageSchema]),
272
+ emittedAt: AgentTimestampSchema
273
+ });
274
+ var EventIdentitySchema = z2.object({
275
+ conversationId: AgentRecordIdSchema,
276
+ runId: AgentRecordIdSchema,
277
+ emittedAt: AgentTimestampSchema
278
+ });
279
+ var AgentTransientDeltaEventSchema = EventIdentitySchema.extend({
280
+ type: z2.literal("assistant-delta"),
281
+ runtimeEpoch: z2.string().min(1),
282
+ sequence: z2.int().nonnegative(),
283
+ textDelta: z2.string()
284
+ });
285
+ var AgentTransientReasoningIdentitySchema = EventIdentitySchema.extend({
286
+ runtimeEpoch: z2.string().min(1),
287
+ sequence: z2.int().nonnegative(),
288
+ provider: AgentProviderEnvelopeSchema.optional()
289
+ });
290
+ var AgentReasoningStartEventSchema = AgentTransientReasoningIdentitySchema.extend({
291
+ type: z2.literal("reasoning-start")
292
+ });
293
+ var AgentReasoningDeltaEventSchema = AgentTransientReasoningIdentitySchema.extend({
294
+ type: z2.literal("reasoning-delta"),
295
+ textDelta: z2.string()
296
+ });
297
+ var AgentReasoningEndEventSchema = AgentTransientReasoningIdentitySchema.extend({
298
+ type: z2.literal("reasoning-end")
299
+ });
300
+ var AgentCheckpointEventSchema = EventIdentitySchema.extend({
301
+ type: z2.literal("assistant-checkpoint"),
302
+ eventId: AgentRecordIdSchema,
303
+ snapshotVersion: AgentRecordVersionSchema,
304
+ message: AgentMessageSchema,
305
+ metrics: AgentRunMetricsSchema.optional()
306
+ });
307
+ var AgentRunStateEventSchema = EventIdentitySchema.extend({
308
+ type: z2.literal("run-state"),
309
+ eventId: AgentRecordIdSchema,
310
+ snapshotVersion: AgentRecordVersionSchema,
311
+ state: AgentRunStateSchema
312
+ });
313
+ var AgentToolStatusEventSchema = EventIdentitySchema.extend({
314
+ type: z2.literal("tool-status"),
315
+ runtimeEpoch: z2.string().min(1),
316
+ sequence: z2.int().nonnegative(),
317
+ callId: AgentRecordIdSchema,
318
+ toolName: z2.string().min(1),
319
+ status: z2.enum(["started", "completed", "failed", "interrupted"]),
320
+ input: z2.json().optional(),
321
+ output: z2.json().optional()
322
+ });
323
+ var AgentTerminalEventSchema = EventIdentitySchema.extend({
324
+ type: z2.literal("terminal"),
325
+ eventId: AgentRecordIdSchema,
326
+ snapshotVersion: AgentRecordVersionSchema,
327
+ reason: AgentTerminalReasonSchema,
328
+ policyName: z2.string().min(1).optional(),
329
+ message: AgentMessageSchema,
330
+ metrics: AgentRunMetricsSchema.optional()
331
+ });
332
+ var AgentRuntimeEventSchema = z2.discriminatedUnion("type", [
333
+ AgentAdmissionEventSchema,
334
+ AgentTransientDeltaEventSchema,
335
+ AgentReasoningStartEventSchema,
336
+ AgentReasoningDeltaEventSchema,
337
+ AgentReasoningEndEventSchema,
338
+ AgentCheckpointEventSchema,
339
+ AgentRunStateEventSchema,
340
+ AgentToolStatusEventSchema,
341
+ AgentTerminalEventSchema
342
+ ]);
343
+ var AgentRuntimeEventCursorSchema = z2.object({
344
+ snapshotVersion: AgentRecordVersionSchema.optional(),
345
+ durableEventIds: z2.array(AgentRecordIdSchema).optional(),
346
+ runtimeEpoch: z2.string().min(1).optional(),
347
+ sequence: z2.int().nonnegative().optional()
348
+ });
349
+ function isDurableEvent(event) {
350
+ return event.type === "admission" || event.type === "assistant-checkpoint" || event.type === "run-state" || event.type === "terminal";
351
+ }
352
+ function advanceAgentRuntimeEventCursor(rawCursor, event) {
353
+ const cursor = AgentRuntimeEventCursorSchema.parse(rawCursor);
354
+ if (isDurableEvent(event)) {
355
+ const previous = cursor.snapshotVersion;
356
+ const durableEventIds = previous === event.snapshotVersion ? cursor.durableEventIds ?? [] : [];
357
+ if (previous !== undefined && event.snapshotVersion < previous || durableEventIds.includes(event.eventId)) {
358
+ return { status: "duplicate", cursor };
359
+ }
360
+ return {
361
+ status: "accepted",
362
+ cursor: {
363
+ ...cursor,
364
+ snapshotVersion: event.snapshotVersion,
365
+ durableEventIds: [...durableEventIds, event.eventId]
366
+ }
367
+ };
368
+ }
369
+ const previousSequence = cursor.runtimeEpoch === event.runtimeEpoch ? cursor.sequence : undefined;
370
+ if (previousSequence !== undefined && event.sequence <= previousSequence) {
371
+ return { status: "duplicate", cursor };
372
+ }
373
+ return {
374
+ status: previousSequence !== undefined && event.sequence > previousSequence + 1 ? "gap" : "accepted",
375
+ cursor: { ...cursor, runtimeEpoch: event.runtimeEpoch, sequence: event.sequence }
376
+ };
377
+ }
378
+ function agentDurableEventId(type, runId, snapshotVersion) {
379
+ return `${runId}:${type}:${snapshotVersion}`;
380
+ }
381
+ export {
382
+ AgentAdmissionEventSchema,
383
+ AgentAssistantPlaceholderSchema,
384
+ AgentCheckpointEventSchema,
385
+ AgentControlPartSchema,
386
+ AgentCostValueSchema,
387
+ AgentFilePartSchema,
388
+ AgentJsonObjectSchema,
389
+ AgentMessagePartSchema,
390
+ AgentMessageRoleSchema,
391
+ AgentMessageSchema,
392
+ AgentMessageStatusSchema,
393
+ AgentOpaquePartSchema,
394
+ AgentProvenanceSchema,
395
+ AgentProviderEnvelopeSchema,
396
+ AgentReasoningDeltaEventSchema,
397
+ AgentReasoningEndEventSchema,
398
+ AgentReasoningPartSchema,
399
+ AgentReasoningStartEventSchema,
400
+ AgentRecordIdSchema,
401
+ AgentRecordVersionSchema,
402
+ AgentRunMetricsSchema,
403
+ AgentRunQueuePrioritySchema,
404
+ AgentRunSchema,
405
+ AgentRunStateEventSchema,
406
+ AgentRunStateSchema,
407
+ AgentRuntimeEventCursorSchema,
408
+ AgentRuntimeEventSchema,
409
+ AgentSnapshotSchema,
410
+ AgentSourcePartSchema,
411
+ AgentTerminalEventSchema,
412
+ AgentTerminalReasonSchema,
413
+ AgentTextPartSchema,
414
+ AgentTimestampSchema,
415
+ AgentToolCallPartSchema,
416
+ AgentToolResultPartSchema,
417
+ AgentToolStatusEventSchema,
418
+ AgentTransientDeltaEventSchema,
419
+ AgentUsageSchema,
420
+ AgentUsageValueSchema,
421
+ advanceAgentRuntimeEventCursor,
422
+ agentDurableEventId,
423
+ runStateForTerminalReason
424
+ };