@ellipsis-dev/sdk 0.15.1 → 0.17.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.
@@ -29,7 +29,6 @@
29
29
  "$ref": "#/components/schemas/AgentConfigEllipsis",
30
30
  "default": {
31
31
  "enabled": true,
32
- "interactive": true,
33
32
  "metadata": {
34
33
  "annotations": {},
35
34
  "labels": []
@@ -38,14 +37,23 @@
38
37
  }
39
38
  },
40
39
  "environment": {
41
- "$ref": "#/components/schemas/AgentConfigEnvironment",
40
+ "anyOf": [
41
+ {
42
+ "type": "string"
43
+ },
44
+ {
45
+ "$ref": "#/components/schemas/AgentConfigEnvironment"
46
+ }
47
+ ],
42
48
  "default": {
43
49
  "compute": {},
44
50
  "hooks": {},
45
51
  "image": {},
52
+ "mcp_servers": [],
46
53
  "repositories": [],
47
54
  "variables": []
48
- }
55
+ },
56
+ "title": "Environment"
49
57
  },
50
58
  "input": {
51
59
  "anyOf": [
@@ -57,21 +65,6 @@
57
65
  }
58
66
  ]
59
67
  },
60
- "mcp_servers": {
61
- "default": [],
62
- "items": {
63
- "anyOf": [
64
- {
65
- "type": "string"
66
- },
67
- {
68
- "$ref": "#/components/schemas/AgentConfigMcpServer"
69
- }
70
- ]
71
- },
72
- "title": "Mcp Servers",
73
- "type": "array"
74
- },
75
68
  "output": {
76
69
  "anyOf": [
77
70
  {
@@ -414,7 +407,7 @@
414
407
  },
415
408
  "AgentConfigEllipsis": {
416
409
  "additionalProperties": false,
417
- "description": "The Ellipsis product namespace for a config file: which schema this is\n(`version`), the human-facing identity (`name`/`description`), freeform\norganizational `metadata`, whether the agent is `enabled`, and the\nhuman-access flag `interactive`. The presence of a top-level `ellipsis:`\nmapping is what marks a YAML file as an Ellipsis agent config (vs arbitrary\nYAML that merely lives under a config directory) \u2014 see\n`yaml_is_ellipsis_config`.\n\n`enabled`/`interactive` are agent behavior, not freeform metadata, so they\nstay inside the config `sha` (only `metadata` is sha-excluded).\n`interactive` lets a human `agent session connect` to a live session (CLI\nrelay). It does not decide whether a session is ephemeral or durable \u2014 that\nis the trigger's job.",
410
+ "description": "The Ellipsis product namespace for a config file: which schema this is\n(`version`), the human-facing identity (`name`/`description`), freeform\norganizational `metadata`, and whether the agent is `enabled`. The\npresence of a top-level `ellipsis:` mapping is what marks a YAML file as\nan Ellipsis agent config (vs arbitrary YAML that merely lives under a\nconfig directory) \u2014 see `yaml_is_ellipsis_config`.\n\n`enabled` is agent behavior, not freeform metadata, so it stays inside\nthe config `sha` (only `metadata` is sha-excluded). Whether a session\naccepts messages is a per-run choice (POST /v1/sessions `interactive`),\nnot a config one.",
418
411
  "properties": {
419
412
  "description": {
420
413
  "anyOf": [
@@ -432,11 +425,6 @@
432
425
  "title": "Enabled",
433
426
  "type": "boolean"
434
427
  },
435
- "interactive": {
436
- "default": true,
437
- "title": "Interactive",
438
- "type": "boolean"
439
- },
440
428
  "metadata": {
441
429
  "$ref": "#/components/schemas/AgentConfigMetadata",
442
430
  "default": {
@@ -511,6 +499,27 @@
511
499
  "$ref": "#/components/schemas/AgentConfigEnvironmentImage",
512
500
  "default": {}
513
501
  },
502
+ "mcp_servers": {
503
+ "default": [],
504
+ "items": {
505
+ "anyOf": [
506
+ {
507
+ "type": "string"
508
+ },
509
+ {
510
+ "$ref": "#/components/schemas/AgentConfigMcpServer"
511
+ },
512
+ {
513
+ "$ref": "#/components/schemas/AgentConfigMcpStdioServer"
514
+ },
515
+ {
516
+ "$ref": "#/components/schemas/AgentConfigMcpRemoteServer"
517
+ }
518
+ ]
519
+ },
520
+ "title": "Mcp Servers",
521
+ "type": "array"
522
+ },
514
523
  "repositories": {
515
524
  "default": [],
516
525
  "items": {
@@ -688,9 +697,37 @@
688
697
  "title": "AgentConfigInput",
689
698
  "type": "object"
690
699
  },
700
+ "AgentConfigMcpRemoteServer": {
701
+ "additionalProperties": false,
702
+ "description": "A bring-your-own remote MCP server: the harness talks HTTP to `url`.\nNothing runs in the sandbox 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.",
703
+ "properties": {
704
+ "headers": {
705
+ "additionalProperties": {
706
+ "type": "string"
707
+ },
708
+ "default": {},
709
+ "title": "Headers",
710
+ "type": "object"
711
+ },
712
+ "name": {
713
+ "title": "Name",
714
+ "type": "string"
715
+ },
716
+ "url": {
717
+ "title": "Url",
718
+ "type": "string"
719
+ }
720
+ },
721
+ "required": [
722
+ "name",
723
+ "url"
724
+ ],
725
+ "title": "AgentConfigMcpRemoteServer",
726
+ "type": "object"
727
+ },
691
728
  "AgentConfigMcpServer": {
692
729
  "additionalProperties": false,
693
- "description": "One built-in MCP server this agent opts into by name (`linear`/`slack`).\nThis is a name reference over the connected built-in set, NOT a custom-server\ndefinition \u2014 there is no command/url/headers shape (that was the old,\nremoved field, and Ellipsis does not support bring-your-own MCP servers).\nIt only matters when the named integration is set to `opt_in` inclusion; an\nintegration in the default `all_sessions` mode is added regardless.",
730
+ "description": "One built-in MCP server this agent opts into by name (`linear`/`slack`).\nA name reference over the connected built-in set \u2014 the platform manages the\nserver's transport and credentials. It only matters when the named\nintegration is set to `opt_in` inclusion; an integration in the default\n`all_sessions` mode is added regardless. For a server the platform does not\nprovide, define it instead (`AgentConfigMcpStdioServer` /\n`AgentConfigMcpRemoteServer`).",
694
731
  "properties": {
695
732
  "name": {
696
733
  "title": "Name",
@@ -703,6 +740,42 @@
703
740
  "title": "AgentConfigMcpServer",
704
741
  "type": "object"
705
742
  },
743
+ "AgentConfigMcpStdioServer": {
744
+ "additionalProperties": false,
745
+ "description": "A bring-your-own stdio MCP server: the harness spawns `command` inside\nthe sandbox and speaks JSON-RPC over its stdin/stdout. The command must be\nrunnable in the sandbox image \u2014 install its runtime via `image.setup` /\n`image.dockerfile_append` if the base image lacks it.\n\n`env` values may embed `${NAME}` references, resolved at run time from the\naccount's secrets store (see `mcp_secret_refs`); everything else is passed\nliterally.",
746
+ "properties": {
747
+ "args": {
748
+ "default": [],
749
+ "items": {
750
+ "type": "string"
751
+ },
752
+ "title": "Args",
753
+ "type": "array"
754
+ },
755
+ "command": {
756
+ "title": "Command",
757
+ "type": "string"
758
+ },
759
+ "env": {
760
+ "additionalProperties": {
761
+ "type": "string"
762
+ },
763
+ "default": {},
764
+ "title": "Env",
765
+ "type": "object"
766
+ },
767
+ "name": {
768
+ "title": "Name",
769
+ "type": "string"
770
+ }
771
+ },
772
+ "required": [
773
+ "name",
774
+ "command"
775
+ ],
776
+ "title": "AgentConfigMcpStdioServer",
777
+ "type": "object"
778
+ },
706
779
  "AgentConfigMemorySize": {
707
780
  "additionalProperties": false,
708
781
  "description": "A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).\nSet any of `gb`/`mb` (at least one). The alternative to the `8GB`-style\nshorthand string.",
@@ -3032,95 +3105,31 @@
3032
3105
  "type": "object"
3033
3106
  },
3034
3107
  "CreateAgentConfigRequest": {
3035
- "description": "Parameters for creating an agent config. Exactly one of config or\ntemplate_id must be set.",
3108
+ "description": "Parameters for creating an agent config.",
3036
3109
  "properties": {
3037
3110
  "config": {
3038
- "anyOf": [
3039
- {
3040
- "$ref": "#/components/schemas/AgentConfig"
3041
- },
3042
- {
3043
- "type": "null"
3044
- }
3045
- ],
3046
- "description": "An inline agent config."
3047
- },
3048
- "path": {
3049
- "anyOf": [
3050
- {
3051
- "type": "string"
3052
- },
3053
- {
3054
- "type": "null"
3055
- }
3056
- ],
3057
- "description": "File path within the repo, when a repository is named. Omit for the default agents/<slug>.yaml; if set it must be a location the config sync scans (a .yaml/.yml file under agents/, .agents/, ellipsis/, or .ellipsis/ at any depth).",
3058
- "title": "Path"
3059
- },
3060
- "repository": {
3061
- "anyOf": [
3062
- {
3063
- "type": "string"
3064
- },
3065
- {
3066
- "type": "null"
3067
- }
3068
- ],
3069
- "description": "Define the agent as a file in this repository: Ellipsis opens a pull request adding it, and the agent goes live when that merges. Repository name within the caller's account; the owner is always the account, so pass a bare name (e.g. \"my-service\"), not \"owner/my-service\". Omit to create the agent through the API alone, with no file and live immediately.",
3070
- "title": "Repository"
3071
- },
3072
- "template_id": {
3073
- "anyOf": [
3074
- {
3075
- "type": "string"
3076
- },
3077
- {
3078
- "type": "null"
3079
- }
3080
- ],
3081
- "description": "A gallery template slug (see GET /v1/agents/templates).",
3082
- "title": "Template Id"
3111
+ "$ref": "#/components/schemas/AgentConfig",
3112
+ "description": "The agent's definition."
3083
3113
  }
3084
3114
  },
3115
+ "required": [
3116
+ "config"
3117
+ ],
3085
3118
  "title": "CreateAgentConfigRequest",
3086
3119
  "type": "object"
3087
3120
  },
3088
- "CreateAgentConfigResponse": {
3089
- "description": "The created agent config, plus the pull request that adds its file when\none was opened.",
3121
+ "CreateEnvironmentRequest": {
3122
+ "description": "Parameters for creating an environment.",
3090
3123
  "properties": {
3091
- "config": {
3092
- "$ref": "#/components/schemas/Config",
3093
- "description": "The created agent config."
3094
- },
3095
- "path": {
3096
- "anyOf": [
3097
- {
3098
- "type": "string"
3099
- },
3100
- {
3101
- "type": "null"
3102
- }
3103
- ],
3104
- "description": "The file path the config was written to, or null when the agent has no file.",
3105
- "title": "Path"
3106
- },
3107
- "pull_request_url": {
3108
- "anyOf": [
3109
- {
3110
- "type": "string"
3111
- },
3112
- {
3113
- "type": "null"
3114
- }
3115
- ],
3116
- "description": "The pull request that adds the config file. The agent becomes live once it merges and syncs. Null when no repository was named: the agent is already live.",
3117
- "title": "Pull Request Url"
3124
+ "environment": {
3125
+ "$ref": "#/components/schemas/EnvironmentConfig",
3126
+ "description": "The environment's definition."
3118
3127
  }
3119
3128
  },
3120
3129
  "required": [
3121
- "config"
3130
+ "environment"
3122
3131
  ],
3123
- "title": "CreateAgentConfigResponse",
3132
+ "title": "CreateEnvironmentRequest",
3124
3133
  "type": "object"
3125
3134
  },
3126
3135
  "CreateFileRequest": {
@@ -3358,86 +3367,36 @@
3358
3367
  "title": "EllipsisGrant",
3359
3368
  "type": "object"
3360
3369
  },
3361
- "ErrorInfo": {
3370
+ "Environment": {
3371
+ "description": "A saved environment: the machine agents run in (repositories,\nvariables, MCP servers, image, compute, hooks), defined once and\nreferenced by name or id from agent configs and session starts.",
3362
3372
  "properties": {
3363
- "code": {
3364
- "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_limit_exceeded, rate_limited, review_in_flight, session_closed, session_ephemeral_trigger, session_finished, session_harness_single_turn, session_mention_surface, session_non_interactive, unauthorized, unavailable.",
3365
- "title": "Code",
3366
- "type": "string"
3367
- },
3368
- "message": {
3369
- "description": "Human-readable explanation. Wording may change at any time; switch on `code`, never on this text.",
3370
- "title": "Message",
3373
+ "created_at": {
3374
+ "description": "When the environment was created.",
3375
+ "format": "date-time",
3376
+ "title": "Created At",
3371
3377
  "type": "string"
3372
3378
  },
3373
- "request_id": {
3379
+ "edited_by": {
3374
3380
  "anyOf": [
3375
3381
  {
3376
- "type": "string"
3382
+ "$ref": "#/components/schemas/GithubAccountSnippet"
3377
3383
  },
3378
3384
  {
3379
3385
  "type": "null"
3380
3386
  }
3381
3387
  ],
3382
- "description": "Present on internal server errors: quote it when contacting support to identify the exact failure.",
3383
- "title": "Request Id"
3384
- }
3385
- },
3386
- "required": [
3387
- "code",
3388
- "message"
3389
- ],
3390
- "title": "ErrorInfo",
3391
- "type": "object"
3392
- },
3393
- "ErrorResponse": {
3394
- "description": "The error envelope every /v1 error returns.",
3395
- "properties": {
3396
- "error": {
3397
- "$ref": "#/components/schemas/ErrorInfo"
3398
- }
3399
- },
3400
- "required": [
3401
- "error"
3402
- ],
3403
- "title": "ErrorResponse",
3404
- "type": "object"
3405
- },
3406
- "ExecutionStatus": {
3407
- "description": "Per-execution status ladder (was AgentProcessStatus). Distinct from the\nsession's durable `session_state` and from `agent_sessions.status`, which\nremains the atomic claim/dispatch guard.",
3408
- "enum": [
3409
- "running",
3410
- "failed",
3411
- "done"
3412
- ],
3413
- "title": "ExecutionStatus",
3414
- "type": "string"
3415
- },
3416
- "File": {
3417
- "description": "A file's metadata \u2014 the file itself is fetched via a separate\ndownload URL.",
3418
- "properties": {
3419
- "content_type": {
3420
- "description": "The file's MIME type.",
3421
- "title": "Content Type",
3422
- "type": "string"
3388
+ "description": "The GitHub account that last edited the environment, when known."
3423
3389
  },
3424
- "created_at": {
3425
- "description": "When the file was uploaded.",
3426
- "format": "date-time",
3427
- "title": "Created At",
3428
- "type": "string"
3429
- },
3430
- "filename": {
3431
- "description": "The original file basename, for display.",
3432
- "title": "Filename",
3433
- "type": "string"
3390
+ "environment": {
3391
+ "$ref": "#/components/schemas/EnvironmentConfig",
3392
+ "description": "The environment definition itself, as parsed from its YAML."
3434
3393
  },
3435
3394
  "id": {
3436
- "description": "The file's unique identifier.",
3395
+ "description": "Unique identifier of the environment.",
3437
3396
  "title": "Id",
3438
3397
  "type": "string"
3439
3398
  },
3440
- "session_id": {
3399
+ "last_sync_error": {
3441
3400
  "anyOf": [
3442
3401
  {
3443
3402
  "type": "string"
@@ -3446,24 +3405,351 @@
3446
3405
  "type": "null"
3447
3406
  }
3448
3407
  ],
3449
- "description": "The agent session that produced this file, when it was uploaded from a sandbox. Null for uploads made outside an agent session.",
3450
- "title": "Session Id"
3408
+ "description": "The parse or validation error from the most recent sync attempt, or null when it succeeded. A non-null value means sessions run the last good definition, not the YAML currently on the branch.",
3409
+ "title": "Last Sync Error"
3451
3410
  },
3452
- "size_bytes": {
3453
- "description": "The size of the stored file in bytes.",
3454
- "title": "Size Bytes",
3455
- "type": "integer"
3456
- }
3457
- },
3458
- "required": [
3459
- "id",
3460
- "filename",
3461
- "content_type",
3462
- "size_bytes",
3463
- "created_at"
3464
- ],
3465
- "title": "File",
3466
- "type": "object"
3411
+ "last_synced_commit_sha": {
3412
+ "anyOf": [
3413
+ {
3414
+ "type": "string"
3415
+ },
3416
+ {
3417
+ "type": "null"
3418
+ }
3419
+ ],
3420
+ "description": "The last commit the environment was synced from.",
3421
+ "title": "Last Synced Commit Sha"
3422
+ },
3423
+ "managed_by": {
3424
+ "$ref": "#/components/schemas/ConfigManagedBy",
3425
+ "description": "\"github\" environments are defined by a file in a repository and are changed by editing that file; \"api\" environments have no file and are changed through this API."
3426
+ },
3427
+ "name": {
3428
+ "description": "The environment's customer-unique addressable name; usable anywhere an environment is referenced, interchangeably with the id.",
3429
+ "title": "Name",
3430
+ "type": "string"
3431
+ },
3432
+ "sha": {
3433
+ "description": "The environment's content identity fingerprint.",
3434
+ "title": "Sha",
3435
+ "type": "string"
3436
+ },
3437
+ "source_details": {
3438
+ "anyOf": [
3439
+ {
3440
+ "$ref": "#/components/schemas/AgentConfigSourceGithub"
3441
+ },
3442
+ {
3443
+ "type": "null"
3444
+ }
3445
+ ],
3446
+ "description": "The repository, path, and branch the environment syncs from. Null for environments managed through the API."
3447
+ },
3448
+ "updated_at": {
3449
+ "description": "When the environment was last updated.",
3450
+ "format": "date-time",
3451
+ "title": "Updated At",
3452
+ "type": "string"
3453
+ }
3454
+ },
3455
+ "required": [
3456
+ "id",
3457
+ "name",
3458
+ "sha",
3459
+ "created_at",
3460
+ "updated_at",
3461
+ "managed_by",
3462
+ "environment"
3463
+ ],
3464
+ "title": "Environment",
3465
+ "type": "object"
3466
+ },
3467
+ "EnvironmentConfig": {
3468
+ "additionalProperties": false,
3469
+ "description": "A parsed environment document: identity plus the environment body.\n\nThe body fields are flattened to the top level of the file (not nested\nunder an `environment:` key) \u2014 the file *is* the environment, so nesting\nwould be ceremony. `to_environment()` projects the body for substitution\ninto an agent config.",
3470
+ "properties": {
3471
+ "compute": {
3472
+ "$ref": "#/components/schemas/AgentConfigCompute",
3473
+ "default": {}
3474
+ },
3475
+ "ellipsis": {
3476
+ "$ref": "#/components/schemas/EnvironmentConfigEllipsis"
3477
+ },
3478
+ "hooks": {
3479
+ "$ref": "#/components/schemas/AgentConfigEnvironmentHooks",
3480
+ "default": {}
3481
+ },
3482
+ "image": {
3483
+ "$ref": "#/components/schemas/AgentConfigEnvironmentImage",
3484
+ "default": {}
3485
+ },
3486
+ "mcp_servers": {
3487
+ "default": [],
3488
+ "items": {
3489
+ "anyOf": [
3490
+ {
3491
+ "type": "string"
3492
+ },
3493
+ {
3494
+ "$ref": "#/components/schemas/AgentConfigMcpServer"
3495
+ },
3496
+ {
3497
+ "$ref": "#/components/schemas/AgentConfigMcpStdioServer"
3498
+ },
3499
+ {
3500
+ "$ref": "#/components/schemas/AgentConfigMcpRemoteServer"
3501
+ }
3502
+ ]
3503
+ },
3504
+ "title": "Mcp Servers",
3505
+ "type": "array"
3506
+ },
3507
+ "repositories": {
3508
+ "default": [],
3509
+ "items": {
3510
+ "$ref": "#/components/schemas/AgentConfigRepository"
3511
+ },
3512
+ "title": "Repositories",
3513
+ "type": "array"
3514
+ },
3515
+ "variables": {
3516
+ "default": [],
3517
+ "items": {
3518
+ "$ref": "#/components/schemas/AgentConfigEnvironmentVariable"
3519
+ },
3520
+ "title": "Variables",
3521
+ "type": "array"
3522
+ }
3523
+ },
3524
+ "required": [
3525
+ "ellipsis"
3526
+ ],
3527
+ "title": "EnvironmentConfig",
3528
+ "type": "object"
3529
+ },
3530
+ "EnvironmentConfigEllipsis": {
3531
+ "additionalProperties": false,
3532
+ "description": "The Ellipsis namespace of an environment file. `kind: environment` is\nwhat routes a synced YAML here instead of to the agent-config parser \u2014\nan agent config carries no `kind` (or `kind: agent`, tolerated nowhere:\nabsence is the agent marker).",
3533
+ "properties": {
3534
+ "description": {
3535
+ "anyOf": [
3536
+ {
3537
+ "type": "string"
3538
+ },
3539
+ {
3540
+ "type": "null"
3541
+ }
3542
+ ],
3543
+ "title": "Description"
3544
+ },
3545
+ "kind": {
3546
+ "const": "environment",
3547
+ "title": "Kind",
3548
+ "type": "string"
3549
+ },
3550
+ "metadata": {
3551
+ "$ref": "#/components/schemas/AgentConfigMetadata",
3552
+ "default": {
3553
+ "annotations": {},
3554
+ "labels": []
3555
+ }
3556
+ },
3557
+ "name": {
3558
+ "anyOf": [
3559
+ {
3560
+ "type": "string"
3561
+ },
3562
+ {
3563
+ "type": "null"
3564
+ }
3565
+ ],
3566
+ "title": "Name"
3567
+ }
3568
+ },
3569
+ "required": [
3570
+ "kind"
3571
+ ],
3572
+ "title": "EnvironmentConfigEllipsis",
3573
+ "type": "object"
3574
+ },
3575
+ "EnvironmentDefaults": {
3576
+ "description": "Which environment serves sessions whose config carries no environment\nof its own: one account-wide rung, plus a rung per repository. Values are\nenvironment ids \u2014 stable across renames, unlike names.",
3577
+ "properties": {
3578
+ "account": {
3579
+ "anyOf": [
3580
+ {
3581
+ "type": "string"
3582
+ },
3583
+ {
3584
+ "type": "null"
3585
+ }
3586
+ ],
3587
+ "description": "Environment id serving sessions with no repository context, or null when no account default is set.",
3588
+ "title": "Account"
3589
+ },
3590
+ "repositories": {
3591
+ "additionalProperties": {
3592
+ "type": "string"
3593
+ },
3594
+ "default": {},
3595
+ "description": "Environment id per repository, keyed \"owner/name\". A repository with no default set is absent.",
3596
+ "title": "Repositories",
3597
+ "type": "object"
3598
+ }
3599
+ },
3600
+ "title": "EnvironmentDefaults",
3601
+ "type": "object"
3602
+ },
3603
+ "EnvironmentResponse": {
3604
+ "description": "One saved environment.",
3605
+ "properties": {
3606
+ "environment": {
3607
+ "$ref": "#/components/schemas/Environment",
3608
+ "description": "The saved environment."
3609
+ }
3610
+ },
3611
+ "required": [
3612
+ "environment"
3613
+ ],
3614
+ "title": "EnvironmentResponse",
3615
+ "type": "object"
3616
+ },
3617
+ "EnvironmentSource": {
3618
+ "description": "How a session's environment was chosen. None (the field is nullable)\nwhen the config carried an inline environment block and no resolution ran \u2014\nan inline environment is not a reference, so there is nothing to record.\n\nNot derivable from the row: `environment_id` says WHICH environment, not\nhow it was chosen, and is null for the built-in basic sandbox.",
3619
+ "enum": [
3620
+ "request",
3621
+ "agent_config",
3622
+ "repo_default",
3623
+ "account_default",
3624
+ "platform_default"
3625
+ ],
3626
+ "title": "EnvironmentSource",
3627
+ "type": "string"
3628
+ },
3629
+ "EnvironmentsListResponse": {
3630
+ "description": "The caller's saved environments.",
3631
+ "properties": {
3632
+ "environments": {
3633
+ "description": "Saved environments.",
3634
+ "items": {
3635
+ "$ref": "#/components/schemas/Environment"
3636
+ },
3637
+ "title": "Environments",
3638
+ "type": "array"
3639
+ }
3640
+ },
3641
+ "required": [
3642
+ "environments"
3643
+ ],
3644
+ "title": "EnvironmentsListResponse",
3645
+ "type": "object"
3646
+ },
3647
+ "ErrorInfo": {
3648
+ "properties": {
3649
+ "code": {
3650
+ "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_limit_exceeded, rate_limited, review_in_flight, session_closed, session_ephemeral_trigger, session_finished, session_harness_single_turn, session_mention_surface, session_non_interactive, unauthorized, unavailable.",
3651
+ "title": "Code",
3652
+ "type": "string"
3653
+ },
3654
+ "message": {
3655
+ "description": "Human-readable explanation. Wording may change at any time; switch on `code`, never on this text.",
3656
+ "title": "Message",
3657
+ "type": "string"
3658
+ },
3659
+ "request_id": {
3660
+ "anyOf": [
3661
+ {
3662
+ "type": "string"
3663
+ },
3664
+ {
3665
+ "type": "null"
3666
+ }
3667
+ ],
3668
+ "description": "Present on internal server errors: quote it when contacting support to identify the exact failure.",
3669
+ "title": "Request Id"
3670
+ }
3671
+ },
3672
+ "required": [
3673
+ "code",
3674
+ "message"
3675
+ ],
3676
+ "title": "ErrorInfo",
3677
+ "type": "object"
3678
+ },
3679
+ "ErrorResponse": {
3680
+ "description": "The error envelope every /v1 error returns.",
3681
+ "properties": {
3682
+ "error": {
3683
+ "$ref": "#/components/schemas/ErrorInfo"
3684
+ }
3685
+ },
3686
+ "required": [
3687
+ "error"
3688
+ ],
3689
+ "title": "ErrorResponse",
3690
+ "type": "object"
3691
+ },
3692
+ "ExecutionStatus": {
3693
+ "description": "Per-execution status ladder (was AgentProcessStatus). Distinct from the\nsession's durable `session_state` and from `agent_sessions.status`, which\nremains the atomic claim/dispatch guard.",
3694
+ "enum": [
3695
+ "running",
3696
+ "failed",
3697
+ "done"
3698
+ ],
3699
+ "title": "ExecutionStatus",
3700
+ "type": "string"
3701
+ },
3702
+ "File": {
3703
+ "description": "A file's metadata \u2014 the file itself is fetched via a separate\ndownload URL.",
3704
+ "properties": {
3705
+ "content_type": {
3706
+ "description": "The file's MIME type.",
3707
+ "title": "Content Type",
3708
+ "type": "string"
3709
+ },
3710
+ "created_at": {
3711
+ "description": "When the file was uploaded.",
3712
+ "format": "date-time",
3713
+ "title": "Created At",
3714
+ "type": "string"
3715
+ },
3716
+ "filename": {
3717
+ "description": "The original file basename, for display.",
3718
+ "title": "Filename",
3719
+ "type": "string"
3720
+ },
3721
+ "id": {
3722
+ "description": "The file's unique identifier.",
3723
+ "title": "Id",
3724
+ "type": "string"
3725
+ },
3726
+ "session_id": {
3727
+ "anyOf": [
3728
+ {
3729
+ "type": "string"
3730
+ },
3731
+ {
3732
+ "type": "null"
3733
+ }
3734
+ ],
3735
+ "description": "The agent session that produced this file, when it was uploaded from a sandbox. Null for uploads made outside an agent session.",
3736
+ "title": "Session Id"
3737
+ },
3738
+ "size_bytes": {
3739
+ "description": "The size of the stored file in bytes.",
3740
+ "title": "Size Bytes",
3741
+ "type": "integer"
3742
+ }
3743
+ },
3744
+ "required": [
3745
+ "id",
3746
+ "filename",
3747
+ "content_type",
3748
+ "size_bytes",
3749
+ "created_at"
3750
+ ],
3751
+ "title": "File",
3752
+ "type": "object"
3467
3753
  },
3468
3754
  "FilesListResponse": {
3469
3755
  "description": "A page of the calling account's files, newest first. Metadata only \u2014\nfetch an individual file to get a download URL.",
@@ -5657,6 +5943,33 @@
5657
5943
  "title": "PutAgentDefaultRequest",
5658
5944
  "type": "object"
5659
5945
  },
5946
+ "PutEnvironmentDefaultRequest": {
5947
+ "description": "Parameters for setting a default environment, at either the account or\nthe repository level.",
5948
+ "properties": {
5949
+ "environment": {
5950
+ "description": "The environment to make the default: an environment id, or its customer-unique name.",
5951
+ "title": "Environment",
5952
+ "type": "string"
5953
+ },
5954
+ "repository": {
5955
+ "anyOf": [
5956
+ {
5957
+ "type": "string"
5958
+ },
5959
+ {
5960
+ "type": "null"
5961
+ }
5962
+ ],
5963
+ "description": "The rung to set: \"owner/name\" for a repo default; omit to set the account default. An unknown or foreign repo is a 404.",
5964
+ "title": "Repository"
5965
+ }
5966
+ },
5967
+ "required": [
5968
+ "environment"
5969
+ ],
5970
+ "title": "PutEnvironmentDefaultRequest",
5971
+ "type": "object"
5972
+ },
5660
5973
  "PutSecretsRequest": {
5661
5974
  "description": "Store secrets for the account's sandboxes. Each secret is upserted by\nname: existing names are overwritten.",
5662
5975
  "properties": {
@@ -6050,25 +6363,21 @@
6050
6363
  "description": "The session execution that produced the record, or null for session-scoped lifecycle records.",
6051
6364
  "title": "Execution Id"
6052
6365
  },
6053
- "id": {
6054
- "description": "The matching record's unique identifier.",
6055
- "title": "Id",
6056
- "type": "string"
6057
- },
6058
- "output_prs": {
6366
+ "git": {
6059
6367
  "anyOf": [
6060
6368
  {
6061
- "items": {
6062
- "$ref": "#/components/schemas/SessionPr"
6063
- },
6064
- "type": "array"
6369
+ "$ref": "#/components/schemas/SessionGit"
6065
6370
  },
6066
6371
  {
6067
6372
  "type": "null"
6068
6373
  }
6069
6374
  ],
6070
- "description": "Pull requests the session created, so a result row can show what it shipped without fetching the session.",
6071
- "title": "Output Prs"
6375
+ "description": "What the session did to git, per repository, so a result row can show what it shipped without fetching the session."
6376
+ },
6377
+ "id": {
6378
+ "description": "The matching record's unique identifier.",
6379
+ "title": "Id",
6380
+ "type": "string"
6072
6381
  },
6073
6382
  "record_type": {
6074
6383
  "description": "The record's event type.",
@@ -6149,7 +6458,7 @@
6149
6458
  "description": "A saved config to replay against. By default the original run's frozen config snapshot is reused.",
6150
6459
  "title": "Config Id"
6151
6460
  },
6152
- "config_override": {
6461
+ "override": {
6153
6462
  "anyOf": [
6154
6463
  {
6155
6464
  "additionalProperties": true,
@@ -6159,20 +6468,8 @@
6159
6468
  "type": "null"
6160
6469
  }
6161
6470
  ],
6162
- "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.",
6163
- "title": "Config Override"
6164
- },
6165
- "config_override_yaml": {
6166
- "anyOf": [
6167
- {
6168
- "type": "string"
6169
- },
6170
- {
6171
- "type": "null"
6172
- }
6173
- ],
6174
- "description": "The same partial-config override as a YAML/JSON string (e.g. read from a file). Mutually exclusive with config_override.",
6175
- "title": "Config Override Yaml"
6471
+ "description": "Optional partial patch on the replayed config, applied last \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.",
6472
+ "title": "Override"
6176
6473
  },
6177
6474
  "prompt": {
6178
6475
  "anyOf": [
@@ -6299,6 +6596,7 @@
6299
6596
  "reviews",
6300
6597
  "configs",
6301
6598
  "defaults",
6599
+ "environments",
6302
6600
  "secrets",
6303
6601
  "templates",
6304
6602
  "integrations",
@@ -8511,6 +8809,10 @@
8511
8809
  "title": "Created At",
8512
8810
  "type": "string"
8513
8811
  },
8812
+ "environment": {
8813
+ "$ref": "#/components/schemas/SessionEnvironment",
8814
+ "description": "The environment the session resolved: the saved environment's id and how it was chosen. The environment's frozen body is inside agent.config.environment."
8815
+ },
8514
8816
  "exit_status": {
8515
8817
  "anyOf": [
8516
8818
  {
@@ -8522,6 +8824,17 @@
8522
8824
  ],
8523
8825
  "description": "How the session ended; null until it is terminal."
8524
8826
  },
8827
+ "git": {
8828
+ "anyOf": [
8829
+ {
8830
+ "$ref": "#/components/schemas/SessionGit"
8831
+ },
8832
+ {
8833
+ "type": "null"
8834
+ }
8835
+ ],
8836
+ "description": "What the session did to git, one entry per repository in its workspace: the commit and branch it sits on, per-file line counts for its uncommitted changes, and the pull requests it opened. Null if nothing was ever captured."
8837
+ },
8525
8838
  "harness": {
8526
8839
  "$ref": "#/components/schemas/Harness",
8527
8840
  "description": "The coding-agent harness the session runs on."
@@ -8566,32 +8879,6 @@
8566
8879
  "title": "Metadata",
8567
8880
  "type": "object"
8568
8881
  },
8569
- "output_diff": {
8570
- "anyOf": [
8571
- {
8572
- "$ref": "#/components/schemas/SessionDiff"
8573
- },
8574
- {
8575
- "type": "null"
8576
- }
8577
- ],
8578
- "description": "Per-file line counts for the uncommitted changes in the session's workspace. Work the session committed is not included here \u2014 see output_prs. Null if no diff was ever captured."
8579
- },
8580
- "output_prs": {
8581
- "anyOf": [
8582
- {
8583
- "items": {
8584
- "$ref": "#/components/schemas/SessionPr"
8585
- },
8586
- "type": "array"
8587
- },
8588
- {
8589
- "type": "null"
8590
- }
8591
- ],
8592
- "description": "Pull requests the session created or updated.",
8593
- "title": "Output Prs"
8594
- },
8595
8882
  "parent": {
8596
8883
  "$ref": "#/components/schemas/SessionParent",
8597
8884
  "description": "What preceded this session, if anything."
@@ -8827,61 +9114,40 @@
8827
9114
  "default": 0,
8828
9115
  "description": "The grand total in millicents: llm + sandbox_cpu + sandbox_memory + fee.",
8829
9116
  "title": "Total",
8830
- "type": "integer"
8831
- }
8832
- },
8833
- "title": "SessionCost",
8834
- "type": "object"
8835
- },
8836
- "SessionDiff": {
8837
- "description": "The counts half of a session's working-tree diff, small enough to ride on\nagent_sessions and be returned by every session read. The patch text lives\nin `agent_session_diffs` and is fetched on demand.\n\nScope is UNCOMMITTED work only (`git diff HEAD`), so this answers \"is there\nunlanded work in this sandbox?\" \u2014 a session that committed and pushed shows\nno files here and its created PR instead.",
8838
- "properties": {
8839
- "files": {
8840
- "items": {
8841
- "$ref": "#/components/schemas/SessionDiffFile"
8842
- },
8843
- "title": "Files",
8844
- "type": "array"
8845
- }
8846
- },
8847
- "required": [
8848
- "files"
8849
- ],
8850
- "title": "SessionDiff",
8851
- "type": "object"
8852
- },
8853
- "SessionDiffFile": {
8854
- "description": "One file's uncommitted change in a session's sandbox, as `git diff HEAD`\n--numstat reports it (with intent-to-add so new files count).",
8855
- "properties": {
8856
- "additions": {
8857
- "title": "Additions",
8858
- "type": "integer"
8859
- },
8860
- "deletions": {
8861
- "title": "Deletions",
8862
- "type": "integer"
8863
- },
8864
- "path": {
8865
- "title": "Path",
8866
- "type": "string"
8867
- },
8868
- "repo": {
8869
- "title": "Repo",
8870
- "type": "string"
9117
+ "type": "integer"
9118
+ }
9119
+ },
9120
+ "title": "SessionCost",
9121
+ "type": "object"
9122
+ },
9123
+ "SessionEnvironment": {
9124
+ "description": "The environment this session resolved: which saved environment (as it\nexists now) and how it was chosen. The environment's frozen BODY rides\ninside `agent.config.environment` \u2014 substitution happens before the config\nsnapshot freezes \u2014 so this object is provenance, not payload.",
9125
+ "properties": {
9126
+ "environment_id": {
9127
+ "anyOf": [
9128
+ {
9129
+ "type": "string"
9130
+ },
9131
+ {
9132
+ "type": "null"
9133
+ }
9134
+ ],
9135
+ "description": "Identifier of the saved environment the session's config resolved. Null for an inline environment block or the built-in basic sandbox.",
9136
+ "title": "Environment Id"
8871
9137
  },
8872
- "status": {
8873
- "title": "Status",
8874
- "type": "string"
9138
+ "source": {
9139
+ "anyOf": [
9140
+ {
9141
+ "$ref": "#/components/schemas/EnvironmentSource"
9142
+ },
9143
+ {
9144
+ "type": "null"
9145
+ }
9146
+ ],
9147
+ "description": "How the environment was chosen (request, agent_config, repo_default, account_default, platform_default). Null when the config carried its own inline environment."
8875
9148
  }
8876
9149
  },
8877
- "required": [
8878
- "repo",
8879
- "path",
8880
- "status",
8881
- "additions",
8882
- "deletions"
8883
- ],
8884
- "title": "SessionDiffFile",
9150
+ "title": "SessionEnvironment",
8885
9151
  "type": "object"
8886
9152
  },
8887
9153
  "SessionExecution": {
@@ -9028,6 +9294,154 @@
9028
9294
  "title": "SessionExitStatus",
9029
9295
  "type": "string"
9030
9296
  },
9297
+ "SessionGit": {
9298
+ "description": "Every repo the session touched. Small enough to ride on `agent_sessions`\nand be returned by every session read.",
9299
+ "properties": {
9300
+ "repos": {
9301
+ "default": [],
9302
+ "items": {
9303
+ "$ref": "#/components/schemas/SessionGitRepo"
9304
+ },
9305
+ "title": "Repos",
9306
+ "type": "array"
9307
+ }
9308
+ },
9309
+ "title": "SessionGit",
9310
+ "type": "object"
9311
+ },
9312
+ "SessionGitFile": {
9313
+ "description": "One file's uncommitted change, as `git diff HEAD --numstat` reports it\n(with intent-to-add, so a brand-new file still counts).",
9314
+ "properties": {
9315
+ "additions": {
9316
+ "title": "Additions",
9317
+ "type": "integer"
9318
+ },
9319
+ "deletions": {
9320
+ "title": "Deletions",
9321
+ "type": "integer"
9322
+ },
9323
+ "path": {
9324
+ "title": "Path",
9325
+ "type": "string"
9326
+ },
9327
+ "status": {
9328
+ "title": "Status",
9329
+ "type": "string"
9330
+ }
9331
+ },
9332
+ "required": [
9333
+ "path",
9334
+ "status",
9335
+ "additions",
9336
+ "deletions"
9337
+ ],
9338
+ "title": "SessionGitFile",
9339
+ "type": "object"
9340
+ },
9341
+ "SessionGitPr": {
9342
+ "description": "A pull request the session opened in this repo, denormalized at capture\ntime so a surface renders a labeled link without joining gh_prs. Live PR\nstate (open/merged/closed) is not stored \u2014 read gh_prs where a view needs\nit. The repo is the parent object, so it is not repeated here.",
9343
+ "properties": {
9344
+ "gh_pr_id": {
9345
+ "anyOf": [
9346
+ {
9347
+ "type": "integer"
9348
+ },
9349
+ {
9350
+ "type": "null"
9351
+ }
9352
+ ],
9353
+ "title": "Gh Pr Id"
9354
+ },
9355
+ "number": {
9356
+ "title": "Number",
9357
+ "type": "integer"
9358
+ },
9359
+ "title": {
9360
+ "anyOf": [
9361
+ {
9362
+ "type": "string"
9363
+ },
9364
+ {
9365
+ "type": "null"
9366
+ }
9367
+ ],
9368
+ "title": "Title"
9369
+ },
9370
+ "url": {
9371
+ "title": "Url",
9372
+ "type": "string"
9373
+ }
9374
+ },
9375
+ "required": [
9376
+ "number",
9377
+ "url"
9378
+ ],
9379
+ "title": "SessionGitPr",
9380
+ "type": "object"
9381
+ },
9382
+ "SessionGitRepo": {
9383
+ "description": "One checkout in the session's sandbox and everything the session did to\nit, split by whether it survived the sandbox.",
9384
+ "properties": {
9385
+ "full_name": {
9386
+ "title": "Full Name",
9387
+ "type": "string"
9388
+ },
9389
+ "local_commit": {
9390
+ "anyOf": [
9391
+ {
9392
+ "type": "string"
9393
+ },
9394
+ {
9395
+ "type": "null"
9396
+ }
9397
+ ],
9398
+ "title": "Local Commit"
9399
+ },
9400
+ "local_uncommitted_files": {
9401
+ "default": [],
9402
+ "items": {
9403
+ "$ref": "#/components/schemas/SessionGitFile"
9404
+ },
9405
+ "title": "Local Uncommitted Files",
9406
+ "type": "array"
9407
+ },
9408
+ "prs": {
9409
+ "default": [],
9410
+ "items": {
9411
+ "$ref": "#/components/schemas/SessionGitPr"
9412
+ },
9413
+ "title": "Prs",
9414
+ "type": "array"
9415
+ },
9416
+ "remote_branch": {
9417
+ "anyOf": [
9418
+ {
9419
+ "type": "string"
9420
+ },
9421
+ {
9422
+ "type": "null"
9423
+ }
9424
+ ],
9425
+ "title": "Remote Branch"
9426
+ },
9427
+ "remote_commit": {
9428
+ "anyOf": [
9429
+ {
9430
+ "type": "string"
9431
+ },
9432
+ {
9433
+ "type": "null"
9434
+ }
9435
+ ],
9436
+ "title": "Remote Commit"
9437
+ }
9438
+ },
9439
+ "required": [
9440
+ "full_name"
9441
+ ],
9442
+ "title": "SessionGitRepo",
9443
+ "type": "object"
9444
+ },
9031
9445
  "SessionLiveness": {
9032
9446
  "description": "The durable conversation axis (backs the surfaced `session` field).",
9033
9447
  "enum": [
@@ -9258,52 +9672,6 @@
9258
9672
  "title": "SessionParent",
9259
9673
  "type": "object"
9260
9674
  },
9261
- "SessionPr": {
9262
- "description": "A pull request this session created, denormalized at capture time so\nsession surfaces render a labeled link without joining gh_prs. Live PR\nstate (open/merged/closed) is not stored here \u2014 read it from gh_prs where\na view needs it.",
9263
- "properties": {
9264
- "gh_pr_id": {
9265
- "anyOf": [
9266
- {
9267
- "type": "integer"
9268
- },
9269
- {
9270
- "type": "null"
9271
- }
9272
- ],
9273
- "title": "Gh Pr Id"
9274
- },
9275
- "number": {
9276
- "title": "Number",
9277
- "type": "integer"
9278
- },
9279
- "repo_full_name": {
9280
- "title": "Repo Full Name",
9281
- "type": "string"
9282
- },
9283
- "title": {
9284
- "anyOf": [
9285
- {
9286
- "type": "string"
9287
- },
9288
- {
9289
- "type": "null"
9290
- }
9291
- ],
9292
- "title": "Title"
9293
- },
9294
- "url": {
9295
- "title": "Url",
9296
- "type": "string"
9297
- }
9298
- },
9299
- "required": [
9300
- "repo_full_name",
9301
- "number",
9302
- "url"
9303
- ],
9304
- "title": "SessionPr",
9305
- "type": "object"
9306
- },
9307
9675
  "SessionPrompting": {
9308
9676
  "description": "The prompt-affordance projection. `enabled` answers \"would a send work\",\nand when it wouldn't, `blocked_reason` + `detail` say why.\n\n`surface_name` is set only for MENTION_SURFACE, naming where to reply.",
9309
9677
  "properties": {
@@ -9986,7 +10354,7 @@
9986
10354
  "type": "null"
9987
10355
  }
9988
10356
  ],
9989
- "description": "An inline agent config to run under."
10357
+ "description": "An inline agent config to run under. At most one of config_id or config may be set; if neither is, the run resolves the account's default-config ladder (repo default, then account default, then the platform default config)."
9990
10358
  },
9991
10359
  "config_id": {
9992
10360
  "anyOf": [
@@ -10000,20 +10368,7 @@
10000
10368
  "description": "A saved agent config to run under: its id, or the agent's customer-unique `ellipsis.name`.",
10001
10369
  "title": "Config Id"
10002
10370
  },
10003
- "config_override": {
10004
- "anyOf": [
10005
- {
10006
- "additionalProperties": true,
10007
- "type": "object"
10008
- },
10009
- {
10010
- "type": "null"
10011
- }
10012
- ],
10013
- "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.",
10014
- "title": "Config Override"
10015
- },
10016
- "config_override_yaml": {
10371
+ "environment": {
10017
10372
  "anyOf": [
10018
10373
  {
10019
10374
  "type": "string"
@@ -10022,8 +10377,8 @@
10022
10377
  "type": "null"
10023
10378
  }
10024
10379
  ],
10025
- "description": "The same partial-config override as a YAML/JSON string (e.g. read from a file). Mutually exclusive with config_override.",
10026
- "title": "Config Override Yaml"
10380
+ "description": "The environment to run in: a saved environment's id (`env_...`) or its customer-unique name. Only for sessions with no explicit config (the agent config decides its own environment; 400 when combined with config/config_id). Omitted, the default-environment ladder resolves: repo default, then account default, then the built-in basic sandbox.",
10381
+ "title": "Environment"
10027
10382
  },
10028
10383
  "force_rebuild": {
10029
10384
  "default": false,
@@ -10031,12 +10386,6 @@
10031
10386
  "title": "Force Rebuild",
10032
10387
  "type": "boolean"
10033
10388
  },
10034
- "idle_start": {
10035
- "default": false,
10036
- "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).",
10037
- "title": "Idle Start",
10038
- "type": "boolean"
10039
- },
10040
10389
  "input": {
10041
10390
  "anyOf": [
10042
10391
  {
@@ -10050,6 +10399,12 @@
10050
10399
  "description": "The typed payload for an agent that declares input.json_schema: validated against the effective config's schema (422 on mismatch), rendered into the session's initial message (the agent's input.message template, or a JSON block). Required when the agent declares a schema; rejected when it does not.",
10051
10400
  "title": "Input"
10052
10401
  },
10402
+ "interactive": {
10403
+ "default": true,
10404
+ "description": "Whether the session stays open for messages after its first turn. Set false for a one-shot run that does its job and closes without holding a warm sandbox; a one-shot run must carry a prompt (or input), since nothing can ever be sent to it later. Agents on the Codex harness are one-shot regardless.",
10405
+ "title": "Interactive",
10406
+ "type": "boolean"
10407
+ },
10053
10408
  "metadata": {
10054
10409
  "additionalProperties": {
10055
10410
  "type": "string"
@@ -10059,19 +10414,20 @@
10059
10414
  "title": "Metadata",
10060
10415
  "type": "object"
10061
10416
  },
10062
- "prompt": {
10417
+ "override": {
10063
10418
  "anyOf": [
10064
10419
  {
10065
- "type": "string"
10420
+ "additionalProperties": true,
10421
+ "type": "object"
10066
10422
  },
10067
10423
  {
10068
10424
  "type": "null"
10069
10425
  }
10070
10426
  ],
10071
- "description": "Per-run instructions appended to the initial query after the config's shared system prompt. Applies regardless of which config source is used.",
10072
- "title": "Prompt"
10427
+ "description": "Optional partial patch on the RESOLVED session config, applied last \u2014 after the config and environment are chosen and the environment is substituted in. Nested objects merge key by key; scalars and arrays replace. E.g. {\"environment\": {\"compute\": {\"memory\": \"16GB\"}}} for just this session, or {\"claude\": {\"model\": \"claude-opus-4-8\"}}. It cannot swap in a different saved environment (it patches the resolved document; it never re-runs resolution).",
10428
+ "title": "Override"
10073
10429
  },
10074
- "repository": {
10430
+ "prompt": {
10075
10431
  "anyOf": [
10076
10432
  {
10077
10433
  "type": "string"
@@ -10080,10 +10436,10 @@
10080
10436
  "type": "null"
10081
10437
  }
10082
10438
  ],
10083
- "description": "The \"owner/name\" repository the client is standing in (the CLI's detected git remote). Selects the repo rung of the defaults ladder, and is merged into the sandbox repository set (cloned at its default branch) regardless of which config source is used. An unknown or foreign repo is ignored.",
10084
- "title": "Repository"
10439
+ "description": "The session's first message. Omit it and the session starts idle: the sandbox spins up, the agent waits at the prompt, and the first message you send opens turn 0.",
10440
+ "title": "Prompt"
10085
10441
  },
10086
- "template_id": {
10442
+ "repository": {
10087
10443
  "anyOf": [
10088
10444
  {
10089
10445
  "type": "string"
@@ -10092,8 +10448,8 @@
10092
10448
  "type": "null"
10093
10449
  }
10094
10450
  ],
10095
- "description": "A maintained run-on-demand template slug (e.g. \"ellipsis-helper\"), resolved server-side to its config. At most one of config_id, config, or template_id may be set; if none is, the run resolves the account's default-config ladder (repo default, then account default, then the platform default config).",
10096
- "title": "Template Id"
10451
+ "description": "The \"owner/name\" repository the client is standing in (the CLI's detected git remote). Selects the repo rung of the defaults ladder, and is merged into the sandbox repository set (cloned at its default branch) regardless of which config source is used. An unknown or foreign repo is ignored.",
10452
+ "title": "Repository"
10097
10453
  }
10098
10454
  },
10099
10455
  "title": "StartAgentSessionRequest",
@@ -10224,6 +10580,20 @@
10224
10580
  "title": "UpdateAgentConfigRequest",
10225
10581
  "type": "object"
10226
10582
  },
10583
+ "UpdateEnvironmentRequest": {
10584
+ "description": "A replacement definition for an environment managed through the API.",
10585
+ "properties": {
10586
+ "environment": {
10587
+ "$ref": "#/components/schemas/EnvironmentConfig",
10588
+ "description": "The environment's new definition. Replaces the previous one wholesale \u2014 this is not a partial update."
10589
+ }
10590
+ },
10591
+ "required": [
10592
+ "environment"
10593
+ ],
10594
+ "title": "UpdateEnvironmentRequest",
10595
+ "type": "object"
10596
+ },
10227
10597
  "UsageDailyPoint": {
10228
10598
  "description": "One day's usage: tokens split by type, and cost split into the four\nbilled categories. `tokens` is the sum of the four token types.",
10229
10599
  "properties": {
@@ -10524,7 +10894,7 @@
10524
10894
  "x-ellipsis-sdk-method": "agents.configs.list"
10525
10895
  },
10526
10896
  "post": {
10527
- "description": "Create an agent config.\n\nName a repository and Ellipsis opens a pull request adding the\nconfig file to agents/ there; the agent goes live when it\nmerges. Omit it and the agent is created here, with no file,\nlive immediately \u2014 and every file reference in it must name the\nrepository it lives in.\n\nAccepts an inline config or a gallery template slug. 409 when\nanother live agent already holds the name.",
10897
+ "description": "Create an agent config, managed through the API: no file, live\nimmediately. To put its definition in a repository instead, create\nit here and then POST /v1/agents/configs/{config_id}/link.\n\n409 when another live agent already holds the name.",
10528
10898
  "operationId": "create_agent_config",
10529
10899
  "parameters": [
10530
10900
  {
@@ -10555,11 +10925,11 @@
10555
10925
  "required": true
10556
10926
  },
10557
10927
  "responses": {
10558
- "200": {
10928
+ "201": {
10559
10929
  "content": {
10560
10930
  "application/json": {
10561
10931
  "schema": {
10562
- "$ref": "#/components/schemas/CreateAgentConfigResponse"
10932
+ "$ref": "#/components/schemas/AgentConfigResponse"
10563
10933
  }
10564
10934
  }
10565
10935
  },
@@ -10573,7 +10943,7 @@
10573
10943
  }
10574
10944
  }
10575
10945
  },
10576
- "description": "Provide exactly one of config or template_id; or the config, path, or target branch is invalid."
10946
+ "description": "The config is invalid."
10577
10947
  },
10578
10948
  "401": {
10579
10949
  "content": {
@@ -10583,19 +10953,9 @@
10583
10953
  }
10584
10954
  }
10585
10955
  },
10586
- "description": "The bearer token is missing, invalid, or revoked."
10587
- },
10588
- "403": {
10589
- "content": {
10590
- "application/json": {
10591
- "schema": {
10592
- "$ref": "#/components/schemas/ErrorResponse"
10593
- }
10594
- }
10595
- },
10596
- "description": "The credential may not perform this action, or the account is blocked."
10956
+ "description": "The bearer token is missing, invalid, or revoked."
10597
10957
  },
10598
- "404": {
10958
+ "403": {
10599
10959
  "content": {
10600
10960
  "application/json": {
10601
10961
  "schema": {
@@ -10603,7 +10963,7 @@
10603
10963
  }
10604
10964
  }
10605
10965
  },
10606
- "description": "The template or repository was not found in your account."
10966
+ "description": "The credential may not perform this action, or the account is blocked."
10607
10967
  },
10608
10968
  "409": {
10609
10969
  "content": {
@@ -10613,7 +10973,7 @@
10613
10973
  }
10614
10974
  }
10615
10975
  },
10616
- "description": "An agent with that name already exists, another agent is already synced from that path, or a file already exists there."
10976
+ "description": "An agent with that name already exists."
10617
10977
  },
10618
10978
  "422": {
10619
10979
  "content": {
@@ -11279,9 +11639,275 @@
11279
11639
  "x-ellipsis-sdk-method": "agents.defaults.delete"
11280
11640
  },
11281
11641
  "get": {
11282
- "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.",
11283
- "operationId": "list_agent_defaults",
11642
+ "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.",
11643
+ "operationId": "list_agent_defaults",
11644
+ "parameters": [
11645
+ {
11646
+ "in": "header",
11647
+ "name": "user-agent",
11648
+ "required": false,
11649
+ "schema": {
11650
+ "anyOf": [
11651
+ {
11652
+ "type": "string"
11653
+ },
11654
+ {
11655
+ "type": "null"
11656
+ }
11657
+ ],
11658
+ "title": "User-Agent"
11659
+ }
11660
+ }
11661
+ ],
11662
+ "responses": {
11663
+ "200": {
11664
+ "content": {
11665
+ "application/json": {
11666
+ "schema": {
11667
+ "$ref": "#/components/schemas/AgentDefaults"
11668
+ }
11669
+ }
11670
+ },
11671
+ "description": "Successful Response"
11672
+ },
11673
+ "401": {
11674
+ "content": {
11675
+ "application/json": {
11676
+ "schema": {
11677
+ "$ref": "#/components/schemas/ErrorResponse"
11678
+ }
11679
+ }
11680
+ },
11681
+ "description": "The bearer token is missing, invalid, or revoked."
11682
+ },
11683
+ "403": {
11684
+ "content": {
11685
+ "application/json": {
11686
+ "schema": {
11687
+ "$ref": "#/components/schemas/ErrorResponse"
11688
+ }
11689
+ }
11690
+ },
11691
+ "description": "The credential may not perform this action, or the account is blocked."
11692
+ },
11693
+ "422": {
11694
+ "content": {
11695
+ "application/json": {
11696
+ "schema": {
11697
+ "$ref": "#/components/schemas/HTTPValidationError"
11698
+ }
11699
+ }
11700
+ },
11701
+ "description": "Validation Error"
11702
+ }
11703
+ },
11704
+ "security": [
11705
+ {
11706
+ "HTTPBearer": []
11707
+ }
11708
+ ],
11709
+ "summary": "List Agent Defaults",
11710
+ "tags": [
11711
+ "v1"
11712
+ ],
11713
+ "x-ellipsis-sdk-method": "agents.defaults.list"
11714
+ },
11715
+ "put": {
11716
+ "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.",
11717
+ "operationId": "put_agent_default",
11718
+ "parameters": [
11719
+ {
11720
+ "in": "header",
11721
+ "name": "user-agent",
11722
+ "required": false,
11723
+ "schema": {
11724
+ "anyOf": [
11725
+ {
11726
+ "type": "string"
11727
+ },
11728
+ {
11729
+ "type": "null"
11730
+ }
11731
+ ],
11732
+ "title": "User-Agent"
11733
+ }
11734
+ }
11735
+ ],
11736
+ "requestBody": {
11737
+ "content": {
11738
+ "application/json": {
11739
+ "schema": {
11740
+ "$ref": "#/components/schemas/PutAgentDefaultRequest"
11741
+ }
11742
+ }
11743
+ },
11744
+ "required": true
11745
+ },
11746
+ "responses": {
11747
+ "200": {
11748
+ "content": {
11749
+ "application/json": {
11750
+ "schema": {
11751
+ "$ref": "#/components/schemas/AgentDefaults"
11752
+ }
11753
+ }
11754
+ },
11755
+ "description": "Successful Response"
11756
+ },
11757
+ "400": {
11758
+ "content": {
11759
+ "application/json": {
11760
+ "schema": {
11761
+ "$ref": "#/components/schemas/ErrorResponse"
11762
+ }
11763
+ }
11764
+ },
11765
+ "description": "The config is not eligible as a default: its pull request has not merged, or it is disabled."
11766
+ },
11767
+ "401": {
11768
+ "content": {
11769
+ "application/json": {
11770
+ "schema": {
11771
+ "$ref": "#/components/schemas/ErrorResponse"
11772
+ }
11773
+ }
11774
+ },
11775
+ "description": "The bearer token is missing, invalid, or revoked."
11776
+ },
11777
+ "403": {
11778
+ "content": {
11779
+ "application/json": {
11780
+ "schema": {
11781
+ "$ref": "#/components/schemas/ErrorResponse"
11782
+ }
11783
+ }
11784
+ },
11785
+ "description": "The credential may not perform this action, or the account is blocked."
11786
+ },
11787
+ "404": {
11788
+ "content": {
11789
+ "application/json": {
11790
+ "schema": {
11791
+ "$ref": "#/components/schemas/ErrorResponse"
11792
+ }
11793
+ }
11794
+ },
11795
+ "description": "The config or repository was not found in your account."
11796
+ },
11797
+ "422": {
11798
+ "content": {
11799
+ "application/json": {
11800
+ "schema": {
11801
+ "$ref": "#/components/schemas/HTTPValidationError"
11802
+ }
11803
+ }
11804
+ },
11805
+ "description": "Validation Error"
11806
+ }
11807
+ },
11808
+ "security": [
11809
+ {
11810
+ "HTTPBearer": []
11811
+ }
11812
+ ],
11813
+ "summary": "Put Agent Default",
11814
+ "tags": [
11815
+ "v1"
11816
+ ],
11817
+ "x-ellipsis-sdk-method": "agents.defaults.set"
11818
+ }
11819
+ },
11820
+ "/v1/agents/templates": {
11821
+ "get": {
11822
+ "description": "List the built-in starter agent templates.\n\nBehind auth but not account-scoped \u2014 the data is static\nproduct content shared by the dashboard, landing site, and CLI.",
11823
+ "operationId": "list_agent_templates",
11824
+ "parameters": [
11825
+ {
11826
+ "in": "header",
11827
+ "name": "user-agent",
11828
+ "required": false,
11829
+ "schema": {
11830
+ "anyOf": [
11831
+ {
11832
+ "type": "string"
11833
+ },
11834
+ {
11835
+ "type": "null"
11836
+ }
11837
+ ],
11838
+ "title": "User-Agent"
11839
+ }
11840
+ }
11841
+ ],
11842
+ "responses": {
11843
+ "200": {
11844
+ "content": {
11845
+ "application/json": {
11846
+ "schema": {
11847
+ "$ref": "#/components/schemas/AgentTemplatesListResponse"
11848
+ }
11849
+ }
11850
+ },
11851
+ "description": "Successful Response"
11852
+ },
11853
+ "401": {
11854
+ "content": {
11855
+ "application/json": {
11856
+ "schema": {
11857
+ "$ref": "#/components/schemas/ErrorResponse"
11858
+ }
11859
+ }
11860
+ },
11861
+ "description": "The bearer token is missing, invalid, or revoked."
11862
+ },
11863
+ "403": {
11864
+ "content": {
11865
+ "application/json": {
11866
+ "schema": {
11867
+ "$ref": "#/components/schemas/ErrorResponse"
11868
+ }
11869
+ }
11870
+ },
11871
+ "description": "The credential may not perform this action, or the account is blocked."
11872
+ },
11873
+ "422": {
11874
+ "content": {
11875
+ "application/json": {
11876
+ "schema": {
11877
+ "$ref": "#/components/schemas/HTTPValidationError"
11878
+ }
11879
+ }
11880
+ },
11881
+ "description": "Validation Error"
11882
+ }
11883
+ },
11884
+ "security": [
11885
+ {
11886
+ "HTTPBearer": []
11887
+ }
11888
+ ],
11889
+ "summary": "List Agent Templates",
11890
+ "tags": [
11891
+ "v1"
11892
+ ],
11893
+ "x-ellipsis-sdk-method": "agents.templates.list",
11894
+ "x-ellipsis-undocumented": true
11895
+ }
11896
+ },
11897
+ "/v1/agents/templates/{template_id}": {
11898
+ "get": {
11899
+ "description": "Return one built-in agent template by slug.",
11900
+ "operationId": "get_agent_template",
11284
11901
  "parameters": [
11902
+ {
11903
+ "in": "path",
11904
+ "name": "template_id",
11905
+ "required": true,
11906
+ "schema": {
11907
+ "title": "Template Id",
11908
+ "type": "string"
11909
+ }
11910
+ },
11285
11911
  {
11286
11912
  "in": "header",
11287
11913
  "name": "user-agent",
@@ -11304,7 +11930,7 @@
11304
11930
  "content": {
11305
11931
  "application/json": {
11306
11932
  "schema": {
11307
- "$ref": "#/components/schemas/AgentDefaults"
11933
+ "$ref": "#/components/schemas/AgentTemplate"
11308
11934
  }
11309
11935
  }
11310
11936
  },
@@ -11330,6 +11956,16 @@
11330
11956
  },
11331
11957
  "description": "The credential may not perform this action, or the account is blocked."
11332
11958
  },
11959
+ "404": {
11960
+ "content": {
11961
+ "application/json": {
11962
+ "schema": {
11963
+ "$ref": "#/components/schemas/ErrorResponse"
11964
+ }
11965
+ }
11966
+ },
11967
+ "description": "No such template."
11968
+ },
11333
11969
  "422": {
11334
11970
  "content": {
11335
11971
  "application/json": {
@@ -11346,16 +11982,79 @@
11346
11982
  "HTTPBearer": []
11347
11983
  }
11348
11984
  ],
11349
- "summary": "List Agent Defaults",
11985
+ "summary": "Get Agent Template",
11350
11986
  "tags": [
11351
11987
  "v1"
11352
11988
  ],
11353
- "x-ellipsis-sdk-method": "agents.defaults.list"
11354
- },
11355
- "put": {
11356
- "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.",
11357
- "operationId": "put_agent_default",
11989
+ "x-ellipsis-sdk-method": "agents.templates.get",
11990
+ "x-ellipsis-undocumented": true
11991
+ }
11992
+ },
11993
+ "/v1/alerts": {
11994
+ "get": {
11995
+ "description": "List budget alerts for the organization, newest first.\n\nOptionally filtered by status and source.\n\nAvailable to all credential types, so an agent can check \"is\nthis org near budget?\" mid-task.",
11996
+ "operationId": "list_alerts",
11358
11997
  "parameters": [
11998
+ {
11999
+ "in": "query",
12000
+ "name": "status",
12001
+ "required": false,
12002
+ "schema": {
12003
+ "anyOf": [
12004
+ {
12005
+ "$ref": "#/components/schemas/AlertStatus"
12006
+ },
12007
+ {
12008
+ "type": "null"
12009
+ }
12010
+ ],
12011
+ "title": "Status"
12012
+ }
12013
+ },
12014
+ {
12015
+ "in": "query",
12016
+ "name": "source",
12017
+ "required": false,
12018
+ "schema": {
12019
+ "anyOf": [
12020
+ {
12021
+ "$ref": "#/components/schemas/AlertSource"
12022
+ },
12023
+ {
12024
+ "type": "null"
12025
+ }
12026
+ ],
12027
+ "title": "Source"
12028
+ }
12029
+ },
12030
+ {
12031
+ "in": "query",
12032
+ "name": "limit",
12033
+ "required": false,
12034
+ "schema": {
12035
+ "default": 100,
12036
+ "maximum": 200,
12037
+ "minimum": 1,
12038
+ "title": "Limit",
12039
+ "type": "integer"
12040
+ }
12041
+ },
12042
+ {
12043
+ "in": "query",
12044
+ "name": "cursor",
12045
+ "required": false,
12046
+ "schema": {
12047
+ "anyOf": [
12048
+ {
12049
+ "type": "string"
12050
+ },
12051
+ {
12052
+ "type": "null"
12053
+ }
12054
+ ],
12055
+ "title": "Cursor"
12056
+ }
12057
+ },
11359
12058
  {
11360
12059
  "in": "header",
11361
12060
  "name": "user-agent",
@@ -11373,37 +12072,17 @@
11373
12072
  }
11374
12073
  }
11375
12074
  ],
11376
- "requestBody": {
11377
- "content": {
11378
- "application/json": {
11379
- "schema": {
11380
- "$ref": "#/components/schemas/PutAgentDefaultRequest"
11381
- }
11382
- }
11383
- },
11384
- "required": true
11385
- },
11386
12075
  "responses": {
11387
12076
  "200": {
11388
12077
  "content": {
11389
12078
  "application/json": {
11390
12079
  "schema": {
11391
- "$ref": "#/components/schemas/AgentDefaults"
12080
+ "$ref": "#/components/schemas/AlertsListResponse"
11392
12081
  }
11393
12082
  }
11394
12083
  },
11395
12084
  "description": "Successful Response"
11396
12085
  },
11397
- "400": {
11398
- "content": {
11399
- "application/json": {
11400
- "schema": {
11401
- "$ref": "#/components/schemas/ErrorResponse"
11402
- }
11403
- }
11404
- },
11405
- "description": "The config is not eligible as a default: its pull request has not merged, or it is disabled."
11406
- },
11407
12086
  "401": {
11408
12087
  "content": {
11409
12088
  "application/json": {
@@ -11424,16 +12103,6 @@
11424
12103
  },
11425
12104
  "description": "The credential may not perform this action, or the account is blocked."
11426
12105
  },
11427
- "404": {
11428
- "content": {
11429
- "application/json": {
11430
- "schema": {
11431
- "$ref": "#/components/schemas/ErrorResponse"
11432
- }
11433
- }
11434
- },
11435
- "description": "The config or repository was not found in your account."
11436
- },
11437
12106
  "422": {
11438
12107
  "content": {
11439
12108
  "application/json": {
@@ -11450,18 +12119,28 @@
11450
12119
  "HTTPBearer": []
11451
12120
  }
11452
12121
  ],
11453
- "summary": "Put Agent Default",
12122
+ "summary": "List Alerts",
11454
12123
  "tags": [
11455
12124
  "v1"
11456
12125
  ],
11457
- "x-ellipsis-sdk-method": "agents.defaults.set"
12126
+ "x-ellipsis-sdk-method": "alerts.list",
12127
+ "x-ellipsis-undocumented": true
11458
12128
  }
11459
12129
  },
11460
- "/v1/agents/templates": {
12130
+ "/v1/alerts/{alert_id}": {
11461
12131
  "get": {
11462
- "description": "List the built-in starter agent templates.\n\nBehind auth but not account-scoped \u2014 the data is static\nproduct content shared by the dashboard, landing site, and CLI.",
11463
- "operationId": "list_agent_templates",
12132
+ "description": "Return one alert by id.\n\n404 if it doesn't exist or belongs to another organization.",
12133
+ "operationId": "get_alert",
11464
12134
  "parameters": [
12135
+ {
12136
+ "in": "path",
12137
+ "name": "alert_id",
12138
+ "required": true,
12139
+ "schema": {
12140
+ "title": "Alert Id",
12141
+ "type": "string"
12142
+ }
12143
+ },
11465
12144
  {
11466
12145
  "in": "header",
11467
12146
  "name": "user-agent",
@@ -11484,7 +12163,7 @@
11484
12163
  "content": {
11485
12164
  "application/json": {
11486
12165
  "schema": {
11487
- "$ref": "#/components/schemas/AgentTemplatesListResponse"
12166
+ "$ref": "#/components/schemas/AlertResponse"
11488
12167
  }
11489
12168
  }
11490
12169
  },
@@ -11510,6 +12189,16 @@
11510
12189
  },
11511
12190
  "description": "The credential may not perform this action, or the account is blocked."
11512
12191
  },
12192
+ "404": {
12193
+ "content": {
12194
+ "application/json": {
12195
+ "schema": {
12196
+ "$ref": "#/components/schemas/ErrorResponse"
12197
+ }
12198
+ }
12199
+ },
12200
+ "description": "No such alert in your account."
12201
+ },
11513
12202
  "422": {
11514
12203
  "content": {
11515
12204
  "application/json": {
@@ -11526,24 +12215,25 @@
11526
12215
  "HTTPBearer": []
11527
12216
  }
11528
12217
  ],
11529
- "summary": "List Agent Templates",
12218
+ "summary": "Get Alert",
11530
12219
  "tags": [
11531
12220
  "v1"
11532
12221
  ],
11533
- "x-ellipsis-sdk-method": "agents.templates.list"
12222
+ "x-ellipsis-sdk-method": "alerts.get",
12223
+ "x-ellipsis-undocumented": true
11534
12224
  }
11535
12225
  },
11536
- "/v1/agents/templates/{template_id}": {
11537
- "get": {
11538
- "description": "Return one built-in agent template by slug.",
11539
- "operationId": "get_agent_template",
12226
+ "/v1/alerts/{alert_id}/dismiss": {
12227
+ "post": {
12228
+ "description": "Dismiss an open alert and return it.\n\n409 when the alert is not open; 404 when it doesn't exist.",
12229
+ "operationId": "dismiss_alert",
11540
12230
  "parameters": [
11541
12231
  {
11542
12232
  "in": "path",
11543
- "name": "template_id",
12233
+ "name": "alert_id",
11544
12234
  "required": true,
11545
12235
  "schema": {
11546
- "title": "Template Id",
12236
+ "title": "Alert Id",
11547
12237
  "type": "string"
11548
12238
  }
11549
12239
  },
@@ -11569,7 +12259,7 @@
11569
12259
  "content": {
11570
12260
  "application/json": {
11571
12261
  "schema": {
11572
- "$ref": "#/components/schemas/AgentTemplate"
12262
+ "$ref": "#/components/schemas/AlertResponse"
11573
12263
  }
11574
12264
  }
11575
12265
  },
@@ -11603,7 +12293,17 @@
11603
12293
  }
11604
12294
  }
11605
12295
  },
11606
- "description": "No such template."
12296
+ "description": "No such alert in your account."
12297
+ },
12298
+ "409": {
12299
+ "content": {
12300
+ "application/json": {
12301
+ "schema": {
12302
+ "$ref": "#/components/schemas/ErrorResponse"
12303
+ }
12304
+ }
12305
+ },
12306
+ "description": "The alert is not open."
11607
12307
  },
11608
12308
  "422": {
11609
12309
  "content": {
@@ -11621,76 +12321,140 @@
11621
12321
  "HTTPBearer": []
11622
12322
  }
11623
12323
  ],
11624
- "summary": "Get Agent Template",
12324
+ "summary": "Dismiss Alert",
11625
12325
  "tags": [
11626
12326
  "v1"
11627
12327
  ],
11628
- "x-ellipsis-sdk-method": "agents.templates.get"
12328
+ "x-ellipsis-sdk-method": "alerts.dismiss",
12329
+ "x-ellipsis-undocumented": true
11629
12330
  }
11630
12331
  },
11631
- "/v1/alerts": {
12332
+ "/v1/analytics/metrics": {
11632
12333
  "get": {
11633
- "description": "List budget alerts for the organization, newest first.\n\nOptionally filtered by status and source.\n\nAvailable to all credential types, so an agent can check \"is\nthis org near budget?\" mid-task.",
11634
- "operationId": "list_alerts",
12334
+ "description": "Return PR and review analytics metrics.\n\nThe same data as the analytics dashboard.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days). account_type in all|user|bot scopes the authors (bot =\nthe apps/agents). Available to all credential types: the\nresponses expose the organization's own GitHub PR/review activity,\nno secrets.",
12335
+ "operationId": "get_analytics_metrics",
11635
12336
  "parameters": [
11636
12337
  {
11637
12338
  "in": "query",
11638
- "name": "status",
12339
+ "name": "days",
11639
12340
  "required": false,
11640
12341
  "schema": {
11641
12342
  "anyOf": [
11642
12343
  {
11643
- "$ref": "#/components/schemas/AlertStatus"
12344
+ "type": "integer"
12345
+ },
12346
+ {
12347
+ "type": "null"
12348
+ }
12349
+ ],
12350
+ "title": "Days"
12351
+ }
12352
+ },
12353
+ {
12354
+ "in": "query",
12355
+ "name": "start",
12356
+ "required": false,
12357
+ "schema": {
12358
+ "anyOf": [
12359
+ {
12360
+ "format": "date-time",
12361
+ "type": "string"
12362
+ },
12363
+ {
12364
+ "type": "null"
12365
+ }
12366
+ ],
12367
+ "title": "Start"
12368
+ }
12369
+ },
12370
+ {
12371
+ "in": "query",
12372
+ "name": "end",
12373
+ "required": false,
12374
+ "schema": {
12375
+ "anyOf": [
12376
+ {
12377
+ "format": "date-time",
12378
+ "type": "string"
12379
+ },
12380
+ {
12381
+ "type": "null"
12382
+ }
12383
+ ],
12384
+ "title": "End"
12385
+ }
12386
+ },
12387
+ {
12388
+ "description": "Filter to repositories by \"owner/name\".",
12389
+ "in": "query",
12390
+ "name": "repo",
12391
+ "required": false,
12392
+ "schema": {
12393
+ "anyOf": [
12394
+ {
12395
+ "items": {
12396
+ "type": "string"
12397
+ },
12398
+ "type": "array"
11644
12399
  },
11645
12400
  {
11646
12401
  "type": "null"
11647
12402
  }
11648
12403
  ],
11649
- "title": "Status"
12404
+ "description": "Filter to repositories by \"owner/name\".",
12405
+ "title": "Repo"
11650
12406
  }
11651
12407
  },
11652
12408
  {
12409
+ "description": "Filter by PR-author login(s).",
11653
12410
  "in": "query",
11654
- "name": "source",
12411
+ "name": "author",
11655
12412
  "required": false,
11656
12413
  "schema": {
11657
12414
  "anyOf": [
11658
12415
  {
11659
- "$ref": "#/components/schemas/AlertSource"
12416
+ "items": {
12417
+ "type": "string"
12418
+ },
12419
+ "type": "array"
11660
12420
  },
11661
12421
  {
11662
12422
  "type": "null"
11663
12423
  }
11664
12424
  ],
11665
- "title": "Source"
12425
+ "description": "Filter by PR-author login(s).",
12426
+ "title": "Author"
11666
12427
  }
11667
12428
  },
11668
12429
  {
11669
12430
  "in": "query",
11670
- "name": "limit",
12431
+ "name": "account_type",
11671
12432
  "required": false,
11672
12433
  "schema": {
11673
- "default": 100,
11674
- "maximum": 200,
11675
- "minimum": 1,
11676
- "title": "Limit",
11677
- "type": "integer"
12434
+ "default": "all",
12435
+ "title": "Account Type",
12436
+ "type": "string"
11678
12437
  }
11679
12438
  },
11680
12439
  {
12440
+ "description": "Filter by parent-PR status (open|draft|merged|closed).",
11681
12441
  "in": "query",
11682
- "name": "cursor",
12442
+ "name": "status",
11683
12443
  "required": false,
11684
12444
  "schema": {
11685
12445
  "anyOf": [
11686
12446
  {
11687
- "type": "string"
12447
+ "items": {
12448
+ "type": "string"
12449
+ },
12450
+ "type": "array"
11688
12451
  },
11689
12452
  {
11690
12453
  "type": "null"
11691
12454
  }
11692
12455
  ],
11693
- "title": "Cursor"
12456
+ "description": "Filter by parent-PR status (open|draft|merged|closed).",
12457
+ "title": "Status"
11694
12458
  }
11695
12459
  },
11696
12460
  {
@@ -11715,12 +12479,22 @@
11715
12479
  "content": {
11716
12480
  "application/json": {
11717
12481
  "schema": {
11718
- "$ref": "#/components/schemas/AlertsListResponse"
12482
+ "$ref": "#/components/schemas/GetAnalyticsMetricsResponse"
11719
12483
  }
11720
12484
  }
11721
12485
  },
11722
12486
  "description": "Successful Response"
11723
12487
  },
12488
+ "400": {
12489
+ "content": {
12490
+ "application/json": {
12491
+ "schema": {
12492
+ "$ref": "#/components/schemas/ErrorResponse"
12493
+ }
12494
+ }
12495
+ },
12496
+ "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
12497
+ },
11724
12498
  "401": {
11725
12499
  "content": {
11726
12500
  "application/json": {
@@ -11757,120 +12531,143 @@
11757
12531
  "HTTPBearer": []
11758
12532
  }
11759
12533
  ],
11760
- "summary": "List Alerts",
12534
+ "summary": "Get Analytics Metrics",
11761
12535
  "tags": [
11762
12536
  "v1"
11763
12537
  ],
11764
- "x-ellipsis-sdk-method": "alerts.list"
12538
+ "x-ellipsis-sdk-method": "analytics.metrics",
12539
+ "x-ellipsis-undocumented": true
11765
12540
  }
11766
12541
  },
11767
- "/v1/alerts/{alert_id}": {
12542
+ "/v1/analytics/pull-requests": {
11768
12543
  "get": {
11769
- "description": "Return one alert by id.\n\n404 if it doesn't exist or belongs to another organization.",
11770
- "operationId": "get_alert",
12544
+ "description": "Return pull-request analytics.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days).",
12545
+ "operationId": "get_analytics_pull_requests",
11771
12546
  "parameters": [
11772
12547
  {
11773
- "in": "path",
11774
- "name": "alert_id",
11775
- "required": true,
12548
+ "in": "query",
12549
+ "name": "days",
12550
+ "required": false,
11776
12551
  "schema": {
11777
- "title": "Alert Id",
11778
- "type": "string"
12552
+ "anyOf": [
12553
+ {
12554
+ "type": "integer"
12555
+ },
12556
+ {
12557
+ "type": "null"
12558
+ }
12559
+ ],
12560
+ "title": "Days"
11779
12561
  }
11780
12562
  },
11781
12563
  {
11782
- "in": "header",
11783
- "name": "user-agent",
12564
+ "in": "query",
12565
+ "name": "start",
11784
12566
  "required": false,
11785
12567
  "schema": {
11786
12568
  "anyOf": [
11787
12569
  {
12570
+ "format": "date-time",
11788
12571
  "type": "string"
11789
12572
  },
11790
12573
  {
11791
12574
  "type": "null"
11792
12575
  }
11793
12576
  ],
11794
- "title": "User-Agent"
12577
+ "title": "Start"
11795
12578
  }
11796
- }
11797
- ],
11798
- "responses": {
11799
- "200": {
11800
- "content": {
11801
- "application/json": {
11802
- "schema": {
11803
- "$ref": "#/components/schemas/AlertResponse"
11804
- }
11805
- }
11806
- },
11807
- "description": "Successful Response"
11808
12579
  },
11809
- "401": {
11810
- "content": {
11811
- "application/json": {
11812
- "schema": {
11813
- "$ref": "#/components/schemas/ErrorResponse"
12580
+ {
12581
+ "in": "query",
12582
+ "name": "end",
12583
+ "required": false,
12584
+ "schema": {
12585
+ "anyOf": [
12586
+ {
12587
+ "format": "date-time",
12588
+ "type": "string"
12589
+ },
12590
+ {
12591
+ "type": "null"
11814
12592
  }
11815
- }
11816
- },
11817
- "description": "The bearer token is missing, invalid, or revoked."
12593
+ ],
12594
+ "title": "End"
12595
+ }
11818
12596
  },
11819
- "403": {
11820
- "content": {
11821
- "application/json": {
11822
- "schema": {
11823
- "$ref": "#/components/schemas/ErrorResponse"
12597
+ {
12598
+ "in": "query",
12599
+ "name": "account_type",
12600
+ "required": false,
12601
+ "schema": {
12602
+ "anyOf": [
12603
+ {
12604
+ "items": {
12605
+ "type": "string"
12606
+ },
12607
+ "type": "array"
12608
+ },
12609
+ {
12610
+ "type": "null"
11824
12611
  }
11825
- }
11826
- },
11827
- "description": "The credential may not perform this action, or the account is blocked."
12612
+ ],
12613
+ "title": "Account Type"
12614
+ }
11828
12615
  },
11829
- "404": {
11830
- "content": {
11831
- "application/json": {
11832
- "schema": {
11833
- "$ref": "#/components/schemas/ErrorResponse"
12616
+ {
12617
+ "in": "query",
12618
+ "name": "repository_id",
12619
+ "required": false,
12620
+ "schema": {
12621
+ "anyOf": [
12622
+ {
12623
+ "items": {
12624
+ "type": "integer"
12625
+ },
12626
+ "type": "array"
12627
+ },
12628
+ {
12629
+ "type": "null"
11834
12630
  }
11835
- }
11836
- },
11837
- "description": "No such alert in your account."
12631
+ ],
12632
+ "title": "Repository Id"
12633
+ }
11838
12634
  },
11839
- "422": {
11840
- "content": {
11841
- "application/json": {
11842
- "schema": {
11843
- "$ref": "#/components/schemas/HTTPValidationError"
11844
- }
11845
- }
11846
- },
11847
- "description": "Validation Error"
11848
- }
11849
- },
11850
- "security": [
11851
12635
  {
11852
- "HTTPBearer": []
11853
- }
11854
- ],
11855
- "summary": "Get Alert",
11856
- "tags": [
11857
- "v1"
11858
- ],
11859
- "x-ellipsis-sdk-method": "alerts.get"
11860
- }
11861
- },
11862
- "/v1/alerts/{alert_id}/dismiss": {
11863
- "post": {
11864
- "description": "Dismiss an open alert and return it.\n\n409 when the alert is not open; 404 when it doesn't exist.",
11865
- "operationId": "dismiss_alert",
11866
- "parameters": [
12636
+ "in": "query",
12637
+ "name": "author_id",
12638
+ "required": false,
12639
+ "schema": {
12640
+ "anyOf": [
12641
+ {
12642
+ "items": {
12643
+ "type": "integer"
12644
+ },
12645
+ "type": "array"
12646
+ },
12647
+ {
12648
+ "type": "null"
12649
+ }
12650
+ ],
12651
+ "title": "Author Id"
12652
+ }
12653
+ },
11867
12654
  {
11868
- "in": "path",
11869
- "name": "alert_id",
11870
- "required": true,
12655
+ "in": "query",
12656
+ "name": "status",
12657
+ "required": false,
11871
12658
  "schema": {
11872
- "title": "Alert Id",
11873
- "type": "string"
12659
+ "anyOf": [
12660
+ {
12661
+ "items": {
12662
+ "type": "string"
12663
+ },
12664
+ "type": "array"
12665
+ },
12666
+ {
12667
+ "type": "null"
12668
+ }
12669
+ ],
12670
+ "title": "Status"
11874
12671
  }
11875
12672
  },
11876
12673
  {
@@ -11895,23 +12692,13 @@
11895
12692
  "content": {
11896
12693
  "application/json": {
11897
12694
  "schema": {
11898
- "$ref": "#/components/schemas/AlertResponse"
12695
+ "$ref": "#/components/schemas/GetAnalyticsPullRequestsResponse"
11899
12696
  }
11900
12697
  }
11901
12698
  },
11902
12699
  "description": "Successful Response"
11903
12700
  },
11904
- "401": {
11905
- "content": {
11906
- "application/json": {
11907
- "schema": {
11908
- "$ref": "#/components/schemas/ErrorResponse"
11909
- }
11910
- }
11911
- },
11912
- "description": "The bearer token is missing, invalid, or revoked."
11913
- },
11914
- "403": {
12701
+ "400": {
11915
12702
  "content": {
11916
12703
  "application/json": {
11917
12704
  "schema": {
@@ -11919,9 +12706,9 @@
11919
12706
  }
11920
12707
  }
11921
12708
  },
11922
- "description": "The credential may not perform this action, or the account is blocked."
12709
+ "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
11923
12710
  },
11924
- "404": {
12711
+ "401": {
11925
12712
  "content": {
11926
12713
  "application/json": {
11927
12714
  "schema": {
@@ -11929,9 +12716,9 @@
11929
12716
  }
11930
12717
  }
11931
12718
  },
11932
- "description": "No such alert in your account."
12719
+ "description": "The bearer token is missing, invalid, or revoked."
11933
12720
  },
11934
- "409": {
12721
+ "403": {
11935
12722
  "content": {
11936
12723
  "application/json": {
11937
12724
  "schema": {
@@ -11939,7 +12726,7 @@
11939
12726
  }
11940
12727
  }
11941
12728
  },
11942
- "description": "The alert is not open."
12729
+ "description": "The credential may not perform this action, or the account is blocked."
11943
12730
  },
11944
12731
  "422": {
11945
12732
  "content": {
@@ -11957,17 +12744,18 @@
11957
12744
  "HTTPBearer": []
11958
12745
  }
11959
12746
  ],
11960
- "summary": "Dismiss Alert",
12747
+ "summary": "Get Analytics Pull Requests",
11961
12748
  "tags": [
11962
12749
  "v1"
11963
12750
  ],
11964
- "x-ellipsis-sdk-method": "alerts.dismiss"
12751
+ "x-ellipsis-sdk-method": "analytics.pull_requests",
12752
+ "x-ellipsis-undocumented": true
11965
12753
  }
11966
12754
  },
11967
- "/v1/analytics/metrics": {
12755
+ "/v1/analytics/reviews": {
11968
12756
  "get": {
11969
- "description": "Return PR and review analytics metrics.\n\nThe same data as the analytics dashboard.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days). account_type in all|user|bot scopes the authors (bot =\nthe apps/agents). Available to all credential types: the\nresponses expose the organization's own GitHub PR/review activity,\nno secrets.",
11970
- "operationId": "get_analytics_metrics",
12757
+ "description": "Return code-review analytics.\n\naccount_type scopes reviewers (bot|user|all) \u2014 e.g. \"what apps\nreview the most PRs?\" is the reviewer facets here with\naccount_type=bot. Windowing: pass explicit start/end, or days\n(default: the last 30 days).",
12758
+ "operationId": "get_analytics_reviews",
11971
12759
  "parameters": [
11972
12760
  {
11973
12761
  "in": "query",
@@ -12020,7 +12808,6 @@
12020
12808
  }
12021
12809
  },
12022
12810
  {
12023
- "description": "Filter to repositories by \"owner/name\".",
12024
12811
  "in": "query",
12025
12812
  "name": "repo",
12026
12813
  "required": false,
@@ -12036,12 +12823,11 @@
12036
12823
  "type": "null"
12037
12824
  }
12038
12825
  ],
12039
- "description": "Filter to repositories by \"owner/name\".",
12040
12826
  "title": "Repo"
12041
12827
  }
12042
12828
  },
12043
12829
  {
12044
- "description": "Filter by PR-author login(s).",
12830
+ "description": "Filter by reviewer login(s).",
12045
12831
  "in": "query",
12046
12832
  "name": "author",
12047
12833
  "required": false,
@@ -12057,7 +12843,7 @@
12057
12843
  "type": "null"
12058
12844
  }
12059
12845
  ],
12060
- "description": "Filter by PR-author login(s).",
12846
+ "description": "Filter by reviewer login(s).",
12061
12847
  "title": "Author"
12062
12848
  }
12063
12849
  },
@@ -12072,9 +12858,8 @@
12072
12858
  }
12073
12859
  },
12074
12860
  {
12075
- "description": "Filter by parent-PR status (open|draft|merged|closed).",
12076
12861
  "in": "query",
12077
- "name": "status",
12862
+ "name": "review_state",
12078
12863
  "required": false,
12079
12864
  "schema": {
12080
12865
  "anyOf": [
@@ -12088,8 +12873,7 @@
12088
12873
  "type": "null"
12089
12874
  }
12090
12875
  ],
12091
- "description": "Filter by parent-PR status (open|draft|merged|closed).",
12092
- "title": "Status"
12876
+ "title": "Review State"
12093
12877
  }
12094
12878
  },
12095
12879
  {
@@ -12114,7 +12898,7 @@
12114
12898
  "content": {
12115
12899
  "application/json": {
12116
12900
  "schema": {
12117
- "$ref": "#/components/schemas/GetAnalyticsMetricsResponse"
12901
+ "$ref": "#/components/schemas/GetAnalyticsReviewsResponse"
12118
12902
  }
12119
12903
  }
12120
12904
  },
@@ -12166,144 +12950,287 @@
12166
12950
  "HTTPBearer": []
12167
12951
  }
12168
12952
  ],
12169
- "summary": "Get Analytics Metrics",
12953
+ "summary": "Get Analytics Reviews",
12170
12954
  "tags": [
12171
12955
  "v1"
12172
12956
  ],
12173
- "x-ellipsis-sdk-method": "analytics.metrics"
12957
+ "x-ellipsis-sdk-method": "analytics.reviews",
12958
+ "x-ellipsis-undocumented": true
12174
12959
  }
12175
12960
  },
12176
- "/v1/analytics/pull-requests": {
12177
- "get": {
12178
- "description": "Return pull-request analytics.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days).",
12179
- "operationId": "get_analytics_pull_requests",
12180
- "parameters": [
12181
- {
12182
- "in": "query",
12183
- "name": "days",
12184
- "required": false,
12185
- "schema": {
12186
- "anyOf": [
12187
- {
12188
- "type": "integer"
12189
- },
12190
- {
12191
- "type": "null"
12192
- }
12193
- ],
12194
- "title": "Days"
12961
+ "/v1/auth/cli/poll": {
12962
+ "post": {
12963
+ "description": "Poll a device-code auth flow for its token.\n\nUnauthenticated; the device code identifies the flow.",
12964
+ "operationId": "cli_auth_poll",
12965
+ "requestBody": {
12966
+ "content": {
12967
+ "application/json": {
12968
+ "schema": {
12969
+ "$ref": "#/components/schemas/CliAuthPollRequest"
12970
+ }
12195
12971
  }
12196
12972
  },
12197
- {
12198
- "in": "query",
12199
- "name": "start",
12200
- "required": false,
12201
- "schema": {
12202
- "anyOf": [
12203
- {
12204
- "format": "date-time",
12205
- "type": "string"
12206
- },
12207
- {
12208
- "type": "null"
12973
+ "required": true
12974
+ },
12975
+ "responses": {
12976
+ "200": {
12977
+ "content": {
12978
+ "application/json": {
12979
+ "schema": {
12980
+ "$ref": "#/components/schemas/PollCliAuthResponse"
12209
12981
  }
12210
- ],
12211
- "title": "Start"
12212
- }
12982
+ }
12983
+ },
12984
+ "description": "Successful Response"
12985
+ },
12986
+ "401": {
12987
+ "content": {
12988
+ "application/json": {
12989
+ "schema": {
12990
+ "$ref": "#/components/schemas/ErrorResponse"
12991
+ }
12992
+ }
12993
+ },
12994
+ "description": "The bearer token is missing, invalid, or revoked."
12995
+ },
12996
+ "403": {
12997
+ "content": {
12998
+ "application/json": {
12999
+ "schema": {
13000
+ "$ref": "#/components/schemas/ErrorResponse"
13001
+ }
13002
+ }
13003
+ },
13004
+ "description": "The credential may not perform this action, or the account is blocked."
13005
+ },
13006
+ "404": {
13007
+ "content": {
13008
+ "application/json": {
13009
+ "schema": {
13010
+ "$ref": "#/components/schemas/ErrorResponse"
13011
+ }
13012
+ }
13013
+ },
13014
+ "description": "Unknown device code."
13015
+ },
13016
+ "422": {
13017
+ "content": {
13018
+ "application/json": {
13019
+ "schema": {
13020
+ "$ref": "#/components/schemas/HTTPValidationError"
13021
+ }
13022
+ }
13023
+ },
13024
+ "description": "Validation Error"
13025
+ }
13026
+ },
13027
+ "summary": "Cli Auth Poll",
13028
+ "tags": [
13029
+ "v1"
13030
+ ],
13031
+ "x-ellipsis-sdk-method": "auth.cli.poll",
13032
+ "x-ellipsis-undocumented": true
13033
+ }
13034
+ },
13035
+ "/v1/auth/cli/start": {
13036
+ "post": {
13037
+ "description": "Start a device-code auth flow for the CLI.\n\nUnauthenticated: the CLI has no credential yet \u2014 that's what\nit's obtaining. The human authorizes out-of-band in the\ndashboard.",
13038
+ "operationId": "cli_auth_start",
13039
+ "responses": {
13040
+ "201": {
13041
+ "content": {
13042
+ "application/json": {
13043
+ "schema": {
13044
+ "$ref": "#/components/schemas/StartCliAuthResponse"
13045
+ }
13046
+ }
13047
+ },
13048
+ "description": "Successful Response"
13049
+ },
13050
+ "401": {
13051
+ "content": {
13052
+ "application/json": {
13053
+ "schema": {
13054
+ "$ref": "#/components/schemas/ErrorResponse"
13055
+ }
13056
+ }
13057
+ },
13058
+ "description": "The bearer token is missing, invalid, or revoked."
12213
13059
  },
13060
+ "403": {
13061
+ "content": {
13062
+ "application/json": {
13063
+ "schema": {
13064
+ "$ref": "#/components/schemas/ErrorResponse"
13065
+ }
13066
+ }
13067
+ },
13068
+ "description": "The credential may not perform this action, or the account is blocked."
13069
+ }
13070
+ },
13071
+ "summary": "Cli Auth Start",
13072
+ "tags": [
13073
+ "v1"
13074
+ ],
13075
+ "x-ellipsis-sdk-method": "auth.cli.start",
13076
+ "x-ellipsis-undocumented": true
13077
+ }
13078
+ },
13079
+ "/v1/budget": {
13080
+ "get": {
13081
+ "description": "Return the caller's current budget summary.",
13082
+ "operationId": "get_budget",
13083
+ "parameters": [
12214
13084
  {
12215
- "in": "query",
12216
- "name": "end",
13085
+ "in": "header",
13086
+ "name": "user-agent",
12217
13087
  "required": false,
12218
13088
  "schema": {
12219
13089
  "anyOf": [
12220
13090
  {
12221
- "format": "date-time",
12222
13091
  "type": "string"
12223
13092
  },
12224
13093
  {
12225
13094
  "type": "null"
12226
13095
  }
12227
13096
  ],
12228
- "title": "End"
13097
+ "title": "User-Agent"
12229
13098
  }
13099
+ }
13100
+ ],
13101
+ "responses": {
13102
+ "200": {
13103
+ "content": {
13104
+ "application/json": {
13105
+ "schema": {
13106
+ "$ref": "#/components/schemas/BudgetSummary"
13107
+ }
13108
+ }
13109
+ },
13110
+ "description": "Successful Response"
12230
13111
  },
12231
- {
12232
- "in": "query",
12233
- "name": "account_type",
12234
- "required": false,
12235
- "schema": {
12236
- "anyOf": [
12237
- {
12238
- "items": {
12239
- "type": "string"
12240
- },
12241
- "type": "array"
12242
- },
12243
- {
12244
- "type": "null"
13112
+ "401": {
13113
+ "content": {
13114
+ "application/json": {
13115
+ "schema": {
13116
+ "$ref": "#/components/schemas/ErrorResponse"
12245
13117
  }
12246
- ],
12247
- "title": "Account Type"
12248
- }
13118
+ }
13119
+ },
13120
+ "description": "The bearer token is missing, invalid, or revoked."
12249
13121
  },
12250
- {
12251
- "in": "query",
12252
- "name": "repository_id",
12253
- "required": false,
12254
- "schema": {
12255
- "anyOf": [
12256
- {
12257
- "items": {
12258
- "type": "integer"
12259
- },
12260
- "type": "array"
12261
- },
12262
- {
12263
- "type": "null"
13122
+ "403": {
13123
+ "content": {
13124
+ "application/json": {
13125
+ "schema": {
13126
+ "$ref": "#/components/schemas/ErrorResponse"
12264
13127
  }
12265
- ],
12266
- "title": "Repository Id"
12267
- }
13128
+ }
13129
+ },
13130
+ "description": "The credential may not perform this action, or the account is blocked."
12268
13131
  },
13132
+ "422": {
13133
+ "content": {
13134
+ "application/json": {
13135
+ "schema": {
13136
+ "$ref": "#/components/schemas/HTTPValidationError"
13137
+ }
13138
+ }
13139
+ },
13140
+ "description": "Validation Error"
13141
+ }
13142
+ },
13143
+ "security": [
13144
+ {
13145
+ "HTTPBearer": []
13146
+ }
13147
+ ],
13148
+ "summary": "Get Budget",
13149
+ "tags": [
13150
+ "v1"
13151
+ ],
13152
+ "x-ellipsis-sdk-method": "budget"
13153
+ }
13154
+ },
13155
+ "/v1/environments": {
13156
+ "get": {
13157
+ "description": "List saved environments.",
13158
+ "operationId": "list_environments",
13159
+ "parameters": [
12269
13160
  {
12270
- "in": "query",
12271
- "name": "author_id",
13161
+ "in": "header",
13162
+ "name": "user-agent",
12272
13163
  "required": false,
12273
13164
  "schema": {
12274
13165
  "anyOf": [
12275
13166
  {
12276
- "items": {
12277
- "type": "integer"
12278
- },
12279
- "type": "array"
13167
+ "type": "string"
12280
13168
  },
12281
13169
  {
12282
13170
  "type": "null"
12283
13171
  }
12284
13172
  ],
12285
- "title": "Author Id"
13173
+ "title": "User-Agent"
12286
13174
  }
13175
+ }
13176
+ ],
13177
+ "responses": {
13178
+ "200": {
13179
+ "content": {
13180
+ "application/json": {
13181
+ "schema": {
13182
+ "$ref": "#/components/schemas/EnvironmentsListResponse"
13183
+ }
13184
+ }
13185
+ },
13186
+ "description": "Successful Response"
12287
13187
  },
12288
- {
12289
- "in": "query",
12290
- "name": "status",
12291
- "required": false,
12292
- "schema": {
12293
- "anyOf": [
12294
- {
12295
- "items": {
12296
- "type": "string"
12297
- },
12298
- "type": "array"
12299
- },
12300
- {
12301
- "type": "null"
13188
+ "401": {
13189
+ "content": {
13190
+ "application/json": {
13191
+ "schema": {
13192
+ "$ref": "#/components/schemas/ErrorResponse"
12302
13193
  }
12303
- ],
12304
- "title": "Status"
12305
- }
13194
+ }
13195
+ },
13196
+ "description": "The bearer token is missing, invalid, or revoked."
13197
+ },
13198
+ "403": {
13199
+ "content": {
13200
+ "application/json": {
13201
+ "schema": {
13202
+ "$ref": "#/components/schemas/ErrorResponse"
13203
+ }
13204
+ }
13205
+ },
13206
+ "description": "The credential may not perform this action, or the account is blocked."
12306
13207
  },
13208
+ "422": {
13209
+ "content": {
13210
+ "application/json": {
13211
+ "schema": {
13212
+ "$ref": "#/components/schemas/HTTPValidationError"
13213
+ }
13214
+ }
13215
+ },
13216
+ "description": "Validation Error"
13217
+ }
13218
+ },
13219
+ "security": [
13220
+ {
13221
+ "HTTPBearer": []
13222
+ }
13223
+ ],
13224
+ "summary": "List Environments",
13225
+ "tags": [
13226
+ "v1"
13227
+ ],
13228
+ "x-ellipsis-sdk-method": "environments.list"
13229
+ },
13230
+ "post": {
13231
+ "description": "Create an environment, managed through the API: no file, live\nimmediately. To define it in a repository instead, commit a\n`kind: environment` YAML under an agents directory.\n\n409 when another live environment already holds the name.",
13232
+ "operationId": "create_environment",
13233
+ "parameters": [
12307
13234
  {
12308
13235
  "in": "header",
12309
13236
  "name": "user-agent",
@@ -12321,12 +13248,22 @@
12321
13248
  }
12322
13249
  }
12323
13250
  ],
13251
+ "requestBody": {
13252
+ "content": {
13253
+ "application/json": {
13254
+ "schema": {
13255
+ "$ref": "#/components/schemas/CreateEnvironmentRequest"
13256
+ }
13257
+ }
13258
+ },
13259
+ "required": true
13260
+ },
12324
13261
  "responses": {
12325
- "200": {
13262
+ "201": {
12326
13263
  "content": {
12327
13264
  "application/json": {
12328
13265
  "schema": {
12329
- "$ref": "#/components/schemas/GetAnalyticsPullRequestsResponse"
13266
+ "$ref": "#/components/schemas/EnvironmentResponse"
12330
13267
  }
12331
13268
  }
12332
13269
  },
@@ -12340,7 +13277,7 @@
12340
13277
  }
12341
13278
  }
12342
13279
  },
12343
- "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
13280
+ "description": "The environment is invalid."
12344
13281
  },
12345
13282
  "401": {
12346
13283
  "content": {
@@ -12362,15 +13299,25 @@
12362
13299
  },
12363
13300
  "description": "The credential may not perform this action, or the account is blocked."
12364
13301
  },
13302
+ "409": {
13303
+ "content": {
13304
+ "application/json": {
13305
+ "schema": {
13306
+ "$ref": "#/components/schemas/ErrorResponse"
13307
+ }
13308
+ }
13309
+ },
13310
+ "description": "An environment with that name already exists."
13311
+ },
12365
13312
  "422": {
12366
13313
  "content": {
12367
13314
  "application/json": {
12368
13315
  "schema": {
12369
- "$ref": "#/components/schemas/HTTPValidationError"
13316
+ "$ref": "#/components/schemas/ErrorResponse"
12370
13317
  }
12371
13318
  }
12372
13319
  },
12373
- "description": "Validation Error"
13320
+ "description": "The environment's name is missing or malformed."
12374
13321
  }
12375
13322
  },
12376
13323
  "security": [
@@ -12378,137 +13325,113 @@
12378
13325
  "HTTPBearer": []
12379
13326
  }
12380
13327
  ],
12381
- "summary": "Get Analytics Pull Requests",
13328
+ "summary": "Create Environment",
12382
13329
  "tags": [
12383
13330
  "v1"
12384
13331
  ],
12385
- "x-ellipsis-sdk-method": "analytics.pull_requests"
13332
+ "x-ellipsis-sdk-method": "environments.create"
12386
13333
  }
12387
13334
  },
12388
- "/v1/analytics/reviews": {
12389
- "get": {
12390
- "description": "Return code-review analytics.\n\naccount_type scopes reviewers (bot|user|all) \u2014 e.g. \"what apps\nreview the most PRs?\" is the reviewer facets here with\naccount_type=bot. Windowing: pass explicit start/end, or days\n(default: the last 30 days).",
12391
- "operationId": "get_analytics_reviews",
13335
+ "/v1/environments/defaults": {
13336
+ "delete": {
13337
+ "description": "Clear a default environment.\n\nAddressed by rung: the account rung (repository omitted) or a\nrepository rung. Refused for sandbox tokens.",
13338
+ "operationId": "delete_environment_default",
12392
13339
  "parameters": [
12393
13340
  {
13341
+ "description": "Repo rung to clear (\"owner/name\"); omit to clear the account default.",
12394
13342
  "in": "query",
12395
- "name": "days",
12396
- "required": false,
12397
- "schema": {
12398
- "anyOf": [
12399
- {
12400
- "type": "integer"
12401
- },
12402
- {
12403
- "type": "null"
12404
- }
12405
- ],
12406
- "title": "Days"
12407
- }
12408
- },
12409
- {
12410
- "in": "query",
12411
- "name": "start",
13343
+ "name": "repository",
12412
13344
  "required": false,
12413
13345
  "schema": {
12414
13346
  "anyOf": [
12415
13347
  {
12416
- "format": "date-time",
12417
13348
  "type": "string"
12418
13349
  },
12419
13350
  {
12420
13351
  "type": "null"
12421
13352
  }
12422
13353
  ],
12423
- "title": "Start"
13354
+ "description": "Repo rung to clear (\"owner/name\"); omit to clear the account default.",
13355
+ "title": "Repository"
12424
13356
  }
12425
13357
  },
12426
13358
  {
12427
- "in": "query",
12428
- "name": "end",
13359
+ "in": "header",
13360
+ "name": "user-agent",
12429
13361
  "required": false,
12430
13362
  "schema": {
12431
13363
  "anyOf": [
12432
13364
  {
12433
- "format": "date-time",
12434
13365
  "type": "string"
12435
13366
  },
12436
13367
  {
12437
13368
  "type": "null"
12438
13369
  }
12439
13370
  ],
12440
- "title": "End"
13371
+ "title": "User-Agent"
12441
13372
  }
13373
+ }
13374
+ ],
13375
+ "responses": {
13376
+ "204": {
13377
+ "description": "Successful Response"
12442
13378
  },
12443
- {
12444
- "in": "query",
12445
- "name": "repo",
12446
- "required": false,
12447
- "schema": {
12448
- "anyOf": [
12449
- {
12450
- "items": {
12451
- "type": "string"
12452
- },
12453
- "type": "array"
12454
- },
12455
- {
12456
- "type": "null"
13379
+ "401": {
13380
+ "content": {
13381
+ "application/json": {
13382
+ "schema": {
13383
+ "$ref": "#/components/schemas/ErrorResponse"
12457
13384
  }
12458
- ],
12459
- "title": "Repo"
12460
- }
13385
+ }
13386
+ },
13387
+ "description": "The bearer token is missing, invalid, or revoked."
12461
13388
  },
12462
- {
12463
- "description": "Filter by reviewer login(s).",
12464
- "in": "query",
12465
- "name": "author",
12466
- "required": false,
12467
- "schema": {
12468
- "anyOf": [
12469
- {
12470
- "items": {
12471
- "type": "string"
12472
- },
12473
- "type": "array"
12474
- },
12475
- {
12476
- "type": "null"
13389
+ "403": {
13390
+ "content": {
13391
+ "application/json": {
13392
+ "schema": {
13393
+ "$ref": "#/components/schemas/ErrorResponse"
12477
13394
  }
12478
- ],
12479
- "description": "Filter by reviewer login(s).",
12480
- "title": "Author"
12481
- }
12482
- },
12483
- {
12484
- "in": "query",
12485
- "name": "account_type",
12486
- "required": false,
12487
- "schema": {
12488
- "default": "all",
12489
- "title": "Account Type",
12490
- "type": "string"
12491
- }
13395
+ }
13396
+ },
13397
+ "description": "The credential may not perform this action, or the account is blocked."
12492
13398
  },
12493
- {
12494
- "in": "query",
12495
- "name": "review_state",
12496
- "required": false,
12497
- "schema": {
12498
- "anyOf": [
12499
- {
12500
- "items": {
12501
- "type": "string"
12502
- },
12503
- "type": "array"
12504
- },
12505
- {
12506
- "type": "null"
13399
+ "404": {
13400
+ "content": {
13401
+ "application/json": {
13402
+ "schema": {
13403
+ "$ref": "#/components/schemas/ErrorResponse"
12507
13404
  }
12508
- ],
12509
- "title": "Review State"
12510
- }
13405
+ }
13406
+ },
13407
+ "description": "No default is set at that rung, or the repository was not found in your account."
12511
13408
  },
13409
+ "422": {
13410
+ "content": {
13411
+ "application/json": {
13412
+ "schema": {
13413
+ "$ref": "#/components/schemas/HTTPValidationError"
13414
+ }
13415
+ }
13416
+ },
13417
+ "description": "Validation Error"
13418
+ }
13419
+ },
13420
+ "security": [
13421
+ {
13422
+ "HTTPBearer": []
13423
+ }
13424
+ ],
13425
+ "summary": "Delete Environment Default",
13426
+ "tags": [
13427
+ "v1"
13428
+ ],
13429
+ "x-ellipsis-sdk-method": "environments.defaults.delete"
13430
+ },
13431
+ "get": {
13432
+ "description": "Get the default environments.\n\nThe account-wide default and the per-repository defaults, as\nenvironment ids. Repo rungs are keyed \"owner/name\".",
13433
+ "operationId": "list_environment_defaults",
13434
+ "parameters": [
12512
13435
  {
12513
13436
  "in": "header",
12514
13437
  "name": "user-agent",
@@ -12531,22 +13454,12 @@
12531
13454
  "content": {
12532
13455
  "application/json": {
12533
13456
  "schema": {
12534
- "$ref": "#/components/schemas/GetAnalyticsReviewsResponse"
13457
+ "$ref": "#/components/schemas/EnvironmentDefaults"
12535
13458
  }
12536
13459
  }
12537
13460
  },
12538
13461
  "description": "Successful Response"
12539
13462
  },
12540
- "400": {
12541
- "content": {
12542
- "application/json": {
12543
- "schema": {
12544
- "$ref": "#/components/schemas/ErrorResponse"
12545
- }
12546
- }
12547
- },
12548
- "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
12549
- },
12550
13463
  "401": {
12551
13464
  "content": {
12552
13465
  "application/json": {
@@ -12583,22 +13496,38 @@
12583
13496
  "HTTPBearer": []
12584
13497
  }
12585
13498
  ],
12586
- "summary": "Get Analytics Reviews",
13499
+ "summary": "List Environment Defaults",
12587
13500
  "tags": [
12588
13501
  "v1"
12589
13502
  ],
12590
- "x-ellipsis-sdk-method": "analytics.reviews"
12591
- }
12592
- },
12593
- "/v1/auth/cli/poll": {
12594
- "post": {
12595
- "description": "Poll a device-code auth flow for its token.\n\nUnauthenticated; the device code identifies the flow.",
12596
- "operationId": "cli_auth_poll",
13503
+ "x-ellipsis-sdk-method": "environments.defaults.list"
13504
+ },
13505
+ "put": {
13506
+ "description": "Set a default environment.\n\nAddressed by rung: the account rung (repository omitted) or a\nrepository rung (\"owner/name\"); the environment by id or name.\nReturns the full resulting ladder. Refused for sandbox tokens.",
13507
+ "operationId": "put_environment_default",
13508
+ "parameters": [
13509
+ {
13510
+ "in": "header",
13511
+ "name": "user-agent",
13512
+ "required": false,
13513
+ "schema": {
13514
+ "anyOf": [
13515
+ {
13516
+ "type": "string"
13517
+ },
13518
+ {
13519
+ "type": "null"
13520
+ }
13521
+ ],
13522
+ "title": "User-Agent"
13523
+ }
13524
+ }
13525
+ ],
12597
13526
  "requestBody": {
12598
13527
  "content": {
12599
13528
  "application/json": {
12600
13529
  "schema": {
12601
- "$ref": "#/components/schemas/CliAuthPollRequest"
13530
+ "$ref": "#/components/schemas/PutEnvironmentDefaultRequest"
12602
13531
  }
12603
13532
  }
12604
13533
  },
@@ -12609,7 +13538,7 @@
12609
13538
  "content": {
12610
13539
  "application/json": {
12611
13540
  "schema": {
12612
- "$ref": "#/components/schemas/PollCliAuthResponse"
13541
+ "$ref": "#/components/schemas/EnvironmentDefaults"
12613
13542
  }
12614
13543
  }
12615
13544
  },
@@ -12643,7 +13572,7 @@
12643
13572
  }
12644
13573
  }
12645
13574
  },
12646
- "description": "Unknown device code."
13575
+ "description": "The environment or repository was not found in your account."
12647
13576
  },
12648
13577
  "422": {
12649
13578
  "content": {
@@ -12656,23 +13585,151 @@
12656
13585
  "description": "Validation Error"
12657
13586
  }
12658
13587
  },
12659
- "summary": "Cli Auth Poll",
13588
+ "security": [
13589
+ {
13590
+ "HTTPBearer": []
13591
+ }
13592
+ ],
13593
+ "summary": "Put Environment Default",
12660
13594
  "tags": [
12661
13595
  "v1"
12662
13596
  ],
12663
- "x-ellipsis-sdk-method": "auth.cli.poll"
13597
+ "x-ellipsis-sdk-method": "environments.defaults.set"
12664
13598
  }
12665
13599
  },
12666
- "/v1/auth/cli/start": {
12667
- "post": {
12668
- "description": "Start a device-code auth flow for the CLI.\n\nUnauthenticated: the CLI has no credential yet \u2014 that's what\nit's obtaining. The human authorizes out-of-band in the\ndashboard.",
12669
- "operationId": "cli_auth_start",
13600
+ "/v1/environments/{environment_id}": {
13601
+ "delete": {
13602
+ "description": "Delete an environment, by id or by name.\n\nAlways succeeds, even while agents still reference it \u2014 their next\nsession start fails with a clear error naming the missing\nenvironment. Past sessions remain readable. Only for environments\nmanaged through this API \u2014 delete the file to remove one defined\nby a repository.",
13603
+ "operationId": "delete_environment",
13604
+ "parameters": [
13605
+ {
13606
+ "in": "path",
13607
+ "name": "environment_id",
13608
+ "required": true,
13609
+ "schema": {
13610
+ "title": "Environment Id",
13611
+ "type": "string"
13612
+ }
13613
+ },
13614
+ {
13615
+ "in": "header",
13616
+ "name": "user-agent",
13617
+ "required": false,
13618
+ "schema": {
13619
+ "anyOf": [
13620
+ {
13621
+ "type": "string"
13622
+ },
13623
+ {
13624
+ "type": "null"
13625
+ }
13626
+ ],
13627
+ "title": "User-Agent"
13628
+ }
13629
+ }
13630
+ ],
12670
13631
  "responses": {
12671
- "201": {
13632
+ "204": {
13633
+ "description": "Successful Response"
13634
+ },
13635
+ "401": {
12672
13636
  "content": {
12673
13637
  "application/json": {
12674
13638
  "schema": {
12675
- "$ref": "#/components/schemas/StartCliAuthResponse"
13639
+ "$ref": "#/components/schemas/ErrorResponse"
13640
+ }
13641
+ }
13642
+ },
13643
+ "description": "The bearer token is missing, invalid, or revoked."
13644
+ },
13645
+ "403": {
13646
+ "content": {
13647
+ "application/json": {
13648
+ "schema": {
13649
+ "$ref": "#/components/schemas/ErrorResponse"
13650
+ }
13651
+ }
13652
+ },
13653
+ "description": "The credential may not perform this action, or the account is blocked."
13654
+ },
13655
+ "404": {
13656
+ "content": {
13657
+ "application/json": {
13658
+ "schema": {
13659
+ "$ref": "#/components/schemas/ErrorResponse"
13660
+ }
13661
+ }
13662
+ },
13663
+ "description": "No such environment in your account."
13664
+ },
13665
+ "409": {
13666
+ "content": {
13667
+ "application/json": {
13668
+ "schema": {
13669
+ "$ref": "#/components/schemas/ErrorResponse"
13670
+ }
13671
+ }
13672
+ },
13673
+ "description": "The environment is defined by a file in a repository; delete that file instead."
13674
+ },
13675
+ "422": {
13676
+ "content": {
13677
+ "application/json": {
13678
+ "schema": {
13679
+ "$ref": "#/components/schemas/HTTPValidationError"
13680
+ }
13681
+ }
13682
+ },
13683
+ "description": "Validation Error"
13684
+ }
13685
+ },
13686
+ "security": [
13687
+ {
13688
+ "HTTPBearer": []
13689
+ }
13690
+ ],
13691
+ "summary": "Delete Environment",
13692
+ "tags": [
13693
+ "v1"
13694
+ ],
13695
+ "x-ellipsis-sdk-method": "environments.delete"
13696
+ },
13697
+ "get": {
13698
+ "description": "Return one saved environment, by id or by name.",
13699
+ "operationId": "get_environment",
13700
+ "parameters": [
13701
+ {
13702
+ "in": "path",
13703
+ "name": "environment_id",
13704
+ "required": true,
13705
+ "schema": {
13706
+ "title": "Environment Id",
13707
+ "type": "string"
13708
+ }
13709
+ },
13710
+ {
13711
+ "in": "header",
13712
+ "name": "user-agent",
13713
+ "required": false,
13714
+ "schema": {
13715
+ "anyOf": [
13716
+ {
13717
+ "type": "string"
13718
+ },
13719
+ {
13720
+ "type": "null"
13721
+ }
13722
+ ],
13723
+ "title": "User-Agent"
13724
+ }
13725
+ }
13726
+ ],
13727
+ "responses": {
13728
+ "200": {
13729
+ "content": {
13730
+ "application/json": {
13731
+ "schema": {
13732
+ "$ref": "#/components/schemas/EnvironmentResponse"
12676
13733
  }
12677
13734
  }
12678
13735
  },
@@ -12697,20 +13754,52 @@
12697
13754
  }
12698
13755
  },
12699
13756
  "description": "The credential may not perform this action, or the account is blocked."
13757
+ },
13758
+ "404": {
13759
+ "content": {
13760
+ "application/json": {
13761
+ "schema": {
13762
+ "$ref": "#/components/schemas/ErrorResponse"
13763
+ }
13764
+ }
13765
+ },
13766
+ "description": "No such environment in your account."
13767
+ },
13768
+ "422": {
13769
+ "content": {
13770
+ "application/json": {
13771
+ "schema": {
13772
+ "$ref": "#/components/schemas/HTTPValidationError"
13773
+ }
13774
+ }
13775
+ },
13776
+ "description": "Validation Error"
12700
13777
  }
12701
13778
  },
12702
- "summary": "Cli Auth Start",
13779
+ "security": [
13780
+ {
13781
+ "HTTPBearer": []
13782
+ }
13783
+ ],
13784
+ "summary": "Get Environment",
12703
13785
  "tags": [
12704
13786
  "v1"
12705
13787
  ],
12706
- "x-ellipsis-sdk-method": "auth.cli.start"
12707
- }
12708
- },
12709
- "/v1/budget": {
12710
- "get": {
12711
- "description": "Return the caller's current budget summary.",
12712
- "operationId": "get_budget",
13788
+ "x-ellipsis-sdk-method": "environments.get"
13789
+ },
13790
+ "put": {
13791
+ "description": "Replace an environment's definition, by id or by name.\n\nThe whole definition is replaced, live at once \u2014 future sessions\nresolve the new body; running sessions keep the one frozen at\ntheir start. Only for environments managed through this API: one\ndefined by a repository file is a 409.",
13792
+ "operationId": "update_environment",
12713
13793
  "parameters": [
13794
+ {
13795
+ "in": "path",
13796
+ "name": "environment_id",
13797
+ "required": true,
13798
+ "schema": {
13799
+ "title": "Environment Id",
13800
+ "type": "string"
13801
+ }
13802
+ },
12714
13803
  {
12715
13804
  "in": "header",
12716
13805
  "name": "user-agent",
@@ -12728,17 +13817,37 @@
12728
13817
  }
12729
13818
  }
12730
13819
  ],
13820
+ "requestBody": {
13821
+ "content": {
13822
+ "application/json": {
13823
+ "schema": {
13824
+ "$ref": "#/components/schemas/UpdateEnvironmentRequest"
13825
+ }
13826
+ }
13827
+ },
13828
+ "required": true
13829
+ },
12731
13830
  "responses": {
12732
13831
  "200": {
12733
13832
  "content": {
12734
13833
  "application/json": {
12735
13834
  "schema": {
12736
- "$ref": "#/components/schemas/BudgetSummary"
13835
+ "$ref": "#/components/schemas/EnvironmentResponse"
12737
13836
  }
12738
13837
  }
12739
13838
  },
12740
13839
  "description": "Successful Response"
12741
13840
  },
13841
+ "400": {
13842
+ "content": {
13843
+ "application/json": {
13844
+ "schema": {
13845
+ "$ref": "#/components/schemas/ErrorResponse"
13846
+ }
13847
+ }
13848
+ },
13849
+ "description": "The environment is invalid."
13850
+ },
12742
13851
  "401": {
12743
13852
  "content": {
12744
13853
  "application/json": {
@@ -12759,15 +13868,35 @@
12759
13868
  },
12760
13869
  "description": "The credential may not perform this action, or the account is blocked."
12761
13870
  },
13871
+ "404": {
13872
+ "content": {
13873
+ "application/json": {
13874
+ "schema": {
13875
+ "$ref": "#/components/schemas/ErrorResponse"
13876
+ }
13877
+ }
13878
+ },
13879
+ "description": "No such environment in your account."
13880
+ },
13881
+ "409": {
13882
+ "content": {
13883
+ "application/json": {
13884
+ "schema": {
13885
+ "$ref": "#/components/schemas/ErrorResponse"
13886
+ }
13887
+ }
13888
+ },
13889
+ "description": "The environment is defined by a file in a repository, or another live environment already holds the new name."
13890
+ },
12762
13891
  "422": {
12763
13892
  "content": {
12764
13893
  "application/json": {
12765
13894
  "schema": {
12766
- "$ref": "#/components/schemas/HTTPValidationError"
13895
+ "$ref": "#/components/schemas/ErrorResponse"
12767
13896
  }
12768
13897
  }
12769
13898
  },
12770
- "description": "Validation Error"
13899
+ "description": "The environment's name is missing or malformed."
12771
13900
  }
12772
13901
  },
12773
13902
  "security": [
@@ -12775,11 +13904,11 @@
12775
13904
  "HTTPBearer": []
12776
13905
  }
12777
13906
  ],
12778
- "summary": "Get Budget",
13907
+ "summary": "Update Environment",
12779
13908
  "tags": [
12780
13909
  "v1"
12781
13910
  ],
12782
- "x-ellipsis-sdk-method": "budget"
13911
+ "x-ellipsis-sdk-method": "environments.update"
12783
13912
  }
12784
13913
  },
12785
13914
  "/v1/files": {
@@ -13916,7 +15045,8 @@
13916
15045
  "tags": [
13917
15046
  "v1"
13918
15047
  ],
13919
- "x-ellipsis-sdk-method": "memories.list"
15048
+ "x-ellipsis-sdk-method": "memories.list",
15049
+ "x-ellipsis-undocumented": true
13920
15050
  },
13921
15051
  "post": {
13922
15052
  "description": "Save a memory for future agent sessions.\n\nMemories are durable lessons shared across the whole\norganization \u2014 conventions, past decisions, known gotchas that an\nagent cannot derive from the repository itself. One concise fact\nper memory; the description is what a reader sees in the index.\n\nCreating never overwrites: a path that already exists is a 409, so\ncorrecting an existing memory is an explicit edit.",
@@ -14010,7 +15140,8 @@
14010
15140
  "tags": [
14011
15141
  "v1"
14012
15142
  ],
14013
- "x-ellipsis-sdk-method": "memories.create"
15143
+ "x-ellipsis-sdk-method": "memories.create",
15144
+ "x-ellipsis-undocumented": true
14014
15145
  }
14015
15146
  },
14016
15147
  "/v1/memories/{memory_id}": {
@@ -14126,7 +15257,8 @@
14126
15257
  "tags": [
14127
15258
  "v1"
14128
15259
  ],
14129
- "x-ellipsis-sdk-method": "memories.delete"
15260
+ "x-ellipsis-sdk-method": "memories.delete",
15261
+ "x-ellipsis-undocumented": true
14130
15262
  },
14131
15263
  "get": {
14132
15264
  "description": "Read one memory's full content.\n\nThe id comes from the index returned by listing memories.",
@@ -14219,7 +15351,8 @@
14219
15351
  "tags": [
14220
15352
  "v1"
14221
15353
  ],
14222
- "x-ellipsis-sdk-method": "memories.get"
15354
+ "x-ellipsis-sdk-method": "memories.get",
15355
+ "x-ellipsis-undocumented": true
14223
15356
  },
14224
15357
  "put": {
14225
15358
  "description": "Correct an existing memory in place.\n\nPass description, content, or both. This never creates a memory (an\nunknown id is a 404) and never moves one \u2014 the path is immutable, so\nrelocating a memory is a delete plus a create.\n\nPass `if_sha256` (from a previous read) to make a concurrent write\na 409 instead of silently overwriting it.",
@@ -14332,7 +15465,8 @@
14332
15465
  "tags": [
14333
15466
  "v1"
14334
15467
  ],
14335
- "x-ellipsis-sdk-method": "memories.edit"
15468
+ "x-ellipsis-sdk-method": "memories.edit",
15469
+ "x-ellipsis-undocumented": true
14336
15470
  }
14337
15471
  },
14338
15472
  "/v1/models": {
@@ -15295,7 +16429,7 @@
15295
16429
  "x-ellipsis-sdk-method": "sessions.list"
15296
16430
  },
15297
16431
  "post": {
15298
- "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.",
16432
+ "description": "Start a cloud agent session.\n\nProvide at most one of config_id (an id or an agent name) or\nconfig; with neither, the account's default-config ladder\nresolves the config. `prompt` is the first message; omit it and\nthe session starts idle, waiting for one. 400 when\ninteractive=false and there is no prompt or input. 422 when the\nagent declares an input schema and the request's input is absent\nor invalid.",
15299
16433
  "operationId": "start_agent_session",
15300
16434
  "parameters": [
15301
16435
  {
@@ -15344,7 +16478,7 @@
15344
16478
  }
15345
16479
  }
15346
16480
  },
15347
- "description": "The request combines incompatible fields (multiple config sources, idle_start with prompt/input, or both override forms), or the config override is invalid."
16481
+ "description": "The request combines incompatible fields (both config sources, or a one-shot run with no prompt or input), or the config override is invalid."
15348
16482
  },
15349
16483
  "401": {
15350
16484
  "content": {
@@ -15374,7 +16508,7 @@
15374
16508
  }
15375
16509
  }
15376
16510
  },
15377
- "description": "The named agent or template does not exist in your account."
16511
+ "description": "The named agent does not exist in your account."
15378
16512
  },
15379
16513
  "409": {
15380
16514
  "content": {
@@ -16642,7 +17776,8 @@
16642
17776
  "tags": [
16643
17777
  "v1"
16644
17778
  ],
16645
- "x-ellipsis-sdk-method": "sessions.ingest_transcript"
17779
+ "x-ellipsis-sdk-method": "sessions.ingest_transcript",
17780
+ "x-ellipsis-undocumented": true
16646
17781
  }
16647
17782
  },
16648
17783
  "/v1/usage": {