@ellipsis-dev/sdk 0.4.0 → 0.6.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.
@@ -10,6 +10,7 @@
10
10
  "lifecycle_hook_failed",
11
11
  "missing_repo_access",
12
12
  "missing_token_permissions",
13
+ "missing_sandbox_variables",
13
14
  "cancelled",
14
15
  "interrupted",
15
16
  "error",
@@ -96,6 +97,7 @@
96
97
  "type": "string"
97
98
  },
98
99
  "AgentSessionWire": {
100
+ "description": "An agent session: one conversation with an agent, from trigger to\nterminal state. Returned by `GET /sessions/{id}` and carried by the\nsession stream's `session`/`snapshot` frames \u2014 REST and stream never\ndisagree about what a session looks like.",
99
101
  "properties": {
100
102
  "agent_config_id": {
101
103
  "anyOf": [
@@ -107,6 +109,7 @@
107
109
  }
108
110
  ],
109
111
  "default": null,
112
+ "description": "Identifier of the saved agent config the session ran on, if any.",
110
113
  "title": "Agent Config Id"
111
114
  },
112
115
  "attributed_user": {
@@ -118,7 +121,8 @@
118
121
  "type": "null"
119
122
  }
120
123
  ],
121
- "default": null
124
+ "default": null,
125
+ "description": "The GitHub user the session is attributed to, when the attribution is a GitHub user."
122
126
  },
123
127
  "attribution_id": {
124
128
  "anyOf": [
@@ -130,6 +134,7 @@
130
134
  }
131
135
  ],
132
136
  "default": null,
137
+ "description": "Identifier of the principal the session is attributed to.",
133
138
  "title": "Attribution Id"
134
139
  },
135
140
  "attribution_type": {
@@ -141,7 +146,8 @@
141
146
  "type": "null"
142
147
  }
143
148
  ],
144
- "default": null
149
+ "default": null,
150
+ "description": "Kind of principal the session is attributed to (e.g. a GitHub user or an API key)."
145
151
  },
146
152
  "client_version": {
147
153
  "anyOf": [
@@ -153,6 +159,7 @@
153
159
  }
154
160
  ],
155
161
  "default": null,
162
+ "description": "Version of the client that started the session, if reported.",
156
163
  "title": "Client Version"
157
164
  },
158
165
  "config_override": {
@@ -166,6 +173,7 @@
166
173
  }
167
174
  ],
168
175
  "default": null,
176
+ "description": "The partial-config diff applied for this run; null when the config was unmodified.",
169
177
  "title": "Config Override"
170
178
  },
171
179
  "context_repository": {
@@ -178,33 +186,40 @@
178
186
  }
179
187
  ],
180
188
  "default": null,
189
+ "description": "The \"owner/name\" repository context the session was started in, if any.",
181
190
  "title": "Context Repository"
182
191
  },
183
192
  "cost_fee": {
184
193
  "default": 0,
194
+ "description": "Platform fee in millicents.",
185
195
  "title": "Cost Fee",
186
196
  "type": "integer"
187
197
  },
188
198
  "cost_sandbox_cpu": {
189
199
  "default": 0,
200
+ "description": "Sandbox CPU spend in millicents.",
190
201
  "title": "Cost Sandbox Cpu",
191
202
  "type": "integer"
192
203
  },
193
204
  "cost_sandbox_memory": {
194
205
  "default": 0,
206
+ "description": "Sandbox memory spend in millicents.",
195
207
  "title": "Cost Sandbox Memory",
196
208
  "type": "integer"
197
209
  },
198
210
  "cost_tokens": {
211
+ "description": "Token spend in millicents. The session's grand total cost is the sum of cost_tokens, cost_sandbox_cpu, cost_sandbox_memory, and cost_fee.",
199
212
  "title": "Cost Tokens",
200
213
  "type": "integer"
201
214
  },
202
215
  "created_at": {
216
+ "description": "When the session was created.",
203
217
  "format": "date-time",
204
218
  "title": "Created At",
205
219
  "type": "string"
206
220
  },
