@ellipsis-dev/sdk 0.22.0 → 0.25.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.
- package/dist/index.d.ts +48 -21
- package/dist/index.js +40 -7
- package/dist/store/index.d.ts +1 -1
- package/dist/stream/index.d.ts +1 -1
- package/dist/{types-BKAbWcLN.d.ts → types-DJzmFABi.d.ts} +1275 -935
- package/package.json +1 -1
- package/schema/frames.schema.json +1301 -1302
- package/schema/openapi.v1.json +1739 -1372
|
@@ -280,6 +280,32 @@ interface paths {
|
|
|
280
280
|
patch?: never;
|
|
281
281
|
trace?: never;
|
|
282
282
|
};
|
|
283
|
+
'/v1/automations/{automation_id}/metrics': {
|
|
284
|
+
parameters: {
|
|
285
|
+
query?: never;
|
|
286
|
+
header?: never;
|
|
287
|
+
path?: never;
|
|
288
|
+
cookie?: never;
|
|
289
|
+
};
|
|
290
|
+
/**
|
|
291
|
+
* Get Automation Metrics
|
|
292
|
+
* @description Return an automation's session distribution and trailing spend,
|
|
293
|
+
* by id or by name.
|
|
294
|
+
*
|
|
295
|
+
* `samples` carries one entry per finished session (duration, cost,
|
|
296
|
+
* tokens) for distributions; `spend_windows` carries what the
|
|
297
|
+
* automation's sessions cost over the last 1, 7, and 28 days against
|
|
298
|
+
* its budget for each window.
|
|
299
|
+
*/
|
|
300
|
+
get: operations['get_automation_metrics'];
|
|
301
|
+
put?: never;
|
|
302
|
+
post?: never;
|
|
303
|
+
delete?: never;
|
|
304
|
+
options?: never;
|
|
305
|
+
head?: never;
|
|
306
|
+
patch?: never;
|
|
307
|
+
trace?: never;
|
|
308
|
+
};
|
|
283
309
|
'/v1/automations/{automation_id}/sessions': {
|
|
284
310
|
parameters: {
|
|
285
311
|
query?: never;
|
|
@@ -780,7 +806,9 @@ interface paths {
|
|
|
780
806
|
* List Reviews
|
|
781
807
|
* @description List code reviews, newest first.
|
|
782
808
|
*
|
|
783
|
-
* `findings`
|
|
809
|
+
* `findings` and `configuration` are omitted (counters only). Each
|
|
810
|
+
* filter is a set: repeat `repository`, `pull_request_number`, or
|
|
811
|
+
* `status` to match any of several values.
|
|
784
812
|
*
|
|
785
813
|
* Webhook-created reviews appear here too, so this answers "show
|
|
786
814
|
* me every review on this PR".
|
|
@@ -791,9 +819,10 @@ interface paths {
|
|
|
791
819
|
* Create Review
|
|
792
820
|
* @description Run a code review on demand.
|
|
793
821
|
*
|
|
794
|
-
* Reviews an
|
|
795
|
-
*
|
|
796
|
-
*
|
|
822
|
+
* Reviews an open pull request. Which pipeline runs is not a
|
|
823
|
+
* parameter: it resolves from the repository's files exactly as
|
|
824
|
+
* it does for a push, so an on-demand review never disagrees with
|
|
825
|
+
* the automatic one.
|
|
797
826
|
*
|
|
798
827
|
* A review is one pipeline run over one commit range, with one
|
|
799
828
|
* agent session per stage: `review.id` is the run id, and
|
|
@@ -912,7 +941,7 @@ interface paths {
|
|
|
912
941
|
* @description Start a cloud agent session.
|
|
913
942
|
*
|
|
914
943
|
* The daily driver: a prompt, optionally where to run it
|
|
915
|
-
* (`environment`) and the run's own settings, in the
|
|
944
|
+
* (`environment`) and the run's own settings, in the AutomationConfig
|
|
916
945
|
* vocabulary. Anything omitted comes from the organization's
|
|
917
946
|
* settings — default model, default environment, budget — so
|
|
918
947
|
* `{"prompt": "..."}` alone is a complete request. `prompt` is the
|
|
@@ -955,6 +984,32 @@ interface paths {
|
|
|
955
984
|
patch?: never;
|
|
956
985
|
trace?: never;
|
|
957
986
|
};
|
|
987
|
+
'/v1/sessions/{session_id}/diff': {
|
|
988
|
+
parameters: {
|
|
989
|
+
query?: never;
|
|
990
|
+
header?: never;
|
|
991
|
+
path?: never;
|
|
992
|
+
cookie?: never;
|
|
993
|
+
};
|
|
994
|
+
/**
|
|
995
|
+
* Get Agent Session Diff
|
|
996
|
+
* @description Return the session's uncommitted changes as a patch.
|
|
997
|
+
*
|
|
998
|
+
* One unified-diff section per changed file, captured from the
|
|
999
|
+
* sandbox's working tree when the session ended. The per-file
|
|
1000
|
+
* counts ride on the session itself (`git.repos[].files`); this
|
|
1001
|
+
* is the text behind them. Empty when the tree was clean. A
|
|
1002
|
+
* sandbox token may read only its own session's diff.
|
|
1003
|
+
*/
|
|
1004
|
+
get: operations['get_agent_session_diff'];
|
|
1005
|
+
put?: never;
|
|
1006
|
+
post?: never;
|
|
1007
|
+
delete?: never;
|
|
1008
|
+
options?: never;
|
|
1009
|
+
head?: never;
|
|
1010
|
+
patch?: never;
|
|
1011
|
+
trace?: never;
|
|
1012
|
+
};
|
|
958
1013
|
'/v1/sessions/{session_id}/export': {
|
|
959
1014
|
parameters: {
|
|
960
1015
|
query?: never;
|
|
@@ -1141,670 +1196,75 @@ interface paths {
|
|
|
1141
1196
|
delete?: never;
|
|
1142
1197
|
options?: never;
|
|
1143
1198
|
head?: never;
|
|
1144
|
-
patch?: never;
|
|
1145
|
-
trace?: never;
|
|
1146
|
-
};
|
|
1147
|
-
'/v1/templates': {
|
|
1148
|
-
parameters: {
|
|
1149
|
-
query?: never;
|
|
1150
|
-
header?: never;
|
|
1151
|
-
path?: never;
|
|
1152
|
-
cookie?: never;
|
|
1153
|
-
};
|
|
1154
|
-
/**
|
|
1155
|
-
* List Agent Templates
|
|
1156
|
-
* @description List the built-in starter agent templates.
|
|
1157
|
-
*
|
|
1158
|
-
* Behind auth but not account-scoped — the data is static
|
|
1159
|
-
* product content shared by the dashboard, landing site, and CLI.
|
|
1160
|
-
*/
|
|
1161
|
-
get: operations['list_agent_templates'];
|
|
1162
|
-
put?: never;
|
|
1163
|
-
post?: never;
|
|
1164
|
-
delete?: never;
|
|
1165
|
-
options?: never;
|
|
1166
|
-
head?: never;
|
|
1167
|
-
patch?: never;
|
|
1168
|
-
trace?: never;
|
|
1169
|
-
};
|
|
1170
|
-
'/v1/templates/{template_id}': {
|
|
1171
|
-
parameters: {
|
|
1172
|
-
query?: never;
|
|
1173
|
-
header?: never;
|
|
1174
|
-
path?: never;
|
|
1175
|
-
cookie?: never;
|
|
1176
|
-
};
|
|
1177
|
-
/**
|
|
1178
|
-
* Get Agent Template
|
|
1179
|
-
* @description Return one built-in agent template by slug.
|
|
1180
|
-
*/
|
|
1181
|
-
get: operations['get_agent_template'];
|
|
1182
|
-
put?: never;
|
|
1183
|
-
post?: never;
|
|
1184
|
-
delete?: never;
|
|
1185
|
-
options?: never;
|
|
1186
|
-
head?: never;
|
|
1187
|
-
patch?: never;
|
|
1188
|
-
trace?: never;
|
|
1189
|
-
};
|
|
1190
|
-
'/v1/usage': {
|
|
1191
|
-
parameters: {
|
|
1192
|
-
query?: never;
|
|
1193
|
-
header?: never;
|
|
1194
|
-
path?: never;
|
|
1195
|
-
cookie?: never;
|
|
1196
|
-
};
|
|
1197
|
-
/**
|
|
1198
|
-
* Get Usage
|
|
1199
|
-
* @description Return the caller's usage dashboard data.
|
|
1200
|
-
*/
|
|
1201
|
-
get: operations['get_usage_endpoint'];
|
|
1202
|
-
put?: never;
|
|
1203
|
-
post?: never;
|
|
1204
|
-
delete?: never;
|
|
1205
|
-
options?: never;
|
|
1206
|
-
head?: never;
|
|
1207
|
-
patch?: never;
|
|
1208
|
-
trace?: never;
|
|
1209
|
-
};
|
|
1210
|
-
}
|
|
1211
|
-
interface components {
|
|
1212
|
-
schemas: {
|
|
1213
|
-
/** AgentConfig */
|
|
1214
|
-
AgentConfig: {
|
|
1215
|
-
/** @default {} */
|
|
1216
|
-
budget: components['schemas']['AgentConfigBudget'];
|
|
1217
|
-
/**
|
|
1218
|
-
* @default {
|
|
1219
|
-
* "system": ""
|
|
1220
|
-
* }
|
|
1221
|
-
*/
|
|
1222
|
-
claude: components['schemas']['AgentConfigClaude'];
|
|
1223
|
-
codex?: components['schemas']['AgentConfigCodex'] | null;
|
|
1224
|
-
/**
|
|
1225
|
-
* @default {
|
|
1226
|
-
* "enabled": true,
|
|
1227
|
-
* "metadata": {
|
|
1228
|
-
* "annotations": {},
|
|
1229
|
-
* "labels": []
|
|
1230
|
-
* },
|
|
1231
|
-
* "version": "v1"
|
|
1232
|
-
* }
|
|
1233
|
-
*/
|
|
1234
|
-
ellipsis: components['schemas']['AgentConfigEllipsis'];
|
|
1235
|
-
/**
|
|
1236
|
-
* Environment
|
|
1237
|
-
* @default {
|
|
1238
|
-
* "compute": {},
|
|
1239
|
-
* "hooks": {},
|
|
1240
|
-
* "image": {},
|
|
1241
|
-
* "mcp_servers": [],
|
|
1242
|
-
* "repositories": [],
|
|
1243
|
-
* "variables": []
|
|
1244
|
-
* }
|
|
1245
|
-
*/
|
|
1246
|
-
environment: string | components['schemas']['AgentConfigEnvironment'];
|
|
1247
|
-
input?: components['schemas']['AgentConfigInput'] | null;
|
|
1248
|
-
output?: components['schemas']['AgentConfigOutput'] | null;
|
|
1249
|
-
/**
|
|
1250
|
-
* @default {
|
|
1251
|
-
* "ellipsis": true,
|
|
1252
|
-
* "github": {}
|
|
1253
|
-
* }
|
|
1254
|
-
*/
|
|
1255
|
-
permissions: components['schemas']['AgentConfigPermissions'];
|
|
1256
|
-
/**
|
|
1257
|
-
* Skills
|
|
1258
|
-
* @default []
|
|
1259
|
-
*/
|
|
1260
|
-
skills: components['schemas']['AgentConfigSkill'][];
|
|
1261
|
-
/** Trigger */
|
|
1262
|
-
trigger?: (components['schemas']['AgentConfigCronTrigger'] | components['schemas']['AgentConfigReactTrigger'] | components['schemas']['AgentConfigMentionTrigger']) | null;
|
|
1263
|
-
};
|
|
1264
|
-
/** AgentConfigBudget */
|
|
1265
|
-
AgentConfigBudget: {
|
|
1266
|
-
/** Day */
|
|
1267
|
-
day?: number | null;
|
|
1268
|
-
/** Month */
|
|
1269
|
-
month?: number | null;
|
|
1270
|
-
/** Session */
|
|
1271
|
-
session?: number | null;
|
|
1272
|
-
/** Week */
|
|
1273
|
-
week?: number | null;
|
|
1274
|
-
};
|
|
1275
|
-
/** AgentConfigClaude */
|
|
1276
|
-
AgentConfigClaude: {
|
|
1277
|
-
effort?: components['schemas']['EffortLevel'] | null;
|
|
1278
|
-
/** Fallback Model */
|
|
1279
|
-
fallback_model?: string | null;
|
|
1280
|
-
/** Max Turns */
|
|
1281
|
-
max_turns?: number | null;
|
|
1282
|
-
/** Model */
|
|
1283
|
-
model?: string | null;
|
|
1284
|
-
settings?: components['schemas']['AgentConfigSettingsRef'] | null;
|
|
1285
|
-
/**
|
|
1286
|
-
* System
|
|
1287
|
-
* @default
|
|
1288
|
-
*/
|
|
1289
|
-
system: string | components['schemas']['AgentConfigSystemFileRef'] | (string | components['schemas']['AgentConfigSystemFileRef'])[];
|
|
1290
|
-
};
|
|
1291
|
-
/**
|
|
1292
|
-
* AgentConfigCodex
|
|
1293
|
-
* @description The `codex:` block — run this agent on OpenAI's Codex CLI instead of
|
|
1294
|
-
* Claude Code. Declaring the block at all is what selects the harness
|
|
1295
|
-
* (`AgentConfig.harness`).
|
|
1296
|
-
*
|
|
1297
|
-
* Deliberately a small subset of `AgentConfigClaude`: the fields omitted here
|
|
1298
|
-
* are ones Codex has no equivalent for (`effort`, `fallback_model`,
|
|
1299
|
-
* `settings`) or that the platform does not yet wire through for this harness
|
|
1300
|
-
* (`max_turns`, `skills`, MCP servers). They are omitted rather than
|
|
1301
|
-
* accepted-and-ignored, because `StrictConfigModel` forbids extra keys — so a
|
|
1302
|
-
* config that sets one fails loudly at parse time instead of silently not doing
|
|
1303
|
-
* it. The budget still bounds a run regardless.
|
|
1304
|
-
*/
|
|
1305
|
-
AgentConfigCodex: {
|
|
1306
|
-
/**
|
|
1307
|
-
* Model
|
|
1308
|
-
* @default gpt-5.6-terra
|
|
1309
|
-
*/
|
|
1310
|
-
model: string;
|
|
1311
|
-
/**
|
|
1312
|
-
* System
|
|
1313
|
-
* @default
|
|
1314
|
-
*/
|
|
1315
|
-
system: string | components['schemas']['AgentConfigSystemFileRef'] | (string | components['schemas']['AgentConfigSystemFileRef'])[];
|
|
1316
|
-
};
|
|
1317
|
-
/**
|
|
1318
|
-
* AgentConfigCompute
|
|
1319
|
-
* @description Sandbox compute sizing. Every field is optional; None inherits the
|
|
1320
|
-
* platform default (1 vCPU / 4096 MiB / 3600s — see DEFAULT_MODAL_* in
|
|
1321
|
-
* models/ellipsis/sandboxes/sandbox.py). A resolved value outside the platform
|
|
1322
|
-
* bounds fails validation loudly (a sync error on the config) rather than
|
|
1323
|
-
* being clamped silently.
|
|
1324
|
-
*
|
|
1325
|
-
* `memory` and `timeout` each accept a shorthand string ("8GB", "30m") or an
|
|
1326
|
-
* explicit units object ({gb: 8}, {minutes: 30}); the `memory_mib` /
|
|
1327
|
-
* `timeout_seconds` properties resolve either form to the canonical integer
|
|
1328
|
-
* the sandbox driver consumes.
|
|
1329
|
-
*
|
|
1330
|
-
* `timeout` is the max wall-clock the agent may run before the sandbox is
|
|
1331
|
-
* killed, capped at 1h (MAX_SANDBOX_TIMEOUT_SECONDS — equal to the default, so
|
|
1332
|
-
* today the knob only shortens a session; the cap matches the 1-hour validity
|
|
1333
|
-
* of the sandbox's GitHub token). The worker's lease/visibility heartbeat
|
|
1334
|
-
* ceiling is derived from that cap, so a run at the max stays owned by its
|
|
1335
|
-
* worker for its whole life.
|
|
1336
|
-
*
|
|
1337
|
-
* Compute is billed on the requested allocation over the sandbox's
|
|
1338
|
-
* wall-clock lifetime, so a bigger/longer box costs proportionally more.
|
|
1339
|
-
*/
|
|
1340
|
-
AgentConfigCompute: {
|
|
1341
|
-
/** Cpu */
|
|
1342
|
-
cpu?: number | null;
|
|
1343
|
-
/** Memory */
|
|
1344
|
-
memory?: string | components['schemas']['AgentConfigMemorySize'] | null;
|
|
1345
|
-
/** Timeout */
|
|
1346
|
-
timeout?: string | components['schemas']['AgentConfigDuration'] | null;
|
|
1347
|
-
};
|
|
1348
|
-
/** AgentConfigCronTrigger */
|
|
1349
|
-
AgentConfigCronTrigger: {
|
|
1350
|
-
/** Schedule */
|
|
1351
|
-
schedule: string;
|
|
1352
|
-
/**
|
|
1353
|
-
* @description discriminator enum property added by openapi-typescript
|
|
1354
|
-
* @enum {string}
|
|
1355
|
-
*/
|
|
1356
|
-
type: 'cron';
|
|
1357
|
-
};
|
|
1358
|
-
/**
|
|
1359
|
-
* AgentConfigDuration
|
|
1360
|
-
* @description A duration as explicit units, summed. Set any of `hours`/`minutes`/
|
|
1361
|
-
* `seconds` (at least one). The alternative to the `30m`-style shorthand
|
|
1362
|
-
* string wherever a duration is accepted.
|
|
1363
|
-
*/
|
|
1364
|
-
AgentConfigDuration: {
|
|
1365
|
-
/** Hours */
|
|
1366
|
-
hours?: number | null;
|
|
1367
|
-
/** Minutes */
|
|
1368
|
-
minutes?: number | null;
|
|
1369
|
-
/** Seconds */
|
|
1370
|
-
seconds?: number | null;
|
|
1371
|
-
};
|
|
1372
|
-
/**
|
|
1373
|
-
* AgentConfigEllipsis
|
|
1374
|
-
* @description The Ellipsis product namespace for a config file: which schema this is
|
|
1375
|
-
* (`version`), the human-facing identity (`name`/`description`), freeform
|
|
1376
|
-
* organizational `metadata`, and whether the agent is `enabled`. The
|
|
1377
|
-
* presence of a top-level `ellipsis:` mapping is what marks a YAML file as
|
|
1378
|
-
* an Ellipsis agent config (vs arbitrary YAML that merely lives under a
|
|
1379
|
-
* config directory) — see `yaml_is_ellipsis_config`.
|
|
1380
|
-
*
|
|
1381
|
-
* `enabled` is agent behavior, not freeform metadata, so it stays inside
|
|
1382
|
-
* the config `sha` (only `metadata` is sha-excluded). Whether a session
|
|
1383
|
-
* accepts messages is a per-run choice (POST /v1/sessions `interactive`),
|
|
1384
|
-
* not a config one.
|
|
1385
|
-
*/
|
|
1386
|
-
AgentConfigEllipsis: {
|
|
1387
|
-
/** Description */
|
|
1388
|
-
description?: string | null;
|
|
1389
|
-
/**
|
|
1390
|
-
* Enabled
|
|
1391
|
-
* @default true
|
|
1392
|
-
*/
|
|
1393
|
-
enabled: boolean;
|
|
1394
|
-
/**
|
|
1395
|
-
* @default {
|
|
1396
|
-
* "annotations": {},
|
|
1397
|
-
* "labels": []
|
|
1398
|
-
* }
|
|
1399
|
-
*/
|
|
1400
|
-
metadata: components['schemas']['AgentConfigMetadata'];
|
|
1401
|
-
/** Name */
|
|
1402
|
-
name?: string | null;
|
|
1403
|
-
/**
|
|
1404
|
-
* Version
|
|
1405
|
-
* @default v1
|
|
1406
|
-
*/
|
|
1407
|
-
version: string;
|
|
1408
|
-
};
|
|
1409
|
-
/**
|
|
1410
|
-
* AgentConfigEllipsisPermissions
|
|
1411
|
-
* @description `permissions.ellipsis` as a map: resource → level | grant | list of
|
|
1412
|
-
* grants. Levels are hierarchical (read < write < delete), so `write`
|
|
1413
|
-
* includes `read`. An unlisted resource is denied. The whole block is
|
|
1414
|
-
* intersected with the platform's sandbox ceiling at token mint — it can
|
|
1415
|
-
* narrow what a sandbox token may do, never exceed it.
|
|
1416
|
-
*/
|
|
1417
|
-
AgentConfigEllipsisPermissions: {
|
|
1418
|
-
[key: string]: components['schemas']['Level'] | components['schemas']['EllipsisGrant'] | (components['schemas']['Level'] | components['schemas']['EllipsisGrant'])[];
|
|
1419
|
-
};
|
|
1420
|
-
/**
|
|
1421
|
-
* AgentConfigEnvironment
|
|
1422
|
-
* @description Everything about the environment (the sandbox) the agent runs in: which
|
|
1423
|
-
* `repositories` are cloned into it, which environment `variables` it gets,
|
|
1424
|
-
* its `compute` sizing, how its `image` is customized, and lifecycle `hooks`.
|
|
1425
|
-
* What the agent may *do* from that environment is the top-level
|
|
1426
|
-
* `permissions:` block, not this one.
|
|
1427
|
-
*
|
|
1428
|
-
* Each `variables` entry names a variable to inject; with an inline `value` it
|
|
1429
|
-
* is hardcoded, without one it is resolved from the account's sandbox-secrets
|
|
1430
|
-
* store. Only the named variables reach this agent; the rest of the account's
|
|
1431
|
-
* stored variables never do. This is how a config brings in the config and
|
|
1432
|
-
* credentials a custom CLI needs.
|
|
1433
|
-
*/
|
|
1434
|
-
AgentConfigEnvironment: {
|
|
1435
|
-
/** @default {} */
|
|
1436
|
-
compute: components['schemas']['AgentConfigCompute'];
|
|
1437
|
-
/** @default {} */
|
|
1438
|
-
hooks: components['schemas']['AgentConfigEnvironmentHooks'];
|
|
1439
|
-
/** @default {} */
|
|
1440
|
-
image: components['schemas']['AgentConfigEnvironmentImage'];
|
|
1441
|
-
/**
|
|
1442
|
-
* Mcp Servers
|
|
1443
|
-
* @default []
|
|
1444
|
-
*/
|
|
1445
|
-
mcp_servers: (string | components['schemas']['AgentConfigMcpServer'] | components['schemas']['AgentConfigMcpStdioServer'] | components['schemas']['AgentConfigMcpRemoteServer'])[];
|
|
1446
|
-
/**
|
|
1447
|
-
* Repositories
|
|
1448
|
-
* @default []
|
|
1449
|
-
*/
|
|
1450
|
-
repositories: components['schemas']['AgentConfigRepository'][];
|
|
1451
|
-
/**
|
|
1452
|
-
* Variables
|
|
1453
|
-
* @default []
|
|
1454
|
-
*/
|
|
1455
|
-
variables: components['schemas']['AgentConfigEnvironmentVariable'][];
|
|
1456
|
-
};
|
|
1457
|
-
/**
|
|
1458
|
-
* AgentConfigEnvironmentHooks
|
|
1459
|
-
* @description Shell scripts run at points in the sandbox lifecycle, each as the sandbox
|
|
1460
|
-
* user with the sandbox's environment variables available. A non-zero exit
|
|
1461
|
-
* fails the run (exit_status = LIFECYCLE_HOOK_FAILED) and is not retried.
|
|
1462
|
-
*
|
|
1463
|
-
* `post_start` runs after the container starts, before any repo is cloned —
|
|
1464
|
-
* repo-independent setup (authenticate a CLI, e.g. `doppler setup`). On Modal
|
|
1465
|
-
* the repo is baked into the image so it is incidentally present, but
|
|
1466
|
-
* `post_start` must not depend on repo contents (that's `post_clone`).
|
|
1467
|
-
*
|
|
1468
|
-
* `post_clone` runs after all repos are cloned/checked out, before the agent —
|
|
1469
|
-
* repo-dependent setup (`pip install -r requirements.txt`, codegen).
|
|
1470
|
-
*
|
|
1471
|
-
* Hooks run on every run and their output is never cached. A dependency
|
|
1472
|
-
* install whose result should be reused across runs belongs in `image.setup`
|
|
1473
|
-
* (baked into the cached image) instead; keep hooks for per-run work — e.g.
|
|
1474
|
-
* anything that touches run-scoped credentials.
|
|
1475
|
-
*/
|
|
1476
|
-
AgentConfigEnvironmentHooks: {
|
|
1477
|
-
/** Post Clone */
|
|
1478
|
-
post_clone?: string | null;
|
|
1479
|
-
/** Post Start */
|
|
1480
|
-
post_start?: string | null;
|
|
1481
|
-
};
|
|
1482
|
-
/**
|
|
1483
|
-
* AgentConfigEnvironmentImage
|
|
1484
|
-
* @description How to customize the container image the agent runs in. You
|
|
1485
|
-
* contribute appended layers (`dockerfile_append`) and a build-time script
|
|
1486
|
-
* (`setup`) only — Ellipsis owns FROM / base tooling / entrypoint / user.
|
|
1487
|
-
* Today only inline bodies are supported; a file reference (resolved at the
|
|
1488
|
-
* run's SHA) will come later.
|
|
1489
|
-
*
|
|
1490
|
-
* The split: `dockerfile_append` runs when the image is assembled, before any
|
|
1491
|
-
* repo exists — toolchain installs (a package manager binary, apt packages).
|
|
1492
|
-
* `setup` runs at image-build time *after* the configured repositories are
|
|
1493
|
-
* checked out, and its output is captured by the filesystem snapshot that
|
|
1494
|
-
* becomes the cached image — dependency installs (`poetry install`,
|
|
1495
|
-
* `npm install`), so later runs start with deps already on disk. Neither runs
|
|
1496
|
-
* per run; that's `hooks.post_start` / `hooks.post_clone`.
|
|
1497
|
-
*/
|
|
1498
|
-
AgentConfigEnvironmentImage: {
|
|
1499
|
-
/** Dockerfile Append */
|
|
1500
|
-
dockerfile_append?: string | null;
|
|
1501
|
-
/** Setup */
|
|
1502
|
-
setup?: string | null;
|
|
1503
|
-
};
|
|
1504
|
-
/**
|
|
1505
|
-
* AgentConfigEnvironmentVariable
|
|
1506
|
-
* @description One environment variable injected into the agent's sandbox.
|
|
1507
|
-
*
|
|
1508
|
-
* `value`, when set, is a literal injected as-is — use it for non-secret
|
|
1509
|
-
* config (LOG_LEVEL, an API base URL). When `value` is omitted the value is
|
|
1510
|
-
* resolved at run time from the account's sandbox-secrets store (dashboard
|
|
1511
|
-
* / `PUT /v1/secrets`) by `name`, so a secret can be injected without
|
|
1512
|
-
* ever putting it in the config file. Either way the variable only reaches
|
|
1513
|
-
* agents that name it.
|
|
1514
|
-
*/
|
|
1515
|
-
AgentConfigEnvironmentVariable: {
|
|
1516
|
-
/** Name */
|
|
1517
|
-
name: string;
|
|
1518
|
-
/** Value */
|
|
1519
|
-
value?: string | null;
|
|
1520
|
-
};
|
|
1521
|
-
/**
|
|
1522
|
-
* AgentConfigGithubPermissions
|
|
1523
|
-
* @description The agent's GitHub access: the scope of the installation token minted for
|
|
1524
|
-
* its sandbox — the credential `git`, `gh`, and the GitHub MCP server
|
|
1525
|
-
* authenticate with.
|
|
1526
|
-
*
|
|
1527
|
-
* By default the token carries the installation's full permissions on all of
|
|
1528
|
-
* the installation's repositories. `permissions` narrows what it may do:
|
|
1529
|
-
* the string `read_only` grants read access to contents, issues, metadata and
|
|
1530
|
-
* pull requests; a map requests explicit levels per GitHub App permission
|
|
1531
|
-
* scope (e.g. `{contents: read, pull_requests: write}`) and may never exceed
|
|
1532
|
-
* what the installation granted. `repositories` scopes the token to exactly
|
|
1533
|
-
* the listed repos, by name (they must belong to the installation).
|
|
1534
|
-
*
|
|
1535
|
-
* Restriction is enforced by GitHub, not by Ellipsis: the token itself is
|
|
1536
|
-
* minted with the reduced scope, so nothing running in the sandbox can
|
|
1537
|
-
* exceed it.
|
|
1538
|
-
*/
|
|
1539
|
-
AgentConfigGithubPermissions: {
|
|
1540
|
-
/** Permissions */
|
|
1541
|
-
permissions?: 'read_only' | {
|
|
1542
|
-
[key: string]: string;
|
|
1543
|
-
} | null;
|
|
1544
|
-
/** Repositories */
|
|
1545
|
-
repositories?: string[] | null;
|
|
1546
|
-
};
|
|
1547
|
-
/**
|
|
1548
|
-
* AgentConfigInput
|
|
1549
|
-
* @description The typed input contract: what goes INTO a session (the trigger is
|
|
1550
|
-
* when it happens; this is what goes in).
|
|
1551
|
-
*
|
|
1552
|
-
* `json_schema` types the payload a caller-started session takes
|
|
1553
|
-
* (`POST /v1/sessions` `input`, validated at the door; required when
|
|
1554
|
-
* declared). It is illegal on a react-triggered agent — react payloads are
|
|
1555
|
-
* platform-shaped (the published surface field sets), not caller-shaped.
|
|
1556
|
-
*
|
|
1557
|
-
* `message` is the initial-message template: exact `{{path}}` substitution
|
|
1558
|
-
* over the caller payload (or, on a react agent, over the surface's
|
|
1559
|
-
* published fields), no conditionals/loops/filters. Refs are validated at
|
|
1560
|
-
* deploy time against the governing field set (see AgentConfig's
|
|
1561
|
-
* `_check_input`).
|
|
1562
|
-
*/
|
|
1563
|
-
AgentConfigInput: {
|
|
1564
|
-
/** Json Schema */
|
|
1565
|
-
json_schema?: {
|
|
1566
|
-
[key: string]: unknown;
|
|
1567
|
-
} | null;
|
|
1568
|
-
/** Message */
|
|
1569
|
-
message?: string | null;
|
|
1570
|
-
};
|
|
1571
|
-
/**
|
|
1572
|
-
* AgentConfigMcpRemoteServer
|
|
1573
|
-
* @description A bring-your-own remote MCP server: the harness talks HTTP to `url`.
|
|
1574
|
-
* Nothing runs in the sandbox image. `headers` carry static auth (e.g.
|
|
1575
|
-
* `Authorization: Bearer ${TOKEN}`); values may embed `${NAME}` secret
|
|
1576
|
-
* references, resolved at run time from the account's secrets store.
|
|
1577
|
-
*/
|
|
1578
|
-
AgentConfigMcpRemoteServer: {
|
|
1579
|
-
/**
|
|
1580
|
-
* Headers
|
|
1581
|
-
* @default {}
|
|
1582
|
-
*/
|
|
1583
|
-
headers: {
|
|
1584
|
-
[key: string]: string;
|
|
1585
|
-
};
|
|
1586
|
-
/** Name */
|
|
1587
|
-
name: string;
|
|
1588
|
-
/** Url */
|
|
1589
|
-
url: string;
|
|
1590
|
-
};
|
|
1591
|
-
/**
|
|
1592
|
-
* AgentConfigMcpServer
|
|
1593
|
-
* @description One built-in MCP server this agent opts into by name (`linear`/`slack`).
|
|
1594
|
-
* A name reference over the connected built-in set — the platform manages the
|
|
1595
|
-
* server's transport and credentials. It only matters when the named
|
|
1596
|
-
* integration is set to `opt_in` inclusion; an integration in the default
|
|
1597
|
-
* `all_sessions` mode is added regardless. For a server the platform does not
|
|
1598
|
-
* provide, define it instead (`AgentConfigMcpStdioServer` /
|
|
1599
|
-
* `AgentConfigMcpRemoteServer`).
|
|
1600
|
-
*/
|
|
1601
|
-
AgentConfigMcpServer: {
|
|
1602
|
-
/** Name */
|
|
1603
|
-
name: string;
|
|
1604
|
-
};
|
|
1605
|
-
/**
|
|
1606
|
-
* AgentConfigMcpStdioServer
|
|
1607
|
-
* @description A bring-your-own stdio MCP server: the harness spawns `command` inside
|
|
1608
|
-
* the sandbox and speaks JSON-RPC over its stdin/stdout. The command must be
|
|
1609
|
-
* runnable in the sandbox image — install its runtime via `image.setup` /
|
|
1610
|
-
* `image.dockerfile_append` if the base image lacks it.
|
|
1611
|
-
*
|
|
1612
|
-
* `env` values may embed `${NAME}` references, resolved at run time from the
|
|
1613
|
-
* account's secrets store (see `mcp_secret_refs`); everything else is passed
|
|
1614
|
-
* literally.
|
|
1615
|
-
*/
|
|
1616
|
-
AgentConfigMcpStdioServer: {
|
|
1617
|
-
/**
|
|
1618
|
-
* Args
|
|
1619
|
-
* @default []
|
|
1620
|
-
*/
|
|
1621
|
-
args: string[];
|
|
1622
|
-
/** Command */
|
|
1623
|
-
command: string;
|
|
1624
|
-
/**
|
|
1625
|
-
* Env
|
|
1626
|
-
* @default {}
|
|
1627
|
-
*/
|
|
1628
|
-
env: {
|
|
1629
|
-
[key: string]: string;
|
|
1630
|
-
};
|
|
1631
|
-
/** Name */
|
|
1632
|
-
name: string;
|
|
1633
|
-
};
|
|
1634
|
-
/**
|
|
1635
|
-
* AgentConfigMemorySize
|
|
1636
|
-
* @description A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).
|
|
1637
|
-
* Set any of `gb`/`mb` (at least one). The alternative to the `8GB`-style
|
|
1638
|
-
* shorthand string.
|
|
1639
|
-
*/
|
|
1640
|
-
AgentConfigMemorySize: {
|
|
1641
|
-
/** Gb */
|
|
1642
|
-
gb?: number | null;
|
|
1643
|
-
/** Mb */
|
|
1644
|
-
mb?: number | null;
|
|
1645
|
-
};
|
|
1646
|
-
/**
|
|
1647
|
-
* AgentConfigMentionPlatform
|
|
1648
|
-
* @description The surface an @ellipsis mention can come from.
|
|
1649
|
-
*
|
|
1650
|
-
* No SLACK member: Slack routing is not a trigger on an agent config, it is the
|
|
1651
|
-
* `slack.yaml` routing file (`SlackConfig`), which answers the questions a
|
|
1652
|
-
* platform list cannot — which channel, and whose DM. A mention trigger listing
|
|
1653
|
-
* `slack` is therefore a config error, not a silently-never-fires config.
|
|
1654
|
-
* @enum {string}
|
|
1655
|
-
*/
|
|
1656
|
-
AgentConfigMentionPlatform: 'github' | 'linear';
|
|
1657
|
-
/** AgentConfigMentionTrigger */
|
|
1658
|
-
AgentConfigMentionTrigger: {
|
|
1659
|
-
/**
|
|
1660
|
-
* Platforms
|
|
1661
|
-
* @default []
|
|
1662
|
-
*/
|
|
1663
|
-
platforms: components['schemas']['AgentConfigMentionPlatform'][];
|
|
1664
|
-
/**
|
|
1665
|
-
* @description discriminator enum property added by openapi-typescript
|
|
1666
|
-
* @enum {string}
|
|
1667
|
-
*/
|
|
1668
|
-
type: 'mention';
|
|
1669
|
-
};
|
|
1670
|
-
/** AgentConfigMetadata */
|
|
1671
|
-
AgentConfigMetadata: {
|
|
1672
|
-
/**
|
|
1673
|
-
* Annotations
|
|
1674
|
-
* @default {}
|
|
1675
|
-
*/
|
|
1676
|
-
annotations: {
|
|
1677
|
-
[key: string]: string;
|
|
1678
|
-
};
|
|
1679
|
-
/**
|
|
1680
|
-
* Labels
|
|
1681
|
-
* @default []
|
|
1682
|
-
*/
|
|
1683
|
-
labels: string[];
|
|
1684
|
-
};
|
|
1685
|
-
/**
|
|
1686
|
-
* AgentConfigOutput
|
|
1687
|
-
* @description The typed output contract: the JSON Schema the agent must exit through
|
|
1688
|
-
* (the StructuredOutput exit tool). Read back via
|
|
1689
|
-
* GET /v1/sessions/{id}/output.
|
|
1690
|
-
*/
|
|
1691
|
-
AgentConfigOutput: {
|
|
1692
|
-
/** Json Schema */
|
|
1693
|
-
json_schema: {
|
|
1694
|
-
[key: string]: unknown;
|
|
1695
|
-
};
|
|
1696
|
-
};
|
|
1697
|
-
/**
|
|
1698
|
-
* AgentConfigPermissions
|
|
1699
|
-
* @description What the agent is allowed to touch, per credential the platform mints
|
|
1700
|
-
* into its sandbox. Distinct from `environment:`, which is where the agent
|
|
1701
|
-
* runs; this is what it may do from there.
|
|
1702
|
-
*
|
|
1703
|
-
* `ellipsis` scopes the sandbox's Ellipsis API token
|
|
1704
|
-
* (`ELLIPSIS_API_TOKEN`, what the in-sandbox `agent` CLI authenticates
|
|
1705
|
-
* with). `true` / the string `all` (the default) grant the full sandbox
|
|
1706
|
-
* ceiling — everything a sandbox token can ever do. A map narrows it per
|
|
1707
|
-
* resource (see `AgentConfigEllipsisPermissions`); the minted token carries
|
|
1708
|
-
* the intersection, so a config can only ever reduce access. `false` fails
|
|
1709
|
-
* validation — an agent with no API token cannot report its own progress.
|
|
1710
|
-
*
|
|
1711
|
-
* `github` scopes the sandbox's GitHub installation token (`GH_TOKEN`) —
|
|
1712
|
-
* see `AgentConfigGithubPermissions`. GitHub enforces it at mint time.
|
|
1713
|
-
*/
|
|
1714
|
-
AgentConfigPermissions: {
|
|
1715
|
-
/**
|
|
1716
|
-
* Ellipsis
|
|
1717
|
-
* @default true
|
|
1718
|
-
*/
|
|
1719
|
-
ellipsis: (true | 'all') | components['schemas']['AgentConfigEllipsisPermissions'];
|
|
1720
|
-
/** @default {} */
|
|
1721
|
-
github: components['schemas']['AgentConfigGithubPermissions'];
|
|
1722
|
-
};
|
|
1723
|
-
/** AgentConfigReactTrigger */
|
|
1724
|
-
AgentConfigReactTrigger: {
|
|
1725
|
-
issue?: components['schemas']['ReactIssue'] | null;
|
|
1726
|
-
linear_issue?: components['schemas']['ReactLinearIssue'] | null;
|
|
1727
|
-
pull_request?: components['schemas']['ReactPullRequest'] | null;
|
|
1728
|
-
push?: components['schemas']['ReactPush'] | null;
|
|
1729
|
-
sentry?: components['schemas']['ReactSentry'] | null;
|
|
1730
|
-
slack_channel?: components['schemas']['ReactSlackChannel'] | null;
|
|
1731
|
-
/**
|
|
1732
|
-
* @description discriminator enum property added by openapi-typescript
|
|
1733
|
-
* @enum {string}
|
|
1734
|
-
*/
|
|
1735
|
-
type: 'react';
|
|
1736
|
-
};
|
|
1737
|
-
/** AgentConfigRepository */
|
|
1738
|
-
AgentConfigRepository: {
|
|
1739
|
-
/** Name */
|
|
1740
|
-
name: string;
|
|
1741
|
-
/** Owner */
|
|
1742
|
-
owner?: string | null;
|
|
1743
|
-
/** Ref */
|
|
1744
|
-
ref?: string | null;
|
|
1745
|
-
};
|
|
1746
|
-
/**
|
|
1747
|
-
* AgentConfigSettingsRef
|
|
1748
|
-
* @description A config-declared Claude Code settings.json, resolved at run start and
|
|
1749
|
-
* passed to `claude --settings <path>`. That is the CLI settings tier — BELOW
|
|
1750
|
-
* Ellipsis's managed-settings.json floor — so it customizes behavior (model
|
|
1751
|
-
* permissions, includeCoAuthoredBy, statusLine, ...) but can never weaken a
|
|
1752
|
-
* security setting. Lets a team point the cloud agent at the same settings file
|
|
1753
|
-
* they already use with Claude Code locally instead of re-encoding it as YAML.
|
|
1754
|
-
*/
|
|
1755
|
-
AgentConfigSettingsRef: {
|
|
1756
|
-
/** Path */
|
|
1757
|
-
path: string;
|
|
1758
|
-
repository?: components['schemas']['AgentConfigRepository'] | null;
|
|
1759
|
-
};
|
|
1760
|
-
/**
|
|
1761
|
-
* AgentConfigSkill
|
|
1762
|
-
* @description One config-declared Claude Code skill: a repository directory containing
|
|
1763
|
-
* a SKILL.md, resolved at run start and installed at the sandbox's personal
|
|
1764
|
-
* skill level (`~/.claude/skills/<basename(path)>/`). This is how a config
|
|
1765
|
-
* brings in skills its cloned repositories don't provide — cross-repo refs
|
|
1766
|
-
* (an org-wide skills repo), public third-party repos, and repo-less runs.
|
|
1767
|
-
* Skills under a cloned repo's own `.claude/skills/` load by themselves and
|
|
1768
|
-
* don't need an entry here.
|
|
1769
|
-
*/
|
|
1770
|
-
AgentConfigSkill: {
|
|
1771
|
-
/** Path */
|
|
1772
|
-
path: string;
|
|
1773
|
-
repository?: components['schemas']['AgentConfigRepository'] | null;
|
|
1199
|
+
patch?: never;
|
|
1200
|
+
trace?: never;
|
|
1201
|
+
};
|
|
1202
|
+
'/v1/templates': {
|
|
1203
|
+
parameters: {
|
|
1204
|
+
query?: never;
|
|
1205
|
+
header?: never;
|
|
1206
|
+
path?: never;
|
|
1207
|
+
cookie?: never;
|
|
1774
1208
|
};
|
|
1775
1209
|
/**
|
|
1776
|
-
*
|
|
1777
|
-
* @description
|
|
1778
|
-
* source, including the ones that never touch defaults resolution.
|
|
1210
|
+
* List Agent Templates
|
|
1211
|
+
* @description List the built-in starter agent templates.
|
|
1779
1212
|
*
|
|
1780
|
-
*
|
|
1781
|
-
*
|
|
1782
|
-
* configs alike — so it is persisted for audit and the published wire.
|
|
1783
|
-
* @enum {string}
|
|
1213
|
+
* Behind auth but not account-scoped — the data is static
|
|
1214
|
+
* product content shared by the dashboard, landing site, and CLI.
|
|
1784
1215
|
*/
|
|
1785
|
-
|
|
1216
|
+
get: operations['list_agent_templates'];
|
|
1217
|
+
put?: never;
|
|
1218
|
+
post?: never;
|
|
1219
|
+
delete?: never;
|
|
1220
|
+
options?: never;
|
|
1221
|
+
head?: never;
|
|
1222
|
+
patch?: never;
|
|
1223
|
+
trace?: never;
|
|
1224
|
+
};
|
|
1225
|
+
'/v1/templates/{template_id}': {
|
|
1226
|
+
parameters: {
|
|
1227
|
+
query?: never;
|
|
1228
|
+
header?: never;
|
|
1229
|
+
path?: never;
|
|
1230
|
+
cookie?: never;
|
|
1231
|
+
};
|
|
1786
1232
|
/**
|
|
1787
|
-
*
|
|
1788
|
-
* @description
|
|
1789
|
-
*
|
|
1790
|
-
* Keyed on the repository ID (not owner/name) so repository and org renames
|
|
1791
|
-
* don't orphan the config; resolve display names from gh_repositories at
|
|
1792
|
-
* read time.
|
|
1233
|
+
* Get Agent Template
|
|
1234
|
+
* @description Return one built-in agent template by slug.
|
|
1793
1235
|
*/
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1236
|
+
get: operations['get_agent_template'];
|
|
1237
|
+
put?: never;
|
|
1238
|
+
post?: never;
|
|
1239
|
+
delete?: never;
|
|
1240
|
+
options?: never;
|
|
1241
|
+
head?: never;
|
|
1242
|
+
patch?: never;
|
|
1243
|
+
trace?: never;
|
|
1244
|
+
};
|
|
1245
|
+
'/v1/usage': {
|
|
1246
|
+
parameters: {
|
|
1247
|
+
query?: never;
|
|
1248
|
+
header?: never;
|
|
1249
|
+
path?: never;
|
|
1250
|
+
cookie?: never;
|
|
1807
1251
|
};
|
|
1252
|
+
/**
|
|
1253
|
+
* Get Usage
|
|
1254
|
+
* @description Return the caller's usage dashboard data.
|
|
1255
|
+
*/
|
|
1256
|
+
get: operations['get_usage_endpoint'];
|
|
1257
|
+
put?: never;
|
|
1258
|
+
post?: never;
|
|
1259
|
+
delete?: never;
|
|
1260
|
+
options?: never;
|
|
1261
|
+
head?: never;
|
|
1262
|
+
patch?: never;
|
|
1263
|
+
trace?: never;
|
|
1264
|
+
};
|
|
1265
|
+
}
|
|
1266
|
+
interface components {
|
|
1267
|
+
schemas: {
|
|
1808
1268
|
/**
|
|
1809
1269
|
* AgentTemplate
|
|
1810
1270
|
* @description A built-in agent template: a ready-to-use agent config plus the
|
|
@@ -2204,10 +1664,8 @@ interface components {
|
|
|
2204
1664
|
* when invoked, plus where it syncs from and the state of that sync.
|
|
2205
1665
|
*/
|
|
2206
1666
|
Automation: {
|
|
2207
|
-
/** @description The
|
|
2208
|
-
|
|
2209
|
-
/** @description The repository, path, and branch the automation syncs from. Null only transiently, before the creating pull request's file lands on the branch. */
|
|
2210
|
-
agent_config_source_details?: components['schemas']['AgentConfigSourceGithub'] | null;
|
|
1667
|
+
/** @description The automation definition itself, in the same schema as its YAML file: identity, trigger, input contract, and the session block. */
|
|
1668
|
+
config: components['schemas']['AutomationConfig'];
|
|
2211
1669
|
/**
|
|
2212
1670
|
* Created At
|
|
2213
1671
|
* Format: date-time
|
|
@@ -2263,6 +1721,8 @@ interface components {
|
|
|
2263
1721
|
* @description The definition's content identity: the version fingerprint frozen onto each session that runs it.
|
|
2264
1722
|
*/
|
|
2265
1723
|
sha: string;
|
|
1724
|
+
/** @description The repository, path, and branch the automation syncs from. Null only transiently, before the creating pull request's file lands on the branch. */
|
|
1725
|
+
source_details?: components['schemas']['GithubSourceDetails'] | null;
|
|
2266
1726
|
/**
|
|
2267
1727
|
* Updated At
|
|
2268
1728
|
* Format: date-time
|
|
@@ -2270,6 +1730,104 @@ interface components {
|
|
|
2270
1730
|
*/
|
|
2271
1731
|
updated_at: string;
|
|
2272
1732
|
};
|
|
1733
|
+
/**
|
|
1734
|
+
* AutomationConfig
|
|
1735
|
+
* @description A saved automation, as written in its YAML file: identity
|
|
1736
|
+
* (`ellipsis`), when it runs (`trigger`), what goes in (`input`), and the
|
|
1737
|
+
* `session:` block every session it starts is frozen from. Field order is
|
|
1738
|
+
* the canonical key order for files and `to_yaml` exports.
|
|
1739
|
+
*/
|
|
1740
|
+
AutomationConfig: {
|
|
1741
|
+
/**
|
|
1742
|
+
* @default {
|
|
1743
|
+
* "enabled": true,
|
|
1744
|
+
* "metadata": {
|
|
1745
|
+
* "annotations": {},
|
|
1746
|
+
* "labels": []
|
|
1747
|
+
* },
|
|
1748
|
+
* "version": "v1"
|
|
1749
|
+
* }
|
|
1750
|
+
*/
|
|
1751
|
+
ellipsis: components['schemas']['AutomationIdentity'];
|
|
1752
|
+
input?: components['schemas']['InputContract'] | null;
|
|
1753
|
+
/**
|
|
1754
|
+
* @default {
|
|
1755
|
+
* "budget": {},
|
|
1756
|
+
* "claude": {
|
|
1757
|
+
* "system": ""
|
|
1758
|
+
* },
|
|
1759
|
+
* "environment": {
|
|
1760
|
+
* "compute": {},
|
|
1761
|
+
* "hooks": {},
|
|
1762
|
+
* "image": {},
|
|
1763
|
+
* "mcp_servers": [],
|
|
1764
|
+
* "repositories": [],
|
|
1765
|
+
* "variables": []
|
|
1766
|
+
* },
|
|
1767
|
+
* "permissions": {
|
|
1768
|
+
* "ellipsis": true,
|
|
1769
|
+
* "github": {}
|
|
1770
|
+
* },
|
|
1771
|
+
* "skills": []
|
|
1772
|
+
* }
|
|
1773
|
+
*/
|
|
1774
|
+
session: components['schemas']['SessionConfig'];
|
|
1775
|
+
/** Trigger */
|
|
1776
|
+
trigger?: (components['schemas']['CronTrigger'] | components['schemas']['ReactTrigger']) | null;
|
|
1777
|
+
};
|
|
1778
|
+
/**
|
|
1779
|
+
* AutomationIdentity
|
|
1780
|
+
* @description The Ellipsis product namespace for a config file: which schema this is
|
|
1781
|
+
* (`version`), the human-facing identity (`name`/`description`), freeform
|
|
1782
|
+
* organizational `metadata`, and whether the agent is `enabled`. The
|
|
1783
|
+
* presence of a top-level `ellipsis:` mapping is what marks a YAML file as
|
|
1784
|
+
* an Ellipsis agent config (vs arbitrary YAML that merely lives under a
|
|
1785
|
+
* config directory) — see `yaml_is_ellipsis_config`.
|
|
1786
|
+
*
|
|
1787
|
+
* `enabled` is agent behavior, not freeform metadata, so it stays inside
|
|
1788
|
+
* the config `sha` (only `metadata` is sha-excluded). Whether a session
|
|
1789
|
+
* accepts messages is a per-run choice (POST /v1/sessions `interactive`),
|
|
1790
|
+
* not a config one.
|
|
1791
|
+
*/
|
|
1792
|
+
AutomationIdentity: {
|
|
1793
|
+
/** Description */
|
|
1794
|
+
description?: string | null;
|
|
1795
|
+
/**
|
|
1796
|
+
* Enabled
|
|
1797
|
+
* @default true
|
|
1798
|
+
*/
|
|
1799
|
+
enabled: boolean;
|
|
1800
|
+
/**
|
|
1801
|
+
* @default {
|
|
1802
|
+
* "annotations": {},
|
|
1803
|
+
* "labels": []
|
|
1804
|
+
* }
|
|
1805
|
+
*/
|
|
1806
|
+
metadata: components['schemas']['ConfigMetadata'];
|
|
1807
|
+
/** Name */
|
|
1808
|
+
name?: string | null;
|
|
1809
|
+
/**
|
|
1810
|
+
* Version
|
|
1811
|
+
* @default v1
|
|
1812
|
+
*/
|
|
1813
|
+
version: string;
|
|
1814
|
+
};
|
|
1815
|
+
/**
|
|
1816
|
+
* AutomationMetricsResponse
|
|
1817
|
+
* @description An automation's session distribution and trailing spend.
|
|
1818
|
+
*/
|
|
1819
|
+
AutomationMetricsResponse: {
|
|
1820
|
+
/**
|
|
1821
|
+
* Samples
|
|
1822
|
+
* @description One entry per finished session, unordered.
|
|
1823
|
+
*/
|
|
1824
|
+
samples: components['schemas']['AutomationSessionSample'][];
|
|
1825
|
+
/**
|
|
1826
|
+
* Spend Windows
|
|
1827
|
+
* @description Trailing spend versus the budget, one entry per window (1, 7, and 28 days).
|
|
1828
|
+
*/
|
|
1829
|
+
spend_windows: components['schemas']['AutomationSpendWindow'][];
|
|
1830
|
+
};
|
|
2273
1831
|
/**
|
|
2274
1832
|
* AutomationResponse
|
|
2275
1833
|
* @description One automation.
|
|
@@ -2278,6 +1836,54 @@ interface components {
|
|
|
2278
1836
|
/** @description The automation. */
|
|
2279
1837
|
automation: components['schemas']['Automation'];
|
|
2280
1838
|
};
|
|
1839
|
+
/**
|
|
1840
|
+
* AutomationSessionSample
|
|
1841
|
+
* @description One finished session of the automation, reduced to the three figures
|
|
1842
|
+
* the distributions are drawn from.
|
|
1843
|
+
*/
|
|
1844
|
+
AutomationSessionSample: {
|
|
1845
|
+
/**
|
|
1846
|
+
* Cost
|
|
1847
|
+
* @description What the session cost, in millicents.
|
|
1848
|
+
*/
|
|
1849
|
+
cost: number;
|
|
1850
|
+
/**
|
|
1851
|
+
* Duration Seconds
|
|
1852
|
+
* @description Wall-clock seconds from the session's creation to its last update.
|
|
1853
|
+
*/
|
|
1854
|
+
duration_seconds: number;
|
|
1855
|
+
/**
|
|
1856
|
+
* Tokens Total
|
|
1857
|
+
* @description Tokens the session consumed across every lane, including prompt-cache reads and writes.
|
|
1858
|
+
*/
|
|
1859
|
+
tokens_total: number;
|
|
1860
|
+
};
|
|
1861
|
+
/**
|
|
1862
|
+
* AutomationSpendWindow
|
|
1863
|
+
* @description The automation's trailing spend against its budget over one window.
|
|
1864
|
+
*/
|
|
1865
|
+
AutomationSpendWindow: {
|
|
1866
|
+
/**
|
|
1867
|
+
* Limit Usd
|
|
1868
|
+
* @description The enforced cap for the window, in US dollars: the automation's own budget clamped to the platform maximum, or the maximum itself when the budget is unset.
|
|
1869
|
+
*/
|
|
1870
|
+
limit_usd: number;
|
|
1871
|
+
/**
|
|
1872
|
+
* Platform Max Usd
|
|
1873
|
+
* @description The platform ceiling for the window, in US dollars; a budget above it is clamped to it.
|
|
1874
|
+
*/
|
|
1875
|
+
platform_max_usd: number;
|
|
1876
|
+
/**
|
|
1877
|
+
* Spent Usd
|
|
1878
|
+
* @description What the automation's sessions cost over the window, in US dollars.
|
|
1879
|
+
*/
|
|
1880
|
+
spent_usd: number;
|
|
1881
|
+
/**
|
|
1882
|
+
* Window Days
|
|
1883
|
+
* @description The trailing window, in days: 1, 7, or 28.
|
|
1884
|
+
*/
|
|
1885
|
+
window_days: number;
|
|
1886
|
+
};
|
|
2281
1887
|
/**
|
|
2282
1888
|
* AutomationsListResponse
|
|
2283
1889
|
* @description The caller's automations.
|
|
@@ -2300,6 +1906,17 @@ interface components {
|
|
|
2300
1906
|
*/
|
|
2301
1907
|
session?: number | null;
|
|
2302
1908
|
};
|
|
1909
|
+
/** BudgetConfig */
|
|
1910
|
+
BudgetConfig: {
|
|
1911
|
+
/** Day */
|
|
1912
|
+
day?: number | null;
|
|
1913
|
+
/** Month */
|
|
1914
|
+
month?: number | null;
|
|
1915
|
+
/** Session */
|
|
1916
|
+
session?: number | null;
|
|
1917
|
+
/** Week */
|
|
1918
|
+
week?: number | null;
|
|
1919
|
+
};
|
|
2303
1920
|
/**
|
|
2304
1921
|
* BudgetSource
|
|
2305
1922
|
* @description Which layer actually determined the enforced budget.
|
|
@@ -2364,6 +1981,22 @@ interface components {
|
|
|
2364
1981
|
*/
|
|
2365
1982
|
start: string | null;
|
|
2366
1983
|
};
|
|
1984
|
+
/** ClaudeConfig */
|
|
1985
|
+
ClaudeConfig: {
|
|
1986
|
+
effort?: components['schemas']['EffortLevel'] | null;
|
|
1987
|
+
/** Fallback Model */
|
|
1988
|
+
fallback_model?: string | null;
|
|
1989
|
+
/** Max Turns */
|
|
1990
|
+
max_turns?: number | null;
|
|
1991
|
+
/** Model */
|
|
1992
|
+
model?: string | null;
|
|
1993
|
+
settings?: components['schemas']['SettingsRef'] | null;
|
|
1994
|
+
/**
|
|
1995
|
+
* System
|
|
1996
|
+
* @default
|
|
1997
|
+
*/
|
|
1998
|
+
system: string | components['schemas']['SystemFileRef'] | (string | components['schemas']['SystemFileRef'])[];
|
|
1999
|
+
};
|
|
2367
2000
|
/**
|
|
2368
2001
|
* ClaudeSessionRecord
|
|
2369
2002
|
* @description A native transcript record of a Claude session (source=claude_code).
|
|
@@ -2506,6 +2139,32 @@ interface components {
|
|
|
2506
2139
|
} & {
|
|
2507
2140
|
[key: string]: unknown;
|
|
2508
2141
|
};
|
|
2142
|
+
/**
|
|
2143
|
+
* CodexConfig
|
|
2144
|
+
* @description The `codex:` block — run this agent on OpenAI's Codex CLI instead of
|
|
2145
|
+
* Claude Code. Declaring the block at all is what selects the harness
|
|
2146
|
+
* (`AutomationConfig.harness`).
|
|
2147
|
+
*
|
|
2148
|
+
* Deliberately a small subset of `ClaudeConfig`: the fields omitted here
|
|
2149
|
+
* are ones Codex has no equivalent for (`effort`, `fallback_model`,
|
|
2150
|
+
* `settings`) or that the platform does not yet wire through for this harness
|
|
2151
|
+
* (`max_turns`, `skills`, MCP servers). They are omitted rather than
|
|
2152
|
+
* accepted-and-ignored, because `StrictConfigModel` forbids extra keys — so a
|
|
2153
|
+
* config that sets one fails loudly at parse time instead of silently not doing
|
|
2154
|
+
* it. The budget still bounds a run regardless.
|
|
2155
|
+
*/
|
|
2156
|
+
CodexConfig: {
|
|
2157
|
+
/**
|
|
2158
|
+
* Model
|
|
2159
|
+
* @default gpt-5.6-terra
|
|
2160
|
+
*/
|
|
2161
|
+
model: string;
|
|
2162
|
+
/**
|
|
2163
|
+
* System
|
|
2164
|
+
* @default
|
|
2165
|
+
*/
|
|
2166
|
+
system: string | components['schemas']['SystemFileRef'] | (string | components['schemas']['SystemFileRef'])[];
|
|
2167
|
+
};
|
|
2509
2168
|
/** CodexErrorEvent */
|
|
2510
2169
|
CodexErrorEvent: {
|
|
2511
2170
|
/** Message */
|
|
@@ -2848,18 +2507,64 @@ interface components {
|
|
|
2848
2507
|
* @default web_search
|
|
2849
2508
|
* @constant
|
|
2850
2509
|
*/
|
|
2851
|
-
type: 'web_search';
|
|
2852
|
-
} & {
|
|
2853
|
-
[key: string]: unknown;
|
|
2510
|
+
type: 'web_search';
|
|
2511
|
+
} & {
|
|
2512
|
+
[key: string]: unknown;
|
|
2513
|
+
};
|
|
2514
|
+
/**
|
|
2515
|
+
* ComputeConfig
|
|
2516
|
+
* @description Sandbox compute sizing. Every field is optional; None inherits the
|
|
2517
|
+
* platform default (1 vCPU / 4096 MiB / 3600s — see DEFAULT_MODAL_* in
|
|
2518
|
+
* models/ellipsis/sandboxes/sandbox.py). A resolved value outside the platform
|
|
2519
|
+
* bounds fails validation loudly (a sync error on the config) rather than
|
|
2520
|
+
* being clamped silently.
|
|
2521
|
+
*
|
|
2522
|
+
* `memory` and `timeout` each accept a shorthand string ("8GB", "30m") or an
|
|
2523
|
+
* explicit units object ({gb: 8}, {minutes: 30}); the `memory_mib` /
|
|
2524
|
+
* `timeout_seconds` properties resolve either form to the canonical integer
|
|
2525
|
+
* the sandbox driver consumes.
|
|
2526
|
+
*
|
|
2527
|
+
* `timeout` is the max wall-clock the agent may run before the sandbox is
|
|
2528
|
+
* killed, capped at 1h (MAX_SANDBOX_TIMEOUT_SECONDS — equal to the default, so
|
|
2529
|
+
* today the knob only shortens a session; the cap matches the 1-hour validity
|
|
2530
|
+
* of the sandbox's GitHub token). The worker's lease/visibility heartbeat
|
|
2531
|
+
* ceiling is derived from that cap, so a run at the max stays owned by its
|
|
2532
|
+
* worker for its whole life.
|
|
2533
|
+
*
|
|
2534
|
+
* Compute is billed on the requested allocation over the sandbox's
|
|
2535
|
+
* wall-clock lifetime, so a bigger/longer box costs proportionally more.
|
|
2536
|
+
*/
|
|
2537
|
+
ComputeConfig: {
|
|
2538
|
+
/** Cpu */
|
|
2539
|
+
cpu?: number | null;
|
|
2540
|
+
/** Memory */
|
|
2541
|
+
memory?: string | components['schemas']['MemorySize'] | null;
|
|
2542
|
+
/** Timeout */
|
|
2543
|
+
timeout?: string | components['schemas']['Duration'] | null;
|
|
2544
|
+
};
|
|
2545
|
+
/**
|
|
2546
|
+
* ConfigManagedBy
|
|
2547
|
+
* @description Which writer owns an agent: the repository file it is defined in, or
|
|
2548
|
+
* this API. Every agent has exactly one owner, fixed when it is created and
|
|
2549
|
+
* changed only by linking or unlinking it.
|
|
2550
|
+
* @enum {string}
|
|
2551
|
+
*/
|
|
2552
|
+
ConfigManagedBy: 'github' | 'api';
|
|
2553
|
+
/** ConfigMetadata */
|
|
2554
|
+
ConfigMetadata: {
|
|
2555
|
+
/**
|
|
2556
|
+
* Annotations
|
|
2557
|
+
* @default {}
|
|
2558
|
+
*/
|
|
2559
|
+
annotations: {
|
|
2560
|
+
[key: string]: string;
|
|
2561
|
+
};
|
|
2562
|
+
/**
|
|
2563
|
+
* Labels
|
|
2564
|
+
* @default []
|
|
2565
|
+
*/
|
|
2566
|
+
labels: string[];
|
|
2854
2567
|
};
|
|
2855
|
-
/**
|
|
2856
|
-
* ConfigManagedBy
|
|
2857
|
-
* @description Which writer owns an agent: the repository file it is defined in, or
|
|
2858
|
-
* this API. Every agent has exactly one owner, fixed when it is created and
|
|
2859
|
-
* changed only by linking or unlinking it.
|
|
2860
|
-
* @enum {string}
|
|
2861
|
-
*/
|
|
2862
|
-
ConfigManagedBy: 'github' | 'api';
|
|
2863
2568
|
/**
|
|
2864
2569
|
* ContributorUsage
|
|
2865
2570
|
* @description An author who merged a pull request in the window. The pull-request and
|
|
@@ -2909,7 +2614,7 @@ interface components {
|
|
|
2909
2614
|
*/
|
|
2910
2615
|
CreateAutomationRequest: {
|
|
2911
2616
|
/** @description The automation's definition, in the same schema as a YAML file under agents/. */
|
|
2912
|
-
automation: components['schemas']['
|
|
2617
|
+
automation: components['schemas']['AutomationConfig'];
|
|
2913
2618
|
};
|
|
2914
2619
|
/**
|
|
2915
2620
|
* CreateEnvironmentRequest
|
|
@@ -2917,7 +2622,7 @@ interface components {
|
|
|
2917
2622
|
*/
|
|
2918
2623
|
CreateEnvironmentRequest: {
|
|
2919
2624
|
/** @description The environment's definition. */
|
|
2920
|
-
environment: components['schemas']['
|
|
2625
|
+
environment: components['schemas']['EnvironmentDocument'];
|
|
2921
2626
|
};
|
|
2922
2627
|
/**
|
|
2923
2628
|
* CreateFileRequest
|
|
@@ -3013,6 +2718,30 @@ interface components {
|
|
|
3013
2718
|
*/
|
|
3014
2719
|
scope: components['schemas']['ReviewScope'];
|
|
3015
2720
|
};
|
|
2721
|
+
/** CronTrigger */
|
|
2722
|
+
CronTrigger: {
|
|
2723
|
+
/** Schedule */
|
|
2724
|
+
schedule: string;
|
|
2725
|
+
/**
|
|
2726
|
+
* @description discriminator enum property added by openapi-typescript
|
|
2727
|
+
* @enum {string}
|
|
2728
|
+
*/
|
|
2729
|
+
type: 'cron';
|
|
2730
|
+
};
|
|
2731
|
+
/**
|
|
2732
|
+
* Duration
|
|
2733
|
+
* @description A duration as explicit units, summed. Set any of `hours`/`minutes`/
|
|
2734
|
+
* `seconds` (at least one). The alternative to the `30m`-style shorthand
|
|
2735
|
+
* string wherever a duration is accepted.
|
|
2736
|
+
*/
|
|
2737
|
+
Duration: {
|
|
2738
|
+
/** Hours */
|
|
2739
|
+
hours?: number | null;
|
|
2740
|
+
/** Minutes */
|
|
2741
|
+
minutes?: number | null;
|
|
2742
|
+
/** Seconds */
|
|
2743
|
+
seconds?: number | null;
|
|
2744
|
+
};
|
|
3016
2745
|
/**
|
|
3017
2746
|
* DurationPercentiles
|
|
3018
2747
|
* @description Percentiles of a duration distribution, in hours. p0 = fastest,
|
|
@@ -3083,6 +2812,17 @@ interface components {
|
|
|
3083
2812
|
/** Match */
|
|
3084
2813
|
match?: string[] | null;
|
|
3085
2814
|
};
|
|
2815
|
+
/**
|
|
2816
|
+
* EllipsisPermissions
|
|
2817
|
+
* @description `permissions.ellipsis` as a map: resource → level | grant | list of
|
|
2818
|
+
* grants. Levels are hierarchical (read < write < delete), so `write`
|
|
2819
|
+
* includes `read`. An unlisted resource is denied. The whole block is
|
|
2820
|
+
* intersected with the platform's sandbox ceiling at token mint — it can
|
|
2821
|
+
* narrow what a sandbox token may do, never exceed it.
|
|
2822
|
+
*/
|
|
2823
|
+
EllipsisPermissions: {
|
|
2824
|
+
[key: string]: components['schemas']['Level'] | components['schemas']['EllipsisGrant'] | (components['schemas']['Level'] | components['schemas']['EllipsisGrant'])[];
|
|
2825
|
+
};
|
|
3086
2826
|
/**
|
|
3087
2827
|
* Environment
|
|
3088
2828
|
* @description A saved environment: the machine agents run in (repositories,
|
|
@@ -3099,7 +2839,7 @@ interface components {
|
|
|
3099
2839
|
/** @description The GitHub account that last edited the environment, when known. */
|
|
3100
2840
|
edited_by?: components['schemas']['GithubAccountSnippet'] | null;
|
|
3101
2841
|
/** @description The environment definition itself, as parsed from its YAML. */
|
|
3102
|
-
environment: components['schemas']['
|
|
2842
|
+
environment: components['schemas']['EnvironmentDocument'];
|
|
3103
2843
|
/**
|
|
3104
2844
|
* Id
|
|
3105
2845
|
* @description Unique identifier of the environment.
|
|
@@ -3128,7 +2868,7 @@ interface components {
|
|
|
3128
2868
|
*/
|
|
3129
2869
|
sha: string;
|
|
3130
2870
|
/** @description The repository, path, and branch the environment syncs from. Null for environments managed through the API. */
|
|
3131
|
-
source_details?: components['schemas']['
|
|
2871
|
+
source_details?: components['schemas']['GithubSourceDetails'] | null;
|
|
3132
2872
|
/**
|
|
3133
2873
|
* Updated At
|
|
3134
2874
|
* Format: date-time
|
|
@@ -3138,6 +2878,43 @@ interface components {
|
|
|
3138
2878
|
};
|
|
3139
2879
|
/**
|
|
3140
2880
|
* EnvironmentConfig
|
|
2881
|
+
* @description Everything about the environment (the sandbox) the agent runs in: which
|
|
2882
|
+
* `repositories` are cloned into it, which environment `variables` it gets,
|
|
2883
|
+
* its `compute` sizing, how its `image` is customized, and lifecycle `hooks`.
|
|
2884
|
+
* What the agent may *do* from that environment is the top-level
|
|
2885
|
+
* `permissions:` block, not this one.
|
|
2886
|
+
*
|
|
2887
|
+
* Each `variables` entry names a variable to inject; with an inline `value` it
|
|
2888
|
+
* is hardcoded, without one it is resolved from the account's sandbox-secrets
|
|
2889
|
+
* store. Only the named variables reach this agent; the rest of the account's
|
|
2890
|
+
* stored variables never do. This is how a config brings in the config and
|
|
2891
|
+
* credentials a custom CLI needs.
|
|
2892
|
+
*/
|
|
2893
|
+
EnvironmentConfig: {
|
|
2894
|
+
/** @default {} */
|
|
2895
|
+
compute: components['schemas']['ComputeConfig'];
|
|
2896
|
+
/** @default {} */
|
|
2897
|
+
hooks: components['schemas']['EnvironmentHooks'];
|
|
2898
|
+
/** @default {} */
|
|
2899
|
+
image: components['schemas']['EnvironmentImage'];
|
|
2900
|
+
/**
|
|
2901
|
+
* Mcp Servers
|
|
2902
|
+
* @default []
|
|
2903
|
+
*/
|
|
2904
|
+
mcp_servers: (string | components['schemas']['McpServerRef'] | components['schemas']['McpStdioServer'] | components['schemas']['McpRemoteServer'])[];
|
|
2905
|
+
/**
|
|
2906
|
+
* Repositories
|
|
2907
|
+
* @default []
|
|
2908
|
+
*/
|
|
2909
|
+
repositories: components['schemas']['RepositoryRef'][];
|
|
2910
|
+
/**
|
|
2911
|
+
* Variables
|
|
2912
|
+
* @default []
|
|
2913
|
+
*/
|
|
2914
|
+
variables: components['schemas']['EnvironmentVariable'][];
|
|
2915
|
+
};
|
|
2916
|
+
/**
|
|
2917
|
+
* EnvironmentDocument
|
|
3141
2918
|
* @description A parsed environment document: identity plus the environment body.
|
|
3142
2919
|
*
|
|
3143
2920
|
* The body fields are flattened to the top level of the file (not nested
|
|
@@ -3145,38 +2922,63 @@ interface components {
|
|
|
3145
2922
|
* would be ceremony. `to_environment()` projects the body for substitution
|
|
3146
2923
|
* into an agent config.
|
|
3147
2924
|
*/
|
|
3148
|
-
|
|
2925
|
+
EnvironmentDocument: {
|
|
3149
2926
|
/** @default {} */
|
|
3150
|
-
compute: components['schemas']['
|
|
3151
|
-
ellipsis: components['schemas']['
|
|
2927
|
+
compute: components['schemas']['ComputeConfig'];
|
|
2928
|
+
ellipsis: components['schemas']['EnvironmentIdentity'];
|
|
3152
2929
|
/** @default {} */
|
|
3153
|
-
hooks: components['schemas']['
|
|
2930
|
+
hooks: components['schemas']['EnvironmentHooks'];
|
|
3154
2931
|
/** @default {} */
|
|
3155
|
-
image: components['schemas']['
|
|
2932
|
+
image: components['schemas']['EnvironmentImage'];
|
|
3156
2933
|
/**
|
|
3157
2934
|
* Mcp Servers
|
|
3158
2935
|
* @default []
|
|
3159
2936
|
*/
|
|
3160
|
-
mcp_servers: (string | components['schemas']['
|
|
2937
|
+
mcp_servers: (string | components['schemas']['McpServerRef'] | components['schemas']['McpStdioServer'] | components['schemas']['McpRemoteServer'])[];
|
|
3161
2938
|
/**
|
|
3162
2939
|
* Repositories
|
|
3163
2940
|
* @default []
|
|
3164
2941
|
*/
|
|
3165
|
-
repositories: components['schemas']['
|
|
2942
|
+
repositories: components['schemas']['RepositoryRef'][];
|
|
3166
2943
|
/**
|
|
3167
2944
|
* Variables
|
|
3168
2945
|
* @default []
|
|
3169
2946
|
*/
|
|
3170
|
-
variables: components['schemas']['
|
|
2947
|
+
variables: components['schemas']['EnvironmentVariable'][];
|
|
2948
|
+
};
|
|
2949
|
+
/**
|
|
2950
|
+
* EnvironmentHooks
|
|
2951
|
+
* @description Shell scripts run at points in the sandbox lifecycle, each as the sandbox
|
|
2952
|
+
* user with the sandbox's environment variables available. A non-zero exit
|
|
2953
|
+
* fails the run (exit_status = LIFECYCLE_HOOK_FAILED) and is not retried.
|
|
2954
|
+
*
|
|
2955
|
+
* `post_start` runs after the container starts, before any repo is cloned —
|
|
2956
|
+
* repo-independent setup (authenticate a CLI, e.g. `doppler setup`). On Modal
|
|
2957
|
+
* the repo is baked into the image so it is incidentally present, but
|
|
2958
|
+
* `post_start` must not depend on repo contents (that's `post_clone`).
|
|
2959
|
+
*
|
|
2960
|
+
* `post_clone` runs after all repos are cloned/checked out, before the agent —
|
|
2961
|
+
* repo-dependent setup (`pip install -r requirements.txt`, codegen).
|
|
2962
|
+
*
|
|
2963
|
+
* Hooks run on every run and their output is never cached. A dependency
|
|
2964
|
+
* install whose result should be reused across runs belongs in `image.setup`
|
|
2965
|
+
* (baked into the cached image) instead; keep hooks for per-run work — e.g.
|
|
2966
|
+
* anything that touches run-scoped credentials.
|
|
2967
|
+
*/
|
|
2968
|
+
EnvironmentHooks: {
|
|
2969
|
+
/** Post Clone */
|
|
2970
|
+
post_clone?: string | null;
|
|
2971
|
+
/** Post Start */
|
|
2972
|
+
post_start?: string | null;
|
|
3171
2973
|
};
|
|
3172
2974
|
/**
|
|
3173
|
-
*
|
|
2975
|
+
* EnvironmentIdentity
|
|
3174
2976
|
* @description The Ellipsis namespace of an environment file. `kind: environment` is
|
|
3175
2977
|
* what routes a synced YAML here instead of to the agent-config parser —
|
|
3176
2978
|
* an agent config carries no `kind` (or `kind: agent`, tolerated nowhere:
|
|
3177
2979
|
* absence is the agent marker).
|
|
3178
2980
|
*/
|
|
3179
|
-
|
|
2981
|
+
EnvironmentIdentity: {
|
|
3180
2982
|
/** Description */
|
|
3181
2983
|
description?: string | null;
|
|
3182
2984
|
/**
|
|
@@ -3190,10 +2992,32 @@ interface components {
|
|
|
3190
2992
|
* "labels": []
|
|
3191
2993
|
* }
|
|
3192
2994
|
*/
|
|
3193
|
-
metadata: components['schemas']['
|
|
2995
|
+
metadata: components['schemas']['ConfigMetadata'];
|
|
3194
2996
|
/** Name */
|
|
3195
2997
|
name?: string | null;
|
|
3196
2998
|
};
|
|
2999
|
+
/**
|
|
3000
|
+
* EnvironmentImage
|
|
3001
|
+
* @description How to customize the container image the agent runs in. You
|
|
3002
|
+
* contribute appended layers (`dockerfile_append`) and a build-time script
|
|
3003
|
+
* (`setup`) only — Ellipsis owns FROM / base tooling / entrypoint / user.
|
|
3004
|
+
* Today only inline bodies are supported; a file reference (resolved at the
|
|
3005
|
+
* run's SHA) will come later.
|
|
3006
|
+
*
|
|
3007
|
+
* The split: `dockerfile_append` runs when the image is assembled, before any
|
|
3008
|
+
* repo exists — toolchain installs (a package manager binary, apt packages).
|
|
3009
|
+
* `setup` runs at image-build time *after* the configured repositories are
|
|
3010
|
+
* checked out, and its output is captured by the filesystem snapshot that
|
|
3011
|
+
* becomes the cached image — dependency installs (`poetry install`,
|
|
3012
|
+
* `npm install`), so later runs start with deps already on disk. Neither runs
|
|
3013
|
+
* per run; that's `hooks.post_start` / `hooks.post_clone`.
|
|
3014
|
+
*/
|
|
3015
|
+
EnvironmentImage: {
|
|
3016
|
+
/** Dockerfile Append */
|
|
3017
|
+
dockerfile_append?: string | null;
|
|
3018
|
+
/** Setup */
|
|
3019
|
+
setup?: string | null;
|
|
3020
|
+
};
|
|
3197
3021
|
/**
|
|
3198
3022
|
* EnvironmentResponse
|
|
3199
3023
|
* @description One saved environment.
|
|
@@ -3213,6 +3037,23 @@ interface components {
|
|
|
3213
3037
|
* @enum {string}
|
|
3214
3038
|
*/
|
|
3215
3039
|
EnvironmentSource: 'request' | 'agent_config' | 'repo_default' | 'account_default' | 'platform_default';
|
|
3040
|
+
/**
|
|
3041
|
+
* EnvironmentVariable
|
|
3042
|
+
* @description One environment variable injected into the agent's sandbox.
|
|
3043
|
+
*
|
|
3044
|
+
* `value`, when set, is a literal injected as-is — use it for non-secret
|
|
3045
|
+
* config (LOG_LEVEL, an API base URL). When `value` is omitted the value is
|
|
3046
|
+
* resolved at run time from the account's sandbox-secrets store (dashboard
|
|
3047
|
+
* / `PUT /v1/secrets`) by `name`, so a secret can be injected without
|
|
3048
|
+
* ever putting it in the config file. Either way the variable only reaches
|
|
3049
|
+
* agents that name it.
|
|
3050
|
+
*/
|
|
3051
|
+
EnvironmentVariable: {
|
|
3052
|
+
/** Name */
|
|
3053
|
+
name: string;
|
|
3054
|
+
/** Value */
|
|
3055
|
+
value?: string | null;
|
|
3056
|
+
};
|
|
3216
3057
|
/**
|
|
3217
3058
|
* EnvironmentsListResponse
|
|
3218
3059
|
* @description The caller's saved environments.
|
|
@@ -3663,6 +3504,32 @@ interface components {
|
|
|
3663
3504
|
*/
|
|
3664
3505
|
members: components['schemas']['GithubMember'][];
|
|
3665
3506
|
};
|
|
3507
|
+
/**
|
|
3508
|
+
* GithubPermissions
|
|
3509
|
+
* @description The agent's GitHub access: the scope of the installation token minted for
|
|
3510
|
+
* its sandbox — the credential `git`, `gh`, and the GitHub MCP server
|
|
3511
|
+
* authenticate with.
|
|
3512
|
+
*
|
|
3513
|
+
* By default the token carries the installation's full permissions on all of
|
|
3514
|
+
* the installation's repositories. `permissions` narrows what it may do:
|
|
3515
|
+
* the string `read_only` grants read access to contents, issues, metadata and
|
|
3516
|
+
* pull requests; a map requests explicit levels per GitHub App permission
|
|
3517
|
+
* scope (e.g. `{contents: read, pull_requests: write}`) and may never exceed
|
|
3518
|
+
* what the installation granted. `repositories` scopes the token to exactly
|
|
3519
|
+
* the listed repos, by name (they must belong to the installation).
|
|
3520
|
+
*
|
|
3521
|
+
* Restriction is enforced by GitHub, not by Ellipsis: the token itself is
|
|
3522
|
+
* minted with the reduced scope, so nothing running in the sandbox can
|
|
3523
|
+
* exceed it.
|
|
3524
|
+
*/
|
|
3525
|
+
GithubPermissions: {
|
|
3526
|
+
/** Permissions */
|
|
3527
|
+
permissions?: 'read_only' | {
|
|
3528
|
+
[key: string]: string;
|
|
3529
|
+
} | null;
|
|
3530
|
+
/** Repositories */
|
|
3531
|
+
repositories?: string[] | null;
|
|
3532
|
+
};
|
|
3666
3533
|
/**
|
|
3667
3534
|
* GithubRepositoriesListResponse
|
|
3668
3535
|
* @description The repositories connected to the account's GitHub installation.
|
|
@@ -3712,6 +3579,22 @@ interface components {
|
|
|
3712
3579
|
*/
|
|
3713
3580
|
private: boolean;
|
|
3714
3581
|
};
|
|
3582
|
+
/**
|
|
3583
|
+
* GithubSourceDetails
|
|
3584
|
+
* @description Identifies the file a GitHub-sourced agent config is synced from.
|
|
3585
|
+
*
|
|
3586
|
+
* Keyed on the repository ID (not owner/name) so repository and org renames
|
|
3587
|
+
* don't orphan the config; resolve display names from gh_repositories at
|
|
3588
|
+
* read time.
|
|
3589
|
+
*/
|
|
3590
|
+
GithubSourceDetails: {
|
|
3591
|
+
/** Branch */
|
|
3592
|
+
branch: string;
|
|
3593
|
+
/** Path */
|
|
3594
|
+
path: string;
|
|
3595
|
+
/** Repo Id */
|
|
3596
|
+
repo_id: number;
|
|
3597
|
+
};
|
|
3715
3598
|
/**
|
|
3716
3599
|
* GithubUser
|
|
3717
3600
|
* @description This is a full user account. It's the most amount of info we need to represent a GitHub user.
|
|
@@ -3833,6 +3716,30 @@ interface components {
|
|
|
3833
3716
|
*/
|
|
3834
3717
|
offset: number;
|
|
3835
3718
|
};
|
|
3719
|
+
/**
|
|
3720
|
+
* InputContract
|
|
3721
|
+
* @description The typed input contract: what goes INTO a session (the trigger is
|
|
3722
|
+
* when it happens; this is what goes in).
|
|
3723
|
+
*
|
|
3724
|
+
* `json_schema` types the payload a caller-started session takes
|
|
3725
|
+
* (`POST /v1/sessions` `input`, validated at the door; required when
|
|
3726
|
+
* declared). It is illegal on a react-triggered agent — react payloads are
|
|
3727
|
+
* platform-shaped (the published surface field sets), not caller-shaped.
|
|
3728
|
+
*
|
|
3729
|
+
* `message` is the initial-message template: exact `{{path}}` substitution
|
|
3730
|
+
* over the caller payload (or, on a react agent, over the surface's
|
|
3731
|
+
* published fields), no conditionals/loops/filters. Refs are validated at
|
|
3732
|
+
* deploy time against the governing field set (see AutomationConfig's
|
|
3733
|
+
* `_check_input`).
|
|
3734
|
+
*/
|
|
3735
|
+
InputContract: {
|
|
3736
|
+
/** Json Schema */
|
|
3737
|
+
json_schema?: {
|
|
3738
|
+
[key: string]: unknown;
|
|
3739
|
+
} | null;
|
|
3740
|
+
/** Message */
|
|
3741
|
+
message?: string | null;
|
|
3742
|
+
};
|
|
3836
3743
|
/**
|
|
3837
3744
|
* IssueAction
|
|
3838
3745
|
* @enum {string}
|
|
@@ -4070,6 +3977,69 @@ interface components {
|
|
|
4070
3977
|
*/
|
|
4071
3978
|
slack_user_id: string;
|
|
4072
3979
|
};
|
|
3980
|
+
/**
|
|
3981
|
+
* McpRemoteServer
|
|
3982
|
+
* @description A bring-your-own remote MCP server: the harness talks HTTP to `url`.
|
|
3983
|
+
* Nothing runs in the sandbox image. `headers` carry static auth (e.g.
|
|
3984
|
+
* `Authorization: Bearer ${TOKEN}`); values may embed `${NAME}` secret
|
|
3985
|
+
* references, resolved at run time from the account's secrets store.
|
|
3986
|
+
*/
|
|
3987
|
+
McpRemoteServer: {
|
|
3988
|
+
/**
|
|
3989
|
+
* Headers
|
|
3990
|
+
* @default {}
|
|
3991
|
+
*/
|
|
3992
|
+
headers: {
|
|
3993
|
+
[key: string]: string;
|
|
3994
|
+
};
|
|
3995
|
+
/** Name */
|
|
3996
|
+
name: string;
|
|
3997
|
+
/** Url */
|
|
3998
|
+
url: string;
|
|
3999
|
+
};
|
|
4000
|
+
/**
|
|
4001
|
+
* McpServerRef
|
|
4002
|
+
* @description One built-in MCP server this agent opts into by name (`linear`/`slack`).
|
|
4003
|
+
* A name reference over the connected built-in set — the platform manages the
|
|
4004
|
+
* server's transport and credentials. It only matters when the named
|
|
4005
|
+
* integration is set to `opt_in` inclusion; an integration in the default
|
|
4006
|
+
* `all_sessions` mode is added regardless. For a server the platform does not
|
|
4007
|
+
* provide, define it instead (`McpStdioServer` /
|
|
4008
|
+
* `McpRemoteServer`).
|
|
4009
|
+
*/
|
|
4010
|
+
McpServerRef: {
|
|
4011
|
+
/** Name */
|
|
4012
|
+
name: string;
|
|
4013
|
+
};
|
|
4014
|
+
/**
|
|
4015
|
+
* McpStdioServer
|
|
4016
|
+
* @description A bring-your-own stdio MCP server: the harness spawns `command` inside
|
|
4017
|
+
* the sandbox and speaks JSON-RPC over its stdin/stdout. The command must be
|
|
4018
|
+
* runnable in the sandbox image — install its runtime via `image.setup` /
|
|
4019
|
+
* `image.dockerfile_append` if the base image lacks it.
|
|
4020
|
+
*
|
|
4021
|
+
* `env` values may embed `${NAME}` references, resolved at run time from the
|
|
4022
|
+
* account's secrets store (see `mcp_secret_refs`); everything else is passed
|
|
4023
|
+
* literally.
|
|
4024
|
+
*/
|
|
4025
|
+
McpStdioServer: {
|
|
4026
|
+
/**
|
|
4027
|
+
* Args
|
|
4028
|
+
* @default []
|
|
4029
|
+
*/
|
|
4030
|
+
args: string[];
|
|
4031
|
+
/** Command */
|
|
4032
|
+
command: string;
|
|
4033
|
+
/**
|
|
4034
|
+
* Env
|
|
4035
|
+
* @default {}
|
|
4036
|
+
*/
|
|
4037
|
+
env: {
|
|
4038
|
+
[key: string]: string;
|
|
4039
|
+
};
|
|
4040
|
+
/** Name */
|
|
4041
|
+
name: string;
|
|
4042
|
+
};
|
|
4073
4043
|
/**
|
|
4074
4044
|
* MemoriesListResponse
|
|
4075
4045
|
* @description The organization's memories: the rendered index a reader scans, plus the
|
|
@@ -4160,6 +4130,18 @@ interface components {
|
|
|
4160
4130
|
/** @description The memory. */
|
|
4161
4131
|
memory: components['schemas']['Memory'];
|
|
4162
4132
|
};
|
|
4133
|
+
/**
|
|
4134
|
+
* MemorySize
|
|
4135
|
+
* @description A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).
|
|
4136
|
+
* Set any of `gb`/`mb` (at least one). The alternative to the `8GB`-style
|
|
4137
|
+
* shorthand string.
|
|
4138
|
+
*/
|
|
4139
|
+
MemorySize: {
|
|
4140
|
+
/** Gb */
|
|
4141
|
+
gb?: number | null;
|
|
4142
|
+
/** Mb */
|
|
4143
|
+
mb?: number | null;
|
|
4144
|
+
};
|
|
4163
4145
|
/**
|
|
4164
4146
|
* MemorySummary
|
|
4165
4147
|
* @description One entry in the index: a memory with every field except `content`.
|
|
@@ -4316,6 +4298,18 @@ interface components {
|
|
|
4316
4298
|
*/
|
|
4317
4299
|
default_model?: string | null;
|
|
4318
4300
|
};
|
|
4301
|
+
/**
|
|
4302
|
+
* OutputConfig
|
|
4303
|
+
* @description The typed output contract: the JSON Schema the agent must exit through
|
|
4304
|
+
* (the StructuredOutput exit tool). Read back via
|
|
4305
|
+
* GET /v1/sessions/{id}/output.
|
|
4306
|
+
*/
|
|
4307
|
+
OutputConfig: {
|
|
4308
|
+
/** Json Schema */
|
|
4309
|
+
json_schema: {
|
|
4310
|
+
[key: string]: unknown;
|
|
4311
|
+
};
|
|
4312
|
+
};
|
|
4319
4313
|
/**
|
|
4320
4314
|
* ParentKind
|
|
4321
4315
|
* @description How a session relates to its predecessor (parent_agent_session_id) —
|
|
@@ -4329,6 +4323,32 @@ interface components {
|
|
|
4329
4323
|
* @enum {string}
|
|
4330
4324
|
*/
|
|
4331
4325
|
ParentKind: 'continuation' | 'resume';
|
|
4326
|
+
/**
|
|
4327
|
+
* PermissionsConfig
|
|
4328
|
+
* @description What the agent is allowed to touch, per credential the platform mints
|
|
4329
|
+
* into its sandbox. Distinct from `environment:`, which is where the agent
|
|
4330
|
+
* runs; this is what it may do from there.
|
|
4331
|
+
*
|
|
4332
|
+
* `ellipsis` scopes the sandbox's Ellipsis API token
|
|
4333
|
+
* (`ELLIPSIS_API_TOKEN`, what the in-sandbox `agent` CLI authenticates
|
|
4334
|
+
* with). `true` / the string `all` (the default) grant the full sandbox
|
|
4335
|
+
* ceiling — everything a sandbox token can ever do. A map narrows it per
|
|
4336
|
+
* resource (see `EllipsisPermissions`); the minted token carries
|
|
4337
|
+
* the intersection, so a config can only ever reduce access. `false` fails
|
|
4338
|
+
* validation — an agent with no API token cannot report its own progress.
|
|
4339
|
+
*
|
|
4340
|
+
* `github` scopes the sandbox's GitHub installation token (`GH_TOKEN`) —
|
|
4341
|
+
* see `GithubPermissions`. GitHub enforces it at mint time.
|
|
4342
|
+
*/
|
|
4343
|
+
PermissionsConfig: {
|
|
4344
|
+
/**
|
|
4345
|
+
* Ellipsis
|
|
4346
|
+
* @default true
|
|
4347
|
+
*/
|
|
4348
|
+
ellipsis: (true | 'all') | components['schemas']['EllipsisPermissions'];
|
|
4349
|
+
/** @default {} */
|
|
4350
|
+
github: components['schemas']['GithubPermissions'];
|
|
4351
|
+
};
|
|
4332
4352
|
/**
|
|
4333
4353
|
* PollCliAuthResponse
|
|
4334
4354
|
* @description The state of a device-code flow. Poll until `status` leaves `pending`.
|
|
@@ -4647,6 +4667,20 @@ interface components {
|
|
|
4647
4667
|
};
|
|
4648
4668
|
/** ReactSlackChannel */
|
|
4649
4669
|
ReactSlackChannel: Record<string, never>;
|
|
4670
|
+
/** ReactTrigger */
|
|
4671
|
+
ReactTrigger: {
|
|
4672
|
+
issue?: components['schemas']['ReactIssue'] | null;
|
|
4673
|
+
linear_issue?: components['schemas']['ReactLinearIssue'] | null;
|
|
4674
|
+
pull_request?: components['schemas']['ReactPullRequest'] | null;
|
|
4675
|
+
push?: components['schemas']['ReactPush'] | null;
|
|
4676
|
+
sentry?: components['schemas']['ReactSentry'] | null;
|
|
4677
|
+
slack_channel?: components['schemas']['ReactSlackChannel'] | null;
|
|
4678
|
+
/**
|
|
4679
|
+
* @description discriminator enum property added by openapi-typescript
|
|
4680
|
+
* @enum {string}
|
|
4681
|
+
*/
|
|
4682
|
+
type: 'react';
|
|
4683
|
+
};
|
|
4650
4684
|
/**
|
|
4651
4685
|
* RecentPullRequest
|
|
4652
4686
|
* @description One pull request in the recent-activity table.
|
|
@@ -4771,6 +4805,15 @@ interface components {
|
|
|
4771
4805
|
*/
|
|
4772
4806
|
include: string[];
|
|
4773
4807
|
} | string[];
|
|
4808
|
+
/** RepositoryRef */
|
|
4809
|
+
RepositoryRef: {
|
|
4810
|
+
/** Name */
|
|
4811
|
+
name: string;
|
|
4812
|
+
/** Owner */
|
|
4813
|
+
owner?: string | null;
|
|
4814
|
+
/** Ref */
|
|
4815
|
+
ref?: string | null;
|
|
4816
|
+
};
|
|
4774
4817
|
/**
|
|
4775
4818
|
* RepositorySelection
|
|
4776
4819
|
* @enum {string}
|
|
@@ -5302,17 +5345,60 @@ interface components {
|
|
|
5302
5345
|
* @description The pull request a review ran on.
|
|
5303
5346
|
*/
|
|
5304
5347
|
ReviewPullRequest: {
|
|
5348
|
+
/** @description Who opened the pull request, or null when Ellipsis has not ingested the pull request yet. */
|
|
5349
|
+
author?: components['schemas']['ReviewPullRequestAuthor'] | null;
|
|
5350
|
+
/**
|
|
5351
|
+
* Base Sha
|
|
5352
|
+
* @description The pull request's base commit when the review was created.
|
|
5353
|
+
*/
|
|
5354
|
+
base_sha: string;
|
|
5355
|
+
/**
|
|
5356
|
+
* Head Sha
|
|
5357
|
+
* @description The pull request's head commit the review ran against (the same as `scope.head`).
|
|
5358
|
+
*/
|
|
5359
|
+
head_sha: string;
|
|
5305
5360
|
/**
|
|
5306
5361
|
* Number
|
|
5307
5362
|
* @description The pull request number.
|
|
5308
5363
|
*/
|
|
5309
5364
|
number: number;
|
|
5365
|
+
/**
|
|
5366
|
+
* Title
|
|
5367
|
+
* @description The pull request's title, or null when Ellipsis has not ingested the pull request yet.
|
|
5368
|
+
*/
|
|
5369
|
+
title?: string | null;
|
|
5310
5370
|
/**
|
|
5311
5371
|
* Url
|
|
5312
5372
|
* @description The pull request's URL on GitHub.
|
|
5313
5373
|
*/
|
|
5314
5374
|
url: string;
|
|
5315
5375
|
};
|
|
5376
|
+
/**
|
|
5377
|
+
* ReviewPullRequestAuthor
|
|
5378
|
+
* @description The GitHub account that opened the pull request.
|
|
5379
|
+
*/
|
|
5380
|
+
ReviewPullRequestAuthor: {
|
|
5381
|
+
/**
|
|
5382
|
+
* Avatar Url
|
|
5383
|
+
* @description The account's avatar URL.
|
|
5384
|
+
*/
|
|
5385
|
+
avatar_url: string;
|
|
5386
|
+
/**
|
|
5387
|
+
* Id
|
|
5388
|
+
* @description The account's GitHub id.
|
|
5389
|
+
*/
|
|
5390
|
+
id: number;
|
|
5391
|
+
/**
|
|
5392
|
+
* Login
|
|
5393
|
+
* @description The account's GitHub login.
|
|
5394
|
+
*/
|
|
5395
|
+
login: string;
|
|
5396
|
+
/**
|
|
5397
|
+
* Type
|
|
5398
|
+
* @description The account type: "User", "Organization", or "Bot".
|
|
5399
|
+
*/
|
|
5400
|
+
type: string;
|
|
5401
|
+
};
|
|
5316
5402
|
/**
|
|
5317
5403
|
* ReviewRepoFacet
|
|
5318
5404
|
* @description A repository filter option for the reviews view.
|
|
@@ -6001,12 +6087,14 @@ interface components {
|
|
|
6001
6087
|
* disagree about what a session looks like.
|
|
6002
6088
|
*/
|
|
6003
6089
|
Session: {
|
|
6004
|
-
/** @description The agent that ran: the config the session executed, where that config came from, and any override merged into it. */
|
|
6005
|
-
agent: components['schemas']['SessionAgent'];
|
|
6006
6090
|
/** @description The principal this session is attributed to. */
|
|
6007
6091
|
attribution?: components['schemas']['SessionAttribution'];
|
|
6092
|
+
/** @description The automation the session was started from, or null for a raw session started with POST /v1/sessions. */
|
|
6093
|
+
automation?: components['schemas']['SessionAutomation'] | null;
|
|
6008
6094
|
/** @description The spend budget enforced for this session. */
|
|
6009
6095
|
budget?: components['schemas']['SessionBudget'];
|
|
6096
|
+
/** @description What the session ran on, frozen when it was created: the harness block, the resolved environment, permissions, skills, output contract, and budget. */
|
|
6097
|
+
config: components['schemas']['SessionConfig'];
|
|
6010
6098
|
/**
|
|
6011
6099
|
* Context Repository
|
|
6012
6100
|
* @description The "owner/name" repository context the session was started in, if any.
|
|
@@ -6020,7 +6108,7 @@ interface components {
|
|
|
6020
6108
|
* @description When the session was created.
|
|
6021
6109
|
*/
|
|
6022
6110
|
created_at: string;
|
|
6023
|
-
/** @description The environment the session resolved: the saved environment's id and how it was chosen. The environment's frozen body is
|
|
6111
|
+
/** @description The environment the session resolved: the saved environment's id and how it was chosen. The environment's frozen body is `config.environment`. */
|
|
6024
6112
|
environment?: components['schemas']['SessionEnvironment'];
|
|
6025
6113
|
/** @description How the session ended; null until it is terminal. */
|
|
6026
6114
|
exit_status?: components['schemas']['SessionExitStatus'] | null;
|
|
@@ -6086,35 +6174,6 @@ interface components {
|
|
|
6086
6174
|
*/
|
|
6087
6175
|
updated_at: string;
|
|
6088
6176
|
};
|
|
6089
|
-
/**
|
|
6090
|
-
* SessionAgent
|
|
6091
|
-
* @description The agent this session ran: the definition it actually executed, where
|
|
6092
|
-
* that definition came from, and the diff that was merged in — the same
|
|
6093
|
-
* effective-value-plus-provenance shape `SessionBudget` uses.
|
|
6094
|
-
*
|
|
6095
|
-
* `config` is the snapshot frozen when the session was created;
|
|
6096
|
-
* `automation_id` points at the automation as it exists NOW. They diverge
|
|
6097
|
-
* legitimately: a YAML edit after the session started, or any `override`,
|
|
6098
|
-
* leaves the pointer describing something the session never ran.
|
|
6099
|
-
*/
|
|
6100
|
-
SessionAgent: {
|
|
6101
|
-
/**
|
|
6102
|
-
* Automation Id
|
|
6103
|
-
* @description Identifier of the automation this session's snapshot was taken from. Null for raw sessions (nothing saved behind them), templates, and built-in agents. Points at the automation as it exists now, which may have changed since.
|
|
6104
|
-
*/
|
|
6105
|
-
automation_id?: string | null;
|
|
6106
|
-
/** @description The agent definition the session actually ran, frozen when the session was created. */
|
|
6107
|
-
config: components['schemas']['AgentConfig'];
|
|
6108
|
-
/**
|
|
6109
|
-
* Override
|
|
6110
|
-
* @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.
|
|
6111
|
-
*/
|
|
6112
|
-
override?: {
|
|
6113
|
-
[key: string]: unknown;
|
|
6114
|
-
} | null;
|
|
6115
|
-
/** @description How this session's config was chosen. */
|
|
6116
|
-
source: components['schemas']['AgentConfigSource'];
|
|
6117
|
-
};
|
|
6118
6177
|
/**
|
|
6119
6178
|
* SessionAttribution
|
|
6120
6179
|
* @description The principal a session is attributed to: what kind, its id, and — when
|
|
@@ -6131,6 +6190,22 @@ interface components {
|
|
|
6131
6190
|
/** @description The GitHub user the session is attributed to, resolved at read time. Null when the attribution is not a GitHub user. */
|
|
6132
6191
|
user?: components['schemas']['GithubAccountSnippet'] | null;
|
|
6133
6192
|
};
|
|
6193
|
+
/**
|
|
6194
|
+
* SessionAutomation
|
|
6195
|
+
* @description The automation this session was started from: the definition frozen
|
|
6196
|
+
* when the session was created, and the saved automation it came from as it
|
|
6197
|
+
* exists NOW. They diverge legitimately — a YAML edit after the session
|
|
6198
|
+
* started leaves the pointer describing something the session never ran.
|
|
6199
|
+
*/
|
|
6200
|
+
SessionAutomation: {
|
|
6201
|
+
/** @description The automation definition the session was started from, frozen when the session was created. */
|
|
6202
|
+
config: components['schemas']['AutomationConfig'];
|
|
6203
|
+
/**
|
|
6204
|
+
* Id
|
|
6205
|
+
* @description Identifier of the saved automation this session's snapshot was taken from. Null for a routing-file agent, a code-review stage agent, or the built-in mention agent, which have no saved automation behind them. Points at the automation as it exists now, which may have changed since.
|
|
6206
|
+
*/
|
|
6207
|
+
id?: string | null;
|
|
6208
|
+
};
|
|
6134
6209
|
/**
|
|
6135
6210
|
* SessionBudget
|
|
6136
6211
|
* @description The spend budget actually enforced for this session, and which layer of
|
|
@@ -6149,6 +6224,56 @@ interface components {
|
|
|
6149
6224
|
*/
|
|
6150
6225
|
source: components['schemas']['BudgetSource'];
|
|
6151
6226
|
};
|
|
6227
|
+
/**
|
|
6228
|
+
* SessionConfig
|
|
6229
|
+
* @description What one session runs on: the harness block(s), where it runs, what it
|
|
6230
|
+
* may touch, its skills, its exit contract, and its spend cap. Every session
|
|
6231
|
+
* freezes one of these (`agent_sessions.session_config`); an automation
|
|
6232
|
+
* carries one under `session:` (`AutomationConfig.session`); and
|
|
6233
|
+
* `POST /v1/sessions` is this shape flattened onto the request body, plus the
|
|
6234
|
+
* run settings. Nothing in here is an automation's identity or trigger —
|
|
6235
|
+
* those belong to `AutomationConfig`.
|
|
6236
|
+
*
|
|
6237
|
+
* Field order is the canonical key order for `session:` blocks and YAML
|
|
6238
|
+
* exports: what runs (`claude`/`codex`), where (`environment`), what it may
|
|
6239
|
+
* touch (`permissions`), then the rest.
|
|
6240
|
+
*/
|
|
6241
|
+
SessionConfig: {
|
|
6242
|
+
/** @default {} */
|
|
6243
|
+
budget: components['schemas']['BudgetConfig'];
|
|
6244
|
+
/**
|
|
6245
|
+
* @default {
|
|
6246
|
+
* "system": ""
|
|
6247
|
+
* }
|
|
6248
|
+
*/
|
|
6249
|
+
claude: components['schemas']['ClaudeConfig'];
|
|
6250
|
+
codex?: components['schemas']['CodexConfig'] | null;
|
|
6251
|
+
/**
|
|
6252
|
+
* Environment
|
|
6253
|
+
* @default {
|
|
6254
|
+
* "compute": {},
|
|
6255
|
+
* "hooks": {},
|
|
6256
|
+
* "image": {},
|
|
6257
|
+
* "mcp_servers": [],
|
|
6258
|
+
* "repositories": [],
|
|
6259
|
+
* "variables": []
|
|
6260
|
+
* }
|
|
6261
|
+
*/
|
|
6262
|
+
environment: string | components['schemas']['EnvironmentConfig'];
|
|
6263
|
+
output?: components['schemas']['OutputConfig'] | null;
|
|
6264
|
+
/**
|
|
6265
|
+
* @default {
|
|
6266
|
+
* "ellipsis": true,
|
|
6267
|
+
* "github": {}
|
|
6268
|
+
* }
|
|
6269
|
+
*/
|
|
6270
|
+
permissions: components['schemas']['PermissionsConfig'];
|
|
6271
|
+
/**
|
|
6272
|
+
* Skills
|
|
6273
|
+
* @default []
|
|
6274
|
+
*/
|
|
6275
|
+
skills: components['schemas']['SkillRef'][];
|
|
6276
|
+
};
|
|
6152
6277
|
/**
|
|
6153
6278
|
* SessionCost
|
|
6154
6279
|
* @description What a session (or one turn of it) cost, in millicents.
|
|
@@ -6189,11 +6314,27 @@ interface components {
|
|
|
6189
6314
|
*/
|
|
6190
6315
|
total: number;
|
|
6191
6316
|
};
|
|
6317
|
+
/**
|
|
6318
|
+
* SessionDiffResponse
|
|
6319
|
+
* @description A session's uncommitted working-tree changes, one patch per file.
|
|
6320
|
+
*/
|
|
6321
|
+
SessionDiffResponse: {
|
|
6322
|
+
/**
|
|
6323
|
+
* Files
|
|
6324
|
+
* @description One unified-diff section per changed file, `diff --git` header included, exactly as git emitted it. Join to the per-file counts on `git.repos[].files` by (full_name, path). Empty when the tree was clean or no capture ran.
|
|
6325
|
+
*/
|
|
6326
|
+
files: components['schemas']['SessionGitPatchFile'][];
|
|
6327
|
+
/**
|
|
6328
|
+
* Omitted Paths
|
|
6329
|
+
* @description Paths whose hunks were dropped to fit the storage cap, so a viewer can name what is missing instead of showing a silently partial diff.
|
|
6330
|
+
*/
|
|
6331
|
+
omitted_paths: string[];
|
|
6332
|
+
};
|
|
6192
6333
|
/**
|
|
6193
6334
|
* SessionEnvironment
|
|
6194
6335
|
* @description The environment this session resolved: which saved environment (as it
|
|
6195
6336
|
* exists now) and how it was chosen. The environment's frozen BODY rides
|
|
6196
|
-
* inside `
|
|
6337
|
+
* inside `config.environment` — substitution happens before the config
|
|
6197
6338
|
* snapshot freezes — so this object is provenance, not payload.
|
|
6198
6339
|
*/
|
|
6199
6340
|
SessionEnvironment: {
|
|
@@ -6263,6 +6404,28 @@ interface components {
|
|
|
6263
6404
|
/** Status */
|
|
6264
6405
|
status: string;
|
|
6265
6406
|
};
|
|
6407
|
+
/**
|
|
6408
|
+
* SessionGitPatchFile
|
|
6409
|
+
* @description One file's patch, split out of `git diff HEAD` at capture time.
|
|
6410
|
+
*
|
|
6411
|
+
* Stored per file rather than as one blob because that is how a viewer reads
|
|
6412
|
+
* it: a row per changed file, opened one at a time. Counts and status are NOT
|
|
6413
|
+
* repeated here — they live on the matching SessionGitFile in
|
|
6414
|
+
* `agent_sessions.output_git`, which rides on every session read, so a surface
|
|
6415
|
+
* lists the changed files (and their +/−) before it fetches a single hunk. The
|
|
6416
|
+
* join key is (full_name, path).
|
|
6417
|
+
*
|
|
6418
|
+
* `patch` is the unified-diff section for this file, `diff --git` header
|
|
6419
|
+
* included, exactly as git emitted it.
|
|
6420
|
+
*/
|
|
6421
|
+
SessionGitPatchFile: {
|
|
6422
|
+
/** Full Name */
|
|
6423
|
+
full_name: string;
|
|
6424
|
+
/** Patch */
|
|
6425
|
+
patch: string;
|
|
6426
|
+
/** Path */
|
|
6427
|
+
path: string;
|
|
6428
|
+
};
|
|
6266
6429
|
/**
|
|
6267
6430
|
* SessionGitPr
|
|
6268
6431
|
* @description A pull request the session opened in this repo, written the moment the
|
|
@@ -6648,6 +6811,35 @@ interface components {
|
|
|
6648
6811
|
*/
|
|
6649
6812
|
sessions: components['schemas']['Session'][];
|
|
6650
6813
|
};
|
|
6814
|
+
/**
|
|
6815
|
+
* SettingsRef
|
|
6816
|
+
* @description A config-declared Claude Code settings.json, resolved at run start and
|
|
6817
|
+
* passed to `claude --settings <path>`. That is the CLI settings tier — BELOW
|
|
6818
|
+
* Ellipsis's managed-settings.json floor — so it customizes behavior (model
|
|
6819
|
+
* permissions, includeCoAuthoredBy, statusLine, ...) but can never weaken a
|
|
6820
|
+
* security setting. Lets a team point the cloud agent at the same settings file
|
|
6821
|
+
* they already use with Claude Code locally instead of re-encoding it as YAML.
|
|
6822
|
+
*/
|
|
6823
|
+
SettingsRef: {
|
|
6824
|
+
/** Path */
|
|
6825
|
+
path: string;
|
|
6826
|
+
repository?: components['schemas']['RepositoryRef'] | null;
|
|
6827
|
+
};
|
|
6828
|
+
/**
|
|
6829
|
+
* SkillRef
|
|
6830
|
+
* @description One config-declared Claude Code skill: a repository directory containing
|
|
6831
|
+
* a SKILL.md, resolved at run start and installed at the sandbox's personal
|
|
6832
|
+
* skill level (`~/.claude/skills/<basename(path)>/`). This is how a config
|
|
6833
|
+
* brings in skills its cloned repositories don't provide — cross-repo refs
|
|
6834
|
+
* (an org-wide skills repo), public third-party repos, and repo-less runs.
|
|
6835
|
+
* Skills under a cloned repo's own `.claude/skills/` load by themselves and
|
|
6836
|
+
* don't need an entry here.
|
|
6837
|
+
*/
|
|
6838
|
+
SkillRef: {
|
|
6839
|
+
/** Path */
|
|
6840
|
+
path: string;
|
|
6841
|
+
repository?: components['schemas']['RepositoryRef'] | null;
|
|
6842
|
+
};
|
|
6651
6843
|
/**
|
|
6652
6844
|
* SlackChannel
|
|
6653
6845
|
* @description One channel in the connected Slack workspace.
|
|
@@ -6775,7 +6967,7 @@ interface components {
|
|
|
6775
6967
|
/**
|
|
6776
6968
|
* StartAgentSessionRequest
|
|
6777
6969
|
* @description Parameters for starting a raw session: where it runs, its first
|
|
6778
|
-
* message, and the run's own settings. Flat, in the
|
|
6970
|
+
* message, and the run's own settings. Flat, in the AutomationConfig vocabulary
|
|
6779
6971
|
* — a `claude:` or `permissions:` block copied from an agents/ YAML file
|
|
6780
6972
|
* pastes in verbatim. There is no automation behind a raw session; to run a
|
|
6781
6973
|
* saved automation, invoke it with POST /v1/automations/{automation_id}/sessions.
|
|
@@ -6791,14 +6983,14 @@ interface components {
|
|
|
6791
6983
|
*/
|
|
6792
6984
|
budget?: number | null;
|
|
6793
6985
|
/** @description The Claude-harness block: `{"model": ...}` to pick this session's model, plus system/effort/fallback_model/max_turns/settings. Omit the model to run the organization's default. */
|
|
6794
|
-
claude?: components['schemas']['
|
|
6986
|
+
claude?: components['schemas']['ClaudeConfig'] | null;
|
|
6795
6987
|
/** @description The Codex-harness block. Its presence selects the Codex harness, exactly as in a saved automation; a request may not carry both `claude` and `codex`. */
|
|
6796
|
-
codex?: components['schemas']['
|
|
6988
|
+
codex?: components['schemas']['CodexConfig'] | null;
|
|
6797
6989
|
/**
|
|
6798
6990
|
* Environment
|
|
6799
|
-
* @description Where the session runs. A STRING is a saved environment's name or `env_...` id. An OBJECT is
|
|
6991
|
+
* @description Where the session runs. A STRING is a saved environment's name or `env_...` id, substituted wholesale. An OBJECT is the whole environment for this session — `{}` is the bare sandbox; nothing from the organization's default merges in. Omitted, the session runs in the organization's default environment, else the built-in basic sandbox.
|
|
6800
6992
|
*/
|
|
6801
|
-
environment?: string | components['schemas']['
|
|
6993
|
+
environment?: string | components['schemas']['EnvironmentConfig'] | null;
|
|
6802
6994
|
/**
|
|
6803
6995
|
* Force Rebuild
|
|
6804
6996
|
* @description Skip the image cache for this session's initial provision: a fresh full build whose snapshot then refreshes the cache for later runs. The CLI's `--rebuild`.
|
|
@@ -6820,19 +7012,24 @@ interface components {
|
|
|
6820
7012
|
[key: string]: string;
|
|
6821
7013
|
};
|
|
6822
7014
|
/** @description The structured-output exit contract for this session. */
|
|
6823
|
-
output?: components['schemas']['
|
|
7015
|
+
output?: components['schemas']['OutputConfig'] | null;
|
|
6824
7016
|
/** @description What the session may touch, per minted credential. */
|
|
6825
|
-
permissions?: components['schemas']['
|
|
7017
|
+
permissions?: components['schemas']['PermissionsConfig'] | null;
|
|
6826
7018
|
/**
|
|
6827
7019
|
* Prompt
|
|
6828
7020
|
* @description The session's first message. Omit it and the session starts idle: the sandbox spins up, the agent waits at the prompt, and the first message you send opens turn 0.
|
|
6829
7021
|
*/
|
|
6830
7022
|
prompt?: string | null;
|
|
7023
|
+
/**
|
|
7024
|
+
* Repositories
|
|
7025
|
+
* @description Repositories to check out in addition to the environment's own, as `owner/name` or a bare `name` (the account's). Each is added only when the resolved environment does not already have it — the CLI sends the repository it is standing in this way, whatever environment the session runs in.
|
|
7026
|
+
*/
|
|
7027
|
+
repositories?: string[] | null;
|
|
6831
7028
|
/**
|
|
6832
7029
|
* Skills
|
|
6833
7030
|
* @description Skills installed for this session.
|
|
6834
7031
|
*/
|
|
6835
|
-
skills?: components['schemas']['
|
|
7032
|
+
skills?: components['schemas']['SkillRef'][] | null;
|
|
6836
7033
|
};
|
|
6837
7034
|
/**
|
|
6838
7035
|
* StartAutomationSessionRequest
|
|
@@ -6901,6 +7098,12 @@ interface components {
|
|
|
6901
7098
|
*/
|
|
6902
7099
|
verification_uri_complete: string;
|
|
6903
7100
|
};
|
|
7101
|
+
/** SystemFileRef */
|
|
7102
|
+
SystemFileRef: {
|
|
7103
|
+
/** File */
|
|
7104
|
+
file: string;
|
|
7105
|
+
repository?: components['schemas']['RepositoryRef'] | null;
|
|
7106
|
+
};
|
|
6904
7107
|
/**
|
|
6905
7108
|
* TokensInfo
|
|
6906
7109
|
* @description Token/cost usage, per record (one API call's counts, aggregate fields at
|
|
@@ -6963,7 +7166,7 @@ interface components {
|
|
|
6963
7166
|
*/
|
|
6964
7167
|
UpdateAutomationRequest: {
|
|
6965
7168
|
/** @description The automation's new definition. Replaces the previous one wholesale — this is not a partial update. */
|
|
6966
|
-
automation: components['schemas']['
|
|
7169
|
+
automation: components['schemas']['AutomationConfig'];
|
|
6967
7170
|
};
|
|
6968
7171
|
/**
|
|
6969
7172
|
* UpdateEnvironmentRequest
|
|
@@ -6971,7 +7174,7 @@ interface components {
|
|
|
6971
7174
|
*/
|
|
6972
7175
|
UpdateEnvironmentRequest: {
|
|
6973
7176
|
/** @description The environment's new definition. Replaces the previous one wholesale — this is not a partial update. */
|
|
6974
|
-
environment: components['schemas']['
|
|
7177
|
+
environment: components['schemas']['EnvironmentDocument'];
|
|
6975
7178
|
};
|
|
6976
7179
|
/**
|
|
6977
7180
|
* UsageDailyPoint
|
|
@@ -7898,18 +8101,100 @@ interface operations {
|
|
|
7898
8101
|
'application/json': components['schemas']['ErrorResponse'];
|
|
7899
8102
|
};
|
|
7900
8103
|
};
|
|
7901
|
-
/** @description Validation Error */
|
|
8104
|
+
/** @description Validation Error */
|
|
8105
|
+
422: {
|
|
8106
|
+
headers: {
|
|
8107
|
+
[name: string]: unknown;
|
|
8108
|
+
};
|
|
8109
|
+
content: {
|
|
8110
|
+
'application/json': components['schemas']['HTTPValidationError'];
|
|
8111
|
+
};
|
|
8112
|
+
};
|
|
8113
|
+
};
|
|
8114
|
+
};
|
|
8115
|
+
link_automation: {
|
|
8116
|
+
parameters: {
|
|
8117
|
+
query?: never;
|
|
8118
|
+
header?: {
|
|
8119
|
+
'user-agent'?: string | null;
|
|
8120
|
+
};
|
|
8121
|
+
path: {
|
|
8122
|
+
automation_id: string;
|
|
8123
|
+
};
|
|
8124
|
+
cookie?: never;
|
|
8125
|
+
};
|
|
8126
|
+
requestBody: {
|
|
8127
|
+
content: {
|
|
8128
|
+
'application/json': components['schemas']['LinkAutomationRequest'];
|
|
8129
|
+
};
|
|
8130
|
+
};
|
|
8131
|
+
responses: {
|
|
8132
|
+
/** @description Successful Response */
|
|
8133
|
+
200: {
|
|
8134
|
+
headers: {
|
|
8135
|
+
[name: string]: unknown;
|
|
8136
|
+
};
|
|
8137
|
+
content: {
|
|
8138
|
+
'application/json': components['schemas']['LinkAutomationResponse'];
|
|
8139
|
+
};
|
|
8140
|
+
};
|
|
8141
|
+
/** @description The path is not a synced location, or the repository has no commits. */
|
|
8142
|
+
400: {
|
|
8143
|
+
headers: {
|
|
8144
|
+
[name: string]: unknown;
|
|
8145
|
+
};
|
|
8146
|
+
content: {
|
|
8147
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
8148
|
+
};
|
|
8149
|
+
};
|
|
8150
|
+
/** @description The bearer token is missing, invalid, or revoked. */
|
|
8151
|
+
401: {
|
|
8152
|
+
headers: {
|
|
8153
|
+
[name: string]: unknown;
|
|
8154
|
+
};
|
|
8155
|
+
content: {
|
|
8156
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
8157
|
+
};
|
|
8158
|
+
};
|
|
8159
|
+
/** @description The credential may not perform this action, or the account is blocked. */
|
|
8160
|
+
403: {
|
|
8161
|
+
headers: {
|
|
8162
|
+
[name: string]: unknown;
|
|
8163
|
+
};
|
|
8164
|
+
content: {
|
|
8165
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
8166
|
+
};
|
|
8167
|
+
};
|
|
8168
|
+
/** @description The automation or repository was not found in your account. */
|
|
8169
|
+
404: {
|
|
8170
|
+
headers: {
|
|
8171
|
+
[name: string]: unknown;
|
|
8172
|
+
};
|
|
8173
|
+
content: {
|
|
8174
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
8175
|
+
};
|
|
8176
|
+
};
|
|
8177
|
+
/** @description The automation is already defined by a file, a link is already open for it, a file already exists at that path, or another automation syncs from it. */
|
|
8178
|
+
409: {
|
|
8179
|
+
headers: {
|
|
8180
|
+
[name: string]: unknown;
|
|
8181
|
+
};
|
|
8182
|
+
content: {
|
|
8183
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
8184
|
+
};
|
|
8185
|
+
};
|
|
8186
|
+
/** @description GitHub rejected the pull request. */
|
|
7902
8187
|
422: {
|
|
7903
8188
|
headers: {
|
|
7904
8189
|
[name: string]: unknown;
|
|
7905
8190
|
};
|
|
7906
8191
|
content: {
|
|
7907
|
-
'application/json': components['schemas']['
|
|
8192
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
7908
8193
|
};
|
|
7909
8194
|
};
|
|
7910
8195
|
};
|
|
7911
8196
|
};
|
|
7912
|
-
|
|
8197
|
+
get_automation_metrics: {
|
|
7913
8198
|
parameters: {
|
|
7914
8199
|
query?: never;
|
|
7915
8200
|
header?: {
|
|
@@ -7920,11 +8205,7 @@ interface operations {
|
|
|
7920
8205
|
};
|
|
7921
8206
|
cookie?: never;
|
|
7922
8207
|
};
|
|
7923
|
-
requestBody
|
|
7924
|
-
content: {
|
|
7925
|
-
'application/json': components['schemas']['LinkAutomationRequest'];
|
|
7926
|
-
};
|
|
7927
|
-
};
|
|
8208
|
+
requestBody?: never;
|
|
7928
8209
|
responses: {
|
|
7929
8210
|
/** @description Successful Response */
|
|
7930
8211
|
200: {
|
|
@@ -7932,16 +8213,7 @@ interface operations {
|
|
|
7932
8213
|
[name: string]: unknown;
|
|
7933
8214
|
};
|
|
7934
8215
|
content: {
|
|
7935
|
-
'application/json': components['schemas']['
|
|
7936
|
-
};
|
|
7937
|
-
};
|
|
7938
|
-
/** @description The path is not a synced location, or the repository has no commits. */
|
|
7939
|
-
400: {
|
|
7940
|
-
headers: {
|
|
7941
|
-
[name: string]: unknown;
|
|
7942
|
-
};
|
|
7943
|
-
content: {
|
|
7944
|
-
'application/json': components['schemas']['ErrorResponse'];
|
|
8216
|
+
'application/json': components['schemas']['AutomationMetricsResponse'];
|
|
7945
8217
|
};
|
|
7946
8218
|
};
|
|
7947
8219
|
/** @description The bearer token is missing, invalid, or revoked. */
|
|
@@ -7962,7 +8234,7 @@ interface operations {
|
|
|
7962
8234
|
'application/json': components['schemas']['ErrorResponse'];
|
|
7963
8235
|
};
|
|
7964
8236
|
};
|
|
7965
|
-
/** @description
|
|
8237
|
+
/** @description No such automation in your account. */
|
|
7966
8238
|
404: {
|
|
7967
8239
|
headers: {
|
|
7968
8240
|
[name: string]: unknown;
|
|
@@ -7971,22 +8243,13 @@ interface operations {
|
|
|
7971
8243
|
'application/json': components['schemas']['ErrorResponse'];
|
|
7972
8244
|
};
|
|
7973
8245
|
};
|
|
7974
|
-
/** @description
|
|
7975
|
-
409: {
|
|
7976
|
-
headers: {
|
|
7977
|
-
[name: string]: unknown;
|
|
7978
|
-
};
|
|
7979
|
-
content: {
|
|
7980
|
-
'application/json': components['schemas']['ErrorResponse'];
|
|
7981
|
-
};
|
|
7982
|
-
};
|
|
7983
|
-
/** @description GitHub rejected the pull request. */
|
|
8246
|
+
/** @description Validation Error */
|
|
7984
8247
|
422: {
|
|
7985
8248
|
headers: {
|
|
7986
8249
|
[name: string]: unknown;
|
|
7987
8250
|
};
|
|
7988
8251
|
content: {
|
|
7989
|
-
'application/json': components['schemas']['
|
|
8252
|
+
'application/json': components['schemas']['HTTPValidationError'];
|
|
7990
8253
|
};
|
|
7991
8254
|
};
|
|
7992
8255
|
};
|
|
@@ -9541,10 +9804,12 @@ interface operations {
|
|
|
9541
9804
|
list_reviews: {
|
|
9542
9805
|
parameters: {
|
|
9543
9806
|
query?: {
|
|
9544
|
-
owner
|
|
9545
|
-
|
|
9546
|
-
|
|
9547
|
-
|
|
9807
|
+
/** @description Only reviews on these repositories, each as owner/name. Repeat the parameter for several. */
|
|
9808
|
+
repository?: string[];
|
|
9809
|
+
/** @description Only reviews on these pull request numbers. Repeat the parameter for several. */
|
|
9810
|
+
pull_request_number?: number[];
|
|
9811
|
+
/** @description Only reviews in these statuses. Repeat the parameter for several. */
|
|
9812
|
+
status?: components['schemas']['CodeReviewRunStatus'][];
|
|
9548
9813
|
limit?: number;
|
|
9549
9814
|
cursor?: string | null;
|
|
9550
9815
|
};
|
|
@@ -9565,7 +9830,7 @@ interface operations {
|
|
|
9565
9830
|
'application/json': components['schemas']['ReviewsListResponse'];
|
|
9566
9831
|
};
|
|
9567
9832
|
};
|
|
9568
|
-
/** @description
|
|
9833
|
+
/** @description A `repository` value is not of the form owner/name. */
|
|
9569
9834
|
400: {
|
|
9570
9835
|
headers: {
|
|
9571
9836
|
[name: string]: unknown;
|
|
@@ -9592,7 +9857,7 @@ interface operations {
|
|
|
9592
9857
|
'application/json': components['schemas']['ErrorResponse'];
|
|
9593
9858
|
};
|
|
9594
9859
|
};
|
|
9595
|
-
/** @description
|
|
9860
|
+
/** @description A `repository` was not found in your account. */
|
|
9596
9861
|
404: {
|
|
9597
9862
|
headers: {
|
|
9598
9863
|
[name: string]: unknown;
|
|
@@ -10107,6 +10372,66 @@ interface operations {
|
|
|
10107
10372
|
};
|
|
10108
10373
|
};
|
|
10109
10374
|
};
|
|
10375
|
+
get_agent_session_diff: {
|
|
10376
|
+
parameters: {
|
|
10377
|
+
query?: never;
|
|
10378
|
+
header?: {
|
|
10379
|
+
'user-agent'?: string | null;
|
|
10380
|
+
};
|
|
10381
|
+
path: {
|
|
10382
|
+
session_id: string;
|
|
10383
|
+
};
|
|
10384
|
+
cookie?: never;
|
|
10385
|
+
};
|
|
10386
|
+
requestBody?: never;
|
|
10387
|
+
responses: {
|
|
10388
|
+
/** @description Successful Response */
|
|
10389
|
+
200: {
|
|
10390
|
+
headers: {
|
|
10391
|
+
[name: string]: unknown;
|
|
10392
|
+
};
|
|
10393
|
+
content: {
|
|
10394
|
+
'application/json': components['schemas']['SessionDiffResponse'];
|
|
10395
|
+
};
|
|
10396
|
+
};
|
|
10397
|
+
/** @description The bearer token is missing, invalid, or revoked. */
|
|
10398
|
+
401: {
|
|
10399
|
+
headers: {
|
|
10400
|
+
[name: string]: unknown;
|
|
10401
|
+
};
|
|
10402
|
+
content: {
|
|
10403
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
10404
|
+
};
|
|
10405
|
+
};
|
|
10406
|
+
/** @description The credential may not perform this action, or the account is blocked. */
|
|
10407
|
+
403: {
|
|
10408
|
+
headers: {
|
|
10409
|
+
[name: string]: unknown;
|
|
10410
|
+
};
|
|
10411
|
+
content: {
|
|
10412
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
10413
|
+
};
|
|
10414
|
+
};
|
|
10415
|
+
/** @description No such session in your account. */
|
|
10416
|
+
404: {
|
|
10417
|
+
headers: {
|
|
10418
|
+
[name: string]: unknown;
|
|
10419
|
+
};
|
|
10420
|
+
content: {
|
|
10421
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
10422
|
+
};
|
|
10423
|
+
};
|
|
10424
|
+
/** @description Validation Error */
|
|
10425
|
+
422: {
|
|
10426
|
+
headers: {
|
|
10427
|
+
[name: string]: unknown;
|
|
10428
|
+
};
|
|
10429
|
+
content: {
|
|
10430
|
+
'application/json': components['schemas']['HTTPValidationError'];
|
|
10431
|
+
};
|
|
10432
|
+
};
|
|
10433
|
+
};
|
|
10434
|
+
};
|
|
10110
10435
|
export_agent_session: {
|
|
10111
10436
|
parameters: {
|
|
10112
10437
|
query?: never;
|
|
@@ -10803,6 +11128,7 @@ type AttributionType = 'github_user' | 'linear_user' | 'slack_user' | 'api_key';
|
|
|
10803
11128
|
* Delivery status of the message.
|
|
10804
11129
|
*/
|
|
10805
11130
|
type SessionMessageStatus = 'pending' | 'delivered';
|
|
11131
|
+
type GithubAccountType = 'User' | 'Organization' | 'Bot' | 'Mannequin';
|
|
10806
11132
|
type EffortLevel = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
|
|
10807
11133
|
/**
|
|
10808
11134
|
* What may be done to a resource. Strictly ordered: a grant at one level
|
|
@@ -10822,20 +11148,6 @@ type RepositoryFilter = {
|
|
|
10822
11148
|
type LinearIssueAction = 'opened';
|
|
10823
11149
|
type PullRequestAction = 'opened' | 'pushed' | 'merged' | 'closed' | 'review_submitted' | 'commented';
|
|
10824
11150
|
type SentryAction = 'issue_alert' | 'metric_alert';
|
|
10825
|
-
/**
|
|
10826
|
-
* The surface an @ellipsis mention can come from.
|
|
10827
|
-
*
|
|
10828
|
-
* No SLACK member: Slack routing is not a trigger on an agent config, it is the
|
|
10829
|
-
* `slack.yaml` routing file (`SlackConfig`), which answers the questions a
|
|
10830
|
-
* platform list cannot — which channel, and whose DM. A mention trigger listing
|
|
10831
|
-
* `slack` is therefore a config error, not a silently-never-fires config.
|
|
10832
|
-
*/
|
|
10833
|
-
type AgentConfigMentionPlatform = 'github' | 'linear';
|
|
10834
|
-
/**
|
|
10835
|
-
* How this session's config was chosen.
|
|
10836
|
-
*/
|
|
10837
|
-
type AgentConfigSource = 'explicit' | 'inline' | 'template' | 'repo_default' | 'account_default' | 'platform_default' | 'trigger' | 'builtin';
|
|
10838
|
-
type GithubAccountType = 'User' | 'Organization' | 'Bot' | 'Mannequin';
|
|
10839
11151
|
/**
|
|
10840
11152
|
* Where the resolved budget came from.
|
|
10841
11153
|
*/
|
|
@@ -10972,9 +11284,13 @@ interface SessionMessage {
|
|
|
10972
11284
|
* The session's current state.
|
|
10973
11285
|
*/
|
|
10974
11286
|
interface Session {
|
|
10975
|
-
agent: SessionAgent;
|
|
10976
11287
|
attribution: SessionAttribution;
|
|
11288
|
+
/**
|
|
11289
|
+
* The automation the session was started from, or null for a raw session started with POST /v1/sessions.
|
|
11290
|
+
*/
|
|
11291
|
+
automation: SessionAutomation | null;
|
|
10977
11292
|
budget: SessionBudget;
|
|
11293
|
+
config: SessionConfig1;
|
|
10978
11294
|
/**
|
|
10979
11295
|
* The "owner/name" repository context the session was started in, if any.
|
|
10980
11296
|
*/
|
|
@@ -11041,50 +11357,139 @@ interface Session {
|
|
|
11041
11357
|
updated_at: string;
|
|
11042
11358
|
}
|
|
11043
11359
|
/**
|
|
11044
|
-
* The
|
|
11360
|
+
* The principal this session is attributed to.
|
|
11045
11361
|
*/
|
|
11046
|
-
interface
|
|
11362
|
+
interface SessionAttribution {
|
|
11363
|
+
/**
|
|
11364
|
+
* Identifier of the principal the session is attributed to.
|
|
11365
|
+
*/
|
|
11366
|
+
id: string | null;
|
|
11367
|
+
/**
|
|
11368
|
+
* Kind of principal the session is attributed to (e.g. a GitHub user or an API key).
|
|
11369
|
+
*/
|
|
11370
|
+
type: AttributionType | null;
|
|
11047
11371
|
/**
|
|
11048
|
-
*
|
|
11372
|
+
* The GitHub user the session is attributed to, resolved at read time. Null when the attribution is not a GitHub user.
|
|
11049
11373
|
*/
|
|
11050
|
-
|
|
11051
|
-
|
|
11374
|
+
user: GithubAccountSnippet | null;
|
|
11375
|
+
}
|
|
11376
|
+
/**
|
|
11377
|
+
* Sometimes the GitHub API returns a user of github (can include bots)
|
|
11378
|
+
* using this snippet instead of the full GithubAccount model. One example,
|
|
11379
|
+
* is when the API returns a pull request.
|
|
11380
|
+
*
|
|
11381
|
+
* This is the least amount of info we need to represent a GitHub account.
|
|
11382
|
+
*/
|
|
11383
|
+
interface GithubAccountSnippet {
|
|
11384
|
+
avatar_url: string;
|
|
11385
|
+
id: number;
|
|
11386
|
+
login: string;
|
|
11387
|
+
type: GithubAccountType;
|
|
11388
|
+
}
|
|
11389
|
+
/**
|
|
11390
|
+
* The automation this session was started from: the definition frozen
|
|
11391
|
+
* when the session was created, and the saved automation it came from as it
|
|
11392
|
+
* exists NOW. They diverge legitimately — a YAML edit after the session
|
|
11393
|
+
* started leaves the pointer describing something the session never ran.
|
|
11394
|
+
*/
|
|
11395
|
+
interface SessionAutomation {
|
|
11396
|
+
config: AutomationConfig;
|
|
11052
11397
|
/**
|
|
11053
|
-
*
|
|
11398
|
+
* Identifier of the saved automation this session's snapshot was taken from. Null for a routing-file agent, a code-review stage agent, or the built-in mention agent, which have no saved automation behind them. Points at the automation as it exists now, which may have changed since.
|
|
11054
11399
|
*/
|
|
11055
|
-
|
|
11400
|
+
id: string | null;
|
|
11401
|
+
}
|
|
11402
|
+
/**
|
|
11403
|
+
* The automation definition the session was started from, frozen when the session was created.
|
|
11404
|
+
*/
|
|
11405
|
+
interface AutomationConfig {
|
|
11406
|
+
ellipsis: AutomationIdentity;
|
|
11407
|
+
input: InputContract | null;
|
|
11408
|
+
session: SessionConfig;
|
|
11409
|
+
trigger: (CronTrigger | ReactTrigger) | null;
|
|
11410
|
+
}
|
|
11411
|
+
/**
|
|
11412
|
+
* The Ellipsis product namespace for a config file: which schema this is
|
|
11413
|
+
* (`version`), the human-facing identity (`name`/`description`), freeform
|
|
11414
|
+
* organizational `metadata`, and whether the agent is `enabled`. The
|
|
11415
|
+
* presence of a top-level `ellipsis:` mapping is what marks a YAML file as
|
|
11416
|
+
* an Ellipsis agent config (vs arbitrary YAML that merely lives under a
|
|
11417
|
+
* config directory) — see `yaml_is_ellipsis_config`.
|
|
11418
|
+
*
|
|
11419
|
+
* `enabled` is agent behavior, not freeform metadata, so it stays inside
|
|
11420
|
+
* the config `sha` (only `metadata` is sha-excluded). Whether a session
|
|
11421
|
+
* accepts messages is a per-run choice (POST /v1/sessions `interactive`),
|
|
11422
|
+
* not a config one.
|
|
11423
|
+
*/
|
|
11424
|
+
interface AutomationIdentity {
|
|
11425
|
+
description: string | null;
|
|
11426
|
+
enabled: boolean;
|
|
11427
|
+
metadata: ConfigMetadata;
|
|
11428
|
+
name: string | null;
|
|
11429
|
+
version: string;
|
|
11430
|
+
}
|
|
11431
|
+
interface ConfigMetadata {
|
|
11432
|
+
annotations: {
|
|
11433
|
+
[k: string]: string;
|
|
11434
|
+
};
|
|
11435
|
+
labels: string[];
|
|
11436
|
+
}
|
|
11437
|
+
/**
|
|
11438
|
+
* The typed input contract: what goes INTO a session (the trigger is
|
|
11439
|
+
* when it happens; this is what goes in).
|
|
11440
|
+
*
|
|
11441
|
+
* `json_schema` types the payload a caller-started session takes
|
|
11442
|
+
* (`POST /v1/sessions` `input`, validated at the door; required when
|
|
11443
|
+
* declared). It is illegal on a react-triggered agent — react payloads are
|
|
11444
|
+
* platform-shaped (the published surface field sets), not caller-shaped.
|
|
11445
|
+
*
|
|
11446
|
+
* `message` is the initial-message template: exact `{{path}}` substitution
|
|
11447
|
+
* over the caller payload (or, on a react agent, over the surface's
|
|
11448
|
+
* published fields), no conditionals/loops/filters. Refs are validated at
|
|
11449
|
+
* deploy time against the governing field set (see AutomationConfig's
|
|
11450
|
+
* `_check_input`).
|
|
11451
|
+
*/
|
|
11452
|
+
interface InputContract {
|
|
11453
|
+
json_schema: {
|
|
11056
11454
|
[k: string]: unknown;
|
|
11057
11455
|
} | null;
|
|
11058
|
-
|
|
11456
|
+
message: string | null;
|
|
11059
11457
|
}
|
|
11060
11458
|
/**
|
|
11061
|
-
*
|
|
11459
|
+
* What one session runs on: the harness block(s), where it runs, what it
|
|
11460
|
+
* may touch, its skills, its exit contract, and its spend cap. Every session
|
|
11461
|
+
* freezes one of these (`agent_sessions.session_config`); an automation
|
|
11462
|
+
* carries one under `session:` (`AutomationConfig.session`); and
|
|
11463
|
+
* `POST /v1/sessions` is this shape flattened onto the request body, plus the
|
|
11464
|
+
* run settings. Nothing in here is an automation's identity or trigger —
|
|
11465
|
+
* those belong to `AutomationConfig`.
|
|
11466
|
+
*
|
|
11467
|
+
* Field order is the canonical key order for `session:` blocks and YAML
|
|
11468
|
+
* exports: what runs (`claude`/`codex`), where (`environment`), what it may
|
|
11469
|
+
* touch (`permissions`), then the rest.
|
|
11062
11470
|
*/
|
|
11063
|
-
interface
|
|
11064
|
-
budget:
|
|
11065
|
-
claude:
|
|
11066
|
-
codex:
|
|
11067
|
-
|
|
11068
|
-
|
|
11069
|
-
|
|
11070
|
-
|
|
11071
|
-
permissions: AgentConfigPermissions;
|
|
11072
|
-
skills: AgentConfigSkill[];
|
|
11073
|
-
trigger: (AgentConfigCronTrigger | AgentConfigReactTrigger | AgentConfigMentionTrigger) | null;
|
|
11471
|
+
interface SessionConfig {
|
|
11472
|
+
budget: BudgetConfig;
|
|
11473
|
+
claude: ClaudeConfig;
|
|
11474
|
+
codex: CodexConfig | null;
|
|
11475
|
+
environment: string | EnvironmentConfig;
|
|
11476
|
+
output: OutputConfig | null;
|
|
11477
|
+
permissions: PermissionsConfig;
|
|
11478
|
+
skills: SkillRef[];
|
|
11074
11479
|
}
|
|
11075
|
-
interface
|
|
11480
|
+
interface BudgetConfig {
|
|
11076
11481
|
day: number | null;
|
|
11077
11482
|
month: number | null;
|
|
11078
11483
|
session: number | null;
|
|
11079
11484
|
week: number | null;
|
|
11080
11485
|
}
|
|
11081
|
-
interface
|
|
11486
|
+
interface ClaudeConfig {
|
|
11082
11487
|
effort: EffortLevel | null;
|
|
11083
11488
|
fallback_model: string | null;
|
|
11084
11489
|
max_turns: number | null;
|
|
11085
11490
|
model: string | null;
|
|
11086
|
-
settings:
|
|
11087
|
-
system: string |
|
|
11491
|
+
settings: SettingsRef | null;
|
|
11492
|
+
system: string | SystemFileRef | (string | SystemFileRef)[];
|
|
11088
11493
|
}
|
|
11089
11494
|
/**
|
|
11090
11495
|
* A config-declared Claude Code settings.json, resolved at run start and
|
|
@@ -11094,25 +11499,25 @@ interface AgentConfigClaude {
|
|
|
11094
11499
|
* security setting. Lets a team point the cloud agent at the same settings file
|
|
11095
11500
|
* they already use with Claude Code locally instead of re-encoding it as YAML.
|
|
11096
11501
|
*/
|
|
11097
|
-
interface
|
|
11502
|
+
interface SettingsRef {
|
|
11098
11503
|
path: string;
|
|
11099
|
-
repository:
|
|
11504
|
+
repository: RepositoryRef | null;
|
|
11100
11505
|
}
|
|
11101
|
-
interface
|
|
11506
|
+
interface RepositoryRef {
|
|
11102
11507
|
name: string;
|
|
11103
11508
|
owner: string | null;
|
|
11104
11509
|
ref: string | null;
|
|
11105
11510
|
}
|
|
11106
|
-
interface
|
|
11511
|
+
interface SystemFileRef {
|
|
11107
11512
|
file: string;
|
|
11108
|
-
repository:
|
|
11513
|
+
repository: RepositoryRef | null;
|
|
11109
11514
|
}
|
|
11110
11515
|
/**
|
|
11111
11516
|
* The `codex:` block — run this agent on OpenAI's Codex CLI instead of
|
|
11112
11517
|
* Claude Code. Declaring the block at all is what selects the harness
|
|
11113
|
-
* (`
|
|
11518
|
+
* (`AutomationConfig.harness`).
|
|
11114
11519
|
*
|
|
11115
|
-
* Deliberately a small subset of `
|
|
11520
|
+
* Deliberately a small subset of `ClaudeConfig`: the fields omitted here
|
|
11116
11521
|
* are ones Codex has no equivalent for (`effort`, `fallback_model`,
|
|
11117
11522
|
* `settings`) or that the platform does not yet wire through for this harness
|
|
11118
11523
|
* (`max_turns`, `skills`, MCP servers). They are omitted rather than
|
|
@@ -11120,35 +11525,9 @@ interface AgentConfigSystemFileRef {
|
|
|
11120
11525
|
* config that sets one fails loudly at parse time instead of silently not doing
|
|
11121
11526
|
* it. The budget still bounds a run regardless.
|
|
11122
11527
|
*/
|
|
11123
|
-
interface
|
|
11528
|
+
interface CodexConfig {
|
|
11124
11529
|
model: string;
|
|
11125
|
-
system: string |
|
|
11126
|
-
}
|
|
11127
|
-
/**
|
|
11128
|
-
* The Ellipsis product namespace for a config file: which schema this is
|
|
11129
|
-
* (`version`), the human-facing identity (`name`/`description`), freeform
|
|
11130
|
-
* organizational `metadata`, and whether the agent is `enabled`. The
|
|
11131
|
-
* presence of a top-level `ellipsis:` mapping is what marks a YAML file as
|
|
11132
|
-
* an Ellipsis agent config (vs arbitrary YAML that merely lives under a
|
|
11133
|
-
* config directory) — see `yaml_is_ellipsis_config`.
|
|
11134
|
-
*
|
|
11135
|
-
* `enabled` is agent behavior, not freeform metadata, so it stays inside
|
|
11136
|
-
* the config `sha` (only `metadata` is sha-excluded). Whether a session
|
|
11137
|
-
* accepts messages is a per-run choice (POST /v1/sessions `interactive`),
|
|
11138
|
-
* not a config one.
|
|
11139
|
-
*/
|
|
11140
|
-
interface AgentConfigEllipsis {
|
|
11141
|
-
description: string | null;
|
|
11142
|
-
enabled: boolean;
|
|
11143
|
-
metadata: AgentConfigMetadata;
|
|
11144
|
-
name: string | null;
|
|
11145
|
-
version: string;
|
|
11146
|
-
}
|
|
11147
|
-
interface AgentConfigMetadata {
|
|
11148
|
-
annotations: {
|
|
11149
|
-
[k: string]: string;
|
|
11150
|
-
};
|
|
11151
|
-
labels: string[];
|
|
11530
|
+
system: string | SystemFileRef | (string | SystemFileRef)[];
|
|
11152
11531
|
}
|
|
11153
11532
|
/**
|
|
11154
11533
|
* Everything about the environment (the sandbox) the agent runs in: which
|
|
@@ -11163,13 +11542,13 @@ interface AgentConfigMetadata {
|
|
|
11163
11542
|
* stored variables never do. This is how a config brings in the config and
|
|
11164
11543
|
* credentials a custom CLI needs.
|
|
11165
11544
|
*/
|
|
11166
|
-
interface
|
|
11167
|
-
compute:
|
|
11168
|
-
hooks:
|
|
11169
|
-
image:
|
|
11170
|
-
mcp_servers: (string |
|
|
11171
|
-
repositories:
|
|
11172
|
-
variables:
|
|
11545
|
+
interface EnvironmentConfig {
|
|
11546
|
+
compute: ComputeConfig;
|
|
11547
|
+
hooks: EnvironmentHooks;
|
|
11548
|
+
image: EnvironmentImage;
|
|
11549
|
+
mcp_servers: (string | McpServerRef | McpStdioServer | McpRemoteServer)[];
|
|
11550
|
+
repositories: RepositoryRef[];
|
|
11551
|
+
variables: EnvironmentVariable[];
|
|
11173
11552
|
}
|
|
11174
11553
|
/**
|
|
11175
11554
|
* Sandbox compute sizing. Every field is optional; None inherits the
|
|
@@ -11193,17 +11572,17 @@ interface AgentConfigEnvironment {
|
|
|
11193
11572
|
* Compute is billed on the requested allocation over the sandbox's
|
|
11194
11573
|
* wall-clock lifetime, so a bigger/longer box costs proportionally more.
|
|
11195
11574
|
*/
|
|
11196
|
-
interface
|
|
11575
|
+
interface ComputeConfig {
|
|
11197
11576
|
cpu: number | null;
|
|
11198
|
-
memory: string |
|
|
11199
|
-
timeout: string |
|
|
11577
|
+
memory: string | MemorySize | null;
|
|
11578
|
+
timeout: string | Duration | null;
|
|
11200
11579
|
}
|
|
11201
11580
|
/**
|
|
11202
11581
|
* A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).
|
|
11203
11582
|
* Set any of `gb`/`mb` (at least one). The alternative to the `8GB`-style
|
|
11204
11583
|
* shorthand string.
|
|
11205
11584
|
*/
|
|
11206
|
-
interface
|
|
11585
|
+
interface MemorySize {
|
|
11207
11586
|
gb: number | null;
|
|
11208
11587
|
mb: number | null;
|
|
11209
11588
|
}
|
|
@@ -11212,7 +11591,7 @@ interface AgentConfigMemorySize {
|
|
|
11212
11591
|
* `seconds` (at least one). The alternative to the `30m`-style shorthand
|
|
11213
11592
|
* string wherever a duration is accepted.
|
|
11214
11593
|
*/
|
|
11215
|
-
interface
|
|
11594
|
+
interface Duration {
|
|
11216
11595
|
hours: number | null;
|
|
11217
11596
|
minutes: number | null;
|
|
11218
11597
|
seconds: number | null;
|
|
@@ -11235,7 +11614,7 @@ interface AgentConfigDuration {
|
|
|
11235
11614
|
* (baked into the cached image) instead; keep hooks for per-run work — e.g.
|
|
11236
11615
|
* anything that touches run-scoped credentials.
|
|
11237
11616
|
*/
|
|
11238
|
-
interface
|
|
11617
|
+
interface EnvironmentHooks {
|
|
11239
11618
|
post_clone: string | null;
|
|
11240
11619
|
post_start: string | null;
|
|
11241
11620
|
}
|
|
@@ -11254,7 +11633,7 @@ interface AgentConfigEnvironmentHooks {
|
|
|
11254
11633
|
* `npm install`), so later runs start with deps already on disk. Neither runs
|
|
11255
11634
|
* per run; that's `hooks.post_start` / `hooks.post_clone`.
|
|
11256
11635
|
*/
|
|
11257
|
-
interface
|
|
11636
|
+
interface EnvironmentImage {
|
|
11258
11637
|
dockerfile_append: string | null;
|
|
11259
11638
|
setup: string | null;
|
|
11260
11639
|
}
|
|
@@ -11264,10 +11643,10 @@ interface AgentConfigEnvironmentImage {
|
|
|
11264
11643
|
* server's transport and credentials. It only matters when the named
|
|
11265
11644
|
* integration is set to `opt_in` inclusion; an integration in the default
|
|
11266
11645
|
* `all_sessions` mode is added regardless. For a server the platform does not
|
|
11267
|
-
* provide, define it instead (`
|
|
11268
|
-
* `
|
|
11646
|
+
* provide, define it instead (`McpStdioServer` /
|
|
11647
|
+
* `McpRemoteServer`).
|
|
11269
11648
|
*/
|
|
11270
|
-
interface
|
|
11649
|
+
interface McpServerRef {
|
|
11271
11650
|
name: string;
|
|
11272
11651
|
}
|
|
11273
11652
|
/**
|
|
@@ -11280,7 +11659,7 @@ interface AgentConfigMcpServer {
|
|
|
11280
11659
|
* account's secrets store (see `mcp_secret_refs`); everything else is passed
|
|
11281
11660
|
* literally.
|
|
11282
11661
|
*/
|
|
11283
|
-
interface
|
|
11662
|
+
interface McpStdioServer {
|
|
11284
11663
|
args: string[];
|
|
11285
11664
|
command: string;
|
|
11286
11665
|
env: {
|
|
@@ -11294,7 +11673,7 @@ interface AgentConfigMcpStdioServer {
|
|
|
11294
11673
|
* `Authorization: Bearer ${TOKEN}`); values may embed `${NAME}` secret
|
|
11295
11674
|
* references, resolved at run time from the account's secrets store.
|
|
11296
11675
|
*/
|
|
11297
|
-
interface
|
|
11676
|
+
interface McpRemoteServer {
|
|
11298
11677
|
headers: {
|
|
11299
11678
|
[k: string]: string;
|
|
11300
11679
|
};
|
|
@@ -11311,37 +11690,16 @@ interface AgentConfigMcpRemoteServer {
|
|
|
11311
11690
|
* ever putting it in the config file. Either way the variable only reaches
|
|
11312
11691
|
* agents that name it.
|
|
11313
11692
|
*/
|
|
11314
|
-
interface
|
|
11693
|
+
interface EnvironmentVariable {
|
|
11315
11694
|
name: string;
|
|
11316
11695
|
value: string | null;
|
|
11317
11696
|
}
|
|
11318
|
-
/**
|
|
11319
|
-
* The typed input contract: what goes INTO a session (the trigger is
|
|
11320
|
-
* when it happens; this is what goes in).
|
|
11321
|
-
*
|
|
11322
|
-
* `json_schema` types the payload a caller-started session takes
|
|
11323
|
-
* (`POST /v1/sessions` `input`, validated at the door; required when
|
|
11324
|
-
* declared). It is illegal on a react-triggered agent — react payloads are
|
|
11325
|
-
* platform-shaped (the published surface field sets), not caller-shaped.
|
|
11326
|
-
*
|
|
11327
|
-
* `message` is the initial-message template: exact `{{path}}` substitution
|
|
11328
|
-
* over the caller payload (or, on a react agent, over the surface's
|
|
11329
|
-
* published fields), no conditionals/loops/filters. Refs are validated at
|
|
11330
|
-
* deploy time against the governing field set (see AgentConfig's
|
|
11331
|
-
* `_check_input`).
|
|
11332
|
-
*/
|
|
11333
|
-
interface AgentConfigInput {
|
|
11334
|
-
json_schema: {
|
|
11335
|
-
[k: string]: unknown;
|
|
11336
|
-
} | null;
|
|
11337
|
-
message: string | null;
|
|
11338
|
-
}
|
|
11339
11697
|
/**
|
|
11340
11698
|
* The typed output contract: the JSON Schema the agent must exit through
|
|
11341
11699
|
* (the StructuredOutput exit tool). Read back via
|
|
11342
11700
|
* GET /v1/sessions/{id}/output.
|
|
11343
11701
|
*/
|
|
11344
|
-
interface
|
|
11702
|
+
interface OutputConfig {
|
|
11345
11703
|
json_schema: {
|
|
11346
11704
|
[k: string]: unknown;
|
|
11347
11705
|
};
|
|
@@ -11355,16 +11713,16 @@ interface AgentConfigOutput {
|
|
|
11355
11713
|
* (`ELLIPSIS_API_TOKEN`, what the in-sandbox `agent` CLI authenticates
|
|
11356
11714
|
* with). `true` / the string `all` (the default) grant the full sandbox
|
|
11357
11715
|
* ceiling — everything a sandbox token can ever do. A map narrows it per
|
|
11358
|
-
* resource (see `
|
|
11716
|
+
* resource (see `EllipsisPermissions`); the minted token carries
|
|
11359
11717
|
* the intersection, so a config can only ever reduce access. `false` fails
|
|
11360
11718
|
* validation — an agent with no API token cannot report its own progress.
|
|
11361
11719
|
*
|
|
11362
11720
|
* `github` scopes the sandbox's GitHub installation token (`GH_TOKEN`) —
|
|
11363
|
-
* see `
|
|
11721
|
+
* see `GithubPermissions`. GitHub enforces it at mint time.
|
|
11364
11722
|
*/
|
|
11365
|
-
interface
|
|
11366
|
-
ellipsis: (true | 'all') |
|
|
11367
|
-
github:
|
|
11723
|
+
interface PermissionsConfig {
|
|
11724
|
+
ellipsis: (true | 'all') | EllipsisPermissions;
|
|
11725
|
+
github: GithubPermissions;
|
|
11368
11726
|
}
|
|
11369
11727
|
/**
|
|
11370
11728
|
* `permissions.ellipsis` as a map: resource → level | grant | list of
|
|
@@ -11373,7 +11731,7 @@ interface AgentConfigPermissions {
|
|
|
11373
11731
|
* intersected with the platform's sandbox ceiling at token mint — it can
|
|
11374
11732
|
* narrow what a sandbox token may do, never exceed it.
|
|
11375
11733
|
*/
|
|
11376
|
-
interface
|
|
11734
|
+
interface EllipsisPermissions {
|
|
11377
11735
|
[k: string]: Level | EllipsisGrant | (Level | EllipsisGrant)[];
|
|
11378
11736
|
}
|
|
11379
11737
|
/**
|
|
@@ -11402,7 +11760,7 @@ interface EllipsisGrant {
|
|
|
11402
11760
|
* minted with the reduced scope, so nothing running in the sandbox can
|
|
11403
11761
|
* exceed it.
|
|
11404
11762
|
*/
|
|
11405
|
-
interface
|
|
11763
|
+
interface GithubPermissions {
|
|
11406
11764
|
permissions: 'read_only' | {
|
|
11407
11765
|
[k: string]: string;
|
|
11408
11766
|
} | null;
|
|
@@ -11417,15 +11775,15 @@ interface AgentConfigGithubPermissions {
|
|
|
11417
11775
|
* Skills under a cloned repo's own `.claude/skills/` load by themselves and
|
|
11418
11776
|
* don't need an entry here.
|
|
11419
11777
|
*/
|
|
11420
|
-
interface
|
|
11778
|
+
interface SkillRef {
|
|
11421
11779
|
path: string;
|
|
11422
|
-
repository:
|
|
11780
|
+
repository: RepositoryRef | null;
|
|
11423
11781
|
}
|
|
11424
|
-
interface
|
|
11782
|
+
interface CronTrigger {
|
|
11425
11783
|
schedule: string;
|
|
11426
11784
|
type: 'cron';
|
|
11427
11785
|
}
|
|
11428
|
-
interface
|
|
11786
|
+
interface ReactTrigger {
|
|
11429
11787
|
issue: ReactIssue | null;
|
|
11430
11788
|
linear_issue: ReactLinearIssue | null;
|
|
11431
11789
|
pull_request: ReactPullRequest | null;
|
|
@@ -11477,40 +11835,6 @@ interface ReactSentry {
|
|
|
11477
11835
|
}
|
|
11478
11836
|
interface ReactSlackChannel {
|
|
11479
11837
|
}
|
|
11480
|
-
interface AgentConfigMentionTrigger {
|
|
11481
|
-
platforms: AgentConfigMentionPlatform[];
|
|
11482
|
-
type: 'mention';
|
|
11483
|
-
}
|
|
11484
|
-
/**
|
|
11485
|
-
* The principal this session is attributed to.
|
|
11486
|
-
*/
|
|
11487
|
-
interface SessionAttribution {
|
|
11488
|
-
/**
|
|
11489
|
-
* Identifier of the principal the session is attributed to.
|
|
11490
|
-
*/
|
|
11491
|
-
id: string | null;
|
|
11492
|
-
/**
|
|
11493
|
-
* Kind of principal the session is attributed to (e.g. a GitHub user or an API key).
|
|
11494
|
-
*/
|
|
11495
|
-
type: AttributionType | null;
|
|
11496
|
-
/**
|
|
11497
|
-
* The GitHub user the session is attributed to, resolved at read time. Null when the attribution is not a GitHub user.
|
|
11498
|
-
*/
|
|
11499
|
-
user: GithubAccountSnippet | null;
|
|
11500
|
-
}
|
|
11501
|
-
/**
|
|
11502
|
-
* Sometimes the GitHub API returns a user of github (can include bots)
|
|
11503
|
-
* using this snippet instead of the full GithubAccount model. One example,
|
|
11504
|
-
* is when the API returns a pull request.
|
|
11505
|
-
*
|
|
11506
|
-
* This is the least amount of info we need to represent a GitHub account.
|
|
11507
|
-
*/
|
|
11508
|
-
interface GithubAccountSnippet {
|
|
11509
|
-
avatar_url: string;
|
|
11510
|
-
id: number;
|
|
11511
|
-
login: string;
|
|
11512
|
-
type: GithubAccountType;
|
|
11513
|
-
}
|
|
11514
11838
|
/**
|
|
11515
11839
|
* The spend budget enforced for this session.
|
|
11516
11840
|
*/
|
|
@@ -11521,6 +11845,18 @@ interface SessionBudget {
|
|
|
11521
11845
|
cents: number;
|
|
11522
11846
|
source: BudgetSource;
|
|
11523
11847
|
}
|
|
11848
|
+
/**
|
|
11849
|
+
* What the session ran on, frozen when it was created: the harness block, the resolved environment, permissions, skills, output contract, and budget.
|
|
11850
|
+
*/
|
|
11851
|
+
interface SessionConfig1 {
|
|
11852
|
+
budget: BudgetConfig;
|
|
11853
|
+
claude: ClaudeConfig;
|
|
11854
|
+
codex: CodexConfig | null;
|
|
11855
|
+
environment: string | EnvironmentConfig;
|
|
11856
|
+
output: OutputConfig | null;
|
|
11857
|
+
permissions: PermissionsConfig;
|
|
11858
|
+
skills: SkillRef[];
|
|
11859
|
+
}
|
|
11524
11860
|
/**
|
|
11525
11861
|
* What the session cost, in millicents, broken down by leg and carrying its own total.
|
|
11526
11862
|
*/
|
|
@@ -11547,7 +11883,7 @@ interface SessionCost {
|
|
|
11547
11883
|
total: number;
|
|
11548
11884
|
}
|
|
11549
11885
|
/**
|
|
11550
|
-
* The environment the session resolved: the saved environment's id and how it was chosen. The environment's frozen body is
|
|
11886
|
+
* The environment the session resolved: the saved environment's id and how it was chosen. The environment's frozen body is `config.environment`.
|
|
11551
11887
|
*/
|
|
11552
11888
|
interface SessionEnvironment {
|
|
11553
11889
|
/**
|
|
@@ -12208,9 +12544,13 @@ interface SessionFrame {
|
|
|
12208
12544
|
* The session's current state.
|
|
12209
12545
|
*/
|
|
12210
12546
|
interface Session1 {
|
|
12211
|
-
agent: SessionAgent;
|
|
12212
12547
|
attribution: SessionAttribution;
|
|
12548
|
+
/**
|
|
12549
|
+
* The automation the session was started from, or null for a raw session started with POST /v1/sessions.
|
|
12550
|
+
*/
|
|
12551
|
+
automation: SessionAutomation | null;
|
|
12213
12552
|
budget: SessionBudget;
|
|
12553
|
+
config: SessionConfig1;
|
|
12214
12554
|
/**
|
|
12215
12555
|
* The "owner/name" repository context the session was started in, if any.
|
|
12216
12556
|
*/
|
|
@@ -12375,4 +12715,4 @@ type ReviewRequester = components['schemas']['ReviewRequester'];
|
|
|
12375
12715
|
type ReviewFinding = components['schemas']['ReviewFinding'];
|
|
12376
12716
|
type Finding = ReviewFinding;
|
|
12377
12717
|
|
|
12378
|
-
export type {
|
|
12718
|
+
export type { SessionStatus as $, AttributionType as A, BudgetSource as B, ClaudeSessionRecord as C, DeltaFrame as D, ErrorFrame as E, Finding as F, GithubAccountSnippet as G, Harness as H, SendSessionMessageRequest as I, Session as J, SessionExitStatus as K, LifecycleSessionRecord as L, SessionFrame as M, SessionGit as N, SessionLiveness as O, ParentKind as P, SessionMessage as Q, RecordsAppendFrame as R, SdkAssistantRecord as S, SessionMessageResponse as T, SessionMessageStatus as U, SessionPrompting as V, SessionRecord as W, SessionRecordsListResponse as X, SessionResponse as Y, SessionSource as Z, SessionState as _, CodexEvent as a, SessionStreamFrame as a0, SessionSurface as a1, SessionsListResponse as a2, SnapshotFrame as a3, StreamFrame as a4, TokensInfo as a5, paths as a6, CodexFileChangeItem as a7, CodexMcpToolCallItem as a8, CodexItem as b, components as c, CodexSessionRecord as d, CreateReviewRequest as e, DoneFrame as f, GithubAccountType as g, HeartbeatFrame as h, PromptBlockedReason as i, ResolvedReviewScope as j, Review as k, ReviewConfiguration as l, ReviewCounters as m, ReviewFinding as n, ReviewRequester as o, ReviewScope as p, ReviewScopeKind as q, ReviewStage as r, ReviewedCommit as s, ReviewsListResponse as t, SdkContentBlock as u, SdkRateLimitRecord as v, SdkRecord as w, SdkResultRecord as x, SdkSystemRecord as y, SdkUserRecord as z };
|