@otto-code/protocol 0.5.2 → 0.5.5

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.
@@ -8,6 +8,7 @@ export interface AgentModeVisuals {
8
8
  }
9
9
  export type AgentProviderModeDefinition = Omit<AgentMode, "icon" | "colorTier"> & AgentModeVisuals & {
10
10
  isUnattended?: boolean;
11
+ userSelectable?: boolean;
11
12
  };
12
13
  export interface AgentProviderDefinition {
13
14
  id: string;
@@ -30,5 +31,14 @@ export declare const AGENT_PROVIDER_IDS: string[];
30
31
  export declare const AgentProviderSchema: z.ZodString;
31
32
  export declare function isValidAgentProvider(value: string, validIds?: Iterable<string>): boolean;
32
33
  export declare function getUnattendedModeId(provider: string, definitions?: AgentProviderDefinition[]): string | undefined;
34
+ /**
35
+ * Whether a user may pick this mode themselves. False only for modes explicitly
36
+ * flagged `userSelectable: false` in the static manifest (Claude "dontAsk") — a
37
+ * system-assigned mode that agents can run in but no one selects by hand. Unknown
38
+ * modes (dynamic/ACP, custom providers) default to selectable. The flag is a
39
+ * static property of the mode, so this always consults the built-in manifest
40
+ * rather than snapshot-derived definitions (which don't carry it).
41
+ */
42
+ export declare function isUserSelectableMode(provider: string, modeId: string): boolean;
33
43
  export declare function getModeVisuals(provider: string, modeId: string, definitions: AgentProviderDefinition[]): AgentModeVisuals | undefined;
34
44
  //# sourceMappingURL=provider-manifest.d.ts.map
@@ -38,6 +38,10 @@ const CLAUDE_MODES = [
38
38
  icon: "ShieldCheck",
39
39
  colorTier: "moderate",
40
40
  isUnattended: true,
41
+ // System-assigned only: the coercion target for unattended runs and for Auto
42
+ // on models that can't run it (Haiku). Users never pick it — it's hidden from
43
+ // mode dropdowns and locks the control when it's an agent's active mode.
44
+ userSelectable: false,
41
45
  },
42
46
  {
43
47
  id: "bypassPermissions",
@@ -228,6 +232,19 @@ export function getUnattendedModeId(provider, definitions = [
228
232
  const definition = definitions.find((entry) => entry.id === provider);
229
233
  return definition?.modes.find((mode) => mode.isUnattended)?.id;
230
234
  }
235
+ /**
236
+ * Whether a user may pick this mode themselves. False only for modes explicitly
237
+ * flagged `userSelectable: false` in the static manifest (Claude "dontAsk") — a
238
+ * system-assigned mode that agents can run in but no one selects by hand. Unknown
239
+ * modes (dynamic/ACP, custom providers) default to selectable. The flag is a
240
+ * static property of the mode, so this always consults the built-in manifest
241
+ * rather than snapshot-derived definitions (which don't carry it).
242
+ */
243
+ export function isUserSelectableMode(provider, modeId) {
244
+ const definition = [...AGENT_PROVIDER_DEFINITIONS, ...DEV_AGENT_PROVIDER_DEFINITIONS].find((entry) => entry.id === provider);
245
+ const mode = definition?.modes.find((entry) => entry.id === modeId);
246
+ return mode?.userSelectable !== false;
247
+ }
231
248
  export function getModeVisuals(provider, modeId, definitions) {
232
249
  const definition = definitions.find((entry) => entry.id === provider);
233
250
  const mode = definition?.modes.find((m) => m.id === modeId);
@@ -121,12 +121,12 @@ export declare const ScheduleCreateResponseSchema: z.ZodObject<{
121
121
  schedule: z.ZodNullable<z.ZodObject<{
122
122
  prompt: z.ZodString;
123
123
  name: z.ZodNullable<z.ZodString>;
124
+ id: z.ZodString;
124
125
  status: z.ZodEnum<{
126
+ paused: "paused";
125
127
  completed: "completed";
126
128
  active: "active";
127
- paused: "paused";
128
129
  }>;
129
- id: z.ZodString;
130
130
  createdAt: z.ZodString;
131
131
  updatedAt: z.ZodString;
132
132
  cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -171,10 +171,13 @@ export declare const ScheduleCreateResponseSchema: z.ZodObject<{
171
171
  nextRunAt: z.ZodNullable<z.ZodString>;
172
172
  lastRunAt: z.ZodNullable<z.ZodString>;
173
173
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
174
- succeeded: "succeeded";
175
174
  failed: "failed";
175
+ succeeded: "succeeded";
176
176
  }>>>;
177
177
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
178
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
179
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
180
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
178
181
  pausedAt: z.ZodNullable<z.ZodString>;
179
182
  expiresAt: z.ZodNullable<z.ZodString>;
180
183
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -189,12 +192,12 @@ export declare const ScheduleListResponseSchema: z.ZodObject<{
189
192
  schedules: z.ZodArray<z.ZodObject<{
190
193
  prompt: z.ZodString;
191
194
  name: z.ZodNullable<z.ZodString>;
195
+ id: z.ZodString;
192
196
  status: z.ZodEnum<{
197
+ paused: "paused";
193
198
  completed: "completed";
194
199
  active: "active";
195
- paused: "paused";
196
200
  }>;
197
- id: z.ZodString;
198
201
  createdAt: z.ZodString;
199
202
  updatedAt: z.ZodString;
200
203
  cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -239,10 +242,13 @@ export declare const ScheduleListResponseSchema: z.ZodObject<{
239
242
  nextRunAt: z.ZodNullable<z.ZodString>;
240
243
  lastRunAt: z.ZodNullable<z.ZodString>;
241
244
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
242
- succeeded: "succeeded";
243
245
  failed: "failed";
246
+ succeeded: "succeeded";
244
247
  }>>>;
245
248
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
249
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
250
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
251
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
246
252
  pausedAt: z.ZodNullable<z.ZodString>;
247
253
  expiresAt: z.ZodNullable<z.ZodString>;
248
254
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -298,19 +304,22 @@ export declare const ScheduleInspectResponseSchema: z.ZodObject<{
298
304
  }, z.core.$strip>;
299
305
  }, z.core.$strip>], "type">;
300
306
  status: z.ZodEnum<{
307
+ paused: "paused";
301
308
  completed: "completed";
302
309
  active: "active";
303
- paused: "paused";
304
310
  }>;
305
311
  createdAt: z.ZodString;
306
312
  updatedAt: z.ZodString;
307
313
  nextRunAt: z.ZodNullable<z.ZodString>;
308
314
  lastRunAt: z.ZodNullable<z.ZodString>;
309
315
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
310
- succeeded: "succeeded";
311
316
  failed: "failed";
317
+ succeeded: "succeeded";
312
318
  }>>>;
313
319
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
320
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
321
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
322
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
314
323
  pausedAt: z.ZodNullable<z.ZodString>;
315
324
  expiresAt: z.ZodNullable<z.ZodString>;
316
325
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -321,11 +330,14 @@ export declare const ScheduleInspectResponseSchema: z.ZodObject<{
321
330
  endedAt: z.ZodNullable<z.ZodString>;
322
331
  status: z.ZodEnum<{
323
332
  running: "running";
324
- succeeded: "succeeded";
325
333
  failed: "failed";
334
+ succeeded: "succeeded";
326
335
  }>;
327
336
  agentId: z.ZodNullable<z.ZodGUID>;
328
337
  workspaceId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
338
+ personalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
339
+ provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
340
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
329
341
  output: z.ZodNullable<z.ZodString>;
330
342
  error: z.ZodNullable<z.ZodString>;
331
343
  }, z.core.$strip>>;
@@ -344,11 +356,14 @@ export declare const ScheduleLogsResponseSchema: z.ZodObject<{
344
356
  endedAt: z.ZodNullable<z.ZodString>;
345
357
  status: z.ZodEnum<{
346
358
  running: "running";
347
- succeeded: "succeeded";
348
359
  failed: "failed";
360
+ succeeded: "succeeded";
349
361
  }>;
350
362
  agentId: z.ZodNullable<z.ZodGUID>;
351
363
  workspaceId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
364
+ personalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
365
+ provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
366
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
352
367
  output: z.ZodNullable<z.ZodString>;
353
368
  error: z.ZodNullable<z.ZodString>;
354
369
  }, z.core.$strip>>;
@@ -362,12 +377,12 @@ export declare const SchedulePauseResponseSchema: z.ZodObject<{
362
377
  schedule: z.ZodNullable<z.ZodObject<{
363
378
  prompt: z.ZodString;
364
379
  name: z.ZodNullable<z.ZodString>;
380
+ id: z.ZodString;
365
381
  status: z.ZodEnum<{
382
+ paused: "paused";
366
383
  completed: "completed";
367
384
  active: "active";
368
- paused: "paused";
369
385
  }>;
370
- id: z.ZodString;
371
386
  createdAt: z.ZodString;
372
387
  updatedAt: z.ZodString;
373
388
  cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -412,10 +427,13 @@ export declare const SchedulePauseResponseSchema: z.ZodObject<{
412
427
  nextRunAt: z.ZodNullable<z.ZodString>;
413
428
  lastRunAt: z.ZodNullable<z.ZodString>;
414
429
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
415
- succeeded: "succeeded";
416
430
  failed: "failed";
431
+ succeeded: "succeeded";
417
432
  }>>>;
418
433
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
434
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
435
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
436
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
419
437
  pausedAt: z.ZodNullable<z.ZodString>;
420
438
  expiresAt: z.ZodNullable<z.ZodString>;
421
439
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -430,12 +448,12 @@ export declare const ScheduleResumeResponseSchema: z.ZodObject<{
430
448
  schedule: z.ZodNullable<z.ZodObject<{
431
449
  prompt: z.ZodString;
432
450
  name: z.ZodNullable<z.ZodString>;
451
+ id: z.ZodString;
433
452
  status: z.ZodEnum<{
453
+ paused: "paused";
434
454
  completed: "completed";
435
455
  active: "active";
436
- paused: "paused";
437
456
  }>;
438
- id: z.ZodString;
439
457
  createdAt: z.ZodString;
440
458
  updatedAt: z.ZodString;
441
459
  cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -480,10 +498,13 @@ export declare const ScheduleResumeResponseSchema: z.ZodObject<{
480
498
  nextRunAt: z.ZodNullable<z.ZodString>;
481
499
  lastRunAt: z.ZodNullable<z.ZodString>;
482
500
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
483
- succeeded: "succeeded";
484
501
  failed: "failed";
502
+ succeeded: "succeeded";
485
503
  }>>>;
486
504
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
505
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
506
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
507
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
487
508
  pausedAt: z.ZodNullable<z.ZodString>;
488
509
  expiresAt: z.ZodNullable<z.ZodString>;
489
510
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -547,19 +568,22 @@ export declare const ScheduleRunOnceResponseSchema: z.ZodObject<{
547
568
  }, z.core.$strip>;
548
569
  }, z.core.$strip>], "type">;
549
570
  status: z.ZodEnum<{
571
+ paused: "paused";
550
572
  completed: "completed";
551
573
  active: "active";
552
- paused: "paused";
553
574
  }>;
554
575
  createdAt: z.ZodString;
555
576
  updatedAt: z.ZodString;
556
577
  nextRunAt: z.ZodNullable<z.ZodString>;
557
578
  lastRunAt: z.ZodNullable<z.ZodString>;
558
579
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
559
- succeeded: "succeeded";
560
580
  failed: "failed";
581
+ succeeded: "succeeded";
561
582
  }>>>;
562
583
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
584
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
585
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
586
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
563
587
  pausedAt: z.ZodNullable<z.ZodString>;
564
588
  expiresAt: z.ZodNullable<z.ZodString>;
565
589
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -570,11 +594,14 @@ export declare const ScheduleRunOnceResponseSchema: z.ZodObject<{
570
594
  endedAt: z.ZodNullable<z.ZodString>;
571
595
  status: z.ZodEnum<{
572
596
  running: "running";
573
- succeeded: "succeeded";
574
597
  failed: "failed";
598
+ succeeded: "succeeded";
575
599
  }>;
576
600
  agentId: z.ZodNullable<z.ZodGUID>;
577
601
  workspaceId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
602
+ personalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
603
+ provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
604
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
578
605
  output: z.ZodNullable<z.ZodString>;
579
606
  error: z.ZodNullable<z.ZodString>;
580
607
  }, z.core.$strip>>;
@@ -630,19 +657,22 @@ export declare const ScheduleUpdateResponseSchema: z.ZodObject<{
630
657
  }, z.core.$strip>;
631
658
  }, z.core.$strip>], "type">;
632
659
  status: z.ZodEnum<{
660
+ paused: "paused";
633
661
  completed: "completed";
634
662
  active: "active";
635
- paused: "paused";
636
663
  }>;
637
664
  createdAt: z.ZodString;
638
665
  updatedAt: z.ZodString;
639
666
  nextRunAt: z.ZodNullable<z.ZodString>;
640
667
  lastRunAt: z.ZodNullable<z.ZodString>;
641
668
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
642
- succeeded: "succeeded";
643
669
  failed: "failed";
670
+ succeeded: "succeeded";
644
671
  }>>>;
645
672
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
673
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
674
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
675
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
646
676
  pausedAt: z.ZodNullable<z.ZodString>;
647
677
  expiresAt: z.ZodNullable<z.ZodString>;
648
678
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -653,11 +683,14 @@ export declare const ScheduleUpdateResponseSchema: z.ZodObject<{
653
683
  endedAt: z.ZodNullable<z.ZodString>;
654
684
  status: z.ZodEnum<{
655
685
  running: "running";
656
- succeeded: "succeeded";
657
686
  failed: "failed";
687
+ succeeded: "succeeded";
658
688
  }>;
659
689
  agentId: z.ZodNullable<z.ZodGUID>;
660
690
  workspaceId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
691
+ personalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
692
+ provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
693
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
661
694
  output: z.ZodNullable<z.ZodString>;
662
695
  error: z.ZodNullable<z.ZodString>;
663
696
  }, z.core.$strip>>;
@@ -1,8 +1,8 @@
1
1
  import { z } from "zod";
2
2
  export declare const ScheduleStatusSchema: z.ZodEnum<{
3
+ paused: "paused";
3
4
  completed: "completed";
4
5
  active: "active";
5
- paused: "paused";
6
6
  }>;
7
7
  export type ScheduleStatus = z.infer<typeof ScheduleStatusSchema>;
8
8
  export declare const ScheduleCadenceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -53,11 +53,14 @@ export declare const ScheduleRunSchema: z.ZodObject<{
53
53
  endedAt: z.ZodNullable<z.ZodString>;
54
54
  status: z.ZodEnum<{
55
55
  running: "running";
56
- succeeded: "succeeded";
57
56
  failed: "failed";
57
+ succeeded: "succeeded";
58
58
  }>;
59
59
  agentId: z.ZodNullable<z.ZodGUID>;
60
60
  workspaceId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
61
+ personalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
+ provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
63
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
61
64
  output: z.ZodNullable<z.ZodString>;
62
65
  error: z.ZodNullable<z.ZodString>;
63
66
  }, z.core.$strip>;
@@ -106,19 +109,22 @@ export declare const StoredScheduleSchema: z.ZodObject<{
106
109
  }, z.core.$strip>;
107
110
  }, z.core.$strip>], "type">;
108
111
  status: z.ZodEnum<{
112
+ paused: "paused";
109
113
  completed: "completed";
110
114
  active: "active";
111
- paused: "paused";
112
115
  }>;
113
116
  createdAt: z.ZodString;
114
117
  updatedAt: z.ZodString;
115
118
  nextRunAt: z.ZodNullable<z.ZodString>;
116
119
  lastRunAt: z.ZodNullable<z.ZodString>;
117
120
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
118
- succeeded: "succeeded";
119
121
  failed: "failed";
122
+ succeeded: "succeeded";
120
123
  }>>>;