207
221
  "customer_id": {
222
+ "description": "Identifier of the account that owns the session.",
208
223
  "title": "Customer Id",
209
224
  "type": "string"
210
225
  },
@@ -217,7 +232,8 @@
217
232
  "type": "null"
218
233
  }
219
234
  ],
220
- "default": null
235
+ "default": null,
236
+ "description": "How the session's config was resolved from the account's defaults, when no explicit config was given."
221
237
  },
222
238
  "exit_status": {
223
239
  "anyOf": [
@@ -228,12 +244,15 @@
228
244
  "type": "null"
229
245
  }
230
246
  ],
231
- "default": null
247
+ "default": null,
248
+ "description": "How the session ended; null until it is terminal."
232
249
  },
233
250
  "harness": {
234
- "$ref": "#/$defs/Harness"
251
+ "$ref": "#/$defs/Harness",
252
+ "description": "The coding-agent harness the session runs on."
235
253
  },
236
254
  "id": {
255
+ "description": "Unique identifier of the session.",
237
256
  "title": "Id",
238
257
  "type": "string"
239
258
  },
@@ -248,6 +267,7 @@
248
267
  }
249
268
  ],
250
269
  "default": null,
270
+ "description": "When the session last showed activity.",
251
271
  "title": "Last Activity At"
252
272
  },
253
273
  "last_message_at": {
@@ -261,6 +281,7 @@
261
281
  }
262
282
  ],
263
283
  "default": null,
284
+ "description": "When the session last received a message.",
264
285
  "title": "Last Message At"
265
286
  },
266
287
  "live_summary": {
@@ -273,6 +294,7 @@
273
294
  }
274
295
  ],
275
296
  "default": null,
297
+ "description": "A live summary of the session's progress while it runs.",
276
298
  "title": "Live Summary"
277
299
  },
278
300
  "metadata": {
@@ -280,6 +302,7 @@
280
302
  "type": "string"
281
303
  },
282
304
  "default": {},
305
+ "description": "Caller-supplied metadata key-value pairs.",
283
306
  "title": "Metadata",
284
307
  "type": "object"
285
308
  },
@@ -296,6 +319,7 @@
296
319
  }
297
320
  ],
298
321
  "default": null,
322
+ "description": "Pull requests the session created or updated.",
299
323
  "title": "Output Prs"
300
324
  },
301
325
  "parent_agent_session_id": {
@@ -308,6 +332,7 @@
308
332
  }
309
333
  ],
310
334
  "default": null,
335
+ "description": "Identifier of the parent session that spawned this one, if any.",
311
336
  "title": "Parent Agent Session Id"
312
337
  },
313
338
  "parent_kind": {
@@ -319,7 +344,8 @@
319
344
  "type": "null"
320
345
  }
321
346
  ],
322
- "default": null
347
+ "default": null,
348
+ "description": "How this session relates to its parent session, if any."
323
349
  },
324
350
  "prompt": {
325
351
  "anyOf": [
@@ -331,10 +357,12 @@
331
357
  }
332
358
  ],
333
359
  "default": null,
360
+ "description": "The per-session prompt the session was started with.",
334
361
  "title": "Prompt"
335
362
  },
336
363
  "prompting": {
337
- "$ref": "#/$defs/SessionPrompting"
364
+ "$ref": "#/$defs/SessionPrompting",
365
+ "description": "Whether a client may send this session a message and, when it may not, the reason to show instead of a composer."
338
366
  },
339
367
  "replayed_from_session_id": {
340
368
  "anyOf": [
@@ -346,14 +374,17 @@
346
374
  }
347
375
  ],
348
376
  "default": null,
377
+ "description": "Identifier of the original session this one was replayed from, if it was started via replay.",
349
378
  "title": "Replayed From Session Id"
350
379
  },
351
380
  "resolved_budget_cents": {
381
+ "description": "The spend budget resolved for this session, in cents.",
352
382
  "title": "Resolved Budget Cents",
353
383
  "type": "integer"
354
384
  },
