@ellipsis-dev/sdk 0.31.0 → 0.32.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.
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "AgentIdentity": {
61
61
  "additionalProperties": false,
62
- "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.",
62
+ "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).",
63
63
  "properties": {
64
64
  "description": {
65
65
  "anyOf": [
@@ -131,6 +131,7 @@
131
131
  },
132
132
  "BudgetConfig": {
133
133
  "additionalProperties": false,
134
+ "description": "A saved agent's spend limits: the per-session cap plus its total spend\nover the trailing 1, 7, and 28 days.",
134
135
  "properties": {
135
136
  "day": {
136
137
  "anyOf": [
@@ -142,6 +143,7 @@
142
143
  }
143
144
  ],
144
145
  "default": null,
146
+ "description": "The most the agent may spend over the last day, in US dollars.",
145
147
  "title": "Day"
146
148
  },
147
149
  "month": {
@@ -154,6 +156,7 @@
154
156
  }
155
157
  ],
156
158
  "default": null,
159
+ "description": "The most the agent may spend over the last 28 days, in US dollars.",
157
160
  "title": "Month"
158
161
  },
159
162
  "session": {
@@ -167,6 +170,7 @@
167
170
  }
168
171
  ],
169
172
  "default": null,
173
+ "description": "The most one session may spend, in US dollars.",
170
174
  "title": "Session"
171
175
  },
172
176
  "week": {
@@ -179,6 +183,7 @@
179
183
  }
180
184
  ],
181
185
  "default": null,
186
+ "description": "The most the agent may spend over the last 7 days, in US dollars.",
182
187
  "title": "Week"
183
188
  }
184
189
  },
@@ -191,6 +196,14 @@
191
196
  "title": "BudgetConfig",
192
197
  "type": "object"
193
198
  },
