@ellipsis-dev/sdk 0.16.0 → 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": {
@@ -6145,7 +6458,7 @@
6145
6458
  "description": "A saved config to replay against. By default the original run's frozen config snapshot is reused.",
6146
6459
  "title": "Config Id"
6147
6460
  },
6148
- "config_override": {
6461
+ "override": {
6149
6462
  "anyOf": [
6150
6463
  {
6151
6464
  "additionalProperties": true,
@@ -6155,20 +6468,8 @@
6155
6468
  "type": "null"
6156
6469
  }
6157
6470
  ],
6158
- "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.",
6159
- "title": "Config Override"
6160
- },
6161
- "config_override_yaml": {
6162
- "anyOf": [
6163
- {
6164
- "type": "string"
6165
- },
6166
- {
6167
- "type": "null"
6168
- }
6169
- ],
6170
- "description": "The same partial-config override as a YAML/JSON string (e.g. read from a file). Mutually exclusive with config_override.",
6171
- "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"
6172
6473
  },
6173
6474
  "prompt": {
6174
6475
  "anyOf": [
@@ -6295,6 +6596,7 @@
6295
6596
  "reviews",
6296
6597
  "configs",
6297
6598
  "defaults",
6599
+ "environments",
6298
6600
  "secrets",
6299
6601
  "templates",
6300
6602
  "integrations",
@@ -8507,6 +8809,10 @@
8507
8809
  "title": "Created At",
8508
8810
  "type": "string"
8509
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
+ },
8510
8816
  "exit_status": {
8511
8817
  "anyOf": [
8512
8818
  {
@@ -8814,6 +9120,36 @@
8814
9120
  "title": "SessionCost",
8815
9121
  "type": "object"
8816
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"
9137
+ },
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."
9148
+ }
9149
+ },
9150
+ "title": "SessionEnvironment",
9151
+ "type": "object"
9152
+ },
8817
9153
  "SessionExecution": {
8818
9154
  "description": "One runtime attempt of a session \u2014 the initial start, a cold wake of a\ndurable conversation, or an infrastructure retry \u2014 including the launch\ncontext the model was actually given.",
8819
9155
  "properties": {
@@ -10018,7 +10354,7 @@
10018
10354
  "type": "null"
10019
10355
  }
10020
10356
  ],
10021
- "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)."
10022
10358
  },