355
385
  "resolved_budget_source": {
356
- "$ref": "#/$defs/BudgetSource"
386
+ "$ref": "#/$defs/BudgetSource",
387
+ "description": "Where the resolved budget came from."
357
388
  },
358
389
  "sandbox_id": {
359
390
  "anyOf": [
@@ -365,6 +396,7 @@
365
396
  }
366
397
  ],
367
398
  "default": null,
399
+ "description": "Identifier of the sandbox the session runs in, if any.",
368
400
  "title": "Sandbox Id"
369
401
  },
370
402
  "session_key": {
@@ -377,6 +409,7 @@
377
409
  }
378
410
  ],
379
411
  "default": null,
412
+ "description": "Key identifying the durable conversation this session belongs to, or null for single-shot sessions.",
380
413
  "title": "Session Key"
381
414
  },
382
415
  "session_state": {
@@ -388,13 +421,16 @@
388
421
  "type": "null"
389
422
  }
390
423
  ],
391
- "default": null
424
+ "default": null,
425
+ "description": "Lifecycle state of the durable conversation, or null for sessions without one."
392
426
  },
393
427
  "source": {
394
- "$ref": "#/$defs/AgentSessionSource"
428
+ "$ref": "#/$defs/AgentSessionSource",
429
+ "description": "Where the session came from (e.g. react, manual, api, cli, mention, cron, laptop)."
395
430
  },
396
431
  "status": {
397
- "$ref": "#/$defs/AgentSessionStatus"
432
+ "$ref": "#/$defs/AgentSessionStatus",
433
+ "description": "Execution status of the session."
398
434
  },
399
435
  "status_reason": {
400
436
  "anyOf": [
@@ -406,6 +442,7 @@
406
442
  }
407
443
  ],
408
444
  "default": null,
445
+ "description": "Human-readable reason for the current status, when there is one.",
409
446
  "title": "Status Reason"
410
447
  },
411
448
  "stopped_at": {
@@ -419,6 +456,7 @@
419
456
  }
420
457
  ],
421
458
  "default": null,
459
+ "description": "When a stop was requested, if one was.",
422
460
  "title": "Stopped At"
423
461
  },
424
462
  "stopped_by": {
@@ -431,6 +469,7 @@
431
469
  }
432
470
  ],
433
471
  "default": null,
472
+ "description": "GitHub account id of the user who stopped the session, if known.",
434
473
  "title": "Stopped By"
435
474
  },
436
475
  "stopped_by_user": {
@@ -442,7 +481,8 @@
442
481
  "type": "null"
443
482
  }
444
483
  ],
445
- "default": null
484
+ "default": null,
485
+ "description": "The GitHub user who stopped the session, if it was stopped."
446
486
  },
447
487
  "surface": {
448
488
  "anyOf": [
@@ -453,38 +493,46 @@
453
493
  "type": "null"
454
494
  }
455
495
  ],
456
- "default": null
496
+ "default": null,
497
+ "description": "The public status projection; null for laptop-synced sessions."
457
498
  },
458
499
  "tokens_cache_creation": {
459
500
  "default": 0,
501
+ "description": "Tokens written to the prompt cache.",
460
502
  "title": "Tokens Cache Creation",
461
503
  "type": "integer"
462
504
  },
463
505
  "tokens_cache_read": {
464
506
  "default": 0,
507
+ "description": "Tokens read from the prompt cache.",
465
508
  "title": "Tokens Cache Read",
466
509
  "type": "integer"
467
510
  },
468
511
  "tokens_input": {
469
512
  "default": 0,
513
+ "description": "Input tokens used.",
470
514
  "title": "Tokens Input",
471
515
  "type": "integer"
472
516
  },
473
517
  "tokens_model": {
518
+ "description": "The model the token counts are attributed to.",
474
519
  "title": "Tokens Model",
475
520
  "type": "string"
476
521
  },
477
522
  "tokens_output": {
478
523
  "default": 0,
524
+ "description": "Output tokens used.",
479
525
  "title": "Tokens Output",
480
526
  "type": "integer"
481
527
  },
