@hyperdrive.bot/paseo-protocol 0.3.42 → 0.3.43

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.
@@ -167,6 +167,37 @@ export declare const WorkflowPhaseSchema: z.ZodObject<{
167
167
  storyCount: z.ZodOptional<z.ZodNumber>;
168
168
  completedStoryCount: z.ZodOptional<z.ZodNumber>;
169
169
  }, z.core.$strip>;
170
+ /**
171
+ * Per-step agent config (Epic 2, Story 2.1). A CLOSED subset of the daemon's
172
+ * `AgentSessionConfig`: every key optional, and `.strict()` so an unknown key is a
173
+ * parse ERROR rather than a silent strip. Silent-strip is the failure this schema
174
+ * exists to prevent: a typo'd `provider:` would otherwise spawn the default agent
175
+ * with no signal, which is exactly the "silent fallback to the default" the epic forbids.
176
+ *
177
+ * Deliberately excluded, each for a reason:
178
+ * - `cwd`: workflow-owned. A step must not relocate its child. Also forced at merge time.
179
+ * - `extra` / `mcpServers` / `featureValues`: arbitrary nested structure, i.e. the
180
+ * "deterministic via code" escape hatch this PRD exists to close.
181
+ * - `title`: owned by `initialTitle`, which the manager sets from `node.title`.
182
+ * - `daemonAppendSystemPrompt`: runtime-only, never persisted (`agent-sdk-types.ts:565-568`).
183
+ * - `internal`: workflow children must stay listable (`AgentManager.listAgents` filters
184
+ * on `!agent.internal`, `agent-manager.ts:810-813`).
185
+ *
186
+ * Widening this vocabulary requires a schema edit AND a new test. It must never widen
187
+ * by accident from a config file.
188
+ */
189
+ export declare const WorkflowAgentPresetSchema: z.ZodObject<{
190
+ provider: z.ZodOptional<z.ZodString>;
191
+ model: z.ZodOptional<z.ZodString>;
192
+ modeId: z.ZodOptional<z.ZodString>;
193
+ systemPrompt: z.ZodOptional<z.ZodString>;
194
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
195
+ approvalPolicy: z.ZodOptional<z.ZodString>;
196
+ sandboxMode: z.ZodOptional<z.ZodString>;
197
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
198
+ webSearch: z.ZodOptional<z.ZodBoolean>;
199
+ }, z.core.$strict>;
200
+ export type WorkflowAgentPreset = z.infer<typeof WorkflowAgentPresetSchema>;
170
201
  export declare const WorkflowSnapshotSchema: z.ZodObject<{
171
202
  id: z.ZodString;
172
203
  cwd: z.ZodString;
@@ -179,6 +210,17 @@ export declare const WorkflowSnapshotSchema: z.ZodObject<{
179
210
  }>;
180
211
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
181
212
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
213
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
214
+ provider: z.ZodOptional<z.ZodString>;
215
+ model: z.ZodOptional<z.ZodString>;
216
+ modeId: z.ZodOptional<z.ZodString>;
217
+ systemPrompt: z.ZodOptional<z.ZodString>;
218
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
219
+ approvalPolicy: z.ZodOptional<z.ZodString>;
220
+ sandboxMode: z.ZodOptional<z.ZodString>;
221
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
222
+ webSearch: z.ZodOptional<z.ZodBoolean>;
223
+ }, z.core.$strict>>>;
182
224
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
183
225
  id: z.ZodString;
184
226
  title: z.ZodString;
@@ -213,6 +255,17 @@ export declare const STORED_WORKFLOW_SCHEMA: z.ZodObject<{
213
255
  }>;
214
256
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
215
257
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
258
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
259
+ provider: z.ZodOptional<z.ZodString>;
260
+ model: z.ZodOptional<z.ZodString>;
261
+ modeId: z.ZodOptional<z.ZodString>;
262
+ systemPrompt: z.ZodOptional<z.ZodString>;
263
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
264
+ approvalPolicy: z.ZodOptional<z.ZodString>;
265
+ sandboxMode: z.ZodOptional<z.ZodString>;
266
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
267
+ webSearch: z.ZodOptional<z.ZodBoolean>;
268
+ }, z.core.$strict>>>;
216
269
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
217
270
  id: z.ZodString;
218
271
  title: z.ZodString;
@@ -286,6 +339,17 @@ export declare const WorkflowListResponseSchema: z.ZodObject<{
286
339
  }>;
