@ellipsis-dev/sdk 0.32.0 → 0.34.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.
@@ -197,13 +197,41 @@
197
197
  "type": "object"
198
198
  },
199
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).",
200
+ "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.",
201
201
  "enum": [
202
- "failed"
202
+ "requested",
203
+ "queued",
204
+ "waiting",
205
+ "pending",
206
+ "started",
207
+ "passed",
208
+ "failed",
209
+ "timed_out",
210
+ "cancelled",
211
+ "skipped",
212
+ "neutral",
213
+ "action_required",
214
+ "stale"
203
215
  ],
204
216
  "title": "CheckRunAction",
205
217
  "type": "string"
206
218
  },
219
+ "CheckSuiteAction": {
220
+ "description": "The conclusion of a finished check suite. `success` is `passed` and `failure` is `failed`. Every other value is the GitHub word.",
221
+ "enum": [
222
+ "passed",
223
+ "failed",
224
+ "timed_out",
225
+ "cancelled",
226
+ "skipped",
227
+ "neutral",
228
+ "action_required",
229
+ "stale",
230
+ "startup_failure"
231
+ ],
232
+ "title": "CheckSuiteAction",
233
+ "type": "string"
234
+ },
207
235
  "ClaudeAssistantEvent": {
208
236
  "additionalProperties": true,
209
237
  "properties": {
@@ -3796,6 +3824,55 @@
3796
3824
  "title": "ConfigMetadata",
3797
3825
  "type": "object"
3798
3826
  },
3827
+ "Cost": {
3828
+ "description": "What something cost, in millicents.",
3829
+ "properties": {
3830
+ "charged": {
3831
+ "default": 0,
3832
+ "description": "What Ellipsis charged to credit, in millicents. It is everything except subscription tokens, and it is what the budget caps.",
3833
+ "title": "Charged",
3834
+ "type": "integer"
3835
+ },
3836
+ "cpu": {
3837
+ "default": 0,
3838
+ "description": "CPU spend in millicents.",
3839
+ "title": "Cpu",
3840
+ "type": "integer"
3841
+ },
3842
+ "fee": {
3843
+ "default": 0,
3844
+ "description": "Platform fee in millicents.",
3845
+ "title": "Fee",
3846
+ "type": "integer"
3847
+ },
3848
+ "llm": {
3849
+ "$ref": "#/$defs/LlmCost",
3850
+ "description": "LLM token cost, in total and by model, split by who paid."
3851
+ },
3852
+ "memory": {
3853
+ "default": 0,
3854
+ "description": "Memory spend in millicents.",
3855
+ "title": "Memory",
3856
+ "type": "integer"
3857
+ },
3858
+ "total": {
3859
+ "default": 0,
3860
+ "description": "Everything it cost, whoever paid, in millicents. It is the sum of llm.all.total, cpu, memory, and fee.",
3861
+ "title": "Total",
3862
+ "type": "integer"
3863
+ }
3864
+ },
3865
+ "required": [
3866
+ "charged",
3867
+ "cpu",
3868
+ "fee",
3869
+ "llm",
3870
+ "memory",
3871
+ "total"
3872
+ ],
3873
+ "title": "Cost",
3874
+ "type": "object"
3875
+ },
3799
3876
  "CronTrigger": {
3800
3877
  "additionalProperties": false,
3801
3878
  "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.",
@@ -5127,6 +5204,104 @@
5127
5204
  "title": "GithubCheckRunEvent",
5128
5205
  "type": "object"
5129
5206
  },
5207
+ "GithubCheckSuiteEvent": {
5208
+ "properties": {
5209
+ "action": {
5210
+ "$ref": "#/$defs/CheckSuiteAction"
5211
+ },
5212
+ "actor": {
5213
+ "anyOf": [
5214
+ {
5215
+ "$ref": "#/$defs/SessionEventActor"
5216
+ },
5217
+ {
5218
+ "type": "null"
5219
+ }
5220
+ ],
5221
+ "default": null
5222
+ },
5223
+ "app": {
5224
+ "anyOf": [
5225
+ {
5226
+ "type": "string"
5227
+ },
5228
+ {
5229
+ "type": "null"
5230
+ }
5231
+ ],
5232
+ "default": null,
5233
+ "title": "App"
5234
+ },
5235
+ "branch": {
5236
+ "anyOf": [
5237
+ {
5238
+ "type": "string"
5239
+ },
5240
+ {
5241
+ "type": "null"
5242
+ }
5243
+ ],
5244
+ "default": null,
5245
+ "title": "Branch"
5246
+ },
5247
+ "conclusion": {
5248
+ "anyOf": [
5249
+ {
5250
+ "type": "string"
5251
+ },
5252
+ {
5253
+ "type": "null"
5254
+ }
5255
+ ],
5256
+ "default": null,
5257
+ "title": "Conclusion"
5258
+ },
5259
+ "head_sha": {
5260
+ "title": "Head Sha",
5261
+ "type": "string"
5262
+ },
5263
+ "pull_request_number": {
5264
+ "anyOf": [
5265
+ {
5266
+ "type": "integer"
5267
+ },
5268
+ {
5269
+ "type": "null"
5270
+ }
5271
+ ],
5272
+ "default": null,
5273
+ "title": "Pull Request Number"
5274
+ },
5275
+ "repository": {
5276
+ "title": "Repository",
5277
+ "type": "string"
5278
+ },
5279
+ "type": {
5280
+ "const": "github.check_suite",
5281
+ "default": "github.check_suite",
5282
+ "title": "Type",
5283
+ "type": "string"
5284
+ },
5285
+ "url": {
5286
+ "title": "Url",
5287
+ "type": "string"
5288
+ }
5289
+ },
5290
+ "required": [
5291
+ "action",
5292
+ "actor",
5293
+ "app",
5294
+ "branch",
5295
+ "conclusion",
5296
+ "head_sha",
5297
+ "pull_request_number",
5298
+ "repository",
5299
+ "type",
5300
+ "url"
5301
+ ],
5302
+ "title": "GithubCheckSuiteEvent",
5303
+ "type": "object"
5304
+ },
5130
5305
  "GithubIssueEvent": {
5131
5306
  "properties": {
5132
5307
  "action": {
@@ -5180,7 +5355,7 @@
5180
5355
  },
5181
5356
  "GithubPermissions": {
5182
5357
  "additionalProperties": false,
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.",
5358
+ "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.",
5184
5359
  "properties": {
5185
5360
  "permissions": {
5186
5361
  "anyOf": [
@@ -5405,58 +5580,23 @@
5405
5580
  "title": "GithubReleaseEvent",
5406
5581
  "type": "object"
5407
5582
  },
5408
- "HandlerService": {
5409
- "description": "The service whose events a handler responds to.",
5410
- "enum": [
5411
- "slack",
5412
- "github",
5413
- "linear",
5414
- "sentry"
5415
- ],
5416
- "title": "HandlerService",
5417
- "type": "string"
5418
- },
5419
- "HeartbeatFrame": {
5420
- "description": "A keepalive sent after a period of idleness; doubles as the dead-socket\nprobe. Clients should treat roughly twice the heartbeat interval of\nsilence as a dead connection.",
5583
+ "GithubStatusEvent": {
5421
5584
  "properties": {
5422
- "ts": {
5423
- "description": "Server time when the heartbeat was sent.",
5424
- "format": "date-time",
5425
- "title": "Ts",
5426
- "type": "string"
5585
+ "action": {
5586
+ "$ref": "#/$defs/StatusAction"
5427
5587
  },
5428
- "type": {
5429
- "const": "heartbeat",
5430
- "default": "heartbeat",
5431
- "title": "Type",
5432
- "type": "string"
5433
- }
5434
- },
5435
- "required": [
5436
- "ts",
5437
- "type"
5438
- ],
5439
- "title": "HeartbeatFrame",
5440
- "type": "object"
5441
- },
5442
- "InputContract": {
5443
- "additionalProperties": false,
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).",
5445
- "properties": {
5446
- "json_schema": {
5588
+ "actor": {
5447
5589
  "anyOf": [
5448
5590
  {
5449
- "additionalProperties": true,
5450
- "type": "object"
5591
+ "$ref": "#/$defs/SessionEventActor"
5451
5592
  },
5452
5593
  {
5453
5594
  "type": "null"
5454
5595
  }
5455
5596
  ],
5456
- "default": null,
5457
- "title": "Json Schema"
5597
+ "default": null
5458
5598
  },
5459
- "message": {
5599
+ "branch": {
5460
5600
  "anyOf": [
5461
5601
  {
5462
5602
  "type": "string"
@@ -5466,32 +5606,71 @@
5466
5606
  }
5467
5607
  ],
5468
5608
  "default": null,
5469
- "title": "Message"
5609
+ "title": "Branch"
5610
+ },
5611
+ "context": {
5612
+ "title": "Context",
5613
+ "type": "string"
5614
+ },
5615
+ "head_sha": {
5616
+ "title": "Head Sha",
5617
+ "type": "string"
5618
+ },
5619
+ "pull_request_number": {
5620
+ "anyOf": [
5621
+ {
5622
+ "type": "integer"
5623
+ },
5624
+ {
5625
+ "type": "null"
5626
+ }
5627
+ ],
5628
+ "default": null,
5629
+ "title": "Pull Request Number"
5630
+ },
5631
+ "repository": {
5632
+ "title": "Repository",
5633
+ "type": "string"
5634
+ },
5635
+ "state": {
5636
+ "title": "State",
5637
+ "type": "string"
5638
+ },
5639
+ "type": {
5640
+ "const": "github.status",
5641
+ "default": "github.status",
5642
+ "title": "Type",
5643
+ "type": "string"
5644
+ },
5645
+ "url": {
5646
+ "title": "Url",
5647
+ "type": "string"
5470
5648
  }
5471
5649
  },
5472
5650
  "required": [
5473
- "json_schema",
5474
- "message"
5651
+ "action",
5652
+ "actor",
5653
+ "branch",
5654
+ "context",
5655
+ "head_sha",
5656
+ "pull_request_number",
5657
+ "repository",
5658
+ "state",
5659
+ "type",
5660
+ "url"
5475
5661
  ],
5476
- "title": "InputContract",
5662
+ "title": "GithubStatusEvent",
5477
5663
  "type": "object"
5478
5664
  },
5479
- "IssueAction": {
5480
- "enum": [
5481
- "opened",
5482
- "closed",
5483
- "commented"
5484
- ],
5485
- "title": "IssueAction",
5486
- "type": "string"
5487
- },
5488
- "LegacyAssistantPayload": {
5489
- "additionalProperties": true,
5665
+ "GithubWorkflowRunEvent": {
5490
5666
  "properties": {
5491
- "cache_creation": {
5667
+ "action": {
5668
+ "$ref": "#/$defs/WorkflowRunAction"
5669
+ },
5670
+ "actor": {
5492
5671
  "anyOf": [
5493
5672
  {
5494
- "$ref": "#/$defs/SdkCacheCreation"
5673
+ "$ref": "#/$defs/SessionEventActor"
5495
5674
  },
5496
5675
  {
5497
5676
  "type": "null"
@@ -5499,16 +5678,189 @@
5499
5678
  ],
5500
5679
  "default": null
5501
5680
  },
5502
- "content": {
5503
- "default": [],
5504
- "items": {
5505
- "discriminator": {
5506
- "mapping": {
5507
- "server_tool_result": "#/$defs/SdkServerToolResultBlock",
5508
- "server_tool_use": "#/$defs/SdkServerToolUseBlock",
5509
- "text": "#/$defs/SdkTextBlock",
5510
- "thinking": "#/$defs/SdkThinkingBlock",
5511
- "tool_result": "#/$defs/SdkToolResultBlock",
5681
+ "branch": {
5682
+ "anyOf": [
5683
+ {
5684
+ "type": "string"
5685
+ },
5686
+ {
5687
+ "type": "null"
5688
+ }
5689
+ ],
5690
+ "default": null,
5691
+ "title": "Branch"
5692
+ },
5693
+ "conclusion": {
5694
+ "anyOf": [
5695
+ {
5696
+ "type": "string"
5697
+ },
5698
+ {
5699
+ "type": "null"
5700
+ }
5701
+ ],
5702
+ "default": null,
5703
+ "title": "Conclusion"
5704
+ },
5705
+ "head_sha": {
5706
+ "title": "Head Sha",
5707
+ "type": "string"
5708
+ },
5709
+ "name": {
5710
+ "title": "Name",
5711
+ "type": "string"
5712
+ },
5713
+ "pull_request_number": {
5714
+ "anyOf": [
5715
+ {
5716
+ "type": "integer"
5717
+ },
5718
+ {
5719
+ "type": "null"
5720
+ }
5721
+ ],
5722
+ "default": null,
5723
+ "title": "Pull Request Number"
5724
+ },
5725
+ "repository": {
5726
+ "title": "Repository",
5727
+ "type": "string"
5728
+ },
5729
+ "run_number": {
5730
+ "title": "Run Number",
5731
+ "type": "integer"
5732
+ },
5733
+ "type": {
5734
+ "const": "github.workflow_run",
5735
+ "default": "github.workflow_run",
5736
+ "title": "Type",
5737
+ "type": "string"
5738
+ },
5739
+ "url": {
5740
+ "title": "Url",
5741
+ "type": "string"
5742
+ }
5743
+ },
5744
+ "required": [
5745
+ "action",
5746
+ "actor",
5747
+ "branch",
5748
+ "conclusion",
5749
+ "head_sha",
5750
+ "name",
5751
+ "pull_request_number",
5752
+ "repository",
5753
+ "run_number",
5754
+ "type",
5755
+ "url"
5756
+ ],
5757
+ "title": "GithubWorkflowRunEvent",
5758
+ "type": "object"
5759
+ },
5760
+ "HandlerService": {
5761
+ "description": "The service whose events a handler responds to.",
5762
+ "enum": [
5763
+ "slack",
5764
+ "github",
5765
+ "linear",
5766
+ "sentry"
5767
+ ],
5768
+ "title": "HandlerService",
5769
+ "type": "string"
5770
+ },
5771
+ "HeartbeatFrame": {
5772
+ "description": "A keepalive sent after a period of idleness; doubles as the dead-socket\nprobe. Clients should treat roughly twice the heartbeat interval of\nsilence as a dead connection.",
5773
+ "properties": {
5774
+ "ts": {
5775
+ "description": "Server time when the heartbeat was sent.",
5776
+ "format": "date-time",
5777
+ "title": "Ts",
5778
+ "type": "string"
5779
+ },
5780
+ "type": {
5781
+ "const": "heartbeat",
5782
+ "default": "heartbeat",
5783
+ "title": "Type",
5784
+ "type": "string"
5785
+ }
5786
+ },
5787
+ "required": [
5788
+ "ts",
5789
+ "type"
5790
+ ],
5791
+ "title": "HeartbeatFrame",
5792
+ "type": "object"
5793
+ },
5794
+ "InputContract": {
5795
+ "additionalProperties": false,
5796
+ "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).",
5797
+ "properties": {
5798
+ "json_schema": {
5799
+ "anyOf": [
5800
+ {
5801
+ "additionalProperties": true,
5802
+ "type": "object"
5803
+ },
5804
+ {
5805
+ "type": "null"
5806
+ }
5807
+ ],
5808
+ "default": null,
5809
+ "title": "Json Schema"
5810
+ },
5811
+ "message": {
5812
+ "anyOf": [
5813
+ {
5814
+ "type": "string"
5815
+ },
5816
+ {
5817
+ "type": "null"
5818
+ }
5819
+ ],
5820
+ "default": null,
5821
+ "title": "Message"
5822
+ }
5823
+ },
5824
+ "required": [
5825
+ "json_schema",
5826
+ "message"
5827
+ ],
5828
+ "title": "InputContract",
5829
+ "type": "object"
5830
+ },
5831
+ "IssueAction": {
5832
+ "enum": [
5833
+ "opened",
5834
+ "closed",
5835
+ "commented"
5836
+ ],
5837
+ "title": "IssueAction",
5838
+ "type": "string"
5839
+ },
5840
+ "LegacyAssistantPayload": {
5841
+ "additionalProperties": true,
5842
+ "properties": {
5843
+ "cache_creation": {
5844
+ "anyOf": [
5845
+ {
5846
+ "$ref": "#/$defs/SdkCacheCreation"
5847
+ },
5848
+ {
5849
+ "type": "null"
5850
+ }
5851
+ ],
5852
+ "default": null
5853
+ },
5854
+ "content": {
5855
+ "default": [],
5856
+ "items": {
5857
+ "discriminator": {
5858
+ "mapping": {
5859
+ "server_tool_result": "#/$defs/SdkServerToolResultBlock",
5860
+ "server_tool_use": "#/$defs/SdkServerToolUseBlock",
5861
+ "text": "#/$defs/SdkTextBlock",
5862
+ "thinking": "#/$defs/SdkThinkingBlock",
5863
+ "tool_result": "#/$defs/SdkToolResultBlock",
5512
5864
  "tool_use": "#/$defs/SdkToolUseBlock"
5513
5865
  },
5514
5866
  "propertyName": "type"
@@ -5920,6 +6272,66 @@
5920
6272
  "title": "LinearIssueEvent",
5921
6273
  "type": "object"
5922
6274
  },
6275
+ "LlmCost": {
6276
+ "description": "What LLM tokens cost, in total and by model.",
6277
+ "properties": {
6278
+ "all": {
6279
+ "$ref": "#/$defs/LlmCostSplit",
6280
+ "description": "Token cost across every model."
6281
+ },
6282
+ "by_model": {
6283
+ "description": "Token cost for each model that used tokens.",
6284
+ "items": {
6285
+ "$ref": "#/$defs/ModelLlmCostSplit"
6286
+ },
6287
+ "title": "By Model",
6288
+ "type": "array"
6289
+ }
6290
+ },
6291
+ "required": [
6292
+ "all",
6293
+ "by_model"
6294
+ ],
6295
+ "title": "LlmCost",
6296
+ "type": "object"
6297
+ },
6298
+ "LlmCostSplit": {
6299
+ "description": "What LLM tokens cost, in millicents, split by who paid (Ellipsis credit or the user's own subscription).",
6300
+ "properties": {
6301
+ "claude_subscription": {
6302
+ "default": 0,
6303
+ "description": "Token cost paid by a Claude subscription, at Ellipsis rates, in millicents.",
6304
+ "title": "Claude Subscription",
6305
+ "type": "integer"
6306
+ },
6307
+ "codex_subscription": {
6308
+ "default": 0,
6309
+ "description": "Token cost paid by a Codex subscription, at Ellipsis rates, in millicents.",
6310
+ "title": "Codex Subscription",
6311
+ "type": "integer"
6312
+ },
6313
+ "platform": {
6314
+ "default": 0,
6315
+ "description": "Token cost charged to Ellipsis credit, in millicents.",
6316
+ "title": "Platform",
6317
+ "type": "integer"
6318
+ },
6319
+ "total": {
6320
+ "default": 0,
6321
+ "description": "All token cost, in millicents. It is the sum of platform, claude_subscription, and codex_subscription.",
6322
+ "title": "Total",
6323
+ "type": "integer"
6324
+ }
6325
+ },
6326
+ "required": [
6327
+ "claude_subscription",
6328
+ "codex_subscription",
6329
+ "platform",
6330
+ "total"
6331
+ ],
6332
+ "title": "LlmCostSplit",
6333
+ "type": "object"
6334
+ },
5923
6335
  "McpRemoteServer": {
5924
6336
  "additionalProperties": false,
5925
6337
  "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.",
@@ -6455,7 +6867,7 @@
6455
6867
  },
6456
6868
  "MessageRequeuedPayload": {
6457
6869
  "additionalProperties": true,
6458
- "description": "message_requeued: a turn was interrupted before answering, so the\nmessage goes back to the inbox with a new pending turn.",
6870
+ "description": "message_requeued: a turn was interrupted before answering, so the\nmessage goes back to the inbox with a new queued turn.",
6459
6871
  "properties": {
6460
6872
  "message_id": {
6461
6873
  "title": "Message Id",
@@ -6645,42 +7057,135 @@
6645
7057
  "type": "object",
6646
7058
  "x-ellipsis-preserve-payload": true
6647
7059
  },
6648
- "OutputConfig": {
6649
- "additionalProperties": false,
6650
- "description": "JSON Schema for the harness's structured result, when certified.",
7060
+ "ModelLlmCostSplit": {
7061
+ "description": "What one model's tokens cost, in millicents, split by who paid.",
6651
7062
  "properties": {
6652
- "json_schema": {
6653
- "additionalProperties": true,
6654
- "title": "Json Schema",
6655
- "type": "object"
7063
+ "claude_subscription": {
7064
+ "default": 0,
7065
+ "description": "Token cost paid by a Claude subscription, at Ellipsis rates, in millicents.",
7066
+ "title": "Claude Subscription",
7067
+ "type": "integer"
7068
+ },
7069
+ "codex_subscription": {
7070
+ "default": 0,
7071
+ "description": "Token cost paid by a Codex subscription, at Ellipsis rates, in millicents.",
7072
+ "title": "Codex Subscription",
7073
+ "type": "integer"
7074
+ },
7075
+ "model": {
7076
+ "description": "The model that used these tokens.",
7077
+ "title": "Model",
7078
+ "type": "string"
7079
+ },
7080
+ "platform": {
7081
+ "default": 0,
7082
+ "description": "Token cost charged to Ellipsis credit, in millicents.",
7083
+ "title": "Platform",
7084
+ "type": "integer"
7085
+ },
7086
+ "total": {
7087
+ "default": 0,
7088
+ "description": "All token cost, in millicents. It is the sum of platform, claude_subscription, and codex_subscription.",
7089
+ "title": "Total",
7090
+ "type": "integer"
6656
7091
  }
6657
7092
  },
6658
7093
  "required": [
6659
- "json_schema"
7094
+ "claude_subscription",
7095
+ "codex_subscription",
7096
+ "model",
7097
+ "platform",
7098
+ "total"
6660
7099
  ],
6661
- "title": "OutputConfig",
7100
+ "title": "ModelLlmCostSplit",
6662
7101
  "type": "object"
6663
7102
  },
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.",
7103
+ "ModelTokenCounts": {
7104
+ "description": "Token counts for one model.",
6667
7105
  "properties": {
6668
- "ellipsis": {
6669
- "anyOf": [
6670
- {
6671
- "enum": [
6672
- true,
6673
- "all"
6674
- ]
6675
- },
6676
- {
6677
- "$ref": "#/$defs/EllipsisPermissions"
6678
- }
6679
- ],
6680
- "default": true,
6681
- "title": "Ellipsis"
6682
- },
6683
- "github": {
7106
+ "cache_creation": {
7107
+ "default": 0,
7108
+ "description": "Tokens written to the prompt cache.",
7109
+ "title": "Cache Creation",
7110
+ "type": "integer"
7111
+ },
7112
+ "cache_read": {
7113
+ "default": 0,
7114
+ "description": "Tokens read from the prompt cache.",
7115
+ "title": "Cache Read",
7116
+ "type": "integer"
7117
+ },
7118
+ "input": {
7119
+ "default": 0,
7120
+ "description": "Input tokens used.",
7121
+ "title": "Input",
7122
+ "type": "integer"
7123
+ },
7124
+ "model": {
7125
+ "description": "The model that used these tokens.",
7126
+ "title": "Model",
7127
+ "type": "string"
7128
+ },
7129
+ "output": {
7130
+ "default": 0,
7131
+ "description": "Output tokens used.",
7132
+ "title": "Output",
7133
+ "type": "integer"
7134
+ },
7135
+ "total": {
7136
+ "default": 0,
7137
+ "description": "All tokens used, including prompt cache reads and writes. Token cost is priced on this.",
7138
+ "title": "Total",
7139
+ "type": "integer"
7140
+ }
7141
+ },
7142
+ "required": [
7143
+ "cache_creation",
7144
+ "cache_read",
7145
+ "input",
7146
+ "model",
7147
+ "output",
7148
+ "total"
7149
+ ],
7150
+ "title": "ModelTokenCounts",
7151
+ "type": "object"
7152
+ },
7153
+ "OutputConfig": {
7154
+ "additionalProperties": false,
7155
+ "description": "JSON Schema for the harness's structured result, when certified.",
7156
+ "properties": {
7157
+ "json_schema": {
7158
+ "additionalProperties": true,
7159
+ "title": "Json Schema",
7160
+ "type": "object"
7161
+ }
7162
+ },
7163
+ "required": [
7164
+ "json_schema"
7165
+ ],
7166
+ "title": "OutputConfig",
7167
+ "type": "object"
7168
+ },
7169
+ "PermissionsConfig": {
7170
+ "additionalProperties": false,
7171
+ "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.",
7172
+ "properties": {
7173
+ "ellipsis": {
7174
+ "anyOf": [
7175
+ {
7176
+ "enum": [
7177
+ true,
7178
+ "all"
7179
+ ]
7180
+ },
7181
+ {
7182
+ "$ref": "#/$defs/EllipsisPermissions"
7183
+ }
7184
+ ],
7185
+ "default": true,
7186
+ "title": "Ellipsis"
7187
+ },
7188
+ "github": {
6684
7189
  "$ref": "#/$defs/GithubPermissions",
6685
7190
  "default": {
6686
7191
  "permissions": null,
@@ -6706,6 +7211,7 @@
6706
7211
  "message_requeued": "#/$defs/MessageRequeuedRecord",
6707
7212
  "session_closed": "#/$defs/SessionClosedRecord",
6708
7213
  "turn_ended": "#/$defs/TurnEndedRecord",
7214
+ "turn_queued": "#/$defs/TurnQueuedRecord",
6709
7215
  "turn_started": "#/$defs/TurnStartedRecord"
6710
7216
  },
6711
7217
  "propertyName": "record_type"
@@ -6723,6 +7229,9 @@
6723
7229
  {
6724
7230
  "$ref": "#/$defs/MessageRequeuedRecord"
6725
7231
  },
7232
+ {
7233
+ "$ref": "#/$defs/TurnQueuedRecord"
7234
+ },
6726
7235
  {
6727
7236
  "$ref": "#/$defs/TurnStartedRecord"
6728
7237
  },
@@ -6766,7 +7275,7 @@
6766
7275
  },
6767
7276
  "ReactCheckRun": {
6768
7277
  "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.",
7278
+ "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.",
6770
7279
  "properties": {
6771
7280
  "branch": {
6772
7281
  "default": [],
@@ -6811,6 +7320,53 @@
6811
7320
  "title": "ReactCheckRun",
6812
7321
  "type": "object"
6813
7322
  },
7323
+ "ReactCheckSuite": {
7324
+ "additionalProperties": false,
7325
+ "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.",
7326
+ "properties": {
7327
+ "apps": {
7328
+ "default": [],
7329
+ "items": {
7330
+ "type": "string"
7331
+ },
7332
+ "title": "Apps",
7333
+ "type": "array"
7334
+ },
7335
+ "branch": {
7336
+ "default": [],
7337
+ "items": {
7338
+ "type": "string"
7339
+ },
7340
+ "title": "Branch",
7341
+ "type": "array"
7342
+ },
7343
+ "for": {
7344
+ "$ref": "#/$defs/GithubAccountSelector"
7345
+ },
7346
+ "on": {
7347
+ "default": [
7348
+ "failed"
7349
+ ],
7350
+ "items": {
7351
+ "$ref": "#/$defs/CheckSuiteAction"
7352
+ },
7353
+ "title": "On",
7354
+ "type": "array"
7355
+ },
7356
+ "repositories": {
7357
+ "$ref": "#/$defs/RepositoryFilter"
7358
+ }
7359
+ },
7360
+ "required": [
7361
+ "apps",
7362
+ "branch",
7363
+ "for",
7364
+ "on",
7365
+ "repositories"
7366
+ ],
7367
+ "title": "ReactCheckSuite",
7368
+ "type": "object"
7369
+ },
6814
7370
  "ReactIssue": {
6815
7371
  "additionalProperties": false,
6816
7372
  "properties": {
@@ -7061,6 +7617,53 @@
7061
7617
  "title": "ReactSlackChannel",
7062
7618
  "type": "object"
7063
7619
  },
7620
+ "ReactStatus": {
7621
+ "additionalProperties": false,
7622
+ "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.",
7623
+ "properties": {
7624
+ "branch": {
7625
+ "default": [],
7626
+ "items": {
7627
+ "type": "string"
7628
+ },
7629
+ "title": "Branch",
7630
+ "type": "array"
7631
+ },
7632
+ "for": {
7633
+ "$ref": "#/$defs/GithubAccountSelector"
7634
+ },
7635
+ "names": {
7636
+ "default": [],
7637
+ "items": {
7638
+ "type": "string"
7639
+ },
7640
+ "title": "Names",
7641
+ "type": "array"
7642
+ },
7643
+ "on": {
7644
+ "default": [
7645
+ "failed"
7646
+ ],
7647
+ "items": {
7648
+ "$ref": "#/$defs/StatusAction"
7649
+ },
7650
+ "title": "On",
7651
+ "type": "array"
7652
+ },
7653
+ "repositories": {
7654
+ "$ref": "#/$defs/RepositoryFilter"
7655
+ }
7656
+ },
7657
+ "required": [
7658
+ "branch",
7659
+ "for",
7660
+ "names",
7661
+ "on",
7662
+ "repositories"
7663
+ ],
7664
+ "title": "ReactStatus",
7665
+ "type": "object"
7666
+ },
7064
7667
  "ReactTrigger": {
7065
7668
  "additionalProperties": false,
7066
7669
  "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).",
@@ -7076,6 +7679,17 @@
7076
7679
  ],
7077
7680
  "default": null
7078
7681
  },
7682
+ "check_suite": {
7683
+ "anyOf": [
7684
+ {
7685
+ "$ref": "#/$defs/ReactCheckSuite"
7686
+ },
7687
+ {
7688
+ "type": "null"
7689
+ }
7690
+ ],
7691
+ "default": null
7692
+ },
7079
7693
  "enabled": {
7080
7694
  "default": true,
7081
7695
  "title": "Enabled",
@@ -7158,15 +7772,38 @@
7158
7772
  ],
7159
7773
  "default": null
7160
7774
  },
7775
+ "status": {
7776
+ "anyOf": [
7777
+ {
7778
+ "$ref": "#/$defs/ReactStatus"
7779
+ },
7780
+ {
7781
+ "type": "null"
7782
+ }
7783
+ ],
7784
+ "default": null
7785
+ },
7161
7786
  "type": {
7162
7787
  "const": "react",
7163
7788
  "default": "react",
7164
7789
  "title": "Type",
7165
7790
  "type": "string"
7791
+ },
7792
+ "workflow_run": {
7793
+ "anyOf": [
7794
+ {
7795
+ "$ref": "#/$defs/ReactWorkflowRun"
7796
+ },
7797
+ {
7798
+ "type": "null"
7799
+ }
7800
+ ],
7801
+ "default": null
7166
7802
  }
7167
7803
  },
7168
7804
  "required": [
7169
7805
  "check_run",
7806
+ "check_suite",
7170
7807
  "enabled",
7171
7808
  "issue",
7172
7809
  "linear_issue",
@@ -7175,11 +7812,60 @@
7175
7812
  "release",
7176
7813
  "sentry",
7177
7814
  "slack_channel",
7178
- "type"
7815
+ "status",
7816
+ "type",
7817
+ "workflow_run"
7179
7818
  ],
7180
7819
  "title": "ReactTrigger",
7181
7820
  "type": "object"
7182
7821
  },
7822
+ "ReactWorkflowRun": {
7823
+ "additionalProperties": false,
7824
+ "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.",
7825
+ "properties": {
7826
+ "branch": {
7827
+ "default": [],
7828
+ "items": {
7829
+ "type": "string"
7830
+ },
7831
+ "title": "Branch",
7832
+ "type": "array"
7833
+ },
7834
+ "for": {
7835
+ "$ref": "#/$defs/GithubAccountSelector"
7836
+ },
7837
+ "names": {
7838
+ "default": [],
7839
+ "items": {
7840
+ "type": "string"
7841
+ },
7842
+ "title": "Names",
7843
+ "type": "array"
7844
+ },
7845
+ "on": {
7846
+ "default": [
7847
+ "failed"
7848
+ ],
7849
+ "items": {
7850
+ "$ref": "#/$defs/WorkflowRunAction"
7851
+ },
7852
+ "title": "On",
7853
+ "type": "array"
7854
+ },
7855
+ "repositories": {
7856
+ "$ref": "#/$defs/RepositoryFilter"
7857
+ }
7858
+ },
7859
+ "required": [
7860
+ "branch",
7861
+ "for",
7862
+ "names",
7863
+ "on",
7864
+ "repositories"
7865
+ ],
7866
+ "title": "ReactWorkflowRun",
7867
+ "type": "object"
7868
+ },
7183
7869
  "RecordsAppendFrame": {
7184
7870
  "description": "Cursored append-only delivery of session records, ordered by feed_seq,\nfrom all sources. Every record in the frame advances the resume cursor \u2014\nincluding ones a client renders as nothing.",
7185
7871
  "properties": {
@@ -7890,9 +8576,9 @@
7890
8576
  },
7891
8577
  "budget": {
7892
8578
  "default": 0,
7893
- "description": "The spend budget enforced for this session, in US dollars, after resolving defaults and ceilings.",
8579
+ "description": "The spend budget enforced for this session, in millicents, after resolving defaults and ceilings.",
7894
8580
  "title": "Budget",
7895
- "type": "number"
8581
+ "type": "integer"
7896
8582
  },
7897
8583
  "claude_code": {
7898
8584
  "anyOf": [
@@ -7923,8 +8609,8 @@
7923
8609
  "description": "Whether the session can take more messages, and whether an agent is warm to answer one."
7924
8610
  },
7925
8611
  "cost": {
7926
- "$ref": "#/$defs/SessionCost",
7927
- "description": "What the session has cost so far, in millicents, broken down by leg and carrying its own total."
8612
+ "$ref": "#/$defs/Cost",
8613
+ "description": "What the session has cost so far."
7928
8614
  },
7929
8615
  "created_at": {
7930
8616
  "description": "When the session was created.",
@@ -7942,10 +8628,13 @@
7942
8628
  "discriminator": {
7943
8629
  "mapping": {
7944
8630
  "github.check_run": "#/$defs/GithubCheckRunEvent",
8631
+ "github.check_suite": "#/$defs/GithubCheckSuiteEvent",
7945
8632
  "github.issue": "#/$defs/GithubIssueEvent",
7946
8633
  "github.pull_request": "#/$defs/GithubPullRequestEvent",
7947
8634
  "github.push": "#/$defs/GithubPushEvent",
7948
8635
  "github.release": "#/$defs/GithubReleaseEvent",
8636
+ "github.status": "#/$defs/GithubStatusEvent",
8637
+ "github.workflow_run": "#/$defs/GithubWorkflowRunEvent",
7949
8638
  "linear.issue": "#/$defs/LinearIssueEvent",
7950
8639
  "sentry.alert": "#/$defs/SentryAlertEvent",
7951
8640
  "slack.channel_created": "#/$defs/SlackChannelCreatedEvent",
@@ -7966,6 +8655,15 @@
7966
8655
  {
7967
8656
  "$ref": "#/$defs/GithubCheckRunEvent"
7968
8657
  },
8658
+ {
8659
+ "$ref": "#/$defs/GithubCheckSuiteEvent"
8660
+ },
8661
+ {
8662
+ "$ref": "#/$defs/GithubWorkflowRunEvent"
8663
+ },
8664
+ {
8665
+ "$ref": "#/$defs/GithubStatusEvent"
8666
+ },
7969
8667
  {
7970
8668
  "$ref": "#/$defs/GithubReleaseEvent"
7971
8669
  },
@@ -8082,8 +8780,8 @@
8082
8780
  "description": "The latest live summary of the session's progress while it runs, and when it was generated."
8083
8781
  },
8084
8782
  "tokens": {
8085
- "$ref": "#/$defs/SessionTokens",
8086
- "description": "The tokens the session spent and the model they went to. `total` includes the prompt-cache lanes."
8783
+ "$ref": "#/$defs/Tokens",
8784
+ "description": "The tokens the session has used so far."
8087
8785
  },
8088
8786
  "turn": {
8089
8787
  "anyOf": [
@@ -8614,53 +9312,9 @@
8614
9312
  "title": "SessionConversationConfig",
8615
9313
  "type": "object"
8616
9314
  },
8617
- "SessionCost": {
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\".",
8619
- "properties": {
8620
- "cpu": {
8621
- "default": 0,
8622
- "description": "CPU spend in millicents.",
8623
- "title": "Cpu",
8624
- "type": "integer"
8625
- },
8626
- "fee": {
8627
- "default": 0,
8628
- "description": "Platform fee in millicents.",
8629
- "title": "Fee",
8630
- "type": "integer"
8631
- },
8632
- "llm": {
8633
- "default": 0,
8634
- "description": "LLM spend in millicents.",
8635
- "title": "Llm",
8636
- "type": "integer"
8637
- },
8638
- "memory": {
8639
- "default": 0,
8640
- "description": "Memory spend in millicents.",
8641
- "title": "Memory",
8642
- "type": "integer"
8643
- },
8644
- "total": {
8645
- "default": 0,
8646
- "description": "The grand total in millicents: llm + cpu + memory + fee.",
8647
- "title": "Total",
8648
- "type": "integer"
8649
- }
8650
- },
8651
- "required": [
8652
- "cpu",
8653
- "fee",
8654
- "llm",
8655
- "memory",
8656
- "total"
8657
- ],
8658
- "title": "SessionCost",
8659
- "type": "object"
8660
- },
8661
- "SessionEnvironment": {
8662
- "additionalProperties": false,
8663
- "description": "The environment configuration frozen at session creation, enriched with\nthe saved environment's identity and how it was chosen.",
9315
+ "SessionEnvironment": {
9316
+ "additionalProperties": false,
9317
+ "description": "The environment configuration frozen at session creation, enriched with\nthe saved environment's identity and how it was chosen.",
8664
9318
  "properties": {
8665
9319
  "compute": {
8666
9320
  "$ref": "#/$defs/ComputeConfig",
@@ -9436,62 +10090,11 @@
9436
10090
  "title": "SessionSummary",
9437
10091
  "type": "object"
9438
10092
  },
9439
- "SessionTokens": {
9440
- "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.",
9441
- "properties": {
9442
- "cache_creation": {
9443
- "default": 0,
9444
- "description": "Tokens written to the prompt cache.",
9445
- "title": "Cache Creation",
9446
- "type": "integer"
9447
- },
9448
- "cache_read": {
9449
- "default": 0,
9450
- "description": "Tokens read from the prompt cache.",
9451
- "title": "Cache Read",
9452
- "type": "integer"
9453
- },
9454
- "input": {
9455
- "default": 0,
9456
- "description": "Input tokens used.",
9457
- "title": "Input",
9458
- "type": "integer"
9459
- },
9460
- "model": {
9461
- "default": "",
9462
- "description": "The model the token counts are attributed to.",
9463
- "title": "Model",
9464
- "type": "string"
9465
- },
9466
- "output": {
9467
- "default": 0,
9468
- "description": "Output tokens used.",
9469
- "title": "Output",
9470
- "type": "integer"
9471
- },
9472
- "total": {
9473
- "default": 0,
9474
- "description": "Total tokens consumed, INCLUDING the prompt-cache reads and writes \u2014 the same basis the token cost is priced on.",
9475
- "title": "Total",
9476
- "type": "integer"
9477
- }
9478
- },
9479
- "required": [
9480
- "cache_creation",
9481
- "cache_read",
9482
- "input",
9483
- "model",
9484
- "output",
9485
- "total"
9486
- ],
9487
- "title": "SessionTokens",
9488
- "type": "object"
9489
- },
9490
10093
  "SessionTurn": {
9491
- "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`.",
10094
+ "description": "One message and the agent's answer to it. A turn is `queued` from the\nmoment its message is received, `preparing` while its environment is set\nup, `running` while the agent works, then `completed`, `failed`,\n`stopped`, or `cancelled`.",
9492
10095
  "properties": {
9493
10096
  "cost": {
9494
- "$ref": "#/$defs/SessionCost",
10097
+ "$ref": "#/$defs/Cost",
9495
10098
  "description": "What the turn cost so far, in millicents, broken down by leg."
9496
10099
  },
9497
10100
  "created_at": {
@@ -9510,7 +10113,7 @@
9510
10113
  }
9511
10114
  ],
9512
10115
  "default": null,
9513
- "description": "A human-readable explanation of a failed, stopped, or cancelled turn.",
10116
+ "description": "A human-readable explanation of a failed, stopped, or cancelled turn, or of why a queued turn waits.",
9514
10117
  "title": "Detail"
9515
10118
  },
9516
10119
  "ended_at": {
@@ -9580,7 +10183,7 @@
9580
10183
  "description": "When and by whom a stop was requested; null when none was."
9581
10184
  },
9582
10185
  "tokens": {
9583
- "$ref": "#/$defs/SessionTokens",
10186
+ "$ref": "#/$defs/Tokens",
9584
10187
  "description": "The tokens the turn spent and the model they went to."
9585
10188
  }
9586
10189
  },
@@ -9805,7 +10408,7 @@
9805
10408
  "type": "array"
9806
10409
  },
9807
10410
  "protocol": {
9808
- "default": 6,
10411
+ "default": 7,
9809
10412
  "description": "Echoes the protocol version the server is serving.",
9810
10413
  "title": "Protocol",
9811
10414
  "type": "integer"
@@ -9831,6 +10434,84 @@
9831
10434
  "title": "SnapshotFrame",
9832
10435
  "type": "object"
9833
10436
  },
10437
+ "StatusAction": {
10438
+ "description": "The state of a commit status. `success` is `passed`, `failure` is `failed`, and `error` is `errored`.",
10439
+ "enum": [
10440
+ "pending",
10441
+ "passed",
10442
+ "failed",
10443
+ "errored"
10444
+ ],
10445
+ "title": "StatusAction",
10446
+ "type": "string"
10447
+ },
10448
+ "TokenCounts": {
10449
+ "description": "Token counts.",
10450
+ "properties": {
10451
+ "cache_creation": {
10452
+ "default": 0,
10453
+ "description": "Tokens written to the prompt cache.",
10454
+ "title": "Cache Creation",
10455
+ "type": "integer"
10456
+ },
10457
+ "cache_read": {
10458
+ "default": 0,
10459
+ "description": "Tokens read from the prompt cache.",
10460
+ "title": "Cache Read",
10461
+ "type": "integer"
10462
+ },
10463
+ "input": {
10464
+ "default": 0,
10465
+ "description": "Input tokens used.",
10466
+ "title": "Input",
10467
+ "type": "integer"
10468
+ },
10469
+ "output": {
10470
+ "default": 0,
10471
+ "description": "Output tokens used.",
10472
+ "title": "Output",
10473
+ "type": "integer"
10474
+ },
10475
+ "total": {
10476
+ "default": 0,
10477
+ "description": "All tokens used, including prompt cache reads and writes. Token cost is priced on this.",
10478
+ "title": "Total",
10479
+ "type": "integer"
10480
+ }
10481
+ },
10482
+ "required": [
10483
+ "cache_creation",
10484
+ "cache_read",
10485
+ "input",
10486
+ "output",
10487
+ "total"
10488
+ ],
10489
+ "title": "TokenCounts",
10490
+ "type": "object"
10491
+ },
10492
+ "Tokens": {
10493
+ "description": "Tokens used, in total and by model.",
10494
+ "properties": {
10495
+ "all": {
10496
+ "$ref": "#/$defs/TokenCounts",
10497
+ "description": "Token counts across every model."
10498
+ },
10499
+ "by_model": {
10500
+ "description": "Token counts for each model that used tokens.",
10501
+ "items": {
10502
+ "$ref": "#/$defs/ModelTokenCounts"
10503
+ },
10504
+ "title": "By Model",
10505
+ "type": "array"
10506
+ }
10507
+ },
10508
+ "required": [
10509
+ "all",
10510
+ "by_model"
10511
+ ],
10512
+ "title": "Tokens",
10513
+ "type": "object"
10514
+ },
9834
10515
  "TokensInfo": {
9835
10516
  "additionalProperties": false,
9836
10517
  "description": "Token/cost usage, per record (one API call's counts, aggregate fields at\ntheir zero defaults) or aggregated per turn/session\n(compute_spend_from_records derives num_turns and cost_usd).\n\nStrict on purpose: this is our own persisted schema, so an unknown key is a\nwriter bug (the num_turns=0 bug shipped because a Claude Code usage dict\nvalidated leniently against this model, silently zeroing every\nnon-overlapping field). Legacy keys were dropped from persisted blobs by\nthe 2026-07-26 tokens_info migration; per-model usage (CC's modelUsage,\nverbatim) is stored separately, not here.",
@@ -10090,6 +10771,191 @@
10090
10771
  "type": "object",
10091
10772
  "x-ellipsis-preserve-payload": true
10092
10773
  },
10774
+ "TurnQueuedPayload": {
10775
+ "additionalProperties": true,
10776
+ "description": "turn_queued: the turn waits because the account already has\n`sessions_alive` sessions alive, its limit.",
10777
+ "properties": {
10778
+ "limit": {
10779
+ "title": "Limit",
10780
+ "type": "integer"
10781
+ },
10782
+ "sessions_alive": {
10783
+ "title": "Sessions Alive",
10784
+ "type": "integer"
10785
+ },
10786
+ "turn_id": {
10787
+ "title": "Turn Id",
10788
+ "type": "string"
10789
+ }
10790
+ },
10791
+ "required": [
10792
+ "turn_id",
10793
+ "sessions_alive",
10794
+ "limit"
10795
+ ],
10796
+ "title": "TurnQueuedPayload",
10797
+ "type": "object"
10798
+ },
10799
+ "TurnQueuedRecord": {
10800
+ "properties": {
10801
+ "cost": {
10802
+ "anyOf": [
10803
+ {
10804
+ "type": "integer"
10805
+ },
10806
+ {
10807
+ "type": "null"
10808
+ }
10809
+ ],
10810
+ "default": null,
10811
+ "title": "Cost"
10812
+ },
10813
+ "created_at": {
10814
+ "format": "date-time",
10815
+ "title": "Created At",
10816
+ "type": "string"
10817
+ },
10818
+ "duration": {
10819
+ "anyOf": [
10820
+ {
10821
+ "type": "integer"
10822
+ },
10823
+ {
10824
+ "type": "null"
10825
+ }
10826
+ ],
10827
+ "default": null,
10828
+ "title": "Duration"
10829
+ },
10830
+ "feed_seq": {
10831
+ "description": "Position in the session feed and the stream's resume cursor.",
10832
+ "title": "Feed Seq",
10833
+ "type": "integer"
10834
+ },
10835
+ "id": {
10836
+ "description": "Unique identifier of the record.",
10837
+ "title": "Id",
10838
+ "type": "string"
10839
+ },
10840
+ "kind": {
10841
+ "const": "platform",
10842
+ "default": "platform",
10843
+ "title": "Kind",
10844
+ "type": "string"
10845
+ },
10846
+ "model": {
10847
+ "anyOf": [
10848
+ {
10849
+ "type": "string"
10850
+ },
10851
+ {
10852
+ "type": "null"
10853
+ }
10854
+ ],
10855
+ "default": null,
10856
+ "title": "Model"
10857
+ },
10858
+ "payload": {
10859
+ "$ref": "#/$defs/TurnQueuedPayload"
10860
+ },
10861
+ "record_format": {
10862
+ "const": "ellipsis_lifecycle@1",
10863
+ "default": "ellipsis_lifecycle@1",
10864
+ "title": "Record Format",
10865
+ "type": "string"
10866
+ },
10867
+ "record_type": {
10868
+ "const": "turn_queued",
10869
+ "default": "turn_queued",
10870
+ "title": "Record Type",
10871
+ "type": "string"
10872
+ },
10873
+ "session_id": {
10874
+ "description": "Session containing this record.",
10875
+ "title": "Session Id",
10876
+ "type": "string"
10877
+ },
10878
+ "session_message_id": {
10879
+ "anyOf": [
10880
+ {
10881
+ "type": "string"
10882
+ },
10883
+ {
10884
+ "type": "null"
10885
+ }
10886
+ ],
10887
+ "default": null,
10888
+ "description": "Message this record receives, delivers, requeues, or echoes.",
10889
+ "title": "Session Message Id"
10890
+ },
10891
+ "source": {
10892
+ "const": "lifecycle",
10893
+ "default": "lifecycle",
10894
+ "title": "Source",
10895
+ "type": "string"
10896
+ },
10897
+ "tokens_info": {
10898
+ "anyOf": [
10899
+ {
10900
+ "$ref": "#/$defs/TokensInfo"
10901
+ },
10902
+ {
10903
+ "type": "null"
10904
+ }
10905
+ ],
10906
+ "default": null
10907
+ },
10908
+ "tools": {
10909
+ "anyOf": [
10910
+ {
10911
+ "items": {
10912
+ "type": "string"
10913
+ },
10914
+ "type": "array"
10915
+ },
10916
+ {
10917
+ "type": "null"
10918
+ }
10919
+ ],
10920
+ "default": null,
10921
+ "title": "Tools"
10922
+ },
10923
+ "turn_id": {
10924
+ "anyOf": [
10925
+ {
10926
+ "type": "string"
10927
+ },
10928
+ {
10929
+ "type": "null"
10930
+ }
10931
+ ],
10932
+ "default": null,
10933
+ "description": "Turn containing this record, when applicable.",
10934
+ "title": "Turn Id"
10935
+ }
10936
+ },
10937
+ "required": [
10938
+ "cost",
10939
+ "created_at",
10940
+ "duration",
10941
+ "feed_seq",
10942
+ "id",
10943
+ "kind",
10944
+ "model",
10945
+ "payload",
10946
+ "record_format",
10947
+ "record_type",
10948
+ "session_id",
10949
+ "session_message_id",
10950
+ "source",
10951
+ "tokens_info",
10952
+ "tools",
10953
+ "turn_id"
10954
+ ],
10955
+ "title": "TurnQueuedRecord",
10956
+ "type": "object",
10957
+ "x-ellipsis-preserve-payload": true
10958
+ },
10093
10959
  "TurnReason": {
10094
10960
  "description": "Why a turn failed or was cancelled. Null on every other outcome.",
10095
10961
  "enum": [
@@ -10294,9 +11160,10 @@
10294
11160
  "x-ellipsis-preserve-payload": true
10295
11161
  },
10296
11162
  "TurnStatus": {
10297
- "description": "Where one turn is: queued for an agent, being answered, or over.\n\n`pending` covers everything before the agent starts on the message: queued\nbehind another turn, waiting to start, or preparing the environment.\n`stopped` and `cancelled` are their own outcomes; `reason` explains a\n`failed` or `cancelled` turn.",
11163
+ "description": "Where one turn is: waiting, preparing, being answered, or over.\n\n`queued` turns wait to start, behind another turn or for a free session\nslot on the account. `preparing` turns wait while the environment is set\nup. `stopped` and `cancelled` are their own outcomes; `reason` explains a\n`failed` or `cancelled` turn.",
10298
11164
  "enum": [
10299
- "pending",
11165
+ "queued",
11166
+ "preparing",
10300
11167
  "running",
10301
11168
  "completed",
10302
11169
  "failed",
@@ -10465,10 +11332,31 @@
10465
11332
  "title": "UnknownSessionRecord",
10466
11333
  "type": "object",
10467
11334
  "x-ellipsis-preserve-payload": true
11335
+ },
11336
+ "WorkflowRunAction": {
11337
+ "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.",
11338
+ "enum": [
11339
+ "requested",
11340
+ "queued",
11341
+ "waiting",
11342
+ "pending",
11343
+ "started",
11344
+ "passed",
11345
+ "failed",
11346
+ "timed_out",
11347
+ "cancelled",
11348
+ "skipped",
11349
+ "neutral",
11350
+ "action_required",
11351
+ "stale",
11352
+ "startup_failure"
11353
+ ],
11354
+ "title": "WorkflowRunAction",
11355
+ "type": "string"
10468
11356
  }
10469
11357
  },
10470
11358
  "$schema": "https://json-schema.org/draft/2020-12/schema",
10471
- "description": "One server-to-client frame of the Ellipsis session stream protocol v6 (WS /v1/sessions/{id}/stream?protocol=6). Clients MUST ignore frames with unknown `type` values \u2014 additive frames are not a protocol break.",
11359
+ "description": "One server-to-client frame of the Ellipsis session stream protocol v7 (WS /v1/sessions/{id}/stream?protocol=7). Clients MUST ignore frames with unknown `type` values \u2014 additive frames are not a protocol break.",
10472
11360
  "oneOf": [
10473
11361
  {
10474
11362
  "$ref": "#/$defs/SnapshotFrame"