482
528
  "tokens_total": {
483
529
  "default": 0,
530
+ "description": "Total tokens used by the session.",
484
531
  "title": "Tokens Total",
485
532
  "type": "integer"
486
533
  },
487
534
  "updated_at": {
535
+ "description": "When the session was last updated.",
488
536
  "format": "date-time",
489
537
  "title": "Updated At",
490
538
  "type": "string"
@@ -499,6 +547,7 @@
499
547
  }
500
548
  ],
501
549
  "default": null,
550
+ "description": "Identifier of the webhook event that triggered the session, if any.",
502
551
  "title": "Webhook Id"
503
552
  },
504
553
  "webhook_type": {
@@ -510,7 +559,8 @@
510
559
  "type": "null"
511
560
  }
512
561
  ],
513
- "default": null
562
+ "default": null,
563
+ "description": "Type of the webhook event that triggered the session, if any."
514
564
  }
515
565
  },
516
566
  "required": [
@@ -577,7 +627,7 @@
577
627
  "type": "string"
578
628
  },
579
629
  "BudgetSource": {
580
- "description": "Which layer actually determined the enforced budget.\n\nNot derivable from the run row alone (the run does not store the config\ncents or the customer default), so we persist it for the UI / audit.",
630
+ "description": "Which layer actually determined the enforced budget.\n\nNot derivable from the run row alone (the run does not store the config\ncents or the account default), so we persist it for the UI / audit.",
581
631
  "enum": [
582
632
  "system",
583
633
  "account",
@@ -598,7 +648,7 @@
598
648
  "type": "string"
599
649
  },
600
650
  "DeltaFrame": {
601
- "description": "Fire-and-forget partial assistant output for the current response.\nNo seq, never resumable; superseded by the committed record.",
651
+ "description": "Fire-and-forget partial assistant output for the current response.\nCarries no sequence number and is never resumable; superseded by the\ncommitted record.",
602
652
  "properties": {
603
653
  "agent_turn_id": {
604
654
  "anyOf": [
@@ -610,6 +660,7 @@
610
660
  }
611
661
  ],
612
662
  "default": null,
663
+ "description": "Identifier of the turn the delta belongs to, if known.",
613
664
  "title": "Agent Turn Id"
614
665
  },
615
666
  "kind": {
@@ -626,6 +677,7 @@
626
677
  }
627
678
  ],
628
679
  "default": null,
680
+ "description": "Output tokens generated so far for the current response.",
629
681
  "title": "Output Tokens"
630
682
  },
631
683
  "text": {
@@ -638,6 +690,7 @@
638
690
  }
639
691
  ],
640
692
  "default": null,
693
+ "description": "The partial output text.",
641
694
  "title": "Text"
642
695
  },
643
696
  "type": {
@@ -658,7 +711,7 @@
658
711
  "type": "object"
659
712
  },