287
340
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
288
341
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
342
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
343
+ provider: z.ZodOptional<z.ZodString>;
344
+ model: z.ZodOptional<z.ZodString>;
345
+ modeId: z.ZodOptional<z.ZodString>;
346
+ systemPrompt: z.ZodOptional<z.ZodString>;
347
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
348
+ approvalPolicy: z.ZodOptional<z.ZodString>;
349
+ sandboxMode: z.ZodOptional<z.ZodString>;
350
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
351
+ webSearch: z.ZodOptional<z.ZodBoolean>;
352
+ }, z.core.$strict>>>;
289
353
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
290
354
  id: z.ZodString;
291
355
  title: z.ZodString;
@@ -331,6 +395,17 @@ export declare const WorkflowGetResponseSchema: z.ZodObject<{
331
395
  }>;
332
396
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
333
397
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
398
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
399
+ provider: z.ZodOptional<z.ZodString>;
400
+ model: z.ZodOptional<z.ZodString>;
401
+ modeId: z.ZodOptional<z.ZodString>;
402
+ systemPrompt: z.ZodOptional<z.ZodString>;
403
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
404
+ approvalPolicy: z.ZodOptional<z.ZodString>;
405
+ sandboxMode: z.ZodOptional<z.ZodString>;
406
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
407
+ webSearch: z.ZodOptional<z.ZodBoolean>;
408
+ }, z.core.$strict>>>;
334
409
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
335
410
  id: z.ZodString;
336
411
  title: z.ZodString;
@@ -376,6 +451,17 @@ export declare const WorkflowCancelResponseSchema: z.ZodObject<{
376
451
  }>;
377
452
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
378
453
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
454
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
455
+ provider: z.ZodOptional<z.ZodString>;
456
+ model: z.ZodOptional<z.ZodString>;
457
+ modeId: z.ZodOptional<z.ZodString>;
458
+ systemPrompt: z.ZodOptional<z.ZodString>;
459
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
460
+ approvalPolicy: z.ZodOptional<z.ZodString>;
461
+ sandboxMode: z.ZodOptional<z.ZodString>;
462
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
463
+ webSearch: z.ZodOptional<z.ZodBoolean>;
464
+ }, z.core.$strict>>>;
379
465
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
380
466
  id: z.ZodString;
381
467
  title: z.ZodString;
@@ -450,6 +536,17 @@ export declare const WorkflowTaskNodeSchema: z.ZodObject<{
450
536
  parallelizable: z.ZodBoolean;
451
537
  estimatedMinutes: z.ZodNumber;
452
538
  agentType: z.ZodOptional<z.ZodString>;
539
+ agentConfig: z.ZodOptional<z.ZodObject<{
540
+ provider: z.ZodOptional<z.ZodString>;
541
+ model: z.ZodOptional<z.ZodString>;
542
+ modeId: z.ZodOptional<z.ZodString>;
543
+ systemPrompt: z.ZodOptional<z.ZodString>;
544
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
545
+ approvalPolicy: z.ZodOptional<z.ZodString>;
546
+ sandboxMode: z.ZodOptional<z.ZodString>;
547
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
548
+ webSearch: z.ZodOptional<z.ZodBoolean>;
549
+ }, z.core.$strict>>;
453
550
  targetFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
454
551
  }, z.core.$strip>;
455
552
  /** Decomposed task graph driving child-agent spawning. */
@@ -480,6 +577,17 @@ export declare const WorkflowTaskGraphSchema: z.ZodObject<{
480
577
  parallelizable: z.ZodBoolean;
481
578
  estimatedMinutes: z.ZodNumber;
482
579
  agentType: z.ZodOptional<z.ZodString>;
580
+ agentConfig: z.ZodOptional<z.ZodObject<{
581
+ provider: z.ZodOptional<z.ZodString>;
582
+ model: z.ZodOptional<z.ZodString>;
583
+ modeId: z.ZodOptional<z.ZodString>;
584
+ systemPrompt: z.ZodOptional<z.ZodString>;
585
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
586
+ approvalPolicy: z.ZodOptional<z.ZodString>;
587
+ sandboxMode: z.ZodOptional<z.ZodString>;
588
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
589
+ webSearch: z.ZodOptional<z.ZodBoolean>;
590
+ }, z.core.$strict>>;
483
591
  targetFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
484
592
  }, z.core.$strip>>;
485
593
  }, z.core.$strip>;