199
+ "CheckRunAction": {
200
+ "description": "What a completed check run did. `failed` covers the conclusions that\nmean the check did not pass on its own merits (`failure`, `timed_out`); a\ncancelled, skipped, neutral or stale check is not a failure and never\nfires (see FAILED_CHECK_RUN_CONCLUSIONS).",
201
+ "enum": [
202
+ "failed"
203
+ ],
204
+ "title": "CheckRunAction",
205
+ "type": "string"
206
+ },
194
207
  "ClaudeAssistantEvent": {
195
208
  "additionalProperties": true,
196
209
  "properties": {
@@ -411,16 +424,9 @@
411
424
  "title": "Max Turns"
412
425
  },
413
426
  "model": {
414
- "anyOf": [
415
- {
416
- "type": "string"
417
- },
418
- {
419
- "type": "null"
420
- }
421
- ],
422
- "default": null,
423
- "title": "Model"
427
+ "description": "The model the session runs on: an alias or canonical id from the models table. Required.",
428
+ "title": "Model",
429
+ "type": "string"
424
430
  },
425
431
  "prompt": {
426
432
  "anyOf": [
@@ -1876,7 +1882,7 @@
1876
1882
  },
1877
1883
  "CodexConfig": {
1878
1884
  "additionalProperties": false,
1879
- "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.",
1885
+ "description": "Native options supported by the current Codex adapter.",
1880
1886
  "properties": {
1881
1887
  "effort": {
1882
1888
  "anyOf": [
@@ -1891,7 +1897,7 @@
1891
1897
  "description": "Reasoning effort for every turn. Omit to use the model default."
1892
1898
  },
1893
1899
  "model": {
1894
- "default": "gpt-6-sol",
1900
+ "description": "The model the session runs on: a Responses-capable id from the models table. Required.",
1895
1901
  "title": "Model",
1896
1902
  "type": "string"
1897
1903
  },
@@ -3792,7 +3798,13 @@
3792
3798
  },
3793
3799
  "CronTrigger": {
3794
3800
  "additionalProperties": false,
3801
+ "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.",
3795
3802
  "properties": {
3803
+ "enabled": {
3804
+ "default": true,
3805
+ "title": "Enabled",
3806
+ "type": "boolean"
3807
+ },
3796
3808
  "schedule": {
3797
3809
  "title": "Schedule",
3798
3810
  "type": "string"
@@ -3805,6 +3817,7 @@
3805
3817
  }
3806
3818
  },
3807
3819
  "required": [
3820
+ "enabled",
3808
3821
  "schedule",
3809
3822
  "type"
3810
3823
  ],
@@ -3955,7 +3968,7 @@
3955
3968
  },
3956
3969
  "EllipsisGrant": {
3957
3970
  "additionalProperties": false,
3958
- "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.",
3971
+ "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.",
3959
3972
  "properties": {
3960
3973
  "level": {
3961
3974
  "$ref": "#/$defs/Level"
@@ -4948,17 +4961,26 @@
4948
4961
  },
4949
4962
  "GithubAccountSelector": {
4950
4963
  "additionalProperties": false,
4951
- "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).",
4964
+ "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.",
4952
4965
  "properties": {
4953
4966
  "bots": {
4954
4967
  "$ref": "#/$defs/GithubAccountFilter"
4955
4968
  },
4969
+ "teams": {
4970
+ "default": [],
4971
+ "items": {
4972
+ "type": "string"
4973
+ },
4974
+ "title": "Teams",
4975
+ "type": "array"
4976
+ },
4956
4977
  "users": {
4957
4978
  "$ref": "#/$defs/GithubAccountFilter"
4958
4979
  }
4959
4980
  },
4960
4981
  "required": [
4961
4982
  "bots",
4983
+ "teams",
4962
4984
  "users"
4963
4985
  ],
4964
4986
  "title": "GithubAccountSelector",
@@ -4979,6 +5001,18 @@
4979
5001
  "title": "Login",
4980
5002
  "type": "string"
4981
5003
  },
5004
+ "name": {
5005
+ "anyOf": [
5006
+ {
5007
+ "type": "string"
5008
+ },
5009
+ {
5010
+ "type": "null"
5011
+ }
5012
+ ],
5013
+ "default": null,
5014
+ "title": "Name"
5015
+ },
4982
5016
  "type": {
4983
5017
  "$ref": "#/$defs/GithubAccountType"
4984
5018
  }
@@ -4987,6 +5021,7 @@
4987
5021
  "avatar_url",
4988
5022
  "id",
4989
5023
  "login",
5024
+ "name",
4990
5025
  "type"
4991
5026
  ],
4992
5027
  "title": "GithubAccountSnippet",
@@ -5002,6 +5037,96 @@
5002
5037
  "title": "GithubAccountType",
5003
5038
  "type": "string"
5004
5039
  },
5040
+ "GithubCheckRunEvent": {
5041
+ "properties": {
5042
+ "action": {
5043
+ "$ref": "#/$defs/CheckRunAction"
5044
+ },
5045
+ "actor": {
5046
+ "anyOf": [
5047
+ {
5048
+ "$ref": "#/$defs/SessionEventActor"
5049
+ },
5050
+ {
5051
+ "type": "null"
5052
+ }
5053
+ ],
5054
+ "default": null
5055
+ },
5056
+ "branch": {
5057
+ "anyOf": [
5058
+ {
5059
+ "type": "string"
5060
+ },
5061
+ {
5062
+ "type": "null"
5063
+ }
5064
+ ],
5065
+ "default": null,
5066
+ "title": "Branch"
5067
+ },
5068
+ "conclusion": {
5069
+ "anyOf": [
5070
+ {
5071
+ "type": "string"
5072
+ },
5073
+ {
5074
+ "type": "null"
5075
+ }
5076
+ ],
5077
+ "default": null,
5078
+ "title": "Conclusion"
5079
+ },
5080
+ "head_sha": {
5081
+ "title": "Head Sha",
5082
+ "type": "string"
5083
+ },
5084
+ "name": {
5085
+ "title": "Name",
5086
+ "type": "string"
5087
+ },
5088
+ "pull_request_number": {
5089
+ "anyOf": [
5090
+ {
5091
+ "type": "integer"
5092
+ },
5093
+ {
5094
+ "type": "null"
5095
+ }
5096
+ ],
5097
+ "default": null,
5098
+ "title": "Pull Request Number"
5099
+ },
5100
+ "repository": {
5101
+ "title": "Repository",
5102
+ "type": "string"
5103
+ },
5104
+ "type": {
5105
+ "const": "github.check_run",
5106
+ "default": "github.check_run",
5107
+ "title": "Type",
5108
+ "type": "string"
5109
+ },
5110
+ "url": {
5111
+ "title": "Url",
5112
+ "type": "string"
5113
+ }
5114
+ },
5115
+ "required": [
5116
+ "action",
5117
+ "actor",
5118
+ "branch",
5119
+ "conclusion",
5120
+ "head_sha",
5121
+ "name",
5122
+ "pull_request_number",
5123
+ "repository",
5124
+ "type",
5125
+ "url"
5126
+ ],
5127
+ "title": "GithubCheckRunEvent",
5128
+ "type": "object"
5129
+ },
5005
5130
  "GithubIssueEvent": {
5006
5131
  "properties": {
5007
5132
  "action": {
@@ -5055,7 +5180,7 @@
5055
5180
  },
5056
5181
  "GithubPermissions": {
5057
5182
  "additionalProperties": false,
5058
- "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.",
5183
+ "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 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.",
5059
5184
  "properties": {
5060
5185
  "permissions": {
5061
5186
  "anyOf": [
@@ -5216,6 +5341,70 @@
5216
5341
  "title": "GithubPushEvent",
5217
5342
  "type": "object"
5218
5343
  },
5344
+ "GithubReleaseEvent": {
5345
+ "properties": {
5346
+ "action": {
5347
+ "$ref": "#/$defs/ReleaseAction"
5348
+ },
5349
+ "actor": {
5350
+ "anyOf": [
5351
+ {
5352
+ "$ref": "#/$defs/SessionEventActor"
5353
+ },
5354
+ {
5355
+ "type": "null"
5356
+ }
5357
+ ],
5358
+ "default": null
5359
+ },
5360
+ "name": {
5361
+ "anyOf": [
5362
+ {
5363
+ "type": "string"
5364
+ },
5365
+ {
5366
+ "type": "null"
5367
+ }
5368
+ ],
5369
+ "default": null,
5370
+ "title": "Name"
5371
+ },
5372
+ "prerelease": {
5373
+ "title": "Prerelease",
5374
+ "type": "boolean"
5375
+ },
5376
+ "repository": {
5377
+ "title": "Repository",
5378
+ "type": "string"
5379
+ },
5380
+ "tag": {
5381
+ "title": "Tag",
5382
+ "type": "string"
5383
+ },
5384
+ "type": {
5385
+ "const": "github.release",
5386
+ "default": "github.release",
5387
+ "title": "Type",
5388
+ "type": "string"
5389
+ },
5390
+ "url": {
5391
+ "title": "Url",
5392
+ "type": "string"
5393
+ }
5394
+ },
5395
+ "required": [
5396
+ "action",
5397
+ "actor",
5398
+ "name",
5399
+ "prerelease",
5400
+ "repository",
5401
+ "tag",
5402
+ "type",
5403
+ "url"
5404
+ ],
5405
+ "title": "GithubReleaseEvent",
5406
+ "type": "object"
5407
+ },
5219
5408
  "HandlerService": {
5220
5409
  "description": "The service whose events a handler responds to.",
5221
5410
  "enum": [
@@ -5252,7 +5441,7 @@
5252
5441
  },
5253
5442
  "InputContract": {
5254
5443
  "additionalProperties": false,
5255
- "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`).",
5444
+ "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).",
5256
5445
  "properties": {
5257
5446
  "json_schema": {
5258
5447
  "anyOf": [
@@ -5668,7 +5857,10 @@
5668
5857
  "$ref": "#/$defs/LinearIssueAction"
5669
5858
  },
5670
5859
  {
5671
- "const": "commented",
5860
+ "enum": [
5861
+ "commented",
5862
+ "delegated"
5863
+ ],
5672
5864
  "type": "string"
5673
5865
  }
5674
5866
  ],
@@ -5759,7 +5951,7 @@
5759
5951
  },
5760
5952
  "McpServerRef": {
5761
5953
  "additionalProperties": false,
5762
- "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`).",
5954
+ "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`).",
5763
5955
  "properties": {
5764
5956
  "name": {
5765
5957
  "title": "Name",
@@ -6453,270 +6645,68 @@
6453
6645
  "type": "object",
6454
6646
  "x-ellipsis-preserve-payload": true
6455
6647
  },
6456
- "OutboxCollectedPayload": {
6457
- "additionalProperties": true,
6458
- "description": "outbox_collected: the platform read a code_review session's\n/ellipsis/outbox/* when its turn ended. Carries both raw and parsed so\nthe feed alone tells the whole delivery story; the code_review_outbox\ntable is the queryable projection of this record.",
6648
+ "OutputConfig": {
6649
+ "additionalProperties": false,
6650
+ "description": "JSON Schema for the harness's structured result, when certified.",
6459
6651
  "properties": {
6460
- "findings": {
6461
- "default": [],
6462
- "items": {
6463
- "additionalProperties": true,
6464
- "type": "object"
6465
- },
6466
- "title": "Findings",
6467
- "type": "array"
6468
- },
6469
- "parse_errors": {
6470
- "default": [],
6471
- "items": {
6472
- "additionalProperties": true,
6473
- "type": "object"
6474
- },
6475
- "title": "Parse Errors",
6476
- "type": "array"
6477
- },
6478
- "parser_version": {
6479
- "title": "Parser Version",
6480
- "type": "string"
6481
- },
6482
- "raw": {
6483
- "additionalProperties": {
6484
- "type": "string"
6485
- },
6486
- "default": {},
6487
- "title": "Raw",
6652
+ "json_schema": {
6653
+ "additionalProperties": true,
6654
+ "title": "Json Schema",
6488
6655
  "type": "object"
6489
6656
  }
6490
6657
  },
6491
6658
  "required": [
6492
- "parser_version"
6659
+ "json_schema"
6493
6660
  ],
6494
- "title": "OutboxCollectedPayload",
6661
+ "title": "OutputConfig",
6495
6662
  "type": "object"
6496
6663
  },
6497
- "OutboxCollectedRecord": {
6664
+ "PermissionsConfig": {
6665
+ "additionalProperties": false,
6666
+ "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.",
6498
6667
  "properties": {
6499
- "cost": {
6668
+ "ellipsis": {
6500
6669
  "anyOf": [
6501
6670
  {
6502
- "type": "integer"
6671
+ "enum": [
6672
+ true,
6673
+ "all"
6674
+ ]
6503
6675
  },
6504
6676
  {
6505
- "type": "null"
6677
+ "$ref": "#/$defs/EllipsisPermissions"
6506
6678
  }
6507
6679
  ],
6508
- "default": null,
6509
- "title": "Cost"
6680
+ "default": true,
6681
+ "title": "Ellipsis"
6510
6682
  },
6511
- "created_at": {
6512
- "format": "date-time",
6513
- "title": "Created At",
6514
- "type": "string"
6515
- },
6516
- "duration": {
6517
- "anyOf": [
6518
- {
6519
- "type": "integer"
6520
- },
6521
- {
6522
- "type": "null"
6523
- }
6524
- ],
6525
- "default": null,
6526
- "title": "Duration"
6527
- },
6528
- "feed_seq": {
6529
- "description": "Position in the session feed and the stream's resume cursor.",
6530
- "title": "Feed Seq",
6531
- "type": "integer"
6532
- },
6533
- "id": {
6534
- "description": "Unique identifier of the record.",
6535
- "title": "Id",
6536
- "type": "string"
6537
- },
6538
- "kind": {
6539
- "const": "platform",
6540
- "default": "platform",
6541
- "title": "Kind",
6542
- "type": "string"
6543
- },
6544
- "model": {
6545
- "anyOf": [
6546
- {
6547
- "type": "string"
6548
- },
6549
- {
6550
- "type": "null"
6551
- }
6552
- ],
6553
- "default": null,
6554
- "title": "Model"
6555
- },
6556
- "payload": {
6557
- "$ref": "#/$defs/OutboxCollectedPayload"
6558
- },
6559
- "record_format": {
6560
- "const": "ellipsis_lifecycle@1",
6561
- "default": "ellipsis_lifecycle@1",
6562
- "title": "Record Format",
6563
- "type": "string"
6564
- },
6565
- "record_type": {
6566
- "const": "outbox_collected",
6567
- "default": "outbox_collected",
6568
- "title": "Record Type",
6569
- "type": "string"
6570
- },
6571
- "session_id": {
6572
- "description": "Session containing this record.",
6573
- "title": "Session Id",
6574
- "type": "string"
6575
- },
6576
- "session_message_id": {
6577
- "anyOf": [
6578
- {
6579
- "type": "string"
6580
- },
6581
- {
6582
- "type": "null"
6583
- }
6584
- ],
6585
- "default": null,
6586
- "description": "Message this record receives, delivers, requeues, or echoes.",
6587
- "title": "Session Message Id"
6588
- },
6589
- "source": {
6590
- "const": "lifecycle",
6591
- "default": "lifecycle",
6592
- "title": "Source",
6593
- "type": "string"
6594
- },
6595
- "tokens_info": {
6596
- "anyOf": [
6597
- {
6598
- "$ref": "#/$defs/TokensInfo"
6599
- },
6600
- {
6601
- "type": "null"
6602
- }
6603
- ],
6604
- "default": null
6605
- },
6606
- "tools": {
6607
- "anyOf": [
6608
- {
6609
- "items": {
6610
- "type": "string"
6611
- },
6612
- "type": "array"
6613
- },
6614
- {
6615
- "type": "null"
6616
- }
6617
- ],
6618
- "default": null,
6619
- "title": "Tools"
6620
- },
6621
- "turn_id": {
6622
- "anyOf": [
6623
- {
6624
- "type": "string"
6625
- },
6626
- {
6627
- "type": "null"
6628
- }
6629
- ],
6630
- "default": null,
6631
- "description": "Turn containing this record, when applicable.",
6632
- "title": "Turn Id"
6633
- }
6634
- },
6635
- "required": [
6636
- "cost",
6637
- "created_at",
6638
- "duration",
6639
- "feed_seq",
6640
- "id",
6641
- "kind",
6642
- "model",
6643
- "payload",
6644
- "record_format",
6645
- "record_type",
6646
- "session_id",
6647
- "session_message_id",
6648
- "source",
6649
- "tokens_info",
6650
- "tools",
6651
- "turn_id"
6652
- ],
6653
- "title": "OutboxCollectedRecord",
6654
- "type": "object",
6655
- "x-ellipsis-preserve-payload": true
6656
- },
6657
- "OutputConfig": {
6658
- "additionalProperties": false,
6659
- "description": "JSON Schema for the harness's structured result, when certified.",
6660
- "properties": {
6661
- "json_schema": {
6662
- "additionalProperties": true,
6663
- "title": "Json Schema",
6664
- "type": "object"
6665
- }
6666
- },
6667
- "required": [
6668
- "json_schema"
6669
- ],
6670
- "title": "OutputConfig",
6671
- "type": "object"
6672
- },
6673
- "PermissionsConfig": {
6674
- "additionalProperties": false,
6675
- "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.",
6676
- "properties": {
6677
- "ellipsis": {
6678
- "anyOf": [
6679
- {
6680
- "enum": [
6681
- true,
6682
- "all"
6683
- ]
6684
- },
6685
- {
6686
- "$ref": "#/$defs/EllipsisPermissions"
6687
- }
6688
- ],
6689
- "default": true,
6690
- "title": "Ellipsis"
6691
- },
6692
- "github": {
6693
- "$ref": "#/$defs/GithubPermissions",
6694
- "default": {
6695
- "permissions": null,
6696
- "repositories": null
6697
- }
6698
- }
6699
- },
6700
- "required": [
6701
- "ellipsis",
6702
- "github"
6703
- ],
6704
- "title": "PermissionsConfig",
6705
- "type": "object"
6706
- },
6707
- "PlatformSessionRecord": {
6708
- "discriminator": {
6709
- "mapping": {
6710
- "environment_output": "#/$defs/EnvironmentOutputRecord",
6711
- "environment_phase": "#/$defs/EnvironmentPhaseRecord",
6712
- "environment_ready": "#/$defs/EnvironmentReadyRecord",
6713
- "message_delivered": "#/$defs/MessageDeliveredRecord",
6714
- "message_received": "#/$defs/MessageReceivedRecord",
6715
- "message_requeued": "#/$defs/MessageRequeuedRecord",
6716
- "outbox_collected": "#/$defs/OutboxCollectedRecord",
6717
- "session_closed": "#/$defs/SessionClosedRecord",
6718
- "turn_ended": "#/$defs/TurnEndedRecord",
6719
- "turn_started": "#/$defs/TurnStartedRecord"
6683
+ "github": {
6684
+ "$ref": "#/$defs/GithubPermissions",
6685
+ "default": {
6686
+ "permissions": null,
6687
+ "repositories": null
6688
+ }
6689
+ }
6690
+ },
6691
+ "required": [
6692
+ "ellipsis",
6693
+ "github"
6694
+ ],
6695
+ "title": "PermissionsConfig",
6696
+ "type": "object"
6697
+ },
6698
+ "PlatformSessionRecord": {
6699
+ "discriminator": {
6700
+ "mapping": {
6701
+ "environment_output": "#/$defs/EnvironmentOutputRecord",
6702
+ "environment_phase": "#/$defs/EnvironmentPhaseRecord",
6703
+ "environment_ready": "#/$defs/EnvironmentReadyRecord",
6704
+ "message_delivered": "#/$defs/MessageDeliveredRecord",
6705
+ "message_received": "#/$defs/MessageReceivedRecord",
6706
+ "message_requeued": "#/$defs/MessageRequeuedRecord",
6707
+ "session_closed": "#/$defs/SessionClosedRecord",
6708
+ "turn_ended": "#/$defs/TurnEndedRecord",
6709
+ "turn_started": "#/$defs/TurnStartedRecord"
6720
6710
  },
6721
6711
  "propertyName": "record_type"
6722
6712
  },
@@ -6747,9 +6737,6 @@
6747
6737
  },
6748
6738
  {
6749
6739
  "$ref": "#/$defs/EnvironmentReadyRecord"
6750
- },
6751
- {
6752
- "$ref": "#/$defs/OutboxCollectedRecord"
6753
6740
  }
6754
6741
  ]
6755
6742
  },
@@ -6757,7 +6744,6 @@
6757
6744
  "description": "Why direct prompting is refused. Absent when prompting is allowed.",
6758
6745
  "enum": [
6759
6746
  "mention_surface",
6760
- "ephemeral_trigger",
6761
6747
  "non_interactive",
6762
6748
  "harness_single_turn",
6763
6749
  "budget_exhausted",
@@ -6778,6 +6764,53 @@
6778
6764
  "title": "PullRequestAction",
6779
6765
  "type": "string"
6780
6766
  },
6767
+ "ReactCheckRun": {
6768
+ "additionalProperties": false,
6769
+ "description": "A CI/CD check completing on a commit \u2014 a `check_run` from GitHub\nActions or any other app that reports checks. `names` narrows to the check\nruns whose name matches (exact, or a prefix ending in `*`); `branch` is the\ncheck suite's head branch. The `for:` audience is the commit's author (the\npull request author when the check is attached to one), never the CI app\nthat completed the check \u2014 a check run's sender is always a bot.\n\nDelivery needs the Ellipsis GitHub App's `checks` permission on the\ninstallation; without it GitHub sends no check events and the webhook\nhandler refuses the ones it does see.",
6770
+ "properties": {
6771
+ "branch": {
6772
+ "default": [],
6773
+ "items": {
6774
+ "type": "string"
6775
+ },
6776
+ "title": "Branch",
6777
+ "type": "array"
6778
+ },
6779
+ "for": {
6780
+ "$ref": "#/$defs/GithubAccountSelector"
6781
+ },
6782
+ "names": {
6783
+ "default": [],
6784
+ "items": {
6785
+ "type": "string"
6786
+ },
6787
+ "title": "Names",
6788
+ "type": "array"
6789
+ },
6790
+ "on": {
6791
+ "default": [
6792
+ "failed"
6793
+ ],
6794
+ "items": {
6795
+ "$ref": "#/$defs/CheckRunAction"
6796
+ },
6797
+ "title": "On",
6798
+ "type": "array"
6799
+ },
6800
+ "repositories": {
6801
+ "$ref": "#/$defs/RepositoryFilter"
6802
+ }
6803
+ },
6804
+ "required": [
6805
+ "branch",
6806
+ "for",
6807
+ "names",
6808
+ "on",
6809
+ "repositories"
6810
+ ],
6811
+ "title": "ReactCheckRun",
6812
+ "type": "object"
6813
+ },
6781
6814
  "ReactIssue": {
6782
6815
  "additionalProperties": false,
6783
6816
  "properties": {
@@ -6945,6 +6978,57 @@
6945
6978
  "title": "ReactPush",
6946
6979
  "type": "object"
6947
6980
  },
6981
+ "ReactRelease": {
6982
+ "additionalProperties": false,
6983
+ "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.",
6984
+ "properties": {
6985
+ "for": {
6986
+ "$ref": "#/$defs/GithubAccountSelector"
6987
+ },
6988
+ "on": {
6989
+ "default": [
6990
+ "published"
6991
+ ],
6992
+ "items": {
6993
+ "$ref": "#/$defs/ReleaseAction"
6994
+ },
6995
+ "title": "On",
6996
+ "type": "array"
6997
+ },
6998
+ "prerelease": {
6999
+ "anyOf": [
7000
+ {
7001
+ "type": "boolean"
7002
+ },
7003
+ {
7004
+ "type": "null"
7005
+ }
7006
+ ],
7007
+ "default": null,
7008
+ "title": "Prerelease"
7009
+ },
7010
+ "repositories": {
7011
+ "$ref": "#/$defs/RepositoryFilter"
7012
+ },
7013
+ "tag": {
7014
+ "default": [],
7015
+ "items": {
7016
+ "type": "string"
7017
+ },
7018
+ "title": "Tag",
7019
+ "type": "array"
7020
+ }
7021
+ },
7022
+ "required": [
7023
+ "for",
7024
+ "on",
7025
+ "prerelease",
7026
+ "repositories",
7027
+ "tag"
7028
+ ],
7029
+ "title": "ReactRelease",
7030
+ "type": "object"
7031
+ },
6948
7032
  "ReactSentry": {
6949
7033
  "additionalProperties": false,
6950
7034
  "properties": {
@@ -6979,7 +7063,24 @@
6979
7063
  },
6980
7064
  "ReactTrigger": {
6981
7065
  "additionalProperties": false,
7066
+ "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).",
6982
7067
  "properties": {
7068
+ "check_run": {
7069
+ "anyOf": [
7070
+ {
7071
+ "$ref": "#/$defs/ReactCheckRun"
7072
+ },
7073
+ {
7074
+ "type": "null"
7075
+ }
7076
+ ],
7077
+ "default": null
7078
+ },
7079
+ "enabled": {
7080
+ "default": true,
7081
+ "title": "Enabled",
7082
+ "type": "boolean"
7083
+ },
6983
7084
  "issue": {
6984
7085
  "anyOf": [
6985
7086
  {
@@ -7024,6 +7125,17 @@
7024
7125
  ],
7025
7126
  "default": null
7026
7127
  },
7128
+ "release": {
7129
+ "anyOf": [
7130
+ {
7131
+ "$ref": "#/$defs/ReactRelease"
7132
+ },
7133
+ {
7134
+ "type": "null"
7135
+ }
7136
+ ],
7137
+ "default": null
7138
+ },
7027
7139
  "sentry": {
7028
7140
  "anyOf": [
7029
7141
  {
@@ -7054,10 +7166,13 @@
7054
7166
  }
7055
7167
  },
7056
7168
  "required": [
7169
+ "check_run",
7170
+ "enabled",
7057
7171
  "issue",
7058
7172
  "linear_issue",
7059
7173
  "pull_request",
7060
7174
  "push",
7175
+ "release",
7061
7176
  "sentry",
7062
7177
  "slack_channel",
7063
7178
  "type"
@@ -7090,6 +7205,14 @@
7090
7205
  "title": "RecordsAppendFrame",
7091
7206
  "type": "object"
7092
7207
  },
7208
+ "ReleaseAction": {
7209
+ "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.",
7210
+ "enum": [
7211
+ "published"
7212
+ ],
7213
+ "title": "ReleaseAction",
7214
+ "type": "string"
7215
+ },
7093
7216
  "RepositoryFilter": {
7094
7217
  "anyOf": [
7095
7218
  {
@@ -7174,14 +7297,13 @@
7174
7297
  "account",
7175
7298
  "alerts",
7176
7299
  "sessions",
7177
- "memories",
7178
- "reviews",
7179
7300
  "configs",
7180
7301
  "defaults",
7181
7302
  "environments",
7182
7303
  "secrets",
7183
7304
  "templates",
7184
7305
  "integrations",
7306
+ "reviews",
7185
7307
  "tokens",
7186
7308
  "webhooks",
7187
7309
  "user"
@@ -7819,9 +7941,11 @@
7819
7941
  {
7820
7942
  "discriminator": {
7821
7943
  "mapping": {
7944
+ "github.check_run": "#/$defs/GithubCheckRunEvent",
7822
7945
  "github.issue": "#/$defs/GithubIssueEvent",
7823
7946
  "github.pull_request": "#/$defs/GithubPullRequestEvent",
7824
7947
  "github.push": "#/$defs/GithubPushEvent",
7948
+ "github.release": "#/$defs/GithubReleaseEvent",
7825
7949
  "linear.issue": "#/$defs/LinearIssueEvent",
7826
7950
  "sentry.alert": "#/$defs/SentryAlertEvent",
7827
7951
  "slack.channel_created": "#/$defs/SlackChannelCreatedEvent",
@@ -7839,6 +7963,12 @@
7839
7963
  {
7840
7964
  "$ref": "#/$defs/GithubPushEvent"
7841
7965
  },
7966
+ {
7967
+ "$ref": "#/$defs/GithubCheckRunEvent"
7968
+ },
7969
+ {
7970
+ "$ref": "#/$defs/GithubReleaseEvent"
7971
+ },
7842
7972
  {
7843
7973
  "$ref": "#/$defs/LinearIssueEvent"
7844
7974
  },
@@ -7902,14 +8032,14 @@
7902
8032
  "output": {
7903
8033
  "anyOf": [
7904
8034
  {
7905
- "$ref": "#/$defs/OutputConfig"
8035
+ "$ref": "#/$defs/SessionOutput"
7906
8036
  },
7907
8037
  {
7908
8038
  "type": "null"
7909
8039
  }
7910
8040
  ],
7911
8041
  "default": null,
7912
- "description": "The structured-output exit contract for this session."
8042
+ "description": "The session's structured output: the `json_schema` the agent must satisfy and, once a turn has submitted it, the `result`."
7913
8043
  },
7914
8044
  "parent": {
7915
8045
  "anyOf": [
@@ -8020,7 +8150,7 @@
8020
8150
  }
8021
8151
  ],
8022
8152
  "default": null,
8023
- "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.",
8153
+ "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.",
8024
8154
  "title": "Id"
8025
8155
  }
8026
8156
  },
@@ -8349,6 +8479,12 @@
8349
8479
  "default": null,
8350
8480
  "description": "Codex input and native options. Set exactly one of claude_code or codex."
8351
8481
  },
8482
+ "conversation": {
8483
+ "$ref": "#/$defs/SessionConversationConfig",
8484
+ "default": {
8485
+ "interactive": true
8486
+ }
8487
+ },
8352
8488
  "environment": {
8353
8489
  "anyOf": [
8354
8490
  {
@@ -8377,6 +8513,15 @@
8377
8513
  },
8378
8514
  "title": "Environment"
8379
8515
  },
8516
+ "metadata": {
8517
+ "additionalProperties": {
8518
+ "type": "string"
8519
+ },
8520
+ "default": {},
8521
+ "description": "Arbitrary string key/value metadata stored on every session.",
8522
+ "title": "Metadata",
8523
+ "type": "object"
8524
+ },
8380
8525
  "output": {
8381
8526
  "anyOf": [
8382
8527
  {
@@ -8411,7 +8556,9 @@
8411
8556
  "budget",
8412
8557
  "claude_code",
8413
8558
  "codex",
8559
+ "conversation",
8414
8560
  "environment",
8561
+ "metadata",
8415
8562
  "output",
8416
8563
  "permissions",
8417
8564
  "skills"
@@ -8450,6 +8597,23 @@
8450
8597
  "title": "SessionConversation",
8451
8598
  "type": "object"
8452
8599
  },
8600
+ "SessionConversationConfig": {
8601
+ "additionalProperties": false,
8602
+ "description": "Conversation settings for a session, set on a saved agent or sent when starting a session or running an agent.",
8603
+ "properties": {
8604
+ "interactive": {
8605
+ "default": true,
8606
+ "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.",
8607
+ "title": "Interactive",
8608
+ "type": "boolean"
8609
+ }
8610
+ },
8611
+ "required": [
8612
+ "interactive"
8613
+ ],
8614
+ "title": "SessionConversationConfig",
8615
+ "type": "object"
8616
+ },
8453
8617
  "SessionCost": {
8454
8618
  "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\".",
8455
8619
  "properties": {
@@ -9062,6 +9226,37 @@
9062
9226
  "title": "SessionMessageStatus",
9063
9227
  "type": "string"
9064
9228
  },
9229
+ "SessionOutput": {
9230
+ "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`.",
9231
+ "properties": {
9232
+ "json_schema": {
9233
+ "additionalProperties": true,
9234
+ "description": "JSON Schema the agent's result must satisfy.",
9235
+ "title": "Json Schema",
9236
+ "type": "object"
9237
+ },
9238
+ "result": {
9239
+ "anyOf": [
9240
+ {
9241
+ "additionalProperties": true,
9242
+ "type": "object"
9243
+ },
9244
+ {
9245
+ "type": "null"
9246
+ }
9247
+ ],
9248
+ "default": null,
9249
+ "description": "The payload the agent submitted, or null until a turn submits one.",
9250
+ "title": "Result"
9251
+ }
9252
+ },
9253
+ "required": [
9254
+ "json_schema",
9255
+ "result"
9256
+ ],
9257
+ "title": "SessionOutput",
9258
+ "type": "object"
9259
+ },
9065
9260
  "SessionParent": {
9066
9261
  "description": "The predecessor session this session continues.",
9067
9262
  "properties": {
@@ -9160,9 +9355,10 @@
9160
9355
  ]
9161
9356
  },
9162
9357
  "SessionSource": {
9163
- "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.",
9358
+ "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.",
9164
9359
  "enum": [
9165
9360
  "react",
9361
+ "code_review",
9166
9362
  "web",
9167
9363
  "api",
9168
9364
  "cli",
@@ -9406,7 +9602,7 @@
9406
9602
  },
9407
9603
  "SettingsRef": {
9408
9604
  "additionalProperties": false,
9409
- "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.",
9605
+ "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`.",
9410
9606
  "properties": {
9411
9607
  "path": {
9412
9608
  "title": "Path",