10023
10359
  "config_id": {
10024
10360
  "anyOf": [
@@ -10032,20 +10368,7 @@
10032
10368
  "description": "A saved agent config to run under: its id, or the agent's customer-unique `ellipsis.name`.",
10033
10369
  "title": "Config Id"
10034
10370
  },
10035
- "config_override": {
10036
- "anyOf": [
10037
- {
10038
- "additionalProperties": true,
10039
- "type": "object"
10040
- },
10041
- {
10042
- "type": "null"
10043
- }
10044
- ],
10045
- "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.",
10046
- "title": "Config Override"
10047
- },
10048
- "config_override_yaml": {
10371
+ "environment": {
10049
10372
  "anyOf": [
10050
10373
  {
10051
10374
  "type": "string"
@@ -10054,8 +10377,8 @@
10054
10377
  "type": "null"
10055
10378
  }
10056
10379
  ],
10057
- "description": "The same partial-config override as a YAML/JSON string (e.g. read from a file). Mutually exclusive with config_override.",
10058
- "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"
10059
10382
  },
10060
10383
  "force_rebuild": {
10061
10384
  "default": false,
@@ -10063,12 +10386,6 @@
10063
10386
  "title": "Force Rebuild",
10064
10387
  "type": "boolean"
10065
10388
  },
10066
- "idle_start": {
10067
- "default": false,
10068
- "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).",
10069
- "title": "Idle Start",
10070
- "type": "boolean"
10071
- },
10072
10389
  "input": {
10073
10390
  "anyOf": [
10074
10391
  {
@@ -10082,6 +10399,12 @@
10082
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.",
10083
10400
  "title": "Input"
10084
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
+ },
10085
10408
  "metadata": {
10086
10409
  "additionalProperties": {
10087
10410
  "type": "string"
@@ -10091,19 +10414,20 @@
10091
10414
  "title": "Metadata",
10092
10415
  "type": "object"
10093
10416
  },
10094
- "prompt": {
10417
+ "override": {
10095
10418
  "anyOf": [
10096
10419
  {
10097
- "type": "string"
10420
+ "additionalProperties": true,
10421
+ "type": "object"
10098
10422
  },
10099
10423
  {
10100
10424
  "type": "null"
10101
10425
  }
10102
10426
  ],
10103
- "description": "Per-run instructions appended to the initial query after the config's shared system prompt. Applies regardless of which config source is used.",
10104
- "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"
10105
10429
  },
10106
- "repository": {
10430
+ "prompt": {
10107
10431
  "anyOf": [
10108
10432
  {
10109
10433
  "type": "string"
@@ -10112,10 +10436,10 @@
10112
10436
  "type": "null"
10113
10437
  }
10114
10438
  ],
10115
- "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.",
10116
- "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"
10117
10441
  },
10118
- "template_id": {
10442
+ "repository": {
10119
10443
  "anyOf": [
10120
10444
  {
10121
10445
  "type": "string"
@@ -10124,8 +10448,8 @@
10124
10448
  "type": "null"
10125
10449
  }
10126
10450
  ],
10127
- "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).",
10128
- "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"
10129
10453
  }
10130
10454
  },
10131
10455
  "title": "StartAgentSessionRequest",
@@ -10256,6 +10580,20 @@
10256
10580
  "title": "UpdateAgentConfigRequest",
10257
10581
  "type": "object"
10258
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
+ },
10259
10597
  "UsageDailyPoint": {
10260
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.",
10261
10599
  "properties": {
@@ -10556,7 +10894,7 @@
10556
10894
  "x-ellipsis-sdk-method": "agents.configs.list"
10557
10895
  },
10558
10896
  "post": {
10559
- "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.",
10560
10898
  "operationId": "create_agent_config",
10561
10899
  "parameters": [
10562
10900
  {
@@ -10587,11 +10925,11 @@
10587
10925
  "required": true
10588
10926
  },
10589
10927
  "responses": {
10590
- "200": {
10928
+ "201": {
10591
10929
  "content": {
10592
10930
  "application/json": {
10593
10931
  "schema": {
10594
- "$ref": "#/components/schemas/CreateAgentConfigResponse"
10932
+ "$ref": "#/components/schemas/AgentConfigResponse"
10595
10933
  }
10596
10934
  }
10597
10935
  },
@@ -10605,7 +10943,7 @@
10605
10943
  }
10606
10944
  }
10607
10945
  },
10608
- "description": "Provide exactly one of config or template_id; or the config, path, or target branch is invalid."
10946
+ "description": "The config is invalid."
10609
10947
  },
10610
10948
  "401": {
10611
10949
  "content": {
@@ -10615,19 +10953,9 @@
10615
10953
  }
10616
10954
  }
10617
10955
  },
10618
- "description": "The bearer token is missing, invalid, or revoked."
10619
- },
10620
- "403": {
10621
- "content": {
10622
- "application/json": {
10623
- "schema": {
10624
- "$ref": "#/components/schemas/ErrorResponse"
10625
- }
10626
- }
10627
- },
10628
- "description": "The credential may not perform this action, or the account is blocked."
10956
+ "description": "The bearer token is missing, invalid, or revoked."
10629
10957
  },
10630
- "404": {
10958
+ "403": {
10631
10959
  "content": {
10632
10960
  "application/json": {
10633
10961
  "schema": {
@@ -10635,7 +10963,7 @@
10635
10963
  }
10636
10964
  }
10637
10965
  },
10638
- "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."
10639
10967
  },
10640
10968
  "409": {
10641
10969
  "content": {
@@ -10645,7 +10973,7 @@
10645
10973
  }
10646
10974
  }
10647
10975
  },
10648
- "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."
10649
10977
  },
10650
10978
  "422": {
10651
10979
  "content": {
@@ -11311,9 +11639,275 @@
11311
11639
  "x-ellipsis-sdk-method": "agents.defaults.delete"
11312
11640
  },
11313
11641
  "get": {
11314
- "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.",
11315
- "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",
11316
11901
  "parameters": [
11902
+ {
11903
+ "in": "path",
11904
+ "name": "template_id",
11905
+ "required": true,
11906
+ "schema": {
11907
+ "title": "Template Id",
11908
+ "type": "string"
11909
+ }
11910
+ },
11317
11911
  {
11318
11912
  "in": "header",
11319
11913
  "name": "user-agent",
@@ -11336,7 +11930,7 @@
11336
11930
  "content": {
11337
11931
  "application/json": {
11338
11932
  "schema": {
11339
- "$ref": "#/components/schemas/AgentDefaults"
11933
+ "$ref": "#/components/schemas/AgentTemplate"
11340
11934
  }
11341
11935
  }
11342
11936
  },
@@ -11362,6 +11956,16 @@
11362
11956
  },
11363
11957
  "description": "The credential may not perform this action, or the account is blocked."
11364
11958
  },
11959
+ "404": {
11960
+ "content": {
11961
+ "application/json": {
11962
+ "schema": {
11963
+ "$ref": "#/components/schemas/ErrorResponse"
11964
+ }
11965
+ }
11966
+ },
11967
+ "description": "No such template."
11968
+ },
11365
11969
  "422": {
11366
11970
  "content": {
11367
11971
  "application/json": {
@@ -11378,16 +11982,79 @@
11378
11982
  "HTTPBearer": []
11379
11983
  }
11380
11984
  ],
11381
- "summary": "List Agent Defaults",
11985
+ "summary": "Get Agent Template",
11382
11986
  "tags": [
11383
11987
  "v1"
11384
11988
  ],
11385
- "x-ellipsis-sdk-method": "agents.defaults.list"
11386
- },
11387
- "put": {
11388
- "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.",
11389
- "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",
11390
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
+ },
11391
12058
  {
11392
12059
  "in": "header",
11393
12060
  "name": "user-agent",
@@ -11405,37 +12072,17 @@
11405
12072
  }
11406
12073
  }
11407
12074
  ],
11408
- "requestBody": {
11409
- "content": {
11410
- "application/json": {
11411
- "schema": {
11412
- "$ref": "#/components/schemas/PutAgentDefaultRequest"
11413
- }
11414
- }
11415
- },
11416
- "required": true
11417
- },
11418
12075
  "responses": {
11419
12076
  "200": {
11420
12077
  "content": {
11421
12078
  "application/json": {
11422
12079
  "schema": {
11423
- "$ref": "#/components/schemas/AgentDefaults"
12080
+ "$ref": "#/components/schemas/AlertsListResponse"
11424
12081
  }
11425
12082
  }
11426
12083
  },
11427
12084
  "description": "Successful Response"
11428
12085
  },
11429
- "400": {
11430
- "content": {
11431
- "application/json": {
11432
- "schema": {
11433
- "$ref": "#/components/schemas/ErrorResponse"
11434
- }
11435
- }
11436
- },
11437
- "description": "The config is not eligible as a default: its pull request has not merged, or it is disabled."
11438
- },
11439
12086
  "401": {
11440
12087
  "content": {
11441
12088
  "application/json": {
@@ -11456,16 +12103,6 @@
11456
12103
  },
11457
12104
  "description": "The credential may not perform this action, or the account is blocked."
11458
12105
  },
11459
- "404": {
11460
- "content": {
11461
- "application/json": {
11462
- "schema": {
11463
- "$ref": "#/components/schemas/ErrorResponse"
11464
- }
11465
- }
11466
- },
11467
- "description": "The config or repository was not found in your account."
11468
- },
11469
12106
  "422": {
11470
12107
  "content": {
11471
12108
  "application/json": {
@@ -11482,18 +12119,28 @@
11482
12119
  "HTTPBearer": []
11483
12120
  }
11484
12121
  ],
11485
- "summary": "Put Agent Default",
12122
+ "summary": "List Alerts",
11486
12123
  "tags": [
11487
12124
  "v1"
11488
12125
  ],
11489
- "x-ellipsis-sdk-method": "agents.defaults.set"
12126
+ "x-ellipsis-sdk-method": "alerts.list",
12127
+ "x-ellipsis-undocumented": true
11490
12128
  }
11491
12129
  },
11492
- "/v1/agents/templates": {
12130
+ "/v1/alerts/{alert_id}": {
11493
12131
  "get": {
11494
- "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.",
11495
- "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",
11496
12134
  "parameters": [
12135
+ {
12136
+ "in": "path",
12137
+ "name": "alert_id",
12138
+ "required": true,
12139
+ "schema": {
12140
+ "title": "Alert Id",
12141
+ "type": "string"
12142
+ }
12143
+ },
11497
12144
  {
11498
12145
  "in": "header",
11499
12146
  "name": "user-agent",
@@ -11516,7 +12163,7 @@
11516
12163
  "content": {
11517
12164
  "application/json": {
11518
12165
  "schema": {
11519
- "$ref": "#/components/schemas/AgentTemplatesListResponse"
12166
+ "$ref": "#/components/schemas/AlertResponse"
11520
12167
  }
11521
12168
  }
11522
12169
  },
@@ -11542,6 +12189,16 @@
11542
12189
  },
11543
12190
  "description": "The credential may not perform this action, or the account is blocked."
11544
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
+ },
11545
12202
  "422": {
11546
12203
  "content": {
11547
12204
  "application/json": {
@@ -11558,24 +12215,25 @@
11558
12215
  "HTTPBearer": []
11559
12216
  }
11560
12217
  ],
11561
- "summary": "List Agent Templates",
12218
+ "summary": "Get Alert",
11562
12219
  "tags": [
11563
12220
  "v1"
11564
12221
  ],
11565
- "x-ellipsis-sdk-method": "agents.templates.list"
12222
+ "x-ellipsis-sdk-method": "alerts.get",
12223
+ "x-ellipsis-undocumented": true
11566
12224
  }
11567
12225
  },
11568
- "/v1/agents/templates/{template_id}": {
11569
- "get": {
11570
- "description": "Return one built-in agent template by slug.",
11571
- "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",
11572
12230
  "parameters": [
11573
12231
  {
11574
12232
  "in": "path",
11575
- "name": "template_id",
12233
+ "name": "alert_id",
11576
12234
  "required": true,
11577
12235
  "schema": {
11578
- "title": "Template Id",
12236
+ "title": "Alert Id",
11579
12237
  "type": "string"
11580
12238
  }
11581
12239
  },
@@ -11601,7 +12259,7 @@
11601
12259
  "content": {
11602
12260
  "application/json": {
11603
12261
  "schema": {
11604
- "$ref": "#/components/schemas/AgentTemplate"
12262
+ "$ref": "#/components/schemas/AlertResponse"
11605
12263
  }
11606
12264
  }
11607
12265
  },
@@ -11635,7 +12293,17 @@
11635
12293
  }
11636
12294
  }
11637
12295
  },
11638
- "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."
11639
12307
  },
11640
12308
  "422": {
11641
12309
  "content": {
@@ -11653,76 +12321,140 @@
11653
12321
  "HTTPBearer": []
11654
12322
  }
11655
12323
  ],
11656
- "summary": "Get Agent Template",
12324
+ "summary": "Dismiss Alert",
11657
12325
  "tags": [
11658
12326
  "v1"
11659
12327
  ],
11660
- "x-ellipsis-sdk-method": "agents.templates.get"
12328
+ "x-ellipsis-sdk-method": "alerts.dismiss",
12329
+ "x-ellipsis-undocumented": true
11661
12330
  }
11662
12331
  },
11663
- "/v1/alerts": {
12332
+ "/v1/analytics/metrics": {
11664
12333
  "get": {
11665
- "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.",
11666
- "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",
11667
12336
  "parameters": [
11668
12337
  {
11669
12338
  "in": "query",
11670
- "name": "status",
12339
+ "name": "days",
11671
12340
  "required": false,
11672
12341
  "schema": {
11673
12342
  "anyOf": [
11674
12343
  {
11675
- "$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"
11676
12399
  },
11677
12400
  {
11678
12401
  "type": "null"
11679
12402
  }
11680
12403
  ],
11681
- "title": "Status"
12404
+ "description": "Filter to repositories by \"owner/name\".",
12405
+ "title": "Repo"
11682
12406
  }
11683
12407
  },
11684
12408
  {
12409
+ "description": "Filter by PR-author login(s).",
11685
12410
  "in": "query",
11686
- "name": "source",
12411
+ "name": "author",
11687
12412
  "required": false,
11688
12413
  "schema": {
11689
12414
  "anyOf": [
11690
12415
  {
11691
- "$ref": "#/components/schemas/AlertSource"
12416
+ "items": {
12417
+ "type": "string"
12418
+ },
12419
+ "type": "array"
11692
12420
  },
11693
12421
  {
11694
12422
  "type": "null"
11695
12423
  }
11696
12424
  ],
11697
- "title": "Source"
12425
+ "description": "Filter by PR-author login(s).",
12426
+ "title": "Author"
11698
12427
  }
11699
12428
  },
11700
12429
  {
11701
12430
  "in": "query",
11702
- "name": "limit",
12431
+ "name": "account_type",
11703
12432
  "required": false,
11704
12433
  "schema": {
11705
- "default": 100,
11706
- "maximum": 200,
11707
- "minimum": 1,
11708
- "title": "Limit",
11709
- "type": "integer"
12434
+ "default": "all",
12435
+ "title": "Account Type",
12436
+ "type": "string"
11710
12437
  }
11711
12438
  },
11712
12439
  {
12440
+ "description": "Filter by parent-PR status (open|draft|merged|closed).",
11713
12441
  "in": "query",
11714
- "name": "cursor",
12442
+ "name": "status",
11715
12443
  "required": false,
11716
12444
  "schema": {
11717
12445
  "anyOf": [
11718
12446
  {
11719
- "type": "string"
12447
+ "items": {
12448
+ "type": "string"
12449
+ },
12450
+ "type": "array"
11720
12451
  },
11721
12452
  {
11722
12453
  "type": "null"
11723
12454
  }
11724
12455
  ],
11725
- "title": "Cursor"
12456
+ "description": "Filter by parent-PR status (open|draft|merged|closed).",
12457
+ "title": "Status"
11726
12458
  }
11727
12459
  },
11728
12460
  {
@@ -11747,12 +12479,22 @@
11747
12479
  "content": {
11748
12480
  "application/json": {
11749
12481
  "schema": {
11750
- "$ref": "#/components/schemas/AlertsListResponse"
12482
+ "$ref": "#/components/schemas/GetAnalyticsMetricsResponse"
11751
12483
  }
11752
12484
  }
11753
12485
  },
11754
12486
  "description": "Successful Response"
11755
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
+ },
11756
12498
  "401": {
11757
12499
  "content": {
11758
12500
  "application/json": {
@@ -11789,120 +12531,143 @@
11789
12531
  "HTTPBearer": []
11790
12532
  }
11791
12533
  ],
11792
- "summary": "List Alerts",
12534
+ "summary": "Get Analytics Metrics",
11793
12535
  "tags": [
11794
12536
  "v1"
11795
12537
  ],
11796
- "x-ellipsis-sdk-method": "alerts.list"
12538
+ "x-ellipsis-sdk-method": "analytics.metrics",
12539
+ "x-ellipsis-undocumented": true
11797
12540
  }
11798
12541
  },
11799
- "/v1/alerts/{alert_id}": {
12542
+ "/v1/analytics/pull-requests": {
11800
12543
  "get": {
11801
- "description": "Return one alert by id.\n\n404 if it doesn't exist or belongs to another organization.",
11802
- "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",
11803
12546
  "parameters": [
11804
12547
  {
11805
- "in": "path",
11806
- "name": "alert_id",
11807
- "required": true,
12548
+ "in": "query",
12549
+ "name": "days",
12550
+ "required": false,
11808
12551
  "schema": {
11809
- "title": "Alert Id",
11810
- "type": "string"
12552
+ "anyOf": [
12553
+ {
12554
+ "type": "integer"
12555
+ },
12556
+ {
12557
+ "type": "null"
12558
+ }
12559
+ ],
12560
+ "title": "Days"
11811
12561
  }
11812
12562
  },
11813
12563
  {
11814
- "in": "header",
11815
- "name": "user-agent",
12564
+ "in": "query",
12565
+ "name": "start",
11816
12566
  "required": false,
11817
12567
  "schema": {
11818
12568
  "anyOf": [
11819
12569
  {
12570
+ "format": "date-time",
11820
12571
  "type": "string"
11821
12572
  },
11822
12573
  {
11823
12574
  "type": "null"
11824
12575
  }
11825
12576
  ],
11826
- "title": "User-Agent"
12577
+ "title": "Start"
11827
12578
  }
11828
- }
11829
- ],
11830
- "responses": {
11831
- "200": {
11832
- "content": {
11833
- "application/json": {
11834
- "schema": {
11835
- "$ref": "#/components/schemas/AlertResponse"
11836
- }
11837
- }
11838
- },
11839
- "description": "Successful Response"
11840
12579
  },
11841
- "401": {
11842
- "content": {
11843
- "application/json": {
11844
- "schema": {
11845
- "$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"
11846
12592
  }
11847
- }
11848
- },
11849
- "description": "The bearer token is missing, invalid, or revoked."
12593
+ ],
12594
+ "title": "End"
12595
+ }
11850
12596
  },
11851
- "403": {
11852
- "content": {
11853
- "application/json": {
11854
- "schema": {
11855
- "$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"
11856
12611
  }
11857
- }
11858
- },
11859
- "description": "The credential may not perform this action, or the account is blocked."
12612
+ ],
12613
+ "title": "Account Type"
12614
+ }
11860
12615
  },
11861
- "404": {
11862
- "content": {
11863
- "application/json": {
11864
- "schema": {
11865
- "$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"
11866
12630
  }
11867
- }
11868
- },
11869
- "description": "No such alert in your account."
12631
+ ],
12632
+ "title": "Repository Id"
12633
+ }
11870
12634
  },
11871
- "422": {
11872
- "content": {
11873
- "application/json": {
11874
- "schema": {
11875
- "$ref": "#/components/schemas/HTTPValidationError"
11876
- }
11877
- }
11878
- },
11879
- "description": "Validation Error"
11880
- }
11881
- },
11882
- "security": [
11883
12635
  {
11884
- "HTTPBearer": []
11885
- }
11886
- ],
11887
- "summary": "Get Alert",
11888
- "tags": [
11889
- "v1"
11890
- ],
11891
- "x-ellipsis-sdk-method": "alerts.get"
11892
- }
11893
- },
11894
- "/v1/alerts/{alert_id}/dismiss": {
11895
- "post": {
11896
- "description": "Dismiss an open alert and return it.\n\n409 when the alert is not open; 404 when it doesn't exist.",
11897
- "operationId": "dismiss_alert",
11898
- "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
+ },
11899
12654
  {
11900
- "in": "path",
11901
- "name": "alert_id",
11902
- "required": true,
12655
+ "in": "query",
12656
+ "name": "status",
12657
+ "required": false,
11903
12658
  "schema": {
11904
- "title": "Alert Id",
11905
- "type": "string"
12659
+ "anyOf": [
12660
+ {
12661
+ "items": {
12662
+ "type": "string"
12663
+ },
12664
+ "type": "array"
12665
+ },
12666
+ {
12667
+ "type": "null"
12668
+ }
12669
+ ],
12670
+ "title": "Status"
11906
12671
  }
11907
12672
  },
11908
12673
  {
@@ -11927,23 +12692,13 @@
11927
12692
  "content": {
11928
12693
  "application/json": {
11929
12694
  "schema": {
11930
- "$ref": "#/components/schemas/AlertResponse"
12695
+ "$ref": "#/components/schemas/GetAnalyticsPullRequestsResponse"
11931
12696
  }
11932
12697
  }
11933
12698
  },
11934
12699
  "description": "Successful Response"
11935
12700
  },
11936
- "401": {
11937
- "content": {
11938
- "application/json": {
11939
- "schema": {
11940
- "$ref": "#/components/schemas/ErrorResponse"
11941
- }
11942
- }
11943
- },
11944
- "description": "The bearer token is missing, invalid, or revoked."
11945
- },
11946
- "403": {
12701
+ "400": {
11947
12702
  "content": {
11948
12703
  "application/json": {
11949
12704
  "schema": {
@@ -11951,9 +12706,9 @@
11951
12706
  }
11952
12707
  }
11953
12708
  },
11954
- "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."
11955
12710
  },
11956
- "404": {
12711
+ "401": {
11957
12712
  "content": {
11958
12713
  "application/json": {
11959
12714
  "schema": {
@@ -11961,9 +12716,9 @@
11961
12716
  }
11962
12717
  }
11963
12718
  },
11964
- "description": "No such alert in your account."
12719
+ "description": "The bearer token is missing, invalid, or revoked."
11965
12720
  },
11966
- "409": {
12721
+ "403": {
11967
12722
  "content": {
11968
12723
  "application/json": {
11969
12724
  "schema": {
@@ -11971,7 +12726,7 @@
11971
12726
  }
11972
12727
  }
11973
12728
  },
11974
- "description": "The alert is not open."
12729
+ "description": "The credential may not perform this action, or the account is blocked."
11975
12730
  },
11976
12731
  "422": {
11977
12732
  "content": {
@@ -11989,17 +12744,18 @@
11989
12744
  "HTTPBearer": []
11990
12745
  }
11991
12746
  ],
11992
- "summary": "Dismiss Alert",
12747
+ "summary": "Get Analytics Pull Requests",
11993
12748
  "tags": [
11994
12749
  "v1"
11995
12750
  ],
11996
- "x-ellipsis-sdk-method": "alerts.dismiss"
12751
+ "x-ellipsis-sdk-method": "analytics.pull_requests",
12752
+ "x-ellipsis-undocumented": true
11997
12753
  }
11998
12754
  },
11999
- "/v1/analytics/metrics": {
12755
+ "/v1/analytics/reviews": {
12000
12756
  "get": {
12001
- "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.",
12002
- "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",
12003
12759
  "parameters": [
12004
12760
  {
12005
12761
  "in": "query",
@@ -12052,7 +12808,6 @@
12052
12808
  }
12053
12809
  },
12054
12810
  {
12055
- "description": "Filter to repositories by \"owner/name\".",
12056
12811
  "in": "query",
12057
12812
  "name": "repo",
12058
12813
  "required": false,
@@ -12068,12 +12823,11 @@
12068
12823
  "type": "null"
12069
12824
  }
12070
12825
  ],
12071
- "description": "Filter to repositories by \"owner/name\".",
12072
12826
  "title": "Repo"
12073
12827
  }
12074
12828
  },
12075
12829
  {
12076
- "description": "Filter by PR-author login(s).",
12830
+ "description": "Filter by reviewer login(s).",
12077
12831
  "in": "query",
12078
12832
  "name": "author",
12079
12833
  "required": false,
@@ -12089,7 +12843,7 @@
12089
12843
  "type": "null"
12090
12844
  }
12091
12845
  ],
12092
- "description": "Filter by PR-author login(s).",
12846
+ "description": "Filter by reviewer login(s).",
12093
12847
  "title": "Author"
12094
12848
  }
12095
12849
  },
@@ -12104,9 +12858,8 @@
12104
12858
  }
12105
12859
  },