@@ -515,6 +623,17 @@ export declare const WorkflowStartRequestSchema: z.ZodObject<{
515
623
  parallelizable: z.ZodBoolean;
516
624
  estimatedMinutes: z.ZodNumber;
517
625
  agentType: z.ZodOptional<z.ZodString>;
626
+ agentConfig: z.ZodOptional<z.ZodObject<{
627
+ provider: z.ZodOptional<z.ZodString>;
628
+ model: z.ZodOptional<z.ZodString>;
629
+ modeId: z.ZodOptional<z.ZodString>;
630
+ systemPrompt: z.ZodOptional<z.ZodString>;
631
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
632
+ approvalPolicy: z.ZodOptional<z.ZodString>;
633
+ sandboxMode: z.ZodOptional<z.ZodString>;
634
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
635
+ webSearch: z.ZodOptional<z.ZodBoolean>;
636
+ }, z.core.$strict>>;
518
637
  targetFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
519
638
  }, z.core.$strip>>;
520
639
  }, z.core.$strip>;
@@ -523,6 +642,17 @@ export declare const WorkflowStartRequestSchema: z.ZodObject<{
523
642
  model: z.ZodOptional<z.ZodString>;
524
643
  title: z.ZodOptional<z.ZodString>;
525
644
  labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
645
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
646
+ provider: z.ZodOptional<z.ZodString>;
647
+ model: z.ZodOptional<z.ZodString>;
648
+ modeId: z.ZodOptional<z.ZodString>;
649
+ systemPrompt: z.ZodOptional<z.ZodString>;
650
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
651
+ approvalPolicy: z.ZodOptional<z.ZodString>;
652
+ sandboxMode: z.ZodOptional<z.ZodString>;
653
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
654
+ webSearch: z.ZodOptional<z.ZodBoolean>;
655
+ }, z.core.$strict>>>;
526
656
  }, z.core.$strip>;
527
657
  export declare const WorkflowStartResponseSchema: z.ZodObject<{
528
658
  type: z.ZodLiteral<"workflow.start.response">;
@@ -3804,6 +3934,17 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zod
3804
3934
  parallelizable: z.ZodBoolean;
3805
3935
  estimatedMinutes: z.ZodNumber;
3806
3936
  agentType: z.ZodOptional<z.ZodString>;
3937
+ agentConfig: z.ZodOptional<z.ZodObject<{
3938
+ provider: z.ZodOptional<z.ZodString>;
3939
+ model: z.ZodOptional<z.ZodString>;
3940
+ modeId: z.ZodOptional<z.ZodString>;
3941
+ systemPrompt: z.ZodOptional<z.ZodString>;
3942
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
3943
+ approvalPolicy: z.ZodOptional<z.ZodString>;
3944
+ sandboxMode: z.ZodOptional<z.ZodString>;
3945
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
3946
+ webSearch: z.ZodOptional<z.ZodBoolean>;
3947
+ }, z.core.$strict>>;
3807
3948
  targetFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
3808
3949
  }, z.core.$strip>>;
3809
3950
  }, z.core.$strip>;
@@ -3812,6 +3953,17 @@ export declare const SessionInboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zod
3812
3953
  model: z.ZodOptional<z.ZodString>;
3813
3954
  title: z.ZodOptional<z.ZodString>;
3814
3955
  labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
3956
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
3957
+ provider: z.ZodOptional<z.ZodString>;
3958
+ model: z.ZodOptional<z.ZodString>;
3959
+ modeId: z.ZodOptional<z.ZodString>;
3960
+ systemPrompt: z.ZodOptional<z.ZodString>;
3961
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
3962
+ approvalPolicy: z.ZodOptional<z.ZodString>;
3963
+ sandboxMode: z.ZodOptional<z.ZodString>;
3964
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
3965
+ webSearch: z.ZodOptional<z.ZodBoolean>;
3966
+ }, z.core.$strict>>>;
3815
3967
  }, z.core.$strip>, z.ZodObject<{
3816
3968
  type: z.ZodLiteral<"diagnostics.request">;
3817
3969
  requestId: z.ZodString;
@@ -16048,6 +16200,17 @@ export declare const SessionOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zo
16048
16200
  }>;
16049
16201
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16050
16202
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
16203
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
16204
+ provider: z.ZodOptional<z.ZodString>;
16205
+ model: z.ZodOptional<z.ZodString>;
16206
+ modeId: z.ZodOptional<z.ZodString>;
16207
+ systemPrompt: z.ZodOptional<z.ZodString>;
16208
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
16209
+ approvalPolicy: z.ZodOptional<z.ZodString>;
16210
+ sandboxMode: z.ZodOptional<z.ZodString>;
16211
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
16212
+ webSearch: z.ZodOptional<z.ZodBoolean>;
16213
+ }, z.core.$strict>>>;
16051
16214
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
16052
16215
  id: z.ZodString;
