@ellipsis-dev/sdk 0.31.0 → 0.33.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.
@@ -126,6 +126,11 @@
126
126
  "description": "The open pull request that adds this agent's file. Non-null means the agent is not live yet: it starts running once the pull request merges and syncs.",
127
127
  "title": "Pending Pull Request Url"
128
128
  },
129
+ "raw_yaml": {
130
+ "description": "The agent's YAML: the file as written for agents defined in a repository, or the definition rendered as YAML for agents managed through the API. A failed sync keeps the last valid YAML.",
131
+ "title": "Raw Yaml",
132
+ "type": "string"
133
+ },
129
134
  "sha": {
130
135
  "description": "The definition's content identity: the version fingerprint frozen onto each session that runs it.",
131
136
  "title": "Sha",
@@ -163,6 +168,7 @@
163
168
  "managed_by",
164
169
  "name",
165
170
  "pending_pull_request_url",
171
+ "raw_yaml",
166
172
  "sha",
167
173
  "source_details",
168
174
  "updated_at"
@@ -229,7 +235,7 @@
229
235
  },
230
236
  "AgentIdentity": {
231
237
  "additionalProperties": false,
232
- "description": "The Ellipsis product namespace for a config file: which schema this is\n(`version`), the human-facing identity (`name`/`description`), freeform\norganizational `metadata`, and whether the agent is `enabled`. The\npresence of a top-level `ellipsis:` mapping is what marks a YAML file as\nan Ellipsis agent (vs arbitrary YAML that merely lives under a\nconfig directory) \u2014 see `yaml_is_ellipsis_config`.\n\n`enabled` is agent behavior, not freeform metadata, so it stays inside\nthe config `sha` (only `metadata` is sha-excluded). Whether a session\naccepts messages is a per-run choice (POST /v1/sessions `interactive`),\nnot a config one.",
238
+ "description": "The Ellipsis product namespace for a config file: which schema this is\n(`version`), the human-facing identity (`name`/`description`), freeform\norganizational `metadata`, and whether the agent is `enabled`. The\npresence of a top-level `ellipsis:` mapping is what marks a YAML file as\nan Ellipsis agent (vs arbitrary YAML that merely lives under a\nconfig directory) \u2014 see `yaml_is_ellipsis_config`.\n\n`enabled` is agent behavior, not freeform metadata, so it stays inside\nthe config `sha` (only `metadata` is sha-excluded).",
233
239
  "properties": {
234
240
  "description": {
235
241
  "anyOf": [
@@ -324,6 +330,7 @@
324
330
  },
325
331
  "BudgetConfig": {
326
332
  "additionalProperties": false,
333
+ "description": "A saved agent's spend limits: the per-session cap plus its total spend\nover the trailing 1, 7, and 28 days.",
327
334
  "properties": {
328
335
  "day": {
329
336
  "anyOf": [
@@ -335,6 +342,7 @@
335
342
  }
336
343
  ],
337
344
  "default": null,
345
+ "description": "The most the agent may spend over the last day, in US dollars.",
338
346
  "title": "Day"
339
347
  },
340
348
  "month": {
@@ -347,6 +355,7 @@
347
355
  }
348
356
  ],
349
357
  "default": null,
358
+ "description": "The most the agent may spend over the last 28 days, in US dollars.",
350
359
  "title": "Month"
351
360
  },
352
361
  "session": {
@@ -360,6 +369,7 @@
360
369
  }
361
370
  ],
362
371
  "default": null,
372
+ "description": "The most one session may spend, in US dollars.",
363
373
  "title": "Session"
364
374
  },
365
375
  "week": {
@@ -372,6 +382,7 @@
372
382
  }
373
383
  ],
374
384
  "default": null,
385
+ "description": "The most the agent may spend over the last 7 days, in US dollars.",
375
386
  "title": "Week"
376
387
  }
377
388
  },
@@ -384,6 +395,42 @@
384
395
  "title": "BudgetConfig",
385
396
  "type": "object"
386
397
  },
398
+ "CheckRunAction": {
399
+ "description": "The state of a check run when GitHub reports it. A run created before it finishes fires its status, and `in_progress` is `started`. A finished run fires its conclusion, `success` is `passed` and `failure` is `failed`. Every other value is the GitHub word.",
400
+ "enum": [
401
+ "requested",
402
+ "queued",
403
+ "waiting",
404
+ "pending",
405
+ "started",
406
+ "passed",
407
+ "failed",
408
+ "timed_out",
409
+ "cancelled",
410
+ "skipped",
411
+ "neutral",
412
+ "action_required",
413
+ "stale"
414
+ ],
415
+ "title": "CheckRunAction",
416
+ "type": "string"
417
+ },
418
+ "CheckSuiteAction": {
419
+ "description": "The conclusion of a finished check suite. `success` is `passed` and `failure` is `failed`. Every other value is the GitHub word.",
420
+ "enum": [
421
+ "passed",
422
+ "failed",
423
+ "timed_out",
424
+ "cancelled",
425
+ "skipped",
426
+ "neutral",
427
+ "action_required",
428
+ "stale",
429
+ "startup_failure"
430
+ ],
431
+ "title": "CheckSuiteAction",
432
+ "type": "string"
433
+ },
387
434
  "ClaudeConfig": {
388
435
  "additionalProperties": false,
389
436
  "description": "Native Claude Code options for an explicitly selected harness.",
@@ -425,16 +472,9 @@
425
472
  "title": "Max Turns"
426
473
  },
427
474
  "model": {
428
- "anyOf": [
429
- {
430
- "type": "string"
431
- },
432
- {
433
- "type": "null"
434
- }
435
- ],
436
- "default": null,
437
- "title": "Model"
475
+ "description": "The model the session runs on: an alias or canonical id from the models table. Required.",
476
+ "title": "Model",
477
+ "type": "string"
438
478
  },