660
713
  "DoneFrame": {
661
- "description": "Terminal marker: the conversation is over, after the final session frame\ncarried the end state. Followed by close 1000.",
714
+ "description": "Terminal marker: the conversation is over, after the final session\nframe carried the end state. Followed by a normal close (1000).",
662
715
  "properties": {
663
716
  "type": {
664
717
  "const": "done",
@@ -674,9 +727,10 @@
674
727
  "type": "object"
675
728
  },
676
729
  "ErrorFrame": {
677
- "description": "Terminal error marker, before close 1011. Curated copy only.",
730
+ "description": "Terminal error marker, sent before the server closes with code 1011.",
678
731
  "properties": {
679
732
  "message": {
733
+ "description": "A human-readable error message.",
680
734
  "title": "Message",
681
735
  "type": "string"
682
736
  },
@@ -734,15 +788,17 @@
734
788
  },
735
789
  "Harness": {
736
790
  "enum": [
737
- "claude_code"
791
+ "claude_code",
792
+ "codex"
738
793
  ],
739
794
  "title": "Harness",
740
795
  "type": "string"
741
796
  },
742
797
  "HeartbeatFrame": {
743
- "description": "Sent after HEARTBEAT_SECONDS of idleness; doubles as the dead-socket\nprobe.",
798
+ "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.",
744
799
  "properties": {
745
800
  "ts": {
801
+ "description": "Server time when the heartbeat was sent.",
746
802
  "format": "date-time",
747
803
  "title": "Ts",
748
804
  "type": "string"
@@ -777,6 +833,7 @@
777
833
  "mention_surface",
778
834
  "ephemeral_trigger",
779
835
  "non_interactive",
836
+ "harness_single_turn",
780
837
  "closed",
781
838
  "laptop"
782
839
  ],
@@ -784,9 +841,10 @@
784
841
  "type": "string"
785
842
  },
786
843
  "RecordsAppendFrame": {
787
- "description": "Cursored append-only: raw records ordered by feed_seq, all sources.\nEvery record in the frame advances the resume cursor \u2014 including ones a\nclient renders as nothing (\u00a73.4).",
844
+ "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.",
788
845
  "properties": {
789
846
  "records": {
847
+ "description": "New session records, ordered by feed_seq.",
790
848
  "items": {
791
849
  "$ref": "#/$defs/SessionRecordWire"
792
850
  },
@@ -824,10 +882,11 @@
824
882
  "type": "string"
825
883
  },
826
884
  "SessionFrame": {
827
- "description": "LWW snapshot of the enriched public session (\u00a74.1) \u2014 the only way\nstatus/state/cost arrive. Resent whole on any field change.",
885
+ "description": "A last-writer-wins snapshot of the session \u2014 the only way status,\nstate, and cost updates arrive. Resent whole on any field change.",
828
886
  "properties": {
829
887
  "session": {
830
- "$ref": "#/$defs/AgentSessionWire"
888
+ "$ref": "#/$defs/AgentSessionWire",
889
+ "description": "The session's current state."
831
890
  },
832
891
  "type": {
833
892
  "const": "session",
@@ -862,9 +921,10 @@
862
921
  "type": "string"
863
922
  },
864
923
  "SessionMessageWire": {
865
- "description": "The wire shape of one inbox message (\u00a73.3): what a queued chip renders\nand retires on. `author` is the message's attribution string; the webhook\nprovenance internals stay off the wire.",
924
+ "description": "One message in a session's inbox: what a queued message renders and\nretires on. The webhook provenance internals stay off the wire.",
866
925
  "properties": {
867
926
  "agent_session_id": {
927
+ "description": "Identifier of the session the message belongs to.",
868
928
  "title": "Agent Session Id",
869
929
  "type": "string"
870
930
  },
@@ -878,13 +938,16 @@
878
938
  }
879
939
  ],
880
940
  "default": null,
941
+ "description": "Display attribution of the message's sender.",
881
942
  "title": "Author"
882
943
  },
883
944
  "body": {
945
+ "description": "The message text.",
884
946
  "title": "Body",
885
947
  "type": "string"
886
948
  },
887
949
  "created_at": {
950
+ "description": "When the message was created.",
888
951
  "format": "date-time",
889
952
  "title": "Created At",
890
953
  "type": "string"
@@ -900,6 +963,7 @@
900
963
  }
901
964
  ],
902
965
  "default": null,
966
+ "description": "When the message was delivered to the agent, if it has been.",
903
967
  "title": "Delivered At"
904
968
  },
905
969
  "delivered_turn_id": {
@@ -912,6 +976,7 @@
912
976
  }
913
977
  ],
914
978
  "default": null,
979
+ "description": "Identifier of the turn the message was delivered into, if any.",
915
980
  "title": "Delivered Turn Id"
916
981
  },
917
982
  "feed_seq": {
@@ -924,9 +989,11 @@
924
989
  }
925
990
  ],
926
991
  "default": null,
992
+ "description": "Where the message sits in the session's feed \u2014 placement metadata only, NOT a resume cursor (only records_append frames advance the cursor). Null for older rows.",
927
993
  "title": "Feed Seq"
928
994
  },
929
995
  "id": {
996
+ "description": "Unique identifier of the message.",
930
997
  "title": "Id",
931
998
  "type": "string"
932
999
  },
@@ -940,6 +1007,7 @@
940
1007
  }