16053
16216
  title: z.ZodString;
@@ -16087,6 +16250,17 @@ export declare const SessionOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zo
16087
16250
  }>;
16088
16251
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16089
16252
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
16253
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
16254
+ provider: z.ZodOptional<z.ZodString>;
16255
+ model: z.ZodOptional<z.ZodString>;
16256
+ modeId: z.ZodOptional<z.ZodString>;
16257
+ systemPrompt: z.ZodOptional<z.ZodString>;
16258
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
16259
+ approvalPolicy: z.ZodOptional<z.ZodString>;
16260
+ sandboxMode: z.ZodOptional<z.ZodString>;
16261
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
16262
+ webSearch: z.ZodOptional<z.ZodBoolean>;
16263
+ }, z.core.$strict>>>;
16090
16264
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
16091
16265
  id: z.ZodString;
16092
16266
  title: z.ZodString;
@@ -16126,6 +16300,17 @@ export declare const SessionOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.Zo
16126
16300
  }>;
16127
16301
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16128
16302
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
16303
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
16304
+ provider: z.ZodOptional<z.ZodString>;
16305
+ model: z.ZodOptional<z.ZodString>;
16306
+ modeId: z.ZodOptional<z.ZodString>;
16307
+ systemPrompt: z.ZodOptional<z.ZodString>;
16308
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
16309
+ approvalPolicy: z.ZodOptional<z.ZodString>;
16310
+ sandboxMode: z.ZodOptional<z.ZodString>;
16311
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
16312
+ webSearch: z.ZodOptional<z.ZodBoolean>;
16313
+ }, z.core.$strict>>>;
16129
16314
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
16130
16315
  id: z.ZodString;
16131
16316
  title: z.ZodString;
@@ -21085,6 +21270,17 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
21085
21270
  parallelizable: z.ZodBoolean;
21086
21271
  estimatedMinutes: z.ZodNumber;
21087
21272
  agentType: z.ZodOptional<z.ZodString>;
21273
+ agentConfig: z.ZodOptional<z.ZodObject<{
21274
+ provider: z.ZodOptional<z.ZodString>;
21275
+ model: z.ZodOptional<z.ZodString>;
21276
+ modeId: z.ZodOptional<z.ZodString>;
21277
+ systemPrompt: z.ZodOptional<z.ZodString>;
21278
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
21279
+ approvalPolicy: z.ZodOptional<z.ZodString>;
21280
+ sandboxMode: z.ZodOptional<z.ZodString>;
21281
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
21282
+ webSearch: z.ZodOptional<z.ZodBoolean>;
21283
+ }, z.core.$strict>>;
21088
21284
  targetFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
21089
21285
  }, z.core.$strip>>;
21090
21286
  }, z.core.$strip>;
@@ -21093,6 +21289,17 @@ export declare const WSSessionInboundSchema: z.ZodObject<{
21093
21289
  model: z.ZodOptional<z.ZodString>;
21094
21290
  title: z.ZodOptional<z.ZodString>;
21095
21291
  labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
21292
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
21293
+ provider: z.ZodOptional<z.ZodString>;
21294
+ model: z.ZodOptional<z.ZodString>;
21295
+ modeId: z.ZodOptional<z.ZodString>;
21296
+ systemPrompt: z.ZodOptional<z.ZodString>;
21297
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
21298
+ approvalPolicy: z.ZodOptional<z.ZodString>;
21299
+ sandboxMode: z.ZodOptional<z.ZodString>;
21300
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
21301
+ webSearch: z.ZodOptional<z.ZodBoolean>;
21302
+ }, z.core.$strict>>>;
21096
21303
  }, z.core.$strip>, z.ZodObject<{
21097
21304
  type: z.ZodLiteral<"diagnostics.request">;
21098
21305
  requestId: z.ZodString;
@@ -25956,6 +26163,17 @@ export declare const WSSessionOutboundSchema: z.ZodObject<{
25956
26163
  }>;
25957
26164
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25958
26165
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
26166
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
26167
+ provider: z.ZodOptional<z.ZodString>;
26168
+ model: z.ZodOptional<z.ZodString>;
26169
+ modeId: z.ZodOptional<z.ZodString>;
26170
+ systemPrompt: z.ZodOptional<z.ZodString>;
26171
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
26172
+ approvalPolicy: z.ZodOptional<z.ZodString>;
26173
+ sandboxMode: z.ZodOptional<z.ZodString>;
26174
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
26175
+ webSearch: z.ZodOptional<z.ZodBoolean>;
26176
+ }, z.core.$strict>>>;
25959
26177
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
25960
26178
  id: z.ZodString;