12106
12860
  {
12107
- "description": "Filter by parent-PR status (open|draft|merged|closed).",
12108
12861
  "in": "query",
12109
- "name": "status",
12862
+ "name": "review_state",
12110
12863
  "required": false,
12111
12864
  "schema": {
12112
12865
  "anyOf": [
@@ -12120,8 +12873,7 @@
12120
12873
  "type": "null"
12121
12874
  }
12122
12875
  ],
12123
- "description": "Filter by parent-PR status (open|draft|merged|closed).",
12124
- "title": "Status"
12876
+ "title": "Review State"
12125
12877
  }
12126
12878
  },
12127
12879
  {
@@ -12146,7 +12898,7 @@
12146
12898
  "content": {
12147
12899
  "application/json": {
12148
12900
  "schema": {
12149
- "$ref": "#/components/schemas/GetAnalyticsMetricsResponse"
12901
+ "$ref": "#/components/schemas/GetAnalyticsReviewsResponse"
12150
12902
  }
12151
12903
  }
12152
12904
  },
@@ -12198,144 +12950,287 @@
12198
12950
  "HTTPBearer": []
12199
12951
  }
12200
12952
  ],
12201
- "summary": "Get Analytics Metrics",
12953
+ "summary": "Get Analytics Reviews",
12202
12954
  "tags": [
12203
12955
  "v1"
12204
12956
  ],