941
1008
  ],
942
1009
  "default": null,
1010
+ "description": "Identifier of the principal that sent the message, if attributed.",
943
1011
  "title": "Sender Attribution Id"
944
1012
  },
945
1013
  "sender_attribution_type": {
@@ -951,10 +1019,12 @@
951
1019
  "type": "null"
952
1020
  }
953
1021
  ],
954
- "default": null
1022
+ "default": null,
1023
+ "description": "Kind of principal that sent the message, if attributed."
955
1024
  },
956
1025
  "status": {
957
- "$ref": "#/$defs/SessionMessageStatus"
1026
+ "$ref": "#/$defs/SessionMessageStatus",
1027
+ "description": "Delivery status of the message."
958
1028
  }
959
1029
  },
960
1030
  "required": [
@@ -1026,9 +1096,10 @@
1026
1096
  "type": "object"
1027
1097
  },
1028
1098
  "SessionRecordWire": {
1029
- "description": "The wire shape of one session record (\u00a73.3): the \u00a73.6 stable envelope +\nthe native `payload`, by explicit allowlist. Internal-only columns\n(`search_text`, `clis`, ingest bookkeeping, attribution denormalizations)\nare deliberately absent so internal model evolution stays free.",
1099
+ "description": "One entry of a session's log: a stable envelope around the harness's\nnative payload. Internal-only columns are deliberately absent so internal\nmodel evolution stays free.",
1030
1100
  "properties": {
1031
1101
  "agent_session_id": {
1102
+ "description": "Identifier of the session the record belongs to.",
1032
1103
  "title": "Agent Session Id",
1033
1104
  "type": "string"
1034
1105
  },
@@ -1042,6 +1113,7 @@
1042
1113
  }
1043
1114
  ],
1044
1115
  "default": null,
1116
+ "description": "Identifier of the turn the record belongs to, if any.",
1045
1117
  "title": "Agent Turn Id"
1046
1118
  },
1047
1119
  "cost": {
@@ -1054,9 +1126,11 @@
1054
1126
  }
1055
1127
  ],
1056
1128
  "default": null,
1129
+ "description": "Cost attributed to this record, if any.",
1057
1130
  "title": "Cost"
1058
1131
  },
1059
1132
  "created_at": {
1133
+ "description": "When the record was created.",
1060
1134
  "format": "date-time",
1061
1135
  "title": "Created At",
1062
1136
  "type": "string"
@@ -1071,13 +1145,16 @@
1071
1145
  }
1072
1146
  ],
1073
1147
  "default": null,
1148
+ "description": "Duration attributed to this record, if any.",
1074
1149
  "title": "Duration"
1075
1150
  },
1076
1151
  "feed_seq": {
1152
+ "description": "The record's position in the session's ordered feed \u2014 the resume cursor for the stream and the records endpoints.",
1077
1153
  "title": "Feed Seq",
1078
1154
  "type": "integer"
1079
1155
  },
1080
1156
  "id": {
1157
+ "description": "Unique identifier of the record.",
1081
1158
  "title": "Id",
1082
1159
  "type": "string"
1083
1160
  },
@@ -1091,18 +1168,22 @@
1091
1168
  }
1092
1169
  ],
1093
1170
  "default": null,
1171
+ "description": "The model that produced this record, if any.",
1094
1172
  "title": "Model"
1095
1173
  },
1096
1174
  "payload": {
1097
1175
  "additionalProperties": true,
1176
+ "description": "The harness's native line, verbatim. Consumers parse it at their own risk, versioned via record_format.",
1098
1177
  "title": "Payload",
1099
1178
  "type": "object"
1100
1179
  },
1101
1180
  "record_format": {
1181
+ "description": "Versions the payload shape, e.g. claude_stream_json@2.0 or ellipsis_lifecycle@1.",
1102
1182
  "title": "Record Format",
1103
1183
  "type": "string"
1104
1184
  },