25961
26179
  title: z.ZodString;
@@ -25995,6 +26213,17 @@ export declare const WSSessionOutboundSchema: z.ZodObject<{
25995
26213
  }>;
25996
26214
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
25997
26215
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
26216
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
26217
+ provider: z.ZodOptional<z.ZodString>;
26218
+ model: z.ZodOptional<z.ZodString>;
26219
+ modeId: z.ZodOptional<z.ZodString>;
26220
+ systemPrompt: z.ZodOptional<z.ZodString>;
26221
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
26222
+ approvalPolicy: z.ZodOptional<z.ZodString>;
26223
+ sandboxMode: z.ZodOptional<z.ZodString>;
26224
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
26225
+ webSearch: z.ZodOptional<z.ZodBoolean>;
26226
+ }, z.core.$strict>>>;
25998
26227
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
25999
26228
  id: z.ZodString;
26000
26229
  title: z.ZodString;
@@ -26034,6 +26263,17 @@ export declare const WSSessionOutboundSchema: z.ZodObject<{
26034
26263
  }>;
26035
26264
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26036
26265
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
26266
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
26267
+ provider: z.ZodOptional<z.ZodString>;
26268
+ model: z.ZodOptional<z.ZodString>;
26269
+ modeId: z.ZodOptional<z.ZodString>;
26270
+ systemPrompt: z.ZodOptional<z.ZodString>;
26271
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
26272
+ approvalPolicy: z.ZodOptional<z.ZodString>;
26273
+ sandboxMode: z.ZodOptional<z.ZodString>;
26274
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
26275
+ webSearch: z.ZodOptional<z.ZodBoolean>;
26276
+ }, z.core.$strict>>>;
26037
26277
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
26038
26278
  id: z.ZodString;
26039
26279
  title: z.ZodString;
@@ -30656,6 +30896,17 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
30656
30896
  parallelizable: z.ZodBoolean;
30657
30897
  estimatedMinutes: z.ZodNumber;
30658
30898
  agentType: z.ZodOptional<z.ZodString>;
30899
+ agentConfig: z.ZodOptional<z.ZodObject<{
30900
+ provider: z.ZodOptional<z.ZodString>;
30901
+ model: z.ZodOptional<z.ZodString>;
30902
+ modeId: z.ZodOptional<z.ZodString>;
30903
+ systemPrompt: z.ZodOptional<z.ZodString>;
30904
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
30905
+ approvalPolicy: z.ZodOptional<z.ZodString>;
30906
+ sandboxMode: z.ZodOptional<z.ZodString>;
30907
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
30908
+ webSearch: z.ZodOptional<z.ZodBoolean>;
30909
+ }, z.core.$strict>>;
30659
30910
  targetFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
30660
30911
  }, z.core.$strip>>;
30661
30912
  }, z.core.$strip>;
@@ -30664,6 +30915,17 @@ export declare const WSInboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
30664
30915
  model: z.ZodOptional<z.ZodString>;
30665
30916
  title: z.ZodOptional<z.ZodString>;
30666
30917
  labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
30918
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
30919
+ provider: z.ZodOptional<z.ZodString>;
30920
+ model: z.ZodOptional<z.ZodString>;
30921
+ modeId: z.ZodOptional<z.ZodString>;
30922
+ systemPrompt: z.ZodOptional<z.ZodString>;
30923
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
30924
+ approvalPolicy: z.ZodOptional<z.ZodString>;
30925
+ sandboxMode: z.ZodOptional<z.ZodString>;
30926
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
30927
+ webSearch: z.ZodOptional<z.ZodBoolean>;
30928
+ }, z.core.$strict>>>;
30667
30929
  }, z.core.$strip>, z.ZodObject<{
30668
30930
  type: z.ZodLiteral<"diagnostics.request">;
30669
30931
  requestId: z.ZodString;
@@ -35529,6 +35791,17 @@ export declare const WSOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObje
35529
35791
  }>;
