@h-rig/contracts 0.0.6-alpha.7 → 0.0.6-alpha.70

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.
@@ -0,0 +1,1506 @@
1
+ // @bun
2
+ // packages/contracts/src/run-journal.ts
3
+ import { Schema as Schema5 } from "effect";
4
+
5
+ // packages/contracts/src/baseSchemas.ts
6
+ import { Schema } from "effect";
7
+ var TrimmedString = Schema.Trim;
8
+ var TrimmedNonEmptyString = TrimmedString.check(Schema.isNonEmpty());
9
+ var NonNegativeInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));
10
+ var PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
11
+ var IsoDateTime = Schema.String;
12
+ var makeEntityId = (brand) => TrimmedNonEmptyString.pipe(Schema.brand(brand));
13
+ var ThreadId = makeEntityId("ThreadId");
14
+ var ProjectId = makeEntityId("ProjectId");
15
+ var WorkspaceId = makeEntityId("WorkspaceId");
16
+ var GraphId = makeEntityId("GraphId");
17
+ var TaskId = makeEntityId("TaskId");
18
+ var RunId = makeEntityId("RunId");
19
+ var EngineRuntimeId = makeEntityId("EngineRuntimeId");
20
+ var ConversationId = makeEntityId("ConversationId");
21
+ var ActionId = makeEntityId("ActionId");
22
+ var ArtifactId = makeEntityId("ArtifactId");
23
+ var WorktreeId = makeEntityId("WorktreeId");
24
+ var ValidationResultId = makeEntityId("ValidationResultId");
25
+ var ReviewResultId = makeEntityId("ReviewResultId");
26
+ var CommandId = makeEntityId("CommandId");
27
+ var EventId = makeEntityId("EventId");
28
+ var MessageId = makeEntityId("MessageId");
29
+ var TurnId = makeEntityId("TurnId");
30
+ var ProviderItemId = makeEntityId("ProviderItemId");
31
+ var RuntimeSessionId = makeEntityId("RuntimeSessionId");
32
+ var RuntimeItemId = makeEntityId("RuntimeItemId");
33
+ var RuntimeRequestId = makeEntityId("RuntimeRequestId");
34
+ var RuntimeTaskId = makeEntityId("RuntimeTaskId");
35
+ var ApprovalRequestId = makeEntityId("ApprovalRequestId");
36
+ var CheckpointRef = makeEntityId("CheckpointRef");
37
+ var RemoteEndpointId = makeEntityId("RemoteEndpointId");
38
+
39
+ // packages/contracts/src/runtime.ts
40
+ import { Schema as Schema4 } from "effect";
41
+
42
+ // packages/contracts/src/orchestration.ts
43
+ import { Option, Schema as Schema3, SchemaIssue, Struct } from "effect";
44
+
45
+ // packages/contracts/src/model.ts
46
+ import { Schema as Schema2 } from "effect";
47
+ var CODEX_REASONING_EFFORT_OPTIONS = ["xhigh", "high", "medium", "low"];
48
+ var CodexModelOptions = Schema2.Struct({
49
+ reasoningEffort: Schema2.optional(Schema2.Literals(CODEX_REASONING_EFFORT_OPTIONS)),
50
+ fastMode: Schema2.optional(Schema2.Boolean)
51
+ });
52
+ var ClaudeModelOptions = Schema2.Struct({});
53
+ var ProviderModelOptions = Schema2.Struct({
54
+ codex: Schema2.optional(CodexModelOptions),
55
+ claude: Schema2.optional(ClaudeModelOptions)
56
+ });
57
+
58
+ // packages/contracts/src/orchestration.ts
59
+ var ProviderKind = Schema3.Literals(["codex", "claude"]);
60
+ var ProviderApprovalPolicy = Schema3.Literals([
61
+ "untrusted",
62
+ "on-failure",
63
+ "on-request",
64
+ "never"
65
+ ]);
66
+ var ProviderSandboxMode = Schema3.Literals([
67
+ "read-only",
68
+ "workspace-write",
69
+ "danger-full-access"
70
+ ]);
71
+ var ProviderServiceTier = Schema3.Literals(["fast", "flex"]);
72
+ var RuntimeMode = Schema3.Literals(["approval-required", "full-access"]);
73
+ var DEFAULT_RUNTIME_MODE = "full-access";
74
+ var ProviderInteractionMode = Schema3.Literals(["default", "plan"]);
75
+ var DEFAULT_PROVIDER_INTERACTION_MODE = "default";
76
+ var ProviderRequestKind = Schema3.Literals(["command", "file-read", "file-change"]);
77
+ var AssistantDeliveryMode = Schema3.Literals(["buffered", "streaming"]);
78
+ var ProviderApprovalDecision = Schema3.Literals([
79
+ "accept",
80
+ "acceptForSession",
81
+ "decline",
82
+ "cancel"
83
+ ]);
84
+ var ProviderUserInputAnswers = Schema3.Record(Schema3.String, Schema3.Unknown);
85
+ var PROVIDER_SEND_TURN_MAX_IMAGE_BYTES = 10 * 1024 * 1024;
86
+ var PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS = 14000000;
87
+ var CHAT_ATTACHMENT_ID_MAX_CHARS = 128;
88
+ var ChatAttachmentId = TrimmedNonEmptyString.check(Schema3.isMaxLength(CHAT_ATTACHMENT_ID_MAX_CHARS), Schema3.isPattern(/^[a-z0-9_-]+$/i));
89
+ var ChatImageAttachment = Schema3.Struct({
90
+ type: Schema3.Literal("image"),
91
+ id: ChatAttachmentId,
92
+ name: TrimmedNonEmptyString.check(Schema3.isMaxLength(255)),
93
+ mimeType: TrimmedNonEmptyString.check(Schema3.isMaxLength(100), Schema3.isPattern(/^image\//i)),
94
+ sizeBytes: NonNegativeInt.check(Schema3.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_IMAGE_BYTES))
95
+ });
96
+ var UploadChatImageAttachment = Schema3.Struct({
97
+ type: Schema3.Literal("image"),
98
+ name: TrimmedNonEmptyString.check(Schema3.isMaxLength(255)),
99
+ mimeType: TrimmedNonEmptyString.check(Schema3.isMaxLength(100), Schema3.isPattern(/^image\//i)),
100
+ sizeBytes: NonNegativeInt.check(Schema3.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_IMAGE_BYTES)),
101
+ dataUrl: TrimmedNonEmptyString.check(Schema3.isMaxLength(PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS))
102
+ });
103
+ var ChatAttachment = Schema3.Union([ChatImageAttachment]);
104
+ var UploadChatAttachment = Schema3.Union([UploadChatImageAttachment]);
105
+ var ProjectScriptIcon = Schema3.Literals([
106
+ "play",
107
+ "test",
108
+ "lint",
109
+ "configure",
110
+ "build",
111
+ "debug"
112
+ ]);
113
+ var ProjectScript = Schema3.Struct({
114
+ id: TrimmedNonEmptyString,
115
+ name: TrimmedNonEmptyString,
116
+ command: TrimmedNonEmptyString,
117
+ icon: ProjectScriptIcon,
118
+ runOnWorktreeCreate: Schema3.Boolean
119
+ });
120
+ var OrchestrationProject = Schema3.Struct({
121
+ id: ProjectId,
122
+ title: TrimmedNonEmptyString,
123
+ workspaceRoot: TrimmedNonEmptyString,
124
+ defaultModel: Schema3.NullOr(TrimmedNonEmptyString),
125
+ scripts: Schema3.Array(ProjectScript),
126
+ createdAt: IsoDateTime,
127
+ updatedAt: IsoDateTime,
128
+ deletedAt: Schema3.NullOr(IsoDateTime)
129
+ });
130
+ var OrchestrationMessageRole = Schema3.Literals(["user", "assistant", "system"]);
131
+ var OrchestrationMessage = Schema3.Struct({
132
+ id: MessageId,
133
+ role: OrchestrationMessageRole,
134
+ text: Schema3.String,
135
+ attachments: Schema3.optional(Schema3.Array(ChatAttachment)),
136
+ turnId: Schema3.NullOr(TurnId),
137
+ streaming: Schema3.Boolean,
138
+ createdAt: IsoDateTime,
139
+ updatedAt: IsoDateTime
140
+ });
141
+ var OrchestrationProposedPlanId = TrimmedNonEmptyString;
142
+ var OrchestrationProposedPlan = Schema3.Struct({
143
+ id: OrchestrationProposedPlanId,
144
+ turnId: Schema3.NullOr(TurnId),
145
+ planMarkdown: TrimmedNonEmptyString,
146
+ createdAt: IsoDateTime,
147
+ updatedAt: IsoDateTime
148
+ });
149
+ var OrchestrationSessionStatus = Schema3.Literals([
150
+ "idle",
151
+ "starting",
152
+ "running",
153
+ "ready",
154
+ "interrupted",
155
+ "stopped",
156
+ "error"
157
+ ]);
158
+ var OrchestrationSession = Schema3.Struct({
159
+ threadId: ThreadId,
160
+ status: OrchestrationSessionStatus,
161
+ providerName: Schema3.NullOr(TrimmedNonEmptyString),
162
+ runtimeMode: RuntimeMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_RUNTIME_MODE)),
163
+ activeTurnId: Schema3.NullOr(TurnId),
164
+ lastError: Schema3.NullOr(TrimmedNonEmptyString),
165
+ updatedAt: IsoDateTime
166
+ });
167
+ var OrchestrationCheckpointFile = Schema3.Struct({
168
+ path: TrimmedNonEmptyString,
169
+ kind: TrimmedNonEmptyString,
170
+ additions: NonNegativeInt,
171
+ deletions: NonNegativeInt
172
+ });
173
+ var OrchestrationCheckpointStatus = Schema3.Literals(["ready", "missing", "error"]);
174
+ var OrchestrationCheckpointSummary = Schema3.Struct({
175
+ turnId: TurnId,
176
+ checkpointTurnCount: NonNegativeInt,
177
+ checkpointRef: CheckpointRef,
178
+ status: OrchestrationCheckpointStatus,
179
+ files: Schema3.Array(OrchestrationCheckpointFile),
180
+ assistantMessageId: Schema3.NullOr(MessageId),
181
+ completedAt: IsoDateTime
182
+ });
183
+ var OrchestrationThreadActivityTone = Schema3.Literals([
184
+ "info",
185
+ "tool",
186
+ "approval",
187
+ "error"
188
+ ]);
189
+ var OrchestrationThreadActivity = Schema3.Struct({
190
+ id: EventId,
191
+ tone: OrchestrationThreadActivityTone,
192
+ kind: TrimmedNonEmptyString,
193
+ summary: TrimmedNonEmptyString,
194
+ payload: Schema3.Unknown,
195
+ turnId: Schema3.NullOr(TurnId),
196
+ sequence: Schema3.optional(NonNegativeInt),
197
+ createdAt: IsoDateTime
198
+ });
199
+ var OrchestrationLatestTurnState = Schema3.Literals([
200
+ "running",
201
+ "interrupted",
202
+ "completed",
203
+ "error"
204
+ ]);
205
+ var OrchestrationLatestTurn = Schema3.Struct({
206
+ turnId: TurnId,
207
+ state: OrchestrationLatestTurnState,
208
+ requestedAt: IsoDateTime,
209
+ startedAt: Schema3.NullOr(IsoDateTime),
210
+ completedAt: Schema3.NullOr(IsoDateTime),
211
+ assistantMessageId: Schema3.NullOr(MessageId)
212
+ });
213
+ var OrchestrationThread = Schema3.Struct({
214
+ id: ThreadId,
215
+ projectId: ProjectId,
216
+ title: TrimmedNonEmptyString,
217
+ model: TrimmedNonEmptyString,
218
+ runtimeMode: RuntimeMode,
219
+ interactionMode: ProviderInteractionMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_PROVIDER_INTERACTION_MODE)),
220
+ branch: Schema3.NullOr(TrimmedNonEmptyString),
221
+ worktreePath: Schema3.NullOr(TrimmedNonEmptyString),
222
+ latestTurn: Schema3.NullOr(OrchestrationLatestTurn),
223
+ createdAt: IsoDateTime,
224
+ updatedAt: IsoDateTime,
225
+ deletedAt: Schema3.NullOr(IsoDateTime),
226
+ messages: Schema3.Array(OrchestrationMessage),
227
+ proposedPlans: Schema3.Array(OrchestrationProposedPlan).pipe(Schema3.withDecodingDefault(() => [])),
228
+ activities: Schema3.Array(OrchestrationThreadActivity),
229
+ checkpoints: Schema3.Array(OrchestrationCheckpointSummary),
230
+ session: Schema3.NullOr(OrchestrationSession)
231
+ });
232
+ var OrchestrationReadModel = Schema3.Struct({
233
+ snapshotSequence: NonNegativeInt,
234
+ projects: Schema3.Array(OrchestrationProject),
235
+ threads: Schema3.Array(OrchestrationThread),
236
+ updatedAt: IsoDateTime
237
+ });
238
+ var ProjectCreateCommand = Schema3.Struct({
239
+ type: Schema3.Literal("project.create"),
240
+ commandId: CommandId,
241
+ projectId: ProjectId,
242
+ title: TrimmedNonEmptyString,
243
+ workspaceRoot: TrimmedNonEmptyString,
244
+ defaultModel: Schema3.optional(TrimmedNonEmptyString),
245
+ createdAt: IsoDateTime
246
+ });
247
+ var ProjectMetaUpdateCommand = Schema3.Struct({
248
+ type: Schema3.Literal("project.meta.update"),
249
+ commandId: CommandId,
250
+ projectId: ProjectId,
251
+ title: Schema3.optional(TrimmedNonEmptyString),
252
+ workspaceRoot: Schema3.optional(TrimmedNonEmptyString),
253
+ defaultModel: Schema3.optional(TrimmedNonEmptyString),
254
+ scripts: Schema3.optional(Schema3.Array(ProjectScript))
255
+ });
256
+ var ProjectDeleteCommand = Schema3.Struct({
257
+ type: Schema3.Literal("project.delete"),
258
+ commandId: CommandId,
259
+ projectId: ProjectId
260
+ });
261
+ var ThreadCreateCommand = Schema3.Struct({
262
+ type: Schema3.Literal("thread.create"),
263
+ commandId: CommandId,
264
+ threadId: ThreadId,
265
+ projectId: ProjectId,
266
+ title: TrimmedNonEmptyString,
267
+ model: TrimmedNonEmptyString,
268
+ runtimeMode: RuntimeMode,
269
+ interactionMode: ProviderInteractionMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_PROVIDER_INTERACTION_MODE)),
270
+ branch: Schema3.NullOr(TrimmedNonEmptyString),
271
+ worktreePath: Schema3.NullOr(TrimmedNonEmptyString),
272
+ createdAt: IsoDateTime
273
+ });
274
+ var ThreadDeleteCommand = Schema3.Struct({
275
+ type: Schema3.Literal("thread.delete"),
276
+ commandId: CommandId,
277
+ threadId: ThreadId
278
+ });
279
+ var ThreadMetaUpdateCommand = Schema3.Struct({
280
+ type: Schema3.Literal("thread.meta.update"),
281
+ commandId: CommandId,
282
+ threadId: ThreadId,
283
+ title: Schema3.optional(TrimmedNonEmptyString),
284
+ model: Schema3.optional(TrimmedNonEmptyString),
285
+ branch: Schema3.optional(Schema3.NullOr(TrimmedNonEmptyString)),
286
+ worktreePath: Schema3.optional(Schema3.NullOr(TrimmedNonEmptyString))
287
+ });
288
+ var ThreadRuntimeModeSetCommand = Schema3.Struct({
289
+ type: Schema3.Literal("thread.runtime-mode.set"),
290
+ commandId: CommandId,
291
+ threadId: ThreadId,
292
+ runtimeMode: RuntimeMode,
293
+ createdAt: IsoDateTime
294
+ });
295
+ var ThreadInteractionModeSetCommand = Schema3.Struct({
296
+ type: Schema3.Literal("thread.interaction-mode.set"),
297
+ commandId: CommandId,
298
+ threadId: ThreadId,
299
+ interactionMode: ProviderInteractionMode,
300
+ createdAt: IsoDateTime
301
+ });
302
+ var ThreadTurnStartCommand = Schema3.Struct({
303
+ type: Schema3.Literal("thread.turn.start"),
304
+ commandId: CommandId,
305
+ threadId: ThreadId,
306
+ message: Schema3.Struct({
307
+ messageId: MessageId,
308
+ role: Schema3.Literal("user"),
309
+ text: Schema3.String,
310
+ attachments: Schema3.Array(ChatAttachment)
311
+ }),
312
+ provider: Schema3.optional(ProviderKind),
313
+ model: Schema3.optional(TrimmedNonEmptyString),
314
+ serviceTier: Schema3.optional(Schema3.NullOr(ProviderServiceTier)),
315
+ modelOptions: Schema3.optional(ProviderModelOptions),
316
+ assistantDeliveryMode: Schema3.optional(AssistantDeliveryMode),
317
+ runtimeMode: RuntimeMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_RUNTIME_MODE)),
318
+ interactionMode: ProviderInteractionMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_PROVIDER_INTERACTION_MODE)),
319
+ createdAt: IsoDateTime
320
+ });
321
+ var ClientThreadTurnStartCommand = Schema3.Struct({
322
+ type: Schema3.Literal("thread.turn.start"),
323
+ commandId: CommandId,
324
+ threadId: ThreadId,
325
+ message: Schema3.Struct({
326
+ messageId: MessageId,
327
+ role: Schema3.Literal("user"),
328
+ text: Schema3.String,
329
+ attachments: Schema3.Array(UploadChatAttachment)
330
+ }),
331
+ provider: Schema3.optional(ProviderKind),
332
+ model: Schema3.optional(TrimmedNonEmptyString),
333
+ serviceTier: Schema3.optional(Schema3.NullOr(ProviderServiceTier)),
334
+ modelOptions: Schema3.optional(ProviderModelOptions),
335
+ assistantDeliveryMode: Schema3.optional(AssistantDeliveryMode),
336
+ runtimeMode: RuntimeMode,
337
+ interactionMode: ProviderInteractionMode,
338
+ createdAt: IsoDateTime
339
+ });
340
+ var ThreadTurnInterruptCommand = Schema3.Struct({
341
+ type: Schema3.Literal("thread.turn.interrupt"),
342
+ commandId: CommandId,
343
+ threadId: ThreadId,
344
+ turnId: Schema3.optional(TurnId),
345
+ createdAt: IsoDateTime
346
+ });
347
+ var ThreadApprovalRespondCommand = Schema3.Struct({
348
+ type: Schema3.Literal("thread.approval.respond"),
349
+ commandId: CommandId,
350
+ threadId: ThreadId,
351
+ requestId: ApprovalRequestId,
352
+ decision: ProviderApprovalDecision,
353
+ createdAt: IsoDateTime
354
+ });
355
+ var ThreadUserInputRespondCommand = Schema3.Struct({
356
+ type: Schema3.Literal("thread.user-input.respond"),
357
+ commandId: CommandId,
358
+ threadId: ThreadId,
359
+ requestId: ApprovalRequestId,
360
+ answers: ProviderUserInputAnswers,
361
+ createdAt: IsoDateTime
362
+ });
363
+ var ThreadCheckpointRevertCommand = Schema3.Struct({
364
+ type: Schema3.Literal("thread.checkpoint.revert"),
365
+ commandId: CommandId,
366
+ threadId: ThreadId,
367
+ turnCount: NonNegativeInt,
368
+ createdAt: IsoDateTime
369
+ });
370
+ var ThreadSessionStopCommand = Schema3.Struct({
371
+ type: Schema3.Literal("thread.session.stop"),
372
+ commandId: CommandId,
373
+ threadId: ThreadId,
374
+ createdAt: IsoDateTime
375
+ });
376
+ var DispatchableClientOrchestrationCommand = Schema3.Union([
377
+ ProjectCreateCommand,
378
+ ProjectMetaUpdateCommand,
379
+ ProjectDeleteCommand,
380
+ ThreadCreateCommand,
381
+ ThreadDeleteCommand,
382
+ ThreadMetaUpdateCommand,
383
+ ThreadRuntimeModeSetCommand,
384
+ ThreadInteractionModeSetCommand,
385
+ ThreadTurnStartCommand,
386
+ ThreadTurnInterruptCommand,
387
+ ThreadApprovalRespondCommand,
388
+ ThreadUserInputRespondCommand,
389
+ ThreadCheckpointRevertCommand,
390
+ ThreadSessionStopCommand
391
+ ]);
392
+ var ClientOrchestrationCommand = Schema3.Union([
393
+ ProjectCreateCommand,
394
+ ProjectMetaUpdateCommand,
395
+ ProjectDeleteCommand,
396
+ ThreadCreateCommand,
397
+ ThreadDeleteCommand,
398
+ ThreadMetaUpdateCommand,
399
+ ThreadRuntimeModeSetCommand,
400
+ ThreadInteractionModeSetCommand,
401
+ ClientThreadTurnStartCommand,
402
+ ThreadTurnInterruptCommand,
403
+ ThreadApprovalRespondCommand,
404
+ ThreadUserInputRespondCommand,
405
+ ThreadCheckpointRevertCommand,
406
+ ThreadSessionStopCommand
407
+ ]);
408
+ var ThreadSessionSetCommand = Schema3.Struct({
409
+ type: Schema3.Literal("thread.session.set"),
410
+ commandId: CommandId,
411
+ threadId: ThreadId,
412
+ session: OrchestrationSession,
413
+ createdAt: IsoDateTime
414
+ });
415
+ var ThreadMessageAssistantDeltaCommand = Schema3.Struct({
416
+ type: Schema3.Literal("thread.message.assistant.delta"),
417
+ commandId: CommandId,
418
+ threadId: ThreadId,
419
+ messageId: MessageId,
420
+ delta: Schema3.String,
421
+ turnId: Schema3.optional(TurnId),
422
+ createdAt: IsoDateTime
423
+ });
424
+ var ThreadMessageAssistantCompleteCommand = Schema3.Struct({
425
+ type: Schema3.Literal("thread.message.assistant.complete"),
426
+ commandId: CommandId,
427
+ threadId: ThreadId,
428
+ messageId: MessageId,
429
+ turnId: Schema3.optional(TurnId),
430
+ createdAt: IsoDateTime
431
+ });
432
+ var ThreadProposedPlanUpsertCommand = Schema3.Struct({
433
+ type: Schema3.Literal("thread.proposed-plan.upsert"),
434
+ commandId: CommandId,
435
+ threadId: ThreadId,
436
+ proposedPlan: OrchestrationProposedPlan,
437
+ createdAt: IsoDateTime
438
+ });
439
+ var ThreadTurnDiffCompleteCommand = Schema3.Struct({
440
+ type: Schema3.Literal("thread.turn.diff.complete"),
441
+ commandId: CommandId,
442
+ threadId: ThreadId,
443
+ turnId: TurnId,
444
+ completedAt: IsoDateTime,
445
+ checkpointRef: CheckpointRef,
446
+ status: OrchestrationCheckpointStatus,
447
+ files: Schema3.Array(OrchestrationCheckpointFile),
448
+ assistantMessageId: Schema3.optional(MessageId),
449
+ checkpointTurnCount: NonNegativeInt,
450
+ createdAt: IsoDateTime
451
+ });
452
+ var ThreadActivityAppendCommand = Schema3.Struct({
453
+ type: Schema3.Literal("thread.activity.append"),
454
+ commandId: CommandId,
455
+ threadId: ThreadId,
456
+ activity: OrchestrationThreadActivity,
457
+ createdAt: IsoDateTime
458
+ });
459
+ var ThreadRevertCompleteCommand = Schema3.Struct({
460
+ type: Schema3.Literal("thread.revert.complete"),
461
+ commandId: CommandId,
462
+ threadId: ThreadId,
463
+ turnCount: NonNegativeInt,
464
+ createdAt: IsoDateTime
465
+ });
466
+ var InternalOrchestrationCommand = Schema3.Union([
467
+ ThreadSessionSetCommand,
468
+ ThreadMessageAssistantDeltaCommand,
469
+ ThreadMessageAssistantCompleteCommand,
470
+ ThreadProposedPlanUpsertCommand,
471
+ ThreadTurnDiffCompleteCommand,
472
+ ThreadActivityAppendCommand,
473
+ ThreadRevertCompleteCommand
474
+ ]);
475
+ var OrchestrationCommand = Schema3.Union([
476
+ DispatchableClientOrchestrationCommand,
477
+ InternalOrchestrationCommand
478
+ ]);
479
+ var OrchestrationEventType = Schema3.Literals([
480
+ "project.created",
481
+ "project.meta-updated",
482
+ "project.deleted",
483
+ "thread.created",
484
+ "thread.deleted",
485
+ "thread.meta-updated",
486
+ "thread.runtime-mode-set",
487
+ "thread.interaction-mode-set",
488
+ "thread.message-sent",
489
+ "thread.turn-start-requested",
490
+ "thread.turn-interrupt-requested",
491
+ "thread.approval-response-requested",
492
+ "thread.user-input-response-requested",
493
+ "thread.checkpoint-revert-requested",
494
+ "thread.reverted",
495
+ "thread.session-stop-requested",
496
+ "thread.session-set",
497
+ "thread.proposed-plan-upserted",
498
+ "thread.turn-diff-completed",
499
+ "thread.activity-appended"
500
+ ]);
501
+ var OrchestrationAggregateKind = Schema3.Literals(["project", "thread"]);
502
+ var OrchestrationActorKind = Schema3.Literals(["client", "server", "provider"]);
503
+ var ProjectCreatedPayload = Schema3.Struct({
504
+ projectId: ProjectId,
505
+ title: TrimmedNonEmptyString,
506
+ workspaceRoot: TrimmedNonEmptyString,
507
+ defaultModel: Schema3.NullOr(TrimmedNonEmptyString),
508
+ scripts: Schema3.Array(ProjectScript),
509
+ createdAt: IsoDateTime,
510
+ updatedAt: IsoDateTime
511
+ });
512
+ var ProjectMetaUpdatedPayload = Schema3.Struct({
513
+ projectId: ProjectId,
514
+ title: Schema3.optional(TrimmedNonEmptyString),
515
+ workspaceRoot: Schema3.optional(TrimmedNonEmptyString),
516
+ defaultModel: Schema3.optional(Schema3.NullOr(TrimmedNonEmptyString)),
517
+ scripts: Schema3.optional(Schema3.Array(ProjectScript)),
518
+ updatedAt: IsoDateTime
519
+ });
520
+ var ProjectDeletedPayload = Schema3.Struct({
521
+ projectId: ProjectId,
522
+ deletedAt: IsoDateTime
523
+ });
524
+ var ThreadCreatedPayload = Schema3.Struct({
525
+ threadId: ThreadId,
526
+ projectId: ProjectId,
527
+ title: TrimmedNonEmptyString,
528
+ model: TrimmedNonEmptyString,
529
+ runtimeMode: RuntimeMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_RUNTIME_MODE)),
530
+ interactionMode: ProviderInteractionMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_PROVIDER_INTERACTION_MODE)),
531
+ branch: Schema3.NullOr(TrimmedNonEmptyString),
532
+ worktreePath: Schema3.NullOr(TrimmedNonEmptyString),
533
+ createdAt: IsoDateTime,
534
+ updatedAt: IsoDateTime
535
+ });
536
+ var ThreadDeletedPayload = Schema3.Struct({
537
+ threadId: ThreadId,
538
+ deletedAt: IsoDateTime
539
+ });
540
+ var ThreadMetaUpdatedPayload = Schema3.Struct({
541
+ threadId: ThreadId,
542
+ title: Schema3.optional(TrimmedNonEmptyString),
543
+ model: Schema3.optional(TrimmedNonEmptyString),
544
+ branch: Schema3.optional(Schema3.NullOr(TrimmedNonEmptyString)),
545
+ worktreePath: Schema3.optional(Schema3.NullOr(TrimmedNonEmptyString)),
546
+ updatedAt: IsoDateTime
547
+ });
548
+ var ThreadRuntimeModeSetPayload = Schema3.Struct({
549
+ threadId: ThreadId,
550
+ runtimeMode: RuntimeMode,
551
+ updatedAt: IsoDateTime
552
+ });
553
+ var ThreadInteractionModeSetPayload = Schema3.Struct({
554
+ threadId: ThreadId,
555
+ interactionMode: ProviderInteractionMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_PROVIDER_INTERACTION_MODE)),
556
+ updatedAt: IsoDateTime
557
+ });
558
+ var ThreadMessageSentPayload = Schema3.Struct({
559
+ threadId: ThreadId,
560
+ messageId: MessageId,
561
+ role: OrchestrationMessageRole,
562
+ text: Schema3.String,
563
+ attachments: Schema3.optional(Schema3.Array(ChatAttachment)),
564
+ turnId: Schema3.NullOr(TurnId),
565
+ streaming: Schema3.Boolean,
566
+ createdAt: IsoDateTime,
567
+ updatedAt: IsoDateTime
568
+ });
569
+ var ThreadTurnStartRequestedPayload = Schema3.Struct({
570
+ threadId: ThreadId,
571
+ messageId: MessageId,
572
+ provider: Schema3.optional(ProviderKind),
573
+ model: Schema3.optional(TrimmedNonEmptyString),
574
+ serviceTier: Schema3.optional(Schema3.NullOr(ProviderServiceTier)),
575
+ modelOptions: Schema3.optional(ProviderModelOptions),
576
+ assistantDeliveryMode: Schema3.optional(AssistantDeliveryMode),
577
+ runtimeMode: RuntimeMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_RUNTIME_MODE)),
578
+ interactionMode: ProviderInteractionMode.pipe(Schema3.withDecodingDefault(() => DEFAULT_PROVIDER_INTERACTION_MODE)),
579
+ createdAt: IsoDateTime
580
+ });
581
+ var ThreadTurnInterruptRequestedPayload = Schema3.Struct({
582
+ threadId: ThreadId,
583
+ turnId: Schema3.optional(TurnId),
584
+ createdAt: IsoDateTime
585
+ });
586
+ var ThreadApprovalResponseRequestedPayload = Schema3.Struct({
587
+ threadId: ThreadId,
588
+ requestId: ApprovalRequestId,
589
+ decision: ProviderApprovalDecision,
590
+ createdAt: IsoDateTime
591
+ });
592
+ var ThreadUserInputResponseRequestedPayload = Schema3.Struct({
593
+ threadId: ThreadId,
594
+ requestId: ApprovalRequestId,
595
+ answers: ProviderUserInputAnswers,
596
+ createdAt: IsoDateTime
597
+ });
598
+ var ThreadCheckpointRevertRequestedPayload = Schema3.Struct({
599
+ threadId: ThreadId,
600
+ turnCount: NonNegativeInt,
601
+ createdAt: IsoDateTime
602
+ });
603
+ var ThreadRevertedPayload = Schema3.Struct({
604
+ threadId: ThreadId,
605
+ turnCount: NonNegativeInt
606
+ });
607
+ var ThreadSessionStopRequestedPayload = Schema3.Struct({
608
+ threadId: ThreadId,
609
+ createdAt: IsoDateTime
610
+ });
611
+ var ThreadSessionSetPayload = Schema3.Struct({
612
+ threadId: ThreadId,
613
+ session: OrchestrationSession
614
+ });
615
+ var ThreadProposedPlanUpsertedPayload = Schema3.Struct({
616
+ threadId: ThreadId,
617
+ proposedPlan: OrchestrationProposedPlan
618
+ });
619
+ var ThreadTurnDiffCompletedPayload = Schema3.Struct({
620
+ threadId: ThreadId,
621
+ turnId: TurnId,
622
+ checkpointTurnCount: NonNegativeInt,
623
+ checkpointRef: CheckpointRef,
624
+ status: OrchestrationCheckpointStatus,
625
+ files: Schema3.Array(OrchestrationCheckpointFile),
626
+ assistantMessageId: Schema3.NullOr(MessageId),
627
+ completedAt: IsoDateTime
628
+ });
629
+ var ThreadActivityAppendedPayload = Schema3.Struct({
630
+ threadId: ThreadId,
631
+ activity: OrchestrationThreadActivity
632
+ });
633
+ var OrchestrationEventMetadata = Schema3.Struct({
634
+ providerTurnId: Schema3.optional(TrimmedNonEmptyString),
635
+ providerItemId: Schema3.optional(ProviderItemId),
636
+ adapterKey: Schema3.optional(TrimmedNonEmptyString),
637
+ requestId: Schema3.optional(ApprovalRequestId),
638
+ ingestedAt: Schema3.optional(IsoDateTime)
639
+ });
640
+ var EventBaseFields = {
641
+ sequence: NonNegativeInt,
642
+ eventId: EventId,
643
+ aggregateKind: OrchestrationAggregateKind,
644
+ aggregateId: Schema3.Union([ProjectId, ThreadId]),
645
+ occurredAt: IsoDateTime,
646
+ commandId: Schema3.NullOr(CommandId),
647
+ causationEventId: Schema3.NullOr(EventId),
648
+ correlationId: Schema3.NullOr(CommandId),
649
+ metadata: OrchestrationEventMetadata
650
+ };
651
+ var PersistedEventBaseFields = {
652
+ sequence: NonNegativeInt,
653
+ eventId: EventId,
654
+ aggregateKind: OrchestrationAggregateKind,
655
+ streamId: Schema3.Union([ProjectId, ThreadId]),
656
+ streamVersion: NonNegativeInt,
657
+ occurredAt: IsoDateTime,
658
+ commandId: Schema3.NullOr(CommandId),
659
+ causationEventId: Schema3.NullOr(EventId),
660
+ correlationId: Schema3.NullOr(CommandId),
661
+ actorKind: OrchestrationActorKind,
662
+ metadata: OrchestrationEventMetadata
663
+ };
664
+ var OrchestrationEvent = Schema3.Union([
665
+ Schema3.Struct({
666
+ ...EventBaseFields,
667
+ type: Schema3.Literal("project.created"),
668
+ payload: ProjectCreatedPayload
669
+ }),
670
+ Schema3.Struct({
671
+ ...EventBaseFields,
672
+ type: Schema3.Literal("project.meta-updated"),
673
+ payload: ProjectMetaUpdatedPayload
674
+ }),
675
+ Schema3.Struct({
676
+ ...EventBaseFields,
677
+ type: Schema3.Literal("project.deleted"),
678
+ payload: ProjectDeletedPayload
679
+ }),
680
+ Schema3.Struct({
681
+ ...EventBaseFields,
682
+ type: Schema3.Literal("thread.created"),
683
+ payload: ThreadCreatedPayload
684
+ }),
685
+ Schema3.Struct({
686
+ ...EventBaseFields,
687
+ type: Schema3.Literal("thread.deleted"),
688
+ payload: ThreadDeletedPayload
689
+ }),
690
+ Schema3.Struct({
691
+ ...EventBaseFields,
692
+ type: Schema3.Literal("thread.meta-updated"),
693
+ payload: ThreadMetaUpdatedPayload
694
+ }),
695
+ Schema3.Struct({
696
+ ...EventBaseFields,
697
+ type: Schema3.Literal("thread.runtime-mode-set"),
698
+ payload: ThreadRuntimeModeSetPayload
699
+ }),
700
+ Schema3.Struct({
701
+ ...EventBaseFields,
702
+ type: Schema3.Literal("thread.interaction-mode-set"),
703
+ payload: ThreadInteractionModeSetPayload
704
+ }),
705
+ Schema3.Struct({
706
+ ...EventBaseFields,
707
+ type: Schema3.Literal("thread.message-sent"),
708
+ payload: ThreadMessageSentPayload
709
+ }),
710
+ Schema3.Struct({
711
+ ...EventBaseFields,
712
+ type: Schema3.Literal("thread.turn-start-requested"),
713
+ payload: ThreadTurnStartRequestedPayload
714
+ }),
715
+ Schema3.Struct({
716
+ ...EventBaseFields,
717
+ type: Schema3.Literal("thread.turn-interrupt-requested"),
718
+ payload: ThreadTurnInterruptRequestedPayload
719
+ }),
720
+ Schema3.Struct({
721
+ ...EventBaseFields,
722
+ type: Schema3.Literal("thread.approval-response-requested"),
723
+ payload: ThreadApprovalResponseRequestedPayload
724
+ }),
725
+ Schema3.Struct({
726
+ ...EventBaseFields,
727
+ type: Schema3.Literal("thread.user-input-response-requested"),
728
+ payload: ThreadUserInputResponseRequestedPayload
729
+ }),
730
+ Schema3.Struct({
731
+ ...EventBaseFields,
732
+ type: Schema3.Literal("thread.checkpoint-revert-requested"),
733
+ payload: ThreadCheckpointRevertRequestedPayload
734
+ }),
735
+ Schema3.Struct({
736
+ ...EventBaseFields,
737
+ type: Schema3.Literal("thread.reverted"),
738
+ payload: ThreadRevertedPayload
739
+ }),
740
+ Schema3.Struct({
741
+ ...EventBaseFields,
742
+ type: Schema3.Literal("thread.session-stop-requested"),
743
+ payload: ThreadSessionStopRequestedPayload
744
+ }),
745
+ Schema3.Struct({
746
+ ...EventBaseFields,
747
+ type: Schema3.Literal("thread.session-set"),
748
+ payload: ThreadSessionSetPayload
749
+ }),
750
+ Schema3.Struct({
751
+ ...EventBaseFields,
752
+ type: Schema3.Literal("thread.proposed-plan-upserted"),
753
+ payload: ThreadProposedPlanUpsertedPayload
754
+ }),
755
+ Schema3.Struct({
756
+ ...EventBaseFields,
757
+ type: Schema3.Literal("thread.turn-diff-completed"),
758
+ payload: ThreadTurnDiffCompletedPayload
759
+ }),
760
+ Schema3.Struct({
761
+ ...EventBaseFields,
762
+ type: Schema3.Literal("thread.activity-appended"),
763
+ payload: ThreadActivityAppendedPayload
764
+ })
765
+ ]);
766
+ var OrchestrationPersistedEvent = Schema3.Union([
767
+ Schema3.Struct({
768
+ ...PersistedEventBaseFields,
769
+ eventType: Schema3.Literal("project.created"),
770
+ payload: ProjectCreatedPayload
771
+ }),
772
+ Schema3.Struct({
773
+ ...PersistedEventBaseFields,
774
+ eventType: Schema3.Literal("project.meta-updated"),
775
+ payload: ProjectMetaUpdatedPayload
776
+ }),
777
+ Schema3.Struct({
778
+ ...PersistedEventBaseFields,
779
+ eventType: Schema3.Literal("project.deleted"),
780
+ payload: ProjectDeletedPayload
781
+ }),
782
+ Schema3.Struct({
783
+ ...PersistedEventBaseFields,
784
+ eventType: Schema3.Literal("thread.created"),
785
+ payload: ThreadCreatedPayload
786
+ }),
787
+ Schema3.Struct({
788
+ ...PersistedEventBaseFields,
789
+ eventType: Schema3.Literal("thread.deleted"),
790
+ payload: ThreadDeletedPayload
791
+ }),
792
+ Schema3.Struct({
793
+ ...PersistedEventBaseFields,
794
+ eventType: Schema3.Literal("thread.meta-updated"),
795
+ payload: ThreadMetaUpdatedPayload
796
+ }),
797
+ Schema3.Struct({
798
+ ...PersistedEventBaseFields,
799
+ eventType: Schema3.Literal("thread.runtime-mode-set"),
800
+ payload: ThreadRuntimeModeSetPayload
801
+ }),
802
+ Schema3.Struct({
803
+ ...PersistedEventBaseFields,
804
+ eventType: Schema3.Literal("thread.interaction-mode-set"),
805
+ payload: ThreadInteractionModeSetPayload
806
+ }),
807
+ Schema3.Struct({
808
+ ...PersistedEventBaseFields,
809
+ eventType: Schema3.Literal("thread.message-sent"),
810
+ payload: ThreadMessageSentPayload
811
+ }),
812
+ Schema3.Struct({
813
+ ...PersistedEventBaseFields,
814
+ eventType: Schema3.Literal("thread.turn-start-requested"),
815
+ payload: ThreadTurnStartRequestedPayload
816
+ }),
817
+ Schema3.Struct({
818
+ ...PersistedEventBaseFields,
819
+ eventType: Schema3.Literal("thread.turn-interrupt-requested"),
820
+ payload: ThreadTurnInterruptRequestedPayload
821
+ }),
822
+ Schema3.Struct({
823
+ ...PersistedEventBaseFields,
824
+ eventType: Schema3.Literal("thread.approval-response-requested"),
825
+ payload: ThreadApprovalResponseRequestedPayload
826
+ }),
827
+ Schema3.Struct({
828
+ ...PersistedEventBaseFields,
829
+ eventType: Schema3.Literal("thread.user-input-response-requested"),
830
+ payload: ThreadUserInputResponseRequestedPayload
831
+ }),
832
+ Schema3.Struct({
833
+ ...PersistedEventBaseFields,
834
+ eventType: Schema3.Literal("thread.checkpoint-revert-requested"),
835
+ payload: ThreadCheckpointRevertRequestedPayload
836
+ }),
837
+ Schema3.Struct({
838
+ ...PersistedEventBaseFields,
839
+ eventType: Schema3.Literal("thread.reverted"),
840
+ payload: ThreadRevertedPayload
841
+ }),
842
+ Schema3.Struct({
843
+ ...PersistedEventBaseFields,
844
+ eventType: Schema3.Literal("thread.session-stop-requested"),
845
+ payload: ThreadSessionStopRequestedPayload
846
+ }),
847
+ Schema3.Struct({
848
+ ...PersistedEventBaseFields,
849
+ eventType: Schema3.Literal("thread.session-set"),
850
+ payload: ThreadSessionSetPayload
851
+ }),
852
+ Schema3.Struct({
853
+ ...PersistedEventBaseFields,
854
+ eventType: Schema3.Literal("thread.proposed-plan-upserted"),
855
+ payload: ThreadProposedPlanUpsertedPayload
856
+ }),
857
+ Schema3.Struct({
858
+ ...PersistedEventBaseFields,
859
+ eventType: Schema3.Literal("thread.turn-diff-completed"),
860
+ payload: ThreadTurnDiffCompletedPayload
861
+ }),
862
+ Schema3.Struct({
863
+ ...PersistedEventBaseFields,
864
+ eventType: Schema3.Literal("thread.activity-appended"),
865
+ payload: ThreadActivityAppendedPayload
866
+ })
867
+ ]);
868
+ var OrchestrationCommandReceiptStatus = Schema3.Literals(["accepted", "rejected"]);
869
+ var TurnCountRange = Schema3.Struct({
870
+ fromTurnCount: NonNegativeInt,
871
+ toTurnCount: NonNegativeInt
872
+ }).check(Schema3.makeFilter((input) => input.fromTurnCount <= input.toTurnCount || new SchemaIssue.InvalidValue(Option.some(input.fromTurnCount), {
873
+ message: "fromTurnCount must be less than or equal to toTurnCount"
874
+ }), { identifier: "OrchestrationTurnDiffRange" }));
875
+ var ThreadTurnDiff = TurnCountRange.mapFields(Struct.assign({
876
+ threadId: ThreadId,
877
+ diff: Schema3.String
878
+ }), { unsafePreserveChecks: true });
879
+ var ProviderSessionRuntimeStatus = Schema3.Literals([
880
+ "starting",
881
+ "running",
882
+ "stopped",
883
+ "error"
884
+ ]);
885
+ var ProjectionThreadTurnStatus = Schema3.Literals([
886
+ "running",
887
+ "completed",
888
+ "interrupted",
889
+ "error"
890
+ ]);
891
+ var ProjectionCheckpointRow = Schema3.Struct({
892
+ threadId: ThreadId,
893
+ turnId: TurnId,
894
+ checkpointTurnCount: NonNegativeInt,
895
+ checkpointRef: CheckpointRef,
896
+ status: OrchestrationCheckpointStatus,
897
+ files: Schema3.Array(OrchestrationCheckpointFile),
898
+ assistantMessageId: Schema3.NullOr(MessageId),
899
+ completedAt: IsoDateTime
900
+ });
901
+ var ProjectionPendingApprovalStatus = Schema3.Literals(["pending", "resolved"]);
902
+ var ProjectionPendingApprovalDecision = Schema3.NullOr(ProviderApprovalDecision);
903
+ var DispatchResult = Schema3.Struct({
904
+ sequence: NonNegativeInt
905
+ });
906
+ var OrchestrationGetSnapshotInput = Schema3.Struct({});
907
+ var OrchestrationGetTurnDiffInput = TurnCountRange.mapFields(Struct.assign({ threadId: ThreadId }), { unsafePreserveChecks: true });
908
+ var OrchestrationGetFullThreadDiffInput = Schema3.Struct({
909
+ threadId: ThreadId,
910
+ toTurnCount: NonNegativeInt
911
+ });
912
+ var OrchestrationReplayEventsInput = Schema3.Struct({
913
+ fromSequenceExclusive: NonNegativeInt
914
+ });
915
+ var OrchestrationReplayEventsResult = Schema3.Array(OrchestrationEvent);
916
+
917
+ // packages/contracts/src/runtime.ts
918
+ var RunKind = Schema4.Literals(["adhoc", "task", "batch", "validation", "review"]);
919
+ var RunMode = Schema4.Literals(["interactive", "autonomous", "supervised"]);
920
+ var RunStatus = Schema4.Literals([
921
+ "created",
922
+ "queued",
923
+ "preparing",
924
+ "running",
925
+ "waiting-approval",
926
+ "waiting-user-input",
927
+ "paused",
928
+ "validating",
929
+ "reviewing",
930
+ "closing-out",
931
+ "needs-attention",
932
+ "completed",
933
+ "failed",
934
+ "stopped"
935
+ ]);
936
+ var EngineSandboxMode = Schema4.Literals([
937
+ "read-only",
938
+ "workspace-write",
939
+ "danger-full-access"
940
+ ]);
941
+ var IsolationMode = Schema4.Literals(["none", "env", "worktree"]);
942
+ var RuntimeStatus = Schema4.Literals([
943
+ "prepared",
944
+ "starting",
945
+ "running",
946
+ "interrupted",
947
+ "exited",
948
+ "failed",
949
+ "destroyed"
950
+ ]);
951
+ var RunExecutionTarget = Schema4.Literals(["local", "remote"]);
952
+ var RunSummary = Schema4.Struct({
953
+ id: RunId,
954
+ workspaceId: WorkspaceId,
955
+ taskId: Schema4.NullOr(TaskId),
956
+ title: TrimmedNonEmptyString,
957
+ runKind: RunKind,
958
+ mode: RunMode,
959
+ runtimeMode: RuntimeMode,
960
+ interactionMode: ProviderInteractionMode,
961
+ status: RunStatus,
962
+ runtimeAdapter: TrimmedNonEmptyString,
963
+ model: Schema4.NullOr(TrimmedNonEmptyString),
964
+ initialPrompt: Schema4.NullOr(Schema4.String),
965
+ executionTarget: Schema4.optional(RunExecutionTarget),
966
+ remoteHostId: Schema4.optional(Schema4.NullOr(TrimmedNonEmptyString)),
967
+ remoteLeaseId: Schema4.optional(Schema4.NullOr(TrimmedNonEmptyString)),
968
+ remoteLeaseClaimedAt: Schema4.optional(Schema4.NullOr(IsoDateTime)),
969
+ activeRuntimeId: Schema4.NullOr(EngineRuntimeId),
970
+ latestMessageId: Schema4.NullOr(TrimmedNonEmptyString),
971
+ pendingApprovalCount: NonNegativeInt,
972
+ pendingUserInputCount: NonNegativeInt,
973
+ branch: Schema4.NullOr(TrimmedNonEmptyString),
974
+ worktreePath: Schema4.NullOr(TrimmedNonEmptyString),
975
+ errorText: Schema4.NullOr(Schema4.String),
976
+ createdAt: IsoDateTime,
977
+ updatedAt: IsoDateTime,
978
+ startedAt: Schema4.NullOr(IsoDateTime),
979
+ completedAt: Schema4.NullOr(IsoDateTime)
980
+ });
981
+ var RuntimeSummary = Schema4.Struct({
982
+ id: EngineRuntimeId,
983
+ workspaceId: WorkspaceId,
984
+ runId: RunId,
985
+ adapterKind: TrimmedNonEmptyString,
986
+ executionTarget: Schema4.optional(RunExecutionTarget),
987
+ remoteHostId: Schema4.optional(Schema4.NullOr(TrimmedNonEmptyString)),
988
+ status: RuntimeStatus,
989
+ sandboxMode: EngineSandboxMode,
990
+ isolationMode: IsolationMode,
991
+ workspaceDir: Schema4.NullOr(TrimmedNonEmptyString),
992
+ homeDir: Schema4.NullOr(TrimmedNonEmptyString),
993
+ tmpDir: Schema4.NullOr(TrimmedNonEmptyString),
994
+ cacheDir: Schema4.NullOr(TrimmedNonEmptyString),
995
+ logsDir: Schema4.NullOr(TrimmedNonEmptyString),
996
+ stateDir: Schema4.NullOr(TrimmedNonEmptyString),
997
+ sessionDir: Schema4.NullOr(TrimmedNonEmptyString),
998
+ sessionLogPath: Schema4.NullOr(TrimmedNonEmptyString),
999
+ pid: Schema4.NullOr(NonNegativeInt),
1000
+ startedAt: Schema4.NullOr(IsoDateTime),
1001
+ updatedAt: IsoDateTime,
1002
+ exitedAt: Schema4.NullOr(IsoDateTime)
1003
+ });
1004
+ var ApprovalStatus = Schema4.Literals(["pending", "resolved"]);
1005
+ var ApprovalSummary = Schema4.Struct({
1006
+ id: TrimmedNonEmptyString,
1007
+ runId: RunId,
1008
+ actionId: Schema4.NullOr(TrimmedNonEmptyString),
1009
+ requestKind: TrimmedNonEmptyString,
1010
+ status: ApprovalStatus,
1011
+ payload: Schema4.Unknown,
1012
+ createdAt: IsoDateTime,
1013
+ resolvedAt: Schema4.NullOr(IsoDateTime)
1014
+ });
1015
+ var UserInputRequestSummary = Schema4.Struct({
1016
+ id: TrimmedNonEmptyString,
1017
+ runId: RunId,
1018
+ status: ApprovalStatus,
1019
+ payload: Schema4.Unknown,
1020
+ createdAt: IsoDateTime,
1021
+ resolvedAt: Schema4.NullOr(IsoDateTime)
1022
+ });
1023
+ var WorktreeSummary = Schema4.Struct({
1024
+ id: WorktreeId,
1025
+ workspaceId: WorkspaceId,
1026
+ runId: RunId,
1027
+ taskId: Schema4.NullOr(TaskId),
1028
+ branchName: TrimmedNonEmptyString,
1029
+ path: TrimmedNonEmptyString,
1030
+ status: TrimmedNonEmptyString,
1031
+ createdAt: IsoDateTime,
1032
+ cleanedAt: Schema4.NullOr(IsoDateTime)
1033
+ });
1034
+
1035
+ // packages/contracts/src/run-journal.ts
1036
+ var RunActor = Schema5.Struct({
1037
+ kind: Schema5.Literals(["operator", "agent", "server", "system"]),
1038
+ id: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString))
1039
+ });
1040
+ var RunCloseoutPhase = Schema5.Literals([
1041
+ "queued",
1042
+ "commit",
1043
+ "push",
1044
+ "pr-review-merge",
1045
+ "pr-opened",
1046
+ "merge",
1047
+ "close-source",
1048
+ "completed"
1049
+ ]);
1050
+ var RunCloseoutPhaseOutcome = Schema5.Literals(["started", "completed", "failed"]);
1051
+ var RunCloseoutStatus = Schema5.Literals([
1052
+ "pending",
1053
+ "running",
1054
+ "completed",
1055
+ "needs-attention",
1056
+ "failed"
1057
+ ]);
1058
+ var RunCloseoutState = Schema5.Struct({
1059
+ phase: RunCloseoutPhase,
1060
+ status: RunCloseoutStatus,
1061
+ updatedAt: IsoDateTime,
1062
+ taskId: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1063
+ runtimeWorkspace: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1064
+ branch: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1065
+ prUrl: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1066
+ artifactRoot: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1067
+ iterations: Schema5.optional(Schema5.NullOr(Schema5.Int)),
1068
+ feedback: Schema5.optional(Schema5.Array(Schema5.String)),
1069
+ error: Schema5.optional(Schema5.NullOr(Schema5.String)),
1070
+ reason: Schema5.optional(Schema5.NullOr(Schema5.String)),
1071
+ merged: Schema5.optional(Schema5.Boolean),
1072
+ resumedAt: Schema5.optional(Schema5.NullOr(IsoDateTime)),
1073
+ completedAt: Schema5.optional(Schema5.NullOr(IsoDateTime))
1074
+ });
1075
+ var ApprovalDecision = Schema5.Literals(["approve", "reject"]);
1076
+ var runRecordFields = {
1077
+ runId: TrimmedNonEmptyString,
1078
+ workspaceId: TrimmedNonEmptyString,
1079
+ taskId: Schema5.NullOr(TrimmedNonEmptyString),
1080
+ threadId: Schema5.NullOr(TrimmedNonEmptyString),
1081
+ mode: Schema5.Literals(["local", "remote"]),
1082
+ runtimeAdapter: TrimmedNonEmptyString,
1083
+ createdAt: IsoDateTime,
1084
+ startedAt: Schema5.NullOr(IsoDateTime),
1085
+ completedAt: Schema5.NullOr(IsoDateTime),
1086
+ endpointId: Schema5.NullOr(TrimmedNonEmptyString),
1087
+ hostId: Schema5.NullOr(TrimmedNonEmptyString),
1088
+ worktreePath: Schema5.NullOr(TrimmedNonEmptyString),
1089
+ artifactRoot: Schema5.NullOr(TrimmedNonEmptyString),
1090
+ logRoot: Schema5.NullOr(TrimmedNonEmptyString),
1091
+ sessionPath: Schema5.NullOr(TrimmedNonEmptyString),
1092
+ sessionLogPath: Schema5.NullOr(TrimmedNonEmptyString),
1093
+ pid: Schema5.optional(Schema5.NullOr(Schema5.Int)),
1094
+ piSession: Schema5.optional(Schema5.Unknown),
1095
+ piSessionPrivate: Schema5.optional(Schema5.Unknown),
1096
+ updatedAt: IsoDateTime,
1097
+ title: TrimmedNonEmptyString,
1098
+ projectRoot: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1099
+ errorText: Schema5.optional(Schema5.NullOr(Schema5.String)),
1100
+ latestMessageId: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1101
+ prUrl: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1102
+ leaseId: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1103
+ serverCloseout: Schema5.optional(Schema5.NullOr(RunCloseoutState)),
1104
+ model: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1105
+ runtimeMode: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1106
+ interactionMode: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1107
+ runMode: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1108
+ initialPrompt: Schema5.optional(Schema5.NullOr(Schema5.String)),
1109
+ baselineMode: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1110
+ prMode: Schema5.optional(Schema5.NullOr(Schema5.Literals(["auto", "ask", "off"]))),
1111
+ initiatedBy: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1112
+ sourceTask: Schema5.optional(Schema5.Unknown),
1113
+ serverPid: Schema5.optional(Schema5.NullOr(Schema5.Int)),
1114
+ latestSteeringAt: Schema5.optional(Schema5.NullOr(IsoDateTime)),
1115
+ latestSteeringDeliveredAt: Schema5.optional(Schema5.NullOr(IsoDateTime)),
1116
+ statusDetail: Schema5.optional(Schema5.NullOr(Schema5.String)),
1117
+ planning: Schema5.optional(Schema5.Unknown),
1118
+ branch: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString))
1119
+ };
1120
+ var RunJournalRecord = Schema5.Struct({
1121
+ ...runRecordFields,
1122
+ status: RunStatus
1123
+ });
1124
+ var RunRecordPatch = Schema5.Struct({
1125
+ runId: Schema5.optional(runRecordFields.runId),
1126
+ workspaceId: Schema5.optional(runRecordFields.workspaceId),
1127
+ taskId: Schema5.optional(runRecordFields.taskId),
1128
+ threadId: Schema5.optional(runRecordFields.threadId),
1129
+ mode: Schema5.optional(runRecordFields.mode),
1130
+ runtimeAdapter: Schema5.optional(runRecordFields.runtimeAdapter),
1131
+ createdAt: Schema5.optional(runRecordFields.createdAt),
1132
+ startedAt: Schema5.optional(runRecordFields.startedAt),
1133
+ completedAt: Schema5.optional(runRecordFields.completedAt),
1134
+ endpointId: Schema5.optional(runRecordFields.endpointId),
1135
+ hostId: Schema5.optional(runRecordFields.hostId),
1136
+ worktreePath: Schema5.optional(runRecordFields.worktreePath),
1137
+ artifactRoot: Schema5.optional(runRecordFields.artifactRoot),
1138
+ logRoot: Schema5.optional(runRecordFields.logRoot),
1139
+ sessionPath: Schema5.optional(runRecordFields.sessionPath),
1140
+ sessionLogPath: Schema5.optional(runRecordFields.sessionLogPath),
1141
+ pid: runRecordFields.pid,
1142
+ piSession: runRecordFields.piSession,
1143
+ piSessionPrivate: runRecordFields.piSessionPrivate,
1144
+ updatedAt: Schema5.optional(runRecordFields.updatedAt),
1145
+ title: Schema5.optional(runRecordFields.title),
1146
+ projectRoot: runRecordFields.projectRoot,
1147
+ errorText: runRecordFields.errorText,
1148
+ latestMessageId: runRecordFields.latestMessageId,
1149
+ prUrl: runRecordFields.prUrl,
1150
+ leaseId: runRecordFields.leaseId,
1151
+ serverCloseout: runRecordFields.serverCloseout,
1152
+ model: runRecordFields.model,
1153
+ runtimeMode: runRecordFields.runtimeMode,
1154
+ interactionMode: runRecordFields.interactionMode,
1155
+ runMode: runRecordFields.runMode,
1156
+ initialPrompt: runRecordFields.initialPrompt,
1157
+ baselineMode: runRecordFields.baselineMode,
1158
+ prMode: runRecordFields.prMode,
1159
+ initiatedBy: runRecordFields.initiatedBy,
1160
+ sourceTask: runRecordFields.sourceTask,
1161
+ serverPid: runRecordFields.serverPid,
1162
+ latestSteeringAt: runRecordFields.latestSteeringAt,
1163
+ latestSteeringDeliveredAt: runRecordFields.latestSteeringDeliveredAt,
1164
+ statusDetail: runRecordFields.statusDetail,
1165
+ planning: runRecordFields.planning,
1166
+ branch: runRecordFields.branch
1167
+ });
1168
+ var journalEnvelopeFields = {
1169
+ v: Schema5.Literal(1),
1170
+ seq: PositiveInt,
1171
+ at: IsoDateTime,
1172
+ runId: RunId
1173
+ };
1174
+ var RunStatusChangedEvent = Schema5.Struct({
1175
+ ...journalEnvelopeFields,
1176
+ type: Schema5.Literal("status-changed"),
1177
+ from: Schema5.NullOr(RunStatus),
1178
+ to: RunStatus,
1179
+ reason: Schema5.optional(Schema5.NullOr(Schema5.String)),
1180
+ actor: Schema5.optional(RunActor)
1181
+ });
1182
+ var RunRecordPatchEvent = Schema5.Struct({
1183
+ ...journalEnvelopeFields,
1184
+ type: Schema5.Literal("record-patch"),
1185
+ patch: RunRecordPatch
1186
+ });
1187
+ var RunTimelineEntryEvent = Schema5.Struct({
1188
+ ...journalEnvelopeFields,
1189
+ type: Schema5.Literal("timeline-entry"),
1190
+ payload: Schema5.Unknown
1191
+ });
1192
+ var RunLogEntryEvent = Schema5.Struct({
1193
+ ...journalEnvelopeFields,
1194
+ type: Schema5.Literal("log-entry"),
1195
+ payload: Schema5.Unknown
1196
+ });
1197
+ var RunApprovalRequestedEvent = Schema5.Struct({
1198
+ ...journalEnvelopeFields,
1199
+ type: Schema5.Literal("approval-requested"),
1200
+ requestId: TrimmedNonEmptyString,
1201
+ requestKind: TrimmedNonEmptyString,
1202
+ actionId: Schema5.optional(Schema5.NullOr(TrimmedNonEmptyString)),
1203
+ payload: Schema5.Unknown
1204
+ });
1205
+ var RunApprovalResolvedEvent = Schema5.Struct({
1206
+ ...journalEnvelopeFields,
1207
+ type: Schema5.Literal("approval-resolved"),
1208
+ requestId: TrimmedNonEmptyString,
1209
+ decision: ApprovalDecision,
1210
+ note: Schema5.optional(Schema5.NullOr(Schema5.String)),
1211
+ actor: RunActor
1212
+ });
1213
+ var RunInputRequestedEvent = Schema5.Struct({
1214
+ ...journalEnvelopeFields,
1215
+ type: Schema5.Literal("input-requested"),
1216
+ requestId: TrimmedNonEmptyString,
1217
+ payload: Schema5.Unknown
1218
+ });
1219
+ var RunInputResolvedEvent = Schema5.Struct({
1220
+ ...journalEnvelopeFields,
1221
+ type: Schema5.Literal("input-resolved"),
1222
+ requestId: TrimmedNonEmptyString,
1223
+ answers: Schema5.Record(Schema5.String, Schema5.String),
1224
+ actor: RunActor
1225
+ });
1226
+ var RunSteeringEvent = Schema5.Struct({
1227
+ ...journalEnvelopeFields,
1228
+ type: Schema5.Literal("steering"),
1229
+ actor: RunActor,
1230
+ text: Schema5.String
1231
+ });
1232
+ var RunAdoptedEvent = Schema5.Struct({
1233
+ ...journalEnvelopeFields,
1234
+ type: Schema5.Literal("adopted"),
1235
+ pid: Schema5.NullOr(Schema5.Int),
1236
+ serverPid: Schema5.Int
1237
+ });
1238
+ var RunStallDetectedEvent = Schema5.Struct({
1239
+ ...journalEnvelopeFields,
1240
+ type: Schema5.Literal("stall-detected"),
1241
+ detail: Schema5.String
1242
+ });
1243
+ var RunCloseoutPhaseEvent = Schema5.Struct({
1244
+ ...journalEnvelopeFields,
1245
+ type: Schema5.Literal("closeout-phase"),
1246
+ phase: RunCloseoutPhase,
1247
+ outcome: RunCloseoutPhaseOutcome,
1248
+ detail: Schema5.optional(Schema5.NullOr(Schema5.String))
1249
+ });
1250
+ var RunJournalEvent = Schema5.Union([
1251
+ RunStatusChangedEvent,
1252
+ RunRecordPatchEvent,
1253
+ RunTimelineEntryEvent,
1254
+ RunLogEntryEvent,
1255
+ RunApprovalRequestedEvent,
1256
+ RunApprovalResolvedEvent,
1257
+ RunInputRequestedEvent,
1258
+ RunInputResolvedEvent,
1259
+ RunSteeringEvent,
1260
+ RunAdoptedEvent,
1261
+ RunStallDetectedEvent,
1262
+ RunCloseoutPhaseEvent
1263
+ ]);
1264
+ var decodeRunJournalEvent = Schema5.decodeUnknownSync(RunJournalEvent);
1265
+ var RUN_STATUS_TRANSITIONS = {
1266
+ created: ["queued", "preparing", "running", "failed", "stopped"],
1267
+ queued: ["preparing", "running", "failed", "stopped"],
1268
+ preparing: ["queued", "running", "needs-attention", "failed", "stopped"],
1269
+ running: [
1270
+ "queued",
1271
+ "waiting-approval",
1272
+ "waiting-user-input",
1273
+ "paused",
1274
+ "validating",
1275
+ "reviewing",
1276
+ "closing-out",
1277
+ "needs-attention",
1278
+ "completed",
1279
+ "failed",
1280
+ "stopped"
1281
+ ],
1282
+ "waiting-approval": ["running", "needs-attention", "failed", "stopped"],
1283
+ "waiting-user-input": ["running", "needs-attention", "failed", "stopped"],
1284
+ paused: ["running", "failed", "stopped"],
1285
+ validating: ["running", "reviewing", "closing-out", "needs-attention", "completed", "failed", "stopped"],
1286
+ reviewing: ["running", "validating", "closing-out", "needs-attention", "completed", "failed", "stopped"],
1287
+ "closing-out": ["running", "needs-attention", "completed", "failed", "stopped"],
1288
+ "needs-attention": ["queued", "preparing", "running", "closing-out", "completed", "failed", "stopped"],
1289
+ completed: [],
1290
+ failed: ["queued", "preparing", "running", "closing-out"],
1291
+ stopped: ["queued", "preparing", "running", "closing-out"]
1292
+ };
1293
+ var TERMINAL_RUN_STATUSES = ["completed", "failed", "stopped"];
1294
+ var ACTIVE_RUN_STATUSES = Object.keys(RUN_STATUS_TRANSITIONS).filter((status) => !TERMINAL_RUN_STATUSES.includes(status));
1295
+ function isTerminalRunStatus(status) {
1296
+ return TERMINAL_RUN_STATUSES.includes(status);
1297
+ }
1298
+ function isActiveRunStatus(status) {
1299
+ return !isTerminalRunStatus(status);
1300
+ }
1301
+ function canTransitionRunStatus(from, to) {
1302
+ if (from === null)
1303
+ return true;
1304
+ if (from === to)
1305
+ return true;
1306
+ return RUN_STATUS_TRANSITIONS[from].includes(to);
1307
+ }
1308
+ function assertRunStatusTransition(from, to) {
1309
+ if (!canTransitionRunStatus(from, to)) {
1310
+ throw new Error(`Illegal run status transition: ${from ?? "(none)"} -> ${to}. ` + `Allowed from ${from ?? "(none)"}: ${from ? RUN_STATUS_TRANSITIONS[from].join(", ") : "(any)"}.`);
1311
+ }
1312
+ }
1313
+ function reduceRunJournal(events) {
1314
+ let record = {};
1315
+ let status = null;
1316
+ const statusHistory = [];
1317
+ const pendingApprovals = new Map;
1318
+ const resolvedApprovals = [];
1319
+ const pendingUserInputs = new Map;
1320
+ const resolvedUserInputs = [];
1321
+ const closeoutPhases = [];
1322
+ const anomalies = [];
1323
+ let steeringCount = 0;
1324
+ let stallCount = 0;
1325
+ let lastSeq = 0;
1326
+ let lastEventAt = null;
1327
+ for (const event of events) {
1328
+ lastSeq = event.seq;
1329
+ lastEventAt = event.at;
1330
+ switch (event.type) {
1331
+ case "status-changed": {
1332
+ if (!canTransitionRunStatus(status, event.to)) {
1333
+ anomalies.push({
1334
+ seq: event.seq,
1335
+ kind: "illegal-transition",
1336
+ detail: `${status ?? "(none)"} -> ${event.to}`
1337
+ });
1338
+ }
1339
+ statusHistory.push({
1340
+ seq: event.seq,
1341
+ at: event.at,
1342
+ from: status,
1343
+ to: event.to,
1344
+ reason: event.reason ?? null
1345
+ });
1346
+ const wasTerminal = status !== null && isTerminalRunStatus(status);
1347
+ status = event.to;
1348
+ record = { ...record, updatedAt: event.at };
1349
+ if (isTerminalRunStatus(event.to) && !record.completedAt) {
1350
+ record = { ...record, completedAt: event.at };
1351
+ }
1352
+ if (!isTerminalRunStatus(event.to) && wasTerminal) {
1353
+ record = { ...record, completedAt: null };
1354
+ }
1355
+ if (event.to === "running" && !record.startedAt) {
1356
+ record = { ...record, startedAt: event.at };
1357
+ }
1358
+ break;
1359
+ }
1360
+ case "record-patch": {
1361
+ const next = { ...record };
1362
+ for (const [key, value] of Object.entries(event.patch)) {
1363
+ if (value !== undefined) {
1364
+ next[key] = value;
1365
+ }
1366
+ }
1367
+ next.updatedAt = event.patch.updatedAt ?? event.at;
1368
+ record = next;
1369
+ break;
1370
+ }
1371
+ case "approval-requested": {
1372
+ pendingApprovals.set(event.requestId, {
1373
+ requestId: event.requestId,
1374
+ requestKind: event.requestKind,
1375
+ actionId: event.actionId ?? null,
1376
+ payload: event.payload,
1377
+ requestedAt: event.at
1378
+ });
1379
+ break;
1380
+ }
1381
+ case "approval-resolved": {
1382
+ const pending = pendingApprovals.get(event.requestId);
1383
+ if (!pending) {
1384
+ const alreadyResolved = resolvedApprovals.some((entry) => entry.requestId === event.requestId);
1385
+ anomalies.push({
1386
+ seq: event.seq,
1387
+ kind: alreadyResolved ? "duplicate-resolution" : "unknown-request",
1388
+ detail: `approval ${event.requestId}`
1389
+ });
1390
+ break;
1391
+ }
1392
+ pendingApprovals.delete(event.requestId);
1393
+ resolvedApprovals.push({
1394
+ ...pending,
1395
+ decision: event.decision,
1396
+ note: event.note ?? null,
1397
+ actor: event.actor,
1398
+ resolvedAt: event.at
1399
+ });
1400
+ break;
1401
+ }
1402
+ case "input-requested": {
1403
+ pendingUserInputs.set(event.requestId, {
1404
+ requestId: event.requestId,
1405
+ requestKind: "user-input",
1406
+ actionId: null,
1407
+ payload: event.payload,
1408
+ requestedAt: event.at
1409
+ });
1410
+ break;
1411
+ }
1412
+ case "input-resolved": {
1413
+ const pending = pendingUserInputs.get(event.requestId);
1414
+ if (!pending) {
1415
+ const alreadyResolved = resolvedUserInputs.some((entry) => entry.requestId === event.requestId);
1416
+ anomalies.push({
1417
+ seq: event.seq,
1418
+ kind: alreadyResolved ? "duplicate-resolution" : "unknown-request",
1419
+ detail: `user-input ${event.requestId}`
1420
+ });
1421
+ break;
1422
+ }
1423
+ pendingUserInputs.delete(event.requestId);
1424
+ resolvedUserInputs.push({
1425
+ ...pending,
1426
+ answers: event.answers,
1427
+ actor: event.actor,
1428
+ resolvedAt: event.at
1429
+ });
1430
+ break;
1431
+ }
1432
+ case "steering": {
1433
+ steeringCount += 1;
1434
+ break;
1435
+ }
1436
+ case "adopted": {
1437
+ record = { ...record, pid: event.pid, updatedAt: event.at };
1438
+ break;
1439
+ }
1440
+ case "stall-detected": {
1441
+ stallCount += 1;
1442
+ break;
1443
+ }
1444
+ case "closeout-phase": {
1445
+ closeoutPhases.push({
1446
+ seq: event.seq,
1447
+ at: event.at,
1448
+ phase: event.phase,
1449
+ outcome: event.outcome,
1450
+ detail: event.detail ?? null
1451
+ });
1452
+ break;
1453
+ }
1454
+ case "timeline-entry":
1455
+ case "log-entry":
1456
+ break;
1457
+ }
1458
+ }
1459
+ return {
1460
+ record,
1461
+ status,
1462
+ statusHistory,
1463
+ pendingApprovals: [...pendingApprovals.values()],
1464
+ resolvedApprovals,
1465
+ pendingUserInputs: [...pendingUserInputs.values()],
1466
+ resolvedUserInputs,
1467
+ steeringCount,
1468
+ stallCount,
1469
+ closeoutPhases,
1470
+ lastSeq,
1471
+ lastEventAt,
1472
+ anomalies
1473
+ };
1474
+ }
1475
+ export {
1476
+ reduceRunJournal,
1477
+ isTerminalRunStatus,
1478
+ isActiveRunStatus,
1479
+ decodeRunJournalEvent,
1480
+ canTransitionRunStatus,
1481
+ assertRunStatusTransition,
1482
+ TERMINAL_RUN_STATUSES,
1483
+ RunTimelineEntryEvent,
1484
+ RunSteeringEvent,
1485
+ RunStatusChangedEvent,
1486
+ RunStallDetectedEvent,
1487
+ RunRecordPatchEvent,
1488
+ RunRecordPatch,
1489
+ RunLogEntryEvent,
1490
+ RunJournalRecord,
1491
+ RunJournalEvent,
1492
+ RunInputResolvedEvent,
1493
+ RunInputRequestedEvent,
1494
+ RunCloseoutStatus,
1495
+ RunCloseoutState,
1496
+ RunCloseoutPhaseOutcome,
1497
+ RunCloseoutPhaseEvent,
1498
+ RunCloseoutPhase,
1499
+ RunApprovalResolvedEvent,
1500
+ RunApprovalRequestedEvent,
1501
+ RunAdoptedEvent,
1502
+ RunActor,
1503
+ RUN_STATUS_TRANSITIONS,
1504
+ ApprovalDecision,
1505
+ ACTIVE_RUN_STATUSES
1506
+ };