1105
1185
  "record_type": {
1186
+ "description": "The record's type within its format.",
1106
1187
  "title": "Record Type",
1107
1188
  "type": "string"
1108
1189
  },
@@ -1116,6 +1197,7 @@
1116
1197
  }
1117
1198
  ],
1118
1199
  "default": null,
1200
+ "description": "Correlates a user-echo record back to the session message it echoes, so clients can retire queued messages by id.",
1119
1201
  "title": "Session Message Id"
1120
1202
  },
1121
1203
  "source": {
@@ -1123,6 +1205,7 @@
1123
1205
  "type": "string"
1124
1206
  },
1125
1207
  "stream_seq": {
1208
+ "description": "The record's position within its execution's stream.",
1126
1209
  "title": "Stream Seq",
1127
1210
  "type": "integer"
1128
1211
  },
@@ -1135,7 +1218,8 @@
1135
1218
  "type": "null"
1136
1219
  }
1137
1220
  ],
1138
- "default": null
1221
+ "default": null,
1222
+ "description": "Token usage reported for this record, if any."
1139
1223
  },
1140
1224
  "tools": {
1141
1225
  "anyOf": [
@@ -1150,6 +1234,7 @@
1150
1234
  }
1151
1235
  ],
1152
1236
  "default": null,
1237
+ "description": "Names of the tools used in this record, if any.",
1153
1238
  "title": "Tools"
1154
1239
  }
1155
1240
  },
@@ -1228,7 +1313,7 @@
1228
1313
  "type": "object"
1229
1314
  },
1230
1315
  "SnapshotFrame": {
1231
- "description": "First frame after accept. Lean: session + open inbox only \u2014 records\nalways arrive via records_append (\u00a73.4).",
1316
+ "description": "The first frame after the stream connects: the session plus its open\ninbox. Records always arrive separately via records_append frames.",
1232
1317
  "properties": {
1233
1318
  "earliest_feed_seq": {
1234
1319
  "anyOf": [
@@ -1239,9 +1324,11 @@
1239
1324
  "type": "null"
1240
1325
  }
1241
1326
  ],
1327
+ "description": "The retention head: the lowest feed_seq still stored for this session, or null when it has no stored records. A client resuming from after_seq < earliest_feed_seq - 1 knows history is truncated.",
1242
1328
  "title": "Earliest Feed Seq"
1243
1329
  },
1244
1330
  "messages": {
1331
+ "description": "The session's open (pending) inbox messages.",
1245
1332
  "items": {
1246
1333
  "$ref": "#/$defs/SessionMessageWire"
1247
1334
  },
@@ -1250,11 +1337,13 @@
1250
1337
  },
1251
1338
  "protocol": {
1252
1339
  "default": 3,
1340
+ "description": "Echoes the protocol version the server is serving.",
1253
1341
  "title": "Protocol",
1254
1342
  "type": "integer"
1255
1343
  },
1256
1344
  "session": {
1257
- "$ref": "#/$defs/AgentSessionWire"
1345
+ "$ref": "#/$defs/AgentSessionWire",
1346
+ "description": "The session's current state."
1258
1347
  },
1259
1348
  "type": {
1260
1349
  "const": "snapshot",
@@ -1342,7 +1431,7 @@
1342
1431
  }
1343
1432
  },
1344
1433
  "$schema": "https://json-schema.org/draft/2020-12/schema",
1345
- "description": "One server-to-client frame of the Ellipsis session stream protocol v3 (WS /v1/sessions/{id}/stream?protocol=3). Clients MUST ignore frames with unknown `type` values \u2014 additive frames are not a protocol break.",
1434
+ "description": "One server-to-client frame of the Ellipsis session stream protocol v3 (WS /sessions/{id}/stream?protocol=3). Clients MUST ignore frames with unknown `type` values \u2014 additive frames are not a protocol break.",
1346
1435
  "oneOf": [
1347
1436
  {
1348
1437
  "$ref": "#/$defs/SnapshotFrame"