35530
35792
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
35531
35793
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
35794
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
35795
+ provider: z.ZodOptional<z.ZodString>;
35796
+ model: z.ZodOptional<z.ZodString>;
35797
+ modeId: z.ZodOptional<z.ZodString>;
35798
+ systemPrompt: z.ZodOptional<z.ZodString>;
35799
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
35800
+ approvalPolicy: z.ZodOptional<z.ZodString>;
35801
+ sandboxMode: z.ZodOptional<z.ZodString>;
35802
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
35803
+ webSearch: z.ZodOptional<z.ZodBoolean>;
35804
+ }, z.core.$strict>>>;
35532
35805
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
35533
35806
  id: z.ZodString;
35534
35807
  title: z.ZodString;
@@ -35568,6 +35841,17 @@ export declare const WSOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObje
35568
35841
  }>;
35569
35842
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
35570
35843
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
35844
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
35845
+ provider: z.ZodOptional<z.ZodString>;
35846
+ model: z.ZodOptional<z.ZodString>;
35847
+ modeId: z.ZodOptional<z.ZodString>;
35848
+ systemPrompt: z.ZodOptional<z.ZodString>;
35849
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
35850
+ approvalPolicy: z.ZodOptional<z.ZodString>;
35851
+ sandboxMode: z.ZodOptional<z.ZodString>;
35852
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
35853
+ webSearch: z.ZodOptional<z.ZodBoolean>;
35854
+ }, z.core.$strict>>>;
35571
35855
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
35572
35856
  id: z.ZodString;
35573
35857
  title: z.ZodString;
@@ -35607,6 +35891,17 @@ export declare const WSOutboundMessageSchema: z.ZodDiscriminatedUnion<[z.ZodObje
35607
35891
  }>;
35608
35892
  title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
35609
35893
  labels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