121
124
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
125
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
126
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
127
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
122
128
  pausedAt: z.ZodNullable<z.ZodString>;
123
129
  expiresAt: z.ZodNullable<z.ZodString>;
124
130
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -129,11 +135,14 @@ export declare const StoredScheduleSchema: z.ZodObject<{
129
135
  endedAt: z.ZodNullable<z.ZodString>;
130
136
  status: z.ZodEnum<{
131
137
  running: "running";
132
- succeeded: "succeeded";
133
138
  failed: "failed";
139
+ succeeded: "succeeded";
134
140
  }>;
135
141
  agentId: z.ZodNullable<z.ZodGUID>;
136
142
  workspaceId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
143
+ personalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
144
+ provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
145
+ model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
137
146
  output: z.ZodNullable<z.ZodString>;
138
147
  error: z.ZodNullable<z.ZodString>;
139
148
  }, z.core.$strip>>;
@@ -142,12 +151,12 @@ export type StoredSchedule = z.infer<typeof StoredScheduleSchema>;
142
151
  export declare const ScheduleSummarySchema: z.ZodObject<{
143
152
  prompt: z.ZodString;
144
153
  name: z.ZodNullable<z.ZodString>;
154
+ id: z.ZodString;
145
155
  status: z.ZodEnum<{
156
+ paused: "paused";
146
157
  completed: "completed";
147
158
  active: "active";
148
- paused: "paused";
149
159
  }>;
150
- id: z.ZodString;
151
160
  createdAt: z.ZodString;
152
161
  updatedAt: z.ZodString;
153
162
  cadence: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -192,10 +201,13 @@ export declare const ScheduleSummarySchema: z.ZodObject<{
192
201
  nextRunAt: z.ZodNullable<z.ZodString>;
193
202
  lastRunAt: z.ZodNullable<z.ZodString>;
194
203
  lastRunStatus: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
195
- succeeded: "succeeded";
196
204
  failed: "failed";
205
+ succeeded: "succeeded";
197
206
  }>>>;
198
207
  lastRunError: z.ZodOptional<z.ZodNullable<z.ZodString>>;
208
+ lastRunPersonalityName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
209
+ lastRunProvider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
210
+ lastRunModel: z.ZodOptional<z.ZodNullable<z.ZodString>>;
199
211
  pausedAt: z.ZodNullable<z.ZodString>;
200
212
  expiresAt: z.ZodNullable<z.ZodString>;
201
213
  maxRuns: z.ZodNullable<z.ZodNumber>;
@@ -57,6 +57,13 @@ export const ScheduleRunSchema = z.object({
57
57
  status: z.enum(["running", "succeeded", "failed"]),
58
58
  agentId: z.guid().nullable(),
59
59
  workspaceId: z.string().nullable().optional(),
60
+ // Who actually executed this run — the resolved personality (if any),
61
+ // provider, and model. Stamped when the run starts (so a failed run still
62
+ // records its executor). Optional for back-compat: runs written before these
63
+ // fields existed omit them.
64
+ personalityName: z.string().nullable().optional(),
65
+ provider: z.string().nullable().optional(),
66
+ model: z.string().nullable().optional(),
60
67
  output: z.string().nullable(),
61
68
  error: z.string().nullable(),
62
69
  });
@@ -73,6 +80,14 @@ export const StoredScheduleSchema = z.object({
73
80
  lastRunAt: z.string().nullable(),
74
81
  lastRunStatus: z.enum(["succeeded", "failed"]).nullable().optional(),
75
82
  lastRunError: z.string().nullable().optional(),
83
+ // Executor of the most recent run — mirrors the run-level fields above so the
84
+ // schedule card can show "who ran it last" (personality · provider · model)
85
+ // without loading the full run history (ScheduleSummary omits `runs`).
86
+ // Optional for back-compat: schedules that never ran, or predate these
87
+ // fields, omit them.
88
+ lastRunPersonalityName: z.string().nullable().optional(),
89
+ lastRunProvider: z.string().nullable().optional(),
90
+ lastRunModel: z.string().nullable().optional(),
76
91
  pausedAt: z.string().nullable(),
77
92
  expiresAt: z.string().nullable(),
78
93
  maxRuns: z.number().int().positive().nullable(),