@ellipsis-dev/sdk 0.11.0 → 0.13.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.
@@ -1,5 +1,5 @@
1
1
  interface paths {
2
- '/agents/configs': {
2
+ '/v1/agents/configs': {
3
3
  parameters: {
4
4
  query?: never;
5
5
  header?: never;
@@ -32,7 +32,7 @@ interface paths {
32
32
  patch?: never;
33
33
  trace?: never;
34
34
  };
35
- '/agents/configs/{config_id}': {
35
+ '/v1/agents/configs/{config_id}': {
36
36
  parameters: {
37
37
  query?: never;
38
38
  header?: never;
@@ -70,7 +70,7 @@ interface paths {
70
70
  patch?: never;
71
71
  trace?: never;
72
72
  };
73
- '/agents/configs/{config_id}/link': {
73
+ '/v1/agents/configs/{config_id}/link': {
74
74
  parameters: {
75
75
  query?: never;
76
76
  header?: never;
@@ -95,7 +95,7 @@ interface paths {
95
95
  patch?: never;
96
96
  trace?: never;
97
97
  };
98
- '/agents/configs/{config_id}/unlink': {
98
+ '/v1/agents/configs/{config_id}/unlink': {
99
99
  parameters: {
100
100
  query?: never;
101
101
  header?: never;
@@ -119,7 +119,7 @@ interface paths {
119
119
  patch?: never;
120
120
  trace?: never;
121
121
  };
122
- '/agents/defaults': {
122
+ '/v1/agents/defaults': {
123
123
  parameters: {
124
124
  query?: never;
125
125
  header?: never;
@@ -128,12 +128,11 @@ interface paths {
128
128
  };
129
129
  /**
130
130
  * List Agent Defaults
131
- * @description List default agent configs.
131
+ * @description Get the default agent configs.
132
132
  *
133
- * The account default and any per-repository defaults.
134
- *
135
- * Defaults are addressed by rung: the account rung is repository
136
- * omitted, a repo rung is "owner/name" — never by row id.
133
+ * The account-wide default and the per-repository defaults, as config
134
+ * ids. Repo rungs are keyed "owner/name"; a repository this
135
+ * installation can no longer see is omitted.
137
136
  */
138
137
  get: operations['list_agent_defaults'];
139
138
  /**
@@ -142,7 +141,7 @@ interface paths {
142
141
  *
143
142
  * Addressed by rung: the account rung (repository omitted) or a
144
143
  * repository rung ("owner/name"); the config by id or by the
145
- * agent's name.
144
+ * agent's name. Returns the full resulting ladder.
146
145
  *
147
146
  * Refused for sandbox tokens (potentially prompt-injected code
148
147
  * must not repoint the account's ambient default); an unknown or
@@ -165,7 +164,7 @@ interface paths {
165
164
  patch?: never;
166
165
  trace?: never;
167
166
  };
168
- '/agents/templates': {
167
+ '/v1/agents/templates': {
169
168
  parameters: {
170
169
  query?: never;
171
170
  header?: never;
@@ -188,7 +187,7 @@ interface paths {
188
187
  patch?: never;
189
188
  trace?: never;
190
189
  };
191
- '/agents/templates/{template_id}': {
190
+ '/v1/agents/templates/{template_id}': {
192
191
  parameters: {
193
192
  query?: never;
194
193
  header?: never;
@@ -208,7 +207,7 @@ interface paths {
208
207
  patch?: never;
209
208
  trace?: never;
210
209
  };
211
- '/alerts': {
210
+ '/v1/alerts': {
212
211
  parameters: {
213
212
  query?: never;
214
213
  header?: never;
@@ -233,7 +232,7 @@ interface paths {
233
232
  patch?: never;
234
233
  trace?: never;
235
234
  };
236
- '/alerts/{alert_id}': {
235
+ '/v1/alerts/{alert_id}': {
237
236
  parameters: {
238
237
  query?: never;
239
238
  header?: never;
@@ -255,7 +254,7 @@ interface paths {
255
254
  patch?: never;
256
255
  trace?: never;
257
256
  };
258
- '/alerts/{alert_id}/dismiss': {
257
+ '/v1/alerts/{alert_id}/dismiss': {
259
258
  parameters: {
260
259
  query?: never;
261
260
  header?: never;
@@ -277,7 +276,7 @@ interface paths {
277
276
  patch?: never;
278
277
  trace?: never;
279
278
  };
280
- '/analytics/metrics': {
279
+ '/v1/analytics/metrics': {
281
280
  parameters: {
282
281
  query?: never;
283
282
  header?: never;
@@ -305,7 +304,7 @@ interface paths {
305
304
  patch?: never;
306
305
  trace?: never;
307
306
  };
308
- '/analytics/pull-requests': {
307
+ '/v1/analytics/pull-requests': {
309
308
  parameters: {
310
309
  query?: never;
311
310
  header?: never;
@@ -328,7 +327,7 @@ interface paths {
328
327
  patch?: never;
329
328
  trace?: never;
330
329
  };
331
- '/analytics/reviews': {
330
+ '/v1/analytics/reviews': {
332
331
  parameters: {
333
332
  query?: never;
334
333
  header?: never;
@@ -353,7 +352,7 @@ interface paths {
353
352
  patch?: never;
354
353
  trace?: never;
355
354
  };
356
- '/auth/cli/poll': {
355
+ '/v1/auth/cli/poll': {
357
356
  parameters: {
358
357
  query?: never;
359
358
  header?: never;
@@ -375,7 +374,7 @@ interface paths {
375
374
  patch?: never;
376
375
  trace?: never;
377
376
  };
378
- '/auth/cli/start': {
377
+ '/v1/auth/cli/start': {
379
378
  parameters: {
380
379
  query?: never;
381
380
  header?: never;
@@ -399,7 +398,7 @@ interface paths {
399
398
  patch?: never;
400
399
  trace?: never;
401
400
  };
402
- '/budget': {
401
+ '/v1/budget': {
403
402
  parameters: {
404
403
  query?: never;
405
404
  header?: never;
@@ -419,7 +418,7 @@ interface paths {
419
418
  patch?: never;
420
419
  trace?: never;
421
420
  };
422
- '/files': {
421
+ '/v1/files': {
423
422
  parameters: {
424
423
  query?: never;
425
424
  header?: never;
@@ -452,7 +451,7 @@ interface paths {
452
451
  patch?: never;
453
452
  trace?: never;
454
453
  };
455
- '/files/{file_id}': {
454
+ '/v1/files/{file_id}': {
456
455
  parameters: {
457
456
  query?: never;
458
457
  header?: never;
@@ -490,7 +489,7 @@ interface paths {
490
489
  patch?: never;
491
490
  trace?: never;
492
491
  };
493
- '/integrations': {
492
+ '/v1/integrations': {
494
493
  parameters: {
495
494
  query?: never;
496
495
  header?: never;
@@ -517,7 +516,7 @@ interface paths {
517
516
  patch?: never;
518
517
  trace?: never;
519
518
  };
520
- '/integrations/github/members': {
519
+ '/v1/integrations/github/members': {
521
520
  parameters: {
522
521
  query?: never;
523
522
  header?: never;
@@ -543,7 +542,7 @@ interface paths {
543
542
  patch?: never;
544
543
  trace?: never;
545
544
  };
546
- '/integrations/github/repos': {
545
+ '/v1/integrations/github/repos': {
547
546
  parameters: {
548
547
  query?: never;
549
548
  header?: never;
@@ -563,7 +562,7 @@ interface paths {
563
562
  patch?: never;
564
563
  trace?: never;
565
564
  };
566
- '/integrations/linear/teams': {
565
+ '/v1/integrations/linear/teams': {
567
566
  parameters: {
568
567
  query?: never;
569
568
  header?: never;
@@ -583,7 +582,7 @@ interface paths {
583
582
  patch?: never;
584
583
  trace?: never;
585
584
  };
586
- '/integrations/sentry/organizations': {
585
+ '/v1/integrations/sentry/organizations': {
587
586
  parameters: {
588
587
  query?: never;
589
588
  header?: never;
@@ -603,7 +602,7 @@ interface paths {
603
602
  patch?: never;
604
603
  trace?: never;
605
604
  };
606
- '/integrations/slack/channels': {
605
+ '/v1/integrations/slack/channels': {
607
606
  parameters: {
608
607
  query?: never;
609
608
  header?: never;
@@ -624,7 +623,7 @@ interface paths {
624
623
  patch?: never;
625
624
  trace?: never;
626
625
  };
627
- '/integrations/slack/members': {
626
+ '/v1/integrations/slack/members': {
628
627
  parameters: {
629
628
  query?: never;
630
629
  header?: never;
@@ -645,7 +644,7 @@ interface paths {
645
644
  patch?: never;
646
645
  trace?: never;
647
646
  };
648
- '/me': {
647
+ '/v1/me': {
649
648
  parameters: {
650
649
  query?: never;
651
650
  header?: never;
@@ -665,7 +664,7 @@ interface paths {
665
664
  patch?: never;
666
665
  trace?: never;
667
666
  };
668
- '/memories': {
667
+ '/v1/memories': {
669
668
  parameters: {
670
669
  query?: never;
671
670
  header?: never;
@@ -702,7 +701,7 @@ interface paths {
702
701
  patch?: never;
703
702
  trace?: never;
704
703
  };
705
- '/memories/{memory_id}': {
704
+ '/v1/memories/{memory_id}': {
706
705
  parameters: {
707
706
  query?: never;
708
707
  header?: never;
@@ -743,7 +742,7 @@ interface paths {
743
742
  patch?: never;
744
743
  trace?: never;
745
744
  };
746
- '/models': {
745
+ '/v1/models': {
747
746
  parameters: {
748
747
  query?: never;
749
748
  header?: never;
@@ -770,7 +769,7 @@ interface paths {
770
769
  patch?: never;
771
770
  trace?: never;
772
771
  };
773
- '/reviews': {
772
+ '/v1/reviews': {
774
773
  parameters: {
775
774
  query?: never;
776
775
  header?: never;
@@ -809,7 +808,7 @@ interface paths {
809
808
  patch?: never;
810
809
  trace?: never;
811
810
  };
812
- '/reviews/{review_id}': {
811
+ '/v1/reviews/{review_id}': {
813
812
  parameters: {
814
813
  query?: never;
815
814
  header?: never;
@@ -836,7 +835,7 @@ interface paths {
836
835
  patch?: never;
837
836
  trace?: never;
838
837
  };
839
- '/secrets': {
838
+ '/v1/secrets': {
840
839
  parameters: {
841
840
  query?: never;
842
841
  header?: never;
@@ -868,7 +867,7 @@ interface paths {
868
867
  patch?: never;
869
868
  trace?: never;
870
869
  };
871
- '/secrets/{name}': {
870
+ '/v1/secrets/{name}': {
872
871
  parameters: {
873
872
  query?: never;
874
873
  header?: never;
@@ -891,7 +890,7 @@ interface paths {
891
890
  patch?: never;
892
891
  trace?: never;
893
892
  };
894
- '/sessions': {
893
+ '/v1/sessions': {
895
894
  parameters: {
896
895
  query?: never;
897
896
  header?: never;
@@ -916,8 +915,7 @@ interface paths {
916
915
  * config, or
917
916
  * template_id; with none, the account's default-config ladder
918
917
  * resolves the config. 400 when idle_start is combined with
919
- * prompt, input, or handoff, or when a handoff is combined with
920
- * any config source or override. 422 when the agent declares an
918
+ * prompt or input. 422 when the agent declares an
921
919
  * input schema and the request's input is absent or invalid.
922
920
  */
923
921
  post: operations['start_agent_session'];
@@ -927,7 +925,7 @@ interface paths {
927
925
  patch?: never;
928
926
  trace?: never;
929
927
  };
930
- '/sessions/search': {
928
+ '/v1/sessions/search': {
931
929
  parameters: {
932
930
  query?: never;
933
931
  header?: never;
@@ -955,31 +953,7 @@ interface paths {
955
953
  patch?: never;
956
954
  trace?: never;
957
955
  };
958
- '/sessions/sync': {
959
- parameters: {
960
- query?: never;
961
- header?: never;
962
- path?: never;
963
- cookie?: never;
964
- };
965
- get?: never;
966
- put?: never;
967
- /**
968
- * Sync Agent Session
969
- * @description Sync a local Claude Code session to Ellipsis.
970
- *
971
- * Requires a user token (device-flow `agent login`): the user is
972
- * part of the sync's idempotency key, so API keys and sandbox
973
- * tokens are rejected with a 403 rather than silently attributed.
974
- */
975
- post: operations['sync_agent_session'];
976
- delete?: never;
977
- options?: never;
978
- head?: never;
979
- patch?: never;
980
- trace?: never;
981
- };
982
- '/sessions/{session_id}': {
956
+ '/v1/sessions/{session_id}': {
983
957
  parameters: {
984
958
  query?: never;
985
959
  header?: never;
@@ -1006,7 +980,7 @@ interface paths {
1006
980
  patch?: never;
1007
981
  trace?: never;
1008
982
  };
1009
- '/sessions/{session_id}/executions': {
983
+ '/v1/sessions/{session_id}/executions': {
1010
984
  parameters: {
1011
985
  query?: never;
1012
986
  header?: never;
@@ -1034,7 +1008,7 @@ interface paths {
1034
1008
  patch?: never;
1035
1009
  trace?: never;
1036
1010
  };
1037
- '/sessions/{session_id}/export': {
1011
+ '/v1/sessions/{session_id}/export': {
1038
1012
  parameters: {
1039
1013
  query?: never;
1040
1014
  header?: never;
@@ -1063,35 +1037,7 @@ interface paths {
1063
1037
  patch?: never;
1064
1038
  trace?: never;
1065
1039
  };
1066
- '/sessions/{session_id}/ide': {
1067
- parameters: {
1068
- query?: never;
1069
- header?: never;
1070
- path?: never;
1071
- cookie?: never;
1072
- };
1073
- /**
1074
- * Get Agent Session Ide
1075
- * @description Return the IDE link for the session's sandbox.
1076
- *
1077
- * The membership-gated dashboard page, which performs the sandbox
1078
- * proxy handoff itself.
1079
- *
1080
- * No credential is minted here — the URL grants nothing by
1081
- * possession. 409 when the sandbox isn't running (send the
1082
- * session a message to wake it first). Backs the `agent session
1083
- * ide` CLI verb.
1084
- */
1085
- get: operations['get_agent_session_ide'];
1086
- put?: never;
1087
- post?: never;
1088
- delete?: never;
1089
- options?: never;
1090
- head?: never;
1091
- patch?: never;
1092
- trace?: never;
1093
- };
1094
- '/sessions/{session_id}/messages': {
1040
+ '/v1/sessions/{session_id}/messages': {
1095
1041
  parameters: {
1096
1042
  query?: never;
1097
1043
  header?: never;
@@ -1116,7 +1062,7 @@ interface paths {
1116
1062
  patch?: never;
1117
1063
  trace?: never;
1118
1064
  };
1119
- '/sessions/{session_id}/output': {
1065
+ '/v1/sessions/{session_id}/output': {
1120
1066
  parameters: {
1121
1067
  query?: never;
1122
1068
  header?: never;
@@ -1129,7 +1075,7 @@ interface paths {
1129
1075
  *
1130
1076
  * The payload the agent submitted through its config-declared
1131
1077
  * output.json_schema, as the raw JSON body with no envelope. 404
1132
- * while the session is still running (poll GET /sessions/{id}),
1078
+ * while the session is still running (poll GET /v1/sessions/{id}),
1133
1079
  * when the agent declares no output block, or when no execution
1134
1080
  * produced output.
1135
1081
  */
@@ -1142,32 +1088,7 @@ interface paths {
1142
1088
  patch?: never;
1143
1089
  trace?: never;
1144
1090
  };
1145
- '/sessions/{session_id}/ports/{port}': {
1146
- parameters: {
1147
- query?: never;
1148
- header?: never;
1149
- path?: never;
1150
- cookie?: never;
1151
- };
1152
- /**
1153
- * Get Agent Session Port
1154
- * @description Return a preview link for a sandbox port.
1155
- *
1156
- * For a dev server running in the session's live sandbox: the
1157
- * same dashboard page as the IDE, deep-linked to the port.
1158
- *
1159
- * Backs `agent session port`.
1160
- */
1161
- get: operations['get_agent_session_port'];
1162
- put?: never;
1163
- post?: never;
1164
- delete?: never;
1165
- options?: never;
1166
- head?: never;
1167
- patch?: never;
1168
- trace?: never;
1169
- };
1170
- '/sessions/{session_id}/records': {
1091
+ '/v1/sessions/{session_id}/records': {
1171
1092
  parameters: {
1172
1093
  query?: never;
1173
1094
  header?: never;
@@ -1182,8 +1103,7 @@ interface paths {
1182
1103
  * full retained transcript. Available to sandbox tokens too: an
1183
1104
  * agent answering "did X look into Y?" needs to read the session
1184
1105
  * it found via /sessions/search, and any org member sees the same
1185
- * transcript in the dashboard (laptop transcripts are redacted
1186
- * client-side before they are ever uploaded).
1106
+ * transcript in the dashboard.
1187
1107
  */
1188
1108
  get: operations['get_agent_session_records'];
1189
1109
  put?: never;
@@ -1194,7 +1114,7 @@ interface paths {
1194
1114
  patch?: never;
1195
1115
  trace?: never;
1196
1116
  };
1197
- '/sessions/{session_id}/replay': {
1117
+ '/v1/sessions/{session_id}/replay': {
1198
1118
  parameters: {
1199
1119
  query?: never;
1200
1120
  header?: never;
@@ -1219,7 +1139,7 @@ interface paths {
1219
1139
  patch?: never;
1220
1140
  trace?: never;
1221
1141
  };
1222
- '/sessions/{session_id}/stop': {
1142
+ '/v1/sessions/{session_id}/stop': {
1223
1143
  parameters: {
1224
1144
  query?: never;
1225
1145
  header?: never;
@@ -1242,7 +1162,7 @@ interface paths {
1242
1162
  patch?: never;
1243
1163
  trace?: never;
1244
1164
  };
1245
- '/sessions/{session_id}/transcript': {
1165
+ '/v1/sessions/{session_id}/transcript': {
1246
1166
  parameters: {
1247
1167
  query?: never;
1248
1168
  header?: never;
@@ -1267,7 +1187,7 @@ interface paths {
1267
1187
  patch?: never;
1268
1188
  trace?: never;
1269
1189
  };
1270
- '/usage': {
1190
+ '/v1/usage': {
1271
1191
  parameters: {
1272
1192
  query?: never;
1273
1193
  header?: never;
@@ -1305,7 +1225,6 @@ interface components {
1305
1225
  /**
1306
1226
  * @default {
1307
1227
  * "enabled": true,
1308
- * "ide": true,
1309
1228
  * "interactive": true,
1310
1229
  * "metadata": {
1311
1230
  * "annotations": {},
@@ -1320,12 +1239,6 @@ interface components {
1320
1239
  * "compute": {},
1321
1240
  * "hooks": {},
1322
1241
  * "image": {},
1323
- * "ports": [
1324
- * 3000,
1325
- * 5173,
1326
- * 8000,
1327
- * 8080
1328
- * ],
1329
1242
  * "repositories": [],
1330
1243
  * "variables": []
1331
1244
  * }
@@ -1402,7 +1315,7 @@ interface components {
1402
1315
  AgentConfigCodex: {
1403
1316
  /**
1404
1317
  * Model
1405
- * @default bedrock-gpt-5.6-terra
1318
+ * @default gpt-5.6-terra
1406
1319
  */
1407
1320
  model: string;
1408
1321
  /**
@@ -1470,18 +1383,17 @@ interface components {
1470
1383
  * AgentConfigEllipsis
1471
1384
  * @description The Ellipsis product namespace for a config file: which schema this is
1472
1385
  * (`version`), the human-facing identity (`name`/`description`), freeform
1473
- * organizational `metadata`, whether the agent is `enabled`, and the two
1474
- * human-access flags (`interactive`/`ide`). The presence of a top-level
1475
- * `ellipsis:` mapping is what marks a YAML file as an Ellipsis agent config (vs
1476
- * arbitrary YAML that merely lives under a config directory) — see
1386
+ * organizational `metadata`, whether the agent is `enabled`, and the
1387
+ * human-access flag `interactive`. The presence of a top-level `ellipsis:`
1388
+ * mapping is what marks a YAML file as an Ellipsis agent config (vs arbitrary
1389
+ * YAML that merely lives under a config directory) — see
1477
1390
  * `yaml_is_ellipsis_config`.
1478
1391
  *
1479
- * `enabled`/`interactive`/`ide` are agent behavior, not freeform metadata, so
1480
- * they stay inside the config `sha` (only `metadata` is sha-excluded).
1481
- * `interactive` and `ide` are sibling human-access flags: `interactive` lets a
1482
- * human `agent session connect` to a live session (CLI relay); `ide` lets a
1483
- * human open an editor / a port URL into the sandbox. Neither decides whether a
1484
- * session is ephemeral or durable — that is the trigger's job.
1392
+ * `enabled`/`interactive` are agent behavior, not freeform metadata, so they
1393
+ * stay inside the config `sha` (only `metadata` is sha-excluded).
1394
+ * `interactive` lets a human `agent session connect` to a live session (CLI
1395
+ * relay). It does not decide whether a session is ephemeral or durable — that
1396
+ * is the trigger's job.
1485
1397
  */
1486
1398
  AgentConfigEllipsis: {
1487
1399
  /** Description */
@@ -1491,11 +1403,6 @@ interface components {
1491
1403
  * @default true
1492
1404
  */
1493
1405
  enabled: boolean;
1494
- /**
1495
- * Ide
1496
- * @default true
1497
- */
1498
- ide: boolean;
1499
1406
  /**
1500
1407
  * Interactive
1501
1408
  * @default true
@@ -1548,16 +1455,6 @@ interface components {
1548
1455
  hooks: components['schemas']['AgentConfigEnvironmentHooks'];
1549
1456
  /** @default {} */
1550
1457
  image: components['schemas']['AgentConfigEnvironmentImage'];
1551
- /**
1552
- * Ports
1553
- * @default [
1554
- * 3000,
1555
- * 5173,
1556
- * 8000,
1557
- * 8080
1558
- * ]
1559
- */
1560
- ports: number[];
1561
1458
  /**
1562
1459
  * Repositories
1563
1460
  * @default []
@@ -1623,7 +1520,7 @@ interface components {
1623
1520
  * `value`, when set, is a literal injected as-is — use it for non-secret
1624
1521
  * config (LOG_LEVEL, an API base URL). When `value` is omitted the value is
1625
1522
  * resolved at run time from the account's sandbox-secrets store (dashboard
1626
- * / `PUT /secrets`) by `name`, so a secret can be injected without
1523
+ * / `PUT /v1/secrets`) by `name`, so a secret can be injected without
1627
1524
  * ever putting it in the config file. Either way the variable only reaches
1628
1525
  * agents that name it.
1629
1526
  */
@@ -1665,7 +1562,7 @@ interface components {
1665
1562
  * when it happens; this is what goes in).
1666
1563
  *
1667
1564
  * `json_schema` types the payload a caller-started session takes
1668
- * (`POST /sessions` `input`, validated at the door; required when
1565
+ * (`POST /v1/sessions` `input`, validated at the door; required when
1669
1566
  * declared). It is illegal on a react-triggered agent — react payloads are
1670
1567
  * platform-shaped (the published surface field sets), not caller-shaped.
1671
1568
  *
@@ -1763,7 +1660,7 @@ interface components {
1763
1660
  * AgentConfigOutput
1764
1661
  * @description The typed output contract: the JSON Schema the agent must exit through
1765
1662
  * (the StructuredOutput exit tool). Read back via
1766
- * GET /sessions/{id}/output.
1663
+ * GET /v1/sessions/{id}/output.
1767
1664
  */
1768
1665
  AgentConfigOutput: {
1769
1666
  /** Json Schema */
@@ -1857,6 +1754,17 @@ interface components {
1857
1754
  path: string;
1858
1755
  repository?: components['schemas']['AgentConfigRepository'] | null;
1859
1756
  };
1757
+ /**
1758
+ * AgentConfigSource
1759
+ * @description Where a session's config came from. Total: every session has exactly one
1760
+ * source, including the ones that never touch defaults resolution.
1761
+ *
1762
+ * Not derivable from the row — `agent_config_id` says WHICH saved config, not
1763
+ * how it was chosen, and is null for inline, platform-default, and built-in
1764
+ * configs alike — so it is persisted for audit and the published wire.
1765
+ * @enum {string}
1766
+ */
1767
+ AgentConfigSource: 'explicit' | 'inline' | 'template' | 'repo_default' | 'account_default' | 'platform_default' | 'trigger' | 'builtin';
1860
1768
  /**
1861
1769
  * AgentConfigSourceGithub
1862
1770
  * @description Identifies the file a GitHub-sourced agent config is synced from.
@@ -1891,61 +1799,29 @@ interface components {
1891
1799
  configs: components['schemas']['Config'][];
1892
1800
  };
1893
1801
  /**
1894
- * AgentDefault
1895
- * @description A default-agent setting: which agent config serves sessions started
1896
- * without an explicit config, for the whole account or for one repository.
1802
+ * AgentDefaults
1803
+ * @description Which agent config serves sessions started without an explicit config:
1804
+ * one account-wide rung, plus a rung per repository.
1805
+ *
1806
+ * Values are config ids — stable across renames, unlike the agent's name.
1807
+ * A repo rung whose repository this installation can no longer see is absent
1808
+ * from `repositories`; its row is left in place, so re-installing the repo
1809
+ * brings the rung back.
1897
1810
  */
1898
- AgentDefault: {
1899
- /**
1900
- * Broken
1901
- * @description Why this default cannot serve sessions, or null when it is healthy.
1902
- */
1903
- broken?: ('config_deleted' | 'config_disabled' | 'config_pending_pr' | 'repo_inaccessible') | null;
1904
- /**
1905
- * Config Id
1906
- * @description The agent config this default points at.
1907
- */
1908
- config_id: string;
1909
- /**
1910
- * Config Name
1911
- * @description The pointed-at config's name; null when the config no longer exists.
1912
- */
1913
- config_name?: string | null;
1914
- /**
1915
- * Id
1916
- * @description The default's unique identifier.
1917
- */
1918
- id: string;
1919
- /**
1920
- * Repository
1921
- * @description The repository this default applies to, as "owner/name", or null for the account-wide default.
1922
- */
1923
- repository?: string | null;
1811
+ AgentDefaults: {
1924
1812
  /**
1925
- * Updated At
1926
- * Format: date-time
1927
- * @description When the default was last changed.
1813
+ * Account
1814
+ * @description Config id serving sessions with no repository context, or null when no account default is set.
1928
1815
  */
1929
- updated_at: string;
1930
- };
1931
- /**
1932
- * AgentDefaultResponse
1933
- * @description One default-agent setting.
1934
- */
1935
- AgentDefaultResponse: {
1936
- /** @description The default-agent setting. */
1937
- default: components['schemas']['AgentDefault'];
1938
- };
1939
- /**
1940
- * AgentDefaultsListResponse
1941
- * @description The account's default-agent settings.
1942
- */
1943
- AgentDefaultsListResponse: {
1816
+ account?: string | null;
1944
1817
  /**
1945
- * Defaults
1946
- * @description The configured defaults.
1818
+ * Repositories
1819
+ * @description Config id per repository, keyed "owner/name". A repository with no default set is absent.
1820
+ * @default {}
1947
1821
  */
1948
- defaults: components['schemas']['AgentDefault'][];
1822
+ repositories: {
1823
+ [key: string]: string;
1824
+ };
1949
1825
  };
1950
1826
  /**
1951
1827
  * AgentTemplate
@@ -2411,7 +2287,7 @@ interface components {
2411
2287
  CliAuthPollRequest: {
2412
2288
  /**
2413
2289
  * Device Code
2414
- * @description The device code returned by POST /auth/cli/start.
2290
+ * @description The device code returned by POST /v1/auth/cli/start.
2415
2291
  */
2416
2292
  device_code: string;
2417
2293
  };
@@ -2563,7 +2439,7 @@ interface components {
2563
2439
  repository?: string | null;
2564
2440
  /**
2565
2441
  * Template Id
2566
- * @description A gallery template slug (see GET /agents/templates).
2442
+ * @description A gallery template slug (see GET /v1/agents/templates).
2567
2443
  */
2568
2444
  template_id?: string | null;
2569
2445
  };
@@ -2680,16 +2556,6 @@ interface components {
2680
2556
  */
2681
2557
  scope: components['schemas']['ReviewScope'];
2682
2558
  };
2683
- /**
2684
- * DefaultResolution
2685
- * @description How a session that arrived with no explicit config source resolved its
2686
- * config (documents/eng/DEFAULT_CONFIGS.md §4). Persisted on the session so
2687
- * audit and clients can say "ran under X (repo default)". A session started
2688
- * with an explicit config/config_id/template_id never enters resolution and
2689
- * stores None.
2690
- * @enum {string}
2691
- */
2692
- DefaultResolution: 'repo_default' | 'account_default' | 'none';
2693
2559
  /**
2694
2560
  * DurationPercentiles
2695
2561
  * @description Percentiles of a duration distribution, in hours. p0 = fastest,
@@ -2764,7 +2630,7 @@ interface components {
2764
2630
  ErrorInfo: {
2765
2631
  /**
2766
2632
  * Code
2767
- * @description Stable machine-readable error code. Open vocabulary — handle unknown codes by HTTP status. Known values: account_blocked, conflict, default_config_broken, failed_dependency, file_quota_exceeded, forbidden, internal_error, invalid_request, not_found, rate_limited, review_in_flight, session_closed, session_ephemeral_trigger, session_finished, session_harness_single_turn, session_laptop, session_mention_surface, session_non_interactive, unauthorized, unavailable.
2633
+ * @description Stable machine-readable error code. Open vocabulary — handle unknown codes by HTTP status. Known values: account_blocked, conflict, contact_email_required, failed_dependency, file_quota_exceeded, forbidden, internal_error, invalid_request, not_found, rate_limited, review_in_flight, session_closed, session_ephemeral_trigger, session_finished, session_harness_single_turn, session_mention_surface, session_non_interactive, unauthorized, unavailable.
2768
2634
  */
2769
2635
  code: string;
2770
2636
  /**
@@ -2995,17 +2861,6 @@ interface components {
2995
2861
  /** @description The connected Slack workspace, or null if not connected. */
2996
2862
  slack?: components['schemas']['SlackIntegrationSummary'] | null;
2997
2863
  };
2998
- /**
2999
- * GetSessionIdeResponse
3000
- * @description The IDE link for a session's live sandbox.
3001
- */
3002
- GetSessionIdeResponse: {
3003
- /**
3004
- * Url
3005
- * @description The membership-gated dashboard page for the session's sandbox. The page performs the proxy handoff itself, so the URL carries no credential — safe to share with any org member, in a transcript, or in a Slack message.
3006
- */
3007
- url: string;
3008
- };
3009
2864
  /**
3010
2865
  * GetSessionLogResponse
3011
2866
  * @description The session log manifest: the complete, ordered, downloadable history
@@ -3053,22 +2908,6 @@ interface components {
3053
2908
  */
3054
2909
  session_id: string;
3055
2910
  };
3056
- /**
3057
- * GetSessionPortResponse
3058
- * @description A preview link for a port in a session's live sandbox.
3059
- */
3060
- GetSessionPortResponse: {
3061
- /**
3062
- * Port
3063
- * @description The sandbox port the link previews.
3064
- */
3065
- port: number;
3066
- /**
3067
- * Url
3068
- * @description The same membership-gated dashboard page as the IDE URL, deep-linked to a preview port (a dev server the agent or the IDE user started).
3069
- */
3070
- url: string;
3071
- };
3072
2911
  /**
3073
2912
  * GetUsageDashboardResponse
3074
2913
  * @description The account's usage over a period: token and cost totals, a per-day
@@ -3381,35 +3220,6 @@ interface components {
3381
3220
  /** Detail */
3382
3221
  detail?: components['schemas']['ValidationError'][];
3383
3222
  };
3384
- /**
3385
- * HandoffAgentSessionParams
3386
- * @description Laptop-to-cloud handoff parameters (`agent session handoff`): start a
3387
- * fresh session on the built-in handoff config, chained to the handed-off
3388
- * session. Mutually exclusive with config_id / config / template_id — the
3389
- * handoff config is platform-owned.
3390
- */
3391
- HandoffAgentSessionParams: {
3392
- /**
3393
- * Parent Session Id
3394
- * @description The session being handed off (usually a laptop-synced session).
3395
- */
3396
- parent_session_id: string;
3397
- /**
3398
- * Ref
3399
- * @description Where the WIP commit was pushed (refs/ellipsis/handoff/<short>); recorded as a metadata breadcrumb.
3400
- */
3401
- ref?: string | null;
3402
- /**
3403
- * Repo
3404
- * @description "owner/name" (or a bare name under the caller's account).
3405
- */
3406
- repo: string;
3407
- /**
3408
- * Sha
3409
- * @description The work-in-progress commit the CLI pushed (a commit of the dirty working tree) — becomes the sandbox checkout target.
3410
- */
3411
- sha: string;
3412
- };
3413
3223
  /**
3414
3224
  * Harness
3415
3225
  * @enum {string}
@@ -3740,9 +3550,9 @@ interface components {
3740
3550
  * Serving path is irrelevant here. Anthropic built every Claude model, so all of
3741
3551
  * them are ANTHROPIC whether we reach them through the first-party Anthropic API
3742
3552
  * or through Bedrock -- a choice made per request by the llm_providers chain, so
3743
- * it is not even a fixed property of the model. Likewise the `bedrock-gpt-5.6-*`
3744
- * rows are OPENAI (OpenAI's models, served by AWS), and GLM is ZAI (Z.ai's model,
3745
- * served by Concentrate).
3553
+ * it is not even a fixed property of the model. Likewise the `gpt-5.6-*` rows
3554
+ * are OPENAI (OpenAI's models, served by AWS via bedrock-mantle), and GLM is ZAI
3555
+ * (Z.ai's model, served by DeepInfra via OpenRouter).
3746
3556
  *
3747
3557
  * So this is deliberately NOT derived from `EgressRoute.provider`: routing is an
3748
3558
  * infrastructure fact that changes when we move a model between providers, while
@@ -3822,13 +3632,11 @@ interface components {
3822
3632
  *
3823
3633
  * CONTINUATION — a follow-up in the same conversation surface (e.g. a Slack
3824
3634
  * thread reply spawning a fresh session on the same thread).
3825
- * HANDOFF — a session started to take over work from another surface (e.g.
3826
- * laptop → cloud handoff; later phase).
3827
3635
  * RESUME — a conversation re-hosted on a new box after its sandbox was torn
3828
3636
  * down (interactive platform; later phase).
3829
3637
  * @enum {string}
3830
3638
  */
3831
- ParentKind: 'continuation' | 'handoff' | 'resume';
3639
+ ParentKind: 'continuation' | 'resume';
3832
3640
  /**
3833
3641
  * PollCliAuthResponse
3834
3642
  * @description The state of a device-code flow. Poll until `status` leaves `pending`.
@@ -3850,7 +3658,7 @@ interface components {
3850
3658
  * @description Why direct prompting is refused. Absent when prompting is allowed.
3851
3659
  * @enum {string}
3852
3660
  */
3853
- PromptBlockedReason: 'mention_surface' | 'ephemeral_trigger' | 'non_interactive' | 'harness_single_turn' | 'closed' | 'laptop';
3661
+ PromptBlockedReason: 'mention_surface' | 'ephemeral_trigger' | 'non_interactive' | 'harness_single_turn' | 'closed';
3854
3662
  /**
3855
3663
  * PullRequestAction
3856
3664
  * @enum {string}
@@ -4337,7 +4145,7 @@ interface components {
4337
4145
  config_id?: string | null;
4338
4146
  /**
4339
4147
  * Config Override
4340
- * @description Optional partial-config override merged onto the chosen config and re-validated — e.g. {"claude": {"model": "claude-opus-4-8"}} to replay the run on a different model, or {"limits": {"run": 5.0}} to raise its budget. Mutually exclusive with config_override_yaml.
4148
+ * @description Optional partial-config override merged onto the chosen config and re-validated — e.g. {"claude": {"model": "claude-opus-4-8"}} to replay the run on a different model, or {"budget": {"session": 5.0}} to raise its budget. Mutually exclusive with config_override_yaml.
4341
4149
  */
4342
4150
  config_override?: {
4343
4151
  [key: string]: unknown;
@@ -5361,32 +5169,17 @@ interface components {
5361
5169
  /**
5362
5170
  * Session
5363
5171
  * @description An agent session: one conversation with an agent, from trigger to
5364
- * terminal state. Returned by `GET /sessions/{id}` and carried by the
5172
+ * terminal state. Returned by `GET /v1/sessions/{id}` and carried by the
5365
5173
  * session stream's `session`/`snapshot` frames — REST and stream never
5366
5174
  * disagree about what a session looks like.
5367
5175
  */
5368
5176
  Session: {
5177
+ /** @description The agent that ran: the config the session executed, where that config came from, and any override merged into it. */
5178
+ agent: components['schemas']['SessionAgent'];
5369
5179
  /** @description The principal this session is attributed to. */
5370
5180
  attribution?: components['schemas']['SessionAttribution'];
5371
5181
  /** @description The spend budget enforced for this session. */
5372
5182
  budget?: components['schemas']['SessionBudget'];
5373
- /**
5374
- * Client Version
5375
- * @description Version of the client that started the session, if reported.
5376
- */
5377
- client_version?: string | null;
5378
- /**
5379
- * Config Id
5380
- * @description Identifier of the saved agent config the session ran on, if any.
5381
- */
5382
- config_id?: string | null;
5383
- /**
5384
- * Config Override
5385
- * @description The partial-config diff applied for this run; null when the config was unmodified.
5386
- */
5387
- config_override?: {
5388
- [key: string]: unknown;
5389
- } | null;
5390
5183
  /**
5391
5184
  * Context Repository
5392
5185
  * @description The "owner/name" repository context the session was started in, if any.
@@ -5400,8 +5193,6 @@ interface components {
5400
5193
  * @description When the session was created.
5401
5194
  */
5402
5195
  created_at: string;
5403
- /** @description How the session's config was resolved from the account's defaults, when no explicit config was given. */
5404
- default_resolution?: components['schemas']['DefaultResolution'] | null;
5405
5196
  /** @description How the session ended; null until it is terminal. */
5406
5197
  exit_status?: components['schemas']['SessionExitStatus'] | null;
5407
5198
  /** @description The coding-agent harness the session runs on. */
@@ -5421,11 +5212,6 @@ interface components {
5421
5212
  * @description When the session last received a message.
5422
5213
  */
5423
5214
  last_message_at?: string | null;
5424
- /**
5425
- * Live Summary
5426
- * @description A live summary of the session's progress while it runs.
5427
- */
5428
- live_summary?: string | null;
5429
5215
  /**
5430
5216
  * Metadata
5431
5217
  * @description Caller-supplied metadata key-value pairs.
@@ -5448,19 +5234,9 @@ interface components {
5448
5234
  prompt?: string | null;
5449
5235
  /** @description Whether a client may send this session a message and, when it may not, the reason to show instead of a composer. */
5450
5236
  prompting: components['schemas']['SessionPrompting'];
5451
- /**
5452
- * Sandbox Id
5453
- * @description Identifier of the sandbox the session runs in, if any.
5454
- */
5455
- sandbox_id?: string | null;
5456
- /**
5457
- * Session Key
5458
- * @description Key identifying the durable conversation this session belongs to, or null for single-shot sessions.
5459
- */
5460
- session_key?: string | null;
5461
5237
  /** @description Lifecycle state of the durable conversation, or null for sessions without one. */
5462
5238
  session_state?: components['schemas']['SessionState'] | null;
5463
- /** @description Where the session came from (e.g. react, manual, api, cli, mention, cron, laptop). */
5239
+ /** @description Where the session came from (e.g. react, manual, api, cli, mention, cron). */
5464
5240
  source: components['schemas']['SessionSource'];
5465
5241
  /** @description Execution status of the session. */
5466
5242
  status: components['schemas']['SessionStatus'];
@@ -5471,7 +5247,9 @@ interface components {
5471
5247
  status_reason?: string | null;
5472
5248
  /** @description The stop request, if the session was stopped. */
5473
5249
  stopped?: components['schemas']['SessionStopped'];
5474
- /** @description The public status projection; null for laptop-synced sessions. */
5250
+ /** @description The latest live summary of the session's progress while it runs, and when it was generated. */
5251
+ summary?: components['schemas']['SessionSummary'] | null;
5252
+ /** @description The public status projection; null on list/search responses, which do not derive it. */
5475
5253
  surface?: components['schemas']['SessionSurface'] | null;
5476
5254
  /** @description The tokens the session spent and the model they went to. `total` includes the prompt-cache lanes. */
5477
5255
  tokens?: components['schemas']['SessionTokens'];
@@ -5481,13 +5259,35 @@ interface components {
5481
5259
  * @description When the session was last updated.
5482
5260
  */
5483
5261
  updated_at: string;
5262
+ };
5263
+ /**
5264
+ * SessionAgent
5265
+ * @description The agent this session ran: the config it actually executed, where that
5266
+ * config came from, and the diff that was merged in — the same
5267
+ * effective-value-plus-provenance shape `SessionBudget` uses.
5268
+ *
5269
+ * `config` is the snapshot frozen when the session was created; `config_id`
5270
+ * points at the saved config as it exists NOW. They diverge legitimately: a
5271
+ * YAML edit after the session started, or any `override`, leaves the pointer
5272
+ * describing something the session never ran.
5273
+ */
5274
+ SessionAgent: {
5275
+ /** @description The agent config the session actually ran, frozen when the session was created. */
5276
+ config: components['schemas']['AgentConfig'];
5277
+ /**
5278
+ * Config Id
5279
+ * @description Identifier of the saved config this session's snapshot was taken from. Null for inline, platform-default, and built-in configs. Points at the config as it exists now, which may have changed since.
5280
+ */
5281
+ config_id?: string | null;
5484
5282
  /**
5485
- * Webhook Id
5486
- * @description Identifier of the webhook event that triggered the session, if any.
5283
+ * Override
5284
+ * @description The partial-config override merged into `config` for this session, or null when the config ran unmodified. `config` is the merged result; this is the diff.
5487
5285
  */
5488
- webhook_id?: string | null;
5489
- /** @description Type of the webhook event that triggered the session, if any. */
5490
- webhook_type?: components['schemas']['WebhookType'] | null;
5286
+ override?: {
5287
+ [key: string]: unknown;
5288
+ } | null;
5289
+ /** @description How this session's config was chosen. */
5290
+ source: components['schemas']['AgentConfigSource'];
5491
5291
  };
5492
5292
  /**
5493
5293
  * SessionAttribution
@@ -5650,7 +5450,7 @@ interface components {
5650
5450
  * a deliberate cancellation. It is None until the run reaches a terminal state.
5651
5451
  * @enum {string}
5652
5452
  */
5653
- SessionExitStatus: 'completed' | 'budget_hit' | 'payment_required' | 'tool_call_failed' | 'lifecycle_hook_failed' | 'missing_repo_access' | 'missing_token_permissions' | 'missing_sandbox_variables' | 'cancelled' | 'interrupted' | 'error' | 'stopped';
5453
+ SessionExitStatus: 'completed' | 'budget_hit' | 'payment_required' | 'tool_call_failed' | 'lifecycle_hook_failed' | 'missing_repo_access' | 'missing_token_permissions' | 'missing_sandbox_variables' | 'blocked' | 'contact_email_required' | 'cancelled' | 'interrupted' | 'error' | 'stopped';
5654
5454
  /**
5655
5455
  * SessionLiveness
5656
5456
  * @description The durable conversation axis (backs the surfaced `session` field).
@@ -6006,7 +5806,7 @@ interface components {
6006
5806
  * SessionSource
6007
5807
  * @enum {string}
6008
5808
  */
6009
- SessionSource: 'react' | 'manual' | 'api' | 'cli' | 'mention' | 'cron' | 'laptop';
5809
+ SessionSource: 'react' | 'manual' | 'api' | 'cli' | 'mention' | 'cron';
6010
5810
  /**
6011
5811
  * SessionState
6012
5812
  * @description Lifecycle of a keyed (multi-turn) session — the durable conversation.
@@ -6041,9 +5841,26 @@ interface components {
6041
5841
  /** @description The GitHub user who stopped the session, resolved at read time. */
6042
5842
  by_user?: components['schemas']['GithubAccountSnippet'] | null;
6043
5843
  };
5844
+ /**
5845
+ * SessionSummary
5846
+ * @description A live one-line summary of what the session is working on, refreshed
5847
+ * every few steps while it runs.
5848
+ */
5849
+ SessionSummary: {
5850
+ /**
5851
+ * Created At
5852
+ * @description When this summary line was generated. Null on summaries written before generation time was tracked.
5853
+ */
5854
+ created_at?: string | null;
5855
+ /**
5856
+ * Description
5857
+ * @description One-line description of what the session is working on.
5858
+ */
5859
+ description: string;
5860
+ };
6044
5861
  /**
6045
5862
  * SessionSurface
6046
- * @description The three fields we expose. All `None` for an un-keyed (laptop) session.
5863
+ * @description The three fields we expose.
6047
5864
  *
6048
5865
  * `use_enum_values=True` (from CustomBaseModel) stores the members as their
6049
5866
  * string values, so this serializes to `{"session": "alive", "run": "waiting",
@@ -6121,7 +5938,7 @@ interface components {
6121
5938
  next_cursor?: string | null;
6122
5939
  /**
6123
5940
  * Sessions
6124
- * @description Lean wire rows — the same shape GET /sessions/{id} and the stream's session frames carry. The heavy blobs (config snapshot, input/output) live on the detail endpoints.
5941
+ * @description Lean wire rows — the same shape GET /v1/sessions/{id} and the stream's session frames carry. The heavy blobs (config snapshot, input/output) live on the detail endpoints.
6125
5942
  */
6126
5943
  sessions: components['schemas']['Session'][];
6127
5944
  };
@@ -6263,7 +6080,7 @@ interface components {
6263
6080
  config_id?: string | null;
6264
6081
  /**
6265
6082
  * Config Override
6266
- * @description Optional partial-config override merged onto the chosen config and re-validated (e.g. {"limits": {"run": 5.0}} to raise just this run's budget). Merged onto config_id/template_id or the platform default; with an inline config, set fields directly instead. Mutually exclusive with config_override_yaml.
6083
+ * @description Optional partial-config override merged onto the chosen config and re-validated (e.g. {"budget": {"session": 5.0}} to raise just this session's budget). Merged onto config_id/template_id or the platform default; with an inline config, set fields directly instead. Mutually exclusive with config_override_yaml.
6267
6084
  */
6268
6085
  config_override?: {
6269
6086
  [key: string]: unknown;
@@ -6279,11 +6096,9 @@ interface components {
6279
6096
  * @default false
6280
6097
  */
6281
6098
  force_rebuild: boolean;
6282
- /** @description Laptop-to-cloud handoff parameters. When set, the built-in handoff config is used and config_id/config/template_id must be omitted. */
6283
- handoff?: components['schemas']['HandoffAgentSessionParams'] | null;
6284
6099
  /**
6285
6100
  * Idle Start
6286
- * @description Start the session with no initial message: the sandbox spins up, the agent starts idle at the prompt, and the first message sent to the session opens turn 0. Mutually exclusive with prompt and handoff. Ignored when the resolved config is not interactive (an ephemeral run keeps its kickoff — it can never receive a message).
6101
+ * @description Start the session with no initial message: the sandbox spins up, the agent starts idle at the prompt, and the first message sent to the session opens turn 0. Mutually exclusive with prompt. Ignored when the resolved config is not interactive (an ephemeral run keeps its kickoff — it can never receive a message).
6287
6102
  * @default false
6288
6103
  */
6289
6104
  idle_start: boolean;
@@ -6304,7 +6119,7 @@ interface components {
6304
6119
  };
6305
6120
  /**
6306
6121
  * Prompt
6307
- * @description Per-run instructions appended to the initial query after the config's shared system prompt. Applies regardless of which config source is used. For a handoff, this is the developer's handoff note.
6122
+ * @description Per-run instructions appended to the initial query after the config's shared system prompt. Applies regardless of which config source is used.
6308
6123
  */
6309
6124
  prompt?: string | null;
6310
6125
  /**
@@ -6318,22 +6133,6 @@ interface components {
6318
6133
  */
6319
6134
  template_id?: string | null;
6320
6135
  };
6321
- /**
6322
- * StartAgentSessionResponse
6323
- * @description The started session, plus explicit fields describing how its config
6324
- * was resolved.
6325
- */
6326
- StartAgentSessionResponse: {
6327
- /** @description Which rung of the defaults ladder chose the config (repo_default | account_default | none). Null when an explicit config/config_id/template_id (or a handoff) bypassed resolution. */
6328
- resolution_source?: components['schemas']['DefaultResolution'] | null;
6329
- /**
6330
- * Resolved Config Name
6331
- * @description The name of the config the session runs under.
6332
- */
6333
- resolved_config_name?: string | null;
6334
- /** @description The started session. */
6335
- session: components['schemas']['Session'];
6336
- };
6337
6136
  /**
6338
6137
  * StartCliAuthResponse
6339
6138
  * @description A freshly minted device-code flow: show the user code (or open the
@@ -6371,72 +6170,6 @@ interface components {
6371
6170
  */
6372
6171
  verification_uri_complete: string;
6373
6172
  };
6374
- /**
6375
- * SyncAgentSessionRequest
6376
- * @description One hook-driven transcript sync from a developer laptop. The CLI reads
6377
- * the live on-disk Claude Code transcript, redacts it client-side, gzips
6378
- * it, and POSTs it here — once per turn and at termination.
6379
- */
6380
- SyncAgentSessionRequest: {
6381
- /**
6382
- * Cc Session Id
6383
- * @description The Claude Code session uuid (from the hook payload's session_id).
6384
- */
6385
- cc_session_id: string;
6386
- /**
6387
- * Cwd
6388
- * @description The laptop working directory.
6389
- */
6390
- cwd?: string | null;
6391
- /**
6392
- * Git Branch
6393
- * @description The checked-out git branch.
6394
- */
6395
- git_branch?: string | null;
6396
- /**
6397
- * Reason
6398
- * @description Which hook fired the sync: "stop" (mid-session, once per turn) or "session_end" (the Claude Code process terminated).
6399
- * @default stop
6400
- * @enum {string}
6401
- */
6402
- reason: 'stop' | 'session_end';
6403
- /**
6404
- * Repo
6405
- * @description The enrolled repository ("owner/name", from the working directory's git remote).
6406
- */
6407
- repo?: string | null;
6408
- /**
6409
- * Transcript Gzip B64
6410
- * @description The redacted transcript JSONL, gzipped then base64-encoded.
6411
- */
6412
- transcript_gzip_b64: string;
6413
- };
6414
- /**
6415
- * SyncAgentSessionResponse
6416
- * @description The outcome of a laptop transcript sync.
6417
- */
6418
- SyncAgentSessionResponse: {
6419
- /**
6420
- * Accepted
6421
- * @description False when the stored snapshot was already at least as long (longest snapshot wins) — acknowledged, nothing written.
6422
- */
6423
- accepted: boolean;
6424
- /**
6425
- * Event Count
6426
- * @description The number of transcript events in the stored snapshot.
6427
- */
6428
- event_count: number;
6429
- /**
6430
- * Process Id
6431
- * @description The synced Claude Code process id.
6432
- */
6433
- process_id: string;
6434
- /**
6435
- * Session Id
6436
- * @description The platform session the sync mapped to.
6437
- */
6438
- session_id: string;
6439
- };
6440
6173
  /**
6441
6174
  * TokensInfo
6442
6175
  * @description Token/cost usage, per record (one API call's counts, aggregate fields at
@@ -6582,11 +6315,6 @@ interface components {
6582
6315
  /** Error Type */
6583
6316
  type: string;
6584
6317
  };
6585
- /**
6586
- * WebhookType
6587
- * @enum {string}
6588
- */
6589
- WebhookType: 'github.issue' | 'github.issue_comment' | 'github.push' | 'github.pull_request' | 'github.pull_request_comment' | 'github.pull_request_review' | 'github.pull_request_review_comment' | 'slack.app_mention' | 'slack.message' | 'slack.channel_created' | 'linear.issue' | 'linear.issue_comment' | 'sentry.event_alert' | 'sentry.metric_alert' | 'user.message';
6590
6318
  /**
6591
6319
  * WhoAmIResponse
6592
6320
  * @description The identity behind the caller's credential.
@@ -7134,7 +6862,7 @@ interface operations {
7134
6862
  [name: string]: unknown;
7135
6863
  };
7136
6864
  content: {
7137
- 'application/json': components['schemas']['AgentDefaultsListResponse'];
6865
+ 'application/json': components['schemas']['AgentDefaults'];
7138
6866
  };
7139
6867
  };
7140
6868
  /** @description The bearer token is missing, invalid, or revoked. */
@@ -7187,7 +6915,7 @@ interface operations {
7187
6915
  [name: string]: unknown;
7188
6916
  };
7189
6917
  content: {
7190
- 'application/json': components['schemas']['AgentDefaultResponse'];
6918
+ 'application/json': components['schemas']['AgentDefaults'];
7191
6919
  };
7192
6920
  };
7193
6921
  /** @description The config is not eligible as a default: its pull request has not merged, or it is disabled. */
@@ -9351,7 +9079,7 @@ interface operations {
9351
9079
  cursor?: string | null;
9352
9080
  /** @description A GitHub account id (see GET /v1/integrations/github/members); scopes the list to sessions attributed to that developer. */
9353
9081
  author_id?: number | null;
9354
- /** @description "owner/name" (exact) or a bare repo name, matched the same way as on GET /v1/sessions/search. Sessions whose repository is named only inside their agent config — dashboard starts, cron, handoffs — do not match. */
9082
+ /** @description "owner/name" (exact) or a bare repo name, matched the same way as on GET /v1/sessions/search. Sessions whose repository is named only inside their agent config — dashboard starts, cron — do not match. */
9355
9083
  repo?: string | null;
9356
9084
  /** @description Keep only sessions whose conversation is still going — live or sleeping — dropping the ones that completed, errored, or were stopped or cancelled. A session parked between turns counts as unfinished. */
9357
9085
  unfinished?: boolean;
@@ -9423,10 +9151,10 @@ interface operations {
9423
9151
  [name: string]: unknown;
9424
9152
  };
9425
9153
  content: {
9426
- 'application/json': components['schemas']['StartAgentSessionResponse'];
9154
+ 'application/json': components['schemas']['SessionResponse'];
9427
9155
  };
9428
9156
  };
9429
- /** @description The request combines incompatible fields (multiple config sources, idle_start with prompt/input/handoff, a handoff with a config source, or both override forms), or the config override / handoff repo/sha is invalid. */
9157
+ /** @description The request combines incompatible fields (multiple config sources, idle_start with prompt/input, or both override forms), or the config override is invalid. */
9430
9158
  400: {
9431
9159
  headers: {
9432
9160
  [name: string]: unknown;
@@ -9453,7 +9181,7 @@ interface operations {
9453
9181
  'application/json': components['schemas']['ErrorResponse'];
9454
9182
  };
9455
9183
  };
9456
- /** @description The named agent, template, or handoff parent session does not exist in your account. */
9184
+ /** @description The named agent or template does not exist in your account. */
9457
9185
  404: {
9458
9186
  headers: {
9459
9187
  [name: string]: unknown;
@@ -9555,20 +9283,18 @@ interface operations {
9555
9283
  };
9556
9284
  };
9557
9285
  };
9558
- sync_agent_session: {
9286
+ get_agent_session: {
9559
9287
  parameters: {
9560
9288
  query?: never;
9561
9289
  header?: {
9562
9290
  'user-agent'?: string | null;
9563
9291
  };
9564
- path?: never;
9565
- cookie?: never;
9566
- };
9567
- requestBody: {
9568
- content: {
9569
- 'application/json': components['schemas']['SyncAgentSessionRequest'];
9292
+ path: {
9293
+ session_id: string;
9570
9294
  };
9295
+ cookie?: never;
9571
9296
  };
9297
+ requestBody?: never;
9572
9298
  responses: {
9573
9299
  /** @description Successful Response */
9574
9300
  200: {
@@ -9576,16 +9302,7 @@ interface operations {
9576
9302
  [name: string]: unknown;
9577
9303
  };
9578
9304
  content: {
9579
- 'application/json': components['schemas']['SyncAgentSessionResponse'];
9580
- };
9581
- };
9582
- /** @description The transcript payload is empty, or is not valid base64/gzip. */
9583
- 400: {
9584
- headers: {
9585
- [name: string]: unknown;
9586
- };
9587
- content: {
9588
- 'application/json': components['schemas']['ErrorResponse'];
9305
+ 'application/json': components['schemas']['SessionResponse'];
9589
9306
  };
9590
9307
  };
9591
9308
  /** @description The bearer token is missing, invalid, or revoked. */
@@ -9606,8 +9323,8 @@ interface operations {
9606
9323
  'application/json': components['schemas']['ErrorResponse'];
9607
9324
  };
9608
9325
  };
9609
- /** @description The transcript exceeds the size limit (compressed or decompressed). */
9610
- 413: {
9326
+ /** @description No such session in your account. */
9327
+ 404: {
9611
9328
  headers: {
9612
9329
  [name: string]: unknown;
9613
9330
  };
@@ -9626,7 +9343,7 @@ interface operations {
9626
9343
  };
9627
9344
  };
9628
9345
  };
9629
- get_agent_session: {
9346
+ get_agent_session_executions: {
9630
9347
  parameters: {
9631
9348
  query?: never;
9632
9349
  header?: {
@@ -9645,7 +9362,7 @@ interface operations {
9645
9362
  [name: string]: unknown;
9646
9363
  };
9647
9364
  content: {
9648
- 'application/json': components['schemas']['SessionResponse'];
9365
+ 'application/json': components['schemas']['SessionExecutionsListResponse'];
9649
9366
  };
9650
9367
  };
9651
9368
  /** @description The bearer token is missing, invalid, or revoked. */
@@ -9686,7 +9403,7 @@ interface operations {
9686
9403
  };
9687
9404
  };
9688
9405
  };
9689
- get_agent_session_executions: {
9406
+ export_agent_session: {
9690
9407
  parameters: {
9691
9408
  query?: never;
9692
9409
  header?: {
@@ -9705,7 +9422,7 @@ interface operations {
9705
9422
  [name: string]: unknown;
9706
9423
  };
9707
9424
  content: {
9708
- 'application/json': components['schemas']['SessionExecutionsListResponse'];
9425
+ 'application/json': components['schemas']['GetSessionLogResponse'];
9709
9426
  };
9710
9427
  };
9711
9428
  /** @description The bearer token is missing, invalid, or revoked. */
@@ -9746,7 +9463,7 @@ interface operations {
9746
9463
  };
9747
9464
  };
9748
9465
  };
9749
- export_agent_session: {
9466
+ send_agent_session_message: {
9750
9467
  parameters: {
9751
9468
  query?: never;
9752
9469
  header?: {
@@ -9757,7 +9474,11 @@ interface operations {
9757
9474
  };
9758
9475
  cookie?: never;
9759
9476
  };
9760
- requestBody?: never;
9477
+ requestBody: {
9478
+ content: {
9479
+ 'application/json': components['schemas']['SendSessionMessageRequest'];
9480
+ };
9481
+ };
9761
9482
  responses: {
9762
9483
  /** @description Successful Response */
9763
9484
  200: {
@@ -9765,144 +9486,11 @@ interface operations {
9765
9486
  [name: string]: unknown;
9766
9487
  };
9767
9488
  content: {
9768
- 'application/json': components['schemas']['GetSessionLogResponse'];
9489
+ 'application/json': components['schemas']['SessionMessageResponse'];
9769
9490
  };
9770
9491
  };
9771
- /** @description The bearer token is missing, invalid, or revoked. */
9772
- 401: {
9773
- headers: {
9774
- [name: string]: unknown;
9775
- };
9776
- content: {
9777
- 'application/json': components['schemas']['ErrorResponse'];
9778
- };
9779
- };
9780
- /** @description The credential may not perform this action, or the account is blocked. */
9781
- 403: {
9782
- headers: {
9783
- [name: string]: unknown;
9784
- };
9785
- content: {
9786
- 'application/json': components['schemas']['ErrorResponse'];
9787
- };
9788
- };
9789
- /** @description No such session in your account. */
9790
- 404: {
9791
- headers: {
9792
- [name: string]: unknown;
9793
- };
9794
- content: {
9795
- 'application/json': components['schemas']['ErrorResponse'];
9796
- };
9797
- };
9798
- /** @description Validation Error */
9799
- 422: {
9800
- headers: {
9801
- [name: string]: unknown;
9802
- };
9803
- content: {
9804
- 'application/json': components['schemas']['HTTPValidationError'];
9805
- };
9806
- };
9807
- };
9808
- };
9809
- get_agent_session_ide: {
9810
- parameters: {
9811
- query?: never;
9812
- header?: {
9813
- 'user-agent'?: string | null;
9814
- };
9815
- path: {
9816
- session_id: string;
9817
- };
9818
- cookie?: never;
9819
- };
9820
- requestBody?: never;
9821
- responses: {
9822
- /** @description Successful Response */
9823
- 200: {
9824
- headers: {
9825
- [name: string]: unknown;
9826
- };
9827
- content: {
9828
- 'application/json': components['schemas']['GetSessionIdeResponse'];
9829
- };
9830
- };
9831
- /** @description The bearer token is missing, invalid, or revoked. */
9832
- 401: {
9833
- headers: {
9834
- [name: string]: unknown;
9835
- };
9836
- content: {
9837
- 'application/json': components['schemas']['ErrorResponse'];
9838
- };
9839
- };
9840
- /** @description The credential may not perform this action, or the account is blocked. */
9841
- 403: {
9842
- headers: {
9843
- [name: string]: unknown;
9844
- };
9845
- content: {
9846
- 'application/json': components['schemas']['ErrorResponse'];
9847
- };
9848
- };
9849
- /** @description No such session in your account. */
9850
- 404: {
9851
- headers: {
9852
- [name: string]: unknown;
9853
- };
9854
- content: {
9855
- 'application/json': components['schemas']['ErrorResponse'];
9856
- };
9857
- };
9858
- /** @description The session's sandbox is not running; send it a message to wake it first. */
9859
- 409: {
9860
- headers: {
9861
- [name: string]: unknown;
9862
- };
9863
- content: {
9864
- 'application/json': components['schemas']['ErrorResponse'];
9865
- };
9866
- };
9867
- /** @description Validation Error */
9868
- 422: {
9869
- headers: {
9870
- [name: string]: unknown;
9871
- };
9872
- content: {
9873
- 'application/json': components['schemas']['HTTPValidationError'];
9874
- };
9875
- };
9876
- };
9877
- };
9878
- send_agent_session_message: {
9879
- parameters: {
9880
- query?: never;
9881
- header?: {
9882
- 'user-agent'?: string | null;
9883
- };
9884
- path: {
9885
- session_id: string;
9886
- };
9887
- cookie?: never;
9888
- };
9889
- requestBody: {
9890
- content: {
9891
- 'application/json': components['schemas']['SendSessionMessageRequest'];
9892
- };
9893
- };
9894
- responses: {
9895
- /** @description Successful Response */
9896
- 200: {
9897
- headers: {
9898
- [name: string]: unknown;
9899
- };
9900
- content: {
9901
- 'application/json': components['schemas']['SessionMessageResponse'];
9902
- };
9903
- };
9904
- /** @description The message is empty. */
9905
- 400: {
9492
+ /** @description The message is empty. */
9493
+ 400: {
9906
9494
  headers: {
9907
9495
  [name: string]: unknown;
9908
9496
  };
@@ -9937,7 +9525,7 @@ interface operations {
9937
9525
  'application/json': components['schemas']['ErrorResponse'];
9938
9526
  };
9939
9527
  };
9940
- /** @description The session cannot be messaged: it is closed, non-interactive, laptop-synced, or steered from its triggering surface (mention/react/cron). */
9528
+ /** @description The session cannot be messaged: it is closed, non-interactive, or steered from its triggering surface (mention/react/cron). */
9941
9529
  409: {
9942
9530
  headers: {
9943
9531
  [name: string]: unknown;
@@ -10017,76 +9605,6 @@ interface operations {
10017
9605
  };
10018
9606
  };
10019
9607
  };
10020
- get_agent_session_port: {
10021
- parameters: {
10022
- query?: never;
10023
- header?: {
10024
- 'user-agent'?: string | null;
10025
- };
10026
- path: {
10027
- session_id: string;
10028
- port: number;
10029
- };
10030
- cookie?: never;
10031
- };
10032
- requestBody?: never;
10033
- responses: {
10034
- /** @description Successful Response */
10035
- 200: {
10036
- headers: {
10037
- [name: string]: unknown;
10038
- };
10039
- content: {
10040
- 'application/json': components['schemas']['GetSessionPortResponse'];
10041
- };
10042
- };
10043
- /** @description The bearer token is missing, invalid, or revoked. */
10044
- 401: {
10045
- headers: {
10046
- [name: string]: unknown;
10047
- };
10048
- content: {
10049
- 'application/json': components['schemas']['ErrorResponse'];
10050
- };
10051
- };
10052
- /** @description The credential may not perform this action, or the account is blocked. */
10053
- 403: {
10054
- headers: {
10055
- [name: string]: unknown;
10056
- };
10057
- content: {
10058
- 'application/json': components['schemas']['ErrorResponse'];
10059
- };
10060
- };
10061
- /** @description No such session in your account, or the port is not a valid TCP port. */
10062
- 404: {
10063
- headers: {
10064
- [name: string]: unknown;
10065
- };
10066
- content: {
10067
- 'application/json': components['schemas']['ErrorResponse'];
10068
- };
10069
- };
10070
- /** @description The session's sandbox is not running; send it a message to wake it first. */
10071
- 409: {
10072
- headers: {
10073
- [name: string]: unknown;
10074
- };
10075
- content: {
10076
- 'application/json': components['schemas']['ErrorResponse'];
10077
- };
10078
- };
10079
- /** @description Validation Error */
10080
- 422: {
10081
- headers: {
10082
- [name: string]: unknown;
10083
- };
10084
- content: {
10085
- 'application/json': components['schemas']['HTTPValidationError'];
10086
- };
10087
- };
10088
- };
10089
- };
10090
9608
  get_agent_session_records: {
10091
9609
  parameters: {
10092
9610
  query?: {
@@ -10176,7 +9694,7 @@ interface operations {
10176
9694
  'application/json': components['schemas']['SessionResponse'];
10177
9695
  };
10178
9696
  };
10179
- /** @description The session is a laptop session (not replayable), the named config does not exist, or the config override is invalid. */
9697
+ /** @description The named config does not exist, or the config override is invalid. */
10180
9698
  400: {
10181
9699
  headers: {
10182
9700
  [name: string]: unknown;
@@ -10245,15 +9763,6 @@ interface operations {
10245
9763
  'application/json': components['schemas']['SessionResponse'];
10246
9764
  };
10247
9765
  };
10248
- /** @description The session runs on a developer laptop and cannot be stopped from the cloud. */
10249
- 400: {
10250
- headers: {
10251
- [name: string]: unknown;
10252
- };
10253
- content: {
10254
- 'application/json': components['schemas']['ErrorResponse'];
10255
- };
10256
- };
10257
9766
  /** @description The bearer token is missing, invalid, or revoked. */
10258
9767
  401: {
10259
9768
  headers: {
@@ -10426,7 +9935,7 @@ interface operations {
10426
9935
  }
10427
9936
 
10428
9937
  /**
10429
- * One server-to-client frame of the Ellipsis session stream protocol v3 (WS /sessions/{id}/stream?protocol=3). Clients MUST ignore frames with unknown `type` values — additive frames are not a protocol break.
9938
+ * One server-to-client frame of the Ellipsis session stream protocol v3 (WS /v1/sessions/{id}/stream?protocol=3). Clients MUST ignore frames with unknown `type` values — additive frames are not a protocol break.
10430
9939
  */
10431
9940
  type SessionStreamFrame = SnapshotFrame | RecordsAppendFrame | SessionFrame | DeltaFrame | HeartbeatFrame | DoneFrame | ErrorFrame;
10432
9941
  type AttributionType = 'github_user' | 'linear_user' | 'slack_user' | 'api_key';
@@ -10434,19 +9943,38 @@ type AttributionType = 'github_user' | 'linear_user' | 'slack_user' | 'api_key';
10434
9943
  * Delivery status of the message.
10435
9944
  */
10436
9945
  type SessionMessageStatus = 'pending' | 'delivered';
9946
+ type EffortLevel = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
9947
+ /**
9948
+ * What may be done to a resource. Strictly ordered: a grant at one level
9949
+ * includes every level below it (write-only would be a phantom capability —
9950
+ * no real client can create what it cannot read back).
9951
+ */
9952
+ type Level = 'read' | 'write' | 'delete';
9953
+ type GithubAccountFilter = {
9954
+ exclude?: string[];
9955
+ include?: string[] | boolean;
9956
+ } | boolean | string[];
9957
+ type IssueAction = 'opened' | 'closed' | 'commented';
9958
+ type RepositoryFilter = {
9959
+ exclude?: string[];
9960
+ include?: string[];
9961
+ } | string[];
9962
+ type LinearIssueAction = 'opened';
9963
+ type PullRequestAction = 'opened' | 'pushed' | 'merged' | 'closed' | 'review_submitted' | 'commented';
9964
+ type SentryAction = 'issue_alert' | 'metric_alert';
9965
+ /**
9966
+ * The surface an @ellipsis mention can come from.
9967
+ */
9968
+ type AgentConfigMentionPlatform = 'github' | 'slack' | 'linear';
9969
+ /**
9970
+ * How this session's config was chosen.
9971
+ */
9972
+ type AgentConfigSource = 'explicit' | 'inline' | 'template' | 'repo_default' | 'account_default' | 'platform_default' | 'trigger' | 'builtin';
10437
9973
  type GithubAccountType = 'User' | 'Organization' | 'Bot' | 'Mannequin';
10438
9974
  /**
10439
9975
  * Where the resolved budget came from.
10440
9976
  */
10441
9977
  type BudgetSource = 'system' | 'account' | 'config' | 'run';
10442
- /**
10443
- * How a session that arrived with no explicit config source resolved its
10444
- * config (documents/eng/DEFAULT_CONFIGS.md §4). Persisted on the session so
10445
- * audit and clients can say "ran under X (repo default)". A session started
10446
- * with an explicit config/config_id/template_id never enters resolution and
10447
- * stores None.
10448
- */
10449
- type DefaultResolution = 'repo_default' | 'account_default' | 'none';
10450
9978
  /**
10451
9979
  * Why a terminal agent session ended — a finer-grained reason than `status`.
10452
9980
  *
@@ -10455,7 +9983,7 @@ type DefaultResolution = 'repo_default' | 'account_default' | 'none';
10455
9983
  * the UI and metrics can tell a budget cutoff apart from a crashed tool call or
10456
9984
  * a deliberate cancellation. It is None until the run reaches a terminal state.
10457
9985
  */
10458
- type SessionExitStatus = 'completed' | 'budget_hit' | 'payment_required' | 'tool_call_failed' | 'lifecycle_hook_failed' | 'missing_repo_access' | 'missing_token_permissions' | 'missing_sandbox_variables' | 'cancelled' | 'interrupted' | 'error' | 'stopped';
9986
+ type SessionExitStatus = 'completed' | 'budget_hit' | 'payment_required' | 'tool_call_failed' | 'lifecycle_hook_failed' | 'missing_repo_access' | 'missing_token_permissions' | 'missing_sandbox_variables' | 'blocked' | 'contact_email_required' | 'cancelled' | 'interrupted' | 'error' | 'stopped';
10459
9987
  /**
10460
9988
  * The coding-agent harness the session runs on.
10461
9989
  */
@@ -10467,16 +9995,14 @@ type Harness = 'claude_code' | 'codex';
10467
9995
  *
10468
9996
  * CONTINUATION — a follow-up in the same conversation surface (e.g. a Slack
10469
9997
  * thread reply spawning a fresh session on the same thread).
10470
- * HANDOFF — a session started to take over work from another surface (e.g.
10471
- * laptop → cloud handoff; later phase).
10472
9998
  * RESUME — a conversation re-hosted on a new box after its sandbox was torn
10473
9999
  * down (interactive platform; later phase).
10474
10000
  */
10475
- type ParentKind = 'continuation' | 'handoff' | 'resume';
10001
+ type ParentKind = 'continuation' | 'resume';
10476
10002
  /**
10477
10003
  * Why direct prompting is refused. Absent when prompting is allowed.
10478
10004
  */
10479
- type PromptBlockedReason = 'mention_surface' | 'ephemeral_trigger' | 'non_interactive' | 'harness_single_turn' | 'closed' | 'laptop';
10005
+ type PromptBlockedReason = 'mention_surface' | 'ephemeral_trigger' | 'non_interactive' | 'harness_single_turn' | 'closed';
10480
10006
  /**
10481
10007
  * Lifecycle of a keyed (multi-turn) session — the durable conversation.
10482
10008
  * Distinct from SessionStatus, which is per-execution (one turn's run) and
@@ -10486,9 +10012,9 @@ type PromptBlockedReason = 'mention_surface' | 'ephemeral_trigger' | 'non_intera
10486
10012
  */
10487
10013
  type SessionState = 'idle' | 'running' | 'closed';
10488
10014
  /**
10489
- * Where the session came from (e.g. react, manual, api, cli, mention, cron, laptop).
10015
+ * Where the session came from (e.g. react, manual, api, cli, mention, cron).
10490
10016
  */
10491
- type SessionSource = 'react' | 'manual' | 'api' | 'cli' | 'mention' | 'cron' | 'laptop';
10017
+ type SessionSource = 'react' | 'manual' | 'api' | 'cli' | 'mention' | 'cron';
10492
10018
  /**
10493
10019
  * Execution status of the session.
10494
10020
  */
@@ -10501,7 +10027,6 @@ type RunStatus = 'scheduled' | 'starting' | 'working' | 'waiting' | 'done' | 'fa
10501
10027
  * The durable conversation axis (backs the surfaced `session` field).
10502
10028
  */
10503
10029
  type SessionLiveness = 'alive' | 'sleeping' | 'closed';
10504
- type WebhookType = 'github.issue' | 'github.issue_comment' | 'github.push' | 'github.pull_request' | 'github.pull_request_comment' | 'github.pull_request_review' | 'github.pull_request_review_comment' | 'slack.app_mention' | 'slack.message' | 'slack.channel_created' | 'linear.issue' | 'linear.issue_comment' | 'sentry.event_alert' | 'sentry.metric_alert' | 'user.message';
10505
10030
  /**
10506
10031
  * The first frame after the stream connects: the session plus its open
10507
10032
  * inbox. Records always arrive separately via records_append frames.
@@ -10573,22 +10098,9 @@ interface SessionMessage {
10573
10098
  * The session's current state.
10574
10099
  */
10575
10100
  interface Session {
10101
+ agent: SessionAgent;
10576
10102
  attribution: SessionAttribution;
10577
10103
  budget: SessionBudget;
10578
- /**
10579
- * Version of the client that started the session, if reported.
10580
- */
10581
- client_version: string | null;
10582
- /**
10583
- * Identifier of the saved agent config the session ran on, if any.
10584
- */
10585
- config_id: string | null;
10586
- /**
10587
- * The partial-config diff applied for this run; null when the config was unmodified.
10588
- */
10589
- config_override: {
10590
- [k: string]: unknown;
10591
- } | null;
10592
10104
  /**
10593
10105
  * The "owner/name" repository context the session was started in, if any.
10594
10106
  */
@@ -10598,10 +10110,6 @@ interface Session {
10598
10110
  * When the session was created.
10599
10111
  */
10600
10112
  created_at: string;
10601
- /**
10602
- * How the session's config was resolved from the account's defaults, when no explicit config was given.
10603
- */
10604
- default_resolution: DefaultResolution | null;
10605
10113
  /**
10606
10114
  * How the session ended; null until it is terminal.
10607
10115
  */
@@ -10619,10 +10127,6 @@ interface Session {
10619
10127
  * When the session last received a message.
10620
10128
  */
10621
10129
  last_message_at: string | null;
10622
- /**
10623
- * A live summary of the session's progress while it runs.
10624
- */
10625
- live_summary: string | null;
10626
10130
  /**
10627
10131
  * Caller-supplied metadata key-value pairs.
10628
10132
  */
@@ -10639,14 +10143,6 @@ interface Session {
10639
10143
  */
10640
10144
  prompt: string | null;
10641
10145
  prompting: SessionPrompting;
10642
- /**
10643
- * Identifier of the sandbox the session runs in, if any.
10644
- */
10645
- sandbox_id: string | null;
10646
- /**
10647
- * Key identifying the durable conversation this session belongs to, or null for single-shot sessions.
10648
- */
10649
- session_key: string | null;
10650
10146
  /**
10651
10147
  * Lifecycle state of the durable conversation, or null for sessions without one.
10652
10148
  */
@@ -10659,7 +10155,11 @@ interface Session {
10659
10155
  status_reason: string | null;
10660
10156
  stopped: SessionStopped;
10661
10157
  /**
10662
- * The public status projection; null for laptop-synced sessions.
10158
+ * The latest live summary of the session's progress while it runs, and when it was generated.
10159
+ */
10160
+ summary: SessionSummary | null;
10161
+ /**
10162
+ * The public status projection; null on list/search responses, which do not derive it.
10663
10163
  */
10664
10164
  surface: SessionSurface | null;
10665
10165
  tokens: SessionTokens;
@@ -10667,14 +10167,434 @@ interface Session {
10667
10167
  * When the session was last updated.
10668
10168
  */
10669
10169
  updated_at: string;
10170
+ }
10171
+ /**
10172
+ * The agent that ran: the config the session executed, where that config came from, and any override merged into it.
10173
+ */
10174
+ interface SessionAgent {
10175
+ config: AgentConfig;
10670
10176
  /**
10671
- * Identifier of the webhook event that triggered the session, if any.
10177
+ * Identifier of the saved config this session's snapshot was taken from. Null for inline, platform-default, and built-in configs. Points at the config as it exists now, which may have changed since.
10672
10178
  */
10673
- webhook_id: string | null;
10179
+ config_id: string | null;
10674
10180
  /**
10675
- * Type of the webhook event that triggered the session, if any.
10181
+ * The partial-config override merged into `config` for this session, or null when the config ran unmodified. `config` is the merged result; this is the diff.
10676
10182
  */
10677
- webhook_type: WebhookType | null;
10183
+ override: {
10184
+ [k: string]: unknown;
10185
+ } | null;
10186
+ source: AgentConfigSource;
10187
+ }
10188
+ /**
10189
+ * The agent config the session actually ran, frozen when the session was created.
10190
+ */
10191
+ interface AgentConfig {
10192
+ budget: AgentConfigBudget;
10193
+ claude: AgentConfigClaude;
10194
+ codex: AgentConfigCodex | null;
10195
+ ellipsis: AgentConfigEllipsis;
10196
+ environment: AgentConfigEnvironment;
10197
+ input: AgentConfigInput | null;
10198
+ llm: AgentConfigLlm;
10199
+ mcp_servers: (string | AgentConfigMcpServer)[];
10200
+ output: AgentConfigOutput | null;
10201
+ permissions: AgentConfigPermissions;
10202
+ skills: AgentConfigSkill[];
10203
+ trigger: (AgentConfigCronTrigger | AgentConfigReactTrigger | AgentConfigMentionTrigger) | null;
10204
+ }
10205
+ interface AgentConfigBudget {
10206
+ day: number | null;
10207
+ month: number | null;
10208
+ session: number | null;
10209
+ week: number | null;
10210
+ }
10211
+ interface AgentConfigClaude {
10212
+ effort: EffortLevel | null;
10213
+ fallback_model: string | null;
10214
+ max_turns: number | null;
10215
+ model: string;
10216
+ settings: AgentConfigSettingsRef | null;
10217
+ system: string | AgentConfigSystemFileRef | (string | AgentConfigSystemFileRef)[];
10218
+ }
10219
+ /**
10220
+ * A config-declared Claude Code settings.json, resolved at run start and
10221
+ * passed to `claude --settings <path>`. That is the CLI settings tier — BELOW
10222
+ * Ellipsis's managed-settings.json floor — so it customizes behavior (model
10223
+ * permissions, includeCoAuthoredBy, statusLine, ...) but can never weaken a
10224
+ * security setting. Lets a team point the cloud agent at the same settings file
10225
+ * they already use with Claude Code locally instead of re-encoding it as YAML.
10226
+ */
10227
+ interface AgentConfigSettingsRef {
10228
+ path: string;
10229
+ repository: AgentConfigRepository | null;
10230
+ }
10231
+ interface AgentConfigRepository {
10232
+ name: string;
10233
+ owner: string | null;
10234
+ ref: string | null;
10235
+ }
10236
+ interface AgentConfigSystemFileRef {
10237
+ file: string;
10238
+ repository: AgentConfigRepository | null;
10239
+ }
10240
+ /**
10241
+ * The `codex:` block — run this agent on OpenAI's Codex CLI instead of
10242
+ * Claude Code. Declaring the block at all is what selects the harness
10243
+ * (`AgentConfig.harness`).
10244
+ *
10245
+ * Deliberately a small subset of `AgentConfigClaude`: the fields omitted here
10246
+ * are ones Codex has no equivalent for (`effort`, `fallback_model`,
10247
+ * `settings`) or that the platform does not yet wire through for this harness
10248
+ * (`max_turns`, `skills`, MCP servers). They are omitted rather than
10249
+ * accepted-and-ignored, because `StrictConfigModel` forbids extra keys — so a
10250
+ * config that sets one fails loudly at parse time instead of silently not doing
10251
+ * it. The budget still bounds a run regardless.
10252
+ */
10253
+ interface AgentConfigCodex {
10254
+ model: string;
10255
+ system: string | AgentConfigSystemFileRef | (string | AgentConfigSystemFileRef)[];
10256
+ }
10257
+ /**
10258
+ * The Ellipsis product namespace for a config file: which schema this is
10259
+ * (`version`), the human-facing identity (`name`/`description`), freeform
10260
+ * organizational `metadata`, whether the agent is `enabled`, and the
10261
+ * human-access flag `interactive`. The presence of a top-level `ellipsis:`
10262
+ * mapping is what marks a YAML file as an Ellipsis agent config (vs arbitrary
10263
+ * YAML that merely lives under a config directory) — see
10264
+ * `yaml_is_ellipsis_config`.
10265
+ *
10266
+ * `enabled`/`interactive` are agent behavior, not freeform metadata, so they
10267
+ * stay inside the config `sha` (only `metadata` is sha-excluded).
10268
+ * `interactive` lets a human `agent session connect` to a live session (CLI
10269
+ * relay). It does not decide whether a session is ephemeral or durable — that
10270
+ * is the trigger's job.
10271
+ */
10272
+ interface AgentConfigEllipsis {
10273
+ description: string | null;
10274
+ enabled: boolean;
10275
+ interactive: boolean;
10276
+ metadata: AgentConfigMetadata;
10277
+ name: string | null;
10278
+ version: string;
10279
+ }
10280
+ interface AgentConfigMetadata {
10281
+ annotations: {
10282
+ [k: string]: string;
10283
+ };
10284
+ labels: string[];
10285
+ }
10286
+ /**
10287
+ * Everything about the environment (the sandbox) the agent runs in: which
10288
+ * `repositories` are cloned into it, which environment `variables` it gets,
10289
+ * its `compute` sizing, how its `image` is customized, and lifecycle `hooks`.
10290
+ * What the agent may *do* from that environment is the top-level
10291
+ * `permissions:` block, not this one.
10292
+ *
10293
+ * Each `variables` entry names a variable to inject; with an inline `value` it
10294
+ * is hardcoded, without one it is resolved from the account's sandbox-secrets
10295
+ * store. Only the named variables reach this agent; the rest of the account's
10296
+ * stored variables never do. This is how a config brings in the config and
10297
+ * credentials a custom CLI needs.
10298
+ */
10299
+ interface AgentConfigEnvironment {
10300
+ compute: AgentConfigCompute;
10301
+ hooks: AgentConfigEnvironmentHooks;
10302
+ image: AgentConfigEnvironmentImage;
10303
+ repositories: AgentConfigRepository[];
10304
+ variables: AgentConfigEnvironmentVariable[];
10305
+ }
10306
+ /**
10307
+ * Sandbox compute sizing. Every field is optional; None inherits the
10308
+ * platform default (1 vCPU / 4096 MiB / 3600s — see DEFAULT_MODAL_* in
10309
+ * models/ellipsis/sandboxes/sandbox.py). A resolved value outside the platform
10310
+ * bounds fails validation loudly (a sync error on the config) rather than
10311
+ * being clamped silently.
10312
+ *
10313
+ * `memory` and `timeout` each accept a shorthand string ("8GB", "30m") or an
10314
+ * explicit units object ({gb: 8}, {minutes: 30}); the `memory_mib` /
10315
+ * `timeout_seconds` properties resolve either form to the canonical integer
10316
+ * the sandbox driver consumes.
10317
+ *
10318
+ * `timeout` is the max wall-clock the agent may run before the sandbox is
10319
+ * killed, capped at 1h (MAX_SANDBOX_TIMEOUT_SECONDS — equal to the default, so
10320
+ * today the knob only shortens a session; the cap matches the 1-hour validity
10321
+ * of the sandbox's GitHub token). The worker's lease/visibility heartbeat
10322
+ * ceiling is derived from that cap, so a run at the max stays owned by its
10323
+ * worker for its whole life.
10324
+ *
10325
+ * Compute is billed on the requested allocation over the sandbox's
10326
+ * wall-clock lifetime, so a bigger/longer box costs proportionally more.
10327
+ */
10328
+ interface AgentConfigCompute {
10329
+ cpu: number | null;
10330
+ memory: string | AgentConfigMemorySize | null;
10331
+ timeout: string | AgentConfigDuration | null;
10332
+ }
10333
+ /**
10334
+ * A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).
10335
+ * Set any of `gb`/`mb` (at least one). The alternative to the `8GB`-style
10336
+ * shorthand string.
10337
+ */
10338
+ interface AgentConfigMemorySize {
10339
+ gb: number | null;
10340
+ mb: number | null;
10341
+ }
10342
+ /**
10343
+ * A duration as explicit units, summed. Set any of `hours`/`minutes`/
10344
+ * `seconds` (at least one). The alternative to the `30m`-style shorthand
10345
+ * string wherever a duration is accepted.
10346
+ */
10347
+ interface AgentConfigDuration {
10348
+ hours: number | null;
10349
+ minutes: number | null;
10350
+ seconds: number | null;
10351
+ }
10352
+ /**
10353
+ * Shell scripts run at points in the sandbox lifecycle, each as the sandbox
10354
+ * user with the sandbox's environment variables available. A non-zero exit
10355
+ * fails the run (exit_status = LIFECYCLE_HOOK_FAILED) and is not retried.
10356
+ *
10357
+ * `post_start` runs after the container starts, before any repo is cloned —
10358
+ * repo-independent setup (authenticate a CLI, e.g. `doppler setup`). On Modal
10359
+ * the repo is baked into the image so it is incidentally present, but
10360
+ * `post_start` must not depend on repo contents (that's `post_clone`).
10361
+ *
10362
+ * `post_clone` runs after all repos are cloned/checked out, before the agent —
10363
+ * repo-dependent setup (`pip install -r requirements.txt`, codegen).
10364
+ *
10365
+ * Hooks run on every run and their output is never cached. A dependency
10366
+ * install whose result should be reused across runs belongs in `image.setup`
10367
+ * (baked into the cached image) instead; keep hooks for per-run work — e.g.
10368
+ * anything that touches run-scoped credentials.
10369
+ */
10370
+ interface AgentConfigEnvironmentHooks {
10371
+ post_clone: string | null;
10372
+ post_start: string | null;
10373
+ }
10374
+ /**
10375
+ * How to customize the container image the agent runs in. You
10376
+ * contribute appended layers (`dockerfile_append`) and a build-time script
10377
+ * (`setup`) only — Ellipsis owns FROM / base tooling / entrypoint / user.
10378
+ * Today only inline bodies are supported; a file reference (resolved at the
10379
+ * run's SHA) will come later.
10380
+ *
10381
+ * The split: `dockerfile_append` runs when the image is assembled, before any
10382
+ * repo exists — toolchain installs (a package manager binary, apt packages).
10383
+ * `setup` runs at image-build time *after* the configured repositories are
10384
+ * checked out, and its output is captured by the filesystem snapshot that
10385
+ * becomes the cached image — dependency installs (`poetry install`,
10386
+ * `npm install`), so later runs start with deps already on disk. Neither runs
10387
+ * per run; that's `hooks.post_start` / `hooks.post_clone`.
10388
+ */
10389
+ interface AgentConfigEnvironmentImage {
10390
+ dockerfile_append: string | null;
10391
+ setup: string | null;
10392
+ }
10393
+ /**
10394
+ * One environment variable injected into the agent's sandbox.
10395
+ *
10396
+ * `value`, when set, is a literal injected as-is — use it for non-secret
10397
+ * config (LOG_LEVEL, an API base URL). When `value` is omitted the value is
10398
+ * resolved at run time from the account's sandbox-secrets store (dashboard
10399
+ * / `PUT /v1/secrets`) by `name`, so a secret can be injected without
10400
+ * ever putting it in the config file. Either way the variable only reaches
10401
+ * agents that name it.
10402
+ */
10403
+ interface AgentConfigEnvironmentVariable {
10404
+ name: string;
10405
+ value: string | null;
10406
+ }
10407
+ /**
10408
+ * The typed input contract: what goes INTO a session (the trigger is
10409
+ * when it happens; this is what goes in).
10410
+ *
10411
+ * `json_schema` types the payload a caller-started session takes
10412
+ * (`POST /v1/sessions` `input`, validated at the door; required when
10413
+ * declared). It is illegal on a react-triggered agent — react payloads are
10414
+ * platform-shaped (the published surface field sets), not caller-shaped.
10415
+ *
10416
+ * `message` is the initial-message template: exact `{{path}}` substitution
10417
+ * over the caller payload (or, on a react agent, over the surface's
10418
+ * published fields), no conditionals/loops/filters. Refs are validated at
10419
+ * deploy time against the governing field set (see AgentConfig's
10420
+ * `_check_input`).
10421
+ */
10422
+ interface AgentConfigInput {
10423
+ json_schema: {
10424
+ [k: string]: unknown;
10425
+ } | null;
10426
+ message: string | null;
10427
+ }
10428
+ /**
10429
+ * Where this agent's completions go.
10430
+ *
10431
+ * Defaults to Ellipsis's own LLM proxy (our Anthropic/Bedrock account, or the
10432
+ * account-wide BYO provider if one is enabled). Setting `proxy` to the id of a
10433
+ * proxy registered on the models settings page routes THIS agent's
10434
+ * completions through that gateway instead.
10435
+ *
10436
+ * Opt-in per agent by design: registering a proxy does not silently move any
10437
+ * existing agent's traffic. The id is account-scoped, so naming another
10438
+ * account's id is a terminal config error, not a route.
10439
+ */
10440
+ interface AgentConfigLlm {
10441
+ proxy: string | null;
10442
+ }
10443
+ /**
10444
+ * One built-in MCP server this agent opts into by name (`linear`/`slack`).
10445
+ * This is a name reference over the connected built-in set, NOT a custom-server
10446
+ * definition — there is no command/url/headers shape (that was the old,
10447
+ * removed field, and Ellipsis does not support bring-your-own MCP servers).
10448
+ * It only matters when the named integration is set to `opt_in` inclusion; an
10449
+ * integration in the default `all_sessions` mode is added regardless.
10450
+ */
10451
+ interface AgentConfigMcpServer {
10452
+ name: string;
10453
+ }
10454
+ /**
10455
+ * The typed output contract: the JSON Schema the agent must exit through
10456
+ * (the StructuredOutput exit tool). Read back via
10457
+ * GET /v1/sessions/{id}/output.
10458
+ */
10459
+ interface AgentConfigOutput {
10460
+ json_schema: {
10461
+ [k: string]: unknown;
10462
+ };
10463
+ }
10464
+ /**
10465
+ * What the agent is allowed to touch, per credential the platform mints
10466
+ * into its sandbox. Distinct from `environment:`, which is where the agent
10467
+ * runs; this is what it may do from there.
10468
+ *
10469
+ * `ellipsis` scopes the sandbox's Ellipsis API token
10470
+ * (`ELLIPSIS_API_TOKEN`, what the in-sandbox `agent` CLI authenticates
10471
+ * with). `true` / the string `all` (the default) grant the full sandbox
10472
+ * ceiling — everything a sandbox token can ever do. A map narrows it per
10473
+ * resource (see `AgentConfigEllipsisPermissions`); the minted token carries
10474
+ * the intersection, so a config can only ever reduce access. `false` fails
10475
+ * validation — an agent with no API token cannot report its own progress.
10476
+ *
10477
+ * `github` scopes the sandbox's GitHub installation token (`GH_TOKEN`) —
10478
+ * see `AgentConfigGithubPermissions`. GitHub enforces it at mint time.
10479
+ */
10480
+ interface AgentConfigPermissions {
10481
+ ellipsis: (true | 'all') | AgentConfigEllipsisPermissions;
10482
+ github: AgentConfigGithubPermissions;
10483
+ }
10484
+ /**
10485
+ * `permissions.ellipsis` as a map: resource → level | grant | list of
10486
+ * grants. Levels are hierarchical (read < write < delete), so `write`
10487
+ * includes `read`. An unlisted resource is denied. The whole block is
10488
+ * intersected with the platform's sandbox ceiling at token mint — it can
10489
+ * narrow what a sandbox token may do, never exceed it.
10490
+ */
10491
+ interface AgentConfigEllipsisPermissions {
10492
+ [k: string]: Level | EllipsisGrant | (Level | EllipsisGrant)[];
10493
+ }
10494
+ /**
10495
+ * One grant entry: a level, optionally narrowed to instances whose
10496
+ * natural key (a file's name, a memory's path, a secret's name, a config's
10497
+ * name, a session's id) matches any of the `match` globs.
10498
+ */
10499
+ interface EllipsisGrant {
10500
+ level: Level;
10501
+ match: string[] | null;
10502
+ }
10503
+ /**
10504
+ * The agent's GitHub access: the scope of the installation token minted for
10505
+ * its sandbox — the credential `git`, `gh`, and the GitHub MCP server
10506
+ * authenticate with.
10507
+ *
10508
+ * By default the token carries the installation's full permissions on all of
10509
+ * the installation's repositories. `permissions` narrows what it may do:
10510
+ * the string `read_only` grants read access to contents, issues, metadata and
10511
+ * pull requests; a map requests explicit levels per GitHub App permission
10512
+ * scope (e.g. `{contents: read, pull_requests: write}`) and may never exceed
10513
+ * what the installation granted. `repositories` scopes the token to exactly
10514
+ * the listed repos, by name (they must belong to the installation).
10515
+ *
10516
+ * Restriction is enforced by GitHub, not by Ellipsis: the token itself is
10517
+ * minted with the reduced scope, so nothing running in the sandbox can
10518
+ * exceed it.
10519
+ */
10520
+ interface AgentConfigGithubPermissions {
10521
+ permissions: 'read_only' | {
10522
+ [k: string]: string;
10523
+ } | null;
10524
+ repositories: string[] | null;
10525
+ }
10526
+ /**
10527
+ * One config-declared Claude Code skill: a repository directory containing
10528
+ * a SKILL.md, resolved at run start and installed at the sandbox's personal
10529
+ * skill level (`~/.claude/skills/<basename(path)>/`). This is how a config
10530
+ * brings in skills its cloned repositories don't provide — cross-repo refs
10531
+ * (an org-wide skills repo), public third-party repos, and repo-less runs.
10532
+ * Skills under a cloned repo's own `.claude/skills/` load by themselves and
10533
+ * don't need an entry here.
10534
+ */
10535
+ interface AgentConfigSkill {
10536
+ path: string;
10537
+ repository: AgentConfigRepository | null;
10538
+ }
10539
+ interface AgentConfigCronTrigger {
10540
+ schedule: string;
10541
+ type: 'cron';
10542
+ }
10543
+ interface AgentConfigReactTrigger {
10544
+ issue: ReactIssue | null;
10545
+ linear_issue: ReactLinearIssue | null;
10546
+ pull_request: ReactPullRequest | null;
10547
+ push: ReactPush | null;
10548
+ sentry: ReactSentry | null;
10549
+ slack_channel: ReactSlackChannel | null;
10550
+ type: 'react';
10551
+ }
10552
+ interface ReactIssue {
10553
+ for: GithubAccountSelector;
10554
+ labels: string[];
10555
+ on: IssueAction[];
10556
+ repositories: RepositoryFilter;
10557
+ }
10558
+ /**
10559
+ * A selector of GitHub accounts — the `for:` audience gate on react
10560
+ * surfaces and code review pipelines, classified on the stable entity author
10561
+ * (the pusher for `push`, the PR author for a review). `users` selects human
10562
+ * accounts, `bots` selects bot accounts; each is a `GithubAccountFilter`
10563
+ * (include minus exclude, with bare bool/list shorthand).
10564
+ */
10565
+ interface GithubAccountSelector {
10566
+ bots: GithubAccountFilter;
10567
+ users: GithubAccountFilter;
10568
+ }
10569
+ interface ReactLinearIssue {
10570
+ for: GithubAccountSelector;
10571
+ on: LinearIssueAction[];
10572
+ }
10573
+ interface ReactPullRequest {
10574
+ base: string[];
10575
+ draft: boolean | null;
10576
+ for: GithubAccountSelector;
10577
+ head: string[];
10578
+ labels: string[];
10579
+ on: PullRequestAction[];
10580
+ paths: string[];
10581
+ repositories: RepositoryFilter;
10582
+ }
10583
+ interface ReactPush {
10584
+ branch: string[];
10585
+ for: GithubAccountSelector;
10586
+ paths: string[];
10587
+ repositories: RepositoryFilter;
10588
+ }
10589
+ interface ReactSentry {
10590
+ on: SentryAction[];
10591
+ projects: string[];
10592
+ }
10593
+ interface ReactSlackChannel {
10594
+ }
10595
+ interface AgentConfigMentionTrigger {
10596
+ platforms: AgentConfigMentionPlatform[];
10597
+ type: 'mention';
10678
10598
  }
10679
10599
  /**
10680
10600
  * The principal this session is attributed to.
@@ -10797,7 +10717,21 @@ interface SessionStopped {
10797
10717
  by_user: GithubAccountSnippet | null;
10798
10718
  }
10799
10719
  /**
10800
- * The three fields we expose. All `None` for an un-keyed (laptop) session.
10720
+ * A live one-line summary of what the session is working on, refreshed
10721
+ * every few steps while it runs.
10722
+ */
10723
+ interface SessionSummary {
10724
+ /**
10725
+ * When this summary line was generated. Null on summaries written before generation time was tracked.
10726
+ */
10727
+ created_at: string | null;
10728
+ /**
10729
+ * One-line description of what the session is working on.
10730
+ */
10731
+ description: string;
10732
+ }
10733
+ /**
10734
+ * The three fields we expose.
10801
10735
  *
10802
10736
  * `use_enum_values=True` (from CustomBaseModel) stores the members as their
10803
10737
  * string values, so this serializes to `{"session": "alive", "run": "waiting",
@@ -10954,22 +10888,9 @@ interface SessionFrame {
10954
10888
  * The session's current state.
10955
10889
  */
10956
10890
  interface Session1 {
10891
+ agent: SessionAgent;
10957
10892
  attribution: SessionAttribution;
10958
10893
  budget: SessionBudget;
10959
- /**
10960
- * Version of the client that started the session, if reported.
10961
- */
10962
- client_version: string | null;
10963
- /**
10964
- * Identifier of the saved agent config the session ran on, if any.
10965
- */
10966
- config_id: string | null;
10967
- /**
10968
- * The partial-config diff applied for this run; null when the config was unmodified.
10969
- */
10970
- config_override: {
10971
- [k: string]: unknown;
10972
- } | null;
10973
10894
  /**
10974
10895
  * The "owner/name" repository context the session was started in, if any.
10975
10896
  */
@@ -10979,10 +10900,6 @@ interface Session1 {
10979
10900
  * When the session was created.
10980
10901
  */
10981
10902
  created_at: string;
10982
- /**
10983
- * How the session's config was resolved from the account's defaults, when no explicit config was given.
10984
- */
10985
- default_resolution: DefaultResolution | null;
10986
10903
  /**
10987
10904
  * How the session ended; null until it is terminal.
10988
10905
  */
@@ -11000,10 +10917,6 @@ interface Session1 {
11000
10917
  * When the session last received a message.
11001
10918
  */
11002
10919
  last_message_at: string | null;
11003
- /**
11004
- * A live summary of the session's progress while it runs.
11005
- */
11006
- live_summary: string | null;
11007
10920
  /**
11008
10921
  * Caller-supplied metadata key-value pairs.
11009
10922
  */
@@ -11020,14 +10933,6 @@ interface Session1 {
11020
10933
  */
11021
10934
  prompt: string | null;
11022
10935
  prompting: SessionPrompting;
11023
- /**
11024
- * Identifier of the sandbox the session runs in, if any.
11025
- */
11026
- sandbox_id: string | null;
11027
- /**
11028
- * Key identifying the durable conversation this session belongs to, or null for single-shot sessions.
11029
- */
11030
- session_key: string | null;
11031
10936
  /**
11032
10937
  * Lifecycle state of the durable conversation, or null for sessions without one.
11033
10938
  */
@@ -11040,7 +10945,11 @@ interface Session1 {
11040
10945
  status_reason: string | null;
11041
10946
  stopped: SessionStopped;
11042
10947
  /**
11043
- * The public status projection; null for laptop-synced sessions.
10948
+ * The latest live summary of the session's progress while it runs, and when it was generated.
10949
+ */
10950
+ summary: SessionSummary | null;
10951
+ /**
10952
+ * The public status projection; null on list/search responses, which do not derive it.
11044
10953
  */
11045
10954
  surface: SessionSurface | null;
11046
10955
  tokens: SessionTokens;
@@ -11048,14 +10957,6 @@ interface Session1 {
11048
10957
  * When the session was last updated.
11049
10958
  */
11050
10959
  updated_at: string;
11051
- /**
11052
- * Identifier of the webhook event that triggered the session, if any.
11053
- */
11054
- webhook_id: string | null;
11055
- /**
11056
- * Type of the webhook event that triggered the session, if any.
11057
- */
11058
- webhook_type: WebhookType | null;
11059
10960
  }
11060
10961
  /**
11061
10962
  * Fire-and-forget partial assistant output for the current response.
@@ -11136,4 +11037,4 @@ type ReviewRequester = components['schemas']['ReviewRequester'];
11136
11037
  type ReviewFinding = components['schemas']['ReviewFinding'];
11137
11038
  type Finding = ReviewFinding;
11138
11039
 
11139
- export type { AttributionType as A, BudgetSource as B, CreateReviewRequest as C, DefaultResolution as D, ErrorFrame as E, Finding as F, GithubAccountSnippet as G, Harness as H, SessionPr as I, SessionPrompting as J, SessionRecord as K, SessionRecordsListResponse as L, SessionResponse as M, SessionSource as N, SessionState as O, ParentKind as P, SessionStatus as Q, RecordsAppendFrame as R, SendSessionMessageRequest as S, SessionStreamFrame as T, SessionSurface as U, SessionsListResponse as V, SnapshotFrame as W, StreamFrame as X, TokensInfo as Y, paths as Z, DeltaFrame as a, DoneFrame as b, components as c, GithubAccountType as d, HeartbeatFrame as e, PromptBlockedReason as f, ResolvedReviewScope as g, Review as h, ReviewConfiguration as i, ReviewCounters as j, ReviewFinding as k, ReviewRequester as l, ReviewScope as m, ReviewScopeKind as n, ReviewStage as o, ReviewedCommit as p, ReviewsListResponse as q, Session as r, SessionExecution as s, SessionExecutionsListResponse as t, SessionExitStatus as u, SessionFrame as v, SessionLiveness as w, SessionMessage as x, SessionMessageResponse as y, SessionMessageStatus as z };
11040
+ export type { AgentConfigSource as A, BudgetSource as B, CreateReviewRequest as C, DeltaFrame as D, ErrorFrame as E, Finding as F, GithubAccountSnippet as G, Harness as H, SessionPr as I, SessionPrompting as J, SessionRecord as K, SessionRecordsListResponse as L, SessionResponse as M, SessionSource as N, SessionState as O, ParentKind as P, SessionStatus as Q, RecordsAppendFrame as R, SendSessionMessageRequest as S, SessionStreamFrame as T, SessionSurface as U, SessionsListResponse as V, SnapshotFrame as W, StreamFrame as X, TokensInfo as Y, paths as Z, AttributionType as a, DoneFrame as b, components as c, GithubAccountType as d, HeartbeatFrame as e, PromptBlockedReason as f, ResolvedReviewScope as g, Review as h, ReviewConfiguration as i, ReviewCounters as j, ReviewFinding as k, ReviewRequester as l, ReviewScope as m, ReviewScopeKind as n, ReviewStage as o, ReviewedCommit as p, ReviewsListResponse as q, Session as r, SessionExecution as s, SessionExecutionsListResponse as t, SessionExitStatus as u, SessionFrame as v, SessionLiveness as w, SessionMessage as x, SessionMessageResponse as y, SessionMessageStatus as z };