@contraagent/api 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +102 -2
  2. package/dist/client.d.ts +54 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +68 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/derive.d.ts +81 -0
  7. package/dist/derive.d.ts.map +1 -0
  8. package/dist/derive.js +89 -0
  9. package/dist/derive.js.map +1 -0
  10. package/dist/export.d.ts +36 -0
  11. package/dist/export.d.ts.map +1 -0
  12. package/dist/export.js +130 -0
  13. package/dist/export.js.map +1 -0
  14. package/dist/feed.d.ts +27 -0
  15. package/dist/feed.d.ts.map +1 -0
  16. package/dist/feed.js +39 -0
  17. package/dist/feed.js.map +1 -0
  18. package/dist/index.d.ts +13 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +13 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/outcomes.d.ts +117 -0
  23. package/dist/outcomes.d.ts.map +1 -0
  24. package/dist/outcomes.js +201 -0
  25. package/dist/outcomes.js.map +1 -0
  26. package/dist/panels.d.ts +31 -0
  27. package/dist/panels.d.ts.map +1 -0
  28. package/dist/panels.js +12 -0
  29. package/dist/panels.js.map +1 -0
  30. package/dist/quota.d.ts +32 -0
  31. package/dist/quota.d.ts.map +1 -0
  32. package/dist/quota.js +46 -0
  33. package/dist/quota.js.map +1 -0
  34. package/dist/reasons.d.ts +25 -0
  35. package/dist/reasons.d.ts.map +1 -0
  36. package/dist/reasons.js +46 -0
  37. package/dist/reasons.js.map +1 -0
  38. package/dist/run-state.d.ts +62 -0
  39. package/dist/run-state.d.ts.map +1 -0
  40. package/dist/run-state.js +109 -0
  41. package/dist/run-state.js.map +1 -0
  42. package/dist/schema.d.ts +3718 -0
  43. package/dist/schema.d.ts.map +1 -0
  44. package/dist/schema.js +3 -0
  45. package/dist/schema.js.map +1 -0
  46. package/dist/spend.d.ts +46 -0
  47. package/dist/spend.d.ts.map +1 -0
  48. package/dist/spend.js +68 -0
  49. package/dist/spend.js.map +1 -0
  50. package/dist/store.d.ts +121 -0
  51. package/dist/store.d.ts.map +1 -0
  52. package/dist/store.js +286 -0
  53. package/dist/store.js.map +1 -0
  54. package/dist/types.d.ts +112 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +19 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +43 -4
  59. package/src/client.ts +119 -0
  60. package/src/derive.ts +155 -0
  61. package/src/export.ts +158 -0
  62. package/src/feed.ts +81 -0
  63. package/src/index.ts +12 -0
  64. package/src/outcomes.ts +267 -0
  65. package/src/panels.ts +51 -0
  66. package/src/quota.ts +78 -0
  67. package/src/reasons.ts +57 -0
  68. package/src/run-state.ts +166 -0
  69. package/src/schema.ts +3719 -0
  70. package/src/spend.ts +108 -0
  71. package/src/store.ts +338 -0
  72. package/src/types.ts +165 -0