12205
- "x-ellipsis-sdk-method": "analytics.metrics"
12957
+ "x-ellipsis-sdk-method": "analytics.reviews",
12958
+ "x-ellipsis-undocumented": true
12206
12959
  }
12207
12960
  },
12208
- "/v1/analytics/pull-requests": {
12209
- "get": {
12210
- "description": "Return pull-request analytics.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days).",
12211
- "operationId": "get_analytics_pull_requests",
12212
- "parameters": [
12213
- {
12214
- "in": "query",
12215
- "name": "days",
12216
- "required": false,
12217
- "schema": {
12218
- "anyOf": [
12219
- {
12220
- "type": "integer"
12221
- },
12222
- {
12223
- "type": "null"
12224
- }
12225
- ],
12226
- "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
+ }
12227
12971
  }
12228
12972
  },
12229
- {
12230
- "in": "query",
12231
- "name": "start",
12232
- "required": false,
12233
- "schema": {
12234
- "anyOf": [
12235
- {
12236
- "format": "date-time",
12237
- "type": "string"
12238
- },
12239
- {
12240
- "type": "null"
12973
+ "required": true
12974
+ },
12975
+ "responses": {
12976
+ "200": {
12977
+ "content": {
12978
+ "application/json": {
12979
+ "schema": {
12980
+ "$ref": "#/components/schemas/PollCliAuthResponse"
12241
12981
  }
12242
- ],
12243
- "title": "Start"
12244
- }
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."
12245
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": [
12246
13084
  {
12247
- "in": "query",
12248
- "name": "end",
13085
+ "in": "header",
13086
+ "name": "user-agent",
12249
13087
  "required": false,
12250
13088
  "schema": {
12251
13089
  "anyOf": [
12252
13090
  {
12253
- "format": "date-time",
12254
13091
  "type": "string"
12255
13092
  },
12256
13093
  {
12257
13094
  "type": "null"
12258
13095
  }
12259
13096
  ],
12260
- "title": "End"
13097
+ "title": "User-Agent"
12261
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"
12262
13111
  },
12263
- {
12264
- "in": "query",
12265
- "name": "account_type",
12266
- "required": false,
12267
- "schema": {
12268
- "anyOf": [
12269
- {
12270
- "items": {
12271
- "type": "string"
12272
- },
12273
- "type": "array"
12274
- },
12275
- {
12276
- "type": "null"
13112
+ "401": {
13113
+ "content": {
13114
+ "application/json": {
13115
+ "schema": {
13116
+ "$ref": "#/components/schemas/ErrorResponse"
12277
13117
  }
12278
- ],
12279
- "title": "Account Type"
12280
- }
13118
+ }
13119
+ },
13120
+ "description": "The bearer token is missing, invalid, or revoked."
12281
13121
  },
12282
- {
12283
- "in": "query",
12284
- "name": "repository_id",
12285
- "required": false,
12286
- "schema": {
12287
- "anyOf": [
12288
- {
12289
- "items": {
12290
- "type": "integer"
12291
- },
12292
- "type": "array"
12293
- },
12294
- {
12295
- "type": "null"
13122
+ "403": {
13123
+ "content": {
13124
+ "application/json": {
13125
+ "schema": {
13126
+ "$ref": "#/components/schemas/ErrorResponse"
12296
13127
  }
12297
- ],
12298
- "title": "Repository Id"
12299
- }
13128
+ }
13129
+ },
13130
+ "description": "The credential may not perform this action, or the account is blocked."
12300
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": [
12301
13160
  {
12302
- "in": "query",
12303
- "name": "author_id",
13161
+ "in": "header",
13162
+ "name": "user-agent",
12304
13163
  "required": false,
12305
13164
  "schema": {
12306
13165
  "anyOf": [
12307
13166
  {
12308
- "items": {
12309
- "type": "integer"
12310
- },
12311
- "type": "array"
13167
+ "type": "string"
12312
13168
  },
12313
13169
  {
12314
13170
  "type": "null"
12315
13171
  }
12316
13172
  ],
12317
- "title": "Author Id"
13173
+ "title": "User-Agent"
12318
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"
12319
13187
  },
12320
- {
12321
- "in": "query",
12322
- "name": "status",
12323
- "required": false,
12324
- "schema": {
12325
- "anyOf": [
12326
- {
12327
- "items": {
12328
- "type": "string"
12329
- },
12330
- "type": "array"
12331
- },
12332
- {
12333
- "type": "null"
13188
+ "401": {
13189
+ "content": {
13190
+ "application/json": {
13191
+ "schema": {
13192
+ "$ref": "#/components/schemas/ErrorResponse"
12334
13193
  }
12335
- ],
12336
- "title": "Status"
12337
- }
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."
12338
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": [
12339
13234
  {
12340
13235
  "in": "header",
12341
13236
  "name": "user-agent",
@@ -12353,12 +13248,22 @@
12353
13248
  }
12354
13249
  }
12355
13250
  ],
13251
+ "requestBody": {
13252
+ "content": {
13253
+ "application/json": {
13254
+ "schema": {
13255
+ "$ref": "#/components/schemas/CreateEnvironmentRequest"
13256
+ }
13257
+ }
13258
+ },
13259
+ "required": true
13260
+ },
12356
13261
  "responses": {
12357
- "200": {
13262
+ "201": {
12358
13263
  "content": {
12359
13264
  "application/json": {
12360
13265
  "schema": {
12361
- "$ref": "#/components/schemas/GetAnalyticsPullRequestsResponse"
13266
+ "$ref": "#/components/schemas/EnvironmentResponse"
12362
13267
  }
12363
13268
  }
12364
13269
  },
@@ -12372,7 +13277,7 @@
12372
13277
  }
12373
13278
  }
12374
13279
  },
12375
- "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."
12376
13281
  },
12377
13282
  "401": {
12378
13283
  "content": {
@@ -12394,15 +13299,25 @@
12394
13299
  },
12395
13300
  "description": "The credential may not perform this action, or the account is blocked."
12396
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
+ },
12397
13312
  "422": {
12398
13313
  "content": {
12399
13314
  "application/json": {
12400
13315
  "schema": {
12401
- "$ref": "#/components/schemas/HTTPValidationError"
13316
+ "$ref": "#/components/schemas/ErrorResponse"
12402
13317
  }
12403
13318
  }
12404
13319
  },
12405
- "description": "Validation Error"
13320
+ "description": "The environment's name is missing or malformed."
12406
13321
  }
12407
13322
  },
12408
13323
  "security": [
@@ -12410,137 +13325,113 @@
12410
13325
  "HTTPBearer": []
12411
13326
  }
12412
13327
  ],
12413
- "summary": "Get Analytics Pull Requests",
13328
+ "summary": "Create Environment",
12414
13329
  "tags": [
12415
13330
  "v1"
12416
13331
  ],
12417
- "x-ellipsis-sdk-method": "analytics.pull_requests"
13332
+ "x-ellipsis-sdk-method": "environments.create"
12418
13333
  }
12419
13334
  },
12420
- "/v1/analytics/reviews": {
12421
- "get": {
12422
- "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).",
12423
- "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",
12424
13339
  "parameters": [
12425
13340
  {
13341
+ "description": "Repo rung to clear (\"owner/name\"); omit to clear the account default.",
12426
13342
  "in": "query",
12427
- "name": "days",
12428
- "required": false,
12429
- "schema": {
12430
- "anyOf": [
12431
- {
12432
- "type": "integer"
12433
- },
12434
- {
12435
- "type": "null"
12436
- }
12437
- ],
12438
- "title": "Days"
12439
- }
12440
- },
12441
- {
12442
- "in": "query",
12443
- "name": "start",
13343
+ "name": "repository",
12444
13344
  "required": false,
12445
13345
  "schema": {
12446
13346
  "anyOf": [
12447
13347
  {
12448
- "format": "date-time",
12449
13348
  "type": "string"
12450
13349
  },
12451
13350
  {
12452
13351
  "type": "null"
12453
13352
  }
12454
13353
  ],
12455
- "title": "Start"
13354
+ "description": "Repo rung to clear (\"owner/name\"); omit to clear the account default.",
13355
+ "title": "Repository"
12456
13356
  }
12457
13357
  },
12458
13358
  {
12459
- "in": "query",
12460
- "name": "end",
13359
+ "in": "header",
13360
+ "name": "user-agent",
12461
13361
  "required": false,
12462
13362
  "schema": {
12463
13363
  "anyOf": [
12464
13364
  {
12465
- "format": "date-time",
12466
13365
  "type": "string"
12467
13366
  },
12468
13367
  {
12469
13368
  "type": "null"
12470
13369
  }
12471
13370
  ],
12472
- "title": "End"
13371
+ "title": "User-Agent"
12473
13372
  }
13373
+ }
13374
+ ],
13375
+ "responses": {
13376
+ "204": {
13377
+ "description": "Successful Response"
12474
13378
  },
12475
- {
12476
- "in": "query",
12477
- "name": "repo",
12478
- "required": false,
12479
- "schema": {
12480
- "anyOf": [
12481
- {
12482
- "items": {
12483
- "type": "string"
12484
- },
12485
- "type": "array"
12486
- },
12487
- {
12488
- "type": "null"
13379
+ "401": {
13380
+ "content": {
13381
+ "application/json": {
13382
+ "schema": {
13383
+ "$ref": "#/components/schemas/ErrorResponse"
12489
13384
  }
12490
- ],
12491
- "title": "Repo"
12492
- }
13385
+ }
13386
+ },
13387
+ "description": "The bearer token is missing, invalid, or revoked."
12493
13388
  },
12494
- {
12495
- "description": "Filter by reviewer login(s).",
12496
- "in": "query",
12497
- "name": "author",
12498
- "required": false,
12499
- "schema": {
12500
- "anyOf": [
12501
- {
12502
- "items": {
12503
- "type": "string"
12504
- },
12505
- "type": "array"
12506
- },
12507
- {
12508
- "type": "null"
13389
+ "403": {
13390
+ "content": {
13391
+ "application/json": {
13392
+ "schema": {
13393
+ "$ref": "#/components/schemas/ErrorResponse"
12509
13394
  }
12510
- ],
12511
- "description": "Filter by reviewer login(s).",
12512
- "title": "Author"
12513
- }
12514
- },
12515
- {
12516
- "in": "query",
12517
- "name": "account_type",
12518
- "required": false,
12519
- "schema": {
12520
- "default": "all",
12521
- "title": "Account Type",
12522
- "type": "string"
12523
- }
13395
+ }
13396
+ },
13397
+ "description": "The credential may not perform this action, or the account is blocked."
12524
13398
  },
12525
- {
12526
- "in": "query",
12527
- "name": "review_state",
12528
- "required": false,
12529
- "schema": {
12530
- "anyOf": [
12531
- {
12532
- "items": {
12533
- "type": "string"
12534
- },
12535
- "type": "array"
12536
- },
12537
- {
12538
- "type": "null"
13399
+ "404": {
13400
+ "content": {
13401
+ "application/json": {
13402
+ "schema": {
13403
+ "$ref": "#/components/schemas/ErrorResponse"
12539
13404
  }
12540
- ],
12541
- "title": "Review State"
12542
- }
13405
+ }
13406
+ },
13407
+ "description": "No default is set at that rung, or the repository was not found in your account."
12543
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": [
12544
13435
  {
12545
13436
  "in": "header",
12546
13437
  "name": "user-agent",
@@ -12563,22 +13454,12 @@
12563
13454
  "content": {
12564
13455
  "application/json": {
12565
13456
  "schema": {
12566
- "$ref": "#/components/schemas/GetAnalyticsReviewsResponse"
13457
+ "$ref": "#/components/schemas/EnvironmentDefaults"
12567
13458
  }
12568
13459
  }
12569
13460
  },
12570
13461
  "description": "Successful Response"
12571
13462
  },
12572
- "400": {
12573
- "content": {
12574
- "application/json": {
12575
- "schema": {
12576
- "$ref": "#/components/schemas/ErrorResponse"
12577
- }
12578
- }
12579
- },
12580
- "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
12581
- },
12582
13463
  "401": {
12583
13464
  "content": {
12584
13465
  "application/json": {
@@ -12615,22 +13496,38 @@
12615
13496
  "HTTPBearer": []
12616
13497
  }
12617
13498
  ],
12618
- "summary": "Get Analytics Reviews",
13499
+ "summary": "List Environment Defaults",
12619
13500
  "tags": [
12620
13501
  "v1"
12621
13502
  ],
12622
- "x-ellipsis-sdk-method": "analytics.reviews"
12623
- }
12624
- },
12625
- "/v1/auth/cli/poll": {
12626
- "post": {
12627
- "description": "Poll a device-code auth flow for its token.\n\nUnauthenticated; the device code identifies the flow.",
12628
- "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
+ ],
12629
13526
  "requestBody": {
12630
13527
  "content": {
12631
13528
  "application/json": {
12632
13529
  "schema": {
12633
- "$ref": "#/components/schemas/CliAuthPollRequest"
13530
+ "$ref": "#/components/schemas/PutEnvironmentDefaultRequest"
12634
13531
  }
12635
13532
  }
12636
13533
  },
@@ -12641,7 +13538,7 @@
12641
13538
  "content": {
12642
13539
  "application/json": {
12643
13540
  "schema": {
12644
- "$ref": "#/components/schemas/PollCliAuthResponse"
13541
+ "$ref": "#/components/schemas/EnvironmentDefaults"
12645
13542
  }
12646
13543
  }
12647
13544
  },
@@ -12675,7 +13572,7 @@
12675
13572
  }
12676
13573
  }
12677
13574
  },
12678
- "description": "Unknown device code."
13575
+ "description": "The environment or repository was not found in your account."
12679
13576
  },
12680
13577
  "422": {
12681
13578
  "content": {
@@ -12688,23 +13585,151 @@
12688
13585
  "description": "Validation Error"
12689
13586
  }
12690
13587
  },
12691
- "summary": "Cli Auth Poll",
13588
+ "security": [
13589
+ {
13590
+ "HTTPBearer": []
13591
+ }
13592
+ ],
13593
+ "summary": "Put Environment Default",
12692
13594
  "tags": [
12693
13595
  "v1"
12694
13596
  ],
12695
- "x-ellipsis-sdk-method": "auth.cli.poll"
13597
+ "x-ellipsis-sdk-method": "environments.defaults.set"
12696
13598
  }
12697
13599
  },
12698
- "/v1/auth/cli/start": {
12699
- "post": {
12700
- "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.",
12701
- "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
+ ],
12702
13631
  "responses": {
12703
- "201": {
13632
+ "204": {
13633
+ "description": "Successful Response"
13634
+ },
13635
+ "401": {
12704
13636
  "content": {
12705
13637
  "application/json": {
12706
13638
  "schema": {
12707
- "$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"
12708
13733
  }
12709
13734
  }
12710
13735
  },
@@ -12729,20 +13754,52 @@
12729
13754
  }
12730
13755
  },
12731
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"
12732
13777
  }
12733
13778
  },
12734
- "summary": "Cli Auth Start",
13779
+ "security": [
13780
+ {
13781
+ "HTTPBearer": []
13782
+ }
13783
+ ],
13784
+ "summary": "Get Environment",
12735
13785
  "tags": [
12736
13786
  "v1"
12737
13787
  ],
12738
- "x-ellipsis-sdk-method": "auth.cli.start"
12739
- }
12740
- },
12741
- "/v1/budget": {
12742
- "get": {
12743
- "description": "Return the caller's current budget summary.",
12744
- "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",
12745
13793
  "parameters": [
13794
+ {
13795
+ "in": "path",
13796
+ "name": "environment_id",
13797
+ "required": true,
13798
+ "schema": {
13799
+ "title": "Environment Id",
13800
+ "type": "string"
13801
+ }
13802
+ },
12746
13803
  {
12747
13804
  "in": "header",
12748
13805
  "name": "user-agent",
@@ -12760,17 +13817,37 @@
12760
13817
  }
12761
13818
  }
12762
13819
  ],
13820
+ "requestBody": {
13821
+ "content": {
13822
+ "application/json": {
13823
+ "schema": {
13824
+ "$ref": "#/components/schemas/UpdateEnvironmentRequest"
13825
+ }
13826
+ }
13827
+ },
13828
+ "required": true
13829
+ },
12763
13830
  "responses": {
12764
13831
  "200": {
12765
13832
  "content": {
12766
13833
  "application/json": {
12767
13834
  "schema": {
12768
- "$ref": "#/components/schemas/BudgetSummary"
13835
+ "$ref": "#/components/schemas/EnvironmentResponse"
12769
13836
  }
12770
13837
  }
12771
13838
  },
12772
13839
  "description": "Successful Response"
12773
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
+ },
12774
13851
  "401": {
12775
13852
  "content": {
12776
13853
  "application/json": {
@@ -12791,15 +13868,35 @@
12791
13868
  },
12792
13869
  "description": "The credential may not perform this action, or the account is blocked."
12793
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
+ },
12794
13891
  "422": {
12795
13892
  "content": {
12796
13893
  "application/json": {
12797
13894
  "schema": {
12798
- "$ref": "#/components/schemas/HTTPValidationError"
13895
+ "$ref": "#/components/schemas/ErrorResponse"
12799
13896
  }
12800
13897
  }
12801
13898
  },
12802
- "description": "Validation Error"
13899
+ "description": "The environment's name is missing or malformed."
12803
13900
  }
12804
13901
  },
12805
13902
  "security": [
@@ -12807,11 +13904,11 @@
12807
13904
  "HTTPBearer": []
12808
13905
  }
12809
13906
  ],
12810
- "summary": "Get Budget",
13907
+ "summary": "Update Environment",
12811
13908
  "tags": [
12812
13909
  "v1"
12813
13910
  ],
12814
- "x-ellipsis-sdk-method": "budget"
13911
+ "x-ellipsis-sdk-method": "environments.update"
12815
13912
  }
12816
13913
  },
12817
13914
  "/v1/files": {
@@ -13948,7 +15045,8 @@
13948
15045
  "tags": [
13949
15046
  "v1"
13950
15047
  ],
13951
- "x-ellipsis-sdk-method": "memories.list"
15048
+ "x-ellipsis-sdk-method": "memories.list",
15049
+ "x-ellipsis-undocumented": true
13952
15050
  },
13953
15051
  "post": {
13954
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.",
@@ -14042,7 +15140,8 @@
14042
15140
  "tags": [
14043
15141
  "v1"
14044
15142
  ],
14045
- "x-ellipsis-sdk-method": "memories.create"
15143
+ "x-ellipsis-sdk-method": "memories.create",
15144
+ "x-ellipsis-undocumented": true
14046
15145
  }
14047
15146
  },
14048
15147
  "/v1/memories/{memory_id}": {
@@ -14158,7 +15257,8 @@
14158
15257
  "tags": [
14159
15258
  "v1"
14160
15259
  ],
14161
- "x-ellipsis-sdk-method": "memories.delete"
15260
+ "x-ellipsis-sdk-method": "memories.delete",
15261
+ "x-ellipsis-undocumented": true
14162
15262
  },
14163
15263
  "get": {
14164
15264
  "description": "Read one memory's full content.\n\nThe id comes from the index returned by listing memories.",
@@ -14251,7 +15351,8 @@
14251
15351
  "tags": [
14252
15352
  "v1"
14253
15353
  ],
14254
- "x-ellipsis-sdk-method": "memories.get"
15354
+ "x-ellipsis-sdk-method": "memories.get",
15355
+ "x-ellipsis-undocumented": true
14255
15356
  },
14256
15357
  "put": {
14257
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.",
@@ -14364,7 +15465,8 @@
14364
15465
  "tags": [
14365
15466
  "v1"
14366
15467
  ],
14367
- "x-ellipsis-sdk-method": "memories.edit"
15468
+ "x-ellipsis-sdk-method": "memories.edit",
15469
+ "x-ellipsis-undocumented": true
14368
15470
  }
14369
15471
  },
14370
15472
  "/v1/models": {
@@ -15327,7 +16429,7 @@
15327
16429
  "x-ellipsis-sdk-method": "sessions.list"
15328
16430
  },
15329
16431
  "post": {
15330
- "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.",
15331
16433
  "operationId": "start_agent_session",
15332
16434
  "parameters": [
15333
16435
  {
@@ -15376,7 +16478,7 @@
15376
16478
  }
15377
16479
  }
15378
16480
  },
15379
- "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."
15380
16482
  },
15381
16483
  "401": {
15382
16484
  "content": {
@@ -15406,7 +16508,7 @@
15406
16508
  }
15407
16509
  }
15408
16510
  },
15409
- "description": "The named agent or template does not exist in your account."
16511
+ "description": "The named agent does not exist in your account."
15410
16512
  },
15411
16513
  "409": {
15412
16514
  "content": {
@@ -16674,7 +17776,8 @@
16674
17776
  "tags": [
16675
17777
  "v1"
16676
17778
  ],
16677
- "x-ellipsis-sdk-method": "sessions.ingest_transcript"
17779
+ "x-ellipsis-sdk-method": "sessions.ingest_transcript",
17780
+ "x-ellipsis-undocumented": true
16678
17781
  }
16679
17782
  },
16680
17783
  "/v1/usage": {