35894
+ agentPresets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
35895
+ provider: z.ZodOptional<z.ZodString>;
35896
+ model: z.ZodOptional<z.ZodString>;
35897
+ modeId: z.ZodOptional<z.ZodString>;
35898
+ systemPrompt: z.ZodOptional<z.ZodString>;
35899
+ thinkingOptionId: z.ZodOptional<z.ZodString>;
35900
+ approvalPolicy: z.ZodOptional<z.ZodString>;
35901
+ sandboxMode: z.ZodOptional<z.ZodString>;
35902
+ networkAccess: z.ZodOptional<z.ZodBoolean>;
35903
+ webSearch: z.ZodOptional<z.ZodBoolean>;
35904
+ }, z.core.$strict>>>;
35610
35905
  phases: z.ZodDefault<z.ZodArray<z.ZodObject<{
35611
35906
  id: z.ZodString;
35612
35907
  title: z.ZodString;
package/dist/messages.js CHANGED
@@ -156,6 +156,38 @@ export const WorkflowPhaseSchema = z.object({
156
156
  storyCount: z.number().int().nonnegative().optional(),
157
157
  completedStoryCount: z.number().int().nonnegative().optional(),
158
158
  });
159
+ /**
160
+ * Per-step agent config (Epic 2, Story 2.1). A CLOSED subset of the daemon's
161
+ * `AgentSessionConfig`: every key optional, and `.strict()` so an unknown key is a
162
+ * parse ERROR rather than a silent strip. Silent-strip is the failure this schema
163
+ * exists to prevent: a typo'd `provider:` would otherwise spawn the default agent
164
+ * with no signal, which is exactly the "silent fallback to the default" the epic forbids.
165
+ *
166
+ * Deliberately excluded, each for a reason:
167
+ * - `cwd`: workflow-owned. A step must not relocate its child. Also forced at merge time.
168
+ * - `extra` / `mcpServers` / `featureValues`: arbitrary nested structure, i.e. the
169
+ * "deterministic via code" escape hatch this PRD exists to close.
170
+ * - `title`: owned by `initialTitle`, which the manager sets from `node.title`.
171
+ * - `daemonAppendSystemPrompt`: runtime-only, never persisted (`agent-sdk-types.ts:565-568`).
172
+ * - `internal`: workflow children must stay listable (`AgentManager.listAgents` filters
173
+ * on `!agent.internal`, `agent-manager.ts:810-813`).
174
+ *
175
+ * Widening this vocabulary requires a schema edit AND a new test. It must never widen
176
+ * by accident from a config file.
177
+ */
178
+ export const WorkflowAgentPresetSchema = z
179
+ .object({
180
+ provider: z.string().optional(),
181
+ model: z.string().optional(),
182
+ modeId: z.string().optional(),
183
+ systemPrompt: z.string().optional(),
184
+ thinkingOptionId: z.string().optional(),
185
+ approvalPolicy: z.string().optional(),
186
+ sandboxMode: z.string().optional(),
187
+ networkAccess: z.boolean().optional(),
188
+ webSearch: z.boolean().optional(),
189
+ })
190
+ .strict();
159
191
  // Live/wire snapshot of a workflow. New fields must be additive (.optional() with a
160
192
  // sensible default) to preserve back-compat — a 6-month-old client must still parse this.
161
193
  export const WorkflowSnapshotSchema = z.object({
@@ -164,6 +196,12 @@ export const WorkflowSnapshotSchema = z.object({
164
196
  status: WorkflowStatusSchema,
165
197
  title: z.string().nullable().optional(),
166
198
  labels: z.record(z.string(), z.string()).default({}),
199
+ // Epic 2, Story 2.2: named agent presets a task's `agentType` selects. `.optional()`
200
+ // with NO `.default({})` on purpose: a default would stamp an empty map onto every
201
+ // record written before this field existed, and would make "an old record has no
202
+ // presets" untestable. Placed on the SNAPSHOT rather than only on the stored record so
203
+ // `STORED_WORKFLOW_SCHEMA` stays a bare alias and `persist` needs no change.
204
+ agentPresets: z.record(z.string(), WorkflowAgentPresetSchema).optional(),
167
205
  phases: z.array(WorkflowPhaseSchema).default([]),
168
206
  childAgentIds: z.array(z.string()).default([]),
169
207
  totalStoryCount: z.number().int().nonnegative().optional(),
@@ -270,6 +308,10 @@ export const WorkflowEventsResponseSchema = z.object({
270
308
  // by BOTH this client-facing `workflow.start` RPC and the `workflow_start` MCP
271
309
  // tool (no second divergent copy). The CLI's `child_process` / `claude -p`
272
310
  // spawning is deliberately NOT modelled — `agentManager.createAgent` replaces it.
311
+ // `WorkflowAgentPresetSchema` / `WorkflowAgentPreset` are declared ABOVE
312
+ // `WorkflowSnapshotSchema` (Epic 2, Story 2.2): the snapshot references the preset
313
+ // schema, and a `const` referenced before its initialiser runs is a runtime TDZ
314
+ // `ReferenceError` at module load, which `tsc --noEmit` does not catch.
273
315
  /** One task node — becomes one child agent when the workflow starts. */
274
316
  export const WorkflowTaskNodeSchema = z.object({
275
317
  id: z.string(),
@@ -281,6 +323,7 @@ export const WorkflowTaskNodeSchema = z.object({
281
323
  parallelizable: z.boolean(),
282
324
  estimatedMinutes: z.number(),
283
325
  agentType: z.string().optional(),
326
+ agentConfig: WorkflowAgentPresetSchema.optional(),
284
327
  targetFiles: z.array(z.string()).optional(),
285
328
  });
286
329
  /** Decomposed task graph driving child-agent spawning. */
@@ -318,6 +361,7 @@ export const WorkflowStartRequestSchema = z.object({
318
361
  model: z.string().optional(),
319
362
  title: z.string().optional(),
320
363
  labels: z.record(z.string(), z.string()).optional(),
364
+ agentPresets: z.record(z.string(), WorkflowAgentPresetSchema).optional(),
321
365
  });
322
366
  export const WorkflowStartResponseSchema = z.object({
323
367
  type: z.literal("workflow.start.response"),
@@ -3479,6 +3479,17 @@ export declare const WSOutboundMessageSchema: {
3479
3479
  }>;
3480
3480
  title: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
3481
3481
  labels: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
3482
+ agentPresets: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
3483
+ provider: import("zod").ZodOptional<import("zod").ZodString>;
3484
+ model: import("zod").ZodOptional<import("zod").ZodString>;
3485
+ modeId: import("zod").ZodOptional<import("zod").ZodString>;
3486
+ systemPrompt: import("zod").ZodOptional<import("zod").ZodString>;
3487
+ thinkingOptionId: import("zod").ZodOptional<import("zod").ZodString>;
3488
+ approvalPolicy: import("zod").ZodOptional<import("zod").ZodString>;
3489
+ sandboxMode: import("zod").ZodOptional<import("zod").ZodString>;
3490
+ networkAccess: import("zod").ZodOptional<import("zod").ZodBoolean>;
3491
+ webSearch: import("zod").ZodOptional<import("zod").ZodBoolean>;
3492
+ }, import("zod/v4/core").$strict>>>;
3482
3493
  phases: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
3483
3494
  id: import("zod").ZodString;
3484
3495
  title: import("zod").ZodString;
@@ -3518,6 +3529,17 @@ export declare const WSOutboundMessageSchema: {
3518
3529
  }>;
3519
3530
  title: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
3520
3531
  labels: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
3532
+ agentPresets: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
3533
+ provider: import("zod").ZodOptional<import("zod").ZodString>;
3534
+ model: import("zod").ZodOptional<import("zod").ZodString>;
3535
+ modeId: import("zod").ZodOptional<import("zod").ZodString>;
3536
+ systemPrompt: import("zod").ZodOptional<import("zod").ZodString>;
3537
+ thinkingOptionId: import("zod").ZodOptional<import("zod").ZodString>;
3538
+ approvalPolicy: import("zod").ZodOptional<import("zod").ZodString>;
3539
+ sandboxMode: import("zod").ZodOptional<import("zod").ZodString>;
3540
+ networkAccess: import("zod").ZodOptional<import("zod").ZodBoolean>;
3541
+ webSearch: import("zod").ZodOptional<import("zod").ZodBoolean>;
3542
+ }, import("zod/v4/core").$strict>>>;
3521
3543
  phases: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
3522
3544
  id: import("zod").ZodString;
3523
3545
  title: import("zod").ZodString;
@@ -3557,6 +3579,17 @@ export declare const WSOutboundMessageSchema: {
3557
3579
  }>;
3558
3580
  title: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
3559
3581
  labels: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodString>>;
3582
+ agentPresets: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{
3583
+ provider: import("zod").ZodOptional<import("zod").ZodString>;
3584
+ model: import("zod").ZodOptional<import("zod").ZodString>;
3585
+ modeId: import("zod").ZodOptional<import("zod").ZodString>;
3586
+ systemPrompt: import("zod").ZodOptional<import("zod").ZodString>;
3587
+ thinkingOptionId: import("zod").ZodOptional<import("zod").ZodString>;
3588
+ approvalPolicy: import("zod").ZodOptional<import("zod").ZodString>;
3589
+ sandboxMode: import("zod").ZodOptional<import("zod").ZodString>;
3590
+ networkAccess: import("zod").ZodOptional<import("zod").ZodBoolean>;
3591
+ webSearch: import("zod").ZodOptional<import("zod").ZodBoolean>;
3592
+ }, import("zod/v4/core").$strict>>>;
3560
3593
  phases: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
3561
3594
  id: import("zod").ZodString;
3562
3595
  title: import("zod").ZodString;
@@ -0,0 +1,33 @@
1
+ import { type LoopParamValues } from "../fleet/params.js";
2
+ import type { WorkflowAgentPreset, WorkflowTaskGraph } from "../messages.js";
3
+ import { type WorkflowDefinition } from "./definition.js";
4
+ /** Ambient run identity. Passed IN so the compiler stays a pure function of its
5
+ * arguments; the CLI stamps these. Never produced here. */
6
+ export interface WorkflowCompileSession {
7
+ id: string;
8
+ createdAt: string;
9
+ outputDirectory: string;
10
+ }
11
+ export interface CompileWorkflowArgs {
12
+ definition: WorkflowDefinition;
13
+ values: LoopParamValues;
14
+ session: WorkflowCompileSession;
15
+ }
16
+ export interface CompiledWorkflow {
17
+ graph: WorkflowTaskGraph;
18
+ agentPresets: Record<string, WorkflowAgentPreset>;
19
+ }
20
+ /**
21
+ * Compile one definition against one set of input values.
22
+ *
23
+ * Validates BEFORE it emits, and reports EVERY issue in one throw rather than stopping
24
+ * at the first: a definition can carry a bad input value, an undeclared token and an
25
+ * unknown agent name simultaneously, and three sequential throws would hide the second
26
+ * and third until the first is fixed. On any issue nothing is returned and no partial
27
+ * graph is observable.
28
+ *
29
+ * @throws {WorkflowDefinitionError} carrying the union of the value issues, the
30
+ * definition issues, and the unresolved-reference issues this module adds.
31
+ */
32
+ export declare function compileWorkflowDefinition(args: CompileWorkflowArgs): CompiledWorkflow;
33
+ //# sourceMappingURL=compile.d.ts.map