@@ -0,0 +1,3718 @@
1
+ export type paths = {
2
+ "/api/info": {
3
+ parameters: {
4
+ query?: never;
5
+ header?: never;
6
+ path?: never;
7
+ cookie?: never;
8
+ };
9
+ /**
10
+ * Api Info
11
+ * @description The title, the panel tabs to offer, and the version of this contract.
12
+ */
13
+ get: operations["api_info_api_info_get"];
14
+ put?: never;
15
+ post?: never;
16
+ delete?: never;
17
+ options?: never;
18
+ head?: never;
19
+ patch?: never;
20
+ trace?: never;
21
+ };
22
+ "/api/runs": {
23
+ parameters: {
24
+ query?: never;
25
+ header?: never;
26
+ path?: never;
27
+ cookie?: never;
28
+ };
29
+ /**
30
+ * Api Runs
31
+ * @description Every run directory, newest activity first.
32
+ */
33
+ get: operations["api_runs_api_runs_get"];
34
+ put?: never;
35
+ post?: never;
36
+ delete?: never;
37
+ options?: never;
38
+ head?: never;
39
+ patch?: never;
40
+ trace?: never;
41
+ };
42
+ "/api/hosts": {
43
+ parameters: {
44
+ query?: never;
45
+ header?: never;
46
+ path?: never;
47
+ cookie?: never;
48
+ };
49
+ /**
50
+ * Api Hosts
51
+ * @description The hosts that drive the runs, and each account's utilization over every run.
52
+ */
53
+ get: operations["api_hosts_api_hosts_get"];
54
+ put?: never;
55
+ post?: never;
56
+ delete?: never;
57
+ options?: never;
58
+ head?: never;
59
+ patch?: never;
60
+ trace?: never;
61
+ };
62
+ "/api/trends": {
63
+ parameters: {
64
+ query?: never;
65
+ header?: never;
66
+ path?: never;
67
+ cookie?: never;
68
+ };
69
+ /**
70
+ * Api Trends
71
+ * @description What the runs of a period add up to, day by day.
72
+ */
73
+ get: operations["api_trends_api_trends_get"];
74
+ put?: never;
75
+ post?: never;
76
+ delete?: never;
77
+ options?: never;
78
+ head?: never;
79
+ patch?: never;
80
+ trace?: never;
81
+ };
82
+ "/api/trends/panels/{name}": {
83
+ parameters: {
84
+ query?: never;
85
+ header?: never;
86
+ path?: never;
87
+ cookie?: never;
88
+ };
89
+ /**
90
+ * Api Trend Panel
91
+ * @description One trend panel's body: its `fn(runs, period)` over the runs of the period, made on a
92
+ * panel thread, and kept for the same period over the same runs (`Monitor.trends_panel`).
93
+ */
94
+ get: operations["api_trend_panel_api_trends_panels__name__get"];
95
+ put?: never;
96
+ post?: never;
97
+ delete?: never;
98
+ options?: never;
99
+ head?: never;
100
+ patch?: never;
101
+ trace?: never;
102
+ };
103
+ "/api/runs/{run}/journal": {
104
+ parameters: {
105
+ query?: never;
106
+ header?: never;
107
+ path?: never;
108
+ cookie?: never;
109
+ };
110
+ /**
111
+ * Api Journal
112
+ * @description Journal rows after line offset `since`; `total` is the next offset.
113
+ */
114
+ get: operations["api_journal_api_runs__run__journal_get"];
115
+ put?: never;
116
+ post?: never;
117
+ delete?: never;
118
+ options?: never;
119
+ head?: never;
120
+ patch?: never;
121
+ trace?: never;
122
+ };
123
+ "/api/runs/{run}/plan": {
124
+ parameters: {
125
+ query?: never;
126
+ header?: never;
127
+ path?: never;
128
+ cookie?: never;
129
+ };
130
+ /**
131
+ * Api Plan
132
+ * @description Every queued task with its dependencies and state, and the groups the UI draws as columns.
133
+ */
134
+ get: operations["api_plan_api_runs__run__plan_get"];
135
+ put?: never;
136
+ post?: never;
137
+ delete?: never;
138
+ options?: never;
139
+ head?: never;
140
+ patch?: never;
141
+ trace?: never;
142
+ };
143
+ "/api/runs/{run}/outputs": {
144
+ parameters: {
145
+ query?: never;
146
+ header?: never;
147
+ path?: never;
148
+ cookie?: never;
149
+ };
150
+ /**
151
+ * Api Outputs
152
+ * @description Every declared output/input contract: its file, the model it must satisfy, its status.
153
+ */
154
+ get: operations["api_outputs_api_runs__run__outputs_get"];
155
+ put?: never;
156
+ post?: never;
157
+ delete?: never;
158
+ options?: never;
159
+ head?: never;
160
+ patch?: never;
161
+ trace?: never;
162
+ };
163
+ "/api/runs/{run}/definitions": {
164
+ parameters: {
165
+ query?: never;
166
+ header?: never;
167
+ path?: never;
168
+ cookie?: never;
169
+ };
170
+ /**
171
+ * Api Definitions
172
+ * @description What defined each kind of task in this run.
173
+ */
174
+ get: operations["api_definitions_api_runs__run__definitions_get"];
175
+ put?: never;
176
+ post?: never;
177
+ delete?: never;
178
+ options?: never;
179
+ head?: never;
180
+ patch?: never;
181
+ trace?: never;
182
+ };
183
+ "/api/runs/{run}/cursor": {
184
+ parameters: {
185
+ query?: never;
186
+ header?: never;
187
+ path?: never;
188
+ cookie?: never;
189
+ };
190
+ /**
191
+ * Api Cursor
192
+ * @description The resume cursor; `{}` when the run keeps none.
193
+ */
194
+ get: operations["api_cursor_api_runs__run__cursor_get"];
195
+ put?: never;
196
+ post?: never;
197
+ delete?: never;
198
+ options?: never;
199
+ head?: never;
200
+ patch?: never;
201
+ trace?: never;
202
+ };
203
+ "/api/runs/{run}/procs": {
204
+ parameters: {
205
+ query?: never;
206
+ header?: never;
207
+ path?: never;
208
+ cookie?: never;
209
+ };
210
+ /**
211
+ * Api Procs
212
+ * @description The run's live agent launches, process tree and Python tasks.
213
+ */
214
+ get: operations["api_procs_api_runs__run__procs_get"];
215
+ put?: never;
216
+ post?: never;
217
+ delete?: never;
218
+ options?: never;
219
+ head?: never;
220
+ patch?: never;
221
+ trace?: never;
222
+ };
223
+ "/api/runs/{run}/task/{key}": {
224
+ parameters: {
225
+ query?: never;
226
+ header?: never;
227
+ path?: never;
228
+ cookie?: never;
229
+ };
230
+ /**
231
+ * Api Task
232
+ * @description One task, by its key: journal rows, live launches, definition, input/output, transcript name.
233
+ */
234
+ get: operations["api_task_api_runs__run__task__key__get"];
235
+ put?: never;
236
+ post?: never;
237
+ delete?: never;
238
+ options?: never;
239
+ head?: never;
240
+ patch?: never;
241
+ trace?: never;
242
+ };
243
+ "/api/runs/{run}/stream/{key}": {
244
+ parameters: {
245
+ query?: never;
246
+ header?: never;
247
+ path?: never;
248
+ cookie?: never;
249
+ };
250
+ /**
251
+ * Api Stream
252
+ * @description A page of task `key`'s normalized transcript from line `since`; `since=0` is the tail page.
253
+ */
254
+ get: operations["api_stream_api_runs__run__stream__key__get"];
255
+ put?: never;
256
+ post?: never;
257
+ delete?: never;
258
+ options?: never;
259
+ head?: never;
260
+ patch?: never;
261
+ trace?: never;
262
+ };
263
+ "/api/runs/{run}/panels/{name}": {
264
+ parameters: {
265
+ query?: never;
266
+ header?: never;
267
+ path?: never;
268
+ cookie?: never;
269
+ };
270
+ /**
271
+ * Api Panel
272
+ * @description One run panel's body: a typed body (tiles, a table, charts), or any JSON object;
273
+ * made on a panel thread.
274
+ */
275
+ get: operations["api_panel_api_runs__run__panels__name__get"];
276
+ put?: never;
277
+ post?: never;
278
+ delete?: never;
279
+ options?: never;
280
+ head?: never;
281
+ patch?: never;
282
+ trace?: never;
283
+ };
284
+ "/events": {
285
+ parameters: {
286
+ query?: never;
287
+ header?: never;
288
+ path?: never;
289
+ cookie?: never;
290
+ };
291
+ /**
292
+ * Events
293
+ * @description The run, live: journal rows as they land, then each other view when it changes.
294
+ */
295
+ get: operations["events_events_get"];
296
+ put?: never;
297
+ post?: never;
298
+ delete?: never;
299
+ options?: never;
300
+ head?: never;
301
+ patch?: never;
302
+ trace?: never;
303
+ };
304
+ "/events/stream": {
305
+ parameters: {
306
+ query?: never;
307
+ header?: never;
308
+ path?: never;
309
+ cookie?: never;
310
+ };
311
+ /**
312
+ * Events Stream
313
+ * @description Task `key`'s transcript, live: the tail page, then the events after it as they are written.
314
+ */
315
+ get: operations["events_stream_events_stream_get"];
316
+ put?: never;
317
+ post?: never;
318
+ delete?: never;
319
+ options?: never;
320
+ head?: never;
321
+ patch?: never;
322
+ trace?: never;
323
+ };
324
+ };
325
+ export type webhooks = Record<string, never>;
326
+ export type components = {
327
+ schemas: {
328
+ /**
329
+ * AccountQuota
330
+ * @description One account's subscription utilization over a run. `last` was taken when the
331
+ * account's last session started, so it leaves out that session's own use.
332
+ */
333
+ AccountQuota: {
334
+ /** Credential */
335
+ credential: string;
336
+ /**
337
+ * Account
338
+ * @description the account the readings are of (`QuotaReading.account`); empty when not known
339
+ * @default
340
+ */
341
+ account?: string;
342
+ first: components["schemas"]["QuotaReading"];
343
+ last: components["schemas"]["QuotaReading"];
344
+ /**
345
+ * Rests
346
+ * @description its rests now (`/api/hosts`): those a live run began and that have not ended, nor passed their `until`
347
+ */
348
+ rests?: components["schemas"]["CredentialRest"][];
349
+ };
350
+ /**
351
+ * AgentProcess
352
+ * @description One live agent launch: the topmost process of a coding-agent CLI, found by its
353
+ * `CONTRAAGENT_*` environment; or, for an agent behind a library-call backend (no
354
+ * child process), the run's own process, from its in-flight marker, with empty
355
+ * `cmd`, `full_cmd`, `role`, `model` and `plugin`.
356
+ */
357
+ AgentProcess: {
358
+ /** Pid */
359
+ pid: number;
360
+ /** Age S */
361
+ age_s: number;
362
+ /**
363
+ * Cmd
364
+ * @description the first three words of the command line
365
+ */
366
+ cmd: string;
367
+ /** Full Cmd */
368
+ full_cmd: string;
369
+ /** Children */
370
+ children?: components["schemas"]["ProcNode"][];
371
+ /** Key */
372
+ key: string;
373
+ /** Kind */
374
+ kind: string;
375
+ /** Unit */
376
+ unit: string;
377
+ /**
378
+ * Role
379
+ * @description the role it runs as, from the prompt's TELEMETRY line; empty when none
380
+ */
381
+ role: string;
382
+ /** Model */
383
+ model: string;
384
+ /** Plugin */
385
+ plugin: string;
386
+ };
387
+ /**
388
+ * BlocksBody
389
+ * @description Bodies one under another: a panel of several parts.
390
+ */
391
+ BlocksBody: {
392
+ /**
393
+ * Title
394
+ * @description a heading over the body
395
+ */
396
+ title?: string | null;
397
+ /**
398
+ * Collapsed
399
+ * @description shown folded, under its title
400
+ * @default false
401
+ */
402
+ collapsed?: boolean;
403
+ /**
404
+ * Type
405
+ * @default blocks
406
+ * @constant
407
+ */
408
+ type?: "blocks";
409
+ /** Blocks */
410
+ blocks: (components["schemas"]["TilesBody"] | components["schemas"]["TableBody"] | components["schemas"]["ColumnsBody"] | components["schemas"]["LinesBody"] | components["schemas"]["HeatmapBody"] | components["schemas"]["HBarsBody"] | components["schemas"]["StatusGridBody"] | components["schemas"]["NoteBody"] | components["schemas"]["BlocksBody"] | {
411
+ [key: string]: unknown;
412
+ })[];
413
+ };
414
+ /**
415
+ * Changes
416
+ * @description The files one attempt changed under its task's `changes` patterns, as paths relative
417
+ * to the working directory: those it `created`, `modified` and `deleted`.
418
+ */
419
+ Changes: {
420
+ /**
421
+ * Created
422
+ * @default []
423
+ */
424
+ created?: string[];
425
+ /**
426
+ * Modified
427
+ * @default []
428
+ */
429
+ modified?: string[];
430
+ /**
431
+ * Deleted
432
+ * @default []
433
+ */
434
+ deleted?: string[];
435
+ /**
436
+ * Removed
437
+ * @default []
438
+ */
439
+ removed?: string[];
440
+ } & {
441
+ [key: string]: unknown;
442
+ };
443
+ /**
444
+ * ChartSeries
445
+ * @description One series: a value per label of the chart's `x`; null where it has none.
446
+ */
447
+ ChartSeries: {
448
+ /** Name */
449
+ name: string;
450
+ /** Values */
451
+ values: (number | null)[];
452
+ };
453
+ /**
454
+ * ColumnsBody
455
+ * @description Vertical bars, one group per label of `x`; `stacked` puts the series of a label on one bar.
456
+ */
457
+ ColumnsBody: {
458
+ /**
459
+ * Title
460
+ * @description a heading over the body
461
+ */
462
+ title?: string | null;
463
+ /**
464
+ * Collapsed
465
+ * @description shown folded, under its title
466
+ * @default false
467
+ */
468
+ collapsed?: boolean;
469
+ /**
470
+ * Type
471
+ * @default columns
472
+ * @constant
473
+ */
474
+ type?: "columns";
475
+ /** X */
476
+ x: string[];
477
+ /** Series */
478
+ series: components["schemas"]["ChartSeries"][];
479
+ /** Unit */
480
+ unit?: ("usd" | "pct" | "duration" | "tokens" | "datetime" | "number") | null;
481
+ /**
482
+ * Stacked
483
+ * @default false
484
+ */
485
+ stacked?: boolean;
486
+ };
487
+ /**
488
+ * ContractField
489
+ * @description One top-level field of the model a contract file must satisfy.
490
+ */
491
+ ContractField: {
492
+ /** Name */
493
+ name: string;
494
+ /**
495
+ * Type
496
+ * @description JSON-schema type, `list[...]`, a `$ref` name, or `a|b` for a union
497
+ */
498
+ type: string;
499
+ /** Required */
500
+ required: boolean;
501
+ };
502
+ /**
503
+ * ContractRecord
504
+ * @description What one task declared it reads and leaves behind (`contracts/<key>.json`).
505
+ */
506
+ ContractRecord: {
507
+ /** Key */
508
+ key: string;
509
+ /**
510
+ * Kind
511
+ * @default
512
+ */
513
+ kind?: string;
514
+ /**
515
+ * Unit
516
+ * @default
517
+ */
518
+ unit?: string;
519
+ /**
520
+ * Executor
521
+ * @default agent
522
+ * @enum {string}
523
+ */
524
+ executor?: "agent" | "python";
525
+ /**
526
+ * Params
527
+ * @description the task's params that are strings, numbers or booleans; an earlier task's output is one of `inputs`
528
+ */
529
+ params?: {
530
+ [key: string]: string | number | boolean;
531
+ };
532
+ /** Outputs */
533
+ outputs?: components["schemas"]["ContractSpec"][];
534
+ /** Inputs */
535
+ inputs?: components["schemas"]["ContractSpec"][];
536
+ } & {
537
+ [key: string]: unknown;
538
+ };
539
+ /**
540
+ * ContractSpec
541
+ * @description One declared `OutputContract` / `InputContract` (its record, passed through,
542
+ * minus the raw JSON schema, which `fields` summarizes). `status`, `rounds`
543
+ * and `errors` are on outputs only.
544
+ */
545
+ ContractSpec: {
546
+ /**
547
+ * Io
548
+ * @enum {string}
549
+ */
550
+ io: "output" | "input";
551
+ /** Path */
552
+ path: string;
553
+ /**
554
+ * Producer
555
+ * @description input: the key of the task whose output it is
556
+ */
557
+ producer?: string | null;
558
+ /** Schema Name */
559
+ schema_name: string;
560
+ /**
561
+ * Schema Ref
562
+ * @default
563
+ */
564
+ schema_ref?: string;
565
+ /** Fresh */
566
+ fresh?: boolean | null;
567
+ /** Required */
568
+ required?: boolean | null;
569
+ /** Validators */
570
+ validators?: string[];
571
+ /**
572
+ * Preserve
573
+ * @description output: JSON pointers to the parts of the file the task keeps as they were (`*`: every member)
574
+ */
575
+ preserve?: string[];
576
+ file: components["schemas"]["FileView"];
577
+ /** Fields */
578
+ fields: components["schemas"]["ContractField"][];
579
+ /** Status */
580
+ status?: ("valid" | "invalid" | "refused" | "pending" | "failed" | "running") | null;
581
+ /**
582
+ * Rounds
583
+ * @description rounds it took to pass, when the journal recorded it
584
+ */
585
+ rounds?: number | null;
586
+ /** Errors */
587
+ errors?: string[];
588
+ } & {
589
+ [key: string]: unknown;
590
+ };
591
+ /**
592
+ * CredentialRest
593
+ * @description A rest of one credential (`rests.jsonl`): why it began, when, and when it ended.
594
+ */
595
+ CredentialRest: {
596
+ /** Credential */
597
+ credential: string;
598
+ /**
599
+ * Window
600
+ * @default
601
+ * @enum {string}
602
+ */
603
+ window?: "" | "five_hour" | "seven_day";
604
+ /** Pct */
605
+ pct?: number | null;
606
+ /** Cap */
607
+ cap?: number | null;
608
+ /**
609
+ * Rule
610
+ * @default
611
+ */
612
+ rule?: string;
613
+ /**
614
+ * Until
615
+ * @default
616
+ */
617
+ until?: string;
618
+ /**
619
+ * Account
620
+ * @default
621
+ */
622
+ account?: string;
623
+ /** Reading */
624
+ reading?: {
625
+ [key: string]: unknown;
626
+ } | null;
627
+ /**
628
+ * Since
629
+ * @description when it began resting, ISO 8601
630
+ */
631
+ since: string;
632
+ /**
633
+ * Ended
634
+ * @description when it was found not resting again, ISO 8601; empty while it rests (or the run ended first)
635
+ * @default
636
+ */
637
+ ended?: string;
638
+ } & {
639
+ [key: string]: unknown;
640
+ };
641
+ /**
642
+ * CursorMessage
643
+ * @description The resume cursor, or null for a run that keeps none.
644
+ */
645
+ CursorMessage: {
646
+ /**
647
+ * Event
648
+ * @constant
649
+ */
650
+ event: "cursor";
651
+ data: components["schemas"]["CursorView"] | null;
652
+ };
653
+ /**
654
+ * CursorView
655
+ * @description The run's resume cursor. The REST endpoint answers `{}` (every field
656
+ * absent) for a run that keeps none; the live feed sends `null`.
657
+ */
658
+ CursorView: {
659
+ /** Stage */
660
+ stage?: string | null;
661
+ /** Completed Stages */
662
+ completed_stages?: string[];
663
+ /** History */
664
+ history?: components["schemas"]["StageEntry"][];
665
+ /**
666
+ * Updated At
667
+ * @default
668
+ */
669
+ updated_at?: string;
670
+ /** Units */
671
+ units?: {
672
+ [key: string]: components["schemas"]["UnitPosition"];
673
+ };
674
+ /**
675
+ * Markers
676
+ * @description free-form event lists by name
677
+ */
678
+ markers?: {
679
+ [key: string]: {
680
+ [key: string]: unknown;
681
+ }[];
682
+ };
683
+ };
684
+ /**
685
+ * DeferralCause
686
+ * @description Why a task was deferred, as data (`Deferral.cause`). `cause`: `deadline`,
687
+ * `grace_window` (past the deadline's grace window), `cannot_finish` (`need_s`, `left_s`),
688
+ * `dependency_not_queued`, `dependency_deferred` (a task whose output it reads was
689
+ * deferred: `dependency`), `rest` (the credential of every hop it could take rests:
690
+ * `rests`), or a runner's own name. A field a cause does not have is left unset, and
691
+ * `deferred.jsonl` records only the fields set.
692
+ */
693
+ DeferralCause: {
694
+ /** Cause */
695
+ cause: string;
696
+ /**
697
+ * Need S
698
+ * @description `cannot_finish`: the work it needed, in seconds
699
+ */
700
+ need_s?: number | null;
701
+ /**
702
+ * Left S
703
+ * @description `cannot_finish`: the time left before the deadline, in seconds
704
+ */
705
+ left_s?: number | null;
706
+ /**
707
+ * Flow Call
708
+ * @description `deadline`, `grace_window`, `cannot_finish`: the flow call whose time box it is; null for the run's deadline
709
+ */
710
+ flow_call?: string | null;
711
+ /**
712
+ * Rests
713
+ * @description `rest`: each hop passed over and why its credential rests
714
+ * @default []
715
+ */
716
+ rests?: components["schemas"]["SkippedHop"][];
717
+ /**
718
+ * Dependency
719
+ * @description `dependency_deferred`: the key of the deferred task whose output it reads
720
+ */
721
+ dependency?: string | null;
722
+ };
723
+ /**
724
+ * DefinitionFile
725
+ * @description One file that defines a task: its instructions (a task without a plugin), the role's agent file, a skill, the schema ...
726
+ */
727
+ DefinitionFile: {
728
+ /** Path */
729
+ path: string;
730
+ /** Part */
731
+ part: string;
732
+ /** Text */
733
+ text: string;
734
+ } & {
735
+ [key: string]: unknown;
736
+ };
737
+ /** DownstreamTask */
738
+ DownstreamTask: {
739
+ /** Key */
740
+ key: string;
741
+ /** Kind */
742
+ kind: string;
743
+ /** Unit */
744
+ unit: string;
745
+ /**
746
+ * Executor
747
+ * @enum {string}
748
+ */
749
+ executor: "agent" | "python";
750
+ };
751
+ /**
752
+ * DroppedRoute
753
+ * @description A route the preflight dropped: not in its agent's model list, or its probe did not
754
+ * complete. `kinds`: the kinds whose chain held it.
755
+ */
756
+ DroppedRoute: {
757
+ /** Agent */
758
+ agent: string;
759
+ /**
760
+ * Model
761
+ * @description empty: the coding agent's default model
762
+ */
763
+ model: string;
764
+ /** Credential */
765
+ credential: string;
766
+ /**
767
+ * Reason
768
+ * @description not in its coding agent's model list, or how its probe ended (`rate limited`, ...)
769
+ */
770
+ reason: string;
771
+ /**
772
+ * Kinds
773
+ * @description the kinds whose chain held it
774
+ */
775
+ kinds: string[];
776
+ };
777
+ /**
778
+ * ExportInfo
779
+ * @description What an export holds (`contraagent monitor export`): the monitor's views of some
780
+ * runs, written as files and read without a server.
781
+ */
782
+ ExportInfo: {
783
+ /**
784
+ * Exported At
785
+ * @description when it was written, ISO 8601
786
+ */
787
+ exported_at: string;
788
+ /**
789
+ * Runs
790
+ * @description the runs it holds, newest activity first
791
+ */
792
+ runs: string[];
793
+ /**
794
+ * Left Out
795
+ * @description the views it does not hold: `transcripts`, `processes`
796
+ */
797
+ left_out: string[];
798
+ /**
799
+ * Redacted
800
+ * @description what was taken out of the views: `paths` (made relative, else `<path>`), `host`, and each key named with --exclude
801
+ */
802
+ redacted: string[];
803
+ };
804
+ /** FeedReady */
805
+ FeedReady: {
806
+ /**
807
+ * Journal
808
+ * @description journal rows sent before this message
809
+ */
810
+ journal: number;
811
+ };
812
+ /**
813
+ * FileView
814
+ * @description A contract's file as it is now. `content` is the parsed JSON, else the
815
+ * text (cut at 20 000 characters, `truncated`), else null when unreadable.
816
+ */
817
+ FileView: {
818
+ /** Exists */
819
+ exists: boolean;
820
+ /**
821
+ * Size
822
+ * @default 0
823
+ */
824
+ size?: number;
825
+ /**
826
+ * Mtime
827
+ * @default
828
+ */
829
+ mtime?: string;
830
+ /**
831
+ * Truncated
832
+ * @default false
833
+ */
834
+ truncated?: boolean;
835
+ /** Content */
836
+ content?: unknown;
837
+ };
838
+ /**
839
+ * FlowCallNode
840
+ * @description One flow call (`flow_calls.jsonl`): a generator the run drove, or the flow itself.
841
+ */
842
+ FlowCallNode: {
843
+ /**
844
+ * Id
845
+ * @description `0` for the top flow, `<parent>.<n>` for a child
846
+ */
847
+ id: string;
848
+ /**
849
+ * Parent
850
+ * @description the parent flow call's id; null for a top flow
851
+ */
852
+ parent: string | null;
853
+ /**
854
+ * Function
855
+ * @description `module.qualname` of the generator function (or of a flow that does not yield)
856
+ */
857
+ function: string;
858
+ /**
859
+ * Flow
860
+ * @description the flow path where the parent yielded it, with its loops' passes; empty for a top flow
861
+ */
862
+ flow?: components["schemas"]["Frame"][];
863
+ /**
864
+ * State
865
+ * @enum {string}
866
+ */
867
+ state: "running" | "returned" | "raised" | "closed";
868
+ /**
869
+ * Error
870
+ * @description `<type>: <message>` of what it raised (or what closing it raised); else null
871
+ */
872
+ error?: string | null;
873
+ /** @description its own deadline, for a flow call yielded through `time_box`; else null */
874
+ time_box?: components["schemas"]["TimeBoxRecord"] | null;
875
+ };
876
+ /**
877
+ * Frame
878
+ * @description One frame of a flow path (outermost first): a call site in flow code where a task
879
+ * was created. A comprehension is not a loop.
880
+ */
881
+ Frame: {
882
+ /**
883
+ * Function
884
+ * @description `module.qualname`
885
+ */
886
+ function: string;
887
+ /**
888
+ * File
889
+ * @description relative to the run's working directory when under it, else as recorded
890
+ */
891
+ file: string;
892
+ /** Line */
893
+ line: number;
894
+ /**
895
+ * Loops
896
+ * @description the loops of a generator whose pass `line` was in, outermost first; empty outside a loop and for any other frame
897
+ * @default []
898
+ */
899
+ loops?: components["schemas"]["Loop"][];
900
+ };
901
+ /**
902
+ * GridCell
903
+ * @description One cell of a status grid: the state it is in, in words, and that state's tone.
904
+ * `tip` adds a fact about this cell to its tooltip (a run's id, a count).
905
+ */
906
+ GridCell: {
907
+ /** Label */
908
+ label: string;
909
+ /**
910
+ * Tone
911
+ * @enum {string}
912
+ */
913
+ tone: "failed" | "attention" | "done" | "running" | "muted" | "neutral";
914
+ /** Tip */
915
+ tip?: string | null;
916
+ };
917
+ /** HBar */
918
+ HBar: {
919
+ /** Label */
920
+ label: string;
921
+ /** Value */
922
+ value: number;
923
+ /** Tone */
924
+ tone?: ("failed" | "attention" | "done" | "running" | "muted" | "neutral") | null;
925
+ };
926
+ /**
927
+ * HBarsBody
928
+ * @description Horizontal bars, one per label, in the order given.
929
+ */
930
+ HBarsBody: {
931
+ /**
932
+ * Title
933
+ * @description a heading over the body
934
+ */
935
+ title?: string | null;
936
+ /**
937
+ * Collapsed
938
+ * @description shown folded, under its title
939
+ * @default false
940
+ */
941
+ collapsed?: boolean;
942
+ /**
943
+ * Type
944
+ * @default hbars
945
+ * @constant
946
+ */
947
+ type?: "hbars";
948
+ /** Bars */
949
+ bars: components["schemas"]["HBar"][];
950
+ /** Unit */
951
+ unit?: ("usd" | "pct" | "duration" | "tokens" | "datetime" | "number") | null;
952
+ };
953
+ /** HTTPValidationError */
954
+ HTTPValidationError: {
955
+ /** Detail */
956
+ detail?: components["schemas"]["ValidationError"][];
957
+ };
958
+ /**
959
+ * HeatmapBody
960
+ * @description A value per row (`y`) and column (`x`): `values[row][column]`, null where there is none.
961
+ */
962
+ HeatmapBody: {
963
+ /**
964
+ * Title
965
+ * @description a heading over the body
966
+ */
967
+ title?: string | null;
968
+ /**
969
+ * Collapsed
970
+ * @description shown folded, under its title
971
+ * @default false
972
+ */
973
+ collapsed?: boolean;
974
+ /**
975
+ * Type
976
+ * @default heatmap
977
+ * @constant
978
+ */
979
+ type?: "heatmap";
980
+ /** X */
981
+ x: string[];
982
+ /** Y */
983
+ y: string[];
984
+ /** Values */
985
+ values: (number | null)[][];
986
+ /** Unit */
987
+ unit?: ("usd" | "pct" | "duration" | "tokens" | "datetime" | "number") | null;
988
+ };
989
+ /**
990
+ * Hop
991
+ * @description One launch of an attempt on one route of its failover chain: where it ran and how
992
+ * it ended.
993
+ */
994
+ Hop: {
995
+ /**
996
+ * Route
997
+ * @default
998
+ */
999
+ route?: string;
1000
+ /**
1001
+ * Agent
1002
+ * @default
1003
+ */
1004
+ agent?: string;
1005
+ /**
1006
+ * Model
1007
+ * @default
1008
+ */
1009
+ model?: string;
1010
+ /**
1011
+ * Credential
1012
+ * @default
1013
+ */
1014
+ credential?: string;
1015
+ /**
1016
+ * Stop
1017
+ * @default
1018
+ */
1019
+ stop?: string;
1020
+ /**
1021
+ * Wall S
1022
+ * @default 0
1023
+ */
1024
+ wall_s?: number;
1025
+ /** Cost Usd */
1026
+ cost_usd?: number | null;
1027
+ usage?: components["schemas"]["TokenUsage"] | null;
1028
+ /** Other Models */
1029
+ other_models?: {
1030
+ [key: string]: components["schemas"]["OtherModel"];
1031
+ };
1032
+ } & {
1033
+ [key: string]: unknown;
1034
+ };
1035
+ /**
1036
+ * HostSummary
1037
+ * @description One host that drives runs.
1038
+ */
1039
+ HostSummary: {
1040
+ /** Host Id */
1041
+ host_id: string;
1042
+ /**
1043
+ * Up
1044
+ * @description its reports keep arriving (a hub: a heartbeat within the TTL; one host: always)
1045
+ */
1046
+ up: boolean;
1047
+ /**
1048
+ * Last Seen
1049
+ * @description when it last reported, ISO 8601; empty when it does not report (one host)
1050
+ */
1051
+ last_seen: string;
1052
+ /**
1053
+ * Interval S
1054
+ * @description seconds between its reports; null when it does not report
1055
+ */
1056
+ interval_s: number | null;
1057
+ /**
1058
+ * Runs
1059
+ * @description its runs
1060
+ */
1061
+ runs: number;
1062
+ /**
1063
+ * Running
1064
+ * @description its runs whose process is alive
1065
+ */
1066
+ running: number;
1067
+ /**
1068
+ * Unresponsive
1069
+ * @description its runs last reported alive since it stopped reporting
1070
+ */
1071
+ unresponsive: number;
1072
+ };
1073
+ /**
1074
+ * Hosts
1075
+ * @description The hosts, and each account's utilization over every run of every host.
1076
+ */
1077
+ Hosts: {
1078
+ /** Hosts */
1079
+ hosts: components["schemas"]["HostSummary"][];
1080
+ /**
1081
+ * Quota
1082
+ * @description per credential (account): its first and last utilization reading over every run; highest weekly use first
1083
+ */
1084
+ quota?: components["schemas"]["AccountQuota"][];
1085
+ };
1086
+ /**
1087
+ * InflightPythonTask
1088
+ * @description A Python task running inside the run's own process.
1089
+ */
1090
+ InflightPythonTask: {
1091
+ /** Key */
1092
+ key: string;
1093
+ /** Kind */
1094
+ kind: string;
1095
+ /** Unit */
1096
+ unit: string;
1097
+ /** Pid */
1098
+ pid: number;
1099
+ /** Age S */
1100
+ age_s: number;
1101
+ };
1102
+ /**
1103
+ * Info
1104
+ * @description What the UI shows before a run is picked: the title, the panel tabs to offer,
1105
+ * and the version of this contract.
1106
+ */
1107
+ Info: {
1108
+ /** Title */
1109
+ title: string;
1110
+ /** Panels */
1111
+ panels: components["schemas"]["PanelInfo"][];
1112
+ /**
1113
+ * Api Version
1114
+ * @description Version of this API contract (semver)
1115
+ */
1116
+ api_version: string;
1117
+ /**
1118
+ * Hosts
1119
+ * @description the runs come from many hosts (a hub): `/api/hosts` lists them
1120
+ * @default false
1121
+ */
1122
+ hosts?: boolean;
1123
+ /** @description set only in an export: what it holds; a server never sends it */
1124
+ export?: components["schemas"]["ExportInfo"] | null;
1125
+ };
1126
+ /**
1127
+ * JournalMessage
1128
+ * @description One journal row, sent once per row: the whole journal on connect, then each new row.
1129
+ */
1130
+ JournalMessage: {
1131
+ /**
1132
+ * Event
1133
+ * @constant
1134
+ */
1135
+ event: "journal";
1136
+ data: components["schemas"]["JournalRow"];
1137
+ };
1138
+ /**
1139
+ * JournalPage
1140
+ * @description Journal rows after a line offset; pass `total` back as `since` to get only newer rows.
1141
+ */
1142
+ JournalPage: {
1143
+ /** Entries */
1144
+ entries: components["schemas"]["JournalRow"][];
1145
+ /** Total */
1146
+ total: number;
1147
+ };
1148
+ /**
1149
+ * JournalRow
1150
+ * @description One finished attempt. `key` is the stable `Task.key`, one task; `kind`
1151
+ * and `unit` are its kind and unit; `executor` says who ran it; `stop` is
1152
+ * `Stop.value` (or a Python task's completed/error).
1153
+ */
1154
+ JournalRow: {
1155
+ /** Ts */
1156
+ ts: string;
1157
+ /**
1158
+ * Run Id
1159
+ * @default
1160
+ */
1161
+ run_id?: string;
1162
+ /**
1163
+ * Run Group
1164
+ * @default
1165
+ */
1166
+ run_group?: string;
1167
+ /** Key */
1168
+ key: string;
1169
+ /**
1170
+ * Attempt
1171
+ * @default 0
1172
+ */
1173
+ attempt?: number;
1174
+ /** Kind */
1175
+ kind: string;
1176
+ /**
1177
+ * Executor
1178
+ * @default agent
1179
+ * @enum {string}
1180
+ */
1181
+ executor?: "agent" | "python";
1182
+ /**
1183
+ * Unit
1184
+ * @default
1185
+ */
1186
+ unit?: string;
1187
+ /**
1188
+ * Agent
1189
+ * @default
1190
+ */
1191
+ agent?: string;
1192
+ /**
1193
+ * Model
1194
+ * @default
1195
+ */
1196
+ model?: string;
1197
+ /**
1198
+ * Credential
1199
+ * @default
1200
+ */
1201
+ credential?: string;
1202
+ /**
1203
+ * Route
1204
+ * @default
1205
+ */
1206
+ route?: string;
1207
+ /** Hops */
1208
+ hops?: components["schemas"]["Hop"][];
1209
+ /** Skipped Hops */
1210
+ skipped_hops?: components["schemas"]["SkippedHop"][];
1211
+ /**
1212
+ * Stop
1213
+ * @enum {string}
1214
+ */
1215
+ stop: "completed" | "timeout" | "max_turns" | "budget" | "context_budget" | "stalled" | "auth_failed" | "api_error" | "rate_limited" | "refused" | "aborted" | "denied" | "error" | "no_output" | "launch_failed" | "invalid_output" | "invalid_input" | "credential_mismatch" | "skipped" | "partial";
1216
+ /** Ok */
1217
+ ok: boolean;
1218
+ /**
1219
+ * Wall S
1220
+ * @default 0
1221
+ */
1222
+ wall_s?: number;
1223
+ /** Exit Code */
1224
+ exit_code?: number | null;
1225
+ /** Signal */
1226
+ signal?: number | null;
1227
+ /**
1228
+ * Reason
1229
+ * @default
1230
+ */
1231
+ reason?: string;
1232
+ /** Rounds */
1233
+ rounds?: number | null;
1234
+ /** Round Errors */
1235
+ round_errors?: string[][];
1236
+ /** Hook Errors */
1237
+ hook_errors?: string[][];
1238
+ usage?: components["schemas"]["TokenUsage"] | null;
1239
+ /** Cost Usd */
1240
+ cost_usd?: number | null;
1241
+ /** Quota */
1242
+ quota?: components["schemas"]["QuotaReading"][];
1243
+ /** Web Queries */
1244
+ web_queries?: string[];
1245
+ /** Unread Events */
1246
+ unread_events?: {
1247
+ [key: string]: number;
1248
+ };
1249
+ changes?: components["schemas"]["Changes"] | null;
1250
+ /** Context Budget */
1251
+ context_budget?: number | null;
1252
+ /**
1253
+ * Context Warned
1254
+ * @default false
1255
+ */
1256
+ context_warned?: boolean;
1257
+ /**
1258
+ * Fingerprint
1259
+ * @default
1260
+ */
1261
+ fingerprint?: string;
1262
+ /** Flow Call */
1263
+ flow_call?: string | null;
1264
+ /**
1265
+ * Replayed
1266
+ * @default false
1267
+ */
1268
+ replayed?: boolean;
1269
+ } & {
1270
+ [key: string]: unknown;
1271
+ };
1272
+ /**
1273
+ * KeptKind
1274
+ * @description A kind with no route left, run as configured all the same (`substitute`), and why.
1275
+ */
1276
+ KeptKind: {
1277
+ /** Kind */
1278
+ kind: string;
1279
+ /** Agent */
1280
+ agent: string;
1281
+ /** Model */
1282
+ model: string;
1283
+ /** Reason */
1284
+ reason: string;
1285
+ };
1286
+ /**
1287
+ * LaunchEvent
1288
+ * @description Head of one invocation: the exact argv, cwd and the submitted prompt.
1289
+ */
1290
+ LaunchEvent: {
1291
+ /**
1292
+ * Type
1293
+ * @constant
1294
+ */
1295
+ type: "launch";
1296
+ /**
1297
+ * Ts
1298
+ * @description Unix time the launch started
1299
+ */
1300
+ ts?: number | null;
1301
+ /** Argv */
1302
+ argv: string[];
1303
+ /** Cwd */
1304
+ cwd: string;
1305
+ /**
1306
+ * Prompt
1307
+ * @description cut at 200 000 characters
1308
+ */
1309
+ prompt: string;
1310
+ /**
1311
+ * Prompt Truncated
1312
+ * @description characters of the prompt not shown
1313
+ * @default 0
1314
+ */
1315
+ prompt_truncated?: number;
1316
+ } & {
1317
+ [key: string]: unknown;
1318
+ };
1319
+ /** LinesBody */
1320
+ LinesBody: {
1321
+ /**
1322
+ * Title
1323
+ * @description a heading over the body
1324
+ */
1325
+ title?: string | null;
1326
+ /**
1327
+ * Collapsed
1328
+ * @description shown folded, under its title
1329
+ * @default false
1330
+ */
1331
+ collapsed?: boolean;
1332
+ /**
1333
+ * Type
1334
+ * @default lines
1335
+ * @constant
1336
+ */
1337
+ type?: "lines";
1338
+ /** X */
1339
+ x: string[];
1340
+ /** Series */
1341
+ series: components["schemas"]["ChartSeries"][];
1342
+ /** Unit */
1343
+ unit?: ("usd" | "pct" | "duration" | "tokens" | "datetime" | "number") | null;
1344
+ };
1345
+ /**
1346
+ * Loop
1347
+ * @description A `for` or `while` loop of a generator around a call site, and the pass the call
1348
+ * site was in.
1349
+ */
1350
+ Loop: {
1351
+ /**
1352
+ * Line
1353
+ * @description the loop's first line, which names it
1354
+ */
1355
+ line: number;
1356
+ /**
1357
+ * Pass
1358
+ * @description one iteration of this loop, numbered from 1 since the loop was last entered in that frame; null when not counted
1359
+ */
1360
+ pass: number | null;
1361
+ };
1362
+ /**
1363
+ * MessageEvent
1364
+ * @description omp: a whole message or a turn's closing thinking. Either `role` + `text`, or `thinking`.
1365
+ */
1366
+ MessageEvent: {
1367
+ /**
1368
+ * Type
1369
+ * @enum {string}
1370
+ */
1371
+ type: "message_start" | "message_end" | "turn_end";
1372
+ /** Role */
1373
+ role?: string | null;
1374
+ /** Text */
1375
+ text?: string | null;
1376
+ /** Thinking */
1377
+ thinking?: string | null;
1378
+ } & {
1379
+ [key: string]: unknown;
1380
+ };
1381
+ /**
1382
+ * MessageUpdateEvent
1383
+ * @description A piece of assistant prose: `ev` is `text_delta` or `thinking_delta` (omp may send its other delta kinds).
1384
+ */
1385
+ MessageUpdateEvent: {
1386
+ /**
1387
+ * Type
1388
+ * @constant
1389
+ */
1390
+ type: "message_update";
1391
+ /** Ev */
1392
+ ev: string;
1393
+ /** Delta */
1394
+ delta: string;
1395
+ } & {
1396
+ [key: string]: unknown;
1397
+ };
1398
+ /**
1399
+ * ModelUsage
1400
+ * @description What a run's agent sessions spent on one model of one coding agent, from each
1401
+ * journal row's hops (a failover's hops on two models count apart), a hop's spend on
1402
+ * other models (`Hop.other_models`) on each of them. Python tasks have no model and are
1403
+ * not counted.
1404
+ */
1405
+ ModelUsage: {
1406
+ /** Agent */
1407
+ agent: string;
1408
+ /** Model */
1409
+ model: string;
1410
+ /**
1411
+ * Sessions
1412
+ * @description hops: agent sessions launched on it (pool members tried on one hop count once); 0 for an other model only
1413
+ */
1414
+ sessions: number;
1415
+ /**
1416
+ * Calls
1417
+ * @description API calls
1418
+ * @default 0
1419
+ */
1420
+ calls?: number;
1421
+ /**
1422
+ * Input
1423
+ * @default 0
1424
+ */
1425
+ input?: number;
1426
+ /**
1427
+ * Output
1428
+ * @default 0
1429
+ */
1430
+ output?: number;
1431
+ /**
1432
+ * Cache Read
1433
+ * @default 0
1434
+ */
1435
+ cache_read?: number;
1436
+ /**
1437
+ * Cache Creation
1438
+ * @default 0
1439
+ */
1440
+ cache_creation?: number;
1441
+ /**
1442
+ * Cost Usd
1443
+ * @description what the coding agent reported; null when no session on it reported a cost
1444
+ */
1445
+ cost_usd?: number | null;
1446
+ /**
1447
+ * Wall S
1448
+ * @default 0
1449
+ */
1450
+ wall_s?: number;
1451
+ /**
1452
+ * Peak Context
1453
+ * @description peak context: the largest input of one API call of a session on it (tokens); null when none reported one
1454
+ */
1455
+ peak_context?: number | null;
1456
+ /**
1457
+ * Context Window
1458
+ * @description its context window (tokens of one API call's input) as the coding agent reported it; null when none did
1459
+ */
1460
+ context_window?: number | null;
1461
+ };
1462
+ /**
1463
+ * NoteBody
1464
+ * @description Text beside the figures: what a part shows, how to read a number. `text` is
1465
+ * markdown (paragraphs, lists, emphasis, code, http(s) links; any markup in it is shown
1466
+ * as text). `tone` marks a note that warns (`attention`) or reports a failure (`failed`).
1467
+ */
1468
+ NoteBody: {
1469
+ /**
1470
+ * Title
1471
+ * @description a heading over the body
1472
+ */
1473
+ title?: string | null;
1474
+ /**
1475
+ * Collapsed
1476
+ * @description shown folded, under its title
1477
+ * @default false
1478
+ */
1479
+ collapsed?: boolean;
1480
+ /**
1481
+ * Type
1482
+ * @default note
1483
+ * @constant
1484
+ */
1485
+ type?: "note";
1486
+ /** Text */
1487
+ text: string;
1488
+ /** Tone */
1489
+ tone?: ("failed" | "attention" | "done" | "running" | "muted" | "neutral") | null;
1490
+ };
1491
+ /**
1492
+ * NoticeEvent
1493
+ * @description A line of session bookkeeping: init, a retry, a rate-limit status, a custom message.
1494
+ */
1495
+ NoticeEvent: {
1496
+ /**
1497
+ * Type
1498
+ * @constant
1499
+ */
1500
+ type: "notice";
1501
+ /** Text */
1502
+ text: string;
1503
+ } & {
1504
+ [key: string]: unknown;
1505
+ };
1506
+ /**
1507
+ * OtherEvent
1508
+ * @description Any other event: omp's bare lifecycle markers (`agent_start`, `agent_end`,
1509
+ * `turn_start`, `auto_retry_end`) and whatever a custom backend's registered
1510
+ * normalizer emits, including a known `type` whose fields do not match above.
1511
+ */
1512
+ OtherEvent: {
1513
+ /** Type */
1514
+ type: string;
1515
+ } & {
1516
+ [key: string]: unknown;
1517
+ };
1518
+ /**
1519
+ * OtherModel
1520
+ * @description What a hop spent on a model other than its own (`Hop.other_models`).
1521
+ */
1522
+ OtherModel: {
1523
+ /** Cost Usd */
1524
+ cost_usd?: number | null;
1525
+ /**
1526
+ * Input
1527
+ * @default 0
1528
+ */
1529
+ input?: number;
1530
+ /**
1531
+ * Output
1532
+ * @default 0
1533
+ */
1534
+ output?: number;
1535
+ /**
1536
+ * Cache Read
1537
+ * @default 0
1538
+ */
1539
+ cache_read?: number;
1540
+ /**
1541
+ * Cache Creation
1542
+ * @default 0
1543
+ */
1544
+ cache_creation?: number;
1545
+ } & {
1546
+ [key: string]: unknown;
1547
+ };
1548
+ /** OutputTally */
1549
+ OutputTally: {
1550
+ /** Valid */
1551
+ valid: number;
1552
+ /** Invalid */
1553
+ invalid: number;
1554
+ /** Refused */
1555
+ refused: number;
1556
+ /** Pending */
1557
+ pending: number;
1558
+ /** Failed */
1559
+ failed: number;
1560
+ /** Running */
1561
+ running: number;
1562
+ };
1563
+ /** Outputs */
1564
+ Outputs: {
1565
+ /** Contracts */
1566
+ contracts: components["schemas"]["ContractRecord"][];
1567
+ /** @description output contracts per status */
1568
+ tally: components["schemas"]["OutputTally"];
1569
+ };
1570
+ /** OutputsMessage */
1571
+ OutputsMessage: {
1572
+ /**
1573
+ * Event
1574
+ * @constant
1575
+ */
1576
+ event: "outputs";
1577
+ data: components["schemas"]["Outputs"];
1578
+ };
1579
+ /**
1580
+ * PanelInfo
1581
+ * @description A panel a domain registered: its tab label, tooltip and glyph, and what it is
1582
+ * computed over (`run`: one run, a tab of the run; `trends`: the runs of a period).
1583
+ */
1584
+ PanelInfo: {
1585
+ /** Name */
1586
+ name: string;
1587
+ /** Title */
1588
+ title: string;
1589
+ /** Description */
1590
+ description: string;
1591
+ /** Icon */
1592
+ icon: string;
1593
+ /**
1594
+ * Scope
1595
+ * @default run
1596
+ * @enum {string}
1597
+ */
1598
+ scope?: "run" | "trends";
1599
+ /**
1600
+ * Tab
1601
+ * @description a trends panel's tab of the Trends page, with the panels of the same `tab`; '': on the first tab
1602
+ * @default
1603
+ */
1604
+ tab?: string;
1605
+ };
1606
+ /**
1607
+ * PanelMessage
1608
+ * @description A domain panel's body (`PanelBody`), sent when it changed. `{"error": ...}`
1609
+ * when the panel raised.
1610
+ */
1611
+ PanelMessage: {
1612
+ /**
1613
+ * Event
1614
+ * @description `panel:<name>`, one per run panel in /api/info `panels`
1615
+ */
1616
+ event: string;
1617
+ /** Data */
1618
+ data: components["schemas"]["TilesBody"] | components["schemas"]["TableBody"] | components["schemas"]["ColumnsBody"] | components["schemas"]["LinesBody"] | components["schemas"]["HeatmapBody"] | components["schemas"]["HBarsBody"] | components["schemas"]["StatusGridBody"] | components["schemas"]["NoteBody"] | components["schemas"]["BlocksBody"] | {
1619
+ [key: string]: unknown;
1620
+ };
1621
+ };
1622
+ /**
1623
+ * PanelTile
1624
+ * @description A figure as a tile (`cae-stat-tiles`). `sub`: lines under the value, each a row of facts.
1625
+ */
1626
+ PanelTile: {
1627
+ /** Id */
1628
+ id: string;
1629
+ /** Label */
1630
+ label: string;
1631
+ /**
1632
+ * Value
1633
+ * @description a number as given (an integer stays one), or text already formatted
1634
+ */
1635
+ value: number | string;
1636
+ /** Tone */
1637
+ tone?: ("failed" | "attention" | "done" | "running" | "muted" | "neutral") | null;
1638
+ /** Tip */
1639
+ tip?: string | null;
1640
+ /** Sub */
1641
+ sub?: string[][];
1642
+ };
1643
+ /**
1644
+ * Plan
1645
+ * @description The queued tasks, their groups, and the flow calls that created them. A run with
1646
+ * no `flow_calls.jsonl` (its tasks queued by hand, not by a flow) has no flow call.
1647
+ */
1648
+ Plan: {
1649
+ /** Nodes */
1650
+ nodes: components["schemas"]["PlanNode"][];
1651
+ /** Groups */
1652
+ groups: components["schemas"]["PlanGroup"][];
1653
+ /**
1654
+ * Flow Calls
1655
+ * @description in start order
1656
+ */
1657
+ flow_calls?: components["schemas"]["FlowCallNode"][];
1658
+ /**
1659
+ * Quota Caps
1660
+ * @description the run's credentials that have quota caps (`run.json`)
1661
+ */
1662
+ quota_caps?: components["schemas"]["QuotaCap"][];
1663
+ /**
1664
+ * Quota Rule
1665
+ * @description `module.qualname` of the run's quota rule (`Pipeline(quota_rule=)`); empty for none
1666
+ * @default
1667
+ */
1668
+ quota_rule?: string;
1669
+ /**
1670
+ * Rests
1671
+ * @description each rest of a credential in the run (`rests.jsonl`), in start order
1672
+ */
1673
+ rests?: components["schemas"]["CredentialRest"][];
1674
+ /**
1675
+ * Models
1676
+ * @description each model the run's agent sessions ran on, in order of first use
1677
+ */
1678
+ models?: components["schemas"]["ModelUsage"][];
1679
+ /** @description what the run's preflight did (`run.json`); null when its run.json records none */
1680
+ preflight?: components["schemas"]["PreflightRecord"] | null;
1681
+ };
1682
+ /**
1683
+ * PlanGroup
1684
+ * @description A group: a column of the pipeline view (a kind, the kinds `Monitor(groups=)` puts
1685
+ * together, or the implementation kinds of a base kind), its members counted by state.
1686
+ */
1687
+ PlanGroup: {
1688
+ /** Id */
1689
+ id: string;
1690
+ /** Label */
1691
+ label: string;
1692
+ /** Total */
1693
+ total: number;
1694
+ /** Done */
1695
+ done: number;
1696
+ /**
1697
+ * Partial
1698
+ * @default 0
1699
+ */
1700
+ partial?: number;
1701
+ /** Failed */
1702
+ failed: number;
1703
+ /** Running */
1704
+ running: number;
1705
+ /** Pending */
1706
+ pending: number;
1707
+ /** Skipped */
1708
+ skipped: number;
1709
+ /** Blocked */
1710
+ blocked: number;
1711
+ };
1712
+ /** PlanMessage */
1713
+ PlanMessage: {
1714
+ /**
1715
+ * Event
1716
+ * @constant
1717
+ */
1718
+ event: "plan";
1719
+ data: components["schemas"]["Plan"];
1720
+ };
1721
+ /**
1722
+ * PlanNode
1723
+ * @description A queued task (a `plan.jsonl` row, passed through) with its state and
1724
+ * layout. The journal fields (`wall_s` .. `attempts`) appear once it finished.
1725
+ * The origin fields (`flow` .. `flow_call`) say where the flow created it.
1726
+ */
1727
+ PlanNode: {
1728
+ /**
1729
+ * Ts
1730
+ * @description when it was queued (absent for a node rebuilt from the journal)
1731
+ * @default
1732
+ */
1733
+ ts?: string;
1734
+ /** Key */
1735
+ key: string;
1736
+ /** Kind */
1737
+ kind: string;
1738
+ /**
1739
+ * Unit
1740
+ * @default
1741
+ */
1742
+ unit?: string;
1743
+ /**
1744
+ * Claims
1745
+ * @description the names it holds while it runs, its kind's `claims` filled in
1746
+ */
1747
+ claims?: string[];
1748
+ /**
1749
+ * After
1750
+ * @description task keys it waits for
1751
+ */
1752
+ after?: string[];
1753
+ /**
1754
+ * Priority
1755
+ * @description its task call's `priority`: a tie-breaker in the queue, higher first
1756
+ * @default 0
1757
+ */
1758
+ priority?: number;
1759
+ /**
1760
+ * Executor
1761
+ * @default agent
1762
+ * @enum {string}
1763
+ */
1764
+ executor?: "agent" | "python";
1765
+ /**
1766
+ * Flow
1767
+ * @description the flow path: frames of flow code that created it, outermost first
1768
+ */
1769
+ flow?: components["schemas"]["Frame"][];
1770
+ /**
1771
+ * Created From
1772
+ * @description keys whose results its flow call had received when it created it
1773
+ */
1774
+ created_from?: string[];
1775
+ /**
1776
+ * Flow Call
1777
+ * @description the id of the flow call that created it; null for a task with no origin
1778
+ */
1779
+ flow_call?: string | null;
1780
+ /**
1781
+ * Base Kind
1782
+ * @description an implementation kind's base kind (`agent_task(implementations=)`), its group unless `groups` lists it; else empty
1783
+ * @default
1784
+ */
1785
+ base_kind?: string;
1786
+ /**
1787
+ * State
1788
+ * @enum {string}
1789
+ */
1790
+ state: "pending" | "running" | "done" | "partial" | "failed" | "skipped" | "blocked";
1791
+ /**
1792
+ * Level
1793
+ * @description depth in the dependency graph, 0 for a task that waits for nothing
1794
+ */
1795
+ level: number;
1796
+ /** Group */
1797
+ group: string;
1798
+ /**
1799
+ * Wall S
1800
+ * @default 0
1801
+ */
1802
+ wall_s?: number;
1803
+ /**
1804
+ * Stop
1805
+ * @default
1806
+ */
1807
+ stop?: string;
1808
+ /**
1809
+ * Route
1810
+ * @default
1811
+ */
1812
+ route?: string;
1813
+ /**
1814
+ * Attempts
1815
+ * @default 1
1816
+ */
1817
+ attempts?: number;
1818
+ /**
1819
+ * Deferred
1820
+ * @description why the queue deferred it, never launched (`deferred.jsonl`): a deadline, a resting credential; empty when it was not
1821
+ * @default
1822
+ */
1823
+ deferred?: string;
1824
+ /** @description the same as data; null when it was not deferred, or the run recorded no cause */
1825
+ deferred_cause?: components["schemas"]["DeferralCause"] | null;
1826
+ } & {
1827
+ [key: string]: unknown;
1828
+ };
1829
+ /**
1830
+ * PreflightRecord
1831
+ * @description What a preflight did, as `run.json` records it (`preflight`): its policy, the routes
1832
+ * it dropped, and, for each kind left with no route, its substitution, the kind kept
1833
+ * as configured, or the kind that stopped the run (`stopped`).
1834
+ */
1835
+ PreflightRecord: {
1836
+ /**
1837
+ * Policy
1838
+ * @description `Pipeline(preflight=)`; `off`: no route was probed
1839
+ * @enum {string}
1840
+ */
1841
+ policy: "substitute" | "stop" | "off";
1842
+ /** Dropped */
1843
+ dropped?: components["schemas"]["DroppedRoute"][];
1844
+ /** Substituted */
1845
+ substituted?: components["schemas"]["Substitution"][];
1846
+ /** Kept */
1847
+ kept?: components["schemas"]["KeptKind"][];
1848
+ /**
1849
+ * Stopped
1850
+ * @description the kinds with no route left that stopped the run (policy `stop`)
1851
+ */
1852
+ stopped?: string[];
1853
+ };
1854
+ /**
1855
+ * ProcNode
1856
+ * @description A process in the run's tree (three levels deep at most). The launch fields
1857
+ * are set on the topmost process of an agent launch.
1858
+ */
1859
+ ProcNode: {
1860
+ /** Pid */
1861
+ pid: number;
1862
+ /** Age S */
1863
+ age_s: number;
1864
+ /**
1865
+ * Cmd
1866
+ * @description the first three words of the command line
1867
+ */
1868
+ cmd: string;
1869
+ /** Full Cmd */
1870
+ full_cmd: string;
1871
+ /** Children */
1872
+ children?: components["schemas"]["ProcNode"][];
1873
+ /** Key */
1874
+ key?: string | null;
1875
+ /** Kind */
1876
+ kind?: string | null;
1877
+ /** Unit */
1878
+ unit?: string | null;
1879
+ /**
1880
+ * Role
1881
+ * @description the role it runs as, from the prompt's TELEMETRY line
1882
+ */
1883
+ role?: string | null;
1884
+ /** Model */
1885
+ model?: string | null;
1886
+ /** Plugin */
1887
+ plugin?: string | null;
1888
+ };
1889
+ /**
1890
+ * Procs
1891
+ * @description The run's live processes. Everything but the run's own fields is empty when it is not alive.
1892
+ */
1893
+ Procs: {
1894
+ /** Run */
1895
+ run: string;
1896
+ /** Alive */
1897
+ alive: boolean;
1898
+ /** Pid */
1899
+ pid: number | null;
1900
+ /** Argv */
1901
+ argv: string[];
1902
+ /** Started At */
1903
+ started_at: string;
1904
+ /** Max Workers */
1905
+ max_workers: number | null;
1906
+ /** Run Group */
1907
+ run_group: string;
1908
+ /** Launches */
1909
+ launches: components["schemas"]["AgentProcess"][];
1910
+ /** Tree */
1911
+ tree: components["schemas"]["ProcNode"][];
1912
+ /** Python Tasks */
1913
+ python_tasks: components["schemas"]["InflightPythonTask"][];
1914
+ };
1915
+ /**
1916
+ * ProcsMessage
1917
+ * @description The live processes, sent when a launch starts or ends (not on every age tick).
1918
+ */
1919
+ ProcsMessage: {
1920
+ /**
1921
+ * Event
1922
+ * @constant
1923
+ */
1924
+ event: "procs";
1925
+ data: components["schemas"]["Procs"];
1926
+ };
1927
+ /**
1928
+ * QuotaCap
1929
+ * @description One credential's quota caps (`[credentials.<name>] max_five_hour_pct`, `max_seven_day_pct`):
1930
+ * the utilization (%) of a window past which it rests; None for a window with no cap.
1931
+ */
1932
+ QuotaCap: {
1933
+ /** Credential */
1934
+ credential: string;
1935
+ /** Five Hour Pct */
1936
+ five_hour_pct?: number | null;
1937
+ /** Seven Day Pct */
1938
+ seven_day_pct?: number | null;
1939
+ };
1940
+ /**
1941
+ * QuotaReading
1942
+ * @description A subscription's utilization during a launch, from one of these sources:
1943
+ *
1944
+ * * Claude Code: in its stream, when a session starts or resumes;
1945
+ * * Codex: in its stream, with each API call of a ChatGPT login;
1946
+ * * omp (`omp`, `omp-rpc`): at each launch, what the account's latest request reported
1947
+ * (`omp usage --json`, read before the launch: `Backend.usage_reading`);
1948
+ * * opencode and pi: for an OpenCode Go model only, OpenCode's usage endpoint, read by
1949
+ * contraagent before each launch (`Backend.usage_reading`); the agents report none.
1950
+ *
1951
+ * Account-wide: it includes whatever else used the same account, parallel tasks too.
1952
+ * `LaunchResult.quota` holds a launch's, the journal's `quota` an attempt's that give a
1953
+ * 5-hour or weekly utilization.
1954
+ */
1955
+ QuotaReading: {
1956
+ /** Observed At */
1957
+ observed_at?: string | null;
1958
+ /**
1959
+ * Credential
1960
+ * @default
1961
+ */
1962
+ credential?: string;
1963
+ /** Five Hour Pct */
1964
+ five_hour_pct?: number | null;
1965
+ /** Five Hour Resets At */
1966
+ five_hour_resets_at?: string | null;
1967
+ /** Seven Day Pct */
1968
+ seven_day_pct?: number | null;
1969
+ /** Seven Day Resets At */
1970
+ seven_day_resets_at?: string | null;
1971
+ /**
1972
+ * Status
1973
+ * @default
1974
+ */
1975
+ status?: string;
1976
+ /**
1977
+ * Account
1978
+ * @default
1979
+ */
1980
+ account?: string;
1981
+ /**
1982
+ * Status Window
1983
+ * @default
1984
+ */
1985
+ status_window?: string;
1986
+ /** Threshold Pct */
1987
+ threshold_pct?: number | null;
1988
+ /**
1989
+ * Overage Status
1990
+ * @default
1991
+ */
1992
+ overage_status?: string;
1993
+ /**
1994
+ * Overage Disabled Reason
1995
+ * @default
1996
+ */
1997
+ overage_disabled_reason?: string;
1998
+ /** Using Overage */
1999
+ using_overage?: boolean | null;
2000
+ /** Windows */
2001
+ windows?: {
2002
+ [key: string]: components["schemas"]["QuotaWindow"];
2003
+ };
2004
+ /** Extra */
2005
+ extra?: {
2006
+ [key: string]: unknown;
2007
+ };
2008
+ } & {
2009
+ [key: string]: unknown;
2010
+ };
2011
+ /**
2012
+ * QuotaWindow
2013
+ * @description One window of a reading: its utilization (%) and when it resets (ISO 8601).
2014
+ */
2015
+ QuotaWindow: {
2016
+ /** Pct */
2017
+ pct?: number | null;
2018
+ /** Resets At */
2019
+ resets_at?: string | null;
2020
+ } & {
2021
+ [key: string]: unknown;
2022
+ };
2023
+ /**
2024
+ * ReadyMessage
2025
+ * @description Sent once per connection, after the first round of messages: the journal
2026
+ * replayed so far and the current value of every other view. A row that
2027
+ * arrives after it is new, not part of the replay.
2028
+ */
2029
+ ReadyMessage: {
2030
+ /**
2031
+ * Event
2032
+ * @constant
2033
+ */
2034
+ event: "ready";
2035
+ data: components["schemas"]["FeedReady"];
2036
+ };
2037
+ /**
2038
+ * RetryEvent
2039
+ * @description omp: the agent retrying after a provider error.
2040
+ */
2041
+ RetryEvent: {
2042
+ /**
2043
+ * Type
2044
+ * @constant
2045
+ */
2046
+ type: "auto_retry_start";
2047
+ /** Attempt */
2048
+ attempt?: number | null;
2049
+ /**
2050
+ * Err
2051
+ * @default
2052
+ */
2053
+ err?: string;
2054
+ } & {
2055
+ [key: string]: unknown;
2056
+ };
2057
+ /**
2058
+ * RunEvent
2059
+ * @description One message of /events?run=
2060
+ */
2061
+ RunEvent: components["schemas"]["JournalMessage"] | components["schemas"]["ProcsMessage"] | components["schemas"]["PlanMessage"] | components["schemas"]["OutputsMessage"] | components["schemas"]["CursorMessage"] | components["schemas"]["PanelMessage"] | components["schemas"]["ReadyMessage"];
2062
+ /**
2063
+ * RunSummary
2064
+ * @description One run directory, as the run picker lists it.
2065
+ */
2066
+ RunSummary: {
2067
+ /** Run */
2068
+ run: string;
2069
+ /**
2070
+ * Run Group
2071
+ * @description the label grouping runs (`Run(run_group=)`); the run id when none was given
2072
+ */
2073
+ run_group: string;
2074
+ /**
2075
+ * Attempts
2076
+ * @description journal rows: finished task attempts
2077
+ */
2078
+ attempts: number;
2079
+ /**
2080
+ * Ok
2081
+ * @description journal rows that passed, not counting `partial` ones
2082
+ */
2083
+ ok: number;
2084
+ /**
2085
+ * Partial
2086
+ * @description journal rows with stop `partial`
2087
+ * @default 0
2088
+ */
2089
+ partial?: number;
2090
+ /**
2091
+ * Not Run
2092
+ * @description journal rows of tasks that never ran: refused for an input (`invalid_input`) or skipped
2093
+ * @default 0
2094
+ */
2095
+ not_run?: number;
2096
+ tasks: components["schemas"]["TaskCounts"];
2097
+ /**
2098
+ * Cost Usd
2099
+ * @description what the coding agents reported the run cost, in USD; null when none reported
2100
+ */
2101
+ cost_usd?: number | null;
2102
+ /** @description tokens of every attempt, summed */
2103
+ tokens: components["schemas"]["TokenUsage"];
2104
+ /**
2105
+ * Quota
2106
+ * @description per credential (account): the run's first and last utilization reading; highest weekly use first
2107
+ */
2108
+ quota?: components["schemas"]["AccountQuota"][];
2109
+ /**
2110
+ * Wall S
2111
+ * @description sum of the rows' wall time, rounded to seconds
2112
+ */
2113
+ wall_s: number;
2114
+ /**
2115
+ * Last Ts
2116
+ * @description ISO time of the last journal row, else the directory's mtime
2117
+ */
2118
+ last_ts: string;
2119
+ /**
2120
+ * Kinds
2121
+ * @description journal rows per task kind
2122
+ */
2123
+ kinds: {
2124
+ [key: string]: number;
2125
+ };
2126
+ /**
2127
+ * Running
2128
+ * @description the process that runs it is alive
2129
+ */
2130
+ running: boolean;
2131
+ /**
2132
+ * Unresponsive
2133
+ * @description its host last reported it alive and has stopped reporting (a hub only)
2134
+ * @default false
2135
+ */
2136
+ unresponsive?: boolean;
2137
+ /**
2138
+ * Host Id
2139
+ * @description the host that drives it; empty when its run.json does not say
2140
+ * @default
2141
+ */
2142
+ host_id?: string;
2143
+ /**
2144
+ * Run Uid
2145
+ * @description the id no other run has, on any host; empty when its run.json does not say
2146
+ * @default
2147
+ */
2148
+ run_uid?: string;
2149
+ /** Started At */
2150
+ started_at: string;
2151
+ /**
2152
+ * Stub
2153
+ * @description a stub run: the stub agent, or a replay's recordings, played its tasks (`Pipeline(stub=)`, `contraagent run --stub`)
2154
+ * @default false
2155
+ */
2156
+ stub?: boolean;
2157
+ /**
2158
+ * Replay
2159
+ * @description a replay: the directory of the recordings it played (`Pipeline(replay=)`), and with `record_missing` recorded into (then `stub` is false, and each played attempt's journal row says `replayed`); empty otherwise
2160
+ * @default
2161
+ */
2162
+ replay?: string;
2163
+ /**
2164
+ * Row Extras
2165
+ * @description the journal columns that are the pipeline's own (`Run(row_extras=)`), in the order they first appear
2166
+ */
2167
+ row_extras?: string[];
2168
+ };
2169
+ /**
2170
+ * SkippedHop
2171
+ * @description A hop of the failover chain an attempt passed over without a launch, because its
2172
+ * credential rested: its route label and model, and the rest.
2173
+ */
2174
+ SkippedHop: {
2175
+ /** Credential */
2176
+ credential: string;
2177
+ /**
2178
+ * Window
2179
+ * @default
2180
+ * @enum {string}
2181
+ */
2182
+ window?: "" | "five_hour" | "seven_day";
2183
+ /** Pct */
2184
+ pct?: number | null;
2185
+ /** Cap */
2186
+ cap?: number | null;
2187
+ /**
2188
+ * Rule
2189
+ * @default
2190
+ */
2191
+ rule?: string;
2192
+ /**
2193
+ * Until
2194
+ * @default
2195
+ */
2196
+ until?: string;
2197
+ /**
2198
+ * Account
2199
+ * @default
2200
+ */
2201
+ account?: string;
2202
+ /** Reading */
2203
+ reading?: {
2204
+ [key: string]: unknown;
2205
+ } | null;
2206
+ /**
2207
+ * Route
2208
+ * @default
2209
+ */
2210
+ route?: string;
2211
+ /**
2212
+ * Model
2213
+ * @default
2214
+ */
2215
+ model?: string;
2216
+ } & {
2217
+ [key: string]: unknown;
2218
+ };
2219
+ /**
2220
+ * StageEntry
2221
+ * @description One transition of the cursor (`HistoryEntry`), its time as `datetime.isoformat` gives it.
2222
+ */
2223
+ StageEntry: {
2224
+ /** Name */
2225
+ name: string;
2226
+ /** At */
2227
+ at: string;
2228
+ };
2229
+ /**
2230
+ * StatusGridBody
2231
+ * @description A state per row (`y`) and column (`x`): `cells[row][column]`, null where there is
2232
+ * none. Each cell is coloured by its tone and named by its label (in the legend, the
2233
+ * tooltip and the table): the states of hourly cycles by day, say.
2234
+ */
2235
+ StatusGridBody: {
2236
+ /**
2237
+ * Title
2238
+ * @description a heading over the body
2239
+ */
2240
+ title?: string | null;
2241
+ /**
2242
+ * Collapsed
2243
+ * @description shown folded, under its title
2244
+ * @default false
2245
+ */
2246
+ collapsed?: boolean;
2247
+ /**
2248
+ * Type
2249
+ * @default status_grid
2250
+ * @constant
2251
+ */
2252
+ type?: "status_grid";
2253
+ /** X */
2254
+ x: string[];
2255
+ /** Y */
2256
+ y: string[];
2257
+ /** Cells */
2258
+ cells: (components["schemas"]["GridCell"] | null)[][];
2259
+ };
2260
+ /**
2261
+ * StreamMessage
2262
+ * @description `/events/stream`: the first message is the transcript's tail page, then each
2263
+ * message carries only the events after the previous one.
2264
+ */
2265
+ StreamMessage: {
2266
+ /**
2267
+ * Event
2268
+ * @constant
2269
+ */
2270
+ event: "stream";
2271
+ data: components["schemas"]["StreamPage"];
2272
+ };
2273
+ /**
2274
+ * StreamPage
2275
+ * @description A page of one transcript. `total` is the file's line count: pass it back as
2276
+ * `since` for the next page. The first page (`since=0`) is the tail; `behind`
2277
+ * lines precede it, fetched by asking again with a smaller `since`.
2278
+ */
2279
+ StreamPage: {
2280
+ /** Events */
2281
+ events: (components["schemas"]["LaunchEvent"] | components["schemas"]["MessageUpdateEvent"] | components["schemas"]["ToolStartEvent"] | components["schemas"]["ToolEndEvent"] | components["schemas"]["ToolCallEchoEvent"] | components["schemas"]["ToolResultEchoEvent"] | components["schemas"]["MessageEvent"] | components["schemas"]["NoticeEvent"] | components["schemas"]["RetryEvent"] | components["schemas"]["OtherEvent"])[];
2282
+ /** Total */
2283
+ total: number;
2284
+ /** Behind */
2285
+ behind: number;
2286
+ };
2287
+ /**
2288
+ * Substitution
2289
+ * @description A kind with no route left, run on the first route that answered (`substitute`).
2290
+ */
2291
+ Substitution: {
2292
+ /** Kind */
2293
+ kind: string;
2294
+ /** From Agent */
2295
+ from_agent: string;
2296
+ /** From Model */
2297
+ from_model: string;
2298
+ /** To Agent */
2299
+ to_agent: string;
2300
+ /** To Model */
2301
+ to_model: string;
2302
+ };
2303
+ /**
2304
+ * TableBody
2305
+ * @description Rows of values, one key per column; a row's `_tone` is its status (a `Tone`).
2306
+ */
2307
+ TableBody: {
2308
+ /**
2309
+ * Title
2310
+ * @description a heading over the body
2311
+ */
2312
+ title?: string | null;
2313
+ /**
2314
+ * Collapsed
2315
+ * @description shown folded, under its title
2316
+ * @default false
2317
+ */
2318
+ collapsed?: boolean;
2319
+ /**
2320
+ * Type
2321
+ * @default table
2322
+ * @constant
2323
+ */
2324
+ type?: "table";
2325
+ /** Columns */
2326
+ columns: components["schemas"]["TableColumn"][];
2327
+ /** Rows */
2328
+ rows: {
2329
+ [key: string]: unknown;
2330
+ }[];
2331
+ };
2332
+ /**
2333
+ * TableColumn
2334
+ * @description A column of a table body: `id` names the key of each row it shows. `bar`: a bar in
2335
+ * the cell, as long as the value against the column's largest. `link`: the key of each
2336
+ * row that holds the URL the cell leads to (http or https; any other is no link).
2337
+ */
2338
+ TableColumn: {
2339
+ /** Id */
2340
+ id: string;
2341
+ /** Label */
2342
+ label: string;
2343
+ /** Align */
2344
+ align?: ("start" | "end") | null;
2345
+ /** Format */
2346
+ format?: ("usd" | "pct" | "duration" | "tokens" | "datetime" | "number") | null;
2347
+ /**
2348
+ * Bar
2349
+ * @default false
2350
+ */
2351
+ bar?: boolean;
2352
+ /**
2353
+ * Link
2354
+ * @description the key of the row that holds the cell's URL
2355
+ */
2356
+ link?: string | null;
2357
+ /** Tip */
2358
+ tip?: string | null;
2359
+ };
2360
+ /**
2361
+ * TaskCounts
2362
+ * @description A run's tasks (not attempts) by how they ended. `not_started`: refused for
2363
+ * an input, or waiting behind a task that failed; `running`: running now (in a
2364
+ * live run); `waiting`: queued in a live run; `not_run`: deferred, or queued in a
2365
+ * run that is no longer live (it will not run).
2366
+ */
2367
+ TaskCounts: {
2368
+ /** Total */
2369
+ total: number;
2370
+ /** Done */
2371
+ done: number;
2372
+ /**
2373
+ * Partial
2374
+ * @description tasks whose last result was `partial`: ok, the output a placeholder; not in `done`
2375
+ * @default 0
2376
+ */
2377
+ partial?: number;
2378
+ /** Failed */
2379
+ failed: number;
2380
+ /** Not Started */
2381
+ not_started: number;
2382
+ /**
2383
+ * Running
2384
+ * @default 0
2385
+ */
2386
+ running?: number;
2387
+ /** Waiting */
2388
+ waiting: number;
2389
+ /**
2390
+ * Not Run
2391
+ * @default 0
2392
+ */
2393
+ not_run?: number;
2394
+ /** Skipped */
2395
+ skipped: number;
2396
+ };
2397
+ /**
2398
+ * TaskDefinition
2399
+ * @description What defined one kind of task in this run (`definitions/<kind>.json`).
2400
+ * Beyond `kind`, the keys are the task adapter's choice; these are the ones
2401
+ * the bundled adapters write.
2402
+ */
2403
+ TaskDefinition: {
2404
+ /** Kind */
2405
+ kind: string;
2406
+ /** Role */
2407
+ role?: string | null;
2408
+ /** Plugin Dirs */
2409
+ plugin_dirs?: string[];
2410
+ /** Files */
2411
+ files?: components["schemas"]["DefinitionFile"][];
2412
+ /** Plugin */
2413
+ plugin?: boolean | null;
2414
+ /** Name */
2415
+ name?: string | null;
2416
+ /** Root */
2417
+ root?: string | null;
2418
+ /** Params */
2419
+ params?: string | null;
2420
+ /** Requires */
2421
+ requires?: string[];
2422
+ /** Output */
2423
+ output?: string | null;
2424
+ /**
2425
+ * Output From
2426
+ * @description agent task: `file`, the agent writes its output; `message`, its final message is the output
2427
+ */
2428
+ output_from?: ("file" | "message") | null;
2429
+ /** Validators */
2430
+ validators?: string[];
2431
+ /**
2432
+ * Preserve
2433
+ * @description agent task: JSON pointers to the parts of its output file it keeps (`agent_task(preserve=)`)
2434
+ */
2435
+ preserve?: string[];
2436
+ /**
2437
+ * Output Of
2438
+ * @description agent task: the kind whose output file it writes (`agent_task(output_of=)`)
2439
+ */
2440
+ output_of?: string | null;
2441
+ /**
2442
+ * Base Kind
2443
+ * @description agent task: an implementation kind's base kind (`agent_task(implementations=)`)
2444
+ */
2445
+ base_kind?: string | null;
2446
+ /**
2447
+ * Tools
2448
+ * @description agent task: `[]`, a light launch with no tools (`agent_task(tools=())`); null, the tools its role allows
2449
+ */
2450
+ tools?: string[] | null;
2451
+ /** Executor */
2452
+ executor?: ("agent" | "python") | null;
2453
+ /**
2454
+ * Function
2455
+ * @description Python task: `module.qualname` of its function
2456
+ */
2457
+ function?: string | null;
2458
+ /**
2459
+ * Signature
2460
+ * @description Python task: the function's signature
2461
+ */
2462
+ signature?: string | null;
2463
+ /**
2464
+ * Doc
2465
+ * @description Python task: the function's docstring
2466
+ */
2467
+ doc?: string | null;
2468
+ /**
2469
+ * File
2470
+ * @description Python task: the source file, relative to the run's working directory when inside it
2471
+ */
2472
+ file?: string | null;
2473
+ /**
2474
+ * Line
2475
+ * @description Python task: the function's first line in `file`
2476
+ */
2477
+ line?: number | null;
2478
+ /**
2479
+ * Retries
2480
+ * @description Python task: the fresh attempts after the first, each after an exception of `retry_on` (`@python_task(retries=)`)
2481
+ */
2482
+ retries?: number | null;
2483
+ /**
2484
+ * Retry On
2485
+ * @description Python task: the exception classes that give an attempt a fresh one
2486
+ */
2487
+ retry_on?: string[] | null;
2488
+ } & {
2489
+ [key: string]: unknown;
2490
+ };
2491
+ /**
2492
+ * TaskDetail
2493
+ * @description One task, by its key. Open: the `task_detail` callback merges its own keys
2494
+ * in (a failing one leaves `task_detail_error` instead).
2495
+ */
2496
+ TaskDetail: {
2497
+ /**
2498
+ * Key
2499
+ * @description the task key asked for
2500
+ */
2501
+ key: string;
2502
+ /** Rows */
2503
+ rows: components["schemas"]["JournalRow"][];
2504
+ /**
2505
+ * Launches
2506
+ * @description its launches running now; empty once it has finished (finished attempts are `rows`)
2507
+ */
2508
+ launches: components["schemas"]["TaskLaunch"][];
2509
+ definition: components["schemas"]["TaskDefinition"] | null;
2510
+ io: components["schemas"]["TaskIO"];
2511
+ /**
2512
+ * Stream
2513
+ * @description the transcript's task key for /stream and /events/stream, null when it has none
2514
+ */
2515
+ stream: string | null;
2516
+ /**
2517
+ * Row Extras
2518
+ * @description the columns of `rows` that are the pipeline's own (`Run(row_extras=)`), in the order they first appear
2519
+ */
2520
+ row_extras?: string[];
2521
+ /** Task Detail Error */
2522
+ task_detail_error?: string | null;
2523
+ } & {
2524
+ [key: string]: unknown;
2525
+ };
2526
+ /**
2527
+ * TaskIO
2528
+ * @description The task's params, what it reads and leaves behind, and its neighbours in the plan.
2529
+ */
2530
+ TaskIO: {
2531
+ /** Params */
2532
+ params: {
2533
+ [key: string]: unknown;
2534
+ };
2535
+ /** Inputs */
2536
+ inputs: components["schemas"]["ContractSpec"][];
2537
+ /** Outputs */
2538
+ outputs: components["schemas"]["ContractSpec"][];
2539
+ /**
2540
+ * Executor
2541
+ * @enum {string}
2542
+ */
2543
+ executor: "agent" | "python";
2544
+ /** Upstream */
2545
+ upstream: components["schemas"]["UpstreamTask"][];
2546
+ /** Downstream */
2547
+ downstream: components["schemas"]["DownstreamTask"][];
2548
+ };
2549
+ /**
2550
+ * TaskLaunch
2551
+ * @description A live launch of the task (a child process, or an in-process marker with empty plugin/model/role/cmd).
2552
+ */
2553
+ TaskLaunch: {
2554
+ /** Key */
2555
+ key: string | null;
2556
+ /** Kind */
2557
+ kind: string | null;
2558
+ /** Unit */
2559
+ unit: string | null;
2560
+ /** Pid */
2561
+ pid: number | null;
2562
+ /** Age S */
2563
+ age_s: number | null;
2564
+ /** Plugin */
2565
+ plugin: string | null;
2566
+ /** Model */
2567
+ model: string | null;
2568
+ /** Role */
2569
+ role: string | null;
2570
+ /**
2571
+ * Cmd
2572
+ * @description the full command line, cut at 600 characters
2573
+ */
2574
+ cmd: string;
2575
+ };
2576
+ /** TilesBody */
2577
+ TilesBody: {
2578
+ /**
2579
+ * Title
2580
+ * @description a heading over the body
2581
+ */
2582
+ title?: string | null;
2583
+ /**
2584
+ * Collapsed
2585
+ * @description shown folded, under its title
2586
+ * @default false
2587
+ */
2588
+ collapsed?: boolean;
2589
+ /**
2590
+ * Type
2591
+ * @default tiles
2592
+ * @constant
2593
+ */
2594
+ type?: "tiles";
2595
+ /** Tiles */
2596
+ tiles: components["schemas"]["PanelTile"][];
2597
+ };
2598
+ /**
2599
+ * TimeBoxRecord
2600
+ * @description A flow call's own deadline (`time_box`, `TimeBox`), as `flow_calls.jsonl` records it.
2601
+ */
2602
+ TimeBoxRecord: {
2603
+ /**
2604
+ * Started At
2605
+ * @description when the flow call started, where its deadline counts from (UTC ISO 8601)
2606
+ */
2607
+ started_at: string;
2608
+ /**
2609
+ * Deadline S
2610
+ * @description seconds from `started_at` to the deadline
2611
+ */
2612
+ deadline_s: number;
2613
+ /**
2614
+ * Grace S
2615
+ * @description seconds past the deadline its `finishing_kinds` still launch
2616
+ */
2617
+ grace_s: number;
2618
+ /**
2619
+ * Slack S
2620
+ * @description seconds before the deadline from which its tasks are ordered for it
2621
+ */
2622
+ slack_s: number;
2623
+ /**
2624
+ * Finishing Kinds
2625
+ * @description the kinds that still launch past the deadline
2626
+ * @default []
2627
+ */
2628
+ finishing_kinds?: string[];
2629
+ };
2630
+ /**
2631
+ * TokenUsage
2632
+ * @description Tokens summed over API calls: an attempt's (its rounds and hops, in `JournalRow.usage`)
2633
+ * or one hop's (`Hop.usage`).
2634
+ */
2635
+ TokenUsage: {
2636
+ /**
2637
+ * Input
2638
+ * @default 0
2639
+ */
2640
+ input?: number;
2641
+ /**
2642
+ * Output
2643
+ * @default 0
2644
+ */
2645
+ output?: number;
2646
+ /**
2647
+ * Cache Read
2648
+ * @default 0
2649
+ */
2650
+ cache_read?: number;
2651
+ /**
2652
+ * Cache Creation
2653
+ * @default 0
2654
+ */
2655
+ cache_creation?: number;
2656
+ /**
2657
+ * Calls
2658
+ * @default 0
2659
+ */
2660
+ calls?: number;
2661
+ /** Resident */
2662
+ resident?: number | null;
2663
+ /** Peak Context */
2664
+ peak_context?: number | null;
2665
+ /** Context Window */
2666
+ context_window?: number | null;
2667
+ } & {
2668
+ [key: string]: unknown;
2669
+ };
2670
+ /**
2671
+ * ToolCallEchoEvent
2672
+ * @description omp: a tool call carried on a message or turn (`acall`).
2673
+ */
2674
+ ToolCallEchoEvent: {
2675
+ /**
2676
+ * Type
2677
+ * @constant
2678
+ */
2679
+ type: "acall";
2680
+ /** Tool */
2681
+ tool: string | null;
2682
+ /** Cmd */
2683
+ cmd: string;
2684
+ /** Call */
2685
+ call: string;
2686
+ /** Intent */
2687
+ intent: string;
2688
+ /**
2689
+ * Web Query
2690
+ * @description the query, when the call is a web search
2691
+ */
2692
+ web_query?: string | null;
2693
+ /**
2694
+ * Web Fetch
2695
+ * @description the URL, when the call reads a web page
2696
+ */
2697
+ web_fetch?: string | null;
2698
+ } & {
2699
+ [key: string]: unknown;
2700
+ };
2701
+ /**
2702
+ * ToolEndEvent
2703
+ * @description A tool call's result. `tool` is empty for claude, which names only the call id.
2704
+ */
2705
+ ToolEndEvent: {
2706
+ /**
2707
+ * Type
2708
+ * @constant
2709
+ */
2710
+ type: "tool_execution_end";
2711
+ /** Tool */
2712
+ tool: string | null;
2713
+ /** Out */
2714
+ out: string;
2715
+ /** Err */
2716
+ err: boolean;
2717
+ /** Call */
2718
+ call: string;
2719
+ } & {
2720
+ [key: string]: unknown;
2721
+ };
2722
+ /**
2723
+ * ToolResultEchoEvent
2724
+ * @description omp: a tool result carried as a `toolResult` message (`aresult`).
2725
+ */
2726
+ ToolResultEchoEvent: {
2727
+ /**
2728
+ * Type
2729
+ * @constant
2730
+ */
2731
+ type: "aresult";
2732
+ /** Tool */
2733
+ tool: string | null;
2734
+ /** Call */
2735
+ call: string;
2736
+ /** Out */
2737
+ out: string;
2738
+ /** Err */
2739
+ err: boolean;
2740
+ } & {
2741
+ [key: string]: unknown;
2742
+ };
2743
+ /**
2744
+ * ToolStartEvent
2745
+ * @description A tool call starting (or omp's progress update for it). `call` pairs it with its end event.
2746
+ */
2747
+ ToolStartEvent: {
2748
+ /**
2749
+ * Type
2750
+ * @enum {string}
2751
+ */
2752
+ type: "tool_execution_start" | "tool_execution_update";
2753
+ /** Tool */
2754
+ tool: string | null;
2755
+ /**
2756
+ * Cmd
2757
+ * @description a one-line preview: the command, pattern, path, URL or query
2758
+ */
2759
+ cmd: string;
2760
+ /** Intent */
2761
+ intent: string;
2762
+ /** Call */
2763
+ call: string;
2764
+ /**
2765
+ * Web Query
2766
+ * @description the query, when the call is a web search
2767
+ */
2768
+ web_query?: string | null;
2769
+ /**
2770
+ * Web Fetch
2771
+ * @description the URL, when the call reads a web page
2772
+ */
2773
+ web_fetch?: string | null;
2774
+ } & {
2775
+ [key: string]: unknown;
2776
+ };
2777
+ /**
2778
+ * TrendDay
2779
+ * @description One day: its attempts (by when they ended), and its cost per group (`Monitor(groups=)`; a kind in none is its own).
2780
+ */
2781
+ TrendDay: {
2782
+ /** Day */
2783
+ day: string;
2784
+ /**
2785
+ * Cost Usd
2786
+ * @description group -> cost, USD; a group with no cost reported is absent
2787
+ */
2788
+ cost_usd: {
2789
+ [key: string]: number;
2790
+ };
2791
+ /** Attempts */
2792
+ attempts: number;
2793
+ /**
2794
+ * Ok
2795
+ * @description attempts that passed, not counting `partial` ones
2796
+ */
2797
+ ok: number;
2798
+ /**
2799
+ * Partial
2800
+ * @description attempts with stop `partial`: ok, counted apart from `ok`
2801
+ * @default 0
2802
+ */
2803
+ partial?: number;
2804
+ };
2805
+ /**
2806
+ * TrendDeferral
2807
+ * @description A deferred task (`deferred.jsonl`), with its run; `cause` is `DeferralCause.cause`.
2808
+ */
2809
+ TrendDeferral: {
2810
+ /** Run */
2811
+ run: string;
2812
+ /** Ts */
2813
+ ts: string;
2814
+ /** Key */
2815
+ key: string;
2816
+ /** Kind */
2817
+ kind: string;
2818
+ /** Cause */
2819
+ cause: string;
2820
+ /** Reason */
2821
+ reason: string;
2822
+ };
2823
+ /**
2824
+ * TrendDenial
2825
+ * @description Tool calls the coding agent's permissions refused, of one tool (`launches.jsonl` `denied`).
2826
+ */
2827
+ TrendDenial: {
2828
+ /** Tool */
2829
+ tool: string;
2830
+ /** Count */
2831
+ count: number;
2832
+ /** Kinds */
2833
+ kinds: {
2834
+ [key: string]: number;
2835
+ };
2836
+ };
2837
+ /**
2838
+ * TrendKind
2839
+ * @description One kind over the period. A task is one key of one run; its last attempt in the period says how it ended.
2840
+ */
2841
+ TrendKind: {
2842
+ /** Kind */
2843
+ kind: string;
2844
+ /** Group */
2845
+ group: string;
2846
+ /**
2847
+ * Executor
2848
+ * @enum {string}
2849
+ */
2850
+ executor: "agent" | "python";
2851
+ /** Tasks */
2852
+ tasks: number;
2853
+ /**
2854
+ * Tasks Ok
2855
+ * @description tasks whose last attempt passed, not counting `partial` ones
2856
+ */
2857
+ tasks_ok: number;
2858
+ /**
2859
+ * Tasks Partial
2860
+ * @description tasks whose last attempt was `partial`
2861
+ * @default 0
2862
+ */
2863
+ tasks_partial?: number;
2864
+ /** Attempts */
2865
+ attempts: number;
2866
+ /**
2867
+ * Ok
2868
+ * @description attempts that passed, not counting `partial` ones
2869
+ */
2870
+ ok: number;
2871
+ /**
2872
+ * Partial
2873
+ * @description attempts with stop `partial`: ok, counted apart from `ok`
2874
+ * @default 0
2875
+ */
2876
+ partial?: number;
2877
+ /**
2878
+ * Wall S
2879
+ * @description every attempt's wall time, summed
2880
+ */
2881
+ wall_s: number;
2882
+ /**
2883
+ * Wall S Median
2884
+ * @description the median attempt's wall time
2885
+ */
2886
+ wall_s_median: number;
2887
+ /** Cost Usd */
2888
+ cost_usd: number | null;
2889
+ tokens: components["schemas"]["TokenUsage"];
2890
+ };
2891
+ /**
2892
+ * TrendPeriod
2893
+ * @description The period: days `from`..`to`, both included, in the time zone `tz` (an IANA name).
2894
+ */
2895
+ TrendPeriod: {
2896
+ /**
2897
+ * From
2898
+ * @description the first day, YYYY-MM-DD
2899
+ */
2900
+ from: string;
2901
+ /**
2902
+ * To
2903
+ * @description the last day, YYYY-MM-DD
2904
+ */
2905
+ to: string;
2906
+ /** Tz */
2907
+ tz: string;
2908
+ /**
2909
+ * Days
2910
+ * @description every day of the period, in order
2911
+ */
2912
+ days: string[];
2913
+ };
2914
+ /**
2915
+ * TrendQuota
2916
+ * @description One account's utilization of one window over the period: each day's and each hour's highest reading.
2917
+ * A credential whose token was replaced has one entry per account.
2918
+ */
2919
+ TrendQuota: {
2920
+ /** Credential */
2921
+ credential: string;
2922
+ /**
2923
+ * Account
2924
+ * @description the account the readings are of (`QuotaReading.account`); empty when not known
2925
+ * @default
2926
+ */
2927
+ account?: string;
2928
+ /**
2929
+ * Window
2930
+ * @description `five_hour`, `seven_day`, or another window a reading names (`seven_day_opus`)
2931
+ */
2932
+ window: string;
2933
+ /**
2934
+ * Daily Peak
2935
+ * @description per day of `period.days`; null when no reading arrived that day
2936
+ */
2937
+ daily_peak: (number | null)[];
2938
+ /**
2939
+ * Hourly Peak
2940
+ * @description per hour from the period's first instant (the first day's midnight in `tz`); null when no reading arrived in it
2941
+ */
2942
+ hourly_peak: (number | null)[];
2943
+ };
2944
+ /**
2945
+ * TrendRest
2946
+ * @description A start or end of a credential's rest (a `rests.jsonl` row), with its run.
2947
+ */
2948
+ TrendRest: {
2949
+ /** Credential */
2950
+ credential: string;
2951
+ /**
2952
+ * Window
2953
+ * @default
2954
+ * @enum {string}
2955
+ */
2956
+ window?: "" | "five_hour" | "seven_day";
2957
+ /** Pct */
2958
+ pct?: number | null;
2959
+ /** Cap */
2960
+ cap?: number | null;
2961
+ /**
2962
+ * Rule
2963
+ * @default
2964
+ */
2965
+ rule?: string;
2966
+ /**
2967
+ * Until
2968
+ * @default
2969
+ */
2970
+ until?: string;
2971
+ /**
2972
+ * Account
2973
+ * @default
2974
+ */
2975
+ account?: string;
2976
+ /** Reading */
2977
+ reading?: {
2978
+ [key: string]: unknown;
2979
+ } | null;
2980
+ /** Ts */
2981
+ ts: string;
2982
+ /**
2983
+ * Event
2984
+ * @enum {string}
2985
+ */
2986
+ event: "start" | "end";
2987
+ /** Run */
2988
+ run: string;
2989
+ } & {
2990
+ [key: string]: unknown;
2991
+ };
2992
+ /**
2993
+ * TrendRun
2994
+ * @description One run of the period: its attempts in the period.
2995
+ */
2996
+ TrendRun: {
2997
+ /** Run */
2998
+ run: string;
2999
+ /** Run Group */
3000
+ run_group: string;
3001
+ /** Host Id */
3002
+ host_id: string;
3003
+ /** Started At */
3004
+ started_at: string;
3005
+ /** Finished At */
3006
+ finished_at: string;
3007
+ /**
3008
+ * Last Ts
3009
+ * @description when its last attempt in the period ended; empty when it has none
3010
+ */
3011
+ last_ts: string;
3012
+ /** Attempts */
3013
+ attempts: number;
3014
+ /**
3015
+ * Ok
3016
+ * @description attempts that passed, not counting `partial` ones
3017
+ */
3018
+ ok: number;
3019
+ /**
3020
+ * Partial
3021
+ * @description attempts with stop `partial`: ok, counted apart from `ok`
3022
+ * @default 0
3023
+ */
3024
+ partial?: number;
3025
+ /** Cost Usd */
3026
+ cost_usd: number | null;
3027
+ /** Wall S */
3028
+ wall_s: number;
3029
+ /** Stub */
3030
+ stub: boolean;
3031
+ };
3032
+ /**
3033
+ * TrendStarts
3034
+ * @description Run starts by weekday (`weekdays`, Monday first) and hour (`hours`) in the period's time zone: `counts[weekday][hour]`.
3035
+ */
3036
+ TrendStarts: {
3037
+ /** Weekdays */
3038
+ weekdays: string[];
3039
+ /** Hours */
3040
+ hours: number[];
3041
+ /** Counts */
3042
+ counts: number[][];
3043
+ };
3044
+ /**
3045
+ * TrendStop
3046
+ * @description Attempts that ended on one `stop`, and by which kinds.
3047
+ */
3048
+ TrendStop: {
3049
+ /** Stop */
3050
+ stop: string;
3051
+ /** Attempts */
3052
+ attempts: number;
3053
+ /** Kinds */
3054
+ kinds: {
3055
+ [key: string]: number;
3056
+ };
3057
+ };
3058
+ /**
3059
+ * TrendTotals
3060
+ * @description The period's runs and attempts, summed.
3061
+ */
3062
+ TrendTotals: {
3063
+ /**
3064
+ * Runs
3065
+ * @description runs with an attempt in the period, or started in it
3066
+ */
3067
+ runs: number;
3068
+ /** Attempts */
3069
+ attempts: number;
3070
+ /**
3071
+ * Ok
3072
+ * @description attempts that passed, not counting `partial` ones
3073
+ */
3074
+ ok: number;
3075
+ /**
3076
+ * Partial
3077
+ * @description attempts with stop `partial`: ok, counted apart from `ok`
3078
+ * @default 0
3079
+ */
3080
+ partial?: number;
3081
+ /**
3082
+ * Cost Usd
3083
+ * @description what the coding agents reported; null when no attempt reported a cost
3084
+ */
3085
+ cost_usd: number | null;
3086
+ /** Wall S */
3087
+ wall_s: number;
3088
+ tokens: components["schemas"]["TokenUsage"];
3089
+ };
3090
+ /**
3091
+ * Trends
3092
+ * @description What the runs of a period add up to (`Monitor.trends`). `bodies`: the same numbers as
3093
+ * panel bodies (`{"type": "blocks", ...}`), in English, for a page with no words of its own;
3094
+ * `panels`: the trend panels a domain registered (`Panel(scope="trends")`).
3095
+ */
3096
+ Trends: {
3097
+ period: components["schemas"]["TrendPeriod"];
3098
+ totals: components["schemas"]["TrendTotals"];
3099
+ /** Daily */
3100
+ daily: components["schemas"]["TrendDay"][];
3101
+ /** Kinds */
3102
+ kinds: components["schemas"]["TrendKind"][];
3103
+ /** Models */
3104
+ models: components["schemas"]["ModelUsage"][];
3105
+ /** Stops */
3106
+ stops: components["schemas"]["TrendStop"][];
3107
+ /** Denials */
3108
+ denials: components["schemas"]["TrendDenial"][];
3109
+ /** Quota */
3110
+ quota: components["schemas"]["TrendQuota"][];
3111
+ /** Rests */
3112
+ rests: components["schemas"]["TrendRest"][];
3113
+ /** Deferred */
3114
+ deferred: components["schemas"]["TrendDeferral"][];
3115
+ /** Deferred Causes */
3116
+ deferred_causes: {
3117
+ [key: string]: number;
3118
+ };
3119
+ /** Runs */
3120
+ runs: components["schemas"]["TrendRun"][];
3121
+ starts: components["schemas"]["TrendStarts"];
3122
+ /** Bodies */
3123
+ bodies: {
3124
+ [key: string]: {
3125
+ [key: string]: unknown;
3126
+ };
3127
+ };
3128
+ /** Panels */
3129
+ panels: components["schemas"]["PanelInfo"][];
3130
+ };
3131
+ /**
3132
+ * UnitPosition
3133
+ * @description One unit's place in the per-unit step sequence; `inflight` are the work
3134
+ * items dispatched but not yet recorded.
3135
+ */
3136
+ UnitPosition: {
3137
+ /** Stage */
3138
+ stage: string | null;
3139
+ /** Step */
3140
+ step: string | null;
3141
+ /** Completed */
3142
+ completed: string[];
3143
+ /** Loop Pass */
3144
+ loop_pass: number;
3145
+ /** Inflight */
3146
+ inflight: string[];
3147
+ };
3148
+ /** UpstreamTask */
3149
+ UpstreamTask: {
3150
+ /** Key */
3151
+ key: string;
3152
+ /** Kind */
3153
+ kind: string;
3154
+ /** Unit */
3155
+ unit: string;
3156
+ /**
3157
+ * Executor
3158
+ * @enum {string}
3159
+ */
3160
+ executor: "agent" | "python";
3161
+ /** Outputs */
3162
+ outputs: components["schemas"]["ContractSpec"][];
3163
+ };
3164
+ /** ValidationError */
3165
+ ValidationError: {
3166
+ /** Location */
3167
+ loc: (string | number)[];
3168
+ /** Message */
3169
+ msg: string;
3170
+ /** Error Type */
3171
+ type: string;
3172
+ /** Input */
3173
+ input?: unknown;
3174
+ /** Context */
3175
+ ctx?: Record<string, never>;
3176
+ };
3177
+ };
3178
+ responses: never;
3179
+ parameters: never;
3180
+ requestBodies: never;
3181
+ headers: never;
3182
+ pathItems: never;
3183
+ };
3184
+ export type $defs = Record<string, never>;
3185
+ export interface operations {
3186
+ api_info_api_info_get: {
3187
+ parameters: {
3188
+ query?: never;
3189
+ header?: never;
3190
+ path?: never;
3191
+ cookie?: never;
3192
+ };
3193
+ requestBody?: never;
3194
+ responses: {
3195
+ /** @description Successful Response */
3196
+ 200: {
3197
+ headers: {
3198
+ [name: string]: unknown;
3199
+ };
3200
+ content: {
3201
+ "application/json": components["schemas"]["Info"];
3202
+ };
3203
+ };
3204
+ };
3205
+ };
3206
+ api_runs_api_runs_get: {
3207
+ parameters: {
3208
+ query?: never;
3209
+ header?: never;
3210
+ path?: never;
3211
+ cookie?: never;
3212
+ };
3213
+ requestBody?: never;
3214
+ responses: {
3215
+ /** @description Successful Response */
3216
+ 200: {
3217
+ headers: {
3218
+ [name: string]: unknown;
3219
+ };
3220
+ content: {
3221
+ "application/json": components["schemas"]["RunSummary"][];
3222
+ };
3223
+ };
3224
+ };
3225
+ };
3226
+ api_hosts_api_hosts_get: {
3227
+ parameters: {
3228
+ query?: never;
3229
+ header?: never;
3230
+ path?: never;
3231
+ cookie?: never;
3232
+ };
3233
+ requestBody?: never;
3234
+ responses: {
3235
+ /** @description Successful Response */
3236
+ 200: {
3237
+ headers: {
3238
+ [name: string]: unknown;
3239
+ };
3240
+ content: {
3241
+ "application/json": components["schemas"]["Hosts"];
3242
+ };
3243
+ };
3244
+ };
3245
+ };
3246
+ api_trends_api_trends_get: {
3247
+ parameters: {
3248
+ query?: {
3249
+ /** @description the first day, YYYY-MM-DD (default: 13 days before `to`) */
3250
+ from?: string;
3251
+ /** @description the last day, YYYY-MM-DD (default: today in `tz`) */
3252
+ to?: string;
3253
+ /** @description the time zone the days are in, an IANA name (default UTC) */
3254
+ tz?: string;
3255
+ /** @description only the runs of this run group */
3256
+ run_group?: string;
3257
+ /** @description count stub runs too */
3258
+ stub?: boolean;
3259
+ };
3260
+ header?: never;
3261
+ path?: never;
3262
+ cookie?: never;
3263
+ };
3264
+ requestBody?: never;
3265
+ responses: {
3266
+ /** @description Successful Response */
3267
+ 200: {
3268
+ headers: {
3269
+ [name: string]: unknown;
3270
+ };
3271
+ content: {
3272
+ "application/json": components["schemas"]["Trends"];
3273
+ };
3274
+ };
3275
+ /** @description a period it cannot read */
3276
+ 400: {
3277
+ headers: {
3278
+ [name: string]: unknown;
3279
+ };
3280
+ content?: never;
3281
+ };
3282
+ /** @description Validation Error */
3283
+ 422: {
3284
+ headers: {
3285
+ [name: string]: unknown;
3286
+ };
3287
+ content: {
3288
+ "application/json": components["schemas"]["HTTPValidationError"];
3289
+ };
3290
+ };
3291
+ };
3292
+ };
3293
+ api_trend_panel_api_trends_panels__name__get: {
3294
+ parameters: {
3295
+ query?: {
3296
+ from?: string;
3297
+ to?: string;
3298
+ tz?: string;
3299
+ run_group?: string;
3300
+ };
3301
+ header?: never;
3302
+ path: {
3303
+ name: string;
3304
+ };
3305
+ cookie?: never;
3306
+ };
3307
+ requestBody?: never;
3308
+ responses: {
3309
+ /** @description Successful Response */
3310
+ 200: {
3311
+ headers: {
3312
+ [name: string]: unknown;
3313
+ };
3314
+ content: {
3315
+ "application/json": components["schemas"]["TilesBody"] | components["schemas"]["TableBody"] | components["schemas"]["ColumnsBody"] | components["schemas"]["LinesBody"] | components["schemas"]["HeatmapBody"] | components["schemas"]["HBarsBody"] | components["schemas"]["StatusGridBody"] | components["schemas"]["NoteBody"] | components["schemas"]["BlocksBody"] | {
3316
+ [key: string]: unknown;
3317
+ };
3318
+ };
3319
+ };
3320
+ /** @description a period it cannot read */
3321
+ 400: {
3322
+ headers: {
3323
+ [name: string]: unknown;
3324
+ };
3325
+ content?: never;
3326
+ };
3327
+ /** @description no trend panel of that name */
3328
+ 404: {
3329
+ headers: {
3330
+ [name: string]: unknown;
3331
+ };
3332
+ content?: never;
3333
+ };
3334
+ /** @description Validation Error */
3335
+ 422: {
3336
+ headers: {
3337
+ [name: string]: unknown;
3338
+ };
3339
+ content: {
3340
+ "application/json": components["schemas"]["HTTPValidationError"];
3341
+ };
3342
+ };
3343
+ };
3344
+ };
3345
+ api_journal_api_runs__run__journal_get: {
3346
+ parameters: {
3347
+ query?: {
3348
+ since?: number;
3349
+ };
3350
+ header?: never;
3351
+ path: {
3352
+ run: string;
3353
+ };
3354
+ cookie?: never;
3355
+ };
3356
+ requestBody?: never;
3357
+ responses: {
3358
+ /** @description Successful Response */
3359
+ 200: {
3360
+ headers: {
3361
+ [name: string]: unknown;
3362
+ };
3363
+ content: {
3364
+ "application/json": components["schemas"]["JournalPage"];
3365
+ };
3366
+ };
3367
+ /** @description Validation Error */
3368
+ 422: {
3369
+ headers: {
3370
+ [name: string]: unknown;
3371
+ };
3372
+ content: {
3373
+ "application/json": components["schemas"]["HTTPValidationError"];
3374
+ };
3375
+ };
3376
+ };
3377
+ };
3378
+ api_plan_api_runs__run__plan_get: {
3379
+ parameters: {
3380
+ query?: never;
3381
+ header?: never;
3382
+ path: {
3383
+ run: string;
3384
+ };
3385
+ cookie?: never;
3386
+ };
3387
+ requestBody?: never;
3388
+ responses: {
3389
+ /** @description Successful Response */
3390
+ 200: {
3391
+ headers: {
3392
+ [name: string]: unknown;
3393
+ };
3394
+ content: {
3395
+ "application/json": components["schemas"]["Plan"];
3396
+ };
3397
+ };
3398
+ /** @description Validation Error */
3399
+ 422: {
3400
+ headers: {
3401
+ [name: string]: unknown;
3402
+ };
3403
+ content: {
3404
+ "application/json": components["schemas"]["HTTPValidationError"];
3405
+ };
3406
+ };
3407
+ };
3408
+ };
3409
+ api_outputs_api_runs__run__outputs_get: {
3410
+ parameters: {
3411
+ query?: never;
3412
+ header?: never;
3413
+ path: {
3414
+ run: string;
3415
+ };
3416
+ cookie?: never;
3417
+ };
3418
+ requestBody?: never;
3419
+ responses: {
3420
+ /** @description Successful Response */
3421
+ 200: {
3422
+ headers: {
3423
+ [name: string]: unknown;
3424
+ };
3425
+ content: {
3426
+ "application/json": components["schemas"]["Outputs"];
3427
+ };
3428
+ };
3429
+ /** @description Validation Error */
3430
+ 422: {
3431
+ headers: {
3432
+ [name: string]: unknown;
3433
+ };
3434
+ content: {
3435
+ "application/json": components["schemas"]["HTTPValidationError"];
3436
+ };
3437
+ };
3438
+ };
3439
+ };
3440
+ api_definitions_api_runs__run__definitions_get: {
3441
+ parameters: {
3442
+ query?: never;
3443
+ header?: never;
3444
+ path: {
3445
+ run: string;
3446
+ };
3447
+ cookie?: never;
3448
+ };
3449
+ requestBody?: never;
3450
+ responses: {
3451
+ /** @description Successful Response */
3452
+ 200: {
3453
+ headers: {
3454
+ [name: string]: unknown;
3455
+ };
3456
+ content: {
3457
+ "application/json": components["schemas"]["TaskDefinition"][];
3458
+ };
3459
+ };
3460
+ /** @description Validation Error */
3461
+ 422: {
3462
+ headers: {
3463
+ [name: string]: unknown;
3464
+ };
3465
+ content: {
3466
+ "application/json": components["schemas"]["HTTPValidationError"];
3467
+ };
3468
+ };
3469
+ };
3470
+ };
3471
+ api_cursor_api_runs__run__cursor_get: {
3472
+ parameters: {
3473
+ query?: never;
3474
+ header?: never;
3475
+ path: {
3476
+ run: string;
3477
+ };
3478
+ cookie?: never;
3479
+ };
3480
+ requestBody?: never;
3481
+ responses: {
3482
+ /** @description Successful Response */
3483
+ 200: {
3484
+ headers: {
3485
+ [name: string]: unknown;
3486
+ };
3487
+ content: {
3488
+ "application/json": components["schemas"]["CursorView"];
3489
+ };
3490
+ };
3491
+ /** @description Validation Error */
3492
+ 422: {
3493
+ headers: {
3494
+ [name: string]: unknown;
3495
+ };
3496
+ content: {
3497
+ "application/json": components["schemas"]["HTTPValidationError"];
3498
+ };
3499
+ };
3500
+ };
3501
+ };
3502
+ api_procs_api_runs__run__procs_get: {
3503
+ parameters: {
3504
+ query?: never;
3505
+ header?: never;
3506
+ path: {
3507
+ run: string;
3508
+ };
3509
+ cookie?: never;
3510
+ };
3511
+ requestBody?: never;
3512
+ responses: {
3513
+ /** @description Successful Response */
3514
+ 200: {
3515
+ headers: {
3516
+ [name: string]: unknown;
3517
+ };
3518
+ content: {
3519
+ "application/json": components["schemas"]["Procs"];
3520
+ };
3521
+ };
3522
+ /** @description Validation Error */
3523
+ 422: {
3524
+ headers: {
3525
+ [name: string]: unknown;
3526
+ };
3527
+ content: {
3528
+ "application/json": components["schemas"]["HTTPValidationError"];
3529
+ };
3530
+ };
3531
+ };
3532
+ };
3533
+ api_task_api_runs__run__task__key__get: {
3534
+ parameters: {
3535
+ query?: never;
3536
+ header?: never;
3537
+ path: {
3538
+ run: string;
3539
+ key: string;
3540
+ };
3541
+ cookie?: never;
3542
+ };
3543
+ requestBody?: never;
3544
+ responses: {
3545
+ /** @description Successful Response */
3546
+ 200: {
3547
+ headers: {
3548
+ [name: string]: unknown;
3549
+ };
3550
+ content: {
3551
+ "application/json": components["schemas"]["TaskDetail"];
3552
+ };
3553
+ };
3554
+ /** @description Validation Error */
3555
+ 422: {
3556
+ headers: {
3557
+ [name: string]: unknown;
3558
+ };
3559
+ content: {
3560
+ "application/json": components["schemas"]["HTTPValidationError"];
3561
+ };
3562
+ };
3563
+ };
3564
+ };
3565
+ api_stream_api_runs__run__stream__key__get: {
3566
+ parameters: {
3567
+ query?: {
3568
+ since?: number;
3569
+ };
3570
+ header?: never;
3571
+ path: {
3572
+ run: string;
3573
+ key: string;
3574
+ };
3575
+ cookie?: never;
3576
+ };
3577
+ requestBody?: never;
3578
+ responses: {
3579
+ /** @description Successful Response */
3580
+ 200: {
3581
+ headers: {
3582
+ [name: string]: unknown;
3583
+ };
3584
+ content: {
3585
+ "application/json": components["schemas"]["StreamPage"];
3586
+ };
3587
+ };
3588
+ /** @description Validation Error */
3589
+ 422: {
3590
+ headers: {
3591
+ [name: string]: unknown;
3592
+ };
3593
+ content: {
3594
+ "application/json": components["schemas"]["HTTPValidationError"];
3595
+ };
3596
+ };
3597
+ };
3598
+ };
3599
+ api_panel_api_runs__run__panels__name__get: {
3600
+ parameters: {
3601
+ query?: never;
3602
+ header?: never;
3603
+ path: {
3604
+ run: string;
3605
+ name: string;
3606
+ };
3607
+ cookie?: never;
3608
+ };
3609
+ requestBody?: never;
3610
+ responses: {
3611
+ /** @description Successful Response */
3612
+ 200: {
3613
+ headers: {
3614
+ [name: string]: unknown;
3615
+ };
3616
+ content: {
3617
+ "application/json": components["schemas"]["TilesBody"] | components["schemas"]["TableBody"] | components["schemas"]["ColumnsBody"] | components["schemas"]["LinesBody"] | components["schemas"]["HeatmapBody"] | components["schemas"]["HBarsBody"] | components["schemas"]["StatusGridBody"] | components["schemas"]["NoteBody"] | components["schemas"]["BlocksBody"] | {
3618
+ [key: string]: unknown;
3619
+ };
3620
+ };
3621
+ };
3622
+ /** @description no run panel of that name */
3623
+ 404: {
3624
+ headers: {
3625
+ [name: string]: unknown;
3626
+ };
3627
+ content?: never;
3628
+ };
3629
+ /** @description Validation Error */
3630
+ 422: {
3631
+ headers: {
3632
+ [name: string]: unknown;
3633
+ };
3634
+ content: {
3635
+ "application/json": components["schemas"]["HTTPValidationError"];
3636
+ };
3637
+ };
3638
+ };
3639
+ };
3640
+ events_events_get: {
3641
+ parameters: {
3642
+ query: {
3643
+ run: string;
3644
+ };
3645
+ header?: never;
3646
+ path?: never;
3647
+ cookie?: never;
3648
+ };
3649
+ requestBody?: never;
3650
+ responses: {
3651
+ /** @description Server-Sent Events; each message is one `RunEvent` */
3652
+ 200: {
3653
+ headers: {
3654
+ [name: string]: unknown;
3655
+ };
3656
+ content: {
3657
+ "text/event-stream": components["schemas"]["RunEvent"];
3658
+ };
3659
+ };
3660
+ /** @description not a plain run id */
3661
+ 404: {
3662
+ headers: {
3663
+ [name: string]: unknown;
3664
+ };
3665
+ content?: never;
3666
+ };
3667
+ /** @description Validation Error */
3668
+ 422: {
3669
+ headers: {
3670
+ [name: string]: unknown;
3671
+ };
3672
+ content: {
3673
+ "application/json": components["schemas"]["HTTPValidationError"];
3674
+ };
3675
+ };
3676
+ };
3677
+ };
3678
+ events_stream_events_stream_get: {
3679
+ parameters: {
3680
+ query: {
3681
+ run: string;
3682
+ key: string;
3683
+ };
3684
+ header?: never;
3685
+ path?: never;
3686
+ cookie?: never;
3687
+ };
3688
+ requestBody?: never;
3689
+ responses: {
3690
+ /** @description Server-Sent Events; each message is one `StreamMessage` */
3691
+ 200: {
3692
+ headers: {
3693
+ [name: string]: unknown;
3694
+ };
3695
+ content: {
3696
+ "text/event-stream": components["schemas"]["StreamMessage"];
3697
+ };
3698
+ };
3699
+ /** @description not a plain run id or task key */
3700
+ 404: {
3701
+ headers: {
3702
+ [name: string]: unknown;
3703
+ };
3704
+ content?: never;
3705
+ };
3706
+ /** @description Validation Error */
3707
+ 422: {
3708
+ headers: {
3709
+ [name: string]: unknown;
3710
+ };
3711
+ content: {
3712
+ "application/json": components["schemas"]["HTTPValidationError"];
3713
+ };
3714
+ };
3715
+ };
3716
+ };
3717
+ }
3718
+ //# sourceMappingURL=schema.d.ts.map