@ellipsis-dev/sdk 0.12.0 → 0.13.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.
@@ -1028,6 +1028,21 @@
1028
1028
  "title": "AgentConfigSkill",
1029
1029
  "type": "object"
1030
1030
  },
1031
+ "AgentConfigSource": {
1032
+ "description": "Where a session's config came from. Total: every session has exactly one\nsource, including the ones that never touch defaults resolution.\n\nNot derivable from the row \u2014 `agent_config_id` says WHICH saved config, not\nhow it was chosen, and is null for inline, platform-default, and built-in\nconfigs alike \u2014 so it is persisted for audit and the published wire.",
1033
+ "enum": [
1034
+ "explicit",
1035
+ "inline",
1036
+ "template",
1037
+ "repo_default",
1038
+ "account_default",
1039
+ "platform_default",
1040
+ "trigger",
1041
+ "builtin"
1042
+ ],
1043
+ "title": "AgentConfigSource",
1044
+ "type": "string"
1045
+ },
1031
1046
  "AgentConfigSourceGithub": {
1032
1047
  "description": "Identifies the file a GitHub-sourced agent config is synced from.\n\nKeyed on the repository ID (not owner/name) so repository and org renames\ndon't orphan the config; resolve display names from gh_repositories at\nread time.",
1033
1048
  "properties": {
@@ -1094,50 +1109,10 @@
1094
1109
  "title": "AgentConfigsListResponse",
1095
1110
  "type": "object"
1096
1111
  },
1097
- "AgentDefault": {
1098
- "description": "A default-agent setting: which agent config serves sessions started\nwithout an explicit config, for the whole account or for one repository.",
1112
+ "AgentDefaults": {
1113
+ "description": "Which agent config serves sessions started without an explicit config:\none account-wide rung, plus a rung per repository.\n\nValues are config ids \u2014 stable across renames, unlike the agent's name.\nA repo rung whose repository this installation can no longer see is absent\nfrom `repositories`; its row is left in place, so re-installing the repo\nbrings the rung back.",
1099
1114
  "properties": {
1100
- "broken": {
1101
- "anyOf": [
1102
- {
1103
- "enum": [
1104
- "config_deleted",
1105
- "config_disabled",
1106
- "config_pending_pr",
1107
- "repo_inaccessible"
1108
- ],
1109
- "type": "string"
1110
- },
1111
- {
1112
- "type": "null"
1113
- }
1114
- ],
1115
- "description": "Why this default cannot serve sessions, or null when it is healthy.",
1116
- "title": "Broken"
1117
- },
1118
- "config_id": {
1119
- "description": "The agent config this default points at.",
1120
- "title": "Config Id",
1121
- "type": "string"
1122
- },
1123
- "config_name": {
1124
- "anyOf": [
1125
- {
1126
- "type": "string"
1127
- },
1128
- {
1129
- "type": "null"
1130
- }
1131
- ],
1132
- "description": "The pointed-at config's name; null when the config no longer exists.",
1133
- "title": "Config Name"
1134
- },
1135
- "id": {
1136
- "description": "The default's unique identifier.",
1137
- "title": "Id",
1138
- "type": "string"
1139
- },
1140
- "repository": {
1115
+ "account": {
1141
1116
  "anyOf": [
1142
1117
  {
1143
1118
  "type": "string"
@@ -1146,54 +1121,20 @@
1146
1121
  "type": "null"
1147
1122
  }
1148
1123
  ],
1149
- "description": "The repository this default applies to, as \"owner/name\", or null for the account-wide default.",
1150
- "title": "Repository"
1124
+ "description": "Config id serving sessions with no repository context, or null when no account default is set.",
1125
+ "title": "Account"
1151
1126
  },
1152
- "updated_at": {
1153
- "description": "When the default was last changed.",
1154
- "format": "date-time",
1155
- "title": "Updated At",
1156
- "type": "string"
1157
- }
1158
- },
1159
- "required": [
1160
- "id",
1161
- "config_id",
1162
- "updated_at"
1163
- ],
1164
- "title": "AgentDefault",
1165
- "type": "object"
1166
- },
1167
- "AgentDefaultResponse": {
1168
- "description": "One default-agent setting.",
1169
- "properties": {
1170
- "default": {
1171
- "$ref": "#/components/schemas/AgentDefault",
1172
- "description": "The default-agent setting."
1173
- }
1174
- },
1175
- "required": [
1176
- "default"
1177
- ],
1178
- "title": "AgentDefaultResponse",
1179
- "type": "object"
1180
- },
1181
- "AgentDefaultsListResponse": {
1182
- "description": "The account's default-agent settings.",
1183
- "properties": {
1184
- "defaults": {
1185
- "description": "The configured defaults.",
1186
- "items": {
1187
- "$ref": "#/components/schemas/AgentDefault"
1127
+ "repositories": {
1128
+ "additionalProperties": {
1129
+ "type": "string"
1188
1130
  },
1189
- "title": "Defaults",
1190
- "type": "array"
1131
+ "default": {},
1132
+ "description": "Config id per repository, keyed \"owner/name\". A repository with no default set is absent.",
1133
+ "title": "Repositories",
1134
+ "type": "object"
1191
1135
  }
1192
1136
  },
1193
- "required": [
1194
- "defaults"
1195
- ],
1196
- "title": "AgentDefaultsListResponse",
1137
+ "title": "AgentDefaults",
1197
1138
  "type": "object"
1198
1139
  },
1199
1140
  "AgentTemplate": {
@@ -2283,16 +2224,6 @@
2283
2224
  "title": "CreateReviewRequest",
2284
2225
  "type": "object"
2285
2226
  },
2286
- "DefaultResolution": {
2287
- "description": "How a session that arrived with no explicit config source resolved its\nconfig (documents/eng/DEFAULT_CONFIGS.md \u00a74). Persisted on the session so\naudit and clients can say \"ran under X (repo default)\". A session started\nwith an explicit config/config_id/template_id never enters resolution and\nstores None.",
2288
- "enum": [
2289
- "repo_default",
2290
- "account_default",
2291
- "none"
2292
- ],
2293
- "title": "DefaultResolution",
2294
- "type": "string"
2295
- },
2296
2227
  "DurationPercentiles": {
2297
2228
  "description": "Percentiles of a duration distribution, in hours. p0 = fastest,\np100 = slowest; the spread shows how merge latency varies.",
2298
2229
  "properties": {
@@ -2417,7 +2348,7 @@
2417
2348
  "ErrorInfo": {
2418
2349
  "properties": {
2419
2350
  "code": {
2420
- "description": "Stable machine-readable error code. Open vocabulary \u2014 handle unknown codes by HTTP status. Known values: account_blocked, conflict, default_config_broken, failed_dependency, file_quota_exceeded, forbidden, internal_error, invalid_request, not_found, rate_limited, review_in_flight, session_closed, session_ephemeral_trigger, session_finished, session_harness_single_turn, session_laptop, session_mention_surface, session_non_interactive, unauthorized, unavailable.",
2351
+ "description": "Stable machine-readable error code. Open vocabulary \u2014 handle unknown codes by HTTP status. Known values: account_blocked, conflict, contact_email_required, failed_dependency, file_quota_exceeded, forbidden, internal_error, invalid_request, not_found, rate_limited, review_in_flight, session_closed, session_ephemeral_trigger, session_finished, session_harness_single_turn, session_mention_surface, session_non_interactive, unauthorized, unavailable.",
2421
2352
  "title": "Code",
2422
2353
  "type": "string"
2423
2354
  },
@@ -3626,45 +3557,6 @@
3626
3557
  "title": "HTTPValidationError",
3627
3558
  "type": "object"
3628
3559
  },
3629
- "HandoffAgentSessionParams": {
3630
- "description": "Laptop-to-cloud handoff parameters (`agent session handoff`): start a\nfresh session on the built-in handoff config, chained to the handed-off\nsession. Mutually exclusive with config_id / config / template_id \u2014 the\nhandoff config is platform-owned.",
3631
- "properties": {
3632
- "parent_session_id": {
3633
- "description": "The session being handed off (usually a laptop-synced session).",
3634
- "title": "Parent Session Id",
3635
- "type": "string"
3636
- },
3637
- "ref": {
3638
- "anyOf": [
3639
- {
3640
- "type": "string"
3641
- },
3642
- {
3643
- "type": "null"
3644
- }
3645
- ],
3646
- "description": "Where the WIP commit was pushed (refs/ellipsis/handoff/<short>); recorded as a metadata breadcrumb.",
3647
- "title": "Ref"
3648
- },
3649
- "repo": {
3650
- "description": "\"owner/name\" (or a bare name under the caller's account).",
3651
- "title": "Repo",
3652
- "type": "string"
3653
- },
3654
- "sha": {
3655
- "description": "The work-in-progress commit the CLI pushed (a commit of the dirty working tree) \u2014 becomes the sandbox checkout target.",
3656
- "title": "Sha",
3657
- "type": "string"
3658
- }
3659
- },
3660
- "required": [
3661
- "parent_session_id",
3662
- "repo",
3663
- "sha"
3664
- ],
3665
- "title": "HandoffAgentSessionParams",
3666
- "type": "object"
3667
- },
3668
3560
  "Harness": {
3669
3561
  "enum": [
3670
3562
  "claude_code",
@@ -4151,7 +4043,7 @@
4151
4043
  "type": "object"
4152
4044
  },
4153
4045
  "ModelManufacturer": {
4154
- "description": "Who BUILT a model. Never who serves it.\n\nServing path is irrelevant here. Anthropic built every Claude model, so all of\nthem are ANTHROPIC whether we reach them through the first-party Anthropic API\nor through Bedrock -- a choice made per request by the llm_providers chain, so\nit is not even a fixed property of the model. Likewise the `gpt-5.6-*` rows\nare OPENAI (OpenAI's models, served by AWS via bedrock-mantle), and GLM is ZAI\n(Z.ai's model, served by Concentrate).\n\nSo this is deliberately NOT derived from `EgressRoute.provider`: routing is an\ninfrastructure fact that changes when we move a model between providers, while\nthe manufacturer is a property of the model itself and never changes.\n\nThe frontend renders a vendor logo per model, which is why it needs the maker.\nKeying that UI off the egress provider would put an AWS logo on a GPT model and\nan OpenAI logo on GLM.",
4046
+ "description": "Who BUILT a model. Never who serves it.\n\nServing path is irrelevant here. Anthropic built every Claude model, so all of\nthem are ANTHROPIC whether we reach them through the first-party Anthropic API\nor through Bedrock -- a choice made per request by the llm_providers chain, so\nit is not even a fixed property of the model. Likewise the `gpt-5.6-*` rows\nare OPENAI (OpenAI's models, served by AWS via bedrock-mantle), and GLM is ZAI\n(Z.ai's model, served by DeepInfra via OpenRouter).\n\nSo this is deliberately NOT derived from `EgressRoute.provider`: routing is an\ninfrastructure fact that changes when we move a model between providers, while\nthe manufacturer is a property of the model itself and never changes.\n\nThe frontend renders a vendor logo per model, which is why it needs the maker.\nKeying that UI off the egress provider would put an AWS logo on a GPT model and\nan OpenAI logo on GLM.",
4155
4047
  "enum": [
4156
4048
  "anthropic",
4157
4049
  "openai",
@@ -4265,10 +4157,9 @@
4265
4157
  "type": "string"
4266
4158
  },
4267
4159
  "ParentKind": {
4268
- "description": "How a session relates to its predecessor (parent_agent_session_id) \u2014\nthe ONE \"preceded-by\" chain for every predecessor relationship. Routing\nreads this when the distinction matters.\n\nCONTINUATION \u2014 a follow-up in the same conversation surface (e.g. a Slack\nthread reply spawning a fresh session on the same thread).\nHANDOFF \u2014 a session started to take over work from another surface (e.g.\nlaptop \u2192 cloud handoff; later phase).\nRESUME \u2014 a conversation re-hosted on a new box after its sandbox was torn\ndown (interactive platform; later phase).",
4160
+ "description": "How a session relates to its predecessor (parent_agent_session_id) \u2014\nthe ONE \"preceded-by\" chain for every predecessor relationship. Routing\nreads this when the distinction matters.\n\nCONTINUATION \u2014 a follow-up in the same conversation surface (e.g. a Slack\nthread reply spawning a fresh session on the same thread).\nRESUME \u2014 a conversation re-hosted on a new box after its sandbox was torn\ndown (interactive platform; later phase).",
4269
4161
  "enum": [
4270
4162
  "continuation",
4271
- "handoff",
4272
4163
  "resume"
4273
4164
  ],
4274
4165
  "title": "ParentKind",
@@ -4308,8 +4199,7 @@
4308
4199
  "ephemeral_trigger",
4309
4200
  "non_interactive",
4310
4201
  "harness_single_turn",
4311
- "closed",
4312
- "laptop"
4202
+ "closed"
4313
4203
  ],
4314
4204
  "title": "PromptBlockedReason",
4315
4205
  "type": "string"
@@ -5106,7 +4996,7 @@
5106
4996
  "type": "null"
5107
4997
  }
5108
4998
  ],
5109
- "description": "Optional partial-config override merged onto the chosen config and re-validated \u2014 e.g. {\"claude\": {\"model\": \"claude-opus-4-8\"}} to replay the run on a different model, or {\"limits\": {\"run\": 5.0}} to raise its budget. Mutually exclusive with config_override_yaml.",
4999
+ "description": "Optional partial-config override merged onto the chosen config and re-validated \u2014 e.g. {\"claude\": {\"model\": \"claude-opus-4-8\"}} to replay the run on a different model, or {\"budget\": {\"session\": 5.0}} to raise its budget. Mutually exclusive with config_override_yaml.",
5110
5000
  "title": "Config Override"
5111
5001
  },
5112
5002
  "config_override_yaml": {
@@ -6739,6 +6629,10 @@
6739
6629
  "Session": {
6740
6630
  "description": "An agent session: one conversation with an agent, from trigger to\nterminal state. Returned by `GET /v1/sessions/{id}` and carried by the\nsession stream's `session`/`snapshot` frames \u2014 REST and stream never\ndisagree about what a session looks like.",
6741
6631
  "properties": {
6632
+ "agent": {
6633
+ "$ref": "#/components/schemas/SessionAgent",
6634
+ "description": "The agent that ran: the config the session executed, where that config came from, and any override merged into it."
6635
+ },
6742
6636
  "attribution": {
6743
6637
  "$ref": "#/components/schemas/SessionAttribution",
6744
6638
  "description": "The principal this session is attributed to."
@@ -6747,18 +6641,6 @@
6747
6641
  "$ref": "#/components/schemas/SessionBudget",
6748
6642
  "description": "The spend budget enforced for this session."
6749
6643
  },
6750
- "config_id": {
6751
- "anyOf": [
6752
- {
6753
- "type": "string"
6754
- },
6755
- {
6756
- "type": "null"
6757
- }
6758
- ],
6759
- "description": "Identifier of the saved agent config the session ran on, if any.",
6760
- "title": "Config Id"
6761
- },
6762
6644
  "context_repository": {
6763
6645
  "anyOf": [
6764
6646
  {
@@ -6781,17 +6663,6 @@
6781
6663
  "title": "Created At",
6782
6664
  "type": "string"
6783
6665
  },
6784
- "default_resolution": {
6785
- "anyOf": [
6786
- {
6787
- "$ref": "#/components/schemas/DefaultResolution"
6788
- },
6789
- {
6790
- "type": "null"
6791
- }
6792
- ],
6793
- "description": "How the session's config was resolved from the account's defaults, when no explicit config was given."
6794
- },
6795
6666
  "exit_status": {
6796
6667
  "anyOf": [
6797
6668
  {
@@ -6838,18 +6709,6 @@
6838
6709
  "description": "When the session last received a message.",
6839
6710
  "title": "Last Message At"
6840
6711
  },
6841
- "live_summary": {
6842
- "anyOf": [
6843
- {
6844
- "type": "string"
6845
- },
6846
- {
6847
- "type": "null"
6848
- }
6849
- ],
6850
- "description": "A live summary of the session's progress while it runs.",
6851
- "title": "Live Summary"
6852
- },
6853
6712
  "metadata": {
6854
6713
  "additionalProperties": {
6855
6714
  "type": "string"
@@ -6907,7 +6766,7 @@
6907
6766
  },
6908
6767
  "source": {
6909
6768
  "$ref": "#/components/schemas/SessionSource",
6910
- "description": "Where the session came from (e.g. react, manual, api, cli, mention, cron, laptop)."
6769
+ "description": "Where the session came from (e.g. react, manual, api, cli, mention, cron)."
6911
6770
  },
6912
6771
  "status": {
6913
6772
  "$ref": "#/components/schemas/SessionStatus",
@@ -6929,6 +6788,17 @@
6929
6788
  "$ref": "#/components/schemas/SessionStopped",
6930
6789
  "description": "The stop request, if the session was stopped."
6931
6790
  },
6791
+ "summary": {
6792
+ "anyOf": [
6793
+ {
6794
+ "$ref": "#/components/schemas/SessionSummary"
6795
+ },
6796
+ {
6797
+ "type": "null"
6798
+ }
6799
+ ],
6800
+ "description": "The latest live summary of the session's progress while it runs, and when it was generated."
6801
+ },
6932
6802
  "surface": {
6933
6803
  "anyOf": [
6934
6804
  {
@@ -6938,7 +6808,7 @@
6938
6808
  "type": "null"
6939
6809
  }
6940
6810
  ],
6941
- "description": "The public status projection; null for laptop-synced sessions."
6811
+ "description": "The public status projection; null on list/search responses, which do not derive it."
6942
6812
  },
6943
6813
  "tokens": {
6944
6814
  "$ref": "#/components/schemas/SessionTokens",
@@ -6958,11 +6828,56 @@
6958
6828
  "harness",
6959
6829
  "source",
6960
6830
  "status",
6961
- "prompting"
6831
+ "prompting",
6832
+ "agent"
6962
6833
  ],
6963
6834
  "title": "Session",
6964
6835
  "type": "object"
6965
6836
  },
6837
+ "SessionAgent": {
6838
+ "description": "The agent this session ran: the config it actually executed, where that\nconfig came from, and the diff that was merged in \u2014 the same\neffective-value-plus-provenance shape `SessionBudget` uses.\n\n`config` is the snapshot frozen when the session was created; `config_id`\npoints at the saved config as it exists NOW. They diverge legitimately: a\nYAML edit after the session started, or any `override`, leaves the pointer\ndescribing something the session never ran.",
6839
+ "properties": {
6840
+ "config": {
6841
+ "$ref": "#/components/schemas/AgentConfig",
6842
+ "description": "The agent config the session actually ran, frozen when the session was created."
6843
+ },
6844
+ "config_id": {
6845
+ "anyOf": [
6846
+ {
6847
+ "type": "string"
6848
+ },
6849
+ {
6850
+ "type": "null"
6851
+ }
6852
+ ],
6853
+ "description": "Identifier of the saved config this session's snapshot was taken from. Null for inline, platform-default, and built-in configs. Points at the config as it exists now, which may have changed since.",
6854
+ "title": "Config Id"
6855
+ },
6856
+ "override": {
6857
+ "anyOf": [
6858
+ {
6859
+ "additionalProperties": true,
6860
+ "type": "object"
6861
+ },
6862
+ {
6863
+ "type": "null"
6864
+ }
6865
+ ],
6866
+ "description": "The partial-config override merged into `config` for this session, or null when the config ran unmodified. `config` is the merged result; this is the diff.",
6867
+ "title": "Override"
6868
+ },
6869
+ "source": {
6870
+ "$ref": "#/components/schemas/AgentConfigSource",
6871
+ "description": "How this session's config was chosen."
6872
+ }
6873
+ },
6874
+ "required": [
6875
+ "config",
6876
+ "source"
6877
+ ],
6878
+ "title": "SessionAgent",
6879
+ "type": "object"
6880
+ },
6966
6881
  "SessionAttribution": {
6967
6882
  "description": "The principal a session is attributed to: what kind, its id, and \u2014 when\nthe kind is a GitHub user \u2014 the resolved display snippet.",
6968
6883
  "properties": {
@@ -7193,6 +7108,8 @@
7193
7108
  "missing_repo_access",
7194
7109
  "missing_token_permissions",
7195
7110
  "missing_sandbox_variables",
7111
+ "blocked",
7112
+ "contact_email_required",
7196
7113
  "cancelled",
7197
7114
  "interrupted",
7198
7115
  "error",
@@ -7838,8 +7755,7 @@
7838
7755
  "api",
7839
7756
  "cli",
7840
7757
  "mention",
7841
- "cron",
7842
- "laptop"
7758
+ "cron"
7843
7759
  ],
7844
7760
  "title": "SessionSource",
7845
7761
  "type": "string"
@@ -7911,8 +7827,36 @@
7911
7827
  "title": "SessionStopped",
7912
7828
  "type": "object"
7913
7829
  },
7830
+ "SessionSummary": {
7831
+ "description": "A live one-line summary of what the session is working on, refreshed\nevery few steps while it runs.",
7832
+ "properties": {
7833
+ "created_at": {
7834
+ "anyOf": [
7835
+ {
7836
+ "format": "date-time",
7837
+ "type": "string"
7838
+ },
7839
+ {
7840
+ "type": "null"
7841
+ }
7842
+ ],
7843
+ "description": "When this summary line was generated. Null on summaries written before generation time was tracked.",
7844
+ "title": "Created At"
7845
+ },
7846
+ "description": {
7847
+ "description": "One-line description of what the session is working on.",
7848
+ "title": "Description",
7849
+ "type": "string"
7850
+ }
7851
+ },
7852
+ "required": [
7853
+ "description"
7854
+ ],
7855
+ "title": "SessionSummary",
7856
+ "type": "object"
7857
+ },
7914
7858
  "SessionSurface": {
7915
- "description": "The three fields we expose. All `None` for an un-keyed (laptop) session.\n\n`use_enum_values=True` (from CustomBaseModel) stores the members as their\nstring values, so this serializes to `{\"session\": \"alive\", \"run\": \"waiting\",\n\"status\": \"waiting\"}` \u2014 a plain object, not enum names.",
7859
+ "description": "The three fields we expose.\n\n`use_enum_values=True` (from CustomBaseModel) stores the members as their\nstring values, so this serializes to `{\"session\": \"alive\", \"run\": \"waiting\",\n\"status\": \"waiting\"}` \u2014 a plain object, not enum names.",
7916
7860
  "properties": {
7917
7861
  "run": {
7918
7862
  "anyOf": [
@@ -8287,7 +8231,7 @@
8287
8231
  "type": "null"
8288
8232
  }
8289
8233
  ],
8290
- "description": "Optional partial-config override merged onto the chosen config and re-validated (e.g. {\"limits\": {\"run\": 5.0}} to raise just this run's budget). Merged onto config_id/template_id or the platform default; with an inline config, set fields directly instead. Mutually exclusive with config_override_yaml.",
8234
+ "description": "Optional partial-config override merged onto the chosen config and re-validated (e.g. {\"budget\": {\"session\": 5.0}} to raise just this session's budget). Merged onto config_id/template_id or the platform default; with an inline config, set fields directly instead. Mutually exclusive with config_override_yaml.",
8291
8235
  "title": "Config Override"
8292
8236
  },
8293
8237
  "config_override_yaml": {
@@ -8308,20 +8252,9 @@
8308
8252
  "title": "Force Rebuild",
8309
8253
  "type": "boolean"
8310
8254
  },
8311
- "handoff": {
8312
- "anyOf": [
8313
- {
8314
- "$ref": "#/components/schemas/HandoffAgentSessionParams"
8315
- },
8316
- {
8317
- "type": "null"
8318
- }
8319
- ],
8320
- "description": "Laptop-to-cloud handoff parameters. When set, the built-in handoff config is used and config_id/config/template_id must be omitted."
8321
- },
8322
8255
  "idle_start": {
8323
8256
  "default": false,
8324
- "description": "Start the session with no initial message: the sandbox spins up, the agent starts idle at the prompt, and the first message sent to the session opens turn 0. Mutually exclusive with prompt and handoff. Ignored when the resolved config is not interactive (an ephemeral run keeps its kickoff \u2014 it can never receive a message).",
8257
+ "description": "Start the session with no initial message: the sandbox spins up, the agent starts idle at the prompt, and the first message sent to the session opens turn 0. Mutually exclusive with prompt. Ignored when the resolved config is not interactive (an ephemeral run keeps its kickoff \u2014 it can never receive a message).",
8325
8258
  "title": "Idle Start",
8326
8259
  "type": "boolean"
8327
8260
  },
@@ -8356,7 +8289,7 @@
8356
8289
  "type": "null"
8357
8290
  }
8358
8291
  ],
8359
- "description": "Per-run instructions appended to the initial query after the config's shared system prompt. Applies regardless of which config source is used. For a handoff, this is the developer's handoff note.",
8292
+ "description": "Per-run instructions appended to the initial query after the config's shared system prompt. Applies regardless of which config source is used.",
8360
8293
  "title": "Prompt"
8361
8294
  },
8362
8295
  "repository": {
@@ -8387,43 +8320,6 @@
8387
8320
  "title": "StartAgentSessionRequest",
8388
8321
  "type": "object"
8389
8322
  },
8390
- "StartAgentSessionResponse": {
8391
- "description": "The started session, plus explicit fields describing how its config\nwas resolved.",
8392
- "properties": {
8393
- "resolution_source": {
8394
- "anyOf": [
8395
- {
8396
- "$ref": "#/components/schemas/DefaultResolution"
8397
- },
8398
- {
8399
- "type": "null"
8400
- }
8401
- ],
8402
- "description": "Which rung of the defaults ladder chose the config (repo_default | account_default | none). Null when an explicit config/config_id/template_id (or a handoff) bypassed resolution."
8403
- },
8404
- "resolved_config_name": {
8405
- "anyOf": [
8406
- {
8407
- "type": "string"
8408
- },
8409
- {
8410
- "type": "null"
8411
- }
8412
- ],
8413
- "description": "The name of the config the session runs under.",
8414
- "title": "Resolved Config Name"
8415
- },
8416
- "session": {
8417
- "$ref": "#/components/schemas/Session",
8418
- "description": "The started session."
8419
- }
8420
- },
8421
- "required": [
8422
- "session"
8423
- ],
8424
- "title": "StartAgentSessionResponse",
8425
- "type": "object"
8426
- },
8427
8323
  "StartCliAuthResponse": {
8428
8324
  "description": "A freshly minted device-code flow: show the user code (or open the\ncomplete URI) and poll with the device code.",
8429
8325
  "properties": {
@@ -8469,106 +8365,6 @@
8469
8365
  "title": "StartCliAuthResponse",
8470
8366
  "type": "object"
8471
8367
  },
8472
- "SyncAgentSessionRequest": {
8473
- "description": "One hook-driven transcript sync from a developer laptop. The CLI reads\nthe live on-disk Claude Code transcript, redacts it client-side, gzips\nit, and POSTs it here \u2014 once per turn and at termination.",
8474
- "properties": {
8475
- "cc_session_id": {
8476
- "description": "The Claude Code session uuid (from the hook payload's session_id).",
8477
- "title": "Cc Session Id",
8478
- "type": "string"
8479
- },
8480
- "cwd": {
8481
- "anyOf": [
8482
- {
8483
- "type": "string"
8484
- },
8485
- {
8486
- "type": "null"
8487
- }
8488
- ],
8489
- "description": "The laptop working directory.",
8490
- "title": "Cwd"
8491
- },
8492
- "git_branch": {
8493
- "anyOf": [
8494
- {
8495
- "type": "string"
8496
- },
8497
- {
8498
- "type": "null"
8499
- }
8500
- ],
8501
- "description": "The checked-out git branch.",
8502
- "title": "Git Branch"
8503
- },
8504
- "reason": {
8505
- "default": "stop",
8506
- "description": "Which hook fired the sync: \"stop\" (mid-session, once per turn) or \"session_end\" (the Claude Code process terminated).",
8507
- "enum": [
8508
- "stop",
8509
- "session_end"
8510
- ],
8511
- "title": "Reason",
8512
- "type": "string"
8513
- },
8514
- "repo": {
8515
- "anyOf": [
8516
- {
8517
- "type": "string"
8518
- },
8519
- {
8520
- "type": "null"
8521
- }
8522
- ],
8523
- "description": "The enrolled repository (\"owner/name\", from the working directory's git remote).",
8524
- "title": "Repo"
8525
- },
8526
- "transcript_gzip_b64": {
8527
- "description": "The redacted transcript JSONL, gzipped then base64-encoded.",
8528
- "title": "Transcript Gzip B64",
8529
- "type": "string"
8530
- }
8531
- },
8532
- "required": [
8533
- "cc_session_id",
8534
- "transcript_gzip_b64"
8535
- ],
8536
- "title": "SyncAgentSessionRequest",
8537
- "type": "object"
8538
- },
8539
- "SyncAgentSessionResponse": {
8540
- "description": "The outcome of a laptop transcript sync.",
8541
- "properties": {
8542
- "accepted": {
8543
- "description": "False when the stored snapshot was already at least as long (longest snapshot wins) \u2014 acknowledged, nothing written.",
8544
- "title": "Accepted",
8545
- "type": "boolean"
8546
- },
8547
- "event_count": {
8548
- "description": "The number of transcript events in the stored snapshot.",
8549
- "title": "Event Count",
8550
- "type": "integer"
8551
- },
8552
- "process_id": {
8553
- "description": "The synced Claude Code process id.",
8554
- "title": "Process Id",
8555
- "type": "string"
8556
- },
8557
- "session_id": {
8558
- "description": "The platform session the sync mapped to.",
8559
- "title": "Session Id",
8560
- "type": "string"
8561
- }
8562
- },
8563
- "required": [
8564
- "session_id",
8565
- "process_id",
8566
- "event_count",
8567
- "accepted"
8568
- ],
8569
- "title": "SyncAgentSessionResponse",
8570
- "type": "object"
8571
- },
8572
8368
  "TokensInfo": {
8573
8369
  "additionalProperties": false,
8574
8370
  "description": "Token/cost usage, per record (one API call's counts, aggregate fields at\ntheir zero defaults) or aggregated per execution/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 lives on\n`execution.model_usage` (CC's modelUsage, verbatim).",
@@ -9704,7 +9500,7 @@
9704
9500
  "x-ellipsis-sdk-method": "agents.defaults.delete"
9705
9501
  },
9706
9502
  "get": {
9707
- "description": "List default agent configs.\n\nThe account default and any per-repository defaults.\n\nDefaults are addressed by rung: the account rung is repository\nomitted, a repo rung is \"owner/name\" \u2014 never by row id.",
9503
+ "description": "Get the default agent configs.\n\nThe account-wide default and the per-repository defaults, as config\nids. Repo rungs are keyed \"owner/name\"; a repository this\ninstallation can no longer see is omitted.",
9708
9504
  "operationId": "list_agent_defaults",
9709
9505
  "parameters": [
9710
9506
  {
@@ -9729,7 +9525,7 @@
9729
9525
  "content": {
9730
9526
  "application/json": {
9731
9527
  "schema": {
9732
- "$ref": "#/components/schemas/AgentDefaultsListResponse"
9528
+ "$ref": "#/components/schemas/AgentDefaults"
9733
9529
  }
9734
9530
  }
9735
9531
  },
@@ -9778,7 +9574,7 @@
9778
9574
  "x-ellipsis-sdk-method": "agents.defaults.list"
9779
9575
  },
9780
9576
  "put": {
9781
- "description": "Set a default agent config.\n\nAddressed by rung: the account rung (repository omitted) or a\nrepository rung (\"owner/name\"); the config by id or by the\nagent's name.\n\nRefused for sandbox tokens (potentially prompt-injected code\nmust not repoint the account's ambient default); an unknown or\nforeign repository is a 404.",
9577
+ "description": "Set a default agent config.\n\nAddressed by rung: the account rung (repository omitted) or a\nrepository rung (\"owner/name\"); the config by id or by the\nagent's name. Returns the full resulting ladder.\n\nRefused for sandbox tokens (potentially prompt-injected code\nmust not repoint the account's ambient default); an unknown or\nforeign repository is a 404.",
9782
9578
  "operationId": "put_agent_default",
9783
9579
  "parameters": [
9784
9580
  {
@@ -9813,7 +9609,7 @@
9813
9609
  "content": {
9814
9610
  "application/json": {
9815
9611
  "schema": {
9816
- "$ref": "#/components/schemas/AgentDefaultResponse"
9612
+ "$ref": "#/components/schemas/AgentDefaults"
9817
9613
  }
9818
9614
  }
9819
9615
  },
@@ -13620,7 +13416,7 @@
13620
13416
  }
13621
13417
  },
13622
13418
  {
13623
- "description": "\"owner/name\" (exact) or a bare repo name, matched the same way as on GET /v1/sessions/search. Sessions whose repository is named only inside their agent config \u2014 dashboard starts, cron, handoffs \u2014 do not match.",
13419
+ "description": "\"owner/name\" (exact) or a bare repo name, matched the same way as on GET /v1/sessions/search. Sessions whose repository is named only inside their agent config \u2014 dashboard starts, cron \u2014 do not match.",
13624
13420
  "in": "query",
13625
13421
  "name": "repo",
13626
13422
  "required": false,
@@ -13633,7 +13429,7 @@
13633
13429
  "type": "null"
13634
13430
  }
13635
13431
  ],
13636
- "description": "\"owner/name\" (exact) or a bare repo name, matched the same way as on GET /v1/sessions/search. Sessions whose repository is named only inside their agent config \u2014 dashboard starts, cron, handoffs \u2014 do not match.",
13432
+ "description": "\"owner/name\" (exact) or a bare repo name, matched the same way as on GET /v1/sessions/search. Sessions whose repository is named only inside their agent config \u2014 dashboard starts, cron \u2014 do not match.",
13637
13433
  "title": "Repo"
13638
13434
  }
13639
13435
  },
@@ -13720,7 +13516,7 @@
13720
13516
  "x-ellipsis-sdk-method": "sessions.list"
13721
13517
  },
13722
13518
  "post": {
13723
- "description": "Start a cloud agent session.\n\nProvide at most one of config_id (an id or an agent name),\nconfig, or\ntemplate_id; with none, the account's default-config ladder\nresolves the config. 400 when idle_start is combined with\nprompt, input, or handoff, or when a handoff is combined with\nany config source or override. 422 when the agent declares an\ninput schema and the request's input is absent or invalid.",
13519
+ "description": "Start a cloud agent session.\n\nProvide at most one of config_id (an id or an agent name),\nconfig, or\ntemplate_id; with none, the account's default-config ladder\nresolves the config. 400 when idle_start is combined with\nprompt or input. 422 when the agent declares an\ninput schema and the request's input is absent or invalid.",
13724
13520
  "operationId": "start_agent_session",
13725
13521
  "parameters": [
13726
13522
  {
@@ -13755,7 +13551,7 @@
13755
13551
  "content": {
13756
13552
  "application/json": {
13757
13553
  "schema": {
13758
- "$ref": "#/components/schemas/StartAgentSessionResponse"
13554
+ "$ref": "#/components/schemas/SessionResponse"
13759
13555
  }
13760
13556
  }
13761
13557
  },
@@ -13769,7 +13565,7 @@
13769
13565
  }
13770
13566
  }
13771
13567
  },
13772
- "description": "The request combines incompatible fields (multiple config sources, idle_start with prompt/input/handoff, a handoff with a config source, or both override forms), or the config override / handoff repo/sha is invalid."
13568
+ "description": "The request combines incompatible fields (multiple config sources, idle_start with prompt/input, or both override forms), or the config override is invalid."
13773
13569
  },
13774
13570
  "401": {
13775
13571
  "content": {
@@ -13799,7 +13595,7 @@
13799
13595
  }
13800
13596
  }
13801
13597
  },
13802
- "description": "The named agent, template, or handoff parent session does not exist in your account."
13598
+ "description": "The named agent or template does not exist in your account."
13803
13599
  },
13804
13600
  "409": {
13805
13601
  "content": {
@@ -14101,112 +13897,6 @@
14101
13897
  "x-ellipsis-sdk-method": "sessions.search"
14102
13898
  }
14103
13899
  },
14104
- "/v1/sessions/sync": {
14105
- "post": {
14106
- "description": "Sync a local Claude Code session to Ellipsis.\n\nRequires a user token (device-flow `agent login`): the user is\npart of the sync's idempotency key, so API keys and sandbox\ntokens are rejected with a 403 rather than silently attributed.",
14107
- "operationId": "sync_agent_session",
14108
- "parameters": [
14109
- {
14110
- "in": "header",
14111
- "name": "user-agent",
14112
- "required": false,
14113
- "schema": {
14114
- "anyOf": [
14115
- {
14116
- "type": "string"
14117
- },
14118
- {
14119
- "type": "null"
14120
- }
14121
- ],
14122
- "title": "User-Agent"
14123
- }
14124
- }
14125
- ],
14126
- "requestBody": {
14127
- "content": {
14128
- "application/json": {
14129
- "schema": {
14130
- "$ref": "#/components/schemas/SyncAgentSessionRequest"
14131
- }
14132
- }
14133
- },
14134
- "required": true
14135
- },
14136
- "responses": {
14137
- "200": {
14138
- "content": {
14139
- "application/json": {
14140
- "schema": {
14141
- "$ref": "#/components/schemas/SyncAgentSessionResponse"
14142
- }
14143
- }
14144
- },
14145
- "description": "Successful Response"
14146
- },
14147
- "400": {
14148
- "content": {
14149
- "application/json": {
14150
- "schema": {
14151
- "$ref": "#/components/schemas/ErrorResponse"
14152
- }
14153
- }
14154
- },
14155
- "description": "The transcript payload is empty, or is not valid base64/gzip."
14156
- },
14157
- "401": {
14158
- "content": {
14159
- "application/json": {
14160
- "schema": {
14161
- "$ref": "#/components/schemas/ErrorResponse"
14162
- }
14163
- }
14164
- },
14165
- "description": "The bearer token is missing, invalid, or revoked."
14166
- },
14167
- "403": {
14168
- "content": {
14169
- "application/json": {
14170
- "schema": {
14171
- "$ref": "#/components/schemas/ErrorResponse"
14172
- }
14173
- }
14174
- },
14175
- "description": "The credential may not perform this action, or the account is blocked."
14176
- },
14177
- "413": {
14178
- "content": {
14179
- "application/json": {
14180
- "schema": {
14181
- "$ref": "#/components/schemas/ErrorResponse"
14182
- }
14183
- }
14184
- },
14185
- "description": "The transcript exceeds the size limit (compressed or decompressed)."
14186
- },
14187
- "422": {
14188
- "content": {
14189
- "application/json": {
14190
- "schema": {
14191
- "$ref": "#/components/schemas/HTTPValidationError"
14192
- }
14193
- }
14194
- },
14195
- "description": "Validation Error"
14196
- }
14197
- },
14198
- "security": [
14199
- {
14200
- "HTTPBearer": []
14201
- }
14202
- ],
14203
- "summary": "Sync Agent Session",
14204
- "tags": [
14205
- "v1"
14206
- ],
14207
- "x-ellipsis-sdk-method": "sessions.sync"
14208
- }
14209
- },
14210
13900
  "/v1/sessions/{session_id}": {
14211
13901
  "get": {
14212
13902
  "description": "Return one session.\n\nThe public wire shape \u2014 the same shape the stream's session\nframes carry, with attributed_user and stopped_by_user resolved\nat read time.\n\nThe heavy near-static blobs (config snapshot, input/output)\nlive on the detail endpoints, not here.",
@@ -14592,7 +14282,7 @@
14592
14282
  }
14593
14283
  }
14594
14284
  },
14595
- "description": "The session cannot be messaged: it is closed, non-interactive, laptop-synced, or steered from its triggering surface (mention/react/cron)."
14285
+ "description": "The session cannot be messaged: it is closed, non-interactive, or steered from its triggering surface (mention/react/cron)."
14596
14286
  },
14597
14287
  "422": {
14598
14288
  "content": {
@@ -14714,7 +14404,7 @@
14714
14404
  },
14715
14405
  "/v1/sessions/{session_id}/records": {
14716
14406
  "get": {
14717
- "description": "Return the session's stored transcript records, oldest first.\n\nPagination is opt-in (cursor/limit); a bare call returns the\nfull retained transcript. Available to sandbox tokens too: an\nagent answering \"did X look into Y?\" needs to read the session\nit found via /sessions/search, and any org member sees the same\ntranscript in the dashboard (laptop transcripts are redacted\nclient-side before they are ever uploaded).",
14407
+ "description": "Return the session's stored transcript records, oldest first.\n\nPagination is opt-in (cursor/limit); a bare call returns the\nfull retained transcript. Available to sandbox tokens too: an\nagent answering \"did X look into Y?\" needs to read the session\nit found via /sessions/search, and any org member sees the same\ntranscript in the dashboard.",
14718
14408
  "operationId": "get_agent_session_records",
14719
14409
  "parameters": [
14720
14410
  {
@@ -14901,7 +14591,7 @@
14901
14591
  }
14902
14592
  }
14903
14593
  },
14904
- "description": "The session is a laptop session (not replayable), the named config does not exist, or the config override is invalid."
14594
+ "description": "The named config does not exist, or the config override is invalid."
14905
14595
  },
14906
14596
  "401": {
14907
14597
  "content": {
@@ -14998,16 +14688,6 @@
14998
14688
  },
14999
14689
  "description": "Successful Response"
15000
14690
  },
15001
- "400": {
15002
- "content": {
15003
- "application/json": {
15004
- "schema": {
15005
- "$ref": "#/components/schemas/ErrorResponse"
15006
- }
15007
- }
15008
- },
15009
- "description": "The session runs on a developer laptop and cannot be stopped from the cloud."
15010
- },
15011
14691
  "401": {
15012
14692
  "content": {
15013
14693
  "application/json": {