439
479
  "prompt": {
440
480
  "anyOf": [
@@ -474,7 +514,7 @@
474
514
  },
475
515
  "CodexConfig": {
476
516
  "additionalProperties": false,
477
- "description": "Native options supported by the current Codex adapter.\n\nOptions and capabilities expand only when their runtime behavior is tested.\nUnknown options are rejected instead of silently ignored.",
517
+ "description": "Native options supported by the current Codex adapter.",
478
518
  "properties": {
479
519
  "effort": {
480
520
  "anyOf": [
@@ -489,7 +529,7 @@
489
529
  "description": "Reasoning effort for every turn. Omit to use the model default."
490
530
  },
491
531
  "model": {
492
- "default": "gpt-6-sol",
532
+ "description": "The model the session runs on: a Responses-capable id from the models table. Required.",
493
533
  "title": "Model",
494
534
  "type": "string"
495
535
  },
@@ -635,9 +675,64 @@
635
675
  "title": "ConfigMetadata",
636
676
  "type": "object"
637
677
  },
678
+ "Cost": {
679
+ "description": "What something cost, in millicents.",
680
+ "properties": {
681
+ "charged": {
682
+ "default": 0,
683
+ "description": "What Ellipsis charged to credit, in millicents. It is everything except subscription tokens, and it is what the budget caps.",
684
+ "title": "Charged",
685
+ "type": "integer"
686
+ },
687
+ "cpu": {
688
+ "default": 0,
689
+ "description": "CPU spend in millicents.",
690
+ "title": "Cpu",
691
+ "type": "integer"
692
+ },
693
+ "fee": {
694
+ "default": 0,
695
+ "description": "Platform fee in millicents.",
696
+ "title": "Fee",
697
+ "type": "integer"
698
+ },
699
+ "llm": {
700
+ "$ref": "#/$defs/LlmCost",
701
+ "description": "LLM token cost, in total and by model, split by who paid."
702
+ },
703
+ "memory": {
704
+ "default": 0,
705
+ "description": "Memory spend in millicents.",
706
+ "title": "Memory",
707
+ "type": "integer"
708
+ },
709
+ "total": {
710
+ "default": 0,
711
+ "description": "Everything it cost, whoever paid, in millicents. It is the sum of llm.all.total, cpu, memory, and fee.",
712
+ "title": "Total",
713
+ "type": "integer"
714
+ }
715
+ },
716
+ "required": [
717
+ "charged",
718
+ "cpu",
719
+ "fee",
720
+ "llm",
721
+ "memory",
722
+ "total"
723
+ ],
724
+ "title": "Cost",
725
+ "type": "object"
726
+ },
638
727
  "CronTrigger": {
639
728
  "additionalProperties": false,
729
+ "description": "A schedule: `schedule` is a five-field cron expression in UTC.\n\n`enabled: false` pauses the trigger and keeps its definition: the schedule\nstops firing while the agent stays live for on-demand starts and open\nsessions keep taking follow-ups (`ellipsis.enabled: false` pauses the\nwhole file instead). Re-enabling resumes at the next scheduled time; runs\nmissed while paused are not made up.",
640
730
  "properties": {
731
+ "enabled": {
732
+ "default": true,
733
+ "title": "Enabled",
734
+ "type": "boolean"
735
+ },
641
736
  "schedule": {
642
737
  "title": "Schedule",
643
738
  "type": "string"
@@ -650,6 +745,7 @@
650
745
  }
651
746
  },
652
747
  "required": [
748
+ "enabled",
653
749
  "schedule",
654
750
  "type"
655
751
  ],
@@ -721,7 +817,7 @@
721
817
  },
722
818
  "EllipsisGrant": {
723
819
  "additionalProperties": false,
724
- "description": "One grant entry: a level, optionally narrowed to instances whose\nnatural key (a file's name, a memory's path, a secret's name, a config's\nname, a session's id) matches any of the `match` globs.",
820
+ "description": "One grant entry: a level, optionally narrowed to instances whose\nnatural key (a file's name, a secret's name, a config's name, a session's\nid) matches any of the `match` globs.",
725
821
  "properties": {
726
822
  "level": {
727
823
  "$ref": "#/$defs/Level"
@@ -1080,17 +1176,26 @@
1080
1176
  },
1081
1177
  "GithubAccountSelector": {
1082
1178
  "additionalProperties": false,
1083
- "description": "A selector of GitHub accounts \u2014 the `for:` audience gate on react\nsurfaces and code review pipelines, classified on the stable entity author\n(the pusher for `push`, the PR author for a review). `users` selects human\naccounts, `bots` selects bot accounts; each is a `GithubAccountFilter`\n(include minus exclude, with bare bool/list shorthand).",
1179
+ "description": "A selector of GitHub accounts \u2014 the `for:` audience gate on react\nsurfaces, classified on the stable entity author (the pusher for `push`,\nthe PR author for a pull request). `users` selects human\naccounts, `bots` selects bot accounts; each is a `GithubAccountFilter`\n(include minus exclude, with bare bool/list shorthand).\n\n`teams` narrows further to members of any of the listed GitHub teams of\nthe installation's organization, by slug (`platform` for\n`@org/platform`). It applies on top of `users`: the author must pass the\nusers filter AND belong to a listed team. A bot is never a team member,\nso a selector with `teams` never admits one. Membership is resolved live\nat match time (see `TriggerEventContext.is_author_team_member`), and the\nconfig sync refuses a team that does not exist when the file is\naccepted.",
1084
1180
  "properties": {
1085
1181
  "bots": {
1086
1182
  "$ref": "#/$defs/GithubAccountFilter"
1087
1183
  },
1184
+ "teams": {
1185
+ "default": [],
1186
+ "items": {
1187
+ "type": "string"
1188
+ },
1189
+ "title": "Teams",
1190
+ "type": "array"
1191
+ },
1088
1192
  "users": {
1089
1193
  "$ref": "#/$defs/GithubAccountFilter"
1090
1194
  }
1091
1195
  },
1092
1196
  "required": [
1093
1197
  "bots",
1198
+ "teams",
1094
1199
  "users"
1095
1200
  ],
1096
1201
  "title": "GithubAccountSelector",
@@ -1111,6 +1216,18 @@
1111
1216
  "title": "Login",
1112
1217
  "type": "string"
1113
1218
  },
1219
+ "name": {
1220
+ "anyOf": [
1221
+ {
1222
+ "type": "string"
1223
+ },
1224
+ {
1225
+ "type": "null"
1226
+ }
1227
+ ],
1228
+ "default": null,
1229
+ "title": "Name"
1230
+ },
1114
1231
  "type": {
1115
1232
  "$ref": "#/$defs/GithubAccountType"
1116
1233
  }
@@ -1119,6 +1236,7 @@
1119
1236
  "avatar_url",
1120
1237
  "id",
1121
1238
  "login",
1239
+ "name",
1122
1240
  "type"
1123
1241
  ],
1124
1242
  "title": "GithubAccountSnippet",
@@ -1134,6 +1252,194 @@
1134
1252
  "title": "GithubAccountType",
1135
1253
  "type": "string"
1136
1254
  },
1255
+ "GithubCheckRunEvent": {
1256
+ "properties": {
1257
+ "action": {
1258
+ "$ref": "#/$defs/CheckRunAction"
1259
+ },
1260
+ "actor": {
1261
+ "anyOf": [
1262
+ {
1263
+ "$ref": "#/$defs/SessionEventActor"
1264
+ },
1265
+ {
1266
+ "type": "null"
1267
+ }
1268
+ ],
1269
+ "default": null
1270
+ },
1271
+ "branch": {
1272
+ "anyOf": [
1273
+ {
1274
+ "type": "string"
1275
+ },
1276
+ {
1277
+ "type": "null"
1278
+ }
1279
+ ],
1280
+ "default": null,
1281
+ "title": "Branch"
1282
+ },
1283
+ "conclusion": {
1284
+ "anyOf": [
1285
+ {
1286
+ "type": "string"
1287
+ },
1288
+ {
1289
+ "type": "null"
1290
+ }
1291
+ ],
1292
+ "default": null,
1293
+ "title": "Conclusion"
1294
+ },
1295
+ "head_sha": {
1296
+ "title": "Head Sha",
1297
+ "type": "string"
1298
+ },
1299
+ "name": {
1300
+ "title": "Name",
1301
+ "type": "string"
1302
+ },
1303
+ "pull_request_number": {
1304
+ "anyOf": [
1305
+ {
1306
+ "type": "integer"
1307
+ },
1308
+ {
1309
+ "type": "null"
1310
+ }
1311
+ ],
1312
+ "default": null,
1313
+ "title": "Pull Request Number"
1314
+ },
1315
+ "repository": {
1316
+ "title": "Repository",
1317
+ "type": "string"
1318
+ },
1319
+ "type": {
1320
+ "const": "github.check_run",
1321
+ "default": "github.check_run",
1322
+ "title": "Type",
1323
+ "type": "string"
1324
+ },
1325
+ "url": {
1326
+ "title": "Url",
1327
+ "type": "string"
1328
+ }
1329
+ },
1330
+ "required": [
1331
+ "action",
1332
+ "actor",
1333
+ "branch",
1334
+ "conclusion",
1335
+ "head_sha",
1336
+ "name",
1337
+ "pull_request_number",
1338
+ "repository",
1339
+ "type",
1340
+ "url"
1341
+ ],
1342
+ "title": "GithubCheckRunEvent",
1343
+ "type": "object"
1344
+ },
1345
+ "GithubCheckSuiteEvent": {
1346
+ "properties": {
1347
+ "action": {
1348
+ "$ref": "#/$defs/CheckSuiteAction"
1349
+ },
1350
+ "actor": {
1351
+ "anyOf": [
1352
+ {
1353
+ "$ref": "#/$defs/SessionEventActor"
1354
+ },
1355
+ {
1356
+ "type": "null"
1357
+ }
1358
+ ],
1359
+ "default": null
1360
+ },
1361
+ "app": {
1362
+ "anyOf": [
1363
+ {
1364
+ "type": "string"
1365
+ },
1366
+ {
1367
+ "type": "null"
1368
+ }
1369
+ ],
1370
+ "default": null,
1371
+ "title": "App"
1372
+ },
1373
+ "branch": {
1374
+ "anyOf": [
1375
+ {
1376
+ "type": "string"
1377
+ },
1378
+ {
1379
+ "type": "null"
1380
+ }
1381
+ ],
1382
+ "default": null,
1383
+ "title": "Branch"
1384
+ },
1385
+ "conclusion": {
1386
+ "anyOf": [
1387
+ {
1388
+ "type": "string"
1389
+ },
1390
+ {
1391
+ "type": "null"
1392
+ }
1393
+ ],
1394
+ "default": null,
1395
+ "title": "Conclusion"
1396
+ },
1397
+ "head_sha": {
1398
+ "title": "Head Sha",
1399
+ "type": "string"
1400
+ },
1401
+ "pull_request_number": {
1402
+ "anyOf": [
1403
+ {
1404
+ "type": "integer"
1405
+ },
1406
+ {
1407
+ "type": "null"
1408
+ }
1409
+ ],
1410
+ "default": null,
1411
+ "title": "Pull Request Number"
1412
+ },
1413
+ "repository": {
1414
+ "title": "Repository",
1415
+ "type": "string"
1416
+ },
1417
+ "type": {
1418
+ "const": "github.check_suite",
1419
+ "default": "github.check_suite",
1420
+ "title": "Type",
1421
+ "type": "string"
1422
+ },
1423
+ "url": {
1424
+ "title": "Url",
1425
+ "type": "string"
1426
+ }
1427
+ },
1428
+ "required": [
1429
+ "action",
1430
+ "actor",
1431
+ "app",
1432
+ "branch",
1433
+ "conclusion",
1434
+ "head_sha",
1435
+ "pull_request_number",
1436
+ "repository",
1437
+ "type",
1438
+ "url"
1439
+ ],
1440
+ "title": "GithubCheckSuiteEvent",
1441
+ "type": "object"
1442
+ },
1137
1443
  "GithubIssueEvent": {
1138
1444
  "properties": {
1139
1445
  "action": {
@@ -1187,7 +1493,7 @@
1187
1493
  },
1188
1494
  "GithubPermissions": {
1189
1495
  "additionalProperties": false,
1190
- "description": "The agent's GitHub access: the scope of the installation token minted for\nits session's environment \u2014 the credential `git`, `gh`, and the GitHub MCP\nserver authenticate with.\n\nBy default the token carries the installation's full permissions on all of\nthe installation's repositories. `permissions` narrows what it may do:\nthe string `read_only` grants read access to contents, issues, metadata and\npull requests; a map requests explicit levels per GitHub App permission\nscope (e.g. `{contents: read, pull_requests: write}`) and may never exceed\nwhat the installation granted. `repositories` scopes the token to exactly\nthe listed repos, by name (they must belong to the installation).\n\nRestriction is enforced by GitHub, not by Ellipsis: the token itself is\nminted with the reduced scope, so nothing running in the environment can\nexceed it.",
1496
+ "description": "The agent's GitHub access: the scope of the installation token minted for\nits session's environment \u2014 the credential `git` and `gh` authenticate\nwith.\n\nBy default the token carries the installation's full permissions on all of\nthe installation's repositories. `permissions` narrows what it may do:\nthe string `read_only` grants read access to every scope the installation\ngranted; a map requests explicit levels per GitHub App permission\nscope (e.g. `{contents: read, pull_requests: write}`) and may never exceed\nwhat the installation granted. `repositories` scopes the token to exactly\nthe listed repos, by name (they must belong to the installation).\n\nRestriction is enforced by GitHub, not by Ellipsis: the token itself is\nminted with the reduced scope, so nothing running in the environment can\nexceed it.",
1191
1497
  "properties": {
1192
1498
  "permissions": {
1193
1499
  "anyOf": [
@@ -1348,20 +1654,84 @@
1348
1654
  "title": "GithubPushEvent",
1349
1655
  "type": "object"
1350
1656
  },
1351
- "GithubSourceDetails": {
1352
- "description": "Identifies the file a GitHub-sourced agent is synced from.\n\nIdentified by the repository ID (not owner/name) so repository and org renames\ndon't orphan the config; resolve display names from gh_repositories at\nread time.",
1657
+ "GithubReleaseEvent": {
1353
1658
  "properties": {
1354
- "branch": {
1355
- "title": "Branch",
1356
- "type": "string"
1357
- },
1358
- "path": {
1359
- "title": "Path",
1360
- "type": "string"
1659
+ "action": {
1660
+ "$ref": "#/$defs/ReleaseAction"
1361
1661
  },
1362
- "repo_id": {
1363
- "title": "Repo Id",
1364
- "type": "integer"
1662
+ "actor": {
1663
+ "anyOf": [
1664
+ {
1665
+ "$ref": "#/$defs/SessionEventActor"
1666
+ },
1667
+ {
1668
+ "type": "null"
1669
+ }
1670
+ ],
1671
+ "default": null
1672
+ },
1673
+ "name": {
1674
+ "anyOf": [
1675
+ {
1676
+ "type": "string"
1677
+ },
1678
+ {
1679
+ "type": "null"
1680
+ }
1681
+ ],
1682
+ "default": null,
1683
+ "title": "Name"
1684
+ },
1685
+ "prerelease": {
1686
+ "title": "Prerelease",
1687
+ "type": "boolean"
1688
+ },
1689
+ "repository": {
1690
+ "title": "Repository",
1691
+ "type": "string"
1692
+ },
1693
+ "tag": {
1694
+ "title": "Tag",
1695
+ "type": "string"
1696
+ },
1697
+ "type": {
1698
+ "const": "github.release",
1699
+ "default": "github.release",
1700
+ "title": "Type",
1701
+ "type": "string"
1702
+ },
1703
+ "url": {
1704
+ "title": "Url",
1705
+ "type": "string"
1706
+ }
1707
+ },
1708
+ "required": [
1709
+ "action",
1710
+ "actor",
1711
+ "name",
1712
+ "prerelease",
1713
+ "repository",
1714
+ "tag",
1715
+ "type",
1716
+ "url"
1717
+ ],
1718
+ "title": "GithubReleaseEvent",
1719
+ "type": "object"
1720
+ },
1721
+ "GithubSourceDetails": {
1722
+ "description": "Identifies the file a GitHub-sourced agent is synced from.\n\nIdentified by the repository ID (not owner/name) so repository and org renames\ndon't orphan the config; resolve display names from gh_repositories at\nread time.",
1723
+ "properties": {
1724
+ "branch": {
1725
+ "title": "Branch",
1726
+ "type": "string"
1727
+ },
1728
+ "path": {
1729
+ "title": "Path",
1730
+ "type": "string"
1731
+ },
1732
+ "repo_id": {
1733
+ "title": "Repo Id",
1734
+ "type": "integer"
1365
1735
  }
1366
1736
  },
1367
1737
  "required": [
@@ -1372,6 +1742,183 @@
1372
1742
  "title": "GithubSourceDetails",
1373
1743
  "type": "object"
1374
1744
  },
1745
+ "GithubStatusEvent": {
1746
+ "properties": {
1747
+ "action": {
1748
+ "$ref": "#/$defs/StatusAction"
1749
+ },
1750
+ "actor": {
1751
+ "anyOf": [
1752
+ {
1753
+ "$ref": "#/$defs/SessionEventActor"
1754
+ },
1755
+ {
1756
+ "type": "null"
1757
+ }
1758
+ ],
1759
+ "default": null
1760
+ },
1761
+ "branch": {
1762
+ "anyOf": [
1763
+ {
1764
+ "type": "string"
1765
+ },
1766
+ {
1767
+ "type": "null"
1768
+ }
1769
+ ],
1770
+ "default": null,
1771
+ "title": "Branch"
1772
+ },
1773
+ "context": {
1774
+ "title": "Context",
1775
+ "type": "string"
1776
+ },
1777
+ "head_sha": {
1778
+ "title": "Head Sha",
1779
+ "type": "string"
1780
+ },
1781
+ "pull_request_number": {
1782
+ "anyOf": [
1783
+ {
1784
+ "type": "integer"
1785
+ },
1786
+ {
1787
+ "type": "null"
1788
+ }
1789
+ ],
1790
+ "default": null,
1791
+ "title": "Pull Request Number"
1792
+ },
1793
+ "repository": {
1794
+ "title": "Repository",
1795
+ "type": "string"
1796
+ },
1797
+ "state": {
1798
+ "title": "State",
1799
+ "type": "string"
1800
+ },
1801
+ "type": {
1802
+ "const": "github.status",
1803
+ "default": "github.status",
1804
+ "title": "Type",
1805
+ "type": "string"
1806
+ },
1807
+ "url": {
1808
+ "title": "Url",
1809
+ "type": "string"
1810
+ }
1811
+ },
1812
+ "required": [
1813
+ "action",
1814
+ "actor",
1815
+ "branch",
1816
+ "context",
1817
+ "head_sha",
1818
+ "pull_request_number",
1819
+ "repository",
1820
+ "state",
1821
+ "type",
1822
+ "url"
1823
+ ],
1824
+ "title": "GithubStatusEvent",
1825
+ "type": "object"
1826
+ },
1827
+ "GithubWorkflowRunEvent": {
1828
+ "properties": {
1829
+ "action": {
1830
+ "$ref": "#/$defs/WorkflowRunAction"
1831
+ },
1832
+ "actor": {
1833
+ "anyOf": [
1834
+ {
1835
+ "$ref": "#/$defs/SessionEventActor"
1836
+ },
1837
+ {
1838
+ "type": "null"
1839
+ }
1840
+ ],
1841
+ "default": null
1842
+ },
1843
+ "branch": {
1844
+ "anyOf": [
1845
+ {
1846
+ "type": "string"
1847
+ },
1848
+ {
1849
+ "type": "null"
1850
+ }
1851
+ ],
1852
+ "default": null,
1853
+ "title": "Branch"
1854
+ },
1855
+ "conclusion": {
1856
+ "anyOf": [
1857
+ {
1858
+ "type": "string"
1859
+ },
1860
+ {
1861
+ "type": "null"
1862
+ }
1863
+ ],
1864
+ "default": null,
1865
+ "title": "Conclusion"
1866
+ },
1867
+ "head_sha": {
1868
+ "title": "Head Sha",
1869
+ "type": "string"
1870
+ },
1871
+ "name": {
1872
+ "title": "Name",
1873
+ "type": "string"
1874
+ },
1875
+ "pull_request_number": {
1876
+ "anyOf": [
1877
+ {
1878
+ "type": "integer"
1879
+ },
1880
+ {
1881
+ "type": "null"
1882
+ }
1883
+ ],
1884
+ "default": null,
1885
+ "title": "Pull Request Number"
1886
+ },
1887
+ "repository": {
1888
+ "title": "Repository",
1889
+ "type": "string"
1890
+ },
1891
+ "run_number": {
1892
+ "title": "Run Number",
1893
+ "type": "integer"
1894
+ },
1895
+ "type": {
1896
+ "const": "github.workflow_run",
1897
+ "default": "github.workflow_run",
1898
+ "title": "Type",
1899
+ "type": "string"
1900
+ },
1901
+ "url": {
1902
+ "title": "Url",
1903
+ "type": "string"
1904
+ }
1905
+ },
1906
+ "required": [
1907
+ "action",
1908
+ "actor",
1909
+ "branch",
1910
+ "conclusion",
1911
+ "head_sha",
1912
+ "name",
1913
+ "pull_request_number",
1914
+ "repository",
1915
+ "run_number",
1916
+ "type",
1917
+ "url"
1918
+ ],
1919
+ "title": "GithubWorkflowRunEvent",
1920
+ "type": "object"
1921
+ },
1375
1922
  "HandlerService": {
1376
1923
  "description": "The service whose events a handler responds to.",
1377
1924
  "enum": [
@@ -1385,7 +1932,7 @@
1385
1932
  },
1386
1933
  "InputContract": {
1387
1934
  "additionalProperties": false,
1388
- "description": "The typed input contract: what goes INTO a session (the trigger is\nwhen it happens; this is what goes in).\n\n`json_schema` validates customer data sent as `input` to\n`POST /v1/agents/{id}/sessions` and stored as `session.input`.\nInvocations require input when a schema is declared. React agents\ncannot declare schemas: the platform defines their event payloads.\n\n`message` is the initial-message template: exact `{{path}}` substitution\nover the caller payload (or, on a react agent, over the surface's\npublished fields), no conditionals/loops/filters. Refs are validated at\ndeploy time against the governing field set (see AgentConfig's\n`_check_input`).",
1935
+ "description": "The typed input contract: what goes INTO a session (the trigger is\nwhen it happens; this is what goes in).\n\n`json_schema` validates customer data sent as `input` to\n`POST /v1/agents/{id}/sessions` (the dashboard and the CLI start\nthrough the same door) and stored as `session.input`. An on-demand\nstart requires input when a schema is declared. A trigger fires\nwithout it: a cron fire has no payload and a react fire carries the\nplatform-shaped event, so an agent may declare a schema alongside\neither trigger and the schema governs only its on-demand starts.\n\n`message` is the initial-message template: exact `{{path}}` substitution\nover the payload the session has (the caller payload on an on-demand\nstart, the surface's published fields on a react fire, the empty\nobject on a cron fire), no conditionals/loops/filters. Refs are\nvalidated at deploy time against every governing field set (see\nAgentConfig's `_check_input`): the caller schema's paths, the react\nsurface's published fields, and both when the agent has a react trigger\nand a schema, so one template renders fully on either door (declare the\nsurface's field names in the schema). Omit `message` to let each door\nrender its default. An unresolved ref renders as the empty string (a\ncron fire, an optional field the payload omitted).",
1389
1936
  "properties": {
1390
1937
  "json_schema": {
1391
1938
  "anyOf": [
@@ -1454,7 +2001,10 @@
1454
2001
  "$ref": "#/$defs/LinearIssueAction"
1455
2002
  },
1456
2003
  {
1457
- "const": "commented",
2004
+ "enum": [
2005
+ "commented",
2006
+ "delegated"
2007
+ ],
1458
2008
  "type": "string"
1459
2009
  }
1460
2010
  ],
@@ -1514,6 +2064,66 @@
1514
2064
  "title": "LinearIssueEvent",
1515
2065
  "type": "object"
1516
2066
  },
2067
+ "LlmCost": {
2068
+ "description": "What LLM tokens cost, in total and by model.",
2069
+ "properties": {
2070
+ "all": {
2071
+ "$ref": "#/$defs/LlmCostSplit",
2072
+ "description": "Token cost across every model."
2073
+ },
2074
+ "by_model": {
2075
+ "description": "Token cost for each model that used tokens.",
2076
+ "items": {
2077
+ "$ref": "#/$defs/ModelLlmCostSplit"
2078
+ },
2079
+ "title": "By Model",
2080
+ "type": "array"
2081
+ }
2082
+ },
2083
+ "required": [
2084
+ "all",
2085
+ "by_model"
2086
+ ],
2087
+ "title": "LlmCost",
2088
+ "type": "object"
2089
+ },
2090
+ "LlmCostSplit": {
2091
+ "description": "What LLM tokens cost, in millicents, split by who paid (Ellipsis credit or the user's own subscription).",
2092
+ "properties": {
2093
+ "claude_subscription": {
2094
+ "default": 0,
2095
+ "description": "Token cost paid by a Claude subscription, at Ellipsis rates, in millicents.",
2096
+ "title": "Claude Subscription",
2097
+ "type": "integer"
2098
+ },
2099
+ "codex_subscription": {
2100
+ "default": 0,
2101
+ "description": "Token cost paid by a Codex subscription, at Ellipsis rates, in millicents.",
2102
+ "title": "Codex Subscription",
2103
+ "type": "integer"
2104
+ },
2105
+ "platform": {
2106
+ "default": 0,
2107
+ "description": "Token cost charged to Ellipsis credit, in millicents.",
2108
+ "title": "Platform",
2109
+ "type": "integer"
2110
+ },
2111
+ "total": {
2112
+ "default": 0,
2113
+ "description": "All token cost, in millicents. It is the sum of platform, claude_subscription, and codex_subscription.",
2114
+ "title": "Total",
2115
+ "type": "integer"
2116
+ }
2117
+ },
2118
+ "required": [
2119
+ "claude_subscription",
2120
+ "codex_subscription",
2121
+ "platform",
2122
+ "total"
2123
+ ],
2124
+ "title": "LlmCostSplit",
2125
+ "type": "object"
2126
+ },
1517
2127
  "McpRemoteServer": {
1518
2128
  "additionalProperties": false,
1519
2129
  "description": "A bring-your-own remote MCP server: the harness talks HTTP to `url`.\nNothing runs in the environment image. `headers` carry static auth (e.g.\n`Authorization: Bearer ${TOKEN}`); values may embed `${NAME}` secret\nreferences, resolved at run time from the account's secrets store.",
@@ -1545,7 +2155,7 @@
1545
2155
  },
1546
2156
  "McpServerRef": {
1547
2157
  "additionalProperties": false,
1548
- "description": "One built-in MCP server this agent opts into by name (`linear`/`slack`).\nA name reference over the connected built-in set \u2014 the platform manages the\nserver's transport and credentials. It only matters when the named\nintegration is set to `opt_in` inclusion; an integration in the default\n`all_sessions` mode is added regardless. For a server the platform does not\nprovide, define it instead (`McpStdioServer` /\n`McpRemoteServer`).",
2158
+ "description": "One built-in MCP server this agent attaches by name (`linear`/`slack`).\nA name reference over the connected built-in set \u2014 the platform manages the\nserver's transport and credentials. A session gets a built-in server only\nwhen its config names it here or the session started from that server's\nown surface. For a server the platform does not provide, define it instead\n(`McpStdioServer` / `McpRemoteServer`).",
1549
2159
  "properties": {
1550
2160
  "name": {
1551
2161
  "title": "Name",
@@ -1634,6 +2244,99 @@
1634
2244
  "title": "MemorySize",
1635
2245
  "type": "object"
1636
2246
  },
2247
+ "ModelLlmCostSplit": {
2248
+ "description": "What one model's tokens cost, in millicents, split by who paid.",
2249
+ "properties": {
2250
+ "claude_subscription": {
2251
+ "default": 0,
2252
+ "description": "Token cost paid by a Claude subscription, at Ellipsis rates, in millicents.",
2253
+ "title": "Claude Subscription",
2254
+ "type": "integer"
2255
+ },
2256
+ "codex_subscription": {
2257
+ "default": 0,
2258
+ "description": "Token cost paid by a Codex subscription, at Ellipsis rates, in millicents.",
2259
+ "title": "Codex Subscription",
2260
+ "type": "integer"
2261
+ },
2262
+ "model": {
2263
+ "description": "The model that used these tokens.",
2264
+ "title": "Model",
2265
+ "type": "string"
2266
+ },
2267
+ "platform": {
2268
+ "default": 0,
2269
+ "description": "Token cost charged to Ellipsis credit, in millicents.",
2270
+ "title": "Platform",
2271
+ "type": "integer"
2272
+ },
2273
+ "total": {
2274
+ "default": 0,
2275
+ "description": "All token cost, in millicents. It is the sum of platform, claude_subscription, and codex_subscription.",
2276
+ "title": "Total",
2277
+ "type": "integer"
2278
+ }
2279
+ },
2280
+ "required": [
2281
+ "claude_subscription",
2282
+ "codex_subscription",
2283
+ "model",
2284
+ "platform",
2285
+ "total"
2286
+ ],
2287
+ "title": "ModelLlmCostSplit",
2288
+ "type": "object"
2289
+ },
2290
+ "ModelTokenCounts": {
2291
+ "description": "Token counts for one model.",
2292
+ "properties": {
2293
+ "cache_creation": {
2294
+ "default": 0,
2295
+ "description": "Tokens written to the prompt cache.",
2296
+ "title": "Cache Creation",
2297
+ "type": "integer"
2298
+ },
2299
+ "cache_read": {
2300
+ "default": 0,
2301
+ "description": "Tokens read from the prompt cache.",
2302
+ "title": "Cache Read",
2303
+ "type": "integer"
2304
+ },
2305
+ "input": {
2306
+ "default": 0,
2307
+ "description": "Input tokens used.",
2308
+ "title": "Input",
2309
+ "type": "integer"
2310
+ },
2311
+ "model": {
2312
+ "description": "The model that used these tokens.",
2313
+ "title": "Model",
2314
+ "type": "string"
2315
+ },
2316
+ "output": {
2317
+ "default": 0,
2318
+ "description": "Output tokens used.",
2319
+ "title": "Output",
2320
+ "type": "integer"
2321
+ },
2322
+ "total": {
2323
+ "default": 0,
2324
+ "description": "All tokens used, including prompt cache reads and writes. Token cost is priced on this.",
2325
+ "title": "Total",
2326
+ "type": "integer"
2327
+ }
2328
+ },
2329
+ "required": [
2330
+ "cache_creation",
2331
+ "cache_read",
2332
+ "input",
2333
+ "model",
2334
+ "output",
2335
+ "total"
2336
+ ],
2337
+ "title": "ModelTokenCounts",
2338
+ "type": "object"
2339
+ },
1637
2340
  "OutputConfig": {
1638
2341
  "additionalProperties": false,
1639
2342
  "description": "JSON Schema for the harness's structured result, when certified.",
@@ -1652,7 +2355,7 @@
1652
2355
  },
1653
2356
  "PermissionsConfig": {
1654
2357
  "additionalProperties": false,
1655
- "description": "What the agent is allowed to touch, per credential the platform mints\ninto its session's environment. Distinct from `environment:`, which is\nwhere the agent runs; this is what it may do from there.\n\n`ellipsis` scopes the session's Ellipsis API token (`ELLIPSIS_API_TOKEN`,\nwhat the `agent` CLI running inside the session authenticates with).\n`true` / the string `all` (the default) grant the full session token\nceiling \u2014 everything a session token can ever do. A map narrows it per\nresource (see `EllipsisPermissions`); the minted token carries\nthe intersection, so a config can only ever reduce access. `false` fails\nvalidation \u2014 an agent with no API token cannot report its own progress.\n\n`github` scopes the session's GitHub installation token (`GH_TOKEN`) \u2014\nsee `GithubPermissions`. GitHub enforces it at mint time.",
2358
+ "description": "What the agent is allowed to touch, per credential the platform mints\ninto its session's environment. Distinct from `environment:`, which is\nwhere the agent runs; this is what it may do from there.\n\n`ellipsis` scopes the session's Ellipsis API token (`ELLIPSIS_API_TOKEN`,\nwhat the `ellipsis` CLI running inside the session authenticates with).\n`true` / the string `all` (the default) grant the full session token\nceiling \u2014 everything a session token can ever do. A map narrows it per\nresource (see `EllipsisPermissions`); the minted token carries\nthe intersection, so a config can only ever reduce access. `false` fails\nvalidation \u2014 an agent with no API token cannot report its own progress.\n\n`github` scopes the session's GitHub installation token (`GH_TOKEN`) \u2014\nsee `GithubPermissions`. GitHub enforces it at mint time.",
1656
2359
  "properties": {
1657
2360
  "ellipsis": {
1658
2361
  "anyOf": [
@@ -1688,7 +2391,6 @@
1688
2391
  "description": "Why direct prompting is refused. Absent when prompting is allowed.",
1689
2392
  "enum": [
1690
2393
  "mention_surface",
1691
- "ephemeral_trigger",
1692
2394
  "non_interactive",
1693
2395
  "harness_single_turn",
1694
2396
  "budget_exhausted",
@@ -1709,6 +2411,100 @@
1709
2411
  "title": "PullRequestAction",
1710
2412
  "type": "string"
1711
2413
  },
2414
+ "ReactCheckRun": {
2415
+ "additionalProperties": false,
2416
+ "description": "A check run changing state on a commit. A check run is a GitHub Actions job or a check another CI app reports. `on` lists the states that fire. `names` matches check names exactly or by a prefix ending in `*`. `branch` is the branch the check ran on. `for` is the author of the commit the check ran on. Needs the Checks permission.",
2417
+ "properties": {
2418
+ "branch": {
2419
+ "default": [],
2420
+ "items": {
2421
+ "type": "string"
2422
+ },
2423
+ "title": "Branch",
2424
+ "type": "array"
2425
+ },
2426
+ "for": {
2427
+ "$ref": "#/$defs/GithubAccountSelector"
2428
+ },
2429
+ "names": {
2430
+ "default": [],
2431
+ "items": {
2432
+ "type": "string"
2433
+ },
2434
+ "title": "Names",
2435
+ "type": "array"
2436
+ },
2437
+ "on": {
2438
+ "default": [
2439
+ "failed"
2440
+ ],
2441
+ "items": {
2442
+ "$ref": "#/$defs/CheckRunAction"
2443
+ },
2444
+ "title": "On",
2445
+ "type": "array"
2446
+ },
2447
+ "repositories": {
2448
+ "$ref": "#/$defs/RepositoryFilter"
2449
+ }
2450
+ },
2451
+ "required": [
2452
+ "branch",
2453
+ "for",
2454
+ "names",
2455
+ "on",
2456
+ "repositories"
2457
+ ],
2458
+ "title": "ReactCheckRun",
2459
+ "type": "object"
2460
+ },
2461
+ "ReactCheckSuite": {
2462
+ "additionalProperties": false,
2463
+ "description": "Every check one CI app reported on a commit finishing. GitHub reports a check suite only when it finishes, so `on` takes only finished states. `apps` matches the reporting app slug, such as `github-actions`, exactly or by a prefix ending in `*`. `branch` and `for` work as on `check_run`. Needs the Checks permission.",
2464
+ "properties": {
2465
+ "apps": {
2466
+ "default": [],
2467
+ "items": {
2468
+ "type": "string"
2469
+ },
2470
+ "title": "Apps",
2471
+ "type": "array"
2472
+ },
2473
+ "branch": {
2474
+ "default": [],
2475
+ "items": {
2476
+ "type": "string"
2477
+ },
2478
+ "title": "Branch",
2479
+ "type": "array"
2480
+ },
2481
+ "for": {
2482
+ "$ref": "#/$defs/GithubAccountSelector"
2483
+ },
2484
+ "on": {
2485
+ "default": [
2486
+ "failed"
2487
+ ],
2488
+ "items": {
2489
+ "$ref": "#/$defs/CheckSuiteAction"
2490
+ },
2491
+ "title": "On",
2492
+ "type": "array"
2493
+ },
2494
+ "repositories": {
2495
+ "$ref": "#/$defs/RepositoryFilter"
2496
+ }
2497
+ },
2498
+ "required": [
2499
+ "apps",
2500
+ "branch",
2501
+ "for",
2502
+ "on",
2503
+ "repositories"
2504
+ ],
2505
+ "title": "ReactCheckSuite",
2506
+ "type": "object"
2507
+ },
1712
2508
  "ReactIssue": {
1713
2509
  "additionalProperties": false,
1714
2510
  "properties": {
@@ -1876,6 +2672,57 @@
1876
2672
  "title": "ReactPush",
1877
2673
  "type": "object"
1878
2674
  },
2675
+ "ReactRelease": {
2676
+ "additionalProperties": false,
2677
+ "description": "A GitHub release being published \u2014 a release or prerelease published\ndirectly, or a draft published later. `tag` narrows to the release tags\nthat match (exact, or a prefix ending in `*`, so `v*`); `prerelease`\nselects prereleases or full releases, like `draft` on pull requests. The\n`for:` audience is the release's author, which for a release cut by CI is\na bot and needs `bots` to opt in.",
2678
+ "properties": {
2679
+ "for": {
2680
+ "$ref": "#/$defs/GithubAccountSelector"
2681
+ },
2682
+ "on": {
2683
+ "default": [
2684
+ "published"
2685
+ ],
2686
+ "items": {
2687
+ "$ref": "#/$defs/ReleaseAction"
2688
+ },
2689
+ "title": "On",
2690
+ "type": "array"
2691
+ },
2692
+ "prerelease": {
2693
+ "anyOf": [
2694
+ {
2695
+ "type": "boolean"
2696
+ },
2697
+ {
2698
+ "type": "null"
2699
+ }
2700
+ ],
2701
+ "default": null,
2702
+ "title": "Prerelease"
2703
+ },
2704
+ "repositories": {
2705
+ "$ref": "#/$defs/RepositoryFilter"
2706
+ },
2707
+ "tag": {
2708
+ "default": [],
2709
+ "items": {
2710
+ "type": "string"
2711
+ },
2712
+ "title": "Tag",
2713
+ "type": "array"
2714
+ }
2715
+ },
2716
+ "required": [
2717
+ "for",
2718
+ "on",
2719
+ "prerelease",
2720
+ "repositories",
2721
+ "tag"
2722
+ ],
2723
+ "title": "ReactRelease",
2724
+ "type": "object"
2725
+ },
1879
2726
  "ReactSentry": {
1880
2727
  "additionalProperties": false,
1881
2728
  "properties": {
@@ -1908,9 +2755,84 @@
1908
2755
  "title": "ReactSlackChannel",
1909
2756
  "type": "object"
1910
2757
  },
2758
+ "ReactStatus": {
2759
+ "additionalProperties": false,
2760
+ "description": "A commit status changing state, from CI that posts statuses instead of checks. `names` matches status contexts exactly or by a prefix ending in `*`. `branch` matches when any branch GitHub lists for the commit matches. `for` works as on `check_run`. Needs the Commit statuses permission.",
2761
+ "properties": {
2762
+ "branch": {
2763
+ "default": [],
2764
+ "items": {
2765
+ "type": "string"
2766
+ },
2767
+ "title": "Branch",
2768
+ "type": "array"
2769
+ },
2770
+ "for": {
2771
+ "$ref": "#/$defs/GithubAccountSelector"
2772
+ },
2773
+ "names": {
2774
+ "default": [],
2775
+ "items": {
2776
+ "type": "string"
2777
+ },
2778
+ "title": "Names",
2779
+ "type": "array"
2780
+ },
2781
+ "on": {
2782
+ "default": [
2783
+ "failed"
2784
+ ],
2785
+ "items": {
2786
+ "$ref": "#/$defs/StatusAction"
2787
+ },
2788
+ "title": "On",
2789
+ "type": "array"
2790
+ },
2791
+ "repositories": {
2792
+ "$ref": "#/$defs/RepositoryFilter"
2793
+ }
2794
+ },
2795
+ "required": [
2796
+ "branch",
2797
+ "for",
2798
+ "names",
2799
+ "on",
2800
+ "repositories"
2801
+ ],
2802
+ "title": "ReactStatus",
2803
+ "type": "object"
2804
+ },
1911
2805
  "ReactTrigger": {
1912
2806
  "additionalProperties": false,
2807
+ "description": "An event trigger: exactly one surface block names the events to match.\n\n`enabled: false` pauses the trigger and keeps its definition: events stop\nmatching while the agent stays live for on-demand starts and open\nsessions keep taking follow-ups (`ellipsis.enabled: false` pauses the\nwhole file instead).",
1913
2808
  "properties": {
2809
+ "check_run": {
2810
+ "anyOf": [
2811
+ {
2812
+ "$ref": "#/$defs/ReactCheckRun"
2813
+ },
2814
+ {
2815
+ "type": "null"
2816
+ }
2817
+ ],
2818
+ "default": null
2819
+ },
2820
+ "check_suite": {
2821
+ "anyOf": [
2822
+ {
2823
+ "$ref": "#/$defs/ReactCheckSuite"
2824
+ },
2825
+ {
2826
+ "type": "null"
2827
+ }
2828
+ ],
2829
+ "default": null
2830
+ },
2831
+ "enabled": {
2832
+ "default": true,
2833
+ "title": "Enabled",
2834
+ "type": "boolean"
2835
+ },
1914
2836
  "issue": {
1915
2837
  "anyOf": [
1916
2838
  {
@@ -1955,6 +2877,17 @@
1955
2877
  ],
1956
2878
  "default": null
1957
2879
  },
2880
+ "release": {
2881
+ "anyOf": [
2882
+ {
2883
+ "$ref": "#/$defs/ReactRelease"
2884
+ },
2885
+ {
2886
+ "type": "null"
2887
+ }
2888
+ ],
2889
+ "default": null
2890
+ },
1958
2891
  "sentry": {
1959
2892
  "anyOf": [
1960
2893
  {
@@ -1966,10 +2899,21 @@
1966
2899
  ],
1967
2900
  "default": null
1968
2901
  },
1969
- "slack_channel": {
2902
+ "slack_channel": {
2903
+ "anyOf": [
2904
+ {
2905
+ "$ref": "#/$defs/ReactSlackChannel"
2906
+ },
2907
+ {
2908
+ "type": "null"
2909
+ }
2910
+ ],
2911
+ "default": null
2912
+ },
2913
+ "status": {
1970
2914
  "anyOf": [
1971
2915
  {
1972
- "$ref": "#/$defs/ReactSlackChannel"
2916
+ "$ref": "#/$defs/ReactStatus"
1973
2917
  },
1974
2918
  {
1975
2919
  "type": "null"
@@ -1982,20 +2926,92 @@
1982
2926
  "default": "react",
1983
2927
  "title": "Type",
1984
2928
  "type": "string"
2929
+ },
2930
+ "workflow_run": {
2931
+ "anyOf": [
2932
+ {
2933
+ "$ref": "#/$defs/ReactWorkflowRun"
2934
+ },
2935
+ {
2936
+ "type": "null"
2937
+ }
2938
+ ],
2939
+ "default": null
1985
2940
  }
1986
2941
  },
1987
2942
  "required": [
2943
+ "check_run",
2944
+ "check_suite",
2945
+ "enabled",
1988
2946
  "issue",
1989
2947
  "linear_issue",
1990
2948
  "pull_request",
1991
2949
  "push",
2950
+ "release",
1992
2951
  "sentry",
1993
2952
  "slack_channel",
1994
- "type"
2953
+ "status",
2954
+ "type",
2955
+ "workflow_run"
1995
2956
  ],
1996
2957
  "title": "ReactTrigger",
1997
2958
  "type": "object"
1998
2959
  },
2960
+ "ReactWorkflowRun": {
2961
+ "additionalProperties": false,
2962
+ "description": "A GitHub Actions workflow run changing state. `names` matches workflow names exactly or by a prefix ending in `*`. `branch` is the branch the run is for. `for` works as on `check_run`. Needs the Actions permission.",
2963
+ "properties": {
2964
+ "branch": {
2965
+ "default": [],
2966
+ "items": {
2967
+ "type": "string"
2968
+ },
2969
+ "title": "Branch",
2970
+ "type": "array"
2971
+ },
2972
+ "for": {
2973
+ "$ref": "#/$defs/GithubAccountSelector"
2974
+ },
2975
+ "names": {
2976
+ "default": [],
2977
+ "items": {
2978
+ "type": "string"
2979
+ },
2980
+ "title": "Names",
2981
+ "type": "array"
2982
+ },
2983
+ "on": {
2984
+ "default": [
2985
+ "failed"
2986
+ ],
2987
+ "items": {
2988
+ "$ref": "#/$defs/WorkflowRunAction"
2989
+ },
2990
+ "title": "On",
2991
+ "type": "array"
2992
+ },
2993
+ "repositories": {
2994
+ "$ref": "#/$defs/RepositoryFilter"
2995
+ }
2996
+ },
2997
+ "required": [
2998
+ "branch",
2999
+ "for",
3000
+ "names",
3001
+ "on",
3002
+ "repositories"
3003
+ ],
3004
+ "title": "ReactWorkflowRun",
3005
+ "type": "object"
3006
+ },
3007
+ "ReleaseAction": {
3008
+ "description": "What happened to a GitHub release. `published` is the one moment a\nrelease becomes visible: a release or prerelease published directly, or a\ndraft published later. Edits, deletions, and unpublishes never fire.",
3009
+ "enum": [
3010
+ "published"
3011
+ ],
3012
+ "title": "ReleaseAction",
3013
+ "type": "string"
3014
+ },
1999
3015
  "RepositoryFilter": {
2000
3016
  "anyOf": [
2001
3017
  {
@@ -2080,14 +3096,13 @@
2080
3096
  "account",
2081
3097
  "alerts",
2082
3098
  "sessions",
2083
- "memories",
2084
- "reviews",
2085
3099
  "configs",
2086
3100
  "defaults",
2087
3101
  "environments",
2088
3102
  "secrets",
2089
3103
  "templates",
2090
3104
  "integrations",
3105
+ "reviews",
2091
3106
  "tokens",
2092
3107
  "webhooks",
2093
3108
  "user"
@@ -2239,11 +3254,9 @@
2239
3254
  },
2240
3255
  "SandboxSource": {
2241
3256
  "enum": [
2242
- "cli",
2243
- "web_ui",
2244
- "ingest_pull_request_job_run",
2245
3257
  "session",
2246
3258
  "image_refresh",
3259
+ "environment_check",
2247
3260
  "test",
2248
3261
  "script"
2249
3262
  ],
@@ -2442,9 +3455,9 @@
2442
3455
  },
2443
3456
  "budget": {
2444
3457
  "default": 0,
2445
- "description": "The spend budget enforced for this session, in US dollars, after resolving defaults and ceilings.",
3458
+ "description": "The spend budget enforced for this session, in millicents, after resolving defaults and ceilings.",
2446
3459
  "title": "Budget",
2447
- "type": "number"
3460
+ "type": "integer"
2448
3461
  },
2449
3462
  "claude_code": {
2450
3463
  "anyOf": [
@@ -2475,8 +3488,8 @@
2475
3488
  "description": "Whether the session can take more messages, and whether an agent is warm to answer one."
2476
3489
  },
2477
3490
  "cost": {
2478
- "$ref": "#/$defs/SessionCost",
2479
- "description": "What the session has cost so far, in millicents, broken down by leg and carrying its own total."
3491
+ "$ref": "#/$defs/Cost",
3492
+ "description": "What the session has cost so far."
2480
3493
  },
2481
3494
  "created_at": {
2482
3495
  "description": "When the session was created.",
@@ -2493,9 +3506,14 @@
2493
3506
  {
2494
3507
  "discriminator": {
2495
3508
  "mapping": {
3509
+ "github.check_run": "#/$defs/GithubCheckRunEvent",
3510
+ "github.check_suite": "#/$defs/GithubCheckSuiteEvent",
2496
3511
  "github.issue": "#/$defs/GithubIssueEvent",
2497
3512
  "github.pull_request": "#/$defs/GithubPullRequestEvent",
2498
3513
  "github.push": "#/$defs/GithubPushEvent",
3514
+ "github.release": "#/$defs/GithubReleaseEvent",
3515
+ "github.status": "#/$defs/GithubStatusEvent",
3516
+ "github.workflow_run": "#/$defs/GithubWorkflowRunEvent",
2499
3517
  "linear.issue": "#/$defs/LinearIssueEvent",
2500
3518
  "sentry.alert": "#/$defs/SentryAlertEvent",
2501
3519
  "slack.channel_created": "#/$defs/SlackChannelCreatedEvent",
@@ -2513,6 +3531,21 @@
2513
3531
  {
2514
3532
  "$ref": "#/$defs/GithubPushEvent"
2515
3533
  },
3534
+ {
3535
+ "$ref": "#/$defs/GithubCheckRunEvent"
3536
+ },
3537
+ {
3538
+ "$ref": "#/$defs/GithubCheckSuiteEvent"
3539
+ },
3540
+ {
3541
+ "$ref": "#/$defs/GithubWorkflowRunEvent"
3542
+ },
3543
+ {
3544
+ "$ref": "#/$defs/GithubStatusEvent"
3545
+ },
3546
+ {
3547
+ "$ref": "#/$defs/GithubReleaseEvent"
3548
+ },
2516
3549
  {
2517
3550
  "$ref": "#/$defs/LinearIssueEvent"
2518
3551
  },
@@ -2576,14 +3609,14 @@
2576
3609
  "output": {
2577
3610
  "anyOf": [
2578
3611
  {
2579
- "$ref": "#/$defs/OutputConfig"
3612
+ "$ref": "#/$defs/SessionOutput"
2580
3613
  },
2581
3614
  {
2582
3615
  "type": "null"
2583
3616
  }
2584
3617
  ],
2585
3618
  "default": null,
2586
- "description": "The structured-output exit contract for this session."
3619
+ "description": "The session's structured output: the `json_schema` the agent must satisfy and, once a turn has submitted it, the `result`."
2587
3620
  },
2588
3621
  "parent": {
2589
3622
  "anyOf": [
@@ -2626,8 +3659,8 @@
2626
3659
  "description": "The latest live summary of the session's progress while it runs, and when it was generated."
2627
3660
  },
2628
3661
  "tokens": {
2629
- "$ref": "#/$defs/SessionTokens",
2630
- "description": "The tokens the session spent and the model they went to. `total` includes the prompt-cache lanes."
3662
+ "$ref": "#/$defs/Tokens",
3663
+ "description": "The tokens the session has used so far."
2631
3664
  },
2632
3665
  "turn": {
2633
3666
  "anyOf": [
@@ -2694,7 +3727,7 @@
2694
3727
  }
2695
3728
  ],
2696
3729
  "default": null,
2697
- "description": "Identifier of the saved agent 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 agent behind them. Points at the agent as it exists now, which may have changed since.",
3730
+ "description": "Identifier of the saved agent this session's snapshot was taken from. Null for a routing-file agent or the built-in mention agent, which have no saved agent behind them. Points at the agent as it exists now, which may have changed since.",
2698
3731
  "title": "Id"
2699
3732
  }
2700
3733
  },
@@ -2856,6 +3889,12 @@
2856
3889
  "default": null,
2857
3890
  "description": "Codex input and native options. Set exactly one of claude_code or codex."
2858
3891
  },
3892
+ "conversation": {
3893
+ "$ref": "#/$defs/SessionConversationConfig",
3894
+ "default": {
3895
+ "interactive": true
3896
+ }
3897
+ },
2859
3898
  "environment": {
2860
3899
  "anyOf": [
2861
3900
  {
@@ -2884,6 +3923,15 @@
2884
3923
  },
2885
3924
  "title": "Environment"
2886
3925
  },
3926
+ "metadata": {
3927
+ "additionalProperties": {
3928
+ "type": "string"
3929
+ },
3930
+ "default": {},
3931
+ "description": "Arbitrary string key/value metadata stored on every session.",
3932
+ "title": "Metadata",
3933
+ "type": "object"
3934
+ },
2887
3935
  "output": {
2888
3936
  "anyOf": [
2889
3937
  {
@@ -2918,7 +3966,9 @@
2918
3966
  "budget",
2919
3967
  "claude_code",
2920
3968
  "codex",
3969
+ "conversation",
2921
3970
  "environment",
3971
+ "metadata",
2922
3972
  "output",
2923
3973
  "permissions",
2924
3974
  "skills"
@@ -2957,48 +4007,21 @@
2957
4007
  "title": "SessionConversation",
2958
4008
  "type": "object"
2959
4009
  },
2960
- "SessionCost": {
2961
- "description": "What a session (or one turn of it) cost, in millicents.\n\n`llm` is deliberately NOT called `tokens`: it would sit beside the `tokens`\nobject and read as \"the token count's cost\" rather than \"the cost of the\nLLM leg\".",
4010
+ "SessionConversationConfig": {
4011
+ "additionalProperties": false,
4012
+ "description": "Conversation settings for a session, set on a saved agent or sent when starting a session or running an agent.",
2962
4013
  "properties": {
2963
- "cpu": {
2964
- "default": 0,
2965
- "description": "CPU spend in millicents.",
2966
- "title": "Cpu",
2967
- "type": "integer"
2968
- },
2969
- "fee": {
2970
- "default": 0,
2971
- "description": "Platform fee in millicents.",
2972
- "title": "Fee",
2973
- "type": "integer"
2974
- },
2975
- "llm": {
2976
- "default": 0,
2977
- "description": "LLM spend in millicents.",
2978
- "title": "Llm",
2979
- "type": "integer"
2980
- },
2981
- "memory": {
2982
- "default": 0,
2983
- "description": "Memory spend in millicents.",
2984
- "title": "Memory",
2985
- "type": "integer"
2986
- },
2987
- "total": {
2988
- "default": 0,
2989
- "description": "The grand total in millicents: llm + cpu + memory + fee.",
2990
- "title": "Total",
2991
- "type": "integer"
4014
+ "interactive": {
4015
+ "default": true,
4016
+ "description": "Whether the session stays open after its first turn. Defaults to true; false runs once and requires a prompt. Requires the model's interactive capability when true. Direct message acceptance is reported separately in conversation.prompting.",
4017
+ "title": "Interactive",
4018
+ "type": "boolean"
2992
4019
  }
2993
4020
  },
2994
4021
  "required": [
2995
- "cpu",
2996
- "fee",
2997
- "llm",
2998
- "memory",
2999
- "total"
4022
+ "interactive"
3000
4023
  ],
3001
- "title": "SessionCost",
4024
+ "title": "SessionConversationConfig",
3002
4025
  "type": "object"
3003
4026
  },
3004
4027
  "SessionEnvironment": {
@@ -3400,6 +4423,37 @@
3400
4423
  "title": "SessionListStreamMessage",
3401
4424
  "type": "object"
3402
4425
  },
4426
+ "SessionOutput": {
4427
+ "description": "Structured output on the wire: the contract and, when a turn has\nsubmitted one, the payload. `result` is None while the session runs and\nwhen no turn submitted anything; it is the agent's own JSON, in the\nshape of `json_schema`.",
4428
+ "properties": {
4429
+ "json_schema": {
4430
+ "additionalProperties": true,
4431
+ "description": "JSON Schema the agent's result must satisfy.",
4432
+ "title": "Json Schema",
4433
+ "type": "object"
4434
+ },
4435
+ "result": {
4436
+ "anyOf": [
4437
+ {
4438
+ "additionalProperties": true,
4439
+ "type": "object"
4440
+ },
4441
+ {
4442
+ "type": "null"
4443
+ }
4444
+ ],
4445
+ "default": null,
4446
+ "description": "The payload the agent submitted, or null until a turn submits one.",
4447
+ "title": "Result"
4448
+ }
4449
+ },
4450
+ "required": [
4451
+ "json_schema",
4452
+ "result"
4453
+ ],
4454
+ "title": "SessionOutput",
4455
+ "type": "object"
4456
+ },
3403
4457
  "SessionParent": {
3404
4458
  "description": "The predecessor session this session continues.",
3405
4459
  "properties": {
@@ -3476,9 +4530,10 @@
3476
4530
  "type": "object"
3477
4531
  },
3478
4532
  "SessionSource": {
3479
- "description": "Where a session came from: the credential that started it (web app,\nAPI key, CLI) or the trigger that fired (react, mention, cron). Never\ntaken from a request body.",
4533
+ "description": "Where a session came from: the credential that started it (web app,\nAPI key, CLI) or the trigger that fired (react, mention, cron, code\nreview). Never taken from a request body.",
3480
4534
  "enum": [
3481
4535
  "react",
4536
+ "code_review",
3482
4537
  "web",
3483
4538
  "api",
3484
4539
  "cli",
@@ -3556,62 +4611,11 @@
3556
4611
  "title": "SessionSummary",
3557
4612
  "type": "object"
3558
4613
  },
3559
- "SessionTokens": {
3560
- "description": "The token counts a session (or turn) spent, and the model they went to.\n\n`total` INCLUDES the cache lanes, unlike the old flat `tokens_total` which\ncounted input+output+thinking only and left callers to add cache reads and\nwrites back themselves (the deleted `tokensTotalAll` helper). Cache tokens\ndominate an agent run's token bill, so a \"total\" that omits them is the\nwrong default and produced two competing totals in the dashboard.",
3561
- "properties": {
3562
- "cache_creation": {
3563
- "default": 0,
3564
- "description": "Tokens written to the prompt cache.",
3565
- "title": "Cache Creation",
3566
- "type": "integer"
3567
- },
3568
- "cache_read": {
3569
- "default": 0,
3570
- "description": "Tokens read from the prompt cache.",
3571
- "title": "Cache Read",
3572
- "type": "integer"
3573
- },
3574
- "input": {
3575
- "default": 0,
3576
- "description": "Input tokens used.",
3577
- "title": "Input",
3578
- "type": "integer"
3579
- },
3580
- "model": {
3581
- "default": "",
3582
- "description": "The model the token counts are attributed to.",
3583
- "title": "Model",
3584
- "type": "string"
3585
- },
3586
- "output": {
3587
- "default": 0,
3588
- "description": "Output tokens used.",
3589
- "title": "Output",
3590
- "type": "integer"
3591
- },
3592
- "total": {
3593
- "default": 0,
3594
- "description": "Total tokens consumed, INCLUDING the prompt-cache reads and writes \u2014 the same basis the token cost is priced on.",
3595
- "title": "Total",
3596
- "type": "integer"
3597
- }
3598
- },
3599
- "required": [
3600
- "cache_creation",
3601
- "cache_read",
3602
- "input",
3603
- "model",
3604
- "output",
3605
- "total"
3606
- ],
3607
- "title": "SessionTokens",
3608
- "type": "object"
3609
- },
3610
4614
  "SessionTurn": {
3611
4615
  "description": "One message and the agent's answer to it. A turn is `pending` from the\nmoment its message is received until the agent starts on it, `running`\nwhile the agent works, then `completed`, `failed`, `stopped`, or\n`cancelled`.",
3612
4616
  "properties": {
3613
4617
  "cost": {
3614
- "$ref": "#/$defs/SessionCost",
4618
+ "$ref": "#/$defs/Cost",
3615
4619
  "description": "What the turn cost so far, in millicents, broken down by leg."
3616
4620
  },
3617
4621
  "created_at": {
@@ -3700,7 +4704,7 @@
3700
4704
  "description": "When and by whom a stop was requested; null when none was."
3701
4705
  },
3702
4706
  "tokens": {
3703
- "$ref": "#/$defs/SessionTokens",
4707
+ "$ref": "#/$defs/Tokens",
3704
4708
  "description": "The tokens the turn spent and the model they went to."
3705
4709
  }
3706
4710
  },
@@ -3722,7 +4726,7 @@
3722
4726
  },
3723
4727
  "SettingsRef": {
3724
4728
  "additionalProperties": false,
3725
- "description": "A config-declared Claude Code settings.json, resolved at run start and\npassed to `claude --settings <path>`. That is the CLI settings tier \u2014 BELOW\nEllipsis's managed-settings.json floor \u2014 so it customizes behavior (model\npermissions, includeCoAuthoredBy, statusLine, ...) but can never weaken a\nsecurity setting. Lets a team point the cloud agent at the same settings file\nthey already use with Claude Code locally instead of re-encoding it as YAML.",
4729
+ "description": "A Claude Code settings.json read from a repository and applied to the\nsession. It adds permission rules and other Claude Code settings; rules the\nplatform sets stay in force. Supported models list `settings` in\n`/v1/account/models`.",
3726
4730
  "properties": {
3727
4731
  "path": {
3728
4732
  "title": "Path",
@@ -3901,6 +4905,84 @@
3901
4905
  "title": "SlackMessageEvent",
3902
4906
  "type": "object"
3903
4907
  },
4908
+ "StatusAction": {
4909
+ "description": "The state of a commit status. `success` is `passed`, `failure` is `failed`, and `error` is `errored`.",
4910
+ "enum": [
4911
+ "pending",
4912
+ "passed",
4913
+ "failed",
4914
+ "errored"
4915
+ ],
4916
+ "title": "StatusAction",
4917
+ "type": "string"
4918
+ },
4919
+ "TokenCounts": {
4920
+ "description": "Token counts.",
4921
+ "properties": {
4922
+ "cache_creation": {
4923
+ "default": 0,
4924
+ "description": "Tokens written to the prompt cache.",
4925
+ "title": "Cache Creation",
4926
+ "type": "integer"
4927
+ },
4928
+ "cache_read": {
4929
+ "default": 0,
4930
+ "description": "Tokens read from the prompt cache.",
4931
+ "title": "Cache Read",
4932
+ "type": "integer"
4933
+ },
4934
+ "input": {
4935
+ "default": 0,
4936
+ "description": "Input tokens used.",
4937
+ "title": "Input",
4938
+ "type": "integer"
4939
+ },
4940
+ "output": {
4941
+ "default": 0,
4942
+ "description": "Output tokens used.",
4943
+ "title": "Output",
4944
+ "type": "integer"
4945
+ },
4946
+ "total": {
4947
+ "default": 0,
4948
+ "description": "All tokens used, including prompt cache reads and writes. Token cost is priced on this.",
4949
+ "title": "Total",
4950
+ "type": "integer"
4951
+ }
4952
+ },
4953
+ "required": [
4954
+ "cache_creation",
4955
+ "cache_read",
4956
+ "input",
4957
+ "output",
4958
+ "total"
4959
+ ],
4960
+ "title": "TokenCounts",
4961
+ "type": "object"
4962
+ },
4963
+ "Tokens": {
4964
+ "description": "Tokens used, in total and by model.",
4965
+ "properties": {
4966
+ "all": {
4967
+ "$ref": "#/$defs/TokenCounts",
4968
+ "description": "Token counts across every model."
4969
+ },
4970
+ "by_model": {
4971
+ "description": "Token counts for each model that used tokens.",
4972
+ "items": {
4973
+ "$ref": "#/$defs/ModelTokenCounts"
4974
+ },
4975
+ "title": "By Model",
4976
+ "type": "array"
4977
+ }
4978
+ },
4979
+ "required": [
4980
+ "all",
4981
+ "by_model"
4982
+ ],
4983
+ "title": "Tokens",
4984
+ "type": "object"
4985
+ },
3904
4986
  "TurnReason": {
3905
4987
  "description": "Why a turn failed or was cancelled. Null on every other outcome.",
3906
4988
  "enum": [
@@ -4150,6 +5232,27 @@
4150
5232
  ],
4151
5233
  "title": "VMExecutionResponse",
4152
5234
  "type": "object"
5235
+ },
5236
+ "WorkflowRunAction": {
5237
+ "description": "The state of a GitHub Actions workflow run when GitHub reports it. Before the run finishes it is the status, and `in_progress` is `started`. After it finishes it is the conclusion, `success` is `passed` and `failure` is `failed`. Every other value is the GitHub word.",
5238
+ "enum": [
5239
+ "requested",
5240
+ "queued",
5241
+ "waiting",
5242
+ "pending",
5243
+ "started",
5244
+ "passed",
5245
+ "failed",
5246
+ "timed_out",
5247
+ "cancelled",
5248
+ "skipped",
5249
+ "neutral",
5250
+ "action_required",
5251
+ "stale",
5252
+ "startup_failure"
5253
+ ],
5254
+ "title": "WorkflowRunAction",
5255
+ "type": "string"
4153
5256
  }
4154
5257
  },
4155
5258
  "$schema": "https://json-schema.org/draft/2020-12/schema",