@ellipsis-dev/sdk 0.21.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 +66 -21
- package/dist/index.js +64 -7
- package/dist/store/index.d.ts +1 -1
- package/dist/stream/index.d.ts +1 -1
- package/dist/{types-DXHI6EPF.d.ts → types-DJzmFABi.d.ts} +1359 -894
- package/package.json +1 -1
- package/schema/frames.schema.json +1301 -1302
- package/schema/openapi.v1.json +1976 -1441
|
@@ -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;
|
|
@@ -742,6 +768,33 @@ interface paths {
|
|
|
742
768
|
patch?: never;
|
|
743
769
|
trace?: never;
|
|
744
770
|
};
|
|
771
|
+
'/v1/models': {
|
|
772
|
+
parameters: {
|
|
773
|
+
query?: never;
|
|
774
|
+
header?: never;
|
|
775
|
+
path?: never;
|
|
776
|
+
cookie?: never;
|
|
777
|
+
};
|
|
778
|
+
/**
|
|
779
|
+
* List Supported Models
|
|
780
|
+
* @description List selectable agent models.
|
|
781
|
+
*
|
|
782
|
+
* Most expensive first, with the platform default flagged.
|
|
783
|
+
*
|
|
784
|
+
* Reads the same registry as the dashboard's rate table, so a
|
|
785
|
+
* client's model picker can never drift from what's offered.
|
|
786
|
+
* Behind auth but not account-scoped — the selectable set is
|
|
787
|
+
* global.
|
|
788
|
+
*/
|
|
789
|
+
get: operations['list_supported_models'];
|
|
790
|
+
put?: never;
|
|
791
|
+
post?: never;
|
|
792
|
+
delete?: never;
|
|
793
|
+
options?: never;
|
|
794
|
+
head?: never;
|
|
795
|
+
patch?: never;
|
|
796
|
+
trace?: never;
|
|
797
|
+
};
|
|
745
798
|
'/v1/reviews': {
|
|
746
799
|
parameters: {
|
|
747
800
|
query?: never;
|
|
@@ -753,7 +806,9 @@ interface paths {
|
|
|
753
806
|
* List Reviews
|
|
754
807
|
* @description List code reviews, newest first.
|
|
755
808
|
*
|
|
756
|
-
* `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.
|
|
757
812
|
*
|
|
758
813
|
* Webhook-created reviews appear here too, so this answers "show
|
|
759
814
|
* me every review on this PR".
|
|
@@ -764,9 +819,10 @@ interface paths {
|
|
|
764
819
|
* Create Review
|
|
765
820
|
* @description Run a code review on demand.
|
|
766
821
|
*
|
|
767
|
-
* Reviews an
|
|
768
|
-
*
|
|
769
|
-
*
|
|
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.
|
|
770
826
|
*
|
|
771
827
|
* A review is one pipeline run over one commit range, with one
|
|
772
828
|
* agent session per stage: `review.id` is the run id, and
|
|
@@ -885,7 +941,7 @@ interface paths {
|
|
|
885
941
|
* @description Start a cloud agent session.
|
|
886
942
|
*
|
|
887
943
|
* The daily driver: a prompt, optionally where to run it
|
|
888
|
-
* (`environment`) and the run's own settings, in the
|
|
944
|
+
* (`environment`) and the run's own settings, in the AutomationConfig
|
|
889
945
|
* vocabulary. Anything omitted comes from the organization's
|
|
890
946
|
* settings — default model, default environment, budget — so
|
|
891
947
|
* `{"prompt": "..."}` alone is a complete request. `prompt` is the
|
|
@@ -928,6 +984,32 @@ interface paths {
|
|
|
928
984
|
patch?: never;
|
|
929
985
|
trace?: never;
|
|
930
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
|
+
};
|
|
931
1013
|
'/v1/sessions/{session_id}/export': {
|
|
932
1014
|
parameters: {
|
|
933
1015
|
query?: never;
|
|
@@ -1159,625 +1241,30 @@ interface paths {
|
|
|
1159
1241
|
head?: never;
|
|
1160
1242
|
patch?: never;
|
|
1161
1243
|
trace?: never;
|
|
1162
|
-
};
|
|
1163
|
-
'/v1/usage': {
|
|
1164
|
-
parameters: {
|
|
1165
|
-
query?: never;
|
|
1166
|
-
header?: never;
|
|
1167
|
-
path?: never;
|
|
1168
|
-
cookie?: never;
|
|
1169
|
-
};
|
|
1170
|
-
/**
|
|
1171
|
-
* Get Usage
|
|
1172
|
-
* @description Return the caller's usage dashboard data.
|
|
1173
|
-
*/
|
|
1174
|
-
get: operations['get_usage_endpoint'];
|
|
1175
|
-
put?: never;
|
|
1176
|
-
post?: never;
|
|
1177
|
-
delete?: never;
|
|
1178
|
-
options?: never;
|
|
1179
|
-
head?: never;
|
|
1180
|
-
patch?: never;
|
|
1181
|
-
trace?: never;
|
|
1182
|
-
};
|
|
1183
|
-
}
|
|
1184
|
-
interface components {
|
|
1185
|
-
schemas: {
|
|
1186
|
-
/** AgentConfig */
|
|
1187
|
-
AgentConfig: {
|
|
1188
|
-
/** @default {} */
|
|
1189
|
-
budget: components['schemas']['AgentConfigBudget'];
|
|
1190
|
-
/**
|
|
1191
|
-
* @default {
|
|
1192
|
-
* "system": ""
|
|
1193
|
-
* }
|
|
1194
|
-
*/
|
|
1195
|
-
claude: components['schemas']['AgentConfigClaude'];
|
|
1196
|
-
codex?: components['schemas']['AgentConfigCodex'] | null;
|
|
1197
|
-
/**
|
|
1198
|
-
* @default {
|
|
1199
|
-
* "enabled": true,
|
|
1200
|
-
* "metadata": {
|
|
1201
|
-
* "annotations": {},
|
|
1202
|
-
* "labels": []
|
|
1203
|
-
* },
|
|
1204
|
-
* "version": "v1"
|
|
1205
|
-
* }
|
|
1206
|
-
*/
|
|
1207
|
-
ellipsis: components['schemas']['AgentConfigEllipsis'];
|
|
1208
|
-
/**
|
|
1209
|
-
* Environment
|
|
1210
|
-
* @default {
|
|
1211
|
-
* "compute": {},
|
|
1212
|
-
* "hooks": {},
|
|
1213
|
-
* "image": {},
|
|
1214
|
-
* "mcp_servers": [],
|
|
1215
|
-
* "repositories": [],
|
|
1216
|
-
* "variables": []
|
|
1217
|
-
* }
|
|
1218
|
-
*/
|
|
1219
|
-
environment: string | components['schemas']['AgentConfigEnvironment'];
|
|
1220
|
-
input?: components['schemas']['AgentConfigInput'] | null;
|
|
1221
|
-
output?: components['schemas']['AgentConfigOutput'] | null;
|
|
1222
|
-
/**
|
|
1223
|
-
* @default {
|
|
1224
|
-
* "ellipsis": true,
|
|
1225
|
-
* "github": {}
|
|
1226
|
-
* }
|
|
1227
|
-
*/
|
|
1228
|
-
permissions: components['schemas']['AgentConfigPermissions'];
|
|
1229
|
-
/**
|
|
1230
|
-
* Skills
|
|
1231
|
-
* @default []
|
|
1232
|
-
*/
|
|
1233
|
-
skills: components['schemas']['AgentConfigSkill'][];
|
|
1234
|
-
/** Trigger */
|
|
1235
|
-
trigger?: (components['schemas']['AgentConfigCronTrigger'] | components['schemas']['AgentConfigReactTrigger'] | components['schemas']['AgentConfigMentionTrigger']) | null;
|
|
1236
|
-
};
|
|
1237
|
-
/** AgentConfigBudget */
|
|
1238
|
-
AgentConfigBudget: {
|
|
1239
|
-
/** Day */
|
|
1240
|
-
day?: number | null;
|
|
1241
|
-
/** Month */
|
|
1242
|
-
month?: number | null;
|
|
1243
|
-
/** Session */
|
|
1244
|
-
session?: number | null;
|
|
1245
|
-
/** Week */
|
|
1246
|
-
week?: number | null;
|
|
1247
|
-
};
|
|
1248
|
-
/** AgentConfigClaude */
|
|
1249
|
-
AgentConfigClaude: {
|
|
1250
|
-
effort?: components['schemas']['EffortLevel'] | null;
|
|
1251
|
-
/** Fallback Model */
|
|
1252
|
-
fallback_model?: string | null;
|
|
1253
|
-
/** Max Turns */
|
|
1254
|
-
max_turns?: number | null;
|
|
1255
|
-
/** Model */
|
|
1256
|
-
model?: string | null;
|
|
1257
|
-
settings?: components['schemas']['AgentConfigSettingsRef'] | null;
|
|
1258
|
-
/**
|
|
1259
|
-
* System
|
|
1260
|
-
* @default
|
|
1261
|
-
*/
|
|
1262
|
-
system: string | components['schemas']['AgentConfigSystemFileRef'] | (string | components['schemas']['AgentConfigSystemFileRef'])[];
|
|
1263
|
-
};
|
|
1264
|
-
/**
|
|
1265
|
-
* AgentConfigCodex
|
|
1266
|
-
* @description The `codex:` block — run this agent on OpenAI's Codex CLI instead of
|
|
1267
|
-
* Claude Code. Declaring the block at all is what selects the harness
|
|
1268
|
-
* (`AgentConfig.harness`).
|
|
1269
|
-
*
|
|
1270
|
-
* Deliberately a small subset of `AgentConfigClaude`: the fields omitted here
|
|
1271
|
-
* are ones Codex has no equivalent for (`effort`, `fallback_model`,
|
|
1272
|
-
* `settings`) or that the platform does not yet wire through for this harness
|
|
1273
|
-
* (`max_turns`, `skills`, MCP servers). They are omitted rather than
|
|
1274
|
-
* accepted-and-ignored, because `StrictConfigModel` forbids extra keys — so a
|
|
1275
|
-
* config that sets one fails loudly at parse time instead of silently not doing
|
|
1276
|
-
* it. The budget still bounds a run regardless.
|
|
1277
|
-
*/
|
|
1278
|
-
AgentConfigCodex: {
|
|
1279
|
-
/**
|
|
1280
|
-
* Model
|
|
1281
|
-
* @default gpt-5.6-terra
|
|
1282
|
-
*/
|
|
1283
|
-
model: string;
|
|
1284
|
-
/**
|
|
1285
|
-
* System
|
|
1286
|
-
* @default
|
|
1287
|
-
*/
|
|
1288
|
-
system: string | components['schemas']['AgentConfigSystemFileRef'] | (string | components['schemas']['AgentConfigSystemFileRef'])[];
|
|
1289
|
-
};
|
|
1290
|
-
/**
|
|
1291
|
-
* AgentConfigCompute
|
|
1292
|
-
* @description Sandbox compute sizing. Every field is optional; None inherits the
|
|
1293
|
-
* platform default (1 vCPU / 4096 MiB / 3600s — see DEFAULT_MODAL_* in
|
|
1294
|
-
* models/ellipsis/sandboxes/sandbox.py). A resolved value outside the platform
|
|
1295
|
-
* bounds fails validation loudly (a sync error on the config) rather than
|
|
1296
|
-
* being clamped silently.
|
|
1297
|
-
*
|
|
1298
|
-
* `memory` and `timeout` each accept a shorthand string ("8GB", "30m") or an
|
|
1299
|
-
* explicit units object ({gb: 8}, {minutes: 30}); the `memory_mib` /
|
|
1300
|
-
* `timeout_seconds` properties resolve either form to the canonical integer
|
|
1301
|
-
* the sandbox driver consumes.
|
|
1302
|
-
*
|
|
1303
|
-
* `timeout` is the max wall-clock the agent may run before the sandbox is
|
|
1304
|
-
* killed, capped at 1h (MAX_SANDBOX_TIMEOUT_SECONDS — equal to the default, so
|
|
1305
|
-
* today the knob only shortens a session; the cap matches the 1-hour validity
|
|
1306
|
-
* of the sandbox's GitHub token). The worker's lease/visibility heartbeat
|
|
1307
|
-
* ceiling is derived from that cap, so a run at the max stays owned by its
|
|
1308
|
-
* worker for its whole life.
|
|
1309
|
-
*
|
|
1310
|
-
* Compute is billed on the requested allocation over the sandbox's
|
|
1311
|
-
* wall-clock lifetime, so a bigger/longer box costs proportionally more.
|
|
1312
|
-
*/
|
|
1313
|
-
AgentConfigCompute: {
|
|
1314
|
-
/** Cpu */
|
|
1315
|
-
cpu?: number | null;
|
|
1316
|
-
/** Memory */
|
|
1317
|
-
memory?: string | components['schemas']['AgentConfigMemorySize'] | null;
|
|
1318
|
-
/** Timeout */
|
|
1319
|
-
timeout?: string | components['schemas']['AgentConfigDuration'] | null;
|
|
1320
|
-
};
|
|
1321
|
-
/** AgentConfigCronTrigger */
|
|
1322
|
-
AgentConfigCronTrigger: {
|
|
1323
|
-
/** Schedule */
|
|
1324
|
-
schedule: string;
|
|
1325
|
-
/**
|
|
1326
|
-
* @description discriminator enum property added by openapi-typescript
|
|
1327
|
-
* @enum {string}
|
|
1328
|
-
*/
|
|
1329
|
-
type: 'cron';
|
|
1330
|
-
};
|
|
1331
|
-
/**
|
|
1332
|
-
* AgentConfigDuration
|
|
1333
|
-
* @description A duration as explicit units, summed. Set any of `hours`/`minutes`/
|
|
1334
|
-
* `seconds` (at least one). The alternative to the `30m`-style shorthand
|
|
1335
|
-
* string wherever a duration is accepted.
|
|
1336
|
-
*/
|
|
1337
|
-
AgentConfigDuration: {
|
|
1338
|
-
/** Hours */
|
|
1339
|
-
hours?: number | null;
|
|
1340
|
-
/** Minutes */
|
|
1341
|
-
minutes?: number | null;
|
|
1342
|
-
/** Seconds */
|
|
1343
|
-
seconds?: number | null;
|
|
1344
|
-
};
|
|
1345
|
-
/**
|
|
1346
|
-
* AgentConfigEllipsis
|
|
1347
|
-
* @description The Ellipsis product namespace for a config file: which schema this is
|
|
1348
|
-
* (`version`), the human-facing identity (`name`/`description`), freeform
|
|
1349
|
-
* organizational `metadata`, and whether the agent is `enabled`. The
|
|
1350
|
-
* presence of a top-level `ellipsis:` mapping is what marks a YAML file as
|
|
1351
|
-
* an Ellipsis agent config (vs arbitrary YAML that merely lives under a
|
|
1352
|
-
* config directory) — see `yaml_is_ellipsis_config`.
|
|
1353
|
-
*
|
|
1354
|
-
* `enabled` is agent behavior, not freeform metadata, so it stays inside
|
|
1355
|
-
* the config `sha` (only `metadata` is sha-excluded). Whether a session
|
|
1356
|
-
* accepts messages is a per-run choice (POST /v1/sessions `interactive`),
|
|
1357
|
-
* not a config one.
|
|
1358
|
-
*/
|
|
1359
|
-
AgentConfigEllipsis: {
|
|
1360
|
-
/** Description */
|
|
1361
|
-
description?: string | null;
|
|
1362
|
-
/**
|
|
1363
|
-
* Enabled
|
|
1364
|
-
* @default true
|
|
1365
|
-
*/
|
|
1366
|
-
enabled: boolean;
|
|
1367
|
-
/**
|
|
1368
|
-
* @default {
|
|
1369
|
-
* "annotations": {},
|
|
1370
|
-
* "labels": []
|
|
1371
|
-
* }
|
|
1372
|
-
*/
|
|
1373
|
-
metadata: components['schemas']['AgentConfigMetadata'];
|
|
1374
|
-
/** Name */
|
|
1375
|
-
name?: string | null;
|
|
1376
|
-
/**
|
|
1377
|
-
* Version
|
|
1378
|
-
* @default v1
|
|
1379
|
-
*/
|
|
1380
|
-
version: string;
|
|
1381
|
-
};
|
|
1382
|
-
/**
|
|
1383
|
-
* AgentConfigEllipsisPermissions
|
|
1384
|
-
* @description `permissions.ellipsis` as a map: resource → level | grant | list of
|
|
1385
|
-
* grants. Levels are hierarchical (read < write < delete), so `write`
|
|
1386
|
-
* includes `read`. An unlisted resource is denied. The whole block is
|
|
1387
|
-
* intersected with the platform's sandbox ceiling at token mint — it can
|
|
1388
|
-
* narrow what a sandbox token may do, never exceed it.
|
|
1389
|
-
*/
|
|
1390
|
-
AgentConfigEllipsisPermissions: {
|
|
1391
|
-
[key: string]: components['schemas']['Level'] | components['schemas']['EllipsisGrant'] | (components['schemas']['Level'] | components['schemas']['EllipsisGrant'])[];
|
|
1392
|
-
};
|
|
1393
|
-
/**
|
|
1394
|
-
* AgentConfigEnvironment
|
|
1395
|
-
* @description Everything about the environment (the sandbox) the agent runs in: which
|
|
1396
|
-
* `repositories` are cloned into it, which environment `variables` it gets,
|
|
1397
|
-
* its `compute` sizing, how its `image` is customized, and lifecycle `hooks`.
|
|
1398
|
-
* What the agent may *do* from that environment is the top-level
|
|
1399
|
-
* `permissions:` block, not this one.
|
|
1400
|
-
*
|
|
1401
|
-
* Each `variables` entry names a variable to inject; with an inline `value` it
|
|
1402
|
-
* is hardcoded, without one it is resolved from the account's sandbox-secrets
|
|
1403
|
-
* store. Only the named variables reach this agent; the rest of the account's
|
|
1404
|
-
* stored variables never do. This is how a config brings in the config and
|
|
1405
|
-
* credentials a custom CLI needs.
|
|
1406
|
-
*/
|
|
1407
|
-
AgentConfigEnvironment: {
|
|
1408
|
-
/** @default {} */
|
|
1409
|
-
compute: components['schemas']['AgentConfigCompute'];
|
|
1410
|
-
/** @default {} */
|
|
1411
|
-
hooks: components['schemas']['AgentConfigEnvironmentHooks'];
|
|
1412
|
-
/** @default {} */
|
|
1413
|
-
image: components['schemas']['AgentConfigEnvironmentImage'];
|
|
1414
|
-
/**
|
|
1415
|
-
* Mcp Servers
|
|
1416
|
-
* @default []
|
|
1417
|
-
*/
|
|
1418
|
-
mcp_servers: (string | components['schemas']['AgentConfigMcpServer'] | components['schemas']['AgentConfigMcpStdioServer'] | components['schemas']['AgentConfigMcpRemoteServer'])[];
|
|
1419
|
-
/**
|
|
1420
|
-
* Repositories
|
|
1421
|
-
* @default []
|
|
1422
|
-
*/
|
|
1423
|
-
repositories: components['schemas']['AgentConfigRepository'][];
|
|
1424
|
-
/**
|
|
1425
|
-
* Variables
|
|
1426
|
-
* @default []
|
|
1427
|
-
*/
|
|
1428
|
-
variables: components['schemas']['AgentConfigEnvironmentVariable'][];
|
|
1429
|
-
};
|
|
1430
|
-
/**
|
|
1431
|
-
* AgentConfigEnvironmentHooks
|
|
1432
|
-
* @description Shell scripts run at points in the sandbox lifecycle, each as the sandbox
|
|
1433
|
-
* user with the sandbox's environment variables available. A non-zero exit
|
|
1434
|
-
* fails the run (exit_status = LIFECYCLE_HOOK_FAILED) and is not retried.
|
|
1435
|
-
*
|
|
1436
|
-
* `post_start` runs after the container starts, before any repo is cloned —
|
|
1437
|
-
* repo-independent setup (authenticate a CLI, e.g. `doppler setup`). On Modal
|
|
1438
|
-
* the repo is baked into the image so it is incidentally present, but
|
|
1439
|
-
* `post_start` must not depend on repo contents (that's `post_clone`).
|
|
1440
|
-
*
|
|
1441
|
-
* `post_clone` runs after all repos are cloned/checked out, before the agent —
|
|
1442
|
-
* repo-dependent setup (`pip install -r requirements.txt`, codegen).
|
|
1443
|
-
*
|
|
1444
|
-
* Hooks run on every run and their output is never cached. A dependency
|
|
1445
|
-
* install whose result should be reused across runs belongs in `image.setup`
|
|
1446
|
-
* (baked into the cached image) instead; keep hooks for per-run work — e.g.
|
|
1447
|
-
* anything that touches run-scoped credentials.
|
|
1448
|
-
*/
|
|
1449
|
-
AgentConfigEnvironmentHooks: {
|
|
1450
|
-
/** Post Clone */
|
|
1451
|
-
post_clone?: string | null;
|
|
1452
|
-
/** Post Start */
|
|
1453
|
-
post_start?: string | null;
|
|
1454
|
-
};
|
|
1455
|
-
/**
|
|
1456
|
-
* AgentConfigEnvironmentImage
|
|
1457
|
-
* @description How to customize the container image the agent runs in. You
|
|
1458
|
-
* contribute appended layers (`dockerfile_append`) and a build-time script
|
|
1459
|
-
* (`setup`) only — Ellipsis owns FROM / base tooling / entrypoint / user.
|
|
1460
|
-
* Today only inline bodies are supported; a file reference (resolved at the
|
|
1461
|
-
* run's SHA) will come later.
|
|
1462
|
-
*
|
|
1463
|
-
* The split: `dockerfile_append` runs when the image is assembled, before any
|
|
1464
|
-
* repo exists — toolchain installs (a package manager binary, apt packages).
|
|
1465
|
-
* `setup` runs at image-build time *after* the configured repositories are
|
|
1466
|
-
* checked out, and its output is captured by the filesystem snapshot that
|
|
1467
|
-
* becomes the cached image — dependency installs (`poetry install`,
|
|
1468
|
-
* `npm install`), so later runs start with deps already on disk. Neither runs
|
|
1469
|
-
* per run; that's `hooks.post_start` / `hooks.post_clone`.
|
|
1470
|
-
*/
|
|
1471
|
-
AgentConfigEnvironmentImage: {
|
|
1472
|
-
/** Dockerfile Append */
|
|
1473
|
-
dockerfile_append?: string | null;
|
|
1474
|
-
/** Setup */
|
|
1475
|
-
setup?: string | null;
|
|
1476
|
-
};
|
|
1477
|
-
/**
|
|
1478
|
-
* AgentConfigEnvironmentVariable
|
|
1479
|
-
* @description One environment variable injected into the agent's sandbox.
|
|
1480
|
-
*
|
|
1481
|
-
* `value`, when set, is a literal injected as-is — use it for non-secret
|
|
1482
|
-
* config (LOG_LEVEL, an API base URL). When `value` is omitted the value is
|
|
1483
|
-
* resolved at run time from the account's sandbox-secrets store (dashboard
|
|
1484
|
-
* / `PUT /v1/secrets`) by `name`, so a secret can be injected without
|
|
1485
|
-
* ever putting it in the config file. Either way the variable only reaches
|
|
1486
|
-
* agents that name it.
|
|
1487
|
-
*/
|
|
1488
|
-
AgentConfigEnvironmentVariable: {
|
|
1489
|
-
/** Name */
|
|
1490
|
-
name: string;
|
|
1491
|
-
/** Value */
|
|
1492
|
-
value?: string | null;
|
|
1493
|
-
};
|
|
1494
|
-
/**
|
|
1495
|
-
* AgentConfigGithubPermissions
|
|
1496
|
-
* @description The agent's GitHub access: the scope of the installation token minted for
|
|
1497
|
-
* its sandbox — the credential `git`, `gh`, and the GitHub MCP server
|
|
1498
|
-
* authenticate with.
|
|
1499
|
-
*
|
|
1500
|
-
* By default the token carries the installation's full permissions on all of
|
|
1501
|
-
* the installation's repositories. `permissions` narrows what it may do:
|
|
1502
|
-
* the string `read_only` grants read access to contents, issues, metadata and
|
|
1503
|
-
* pull requests; a map requests explicit levels per GitHub App permission
|
|
1504
|
-
* scope (e.g. `{contents: read, pull_requests: write}`) and may never exceed
|
|
1505
|
-
* what the installation granted. `repositories` scopes the token to exactly
|
|
1506
|
-
* the listed repos, by name (they must belong to the installation).
|
|
1507
|
-
*
|
|
1508
|
-
* Restriction is enforced by GitHub, not by Ellipsis: the token itself is
|
|
1509
|
-
* minted with the reduced scope, so nothing running in the sandbox can
|
|
1510
|
-
* exceed it.
|
|
1511
|
-
*/
|
|
1512
|
-
AgentConfigGithubPermissions: {
|
|
1513
|
-
/** Permissions */
|
|
1514
|
-
permissions?: 'read_only' | {
|
|
1515
|
-
[key: string]: string;
|
|
1516
|
-
} | null;
|
|
1517
|
-
/** Repositories */
|
|
1518
|
-
repositories?: string[] | null;
|
|
1519
|
-
};
|
|
1520
|
-
/**
|
|
1521
|
-
* AgentConfigInput
|
|
1522
|
-
* @description The typed input contract: what goes INTO a session (the trigger is
|
|
1523
|
-
* when it happens; this is what goes in).
|
|
1524
|
-
*
|
|
1525
|
-
* `json_schema` types the payload a caller-started session takes
|
|
1526
|
-
* (`POST /v1/sessions` `input`, validated at the door; required when
|
|
1527
|
-
* declared). It is illegal on a react-triggered agent — react payloads are
|
|
1528
|
-
* platform-shaped (the published surface field sets), not caller-shaped.
|
|
1529
|
-
*
|
|
1530
|
-
* `message` is the initial-message template: exact `{{path}}` substitution
|
|
1531
|
-
* over the caller payload (or, on a react agent, over the surface's
|
|
1532
|
-
* published fields), no conditionals/loops/filters. Refs are validated at
|
|
1533
|
-
* deploy time against the governing field set (see AgentConfig's
|
|
1534
|
-
* `_check_input`).
|
|
1535
|
-
*/
|
|
1536
|
-
AgentConfigInput: {
|
|
1537
|
-
/** Json Schema */
|
|
1538
|
-
json_schema?: {
|
|
1539
|
-
[key: string]: unknown;
|
|
1540
|
-
} | null;
|
|
1541
|
-
/** Message */
|
|
1542
|
-
message?: string | null;
|
|
1543
|
-
};
|
|
1544
|
-
/**
|
|
1545
|
-
* AgentConfigMcpRemoteServer
|
|
1546
|
-
* @description A bring-your-own remote MCP server: the harness talks HTTP to `url`.
|
|
1547
|
-
* Nothing runs in the sandbox image. `headers` carry static auth (e.g.
|
|
1548
|
-
* `Authorization: Bearer ${TOKEN}`); values may embed `${NAME}` secret
|
|
1549
|
-
* references, resolved at run time from the account's secrets store.
|
|
1550
|
-
*/
|
|
1551
|
-
AgentConfigMcpRemoteServer: {
|
|
1552
|
-
/**
|
|
1553
|
-
* Headers
|
|
1554
|
-
* @default {}
|
|
1555
|
-
*/
|
|
1556
|
-
headers: {
|
|
1557
|
-
[key: string]: string;
|
|
1558
|
-
};
|
|
1559
|
-
/** Name */
|
|
1560
|
-
name: string;
|
|
1561
|
-
/** Url */
|
|
1562
|
-
url: string;
|
|
1563
|
-
};
|
|
1564
|
-
/**
|
|
1565
|
-
* AgentConfigMcpServer
|
|
1566
|
-
* @description One built-in MCP server this agent opts into by name (`linear`/`slack`).
|
|
1567
|
-
* A name reference over the connected built-in set — the platform manages the
|
|
1568
|
-
* server's transport and credentials. It only matters when the named
|
|
1569
|
-
* integration is set to `opt_in` inclusion; an integration in the default
|
|
1570
|
-
* `all_sessions` mode is added regardless. For a server the platform does not
|
|
1571
|
-
* provide, define it instead (`AgentConfigMcpStdioServer` /
|
|
1572
|
-
* `AgentConfigMcpRemoteServer`).
|
|
1573
|
-
*/
|
|
1574
|
-
AgentConfigMcpServer: {
|
|
1575
|
-
/** Name */
|
|
1576
|
-
name: string;
|
|
1577
|
-
};
|
|
1578
|
-
/**
|
|
1579
|
-
* AgentConfigMcpStdioServer
|
|
1580
|
-
* @description A bring-your-own stdio MCP server: the harness spawns `command` inside
|
|
1581
|
-
* the sandbox and speaks JSON-RPC over its stdin/stdout. The command must be
|
|
1582
|
-
* runnable in the sandbox image — install its runtime via `image.setup` /
|
|
1583
|
-
* `image.dockerfile_append` if the base image lacks it.
|
|
1584
|
-
*
|
|
1585
|
-
* `env` values may embed `${NAME}` references, resolved at run time from the
|
|
1586
|
-
* account's secrets store (see `mcp_secret_refs`); everything else is passed
|
|
1587
|
-
* literally.
|
|
1588
|
-
*/
|
|
1589
|
-
AgentConfigMcpStdioServer: {
|
|
1590
|
-
/**
|
|
1591
|
-
* Args
|
|
1592
|
-
* @default []
|
|
1593
|
-
*/
|
|
1594
|
-
args: string[];
|
|
1595
|
-
/** Command */
|
|
1596
|
-
command: string;
|
|
1597
|
-
/**
|
|
1598
|
-
* Env
|
|
1599
|
-
* @default {}
|
|
1600
|
-
*/
|
|
1601
|
-
env: {
|
|
1602
|
-
[key: string]: string;
|
|
1603
|
-
};
|
|
1604
|
-
/** Name */
|
|
1605
|
-
name: string;
|
|
1606
|
-
};
|
|
1607
|
-
/**
|
|
1608
|
-
* AgentConfigMemorySize
|
|
1609
|
-
* @description A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).
|
|
1610
|
-
* Set any of `gb`/`mb` (at least one). The alternative to the `8GB`-style
|
|
1611
|
-
* shorthand string.
|
|
1612
|
-
*/
|
|
1613
|
-
AgentConfigMemorySize: {
|
|
1614
|
-
/** Gb */
|
|
1615
|
-
gb?: number | null;
|
|
1616
|
-
/** Mb */
|
|
1617
|
-
mb?: number | null;
|
|
1618
|
-
};
|
|
1619
|
-
/**
|
|
1620
|
-
* AgentConfigMentionPlatform
|
|
1621
|
-
* @description The surface an @ellipsis mention can come from.
|
|
1622
|
-
*
|
|
1623
|
-
* No SLACK member: Slack routing is not a trigger on an agent config, it is the
|
|
1624
|
-
* `slack.yaml` routing file (`SlackConfig`), which answers the questions a
|
|
1625
|
-
* platform list cannot — which channel, and whose DM. A mention trigger listing
|
|
1626
|
-
* `slack` is therefore a config error, not a silently-never-fires config.
|
|
1627
|
-
* @enum {string}
|
|
1628
|
-
*/
|
|
1629
|
-
AgentConfigMentionPlatform: 'github' | 'linear';
|
|
1630
|
-
/** AgentConfigMentionTrigger */
|
|
1631
|
-
AgentConfigMentionTrigger: {
|
|
1632
|
-
/**
|
|
1633
|
-
* Platforms
|
|
1634
|
-
* @default []
|
|
1635
|
-
*/
|
|
1636
|
-
platforms: components['schemas']['AgentConfigMentionPlatform'][];
|
|
1637
|
-
/**
|
|
1638
|
-
* @description discriminator enum property added by openapi-typescript
|
|
1639
|
-
* @enum {string}
|
|
1640
|
-
*/
|
|
1641
|
-
type: 'mention';
|
|
1642
|
-
};
|
|
1643
|
-
/** AgentConfigMetadata */
|
|
1644
|
-
AgentConfigMetadata: {
|
|
1645
|
-
/**
|
|
1646
|
-
* Annotations
|
|
1647
|
-
* @default {}
|
|
1648
|
-
*/
|
|
1649
|
-
annotations: {
|
|
1650
|
-
[key: string]: string;
|
|
1651
|
-
};
|
|
1652
|
-
/**
|
|
1653
|
-
* Labels
|
|
1654
|
-
* @default []
|
|
1655
|
-
*/
|
|
1656
|
-
labels: string[];
|
|
1657
|
-
};
|
|
1658
|
-
/**
|
|
1659
|
-
* AgentConfigOutput
|
|
1660
|
-
* @description The typed output contract: the JSON Schema the agent must exit through
|
|
1661
|
-
* (the StructuredOutput exit tool). Read back via
|
|
1662
|
-
* GET /v1/sessions/{id}/output.
|
|
1663
|
-
*/
|
|
1664
|
-
AgentConfigOutput: {
|
|
1665
|
-
/** Json Schema */
|
|
1666
|
-
json_schema: {
|
|
1667
|
-
[key: string]: unknown;
|
|
1668
|
-
};
|
|
1669
|
-
};
|
|
1670
|
-
/**
|
|
1671
|
-
* AgentConfigPermissions
|
|
1672
|
-
* @description What the agent is allowed to touch, per credential the platform mints
|
|
1673
|
-
* into its sandbox. Distinct from `environment:`, which is where the agent
|
|
1674
|
-
* runs; this is what it may do from there.
|
|
1675
|
-
*
|
|
1676
|
-
* `ellipsis` scopes the sandbox's Ellipsis API token
|
|
1677
|
-
* (`ELLIPSIS_API_TOKEN`, what the in-sandbox `agent` CLI authenticates
|
|
1678
|
-
* with). `true` / the string `all` (the default) grant the full sandbox
|
|
1679
|
-
* ceiling — everything a sandbox token can ever do. A map narrows it per
|
|
1680
|
-
* resource (see `AgentConfigEllipsisPermissions`); the minted token carries
|
|
1681
|
-
* the intersection, so a config can only ever reduce access. `false` fails
|
|
1682
|
-
* validation — an agent with no API token cannot report its own progress.
|
|
1683
|
-
*
|
|
1684
|
-
* `github` scopes the sandbox's GitHub installation token (`GH_TOKEN`) —
|
|
1685
|
-
* see `AgentConfigGithubPermissions`. GitHub enforces it at mint time.
|
|
1686
|
-
*/
|
|
1687
|
-
AgentConfigPermissions: {
|
|
1688
|
-
/**
|
|
1689
|
-
* Ellipsis
|
|
1690
|
-
* @default true
|
|
1691
|
-
*/
|
|
1692
|
-
ellipsis: (true | 'all') | components['schemas']['AgentConfigEllipsisPermissions'];
|
|
1693
|
-
/** @default {} */
|
|
1694
|
-
github: components['schemas']['AgentConfigGithubPermissions'];
|
|
1695
|
-
};
|
|
1696
|
-
/** AgentConfigReactTrigger */
|
|
1697
|
-
AgentConfigReactTrigger: {
|
|
1698
|
-
issue?: components['schemas']['ReactIssue'] | null;
|
|
1699
|
-
linear_issue?: components['schemas']['ReactLinearIssue'] | null;
|
|
1700
|
-
pull_request?: components['schemas']['ReactPullRequest'] | null;
|
|
1701
|
-
push?: components['schemas']['ReactPush'] | null;
|
|
1702
|
-
sentry?: components['schemas']['ReactSentry'] | null;
|
|
1703
|
-
slack_channel?: components['schemas']['ReactSlackChannel'] | null;
|
|
1704
|
-
/**
|
|
1705
|
-
* @description discriminator enum property added by openapi-typescript
|
|
1706
|
-
* @enum {string}
|
|
1707
|
-
*/
|
|
1708
|
-
type: 'react';
|
|
1709
|
-
};
|
|
1710
|
-
/** AgentConfigRepository */
|
|
1711
|
-
AgentConfigRepository: {
|
|
1712
|
-
/** Name */
|
|
1713
|
-
name: string;
|
|
1714
|
-
/** Owner */
|
|
1715
|
-
owner?: string | null;
|
|
1716
|
-
/** Ref */
|
|
1717
|
-
ref?: string | null;
|
|
1718
|
-
};
|
|
1719
|
-
/**
|
|
1720
|
-
* AgentConfigSettingsRef
|
|
1721
|
-
* @description A config-declared Claude Code settings.json, resolved at run start and
|
|
1722
|
-
* passed to `claude --settings <path>`. That is the CLI settings tier — BELOW
|
|
1723
|
-
* Ellipsis's managed-settings.json floor — so it customizes behavior (model
|
|
1724
|
-
* permissions, includeCoAuthoredBy, statusLine, ...) but can never weaken a
|
|
1725
|
-
* security setting. Lets a team point the cloud agent at the same settings file
|
|
1726
|
-
* they already use with Claude Code locally instead of re-encoding it as YAML.
|
|
1727
|
-
*/
|
|
1728
|
-
AgentConfigSettingsRef: {
|
|
1729
|
-
/** Path */
|
|
1730
|
-
path: string;
|
|
1731
|
-
repository?: components['schemas']['AgentConfigRepository'] | null;
|
|
1732
|
-
};
|
|
1733
|
-
/**
|
|
1734
|
-
* AgentConfigSkill
|
|
1735
|
-
* @description One config-declared Claude Code skill: a repository directory containing
|
|
1736
|
-
* a SKILL.md, resolved at run start and installed at the sandbox's personal
|
|
1737
|
-
* skill level (`~/.claude/skills/<basename(path)>/`). This is how a config
|
|
1738
|
-
* brings in skills its cloned repositories don't provide — cross-repo refs
|
|
1739
|
-
* (an org-wide skills repo), public third-party repos, and repo-less runs.
|
|
1740
|
-
* Skills under a cloned repo's own `.claude/skills/` load by themselves and
|
|
1741
|
-
* don't need an entry here.
|
|
1742
|
-
*/
|
|
1743
|
-
AgentConfigSkill: {
|
|
1744
|
-
/** Path */
|
|
1745
|
-
path: string;
|
|
1746
|
-
repository?: components['schemas']['AgentConfigRepository'] | null;
|
|
1747
|
-
};
|
|
1748
|
-
/**
|
|
1749
|
-
* AgentConfigSource
|
|
1750
|
-
* @description Where a session's config came from. Total: every session has exactly one
|
|
1751
|
-
* source, including the ones that never touch defaults resolution.
|
|
1752
|
-
*
|
|
1753
|
-
* Not derivable from the row — `agent_config_id` says WHICH saved config, not
|
|
1754
|
-
* how it was chosen, and is null for inline, platform-default, and built-in
|
|
1755
|
-
* configs alike — so it is persisted for audit and the published wire.
|
|
1756
|
-
* @enum {string}
|
|
1757
|
-
*/
|
|
1758
|
-
AgentConfigSource: 'explicit' | 'inline' | 'template' | 'repo_default' | 'account_default' | 'platform_default' | 'trigger' | 'builtin';
|
|
1759
|
-
/**
|
|
1760
|
-
* AgentConfigSourceGithub
|
|
1761
|
-
* @description Identifies the file a GitHub-sourced agent config is synced from.
|
|
1762
|
-
*
|
|
1763
|
-
* Keyed on the repository ID (not owner/name) so repository and org renames
|
|
1764
|
-
* don't orphan the config; resolve display names from gh_repositories at
|
|
1765
|
-
* read time.
|
|
1766
|
-
*/
|
|
1767
|
-
AgentConfigSourceGithub: {
|
|
1768
|
-
/** Branch */
|
|
1769
|
-
branch: string;
|
|
1770
|
-
/** Path */
|
|
1771
|
-
path: string;
|
|
1772
|
-
/** Repo Id */
|
|
1773
|
-
repo_id: number;
|
|
1774
|
-
};
|
|
1775
|
-
/** AgentConfigSystemFileRef */
|
|
1776
|
-
AgentConfigSystemFileRef: {
|
|
1777
|
-
/** File */
|
|
1778
|
-
file: string;
|
|
1779
|
-
repository?: components['schemas']['AgentConfigRepository'] | null;
|
|
1244
|
+
};
|
|
1245
|
+
'/v1/usage': {
|
|
1246
|
+
parameters: {
|
|
1247
|
+
query?: never;
|
|
1248
|
+
header?: never;
|
|
1249
|
+
path?: never;
|
|
1250
|
+
cookie?: never;
|
|
1780
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: {
|
|
1781
1268
|
/**
|
|
1782
1269
|
* AgentTemplate
|
|
1783
1270
|
* @description A built-in agent template: a ready-to-use agent config plus the
|
|
@@ -2177,10 +1664,8 @@ interface components {
|
|
|
2177
1664
|
* when invoked, plus where it syncs from and the state of that sync.
|
|
2178
1665
|
*/
|
|
2179
1666
|
Automation: {
|
|
2180
|
-
/** @description The
|
|
2181
|
-
|
|
2182
|
-
/** @description The repository, path, and branch the automation syncs from. Null only transiently, before the creating pull request's file lands on the branch. */
|
|
2183
|
-
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'];
|
|
2184
1669
|
/**
|
|
2185
1670
|
* Created At
|
|
2186
1671
|
* Format: date-time
|
|
@@ -2236,6 +1721,8 @@ interface components {
|
|
|
2236
1721
|
* @description The definition's content identity: the version fingerprint frozen onto each session that runs it.
|
|
2237
1722
|
*/
|
|
2238
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;
|
|
2239
1726
|
/**
|
|
2240
1727
|
* Updated At
|
|
2241
1728
|
* Format: date-time
|
|
@@ -2243,6 +1730,104 @@ interface components {
|
|
|
2243
1730
|
*/
|
|
2244
1731
|
updated_at: string;
|
|
2245
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
|
+
};
|
|
2246
1831
|
/**
|
|
2247
1832
|
* AutomationResponse
|
|
2248
1833
|
* @description One automation.
|
|
@@ -2251,6 +1836,54 @@ interface components {
|
|
|
2251
1836
|
/** @description The automation. */
|
|
2252
1837
|
automation: components['schemas']['Automation'];
|
|
2253
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
|
+
};
|
|
2254
1887
|
/**
|
|
2255
1888
|
* AutomationsListResponse
|
|
2256
1889
|
* @description The caller's automations.
|
|
@@ -2273,6 +1906,17 @@ interface components {
|
|
|
2273
1906
|
*/
|
|
2274
1907
|
session?: number | null;
|
|
2275
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
|
+
};
|
|
2276
1920
|
/**
|
|
2277
1921
|
* BudgetSource
|
|
2278
1922
|
* @description Which layer actually determined the enforced budget.
|
|
@@ -2337,6 +1981,22 @@ interface components {
|
|
|
2337
1981
|
*/
|
|
2338
1982
|
start: string | null;
|
|
2339
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
|
+
};
|
|
2340
2000
|
/**
|
|
2341
2001
|
* ClaudeSessionRecord
|
|
2342
2002
|
* @description A native transcript record of a Claude session (source=claude_code).
|
|
@@ -2479,6 +2139,32 @@ interface components {
|
|
|
2479
2139
|
} & {
|
|
2480
2140
|
[key: string]: unknown;
|
|
2481
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
|
+
};
|
|
2482
2168
|
/** CodexErrorEvent */
|
|
2483
2169
|
CodexErrorEvent: {
|
|
2484
2170
|
/** Message */
|
|
@@ -2825,6 +2511,37 @@ interface components {
|
|
|
2825
2511
|
} & {
|
|
2826
2512
|
[key: string]: unknown;
|
|
2827
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
|
+
};
|
|
2828
2545
|
/**
|
|
2829
2546
|
* ConfigManagedBy
|
|
2830
2547
|
* @description Which writer owns an agent: the repository file it is defined in, or
|
|
@@ -2833,6 +2550,21 @@ interface components {
|
|
|
2833
2550
|
* @enum {string}
|
|
2834
2551
|
*/
|
|
2835
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[];
|
|
2567
|
+
};
|
|
2836
2568
|
/**
|
|
2837
2569
|
* ContributorUsage
|
|
2838
2570
|
* @description An author who merged a pull request in the window. The pull-request and
|
|
@@ -2882,7 +2614,7 @@ interface components {
|
|
|
2882
2614
|
*/
|
|
2883
2615
|
CreateAutomationRequest: {
|
|
2884
2616
|
/** @description The automation's definition, in the same schema as a YAML file under agents/. */
|
|
2885
|
-
automation: components['schemas']['
|
|
2617
|
+
automation: components['schemas']['AutomationConfig'];
|
|
2886
2618
|
};
|
|
2887
2619
|
/**
|
|
2888
2620
|
* CreateEnvironmentRequest
|
|
@@ -2890,7 +2622,7 @@ interface components {
|
|
|
2890
2622
|
*/
|
|
2891
2623
|
CreateEnvironmentRequest: {
|
|
2892
2624
|
/** @description The environment's definition. */
|
|
2893
|
-
environment: components['schemas']['
|
|
2625
|
+
environment: components['schemas']['EnvironmentDocument'];
|
|
2894
2626
|
};
|
|
2895
2627
|
/**
|
|
2896
2628
|
* CreateFileRequest
|
|
@@ -2986,6 +2718,30 @@ interface components {
|
|
|
2986
2718
|
*/
|
|
2987
2719
|
scope: components['schemas']['ReviewScope'];
|
|
2988
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
|
+
};
|
|
2989
2745
|
/**
|
|
2990
2746
|
* DurationPercentiles
|
|
2991
2747
|
* @description Percentiles of a duration distribution, in hours. p0 = fastest,
|
|
@@ -3056,6 +2812,17 @@ interface components {
|
|
|
3056
2812
|
/** Match */
|
|
3057
2813
|
match?: string[] | null;
|
|
3058
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
|
+
};
|
|
3059
2826
|
/**
|
|
3060
2827
|
* Environment
|
|
3061
2828
|
* @description A saved environment: the machine agents run in (repositories,
|
|
@@ -3072,7 +2839,7 @@ interface components {
|
|
|
3072
2839
|
/** @description The GitHub account that last edited the environment, when known. */
|
|
3073
2840
|
edited_by?: components['schemas']['GithubAccountSnippet'] | null;
|
|
3074
2841
|
/** @description The environment definition itself, as parsed from its YAML. */
|
|
3075
|
-
environment: components['schemas']['
|
|
2842
|
+
environment: components['schemas']['EnvironmentDocument'];
|
|
3076
2843
|
/**
|
|
3077
2844
|
* Id
|
|
3078
2845
|
* @description Unique identifier of the environment.
|
|
@@ -3094,23 +2861,60 @@ interface components {
|
|
|
3094
2861
|
* Name
|
|
3095
2862
|
* @description The environment's customer-unique addressable name; usable anywhere an environment is referenced, interchangeably with the id.
|
|
3096
2863
|
*/
|
|
3097
|
-
name: string;
|
|
2864
|
+
name: string;
|
|
2865
|
+
/**
|
|
2866
|
+
* Sha
|
|
2867
|
+
* @description The environment's content identity fingerprint.
|
|
2868
|
+
*/
|
|
2869
|
+
sha: string;
|
|
2870
|
+
/** @description The repository, path, and branch the environment syncs from. Null for environments managed through the API. */
|
|
2871
|
+
source_details?: components['schemas']['GithubSourceDetails'] | null;
|
|
2872
|
+
/**
|
|
2873
|
+
* Updated At
|
|
2874
|
+
* Format: date-time
|
|
2875
|
+
* @description When the environment was last updated.
|
|
2876
|
+
*/
|
|
2877
|
+
updated_at: string;
|
|
2878
|
+
};
|
|
2879
|
+
/**
|
|
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'])[];
|
|
3098
2905
|
/**
|
|
3099
|
-
*
|
|
3100
|
-
* @
|
|
2906
|
+
* Repositories
|
|
2907
|
+
* @default []
|
|
3101
2908
|
*/
|
|
3102
|
-
|
|
3103
|
-
/** @description The repository, path, and branch the environment syncs from. Null for environments managed through the API. */
|
|
3104
|
-
source_details?: components['schemas']['AgentConfigSourceGithub'] | null;
|
|
2909
|
+
repositories: components['schemas']['RepositoryRef'][];
|
|
3105
2910
|
/**
|
|
3106
|
-
*
|
|
3107
|
-
*
|
|
3108
|
-
* @description When the environment was last updated.
|
|
2911
|
+
* Variables
|
|
2912
|
+
* @default []
|
|
3109
2913
|
*/
|
|
3110
|
-
|
|
2914
|
+
variables: components['schemas']['EnvironmentVariable'][];
|
|
3111
2915
|
};
|
|
3112
2916
|
/**
|
|
3113
|
-
*
|
|
2917
|
+
* EnvironmentDocument
|
|
3114
2918
|
* @description A parsed environment document: identity plus the environment body.
|
|
3115
2919
|
*
|
|
3116
2920
|
* The body fields are flattened to the top level of the file (not nested
|
|
@@ -3118,38 +2922,63 @@ interface components {
|
|
|
3118
2922
|
* would be ceremony. `to_environment()` projects the body for substitution
|
|
3119
2923
|
* into an agent config.
|
|
3120
2924
|
*/
|
|
3121
|
-
|
|
2925
|
+
EnvironmentDocument: {
|
|
3122
2926
|
/** @default {} */
|
|
3123
|
-
compute: components['schemas']['
|
|
3124
|
-
ellipsis: components['schemas']['
|
|
2927
|
+
compute: components['schemas']['ComputeConfig'];
|
|
2928
|
+
ellipsis: components['schemas']['EnvironmentIdentity'];
|
|
3125
2929
|
/** @default {} */
|
|
3126
|
-
hooks: components['schemas']['
|
|
2930
|
+
hooks: components['schemas']['EnvironmentHooks'];
|
|
3127
2931
|
/** @default {} */
|
|
3128
|
-
image: components['schemas']['
|
|
2932
|
+
image: components['schemas']['EnvironmentImage'];
|
|
3129
2933
|
/**
|
|
3130
2934
|
* Mcp Servers
|
|
3131
2935
|
* @default []
|
|
3132
2936
|
*/
|
|
3133
|
-
mcp_servers: (string | components['schemas']['
|
|
2937
|
+
mcp_servers: (string | components['schemas']['McpServerRef'] | components['schemas']['McpStdioServer'] | components['schemas']['McpRemoteServer'])[];
|
|
3134
2938
|
/**
|
|
3135
2939
|
* Repositories
|
|
3136
2940
|
* @default []
|
|
3137
2941
|
*/
|
|
3138
|
-
repositories: components['schemas']['
|
|
2942
|
+
repositories: components['schemas']['RepositoryRef'][];
|
|
3139
2943
|
/**
|
|
3140
2944
|
* Variables
|
|
3141
2945
|
* @default []
|
|
3142
2946
|
*/
|
|
3143
|
-
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;
|
|
3144
2973
|
};
|
|
3145
2974
|
/**
|
|
3146
|
-
*
|
|
2975
|
+
* EnvironmentIdentity
|
|
3147
2976
|
* @description The Ellipsis namespace of an environment file. `kind: environment` is
|
|
3148
2977
|
* what routes a synced YAML here instead of to the agent-config parser —
|
|
3149
2978
|
* an agent config carries no `kind` (or `kind: agent`, tolerated nowhere:
|
|
3150
2979
|
* absence is the agent marker).
|
|
3151
2980
|
*/
|
|
3152
|
-
|
|
2981
|
+
EnvironmentIdentity: {
|
|
3153
2982
|
/** Description */
|
|
3154
2983
|
description?: string | null;
|
|
3155
2984
|
/**
|
|
@@ -3163,10 +2992,32 @@ interface components {
|
|
|
3163
2992
|
* "labels": []
|
|
3164
2993
|
* }
|
|
3165
2994
|
*/
|
|
3166
|
-
metadata: components['schemas']['
|
|
2995
|
+
metadata: components['schemas']['ConfigMetadata'];
|
|
3167
2996
|
/** Name */
|
|
3168
2997
|
name?: string | null;
|
|
3169
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
|
+
};
|
|
3170
3021
|
/**
|
|
3171
3022
|
* EnvironmentResponse
|
|
3172
3023
|
* @description One saved environment.
|
|
@@ -3186,6 +3037,23 @@ interface components {
|
|
|
3186
3037
|
* @enum {string}
|
|
3187
3038
|
*/
|
|
3188
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
|
+
};
|
|
3189
3057
|
/**
|
|
3190
3058
|
* EnvironmentsListResponse
|
|
3191
3059
|
* @description The caller's saved environments.
|
|
@@ -3636,6 +3504,32 @@ interface components {
|
|
|
3636
3504
|
*/
|
|
3637
3505
|
members: components['schemas']['GithubMember'][];
|
|
3638
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
|
+
};
|
|
3639
3533
|
/**
|
|
3640
3534
|
* GithubRepositoriesListResponse
|
|
3641
3535
|
* @description The repositories connected to the account's GitHub installation.
|
|
@@ -3685,6 +3579,22 @@ interface components {
|
|
|
3685
3579
|
*/
|
|
3686
3580
|
private: boolean;
|
|
3687
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
|
+
};
|
|
3688
3598
|
/**
|
|
3689
3599
|
* GithubUser
|
|
3690
3600
|
* @description This is a full user account. It's the most amount of info we need to represent a GitHub user.
|
|
@@ -3806,6 +3716,30 @@ interface components {
|
|
|
3806
3716
|
*/
|
|
3807
3717
|
offset: number;
|
|
3808
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
|
+
};
|
|
3809
3743
|
/**
|
|
3810
3744
|
* IssueAction
|
|
3811
3745
|
* @enum {string}
|
|
@@ -4043,6 +3977,69 @@ interface components {
|
|
|
4043
3977
|
*/
|
|
4044
3978
|
slack_user_id: string;
|
|
4045
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
|
+
};
|
|
4046
4043
|
/**
|
|
4047
4044
|
* MemoriesListResponse
|
|
4048
4045
|
* @description The organization's memories: the rendered index a reader scans, plus the
|
|
@@ -4133,6 +4130,18 @@ interface components {
|
|
|
4133
4130
|
/** @description The memory. */
|
|
4134
4131
|
memory: components['schemas']['Memory'];
|
|
4135
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
|
+
};
|
|
4136
4145
|
/**
|
|
4137
4146
|
* MemorySummary
|
|
4138
4147
|
* @description One entry in the index: a memory with every field except `content`.
|
|
@@ -4179,6 +4188,50 @@ interface components {
|
|
|
4179
4188
|
/** @description The credential that last wrote the memory. */
|
|
4180
4189
|
updated_by: components['schemas']['MemoryActor'];
|
|
4181
4190
|
};
|
|
4191
|
+
/** Model */
|
|
4192
|
+
Model: {
|
|
4193
|
+
/** Display Name */
|
|
4194
|
+
display_name: string;
|
|
4195
|
+
/** Id */
|
|
4196
|
+
id: string;
|
|
4197
|
+
/** Is Default Agent Model */
|
|
4198
|
+
is_default_agent_model: boolean;
|
|
4199
|
+
manufacturer: components['schemas']['ModelManufacturer'];
|
|
4200
|
+
rate_card: components['schemas']['ModelRateCardApi'];
|
|
4201
|
+
};
|
|
4202
|
+
/**
|
|
4203
|
+
* ModelManufacturer
|
|
4204
|
+
* @description Who BUILT a model. Never who serves it.
|
|
4205
|
+
*
|
|
4206
|
+
* Serving path is irrelevant here. Anthropic built every Claude model, so all of
|
|
4207
|
+
* them are ANTHROPIC even though OpenRouter is what actually serves them.
|
|
4208
|
+
* Likewise the `gpt-5.6-*` rows are OPENAI (OpenAI's models, resold to us by
|
|
4209
|
+
* OpenRouter), and GLM is ZAI (Z.ai's model, served by DeepInfra via
|
|
4210
|
+
* OpenRouter).
|
|
4211
|
+
*
|
|
4212
|
+
* So this is deliberately NOT derived from `EgressRoute.provider`: routing is an
|
|
4213
|
+
* infrastructure fact that changes when we move a model between providers, while
|
|
4214
|
+
* the manufacturer is a property of the model itself and never changes.
|
|
4215
|
+
*
|
|
4216
|
+
* The frontend renders a vendor logo per model, which is why it needs the maker.
|
|
4217
|
+
* Keying that UI off the egress provider would put an AWS logo on a GPT model and
|
|
4218
|
+
* an OpenAI logo on GLM.
|
|
4219
|
+
* @enum {string}
|
|
4220
|
+
*/
|
|
4221
|
+
ModelManufacturer: 'anthropic' | 'openai' | 'zai' | 'minimax' | 'moonshot';
|
|
4222
|
+
/** ModelRateCardApi */
|
|
4223
|
+
ModelRateCardApi: {
|
|
4224
|
+
/** Cache Read Millicents Per 1M Tokens */
|
|
4225
|
+
cache_read_millicents_per_1m_tokens: number;
|
|
4226
|
+
/** Cache Write 1H Millicents Per 1M Tokens */
|
|
4227
|
+
cache_write_1h_millicents_per_1m_tokens: number;
|
|
4228
|
+
/** Cache Write 5M Millicents Per 1M Tokens */
|
|
4229
|
+
cache_write_5m_millicents_per_1m_tokens: number;
|
|
4230
|
+
/** Input Millicents Per 1M Tokens */
|
|
4231
|
+
input_millicents_per_1m_tokens: number;
|
|
4232
|
+
/** Output Millicents Per 1M Tokens */
|
|
4233
|
+
output_millicents_per_1m_tokens: number;
|
|
4234
|
+
};
|
|
4182
4235
|
/**
|
|
4183
4236
|
* ModelUsageBreakdown
|
|
4184
4237
|
* @description Usage and cost for one model over the whole period, split into the four
|
|
@@ -4216,6 +4269,11 @@ interface components {
|
|
|
4216
4269
|
*/
|
|
4217
4270
|
tokens: number;
|
|
4218
4271
|
};
|
|
4272
|
+
/** ModelsListResponse */
|
|
4273
|
+
ModelsListResponse: {
|
|
4274
|
+
/** Models */
|
|
4275
|
+
models: components['schemas']['Model'][];
|
|
4276
|
+
};
|
|
4219
4277
|
/**
|
|
4220
4278
|
* OrganizationRole
|
|
4221
4279
|
* @enum {string}
|
|
@@ -4240,6 +4298,18 @@ interface components {
|
|
|
4240
4298
|
*/
|
|
4241
4299
|
default_model?: string | null;
|
|
4242
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
|
+
};
|
|
4243
4313
|
/**
|
|
4244
4314
|
* ParentKind
|
|
4245
4315
|
* @description How a session relates to its predecessor (parent_agent_session_id) —
|
|
@@ -4253,6 +4323,32 @@ interface components {
|
|
|
4253
4323
|
* @enum {string}
|
|
4254
4324
|
*/
|
|
4255
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
|
+
};
|
|
4256
4352
|
/**
|
|
4257
4353
|
* PollCliAuthResponse
|
|
4258
4354
|
* @description The state of a device-code flow. Poll until `status` leaves `pending`.
|
|
@@ -4571,6 +4667,20 @@ interface components {
|
|
|
4571
4667
|
};
|
|
4572
4668
|
/** ReactSlackChannel */
|
|
4573
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
|
+
};
|
|
4574
4684
|
/**
|
|
4575
4685
|
* RecentPullRequest
|
|
4576
4686
|
* @description One pull request in the recent-activity table.
|
|
@@ -4695,6 +4805,15 @@ interface components {
|
|
|
4695
4805
|
*/
|
|
4696
4806
|
include: string[];
|
|
4697
4807
|
} | string[];
|
|
4808
|
+
/** RepositoryRef */
|
|
4809
|
+
RepositoryRef: {
|
|
4810
|
+
/** Name */
|
|
4811
|
+
name: string;
|
|
4812
|
+
/** Owner */
|
|
4813
|
+
owner?: string | null;
|
|
4814
|
+
/** Ref */
|
|
4815
|
+
ref?: string | null;
|
|
4816
|
+
};
|
|
4698
4817
|
/**
|
|
4699
4818
|
* RepositorySelection
|
|
4700
4819
|
* @enum {string}
|
|
@@ -5226,17 +5345,60 @@ interface components {
|
|
|
5226
5345
|
* @description The pull request a review ran on.
|
|
5227
5346
|
*/
|
|
5228
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;
|
|
5229
5360
|
/**
|
|
5230
5361
|
* Number
|
|
5231
5362
|
* @description The pull request number.
|
|
5232
5363
|
*/
|
|
5233
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;
|
|
5234
5370
|
/**
|
|
5235
5371
|
* Url
|
|
5236
5372
|
* @description The pull request's URL on GitHub.
|
|
5237
5373
|
*/
|
|
5238
5374
|
url: string;
|
|
5239
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
|
+
};
|
|
5240
5402
|
/**
|
|
5241
5403
|
* ReviewRepoFacet
|
|
5242
5404
|
* @description A repository filter option for the reviews view.
|
|
@@ -5925,12 +6087,14 @@ interface components {
|
|
|
5925
6087
|
* disagree about what a session looks like.
|
|
5926
6088
|
*/
|
|
5927
6089
|
Session: {
|
|
5928
|
-
/** @description The agent that ran: the config the session executed, where that config came from, and any override merged into it. */
|
|
5929
|
-
agent: components['schemas']['SessionAgent'];
|
|
5930
6090
|
/** @description The principal this session is attributed to. */
|
|
5931
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;
|
|
5932
6094
|
/** @description The spend budget enforced for this session. */
|
|
5933
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'];
|
|
5934
6098
|
/**
|
|
5935
6099
|
* Context Repository
|
|
5936
6100
|
* @description The "owner/name" repository context the session was started in, if any.
|
|
@@ -5944,7 +6108,7 @@ interface components {
|
|
|
5944
6108
|
* @description When the session was created.
|
|
5945
6109
|
*/
|
|
5946
6110
|
created_at: string;
|
|
5947
|
-
/** @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`. */
|
|
5948
6112
|
environment?: components['schemas']['SessionEnvironment'];
|
|
5949
6113
|
/** @description How the session ended; null until it is terminal. */
|
|
5950
6114
|
exit_status?: components['schemas']['SessionExitStatus'] | null;
|
|
@@ -6010,35 +6174,6 @@ interface components {
|
|
|
6010
6174
|
*/
|
|
6011
6175
|
updated_at: string;
|
|
6012
6176
|
};
|
|
6013
|
-
/**
|
|
6014
|
-
* SessionAgent
|
|
6015
|
-
* @description The agent this session ran: the definition it actually executed, where
|
|
6016
|
-
* that definition came from, and the diff that was merged in — the same
|
|
6017
|
-
* effective-value-plus-provenance shape `SessionBudget` uses.
|
|
6018
|
-
*
|
|
6019
|
-
* `config` is the snapshot frozen when the session was created;
|
|
6020
|
-
* `automation_id` points at the automation as it exists NOW. They diverge
|
|
6021
|
-
* legitimately: a YAML edit after the session started, or any `override`,
|
|
6022
|
-
* leaves the pointer describing something the session never ran.
|
|
6023
|
-
*/
|
|
6024
|
-
SessionAgent: {
|
|
6025
|
-
/**
|
|
6026
|
-
* Automation Id
|
|
6027
|
-
* @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.
|
|
6028
|
-
*/
|
|
6029
|
-
automation_id?: string | null;
|
|
6030
|
-
/** @description The agent definition the session actually ran, frozen when the session was created. */
|
|
6031
|
-
config: components['schemas']['AgentConfig'];
|
|
6032
|
-
/**
|
|
6033
|
-
* Override
|
|
6034
|
-
* @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.
|
|
6035
|
-
*/
|
|
6036
|
-
override?: {
|
|
6037
|
-
[key: string]: unknown;
|
|
6038
|
-
} | null;
|
|
6039
|
-
/** @description How this session's config was chosen. */
|
|
6040
|
-
source: components['schemas']['AgentConfigSource'];
|
|
6041
|
-
};
|
|
6042
6177
|
/**
|
|
6043
6178
|
* SessionAttribution
|
|
6044
6179
|
* @description The principal a session is attributed to: what kind, its id, and — when
|
|
@@ -6055,6 +6190,22 @@ interface components {
|
|
|
6055
6190
|
/** @description The GitHub user the session is attributed to, resolved at read time. Null when the attribution is not a GitHub user. */
|
|
6056
6191
|
user?: components['schemas']['GithubAccountSnippet'] | null;
|
|
6057
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
|
+
};
|
|
6058
6209
|
/**
|
|
6059
6210
|
* SessionBudget
|
|
6060
6211
|
* @description The spend budget actually enforced for this session, and which layer of
|
|
@@ -6073,6 +6224,56 @@ interface components {
|
|
|
6073
6224
|
*/
|
|
6074
6225
|
source: components['schemas']['BudgetSource'];
|
|
6075
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
|
+
};
|
|
6076
6277
|
/**
|
|
6077
6278
|
* SessionCost
|
|
6078
6279
|
* @description What a session (or one turn of it) cost, in millicents.
|
|
@@ -6113,11 +6314,27 @@ interface components {
|
|
|
6113
6314
|
*/
|
|
6114
6315
|
total: number;
|
|
6115
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
|
+
};
|
|
6116
6333
|
/**
|
|
6117
6334
|
* SessionEnvironment
|
|
6118
6335
|
* @description The environment this session resolved: which saved environment (as it
|
|
6119
6336
|
* exists now) and how it was chosen. The environment's frozen BODY rides
|
|
6120
|
-
* inside `
|
|
6337
|
+
* inside `config.environment` — substitution happens before the config
|
|
6121
6338
|
* snapshot freezes — so this object is provenance, not payload.
|
|
6122
6339
|
*/
|
|
6123
6340
|
SessionEnvironment: {
|
|
@@ -6187,6 +6404,28 @@ interface components {
|
|
|
6187
6404
|
/** Status */
|
|
6188
6405
|
status: string;
|
|
6189
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
|
+
};
|
|
6190
6429
|
/**
|
|
6191
6430
|
* SessionGitPr
|
|
6192
6431
|
* @description A pull request the session opened in this repo, written the moment the
|
|
@@ -6572,6 +6811,35 @@ interface components {
|
|
|
6572
6811
|
*/
|
|
6573
6812
|
sessions: components['schemas']['Session'][];
|
|
6574
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
|
+
};
|
|
6575
6843
|
/**
|
|
6576
6844
|
* SlackChannel
|
|
6577
6845
|
* @description One channel in the connected Slack workspace.
|
|
@@ -6699,7 +6967,7 @@ interface components {
|
|
|
6699
6967
|
/**
|
|
6700
6968
|
* StartAgentSessionRequest
|
|
6701
6969
|
* @description Parameters for starting a raw session: where it runs, its first
|
|
6702
|
-
* message, and the run's own settings. Flat, in the
|
|
6970
|
+
* message, and the run's own settings. Flat, in the AutomationConfig vocabulary
|
|
6703
6971
|
* — a `claude:` or `permissions:` block copied from an agents/ YAML file
|
|
6704
6972
|
* pastes in verbatim. There is no automation behind a raw session; to run a
|
|
6705
6973
|
* saved automation, invoke it with POST /v1/automations/{automation_id}/sessions.
|
|
@@ -6715,14 +6983,14 @@ interface components {
|
|
|
6715
6983
|
*/
|
|
6716
6984
|
budget?: number | null;
|
|
6717
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. */
|
|
6718
|
-
claude?: components['schemas']['
|
|
6986
|
+
claude?: components['schemas']['ClaudeConfig'] | null;
|
|
6719
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`. */
|
|
6720
|
-
codex?: components['schemas']['
|
|
6988
|
+
codex?: components['schemas']['CodexConfig'] | null;
|
|
6721
6989
|
/**
|
|
6722
6990
|
* Environment
|
|
6723
|
-
* @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.
|
|
6724
6992
|
*/
|
|
6725
|
-
environment?: string | components['schemas']['
|
|
6993
|
+
environment?: string | components['schemas']['EnvironmentConfig'] | null;
|
|
6726
6994
|
/**
|
|
6727
6995
|
* Force Rebuild
|
|
6728
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`.
|
|
@@ -6744,19 +7012,24 @@ interface components {
|
|
|
6744
7012
|
[key: string]: string;
|
|
6745
7013
|
};
|
|
6746
7014
|
/** @description The structured-output exit contract for this session. */
|
|
6747
|
-
output?: components['schemas']['
|
|
7015
|
+
output?: components['schemas']['OutputConfig'] | null;
|
|
6748
7016
|
/** @description What the session may touch, per minted credential. */
|
|
6749
|
-
permissions?: components['schemas']['
|
|
7017
|
+
permissions?: components['schemas']['PermissionsConfig'] | null;
|
|
6750
7018
|
/**
|
|
6751
7019
|
* Prompt
|
|
6752
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.
|
|
6753
7021
|
*/
|
|
6754
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;
|
|
6755
7028
|
/**
|
|
6756
7029
|
* Skills
|
|
6757
7030
|
* @description Skills installed for this session.
|
|
6758
7031
|
*/
|
|
6759
|
-
skills?: components['schemas']['
|
|
7032
|
+
skills?: components['schemas']['SkillRef'][] | null;
|
|
6760
7033
|
};
|
|
6761
7034
|
/**
|
|
6762
7035
|
* StartAutomationSessionRequest
|
|
@@ -6825,6 +7098,12 @@ interface components {
|
|
|
6825
7098
|
*/
|
|
6826
7099
|
verification_uri_complete: string;
|
|
6827
7100
|
};
|
|
7101
|
+
/** SystemFileRef */
|
|
7102
|
+
SystemFileRef: {
|
|
7103
|
+
/** File */
|
|
7104
|
+
file: string;
|
|
7105
|
+
repository?: components['schemas']['RepositoryRef'] | null;
|
|
7106
|
+
};
|
|
6828
7107
|
/**
|
|
6829
7108
|
* TokensInfo
|
|
6830
7109
|
* @description Token/cost usage, per record (one API call's counts, aggregate fields at
|
|
@@ -6887,7 +7166,7 @@ interface components {
|
|
|
6887
7166
|
*/
|
|
6888
7167
|
UpdateAutomationRequest: {
|
|
6889
7168
|
/** @description The automation's new definition. Replaces the previous one wholesale — this is not a partial update. */
|
|
6890
|
-
automation: components['schemas']['
|
|
7169
|
+
automation: components['schemas']['AutomationConfig'];
|
|
6891
7170
|
};
|
|
6892
7171
|
/**
|
|
6893
7172
|
* UpdateEnvironmentRequest
|
|
@@ -6895,7 +7174,7 @@ interface components {
|
|
|
6895
7174
|
*/
|
|
6896
7175
|
UpdateEnvironmentRequest: {
|
|
6897
7176
|
/** @description The environment's new definition. Replaces the previous one wholesale — this is not a partial update. */
|
|
6898
|
-
environment: components['schemas']['
|
|
7177
|
+
environment: components['schemas']['EnvironmentDocument'];
|
|
6899
7178
|
};
|
|
6900
7179
|
/**
|
|
6901
7180
|
* UsageDailyPoint
|
|
@@ -7915,6 +8194,66 @@ interface operations {
|
|
|
7915
8194
|
};
|
|
7916
8195
|
};
|
|
7917
8196
|
};
|
|
8197
|
+
get_automation_metrics: {
|
|
8198
|
+
parameters: {
|
|
8199
|
+
query?: never;
|
|
8200
|
+
header?: {
|
|
8201
|
+
'user-agent'?: string | null;
|
|
8202
|
+
};
|
|
8203
|
+
path: {
|
|
8204
|
+
automation_id: string;
|
|
8205
|
+
};
|
|
8206
|
+
cookie?: never;
|
|
8207
|
+
};
|
|
8208
|
+
requestBody?: never;
|
|
8209
|
+
responses: {
|
|
8210
|
+
/** @description Successful Response */
|
|
8211
|
+
200: {
|
|
8212
|
+
headers: {
|
|
8213
|
+
[name: string]: unknown;
|
|
8214
|
+
};
|
|
8215
|
+
content: {
|
|
8216
|
+
'application/json': components['schemas']['AutomationMetricsResponse'];
|
|
8217
|
+
};
|
|
8218
|
+
};
|
|
8219
|
+
/** @description The bearer token is missing, invalid, or revoked. */
|
|
8220
|
+
401: {
|
|
8221
|
+
headers: {
|
|
8222
|
+
[name: string]: unknown;
|
|
8223
|
+
};
|
|
8224
|
+
content: {
|
|
8225
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
8226
|
+
};
|
|
8227
|
+
};
|
|
8228
|
+
/** @description The credential may not perform this action, or the account is blocked. */
|
|
8229
|
+
403: {
|
|
8230
|
+
headers: {
|
|
8231
|
+
[name: string]: unknown;
|
|
8232
|
+
};
|
|
8233
|
+
content: {
|
|
8234
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
8235
|
+
};
|
|
8236
|
+
};
|
|
8237
|
+
/** @description No such automation in your account. */
|
|
8238
|
+
404: {
|
|
8239
|
+
headers: {
|
|
8240
|
+
[name: string]: unknown;
|
|
8241
|
+
};
|
|
8242
|
+
content: {
|
|
8243
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
8244
|
+
};
|
|
8245
|
+
};
|
|
8246
|
+
/** @description Validation Error */
|
|
8247
|
+
422: {
|
|
8248
|
+
headers: {
|
|
8249
|
+
[name: string]: unknown;
|
|
8250
|
+
};
|
|
8251
|
+
content: {
|
|
8252
|
+
'application/json': components['schemas']['HTTPValidationError'];
|
|
8253
|
+
};
|
|
8254
|
+
};
|
|
8255
|
+
};
|
|
8256
|
+
};
|
|
7918
8257
|
start_automation_session: {
|
|
7919
8258
|
parameters: {
|
|
7920
8259
|
query?: never;
|
|
@@ -9338,33 +9677,100 @@ interface operations {
|
|
|
9338
9677
|
[name: string]: unknown;
|
|
9339
9678
|
};
|
|
9340
9679
|
content: {
|
|
9341
|
-
'application/json': components['schemas']['ErrorResponse'];
|
|
9680
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
9681
|
+
};
|
|
9682
|
+
};
|
|
9683
|
+
};
|
|
9684
|
+
};
|
|
9685
|
+
delete_memory: {
|
|
9686
|
+
parameters: {
|
|
9687
|
+
query?: {
|
|
9688
|
+
/** @description Only delete if the memory's current content_sha256 matches. */
|
|
9689
|
+
if_sha256?: string | null;
|
|
9690
|
+
};
|
|
9691
|
+
header?: {
|
|
9692
|
+
'user-agent'?: string | null;
|
|
9693
|
+
};
|
|
9694
|
+
path: {
|
|
9695
|
+
memory_id: string;
|
|
9696
|
+
};
|
|
9697
|
+
cookie?: never;
|
|
9698
|
+
};
|
|
9699
|
+
requestBody?: never;
|
|
9700
|
+
responses: {
|
|
9701
|
+
/** @description Successful Response */
|
|
9702
|
+
204: {
|
|
9703
|
+
headers: {
|
|
9704
|
+
[name: string]: unknown;
|
|
9705
|
+
};
|
|
9706
|
+
content?: never;
|
|
9707
|
+
};
|
|
9708
|
+
/** @description The bearer token is missing, invalid, or revoked. */
|
|
9709
|
+
401: {
|
|
9710
|
+
headers: {
|
|
9711
|
+
[name: string]: unknown;
|
|
9712
|
+
};
|
|
9713
|
+
content: {
|
|
9714
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
9715
|
+
};
|
|
9716
|
+
};
|
|
9717
|
+
/** @description The credential may not perform this action, or the account is blocked. */
|
|
9718
|
+
403: {
|
|
9719
|
+
headers: {
|
|
9720
|
+
[name: string]: unknown;
|
|
9721
|
+
};
|
|
9722
|
+
content: {
|
|
9723
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
9724
|
+
};
|
|
9725
|
+
};
|
|
9726
|
+
/** @description No such memory in your account. */
|
|
9727
|
+
404: {
|
|
9728
|
+
headers: {
|
|
9729
|
+
[name: string]: unknown;
|
|
9730
|
+
};
|
|
9731
|
+
content: {
|
|
9732
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
9733
|
+
};
|
|
9734
|
+
};
|
|
9735
|
+
/** @description if_sha256 does not match the memory's current content. */
|
|
9736
|
+
409: {
|
|
9737
|
+
headers: {
|
|
9738
|
+
[name: string]: unknown;
|
|
9739
|
+
};
|
|
9740
|
+
content: {
|
|
9741
|
+
'application/json': components['schemas']['ErrorResponse'];
|
|
9742
|
+
};
|
|
9743
|
+
};
|
|
9744
|
+
/** @description Validation Error */
|
|
9745
|
+
422: {
|
|
9746
|
+
headers: {
|
|
9747
|
+
[name: string]: unknown;
|
|
9748
|
+
};
|
|
9749
|
+
content: {
|
|
9750
|
+
'application/json': components['schemas']['HTTPValidationError'];
|
|
9342
9751
|
};
|
|
9343
9752
|
};
|
|
9344
9753
|
};
|
|
9345
9754
|
};
|
|
9346
|
-
|
|
9755
|
+
list_supported_models: {
|
|
9347
9756
|
parameters: {
|
|
9348
|
-
query?:
|
|
9349
|
-
/** @description Only delete if the memory's current content_sha256 matches. */
|
|
9350
|
-
if_sha256?: string | null;
|
|
9351
|
-
};
|
|
9757
|
+
query?: never;
|
|
9352
9758
|
header?: {
|
|
9353
9759
|
'user-agent'?: string | null;
|
|
9354
9760
|
};
|
|
9355
|
-
path
|
|
9356
|
-
memory_id: string;
|
|
9357
|
-
};
|
|
9761
|
+
path?: never;
|
|
9358
9762
|
cookie?: never;
|
|
9359
9763
|
};
|
|
9360
9764
|
requestBody?: never;
|
|
9361
9765
|
responses: {
|
|
9362
9766
|
/** @description Successful Response */
|
|
9363
|
-
|
|
9767
|
+
200: {
|
|
9364
9768
|
headers: {
|
|
9365
9769
|
[name: string]: unknown;
|
|
9366
9770
|
};
|
|
9367
|
-
content
|
|
9771
|
+
content: {
|
|
9772
|
+
'application/json': components['schemas']['ModelsListResponse'];
|
|
9773
|
+
};
|
|
9368
9774
|
};
|
|
9369
9775
|
/** @description The bearer token is missing, invalid, or revoked. */
|
|
9370
9776
|
401: {
|
|
@@ -9384,24 +9790,6 @@ interface operations {
|
|
|
9384
9790
|
'application/json': components['schemas']['ErrorResponse'];
|
|
9385
9791
|
};
|
|
9386
9792
|
};
|
|
9387
|
-
/** @description No such memory in your account. */
|
|
9388
|
-
404: {
|
|
9389
|
-
headers: {
|
|
9390
|
-
[name: string]: unknown;
|
|
9391
|
-
};
|
|
9392
|
-
content: {
|
|
9393
|
-
'application/json': components['schemas']['ErrorResponse'];
|
|
9394
|
-
};
|
|
9395
|
-
};
|
|
9396
|
-
/** @description if_sha256 does not match the memory's current content. */
|
|
9397
|
-
409: {
|
|
9398
|
-
headers: {
|
|
9399
|
-
[name: string]: unknown;
|
|
9400
|
-
};
|
|
9401
|
-
content: {
|
|
9402
|
-
'application/json': components['schemas']['ErrorResponse'];
|
|
9403
|
-
};
|
|
9404
|
-
};
|
|
9405
9793
|
/** @description Validation Error */
|
|
9406
9794
|
422: {
|
|
9407
9795
|
headers: {
|
|
@@ -9416,10 +9804,12 @@ interface operations {
|
|
|
9416
9804
|
list_reviews: {
|
|
9417
9805
|
parameters: {
|
|
9418
9806
|
query?: {
|
|
9419
|
-
owner
|
|
9420
|
-
|
|
9421
|
-
|
|
9422
|
-
|
|
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'][];
|
|
9423
9813
|
limit?: number;
|
|
9424
9814
|
cursor?: string | null;
|
|
9425
9815
|
};
|
|
@@ -9440,7 +9830,7 @@ interface operations {
|
|
|
9440
9830
|
'application/json': components['schemas']['ReviewsListResponse'];
|
|
9441
9831
|
};
|
|
9442
9832
|
};
|
|
9443
|
-
/** @description
|
|
9833
|
+
/** @description A `repository` value is not of the form owner/name. */
|
|
9444
9834
|
400: {
|
|
9445
9835
|
headers: {
|
|
9446
9836
|
[name: string]: unknown;
|
|
@@ -9467,7 +9857,7 @@ interface operations {
|
|
|
9467
9857
|
'application/json': components['schemas']['ErrorResponse'];
|
|
9468
9858
|
};
|
|
9469
9859
|
};
|
|
9470
|
-
/** @description
|
|
9860
|
+
/** @description A `repository` was not found in your account. */
|
|
9471
9861
|
404: {
|
|
9472
9862
|
headers: {
|
|
9473
9863
|
[name: string]: unknown;
|
|
@@ -9982,6 +10372,66 @@ interface operations {
|
|
|
9982
10372
|
};
|
|
9983
10373
|
};
|
|
9984
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
|
+
};
|
|
9985
10435
|
export_agent_session: {
|
|
9986
10436
|
parameters: {
|
|
9987
10437
|
query?: never;
|
|
@@ -10678,6 +11128,7 @@ type AttributionType = 'github_user' | 'linear_user' | 'slack_user' | 'api_key';
|
|
|
10678
11128
|
* Delivery status of the message.
|
|
10679
11129
|
*/
|
|
10680
11130
|
type SessionMessageStatus = 'pending' | 'delivered';
|
|
11131
|
+
type GithubAccountType = 'User' | 'Organization' | 'Bot' | 'Mannequin';
|
|
10681
11132
|
type EffortLevel = 'low' | 'medium' | 'high' | 'xhigh' | 'max';
|
|
10682
11133
|
/**
|
|
10683
11134
|
* What may be done to a resource. Strictly ordered: a grant at one level
|
|
@@ -10697,20 +11148,6 @@ type RepositoryFilter = {
|
|
|
10697
11148
|
type LinearIssueAction = 'opened';
|
|
10698
11149
|
type PullRequestAction = 'opened' | 'pushed' | 'merged' | 'closed' | 'review_submitted' | 'commented';
|
|
10699
11150
|
type SentryAction = 'issue_alert' | 'metric_alert';
|
|
10700
|
-
/**
|
|
10701
|
-
* The surface an @ellipsis mention can come from.
|
|
10702
|
-
*
|
|
10703
|
-
* No SLACK member: Slack routing is not a trigger on an agent config, it is the
|
|
10704
|
-
* `slack.yaml` routing file (`SlackConfig`), which answers the questions a
|
|
10705
|
-
* platform list cannot — which channel, and whose DM. A mention trigger listing
|
|
10706
|
-
* `slack` is therefore a config error, not a silently-never-fires config.
|
|
10707
|
-
*/
|
|
10708
|
-
type AgentConfigMentionPlatform = 'github' | 'linear';
|
|
10709
|
-
/**
|
|
10710
|
-
* How this session's config was chosen.
|
|
10711
|
-
*/
|
|
10712
|
-
type AgentConfigSource = 'explicit' | 'inline' | 'template' | 'repo_default' | 'account_default' | 'platform_default' | 'trigger' | 'builtin';
|
|
10713
|
-
type GithubAccountType = 'User' | 'Organization' | 'Bot' | 'Mannequin';
|
|
10714
11151
|
/**
|
|
10715
11152
|
* Where the resolved budget came from.
|
|
10716
11153
|
*/
|
|
@@ -10847,9 +11284,13 @@ interface SessionMessage {
|
|
|
10847
11284
|
* The session's current state.
|
|
10848
11285
|
*/
|
|
10849
11286
|
interface Session {
|
|
10850
|
-
agent: SessionAgent;
|
|
10851
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;
|
|
10852
11292
|
budget: SessionBudget;
|
|
11293
|
+
config: SessionConfig1;
|
|
10853
11294
|
/**
|
|
10854
11295
|
* The "owner/name" repository context the session was started in, if any.
|
|
10855
11296
|
*/
|
|
@@ -10916,50 +11357,139 @@ interface Session {
|
|
|
10916
11357
|
updated_at: string;
|
|
10917
11358
|
}
|
|
10918
11359
|
/**
|
|
10919
|
-
* The
|
|
11360
|
+
* The principal this session is attributed to.
|
|
10920
11361
|
*/
|
|
10921
|
-
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;
|
|
10922
11371
|
/**
|
|
10923
|
-
*
|
|
11372
|
+
* The GitHub user the session is attributed to, resolved at read time. Null when the attribution is not a GitHub user.
|
|
10924
11373
|
*/
|
|
10925
|
-
|
|
10926
|
-
|
|
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;
|
|
10927
11397
|
/**
|
|
10928
|
-
*
|
|
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.
|
|
10929
11399
|
*/
|
|
10930
|
-
|
|
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: {
|
|
10931
11454
|
[k: string]: unknown;
|
|
10932
11455
|
} | null;
|
|
10933
|
-
|
|
11456
|
+
message: string | null;
|
|
10934
11457
|
}
|
|
10935
11458
|
/**
|
|
10936
|
-
*
|
|
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.
|
|
10937
11470
|
*/
|
|
10938
|
-
interface
|
|
10939
|
-
budget:
|
|
10940
|
-
claude:
|
|
10941
|
-
codex:
|
|
10942
|
-
|
|
10943
|
-
|
|
10944
|
-
|
|
10945
|
-
|
|
10946
|
-
permissions: AgentConfigPermissions;
|
|
10947
|
-
skills: AgentConfigSkill[];
|
|
10948
|
-
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[];
|
|
10949
11479
|
}
|
|
10950
|
-
interface
|
|
11480
|
+
interface BudgetConfig {
|
|
10951
11481
|
day: number | null;
|
|
10952
11482
|
month: number | null;
|
|
10953
11483
|
session: number | null;
|
|
10954
11484
|
week: number | null;
|
|
10955
11485
|
}
|
|
10956
|
-
interface
|
|
11486
|
+
interface ClaudeConfig {
|
|
10957
11487
|
effort: EffortLevel | null;
|
|
10958
11488
|
fallback_model: string | null;
|
|
10959
11489
|
max_turns: number | null;
|
|
10960
11490
|
model: string | null;
|
|
10961
|
-
settings:
|
|
10962
|
-
system: string |
|
|
11491
|
+
settings: SettingsRef | null;
|
|
11492
|
+
system: string | SystemFileRef | (string | SystemFileRef)[];
|
|
10963
11493
|
}
|
|
10964
11494
|
/**
|
|
10965
11495
|
* A config-declared Claude Code settings.json, resolved at run start and
|
|
@@ -10969,25 +11499,25 @@ interface AgentConfigClaude {
|
|
|
10969
11499
|
* security setting. Lets a team point the cloud agent at the same settings file
|
|
10970
11500
|
* they already use with Claude Code locally instead of re-encoding it as YAML.
|
|
10971
11501
|
*/
|
|
10972
|
-
interface
|
|
11502
|
+
interface SettingsRef {
|
|
10973
11503
|
path: string;
|
|
10974
|
-
repository:
|
|
11504
|
+
repository: RepositoryRef | null;
|
|
10975
11505
|
}
|
|
10976
|
-
interface
|
|
11506
|
+
interface RepositoryRef {
|
|
10977
11507
|
name: string;
|
|
10978
11508
|
owner: string | null;
|
|
10979
11509
|
ref: string | null;
|
|
10980
11510
|
}
|
|
10981
|
-
interface
|
|
11511
|
+
interface SystemFileRef {
|
|
10982
11512
|
file: string;
|
|
10983
|
-
repository:
|
|
11513
|
+
repository: RepositoryRef | null;
|
|
10984
11514
|
}
|
|
10985
11515
|
/**
|
|
10986
11516
|
* The `codex:` block — run this agent on OpenAI's Codex CLI instead of
|
|
10987
11517
|
* Claude Code. Declaring the block at all is what selects the harness
|
|
10988
|
-
* (`
|
|
11518
|
+
* (`AutomationConfig.harness`).
|
|
10989
11519
|
*
|
|
10990
|
-
* Deliberately a small subset of `
|
|
11520
|
+
* Deliberately a small subset of `ClaudeConfig`: the fields omitted here
|
|
10991
11521
|
* are ones Codex has no equivalent for (`effort`, `fallback_model`,
|
|
10992
11522
|
* `settings`) or that the platform does not yet wire through for this harness
|
|
10993
11523
|
* (`max_turns`, `skills`, MCP servers). They are omitted rather than
|
|
@@ -10995,35 +11525,9 @@ interface AgentConfigSystemFileRef {
|
|
|
10995
11525
|
* config that sets one fails loudly at parse time instead of silently not doing
|
|
10996
11526
|
* it. The budget still bounds a run regardless.
|
|
10997
11527
|
*/
|
|
10998
|
-
interface
|
|
11528
|
+
interface CodexConfig {
|
|
10999
11529
|
model: string;
|
|
11000
|
-
system: string |
|
|
11001
|
-
}
|
|
11002
|
-
/**
|
|
11003
|
-
* The Ellipsis product namespace for a config file: which schema this is
|
|
11004
|
-
* (`version`), the human-facing identity (`name`/`description`), freeform
|
|
11005
|
-
* organizational `metadata`, and whether the agent is `enabled`. The
|
|
11006
|
-
* presence of a top-level `ellipsis:` mapping is what marks a YAML file as
|
|
11007
|
-
* an Ellipsis agent config (vs arbitrary YAML that merely lives under a
|
|
11008
|
-
* config directory) — see `yaml_is_ellipsis_config`.
|
|
11009
|
-
*
|
|
11010
|
-
* `enabled` is agent behavior, not freeform metadata, so it stays inside
|
|
11011
|
-
* the config `sha` (only `metadata` is sha-excluded). Whether a session
|
|
11012
|
-
* accepts messages is a per-run choice (POST /v1/sessions `interactive`),
|
|
11013
|
-
* not a config one.
|
|
11014
|
-
*/
|
|
11015
|
-
interface AgentConfigEllipsis {
|
|
11016
|
-
description: string | null;
|
|
11017
|
-
enabled: boolean;
|
|
11018
|
-
metadata: AgentConfigMetadata;
|
|
11019
|
-
name: string | null;
|
|
11020
|
-
version: string;
|
|
11021
|
-
}
|
|
11022
|
-
interface AgentConfigMetadata {
|
|
11023
|
-
annotations: {
|
|
11024
|
-
[k: string]: string;
|
|
11025
|
-
};
|
|
11026
|
-
labels: string[];
|
|
11530
|
+
system: string | SystemFileRef | (string | SystemFileRef)[];
|
|
11027
11531
|
}
|
|
11028
11532
|
/**
|
|
11029
11533
|
* Everything about the environment (the sandbox) the agent runs in: which
|
|
@@ -11038,13 +11542,13 @@ interface AgentConfigMetadata {
|
|
|
11038
11542
|
* stored variables never do. This is how a config brings in the config and
|
|
11039
11543
|
* credentials a custom CLI needs.
|
|
11040
11544
|
*/
|
|
11041
|
-
interface
|
|
11042
|
-
compute:
|
|
11043
|
-
hooks:
|
|
11044
|
-
image:
|
|
11045
|
-
mcp_servers: (string |
|
|
11046
|
-
repositories:
|
|
11047
|
-
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[];
|
|
11048
11552
|
}
|
|
11049
11553
|
/**
|
|
11050
11554
|
* Sandbox compute sizing. Every field is optional; None inherits the
|
|
@@ -11068,17 +11572,17 @@ interface AgentConfigEnvironment {
|
|
|
11068
11572
|
* Compute is billed on the requested allocation over the sandbox's
|
|
11069
11573
|
* wall-clock lifetime, so a bigger/longer box costs proportionally more.
|
|
11070
11574
|
*/
|
|
11071
|
-
interface
|
|
11575
|
+
interface ComputeConfig {
|
|
11072
11576
|
cpu: number | null;
|
|
11073
|
-
memory: string |
|
|
11074
|
-
timeout: string |
|
|
11577
|
+
memory: string | MemorySize | null;
|
|
11578
|
+
timeout: string | Duration | null;
|
|
11075
11579
|
}
|
|
11076
11580
|
/**
|
|
11077
11581
|
* A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).
|
|
11078
11582
|
* Set any of `gb`/`mb` (at least one). The alternative to the `8GB`-style
|
|
11079
11583
|
* shorthand string.
|
|
11080
11584
|
*/
|
|
11081
|
-
interface
|
|
11585
|
+
interface MemorySize {
|
|
11082
11586
|
gb: number | null;
|
|
11083
11587
|
mb: number | null;
|
|
11084
11588
|
}
|
|
@@ -11087,7 +11591,7 @@ interface AgentConfigMemorySize {
|
|
|
11087
11591
|
* `seconds` (at least one). The alternative to the `30m`-style shorthand
|
|
11088
11592
|
* string wherever a duration is accepted.
|
|
11089
11593
|
*/
|
|
11090
|
-
interface
|
|
11594
|
+
interface Duration {
|
|
11091
11595
|
hours: number | null;
|
|
11092
11596
|
minutes: number | null;
|
|
11093
11597
|
seconds: number | null;
|
|
@@ -11110,7 +11614,7 @@ interface AgentConfigDuration {
|
|
|
11110
11614
|
* (baked into the cached image) instead; keep hooks for per-run work — e.g.
|
|
11111
11615
|
* anything that touches run-scoped credentials.
|
|
11112
11616
|
*/
|
|
11113
|
-
interface
|
|
11617
|
+
interface EnvironmentHooks {
|
|
11114
11618
|
post_clone: string | null;
|
|
11115
11619
|
post_start: string | null;
|
|
11116
11620
|
}
|
|
@@ -11129,7 +11633,7 @@ interface AgentConfigEnvironmentHooks {
|
|
|
11129
11633
|
* `npm install`), so later runs start with deps already on disk. Neither runs
|
|
11130
11634
|
* per run; that's `hooks.post_start` / `hooks.post_clone`.
|
|
11131
11635
|
*/
|
|
11132
|
-
interface
|
|
11636
|
+
interface EnvironmentImage {
|
|
11133
11637
|
dockerfile_append: string | null;
|
|
11134
11638
|
setup: string | null;
|
|
11135
11639
|
}
|
|
@@ -11139,10 +11643,10 @@ interface AgentConfigEnvironmentImage {
|
|
|
11139
11643
|
* server's transport and credentials. It only matters when the named
|
|
11140
11644
|
* integration is set to `opt_in` inclusion; an integration in the default
|
|
11141
11645
|
* `all_sessions` mode is added regardless. For a server the platform does not
|
|
11142
|
-
* provide, define it instead (`
|
|
11143
|
-
* `
|
|
11646
|
+
* provide, define it instead (`McpStdioServer` /
|
|
11647
|
+
* `McpRemoteServer`).
|
|
11144
11648
|
*/
|
|
11145
|
-
interface
|
|
11649
|
+
interface McpServerRef {
|
|
11146
11650
|
name: string;
|
|
11147
11651
|
}
|
|
11148
11652
|
/**
|
|
@@ -11155,7 +11659,7 @@ interface AgentConfigMcpServer {
|
|
|
11155
11659
|
* account's secrets store (see `mcp_secret_refs`); everything else is passed
|
|
11156
11660
|
* literally.
|
|
11157
11661
|
*/
|
|
11158
|
-
interface
|
|
11662
|
+
interface McpStdioServer {
|
|
11159
11663
|
args: string[];
|
|
11160
11664
|
command: string;
|
|
11161
11665
|
env: {
|
|
@@ -11169,7 +11673,7 @@ interface AgentConfigMcpStdioServer {
|
|
|
11169
11673
|
* `Authorization: Bearer ${TOKEN}`); values may embed `${NAME}` secret
|
|
11170
11674
|
* references, resolved at run time from the account's secrets store.
|
|
11171
11675
|
*/
|
|
11172
|
-
interface
|
|
11676
|
+
interface McpRemoteServer {
|
|
11173
11677
|
headers: {
|
|
11174
11678
|
[k: string]: string;
|
|
11175
11679
|
};
|
|
@@ -11186,37 +11690,16 @@ interface AgentConfigMcpRemoteServer {
|
|
|
11186
11690
|
* ever putting it in the config file. Either way the variable only reaches
|
|
11187
11691
|
* agents that name it.
|
|
11188
11692
|
*/
|
|
11189
|
-
interface
|
|
11693
|
+
interface EnvironmentVariable {
|
|
11190
11694
|
name: string;
|
|
11191
11695
|
value: string | null;
|
|
11192
11696
|
}
|
|
11193
|
-
/**
|
|
11194
|
-
* The typed input contract: what goes INTO a session (the trigger is
|
|
11195
|
-
* when it happens; this is what goes in).
|
|
11196
|
-
*
|
|
11197
|
-
* `json_schema` types the payload a caller-started session takes
|
|
11198
|
-
* (`POST /v1/sessions` `input`, validated at the door; required when
|
|
11199
|
-
* declared). It is illegal on a react-triggered agent — react payloads are
|
|
11200
|
-
* platform-shaped (the published surface field sets), not caller-shaped.
|
|
11201
|
-
*
|
|
11202
|
-
* `message` is the initial-message template: exact `{{path}}` substitution
|
|
11203
|
-
* over the caller payload (or, on a react agent, over the surface's
|
|
11204
|
-
* published fields), no conditionals/loops/filters. Refs are validated at
|
|
11205
|
-
* deploy time against the governing field set (see AgentConfig's
|
|
11206
|
-
* `_check_input`).
|
|
11207
|
-
*/
|
|
11208
|
-
interface AgentConfigInput {
|
|
11209
|
-
json_schema: {
|
|
11210
|
-
[k: string]: unknown;
|
|
11211
|
-
} | null;
|
|
11212
|
-
message: string | null;
|
|
11213
|
-
}
|
|
11214
11697
|
/**
|
|
11215
11698
|
* The typed output contract: the JSON Schema the agent must exit through
|
|
11216
11699
|
* (the StructuredOutput exit tool). Read back via
|
|
11217
11700
|
* GET /v1/sessions/{id}/output.
|
|
11218
11701
|
*/
|
|
11219
|
-
interface
|
|
11702
|
+
interface OutputConfig {
|
|
11220
11703
|
json_schema: {
|
|
11221
11704
|
[k: string]: unknown;
|
|
11222
11705
|
};
|
|
@@ -11230,16 +11713,16 @@ interface AgentConfigOutput {
|
|
|
11230
11713
|
* (`ELLIPSIS_API_TOKEN`, what the in-sandbox `agent` CLI authenticates
|
|
11231
11714
|
* with). `true` / the string `all` (the default) grant the full sandbox
|
|
11232
11715
|
* ceiling — everything a sandbox token can ever do. A map narrows it per
|
|
11233
|
-
* resource (see `
|
|
11716
|
+
* resource (see `EllipsisPermissions`); the minted token carries
|
|
11234
11717
|
* the intersection, so a config can only ever reduce access. `false` fails
|
|
11235
11718
|
* validation — an agent with no API token cannot report its own progress.
|
|
11236
11719
|
*
|
|
11237
11720
|
* `github` scopes the sandbox's GitHub installation token (`GH_TOKEN`) —
|
|
11238
|
-
* see `
|
|
11721
|
+
* see `GithubPermissions`. GitHub enforces it at mint time.
|
|
11239
11722
|
*/
|
|
11240
|
-
interface
|
|
11241
|
-
ellipsis: (true | 'all') |
|
|
11242
|
-
github:
|
|
11723
|
+
interface PermissionsConfig {
|
|
11724
|
+
ellipsis: (true | 'all') | EllipsisPermissions;
|
|
11725
|
+
github: GithubPermissions;
|
|
11243
11726
|
}
|
|
11244
11727
|
/**
|
|
11245
11728
|
* `permissions.ellipsis` as a map: resource → level | grant | list of
|
|
@@ -11248,7 +11731,7 @@ interface AgentConfigPermissions {
|
|
|
11248
11731
|
* intersected with the platform's sandbox ceiling at token mint — it can
|
|
11249
11732
|
* narrow what a sandbox token may do, never exceed it.
|
|
11250
11733
|
*/
|
|
11251
|
-
interface
|
|
11734
|
+
interface EllipsisPermissions {
|
|
11252
11735
|
[k: string]: Level | EllipsisGrant | (Level | EllipsisGrant)[];
|
|
11253
11736
|
}
|
|
11254
11737
|
/**
|
|
@@ -11277,7 +11760,7 @@ interface EllipsisGrant {
|
|
|
11277
11760
|
* minted with the reduced scope, so nothing running in the sandbox can
|
|
11278
11761
|
* exceed it.
|
|
11279
11762
|
*/
|
|
11280
|
-
interface
|
|
11763
|
+
interface GithubPermissions {
|
|
11281
11764
|
permissions: 'read_only' | {
|
|
11282
11765
|
[k: string]: string;
|
|
11283
11766
|
} | null;
|
|
@@ -11292,15 +11775,15 @@ interface AgentConfigGithubPermissions {
|
|
|
11292
11775
|
* Skills under a cloned repo's own `.claude/skills/` load by themselves and
|
|
11293
11776
|
* don't need an entry here.
|
|
11294
11777
|
*/
|
|
11295
|
-
interface
|
|
11778
|
+
interface SkillRef {
|
|
11296
11779
|
path: string;
|
|
11297
|
-
repository:
|
|
11780
|
+
repository: RepositoryRef | null;
|
|
11298
11781
|
}
|
|
11299
|
-
interface
|
|
11782
|
+
interface CronTrigger {
|
|
11300
11783
|
schedule: string;
|
|
11301
11784
|
type: 'cron';
|
|
11302
11785
|
}
|
|
11303
|
-
interface
|
|
11786
|
+
interface ReactTrigger {
|
|
11304
11787
|
issue: ReactIssue | null;
|
|
11305
11788
|
linear_issue: ReactLinearIssue | null;
|
|
11306
11789
|
pull_request: ReactPullRequest | null;
|
|
@@ -11352,40 +11835,6 @@ interface ReactSentry {
|
|
|
11352
11835
|
}
|
|
11353
11836
|
interface ReactSlackChannel {
|
|
11354
11837
|
}
|
|
11355
|
-
interface AgentConfigMentionTrigger {
|
|
11356
|
-
platforms: AgentConfigMentionPlatform[];
|
|
11357
|
-
type: 'mention';
|
|
11358
|
-
}
|
|
11359
|
-
/**
|
|
11360
|
-
* The principal this session is attributed to.
|
|
11361
|
-
*/
|
|
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;
|
|
11371
|
-
/**
|
|
11372
|
-
* The GitHub user the session is attributed to, resolved at read time. Null when the attribution is not a GitHub user.
|
|
11373
|
-
*/
|
|
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
11838
|
/**
|
|
11390
11839
|
* The spend budget enforced for this session.
|
|
11391
11840
|
*/
|
|
@@ -11396,6 +11845,18 @@ interface SessionBudget {
|
|
|
11396
11845
|
cents: number;
|
|
11397
11846
|
source: BudgetSource;
|
|
11398
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
|
+
}
|
|
11399
11860
|
/**
|
|
11400
11861
|
* What the session cost, in millicents, broken down by leg and carrying its own total.
|
|
11401
11862
|
*/
|
|
@@ -11422,7 +11883,7 @@ interface SessionCost {
|
|
|
11422
11883
|
total: number;
|
|
11423
11884
|
}
|
|
11424
11885
|
/**
|
|
11425
|
-
* 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`.
|
|
11426
11887
|
*/
|
|
11427
11888
|
interface SessionEnvironment {
|
|
11428
11889
|
/**
|
|
@@ -12083,9 +12544,13 @@ interface SessionFrame {
|
|
|
12083
12544
|
* The session's current state.
|
|
12084
12545
|
*/
|
|
12085
12546
|
interface Session1 {
|
|
12086
|
-
agent: SessionAgent;
|
|
12087
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;
|
|
12088
12552
|
budget: SessionBudget;
|
|
12553
|
+
config: SessionConfig1;
|
|
12089
12554
|
/**
|
|
12090
12555
|
* The "owner/name" repository context the session was started in, if any.
|
|
12091
12556
|
*/
|
|
@@ -12250,4 +12715,4 @@ type ReviewRequester = components['schemas']['ReviewRequester'];
|
|
|
12250
12715
|
type ReviewFinding = components['schemas']['ReviewFinding'];
|
|
12251
12716
|
type Finding = ReviewFinding;
|
|
12252
12717
|
|
|
12253
|
-
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 };
|