@ellipsis-dev/sdk 0.18.0 → 0.20.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.
@@ -1018,20 +1018,6 @@
1018
1018
  "title": "AgentConfigRepository",
1019
1019
  "type": "object"
1020
1020
  },
1021
- "AgentConfigResponse": {
1022
- "description": "One saved agent config.",
1023
- "properties": {
1024
- "config": {
1025
- "$ref": "#/components/schemas/Config",
1026
- "description": "The saved agent config."
1027
- }
1028
- },
1029
- "required": [
1030
- "config"
1031
- ],
1032
- "title": "AgentConfigResponse",
1033
- "type": "object"
1034
- },
1035
1021
  "AgentConfigSettingsRef": {
1036
1022
  "additionalProperties": false,
1037
1023
  "description": "A config-declared Claude Code settings.json, resolved at run start and\npassed to `claude --settings <path>`. That is the CLI settings tier \u2014 BELOW\nEllipsis's managed-settings.json floor \u2014 so it customizes behavior (model\npermissions, includeCoAuthoredBy, statusLine, ...) but can never weaken a\nsecurity setting. Lets a team point the cloud agent at the same settings file\nthey already use with Claude Code locally instead of re-encoding it as YAML.",
@@ -1145,24 +1131,6 @@
1145
1131
  "title": "AgentConfigSystemFileRef",
1146
1132
  "type": "object"
1147
1133
  },
1148
- "AgentConfigsListResponse": {
1149
- "description": "The caller's saved agent configs.",
1150
- "properties": {
1151
- "configs": {
1152
- "description": "Saved agent configs.",
1153
- "items": {
1154
- "$ref": "#/components/schemas/Config"
1155
- },
1156
- "title": "Configs",
1157
- "type": "array"
1158
- }
1159
- },
1160
- "required": [
1161
- "configs"
1162
- ],
1163
- "title": "AgentConfigsListResponse",
1164
- "type": "object"
1165
- },
1166
1134
  "AgentTemplate": {
1167
1135
  "description": "A built-in agent template: a ready-to-use agent config plus the\nmetadata that describes it in the template gallery.",
1168
1136
  "properties": {
@@ -1701,6 +1669,209 @@
1701
1669
  "title": "AuthorFacet",
1702
1670
  "type": "object"
1703
1671
  },
1672
+ "Automation": {
1673
+ "description": "An automation: a saved agent definition that runs on its trigger or\nwhen invoked, plus where it syncs from and the state of that sync.",
1674
+ "properties": {
1675
+ "agent_config": {
1676
+ "$ref": "#/components/schemas/AgentConfig",
1677
+ "description": "The agent definition itself, in the same schema as a YAML file under agents/."
1678
+ },
1679
+ "agent_config_source_details": {
1680
+ "anyOf": [
1681
+ {
1682
+ "$ref": "#/components/schemas/AgentConfigSourceGithub"
1683
+ },
1684
+ {
1685
+ "type": "null"
1686
+ }
1687
+ ],
1688
+ "description": "The repository, path, and branch the automation syncs from. Null only transiently, before the creating pull request's file lands on the branch."
1689
+ },
1690
+ "created_at": {
1691
+ "description": "When the automation was created.",
1692
+ "format": "date-time",
1693
+ "title": "Created At",
1694
+ "type": "string"
1695
+ },
1696
+ "display_name": {
1697
+ "anyOf": [
1698
+ {
1699
+ "type": "string"
1700
+ },
1701
+ {
1702
+ "type": "null"
1703
+ }
1704
+ ],
1705
+ "description": "The raw ellipsis.name display text from the config file.",
1706
+ "title": "Display Name"
1707
+ },
1708
+ "edited_by": {
1709
+ "anyOf": [
1710
+ {
1711
+ "$ref": "#/components/schemas/GithubAccountSnippet"
1712
+ },
1713
+ {
1714
+ "type": "null"
1715
+ }
1716
+ ],
1717
+ "description": "The GitHub account that last edited the automation, when the edit came from a known user."
1718
+ },
1719
+ "id": {
1720
+ "description": "Unique identifier of the automation.",
1721
+ "title": "Id",
1722
+ "type": "string"
1723
+ },
1724
+ "last_session_created_at": {
1725
+ "anyOf": [
1726
+ {
1727
+ "format": "date-time",
1728
+ "type": "string"
1729
+ },
1730
+ {
1731
+ "type": "null"
1732
+ }
1733
+ ],
1734
+ "description": "When that most recent session was created.",
1735
+ "title": "Last Session Created At"
1736
+ },
1737
+ "last_session_id": {
1738
+ "anyOf": [
1739
+ {
1740
+ "type": "string"
1741
+ },
1742
+ {
1743
+ "type": "null"
1744
+ }
1745
+ ],
1746
+ "description": "The most recent session this automation started, or null if it has never run.",
1747
+ "title": "Last Session Id"
1748
+ },
1749
+ "last_sync_error": {
1750
+ "anyOf": [
1751
+ {
1752
+ "type": "string"
1753
+ },
1754
+ {
1755
+ "type": "null"
1756
+ }
1757
+ ],
1758
+ "description": "The parse or validation error from the most recent sync attempt, or null when it succeeded. A non-null value means the automation is not running the YAML currently on the branch.",
1759
+ "title": "Last Sync Error"
1760
+ },
1761
+ "last_synced_commit_sha": {
1762
+ "anyOf": [
1763
+ {
1764
+ "type": "string"
1765
+ },
1766
+ {
1767
+ "type": "null"
1768
+ }
1769
+ ],
1770
+ "description": "The last commit the automation was synced from.",
1771
+ "title": "Last Synced Commit Sha"
1772
+ },
1773
+ "managed_by": {
1774
+ "$ref": "#/components/schemas/ConfigManagedBy",
1775
+ "description": "Which writer owns this automation. \"github\" automations are defined by a file in a repository and are changed by editing that file; \"api\" automations have no file and are changed through this API."
1776
+ },
1777
+ "name": {
1778
+ "anyOf": [
1779
+ {
1780
+ "type": "string"
1781
+ },
1782
+ {
1783
+ "type": "null"
1784
+ }
1785
+ ],
1786
+ "description": "The automation's account-unique addressable name (a slug of its display name); usable anywhere an automation is referenced, interchangeably with the id.",
1787
+ "title": "Name"
1788
+ },
1789
+ "pending_pull_request_url": {
1790
+ "anyOf": [
1791
+ {
1792
+ "type": "string"
1793
+ },
1794
+ {
1795
+ "type": "null"
1796
+ }
1797
+ ],
1798
+ "description": "The open pull request that adds this automation's file. Non-null means the automation is not live yet: it starts running once the pull request merges and syncs.",
1799
+ "title": "Pending Pull Request Url"
1800
+ },
1801
+ "sha": {
1802
+ "description": "The definition's content identity: the version fingerprint frozen onto each session that runs it.",
1803
+ "title": "Sha",
1804
+ "type": "string"
1805
+ },
1806
+ "updated_at": {
1807
+ "description": "When the automation was last updated.",
1808
+ "format": "date-time",
1809
+ "title": "Updated At",
1810
+ "type": "string"
1811
+ }
1812
+ },
1813
+ "required": [
1814
+ "id",
1815
+ "sha",
1816
+ "created_at",
1817
+ "updated_at",
1818
+ "managed_by",
1819
+ "agent_config"
1820
+ ],
1821
+ "title": "Automation",
1822
+ "type": "object"
1823
+ },
1824
+ "AutomationResponse": {
1825
+ "description": "One automation.",
1826
+ "properties": {
1827
+ "automation": {
1828
+ "$ref": "#/components/schemas/Automation",
1829
+ "description": "The automation."
1830
+ }
1831
+ },
1832
+ "required": [
1833
+ "automation"
1834
+ ],
1835
+ "title": "AutomationResponse",
1836
+ "type": "object"
1837
+ },
1838
+ "AutomationsListResponse": {
1839
+ "description": "The caller's automations.",
1840
+ "properties": {
1841
+ "automations": {
1842
+ "description": "Automations.",
1843
+ "items": {
1844
+ "$ref": "#/components/schemas/Automation"
1845
+ },
1846
+ "title": "Automations",
1847
+ "type": "array"
1848
+ }
1849
+ },
1850
+ "required": [
1851
+ "automations"
1852
+ ],
1853
+ "title": "AutomationsListResponse",
1854
+ "type": "object"
1855
+ },
1856
+ "BudgetCeiling": {
1857
+ "description": "The organization's spend ceilings, in US dollars.",
1858
+ "properties": {
1859
+ "session": {
1860
+ "anyOf": [
1861
+ {
1862
+ "type": "number"
1863
+ },
1864
+ {
1865
+ "type": "null"
1866
+ }
1867
+ ],
1868
+ "description": "The most a single session may be budgeted, in US dollars. A session request or automation asking for more is refused with 400. Null means the platform ceiling applies.",
1869
+ "title": "Session"
1870
+ }
1871
+ },
1872
+ "title": "BudgetCeiling",
1873
+ "type": "object"
1874
+ },
1704
1875
  "BudgetSource": {
1705
1876
  "description": "Which layer actually determined the enforced budget.\n\nNot derivable from the run row alone (the run does not store the config\ncents or the account default), so we persist it for the UI / audit.",
1706
1877
  "enum": [
@@ -2861,31 +3032,29 @@
2861
3032
  "title": "CodexWebSearchItem",
2862
3033
  "type": "object"
2863
3034
  },
2864
- "Config": {
2865
- "description": "A saved agent config: the stored row for one agent, plus where it syncs\nfrom and the state of that sync.",
3035
+ "ConfigManagedBy": {
3036
+ "description": "Which writer owns an agent: the repository file it is defined in, or\nthis API. Every agent has exactly one owner, fixed when it is created and\nchanged only by linking or unlinking it.",
3037
+ "enum": [
3038
+ "github",
3039
+ "api"
3040
+ ],
3041
+ "title": "ConfigManagedBy",
3042
+ "type": "string"
3043
+ },
3044
+ "ContributorUsage": {
3045
+ "description": "An author who merged a pull request in the window. The pull-request and\nline counts cover their merged pull requests; `reviews` counts reviews this\nperson also submitted.",
2866
3046
  "properties": {
2867
- "agent_config": {
2868
- "$ref": "#/components/schemas/AgentConfig",
2869
- "description": "The agent definition itself, as parsed from its YAML file."
2870
- },
2871
- "agent_config_source_details": {
2872
- "anyOf": [
2873
- {
2874
- "$ref": "#/components/schemas/AgentConfigSourceGithub"
2875
- },
2876
- {
2877
- "type": "null"
2878
- }
2879
- ],
2880
- "description": "The repository, path, and branch the config syncs from. Null only transiently, before the creating pull request's file lands on the branch."
3047
+ "additions": {
3048
+ "description": "Lines added across their merged pull requests.",
3049
+ "title": "Additions",
3050
+ "type": "integer"
2881
3051
  },
2882
- "created_at": {
2883
- "description": "When the config was created.",
2884
- "format": "date-time",
2885
- "title": "Created At",
2886
- "type": "string"
3052
+ "ai_attributed_prs": {
3053
+ "description": "Their merged pull requests authored by a bot identity.",
3054
+ "title": "Ai Attributed Prs",
3055
+ "type": "integer"
2887
3056
  },
2888
- "display_name": {
3057
+ "avatar_url": {
2889
3058
  "anyOf": [
2890
3059
  {
2891
3060
  "type": "string"
@@ -2894,167 +3063,17 @@
2894
3063
  "type": "null"
2895
3064
  }
2896
3065
  ],
2897
- "description": "The raw ellipsis.name display text from the config file.",
2898
- "title": "Display Name"
3066
+ "description": "The contributor's GitHub avatar URL.",
3067
+ "title": "Avatar Url"
2899
3068
  },
2900
- "edited_by": {
2901
- "anyOf": [
2902
- {
2903
- "$ref": "#/components/schemas/GithubAccountSnippet"
2904
- },
2905
- {
2906
- "type": "null"
2907
- }
2908
- ],
2909
- "description": "The GitHub account that last edited the config, when the edit came from a known user."
3069
+ "deletions": {
3070
+ "description": "Lines deleted across their merged pull requests.",
3071
+ "title": "Deletions",
3072
+ "type": "integer"
2910
3073
  },
2911
- "id": {
2912
- "description": "Unique identifier of the config.",
2913
- "title": "Id",
2914
- "type": "string"
2915
- },
2916
- "last_session_created_at": {
2917
- "anyOf": [
2918
- {
2919
- "format": "date-time",
2920
- "type": "string"
2921
- },
2922
- {
2923
- "type": "null"
2924
- }
2925
- ],
2926
- "description": "When that most recent session was created.",
2927
- "title": "Last Session Created At"
2928
- },
2929
- "last_session_id": {
2930
- "anyOf": [
2931
- {
2932
- "type": "string"
2933
- },
2934
- {
2935
- "type": "null"
2936
- }
2937
- ],
2938
- "description": "The most recent session started from this config, or null if it has never run.",
2939
- "title": "Last Session Id"
2940
- },
2941
- "last_sync_error": {
2942
- "anyOf": [
2943
- {
2944
- "type": "string"
2945
- },
2946
- {
2947
- "type": "null"
2948
- }
2949
- ],
2950
- "description": "The parse or validation error from the most recent sync attempt, or null when it succeeded. A non-null value means the agent is not running the YAML currently on the branch.",
2951
- "title": "Last Sync Error"
2952
- },
2953
- "last_synced_commit_sha": {
2954
- "anyOf": [
2955
- {
2956
- "type": "string"
2957
- },
2958
- {
2959
- "type": "null"
2960
- }
2961
- ],
2962
- "description": "The last commit the config was synced from.",
2963
- "title": "Last Synced Commit Sha"
2964
- },
2965
- "managed_by": {
2966
- "$ref": "#/components/schemas/ConfigManagedBy",
2967
- "description": "Which writer owns this agent. \"github\" agents are defined by a file in a repository and are changed by editing that file; \"api\" agents have no file and are changed through this API."
2968
- },
2969
- "name": {
2970
- "anyOf": [
2971
- {
2972
- "type": "string"
2973
- },
2974
- {
2975
- "type": "null"
2976
- }
2977
- ],
2978
- "description": "The agent's customer-unique addressable name (a slug of its display name); usable anywhere an agent is referenced, interchangeably with the id.",
2979
- "title": "Name"
2980
- },
2981
- "pending_pull_request_url": {
2982
- "anyOf": [
2983
- {
2984
- "type": "string"
2985
- },
2986
- {
2987
- "type": "null"
2988
- }
2989
- ],
2990
- "description": "The open pull request that adds this config's file. Non-null means the agent is not live yet: it starts running once the pull request merges and syncs.",
2991
- "title": "Pending Pull Request Url"
2992
- },
2993
- "sha": {
2994
- "description": "The config's content identity: the version fingerprint frozen onto each session that runs it.",
2995
- "title": "Sha",
2996
- "type": "string"
2997
- },
2998
- "updated_at": {
2999
- "description": "When the config was last updated.",
3000
- "format": "date-time",
3001
- "title": "Updated At",
3002
- "type": "string"
3003
- }
3004
- },
3005
- "required": [
3006
- "id",
3007
- "sha",
3008
- "created_at",
3009
- "updated_at",
3010
- "managed_by",
3011
- "agent_config"
3012
- ],
3013
- "title": "Config",
3014
- "type": "object"
3015
- },
3016
- "ConfigManagedBy": {
3017
- "description": "Which writer owns an agent: the repository file it is defined in, or\nthis API. Every agent has exactly one owner, fixed when it is created and\nchanged only by linking or unlinking it.",
3018
- "enum": [
3019
- "github",
3020
- "api"
3021
- ],
3022
- "title": "ConfigManagedBy",
3023
- "type": "string"
3024
- },
3025
- "ContributorUsage": {
3026
- "description": "An author who merged a pull request in the window. The pull-request and\nline counts cover their merged pull requests; `reviews` counts reviews this\nperson also submitted.",
3027
- "properties": {
3028
- "additions": {
3029
- "description": "Lines added across their merged pull requests.",
3030
- "title": "Additions",
3031
- "type": "integer"
3032
- },
3033
- "ai_attributed_prs": {
3034
- "description": "Their merged pull requests authored by a bot identity.",
3035
- "title": "Ai Attributed Prs",
3036
- "type": "integer"
3037
- },
3038
- "avatar_url": {
3039
- "anyOf": [
3040
- {
3041
- "type": "string"
3042
- },
3043
- {
3044
- "type": "null"
3045
- }
3046
- ],
3047
- "description": "The contributor's GitHub avatar URL.",
3048
- "title": "Avatar Url"
3049
- },
3050
- "deletions": {
3051
- "description": "Lines deleted across their merged pull requests.",
3052
- "title": "Deletions",
3053
- "type": "integer"
3054
- },
3055
- "login": {
3056
- "description": "The contributor's GitHub login.",
3057
- "title": "Login",
3074
+ "login": {
3075
+ "description": "The contributor's GitHub login.",
3076
+ "title": "Login",
3058
3077
  "type": "string"
3059
3078
  },
3060
3079
  "prs_merged": {
@@ -3080,18 +3099,18 @@
3080
3099
  "title": "ContributorUsage",
3081
3100
  "type": "object"
3082
3101
  },
3083
- "CreateAgentConfigRequest": {
3084
- "description": "Parameters for creating an agent config.",
3102
+ "CreateAutomationRequest": {
3103
+ "description": "Parameters for creating an automation.",
3085
3104
  "properties": {
3086
- "config": {
3105
+ "automation": {
3087
3106
  "$ref": "#/components/schemas/AgentConfig",
3088
- "description": "The agent's definition."
3107
+ "description": "The automation's definition, in the same schema as a YAML file under agents/."
3089
3108
  }
3090
3109
  },
3091
3110
  "required": [
3092
- "config"
3111
+ "automation"
3093
3112
  ],
3094
- "title": "CreateAgentConfigRequest",
3113
+ "title": "CreateAutomationRequest",
3095
3114
  "type": "object"
3096
3115
  },
3097
3116
  "CreateEnvironmentRequest": {
@@ -3595,7 +3614,7 @@
3595
3614
  "ErrorInfo": {
3596
3615
  "properties": {
3597
3616
  "code": {
3598
- "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.",
3617
+ "description": "Stable machine-readable error code. Open vocabulary \u2014 handle unknown codes by HTTP status. Known values: account_blocked, budget_exceeds_ceiling, 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, session_not_spawner, unauthorized, unavailable.",
3599
3618
  "title": "Code",
3600
3619
  "type": "string"
3601
3620
  },
@@ -5114,8 +5133,8 @@
5114
5133
  "title": "LinearTeamsListResponse",
5115
5134
  "type": "object"
5116
5135
  },
5117
- "LinkAgentConfigRequest": {
5118
- "description": "Where to put the config file of an agent being moved into a repository.",
5136
+ "LinkAutomationRequest": {
5137
+ "description": "Where to put the file of an automation being moved into a repository.",
5119
5138
  "properties": {
5120
5139
  "path": {
5121
5140
  "anyOf": [
@@ -5126,7 +5145,7 @@
5126
5145
  "type": "null"
5127
5146
  }
5128
5147
  ],
5129
- "description": "File path within the repo. 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).",
5148
+ "description": "File path within the repo. Omit for the default agents/<slug>.yaml; if set it must be a location the sync scans (a .yaml/.yml file under agents/, .agents/, ellipsis/, or .ellipsis/ at any depth).",
5130
5149
  "title": "Path"
5131
5150
  },
5132
5151
  "repository": {
@@ -5138,33 +5157,33 @@
5138
5157
  "required": [
5139
5158
  "repository"
5140
5159
  ],
5141
- "title": "LinkAgentConfigRequest",
5160
+ "title": "LinkAutomationRequest",
5142
5161
  "type": "object"
5143
5162
  },
5144
- "LinkAgentConfigResponse": {
5145
- "description": "The agent and the pull request that would put it in a repository.",
5163
+ "LinkAutomationResponse": {
5164
+ "description": "The automation and the pull request that would put it in a repository.",
5146
5165
  "properties": {
5147
- "config": {
5148
- "$ref": "#/components/schemas/Config",
5149
- "description": "The agent, still managed through the API until the pull request merges."
5166
+ "automation": {
5167
+ "$ref": "#/components/schemas/Automation",
5168
+ "description": "The automation, still managed through the API until the pull request merges."
5150
5169
  },
5151
5170
  "path": {
5152
- "description": "The file path the config will be written to.",
5171
+ "description": "The file path the definition will be written to.",
5153
5172
  "title": "Path",
5154
5173
  "type": "string"
5155
5174
  },
5156
5175
  "pull_request_url": {
5157
- "description": "The pull request that adds the config file. The agent becomes managed by that file once it merges.",
5176
+ "description": "The pull request that adds the file. The automation becomes managed by that file once it merges.",
5158
5177
  "title": "Pull Request Url",
5159
5178
  "type": "string"
5160
5179
  }
5161
5180
  },
5162
5181
  "required": [
5163
- "config",
5182
+ "automation",
5164
5183
  "path",
5165
5184
  "pull_request_url"
5166
5185
  ],
5167
- "title": "LinkAgentConfigResponse",
5186
+ "title": "LinkAutomationResponse",
5168
5187
  "type": "object"
5169
5188
  },
5170
5189
  "LinkedGithubIdentity": {
@@ -5553,6 +5572,41 @@
5553
5572
  "title": "OrganizationRole",
5554
5573
  "type": "string"
5555
5574
  },
5575
+ "OrganizationSettings": {
5576
+ "description": "The organization-wide session settings: the defaults and ceilings every\nsession in the account resolves against.",
5577
+ "properties": {
5578
+ "budget_ceiling": {
5579
+ "$ref": "#/components/schemas/BudgetCeiling",
5580
+ "description": "The organization's spend ceilings."
5581
+ },
5582
+ "default_environment": {
5583
+ "anyOf": [
5584
+ {
5585
+ "type": "string"
5586
+ },
5587
+ {
5588
+ "type": "null"
5589
+ }
5590
+ ],
5591
+ "description": "The saved environment sessions run in when neither their request nor their automation names one: an `env_...` id or the environment's name on write, always the id on read. Null means the built-in basic sandbox.",
5592
+ "title": "Default Environment"
5593
+ },
5594
+ "default_model": {
5595
+ "anyOf": [
5596
+ {
5597
+ "type": "string"
5598
+ },
5599
+ {
5600
+ "type": "null"
5601
+ }
5602
+ ],
5603
+ "description": "Canonical model id every session falls back to when neither its request nor its automation names one, or null when unset (sessions then run the platform default).",
5604
+ "title": "Default Model"
5605
+ }
5606
+ },
5607
+ "title": "OrganizationSettings",
5608
+ "type": "object"
5609
+ },
5556
5610
  "ParentKind": {
5557
5611
  "description": "How a session relates to its predecessor (parent_agent_session_id) \u2014\nthe ONE \"preceded-by\" chain for every predecessor relationship. Routing\nreads this when the distinction matters.\n\nCONTINUATION \u2014 a follow-up in the same conversation surface (e.g. a Slack\nthread reply spawning a fresh session on the same thread).\nRESUME \u2014 a conversation re-hosted on a new box after its sandbox was torn\ndown (interactive platform; later phase).",
5558
5612
  "enum": [
@@ -6843,9 +6897,9 @@
6843
6897
  "title": "Pr Title",
6844
6898
  "type": "string"
6845
6899
  },
6846
- "repo_name": {
6847
- "description": "The repository name, without the owner.",
6848
- "title": "Repo Name",
6900
+ "repo_full_name": {
6901
+ "description": "The repository's full \"owner/name\" identifier.",
6902
+ "title": "Repo Full Name",
6849
6903
  "type": "string"
6850
6904
  },
6851
6905
  "thumbs_down": {
@@ -6872,7 +6926,7 @@
6872
6926
  "pr_title",
6873
6927
  "pr_html_url",
6874
6928
  "pr_status",
6875
- "repo_name",
6929
+ "repo_full_name",
6876
6930
  "base_ref"
6877
6931
  ],
6878
6932
  "title": "ReviewCommentListItem",
@@ -7248,9 +7302,9 @@
7248
7302
  "title": "Pr Title",
7249
7303
  "type": "string"
7250
7304
  },
7251
- "repo_name": {
7252
- "description": "The repository name, without the owner.",
7253
- "title": "Repo Name",
7305
+ "repo_full_name": {
7306
+ "description": "The repository's full \"owner/name\" identifier.",
7307
+ "title": "Repo Full Name",
7254
7308
  "type": "string"
7255
7309
  },
7256
7310
  "reviewer": {
@@ -7282,7 +7336,7 @@
7282
7336
  "pr_html_url",
7283
7337
  "pr_status",
7284
7338
  "pr_author",
7285
- "repo_name",
7339
+ "repo_full_name",
7286
7340
  "base_ref"
7287
7341
  ],
7288
7342
  "title": "ReviewListItem",
@@ -7313,7 +7367,7 @@
7313
7367
  "description": "A repository filter option for the reviews view.",
7314
7368
  "properties": {
7315
7369
  "repository_name": {
7316
- "description": "The repository name, without the owner.",
7370
+ "description": "The repository's full \"owner/name\" identifier.",
7317
7371
  "title": "Repository Name",
7318
7372
  "type": "string"
7319
7373
  },
@@ -8831,13 +8885,9 @@
8831
8885
  "type": "object"
8832
8886
  },
8833
8887
  "SessionAgent": {
8834
- "description": "The agent this session ran: the config it actually executed, where that\nconfig came from, and the diff that was merged in \u2014 the same\neffective-value-plus-provenance shape `SessionBudget` uses.\n\n`config` is the snapshot frozen when the session was created; `config_id`\npoints at the saved config as it exists NOW. They diverge legitimately: a\nYAML edit after the session started, or any `override`, leaves the pointer\ndescribing something the session never ran.",
8888
+ "description": "The agent this session ran: the definition it actually executed, where\nthat definition came from, and the diff that was merged in \u2014 the same\neffective-value-plus-provenance shape `SessionBudget` uses.\n\n`config` is the snapshot frozen when the session was created;\n`automation_id` points at the automation as it exists NOW. They diverge\nlegitimately: a YAML edit after the session started, or any `override`,\nleaves the pointer describing something the session never ran.",
8835
8889
  "properties": {
8836
- "config": {
8837
- "$ref": "#/components/schemas/AgentConfig",
8838
- "description": "The agent config the session actually ran, frozen when the session was created."
8839
- },
8840
- "config_id": {
8890
+ "automation_id": {
8841
8891
  "anyOf": [
8842
8892
  {
8843
8893
  "type": "string"
@@ -8846,8 +8896,12 @@
8846
8896
  "type": "null"
8847
8897
  }
8848
8898
  ],
8849
- "description": "Identifier of the saved config this session's snapshot was taken from. Null for inline, platform-default, and built-in configs. Points at the config as it exists now, which may have changed since.",
8850
- "title": "Config Id"
8899
+ "description": "Identifier of the automation this session's snapshot was taken from. Null for raw sessions (nothing saved behind them), templates, and built-in agents. Points at the automation as it exists now, which may have changed since.",
8900
+ "title": "Automation Id"
8901
+ },
8902
+ "config": {
8903
+ "$ref": "#/components/schemas/AgentConfig",
8904
+ "description": "The agent definition the session actually ran, frozen when the session was created."
8851
8905
  },
8852
8906
  "override": {
8853
8907
  "anyOf": [
@@ -8970,25 +9024,6 @@
8970
9024
  "title": "SessionCost",
8971
9025
  "type": "object"
8972
9026
  },
8973
- "SessionDefaults": {
8974
- "description": "The account-wide session defaults.",
8975
- "properties": {
8976
- "model": {
8977
- "anyOf": [
8978
- {
8979
- "type": "string"
8980
- },
8981
- {
8982
- "type": "null"
8983
- }
8984
- ],
8985
- "description": "Canonical model id every session falls back to when neither the request nor its agent config names one, or null when unset (sessions then run the platform default).",
8986
- "title": "Model"
8987
- }
8988
- },
8989
- "title": "SessionDefaults",
8990
- "type": "object"
8991
- },
8992
9027
  "SessionEnvironment": {
8993
9028
  "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.",
8994
9029
  "properties": {
@@ -9178,6 +9213,36 @@
9178
9213
  "title": "SessionGit",
9179
9214
  "type": "object"
9180
9215
  },
9216
+ "SessionGitCommit": {
9217
+ "description": "One commit the session created in this repo (everything past the\nprovisioning checkout's sha), captured from the sandbox rather than the\ntranscript so it stays correct through amends, rebases, and commits made by\nscripts. The repo is the parent object, so it is not repeated here.",
9218
+ "properties": {
9219
+ "committed_at": {
9220
+ "format": "date-time",
9221
+ "title": "Committed At",
9222
+ "type": "string"
9223
+ },
9224
+ "pushed": {
9225
+ "title": "Pushed",
9226
+ "type": "boolean"
9227
+ },
9228
+ "sha": {
9229
+ "title": "Sha",
9230
+ "type": "string"
9231
+ },
9232
+ "subject": {
9233
+ "title": "Subject",
9234
+ "type": "string"
9235
+ }
9236
+ },
9237
+ "required": [
9238
+ "sha",
9239
+ "subject",
9240
+ "committed_at",
9241
+ "pushed"
9242
+ ],
9243
+ "title": "SessionGitCommit",
9244
+ "type": "object"
9245
+ },
9181
9246
  "SessionGitFile": {
9182
9247
  "description": "One file's uncommitted change, as `git diff HEAD --numstat` reports it\n(with intent-to-add, so a brand-new file still counts).",
9183
9248
  "properties": {
@@ -9208,7 +9273,7 @@
9208
9273
  "type": "object"
9209
9274
  },
9210
9275
  "SessionGitPr": {
9211
- "description": "A pull request the session opened in this repo, denormalized at capture\ntime so a surface renders a labeled link without joining gh_prs. Live PR\nstate (open/merged/closed) is not stored \u2014 read gh_prs where a view needs\nit. The repo is the parent object, so it is not repeated here.",
9276
+ "description": "A pull request the session opened in this repo, written the moment the\ncreating tool call's result lands (see extract_session_prs.PrCreateWatcher).\nLive PR state (open/merged/closed) is not stored \u2014 it lives on gh_prs,\njoined via `gh_pr_id` (GET /frontend/agents/sessions/{id}/git). The repo is\nthe parent object, so it is not repeated here.",
9212
9277
  "properties": {
9213
9278
  "gh_pr_id": {
9214
9279
  "anyOf": [
@@ -9251,6 +9316,19 @@
9251
9316
  "SessionGitRepo": {
9252
9317
  "description": "One checkout in the session's sandbox and everything the session did to\nit, split by whether it survived the sandbox.",
9253
9318
  "properties": {
9319
+ "commits": {
9320
+ "default": [],
9321
+ "items": {
9322
+ "$ref": "#/components/schemas/SessionGitCommit"
9323
+ },
9324
+ "title": "Commits",
9325
+ "type": "array"
9326
+ },
9327
+ "commits_total": {
9328
+ "default": 0,
9329
+ "title": "Commits Total",
9330
+ "type": "integer"
9331
+ },
9254
9332
  "full_name": {
9255
9333
  "title": "Full Name",
9256
9334
  "type": "string"
@@ -10213,18 +10291,20 @@
10213
10291
  },
10214
10292
  "StartAgentSessionRequest": {
10215
10293
  "additionalProperties": false,
10216
- "description": "Parameters for starting a new agent session: an optional base config\npointer, the message fields, and any AgentConfig keys to patch on top.",
10294
+ "description": "Parameters for starting a raw session: where it runs, its first\nmessage, and the run's own settings. Flat, in the AgentConfig vocabulary\n\u2014 a `claude:` or `permissions:` block copied from an agents/ YAML file\npastes in verbatim. There is no automation behind a raw session; to run a\nsaved automation, invoke it with POST /v1/automations/{automation_id}/sessions.\n\nExtra keys are a 422, not silently dropped \u2014 a retired field\n(`from_config_id`, `input`, `ellipsis`, `config_id`) must fail loudly on\nan old client, never no-op.",
10217
10295
  "properties": {
10218
10296
  "budget": {
10219
10297
  "anyOf": [
10220
10298
  {
10221
- "$ref": "#/components/schemas/AgentConfigBudget"
10299
+ "exclusiveMinimum": 0.0,
10300
+ "type": "number"
10222
10301
  },
10223
10302
  {
10224
10303
  "type": "null"
10225
10304
  }
10226
10305
  ],
10227
- "description": "The session's spend limits, e.g. {\"session\": 5.0}."
10306
+ "description": "The most this session may spend, in US dollars. Omitted, the organization's default applies. Above the organization's per-session ceiling is a 400.",
10307
+ "title": "Budget"
10228
10308
  },
10229
10309
  "claude": {
10230
10310
  "anyOf": [
@@ -10235,7 +10315,7 @@
10235
10315
  "type": "null"
10236
10316
  }
10237
10317
  ],
10238
- "description": "The Claude-harness block: `{\"model\": ...}` to pick this session's model, plus system/effort/fallback_model/max_turns/settings."
10318
+ "description": "The Claude-harness block: `{\"model\": ...}` to pick this session's model, plus system/effort/fallback_model/max_turns/settings. Omit the model to run the organization's default."
10239
10319
  },
10240
10320
  "codex": {
10241
10321
  "anyOf": [
@@ -10246,11 +10326,7 @@
10246
10326
  "type": "null"
10247
10327
  }
10248
10328
  ],
10249
- "description": "The Codex-harness block. Its presence on the EFFECTIVE config selects the Codex harness, exactly as in a saved config."
10250
- },
10251
- "ellipsis": {
10252
- "$ref": "#/components/schemas/StartSessionEllipsis",
10253
- "description": "Platform housekeeping: metadata, interactive, force_rebuild."
10329
+ "description": "The Codex-harness block. Its presence selects the Codex harness, exactly as in a saved automation; a request may not carry both `claude` and `codex`."
10254
10330
  },
10255
10331
  "environment": {
10256
10332
  "anyOf": [
@@ -10264,33 +10340,29 @@
10264
10340
  "type": "null"
10265
10341
  }
10266
10342
  ],
10267
- "description": "Where the session runs. A STRING (a saved environment's `env_...` id or name) re-picks that environment wholesale \u2014 it beats the base config's own reference. An OBJECT deep-merges onto the resolved environment (repositories merge by identity, see above).",
10343
+ "description": "Where the session runs. A STRING is a saved environment's name or `env_...` id. An OBJECT is an inline environment for this session only. Omitted, the session runs in the organization's default environment, else the built-in basic sandbox.",
10268
10344
  "title": "Environment"
10269
10345
  },
10270
- "from_config_id": {
10271
- "anyOf": [
10272
- {
10273
- "type": "string"
10274
- },
10275
- {
10276
- "type": "null"
10277
- }
10278
- ],
10279
- "description": "The saved agent config to use as this session's base: its id, or the agent's customer-unique `ellipsis.name`. Omitted, the base is the bare ad-hoc config \u2014 an empty system prompt on the account's default model in the basic sandbox \u2014 so the request's own keys and prompt fully describe the run.",
10280
- "title": "From Config Id"
10346
+ "force_rebuild": {
10347
+ "default": false,
10348
+ "description": "Skip the image cache for this session's initial provision: a fresh full build whose snapshot then refreshes the cache for later runs. The CLI's `--rebuild`.",
10349
+ "title": "Force Rebuild",
10350
+ "type": "boolean"
10281
10351
  },
10282
- "input": {
10283
- "anyOf": [
10284
- {
10285
- "additionalProperties": true,
10286
- "type": "object"
10287
- },
10288
- {
10289
- "type": "null"
10290
- }
10291
- ],
10292
- "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.",
10293
- "title": "Input"
10352
+ "interactive": {
10353
+ "default": true,
10354
+ "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, since nothing can ever be sent to it later. Sessions on the Codex harness are one-shot regardless.",
10355
+ "title": "Interactive",
10356
+ "type": "boolean"
10357
+ },
10358
+ "metadata": {
10359
+ "additionalProperties": {
10360
+ "type": "string"
10361
+ },
10362
+ "default": {},
10363
+ "description": "Arbitrary string key/value metadata stored on the session.",
10364
+ "title": "Metadata",
10365
+ "type": "object"
10294
10366
  },
10295
10367
  "output": {
10296
10368
  "anyOf": [
@@ -10338,15 +10410,58 @@
10338
10410
  "type": "null"
10339
10411
  }
10340
10412
  ],
10341
- "description": "Config-declared skills; replaces the base config's list.",
10413
+ "description": "Skills installed for this session.",
10342
10414
  "title": "Skills"
10343
10415
  }
10344
10416
  },
10345
10417
  "title": "StartAgentSessionRequest",
10346
10418
  "type": "object"
10347
10419
  },
10348
- "StartCliAuthResponse": {
10349
- "description": "A freshly minted device-code flow: show the user code (or open the\ncomplete URI) and poll with the device code.",
10420
+ "StartAutomationSessionRequest": {
10421
+ "additionalProperties": false,
10422
+ "description": "Parameters for invoking an automation. Deliberately tiny: the\nautomation's definition binds (persona, model, environment, permissions,\nskills, budget); a caller supplies only its typed input, an optional\ntighter budget, and metadata. Anything else is a 422 \u2014 to run with a\ndifferent persona or environment, start a raw session instead.",
10423
+ "properties": {
10424
+ "budget": {
10425
+ "anyOf": [
10426
+ {
10427
+ "exclusiveMinimum": 0.0,
10428
+ "type": "number"
10429
+ },
10430
+ {
10431
+ "type": "null"
10432
+ }
10433
+ ],
10434
+ "description": "Tighten this run's spend cap, in US dollars. May only lower the automation's own session budget; a higher number, or one above the organization's ceiling, is a 400.",
10435
+ "title": "Budget"
10436
+ },
10437
+ "input": {
10438
+ "anyOf": [
10439
+ {
10440
+ "additionalProperties": true,
10441
+ "type": "object"
10442
+ },
10443
+ {
10444
+ "type": "null"
10445
+ }
10446
+ ],
10447
+ "description": "The typed payload for an automation that declares input.json_schema: validated against it (422 on mismatch) and rendered into the session's first message through the automation's input.message template. Required when the automation declares a schema; a 422 when it does not.",
10448
+ "title": "Input"
10449
+ },
10450
+ "metadata": {
10451
+ "additionalProperties": {
10452
+ "type": "string"
10453
+ },
10454
+ "default": {},
10455
+ "description": "Arbitrary string key/value metadata stored on the session.",
10456
+ "title": "Metadata",
10457
+ "type": "object"
10458
+ }
10459
+ },
10460
+ "title": "StartAutomationSessionRequest",
10461
+ "type": "object"
10462
+ },
10463
+ "StartCliAuthResponse": {
10464
+ "description": "A freshly minted device-code flow: show the user code (or open the\ncomplete URI) and poll with the device code.",
10350
10465
  "properties": {
10351
10466
  "device_code": {
10352
10467
  "description": "The secret the CLI polls with. Never shown to the human.",
@@ -10390,35 +10505,6 @@
10390
10505
  "title": "StartCliAuthResponse",
10391
10506
  "type": "object"
10392
10507
  },
10393
- "StartSessionEllipsis": {
10394
- "additionalProperties": false,
10395
- "description": "Platform housekeeping for the session \u2014 the request-side `ellipsis`\nblock. Session-scoped: unlike a config file's `ellipsis` block it carries\nno `name`/`enabled` (those describe a saved agent, not a run) \u2014 and\nsending them here is a 422, not a silent drop.",
10396
- "properties": {
10397
- "force_rebuild": {
10398
- "default": false,
10399
- "description": "Skip the image cache for this session's initial provision: a fresh full build whose snapshot then refreshes the cache for later runs. A wake of a durable session provisions through the cache as usual. The CLI's `--rebuild`.",
10400
- "title": "Force Rebuild",
10401
- "type": "boolean"
10402
- },
10403
- "interactive": {
10404
- "default": true,
10405
- "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.",
10406
- "title": "Interactive",
10407
- "type": "boolean"
10408
- },
10409
- "metadata": {
10410
- "additionalProperties": {
10411
- "type": "string"
10412
- },
10413
- "default": {},
10414
- "description": "Arbitrary string key/value metadata stored on the session.",
10415
- "title": "Metadata",
10416
- "type": "object"
10417
- }
10418
- },
10419
- "title": "StartSessionEllipsis",
10420
- "type": "object"
10421
- },
10422
10508
  "TokensInfo": {
10423
10509
  "additionalProperties": false,
10424
10510
  "description": "Token/cost usage, per record (one API call's counts, aggregate fields at\ntheir zero defaults) or aggregated per execution/session\n(compute_spend_from_records derives num_turns and cost_usd).\n\nStrict on purpose: this is our own persisted schema, so an unknown key is a\nwriter bug (the num_turns=0 bug shipped because a Claude Code usage dict\nvalidated leniently against this model, silently zeroing every\nnon-overlapping field). Legacy keys were dropped from persisted blobs by\nthe 2026-07-26 tokens_info migration; per-model usage lives on\n`execution.model_usage` (CC's modelUsage, verbatim).",
@@ -10485,18 +10571,18 @@
10485
10571
  "title": "TranscriptIngestResult",
10486
10572
  "type": "object"
10487
10573
  },
10488
- "UpdateAgentConfigRequest": {
10489
- "description": "A replacement definition for an agent managed through the API.",
10574
+ "UpdateAutomationRequest": {
10575
+ "description": "A replacement definition for an automation managed through the API.",
10490
10576
  "properties": {
10491
- "config": {
10577
+ "automation": {
10492
10578
  "$ref": "#/components/schemas/AgentConfig",
10493
- "description": "The agent's new definition. Replaces the previous one wholesale \u2014 this is not a partial update."
10579
+ "description": "The automation's new definition. Replaces the previous one wholesale \u2014 this is not a partial update."
10494
10580
  }
10495
10581
  },
10496
10582
  "required": [
10497
- "config"
10583
+ "automation"
10498
10584
  ],
10499
- "title": "UpdateAgentConfigRequest",
10585
+ "title": "UpdateAutomationRequest",
10500
10586
  "type": "object"
10501
10587
  },
10502
10588
  "UpdateEnvironmentRequest": {
@@ -10737,11 +10823,71 @@
10737
10823
  },
10738
10824
  "openapi": "3.1.0",
10739
10825
  "paths": {
10740
- "/v1/agents/configs": {
10826
+ "/v1/alerts": {
10741
10827
  "get": {
10742
- "description": "List saved agent configs.",
10743
- "operationId": "list_agent_configs",
10828
+ "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.",
10829
+ "operationId": "list_alerts",
10744
10830
  "parameters": [
10831
+ {
10832
+ "in": "query",
10833
+ "name": "status",
10834
+ "required": false,
10835
+ "schema": {
10836
+ "anyOf": [
10837
+ {
10838
+ "$ref": "#/components/schemas/AlertStatus"
10839
+ },
10840
+ {
10841
+ "type": "null"
10842
+ }
10843
+ ],
10844
+ "title": "Status"
10845
+ }
10846
+ },
10847
+ {
10848
+ "in": "query",
10849
+ "name": "source",
10850
+ "required": false,
10851
+ "schema": {
10852
+ "anyOf": [
10853
+ {
10854
+ "$ref": "#/components/schemas/AlertSource"
10855
+ },
10856
+ {
10857
+ "type": "null"
10858
+ }
10859
+ ],
10860
+ "title": "Source"
10861
+ }
10862
+ },
10863
+ {
10864
+ "in": "query",
10865
+ "name": "limit",
10866
+ "required": false,
10867
+ "schema": {
10868
+ "default": 100,
10869
+ "maximum": 200,
10870
+ "minimum": 1,
10871
+ "title": "Limit",
10872
+ "type": "integer"
10873
+ }
10874
+ },
10875
+ {
10876
+ "in": "query",
10877
+ "name": "cursor",
10878
+ "required": false,
10879
+ "schema": {
10880
+ "anyOf": [
10881
+ {
10882
+ "type": "string"
10883
+ },
10884
+ {
10885
+ "type": "null"
10886
+ }
10887
+ ],
10888
+ "title": "Cursor"
10889
+ }
10890
+ },
10745
10891
  {
10746
10892
  "in": "header",
10747
10893
  "name": "user-agent",
@@ -10764,7 +10910,7 @@
10764
10910
  "content": {
10765
10911
  "application/json": {
10766
10912
  "schema": {
10767
- "$ref": "#/components/schemas/AgentConfigsListResponse"
10913
+ "$ref": "#/components/schemas/AlertsListResponse"
10768
10914
  }
10769
10915
  }
10770
10916
  },
@@ -10806,16 +10952,28 @@
10806
10952
  "HTTPBearer": []
10807
10953
  }
10808
10954
  ],
10809
- "summary": "List Agent Configs",
10955
+ "summary": "List Alerts",
10810
10956
  "tags": [
10811
10957
  "v1"
10812
10958
  ],
10813
- "x-ellipsis-sdk-method": "agents.configs.list"
10814
- },
10815
- "post": {
10816
- "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.",
10817
- "operationId": "create_agent_config",
10959
+ "x-ellipsis-sdk-method": "alerts.list",
10960
+ "x-ellipsis-undocumented": true
10961
+ }
10962
+ },
10963
+ "/v1/alerts/{alert_id}": {
10964
+ "get": {
10965
+ "description": "Return one alert by id.\n\n404 if it doesn't exist or belongs to another organization.",
10966
+ "operationId": "get_alert",
10818
10967
  "parameters": [
10968
+ {
10969
+ "in": "path",
10970
+ "name": "alert_id",
10971
+ "required": true,
10972
+ "schema": {
10973
+ "title": "Alert Id",
10974
+ "type": "string"
10975
+ }
10976
+ },
10819
10977
  {
10820
10978
  "in": "header",
10821
10979
  "name": "user-agent",
@@ -10833,37 +10991,17 @@
10833
10991
  }
10834
10992
  }
10835
10993
  ],
10836
- "requestBody": {
10837
- "content": {
10838
- "application/json": {
10839
- "schema": {
10840
- "$ref": "#/components/schemas/CreateAgentConfigRequest"
10841
- }
10842
- }
10843
- },
10844
- "required": true
10845
- },
10846
10994
  "responses": {
10847
- "201": {
10995
+ "200": {
10848
10996
  "content": {
10849
10997
  "application/json": {
10850
10998
  "schema": {
10851
- "$ref": "#/components/schemas/AgentConfigResponse"
10999
+ "$ref": "#/components/schemas/AlertResponse"
10852
11000
  }
10853
11001
  }
10854
11002
  },
10855
11003
  "description": "Successful Response"
10856
11004
  },
10857
- "400": {
10858
- "content": {
10859
- "application/json": {
10860
- "schema": {
10861
- "$ref": "#/components/schemas/ErrorResponse"
10862
- }
10863
- }
10864
- },
10865
- "description": "The config is invalid."
10866
- },
10867
11005
  "401": {
10868
11006
  "content": {
10869
11007
  "application/json": {
@@ -10884,7 +11022,7 @@
10884
11022
  },
10885
11023
  "description": "The credential may not perform this action, or the account is blocked."
10886
11024
  },
10887
- "409": {
11025
+ "404": {
10888
11026
  "content": {
10889
11027
  "application/json": {
10890
11028
  "schema": {
@@ -10892,17 +11030,17 @@
10892
11030
  }
10893
11031
  }
10894
11032
  },
10895
- "description": "An agent with that name already exists."
11033
+ "description": "No such alert in your account."
10896
11034
  },
10897
11035
  "422": {
10898
11036
  "content": {
10899
11037
  "application/json": {
10900
11038
  "schema": {
10901
- "$ref": "#/components/schemas/ErrorResponse"
11039
+ "$ref": "#/components/schemas/HTTPValidationError"
10902
11040
  }
10903
11041
  }
10904
11042
  },
10905
- "description": "The agent's name contains no usable characters, or a file reference names no repository."
11043
+ "description": "Validation Error"
10906
11044
  }
10907
11045
  },
10908
11046
  "security": [
@@ -10910,24 +11048,25 @@
10910
11048
  "HTTPBearer": []
10911
11049
  }
10912
11050
  ],
10913
- "summary": "Create Agent Config",
11051
+ "summary": "Get Alert",
10914
11052
  "tags": [
10915
11053
  "v1"
10916
11054
  ],
10917
- "x-ellipsis-sdk-method": "agents.configs.create"
11055
+ "x-ellipsis-sdk-method": "alerts.get",
11056
+ "x-ellipsis-undocumented": true
10918
11057
  }
10919
11058
  },
10920
- "/v1/agents/configs/{config_id}": {
10921
- "delete": {
10922
- "description": "Delete an agent, by id or by the agent's name.\n\nThe agent stops running and its name is freed immediately; its\npast sessions remain readable. Only for agents managed through\nthis API \u2014 delete the file to remove one defined by a\nrepository.",
10923
- "operationId": "delete_agent_config",
11059
+ "/v1/alerts/{alert_id}/dismiss": {
11060
+ "post": {
11061
+ "description": "Dismiss an open alert and return it.\n\n409 when the alert is not open; 404 when it doesn't exist.",
11062
+ "operationId": "dismiss_alert",
10924
11063
  "parameters": [
10925
11064
  {
10926
11065
  "in": "path",
10927
- "name": "config_id",
11066
+ "name": "alert_id",
10928
11067
  "required": true,
10929
11068
  "schema": {
10930
- "title": "Config Id",
11069
+ "title": "Alert Id",
10931
11070
  "type": "string"
10932
11071
  }
10933
11072
  },
@@ -10949,7 +11088,14 @@
10949
11088
  }
10950
11089
  ],
10951
11090
  "responses": {
10952
- "204": {
11091
+ "200": {
11092
+ "content": {
11093
+ "application/json": {
11094
+ "schema": {
11095
+ "$ref": "#/components/schemas/AlertResponse"
11096
+ }
11097
+ }
11098
+ },
10953
11099
  "description": "Successful Response"
10954
11100
  },
10955
11101
  "401": {
@@ -10980,7 +11126,7 @@
10980
11126
  }
10981
11127
  }
10982
11128
  },
10983
- "description": "No such config in your account."
11129
+ "description": "No such alert in your account."
10984
11130
  },
10985
11131
  "409": {
10986
11132
  "content": {
@@ -10990,7 +11136,7 @@
10990
11136
  }
10991
11137
  }
10992
11138
  },
10993
- "description": "The agent is defined by a file in a repository; delete that file instead."
11139
+ "description": "The alert is not open."
10994
11140
  },
10995
11141
  "422": {
10996
11142
  "content": {
@@ -11008,243 +11154,142 @@
11008
11154
  "HTTPBearer": []
11009
11155
  }
11010
11156
  ],
11011
- "summary": "Delete Agent Config",
11157
+ "summary": "Dismiss Alert",
11012
11158
  "tags": [
11013
11159
  "v1"
11014
11160
  ],
11015
- "x-ellipsis-sdk-method": "agents.configs.delete"
11016
- },
11161
+ "x-ellipsis-sdk-method": "alerts.dismiss",
11162
+ "x-ellipsis-undocumented": true
11163
+ }
11164
+ },
11165
+ "/v1/analytics/metrics": {
11017
11166
  "get": {
11018
- "description": "Return one saved agent config, by id or by the agent's name.",
11019
- "operationId": "get_agent_config",
11167
+ "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.",
11168
+ "operationId": "get_analytics_metrics",
11020
11169
  "parameters": [
11021
11170
  {
11022
- "in": "path",
11023
- "name": "config_id",
11024
- "required": true,
11171
+ "in": "query",
11172
+ "name": "days",
11173
+ "required": false,
11025
11174
  "schema": {
11026
- "title": "Config Id",
11027
- "type": "string"
11175
+ "anyOf": [
11176
+ {
11177
+ "type": "integer"
11178
+ },
11179
+ {
11180
+ "type": "null"
11181
+ }
11182
+ ],
11183
+ "title": "Days"
11028
11184
  }
11029
11185
  },
11030
11186
  {
11031
- "in": "header",
11032
- "name": "user-agent",
11187
+ "in": "query",
11188
+ "name": "start",
11033
11189
  "required": false,
11034
11190
  "schema": {
11035
11191
  "anyOf": [
11036
11192
  {
11193
+ "format": "date-time",
11037
11194
  "type": "string"
11038
11195
  },
11039
11196
  {
11040
11197
  "type": "null"
11041
11198
  }
11042
11199
  ],
11043
- "title": "User-Agent"
11200
+ "title": "Start"
11044
11201
  }
11045
- }
11046
- ],
11047
- "responses": {
11048
- "200": {
11049
- "content": {
11050
- "application/json": {
11051
- "schema": {
11052
- "$ref": "#/components/schemas/AgentConfigResponse"
11053
- }
11054
- }
11055
- },
11056
- "description": "Successful Response"
11057
11202
  },
11058
- "401": {
11059
- "content": {
11060
- "application/json": {
11061
- "schema": {
11062
- "$ref": "#/components/schemas/ErrorResponse"
11203
+ {
11204
+ "in": "query",
11205
+ "name": "end",
11206
+ "required": false,
11207
+ "schema": {
11208
+ "anyOf": [
11209
+ {
11210
+ "format": "date-time",
11211
+ "type": "string"
11212
+ },
11213
+ {
11214
+ "type": "null"
11063
11215
  }
11064
- }
11065
- },
11066
- "description": "The bearer token is missing, invalid, or revoked."
11067
- },
11068
- "403": {
11069
- "content": {
11070
- "application/json": {
11071
- "schema": {
11072
- "$ref": "#/components/schemas/ErrorResponse"
11073
- }
11074
- }
11075
- },
11076
- "description": "The credential may not perform this action, or the account is blocked."
11077
- },
11078
- "404": {
11079
- "content": {
11080
- "application/json": {
11081
- "schema": {
11082
- "$ref": "#/components/schemas/ErrorResponse"
11083
- }
11084
- }
11085
- },
11086
- "description": "No such config in your account."
11216
+ ],
11217
+ "title": "End"
11218
+ }
11087
11219
  },
11088
- "422": {
11089
- "content": {
11090
- "application/json": {
11091
- "schema": {
11092
- "$ref": "#/components/schemas/HTTPValidationError"
11093
- }
11094
- }
11095
- },
11096
- "description": "Validation Error"
11097
- }
11098
- },
11099
- "security": [
11100
11220
  {
11101
- "HTTPBearer": []
11102
- }
11103
- ],
11104
- "summary": "Get Agent Config",
11105
- "tags": [
11106
- "v1"
11107
- ],
11108
- "x-ellipsis-sdk-method": "agents.configs.get"
11109
- },
11110
- "put": {
11111
- "description": "Replace an agent's definition, by id or by the agent's name.\n\nThe whole definition is replaced, and the change is live at\nonce. Only for agents managed through this API: one defined by a\nrepository file is a 409, since the next push to that file would\nrevert the change \u2014 unlink it first to take ownership.",
11112
- "operationId": "update_agent_config",
11113
- "parameters": [
11114
- {
11115
- "in": "path",
11116
- "name": "config_id",
11117
- "required": true,
11221
+ "description": "Filter to repositories by \"owner/name\".",
11222
+ "in": "query",
11223
+ "name": "repo",
11224
+ "required": false,
11118
11225
  "schema": {
11119
- "title": "Config Id",
11120
- "type": "string"
11226
+ "anyOf": [
11227
+ {
11228
+ "items": {
11229
+ "type": "string"
11230
+ },
11231
+ "type": "array"
11232
+ },
11233
+ {
11234
+ "type": "null"
11235
+ }
11236
+ ],
11237
+ "description": "Filter to repositories by \"owner/name\".",
11238
+ "title": "Repo"
11121
11239
  }
11122
11240
  },
11123
11241
  {
11124
- "in": "header",
11125
- "name": "user-agent",
11242
+ "description": "Filter by PR-author login(s).",
11243
+ "in": "query",
11244
+ "name": "author",
11126
11245
  "required": false,
11127
11246
  "schema": {
11128
11247
  "anyOf": [
11129
11248
  {
11130
- "type": "string"
11249
+ "items": {
11250
+ "type": "string"
11251
+ },
11252
+ "type": "array"
11131
11253
  },
11132
11254
  {
11133
11255
  "type": "null"
11134
11256
  }
11135
11257
  ],
11136
- "title": "User-Agent"
11137
- }
11138
- }
11139
- ],
11140
- "requestBody": {
11141
- "content": {
11142
- "application/json": {
11143
- "schema": {
11144
- "$ref": "#/components/schemas/UpdateAgentConfigRequest"
11145
- }
11258
+ "description": "Filter by PR-author login(s).",
11259
+ "title": "Author"
11146
11260
  }
11147
11261
  },
11148
- "required": true
11149
- },
11150
- "responses": {
11151
- "200": {
11152
- "content": {
11153
- "application/json": {
11154
- "schema": {
11155
- "$ref": "#/components/schemas/AgentConfigResponse"
11156
- }
11157
- }
11158
- },
11159
- "description": "Successful Response"
11160
- },
11161
- "400": {
11162
- "content": {
11163
- "application/json": {
11164
- "schema": {
11165
- "$ref": "#/components/schemas/ErrorResponse"
11166
- }
11167
- }
11168
- },
11169
- "description": "The config is invalid (for example an unschedulable cron expression)."
11170
- },
11171
- "401": {
11172
- "content": {
11173
- "application/json": {
11174
- "schema": {
11175
- "$ref": "#/components/schemas/ErrorResponse"
11176
- }
11177
- }
11178
- },
11179
- "description": "The bearer token is missing, invalid, or revoked."
11180
- },
11181
- "403": {
11182
- "content": {
11183
- "application/json": {
11184
- "schema": {
11185
- "$ref": "#/components/schemas/ErrorResponse"
11186
- }
11187
- }
11188
- },
11189
- "description": "The credential may not perform this action, or the account is blocked."
11190
- },
11191
- "404": {
11192
- "content": {
11193
- "application/json": {
11194
- "schema": {
11195
- "$ref": "#/components/schemas/ErrorResponse"
11196
- }
11197
- }
11198
- },
11199
- "description": "No such config in your account."
11200
- },
11201
- "409": {
11202
- "content": {
11203
- "application/json": {
11204
- "schema": {
11205
- "$ref": "#/components/schemas/ErrorResponse"
11206
- }
11207
- }
11208
- },
11209
- "description": "The agent is defined by a file in a repository, or another live agent already holds the new name."
11210
- },
11211
- "422": {
11212
- "content": {
11213
- "application/json": {
11214
- "schema": {
11215
- "$ref": "#/components/schemas/ErrorResponse"
11216
- }
11217
- }
11218
- },
11219
- "description": "The agent's name is missing or malformed, or a file reference names no repository."
11220
- }
11221
- },
11222
- "security": [
11223
11262
  {
11224
- "HTTPBearer": []
11225
- }
11226
- ],
11227
- "summary": "Update Agent Config",
11228
- "tags": [
11229
- "v1"
11230
- ],
11231
- "x-ellipsis-sdk-method": "agents.configs.update"
11232
- }
11233
- },
11234
- "/v1/agents/configs/{config_id}/link": {
11235
- "post": {
11236
- "description": "Move an agent into a repository, by id or by the agent's name.\n\nOpens a pull request adding the agent's config file. The agent\nkeeps running unchanged meanwhile; merging hands it over to the\nfile, after which the file is what changes it. Nothing happens\nif the pull request is never merged.",
11237
- "operationId": "link_agent_config",
11238
- "parameters": [
11239
- {
11240
- "in": "path",
11241
- "name": "config_id",
11242
- "required": true,
11263
+ "in": "query",
11264
+ "name": "account_type",
11265
+ "required": false,
11243
11266
  "schema": {
11244
- "title": "Config Id",
11267
+ "default": "all",
11268
+ "title": "Account Type",
11245
11269
  "type": "string"
11246
11270
  }
11247
11271
  },
11272
+ {
11273
+ "description": "Filter by parent-PR status (open|draft|merged|closed).",
11274
+ "in": "query",
11275
+ "name": "status",
11276
+ "required": false,
11277
+ "schema": {
11278
+ "anyOf": [
11279
+ {
11280
+ "items": {
11281
+ "type": "string"
11282
+ },
11283
+ "type": "array"
11284
+ },
11285
+ {
11286
+ "type": "null"
11287
+ }
11288
+ ],
11289
+ "description": "Filter by parent-PR status (open|draft|merged|closed).",
11290
+ "title": "Status"
11291
+ }
11292
+ },
11248
11293
  {
11249
11294
  "in": "header",
11250
11295
  "name": "user-agent",
@@ -11262,22 +11307,12 @@
11262
11307
  }
11263
11308
  }
11264
11309
  ],
11265
- "requestBody": {
11266
- "content": {
11267
- "application/json": {
11268
- "schema": {
11269
- "$ref": "#/components/schemas/LinkAgentConfigRequest"
11270
- }
11271
- }
11272
- },
11273
- "required": true
11274
- },
11275
11310
  "responses": {
11276
11311
  "200": {
11277
11312
  "content": {
11278
11313
  "application/json": {
11279
11314
  "schema": {
11280
- "$ref": "#/components/schemas/LinkAgentConfigResponse"
11315
+ "$ref": "#/components/schemas/GetAnalyticsMetricsResponse"
11281
11316
  }
11282
11317
  }
11283
11318
  },
@@ -11291,7 +11326,7 @@
11291
11326
  }
11292
11327
  }
11293
11328
  },
11294
- "description": "The path is not a synced config location, or the repository has no commits."
11329
+ "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
11295
11330
  },
11296
11331
  "401": {
11297
11332
  "content": {
@@ -11313,35 +11348,15 @@
11313
11348
  },
11314
11349
  "description": "The credential may not perform this action, or the account is blocked."
11315
11350
  },
11316
- "404": {
11317
- "content": {
11318
- "application/json": {
11319
- "schema": {
11320
- "$ref": "#/components/schemas/ErrorResponse"
11321
- }
11322
- }
11323
- },
11324
- "description": "The config or repository was not found in your account."
11325
- },
11326
- "409": {
11327
- "content": {
11328
- "application/json": {
11329
- "schema": {
11330
- "$ref": "#/components/schemas/ErrorResponse"
11331
- }
11332
- }
11333
- },
11334
- "description": "The agent is already defined by a file, a link is already open for it, a file already exists at that path, or another agent syncs from it."
11335
- },
11336
11351
  "422": {
11337
11352
  "content": {
11338
11353
  "application/json": {
11339
11354
  "schema": {
11340
- "$ref": "#/components/schemas/ErrorResponse"
11355
+ "$ref": "#/components/schemas/HTTPValidationError"
11341
11356
  }
11342
11357
  }
11343
11358
  },
11344
- "description": "GitHub rejected the pull request."
11359
+ "description": "Validation Error"
11345
11360
  }
11346
11361
  },
11347
11362
  "security": [
@@ -11349,123 +11364,140 @@
11349
11364
  "HTTPBearer": []
11350
11365
  }
11351
11366
  ],
11352
- "summary": "Link Agent Config",
11367
+ "summary": "Get Analytics Metrics",
11353
11368
  "tags": [
11354
11369
  "v1"
11355
11370
  ],
11356
- "x-ellipsis-sdk-method": "agents.configs.link"
11371
+ "x-ellipsis-sdk-method": "analytics.metrics",
11372
+ "x-ellipsis-undocumented": true
11357
11373
  }
11358
11374
  },
11359
- "/v1/agents/configs/{config_id}/unlink": {
11360
- "post": {
11361
- "description": "Take over an agent from its file, by id or by the agent's name.\n\nThe file stops governing the agent immediately and further\nchanges go through this API. The file is left in place, inert \u2014\ndelete it whenever you like.",
11362
- "operationId": "unlink_agent_config",
11375
+ "/v1/analytics/pull-requests": {
11376
+ "get": {
11377
+ "description": "Return pull-request analytics.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days). account_type in all|user|bot scopes the authors.",
11378
+ "operationId": "get_analytics_pull_requests",
11363
11379
  "parameters": [
11364
11380
  {
11365
- "in": "path",
11366
- "name": "config_id",
11367
- "required": true,
11381
+ "in": "query",
11382
+ "name": "days",
11383
+ "required": false,
11368
11384
  "schema": {
11369
- "title": "Config Id",
11370
- "type": "string"
11385
+ "anyOf": [
11386
+ {
11387
+ "type": "integer"
11388
+ },
11389
+ {
11390
+ "type": "null"
11391
+ }
11392
+ ],
11393
+ "title": "Days"
11371
11394
  }
11372
11395
  },
11373
11396
  {
11374
- "in": "header",
11375
- "name": "user-agent",
11397
+ "in": "query",
11398
+ "name": "start",
11376
11399
  "required": false,
11377
11400
  "schema": {
11378
11401
  "anyOf": [
11379
11402
  {
11403
+ "format": "date-time",
11380
11404
  "type": "string"
11381
11405
  },
11382
11406
  {
11383
11407
  "type": "null"
11384
11408
  }
11385
11409
  ],
11386
- "title": "User-Agent"
11410
+ "title": "Start"
11387
11411
  }
11388
- }
11389
- ],
11390
- "responses": {
11391
- "200": {
11392
- "content": {
11393
- "application/json": {
11394
- "schema": {
11395
- "$ref": "#/components/schemas/AgentConfigResponse"
11396
- }
11397
- }
11398
- },
11399
- "description": "Successful Response"
11400
11412
  },
11401
- "401": {
11402
- "content": {
11403
- "application/json": {
11404
- "schema": {
11405
- "$ref": "#/components/schemas/ErrorResponse"
11413
+ {
11414
+ "in": "query",
11415
+ "name": "end",
11416
+ "required": false,
11417
+ "schema": {
11418
+ "anyOf": [
11419
+ {
11420
+ "format": "date-time",
11421
+ "type": "string"
11422
+ },
11423
+ {
11424
+ "type": "null"
11406
11425
  }
11407
- }
11408
- },
11409
- "description": "The bearer token is missing, invalid, or revoked."
11426
+ ],
11427
+ "title": "End"
11428
+ }
11410
11429
  },
11411
- "403": {
11412
- "content": {
11413
- "application/json": {
11414
- "schema": {
11415
- "$ref": "#/components/schemas/ErrorResponse"
11430
+ {
11431
+ "description": "Filter to repositories by \"owner/name\".",
11432
+ "in": "query",
11433
+ "name": "repo",
11434
+ "required": false,
11435
+ "schema": {
11436
+ "anyOf": [
11437
+ {
11438
+ "items": {
11439
+ "type": "string"
11440
+ },
11441
+ "type": "array"
11442
+ },
11443
+ {
11444
+ "type": "null"
11416
11445
  }
11417
- }
11418
- },
11419
- "description": "The credential may not perform this action, or the account is blocked."
11446
+ ],
11447
+ "description": "Filter to repositories by \"owner/name\".",
11448
+ "title": "Repo"
11449
+ }
11420
11450
  },
11421
- "404": {
11422
- "content": {
11423
- "application/json": {
11424
- "schema": {
11425
- "$ref": "#/components/schemas/ErrorResponse"
11451
+ {
11452
+ "description": "Filter by PR-author login(s).",
11453
+ "in": "query",
11454
+ "name": "author",
11455
+ "required": false,
11456
+ "schema": {
11457
+ "anyOf": [
11458
+ {
11459
+ "items": {
11460
+ "type": "string"
11461
+ },
11462
+ "type": "array"
11463
+ },
11464
+ {
11465
+ "type": "null"
11426
11466
  }
11427
- }
11428
- },
11429
- "description": "No such config in your account."
11467
+ ],
11468
+ "description": "Filter by PR-author login(s).",
11469
+ "title": "Author"
11470
+ }
11430
11471
  },
11431
- "409": {
11432
- "content": {
11433
- "application/json": {
11434
- "schema": {
11435
- "$ref": "#/components/schemas/ErrorResponse"
11436
- }
11437
- }
11438
- },
11439
- "description": "The agent is already managed through the API."
11472
+ {
11473
+ "in": "query",
11474
+ "name": "account_type",
11475
+ "required": false,
11476
+ "schema": {
11477
+ "default": "all",
11478
+ "title": "Account Type",
11479
+ "type": "string"
11480
+ }
11440
11481
  },
11441
- "422": {
11442
- "content": {
11443
- "application/json": {
11444
- "schema": {
11445
- "$ref": "#/components/schemas/ErrorResponse"
11446
- }
11447
- }
11448
- },
11449
- "description": "The config has a file reference that names no repository, so it cannot resolve without its source repository."
11450
- }
11451
- },
11452
- "security": [
11453
11482
  {
11454
- "HTTPBearer": []
11455
- }
11456
- ],
11457
- "summary": "Unlink Agent Config",
11458
- "tags": [
11459
- "v1"
11460
- ],
11461
- "x-ellipsis-sdk-method": "agents.configs.unlink"
11462
- }
11463
- },
11464
- "/v1/agents/templates": {
11465
- "get": {
11466
- "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.",
11467
- "operationId": "list_agent_templates",
11468
- "parameters": [
11483
+ "in": "query",
11484
+ "name": "status",
11485
+ "required": false,
11486
+ "schema": {
11487
+ "anyOf": [
11488
+ {
11489
+ "items": {
11490
+ "type": "string"
11491
+ },
11492
+ "type": "array"
11493
+ },
11494
+ {
11495
+ "type": "null"
11496
+ }
11497
+ ],
11498
+ "title": "Status"
11499
+ }
11500
+ },
11469
11501
  {
11470
11502
  "in": "header",
11471
11503
  "name": "user-agent",
@@ -11488,12 +11520,22 @@
11488
11520
  "content": {
11489
11521
  "application/json": {
11490
11522
  "schema": {
11491
- "$ref": "#/components/schemas/AgentTemplatesListResponse"
11523
+ "$ref": "#/components/schemas/GetAnalyticsPullRequestsResponse"
11492
11524
  }
11493
11525
  }
11494
11526
  },
11495
11527
  "description": "Successful Response"
11496
11528
  },
11529
+ "400": {
11530
+ "content": {
11531
+ "application/json": {
11532
+ "schema": {
11533
+ "$ref": "#/components/schemas/ErrorResponse"
11534
+ }
11535
+ }
11536
+ },
11537
+ "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
11538
+ },
11497
11539
  "401": {
11498
11540
  "content": {
11499
11541
  "application/json": {
@@ -11530,173 +11572,136 @@
11530
11572
  "HTTPBearer": []
11531
11573
  }
11532
11574
  ],
11533
- "summary": "List Agent Templates",
11575
+ "summary": "Get Analytics Pull Requests",
11534
11576
  "tags": [
11535
11577
  "v1"
11536
11578
  ],
11537
- "x-ellipsis-sdk-method": "agents.templates.list",
11579
+ "x-ellipsis-sdk-method": "analytics.pull_requests",
11538
11580
  "x-ellipsis-undocumented": true
11539
11581
  }
11540
11582
  },
11541
- "/v1/agents/templates/{template_id}": {
11583
+ "/v1/analytics/reviews": {
11542
11584
  "get": {
11543
- "description": "Return one built-in agent template by slug.",
11544
- "operationId": "get_agent_template",
11585
+ "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).",
11586
+ "operationId": "get_analytics_reviews",
11545
11587
  "parameters": [
11546
11588
  {
11547
- "in": "path",
11548
- "name": "template_id",
11549
- "required": true,
11589
+ "in": "query",
11590
+ "name": "days",
11591
+ "required": false,
11550
11592
  "schema": {
11551
- "title": "Template Id",
11552
- "type": "string"
11593
+ "anyOf": [
11594
+ {
11595
+ "type": "integer"
11596
+ },
11597
+ {
11598
+ "type": "null"
11599
+ }
11600
+ ],
11601
+ "title": "Days"
11553
11602
  }
11554
11603
  },
11555
11604
  {
11556
- "in": "header",
11557
- "name": "user-agent",
11605
+ "in": "query",
11606
+ "name": "start",
11558
11607
  "required": false,
11559
11608
  "schema": {
11560
11609
  "anyOf": [
11561
11610
  {
11611
+ "format": "date-time",
11562
11612
  "type": "string"
11563
11613
  },
11564
11614
  {
11565
11615
  "type": "null"
11566
11616
  }
11567
11617
  ],
11568
- "title": "User-Agent"
11618
+ "title": "Start"
11569
11619
  }
11570
- }
11571
- ],
11572
- "responses": {
11573
- "200": {
11574
- "content": {
11575
- "application/json": {
11576
- "schema": {
11577
- "$ref": "#/components/schemas/AgentTemplate"
11578
- }
11579
- }
11580
- },
11581
- "description": "Successful Response"
11582
- },
11583
- "401": {
11584
- "content": {
11585
- "application/json": {
11586
- "schema": {
11587
- "$ref": "#/components/schemas/ErrorResponse"
11588
- }
11589
- }
11590
- },
11591
- "description": "The bearer token is missing, invalid, or revoked."
11592
- },
11593
- "403": {
11594
- "content": {
11595
- "application/json": {
11596
- "schema": {
11597
- "$ref": "#/components/schemas/ErrorResponse"
11598
- }
11599
- }
11600
- },
11601
- "description": "The credential may not perform this action, or the account is blocked."
11602
11620
  },
11603
- "404": {
11604
- "content": {
11605
- "application/json": {
11606
- "schema": {
11607
- "$ref": "#/components/schemas/ErrorResponse"
11621
+ {
11622
+ "in": "query",
11623
+ "name": "end",
11624
+ "required": false,
11625
+ "schema": {
11626
+ "anyOf": [
11627
+ {
11628
+ "format": "date-time",
11629
+ "type": "string"
11630
+ },
11631
+ {
11632
+ "type": "null"
11608
11633
  }
11609
- }
11610
- },
11611
- "description": "No such template."
11634
+ ],
11635
+ "title": "End"
11636
+ }
11612
11637
  },
11613
- "422": {
11614
- "content": {
11615
- "application/json": {
11616
- "schema": {
11617
- "$ref": "#/components/schemas/HTTPValidationError"
11618
- }
11619
- }
11620
- },
11621
- "description": "Validation Error"
11622
- }
11623
- },
11624
- "security": [
11625
- {
11626
- "HTTPBearer": []
11627
- }
11628
- ],
11629
- "summary": "Get Agent Template",
11630
- "tags": [
11631
- "v1"
11632
- ],
11633
- "x-ellipsis-sdk-method": "agents.templates.get",
11634
- "x-ellipsis-undocumented": true
11635
- }
11636
- },
11637
- "/v1/alerts": {
11638
- "get": {
11639
- "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.",
11640
- "operationId": "list_alerts",
11641
- "parameters": [
11642
11638
  {
11643
11639
  "in": "query",
11644
- "name": "status",
11640
+ "name": "repo",
11645
11641
  "required": false,
11646
11642
  "schema": {
11647
11643
  "anyOf": [
11648
11644
  {
11649
- "$ref": "#/components/schemas/AlertStatus"
11645
+ "items": {
11646
+ "type": "string"
11647
+ },
11648
+ "type": "array"
11650
11649
  },
11651
11650
  {
11652
11651
  "type": "null"
11653
11652
  }
11654
11653
  ],
11655
- "title": "Status"
11654
+ "title": "Repo"
11656
11655
  }
11657
11656
  },
11658
11657
  {
11658
+ "description": "Filter by reviewer login(s).",
11659
11659
  "in": "query",
11660
- "name": "source",
11660
+ "name": "author",
11661
11661
  "required": false,
11662
11662
  "schema": {
11663
11663
  "anyOf": [
11664
11664
  {
11665
- "$ref": "#/components/schemas/AlertSource"
11665
+ "items": {
11666
+ "type": "string"
11667
+ },
11668
+ "type": "array"
11666
11669
  },
11667
11670
  {
11668
11671
  "type": "null"
11669
11672
  }
11670
11673
  ],
11671
- "title": "Source"
11674
+ "description": "Filter by reviewer login(s).",
11675
+ "title": "Author"
11672
11676
  }
11673
11677
  },
11674
11678
  {
11675
11679
  "in": "query",
11676
- "name": "limit",
11680
+ "name": "account_type",
11677
11681
  "required": false,
11678
11682
  "schema": {
11679
- "default": 100,
11680
- "maximum": 200,
11681
- "minimum": 1,
11682
- "title": "Limit",
11683
- "type": "integer"
11683
+ "default": "all",
11684
+ "title": "Account Type",
11685
+ "type": "string"
11684
11686
  }
11685
11687
  },
11686
11688
  {
11687
11689
  "in": "query",
11688
- "name": "cursor",
11690
+ "name": "review_state",
11689
11691
  "required": false,
11690
11692
  "schema": {
11691
11693
  "anyOf": [
11692
11694
  {
11693
- "type": "string"
11695
+ "items": {
11696
+ "type": "string"
11697
+ },
11698
+ "type": "array"
11694
11699
  },
11695
11700
  {
11696
11701
  "type": "null"
11697
11702
  }
11698
11703
  ],
11699
- "title": "Cursor"
11704
+ "title": "Review State"
11700
11705
  }
11701
11706
  },
11702
11707
  {
@@ -11714,14 +11719,93 @@
11714
11719
  ],
11715
11720
  "title": "User-Agent"
11716
11721
  }
11717
- }
11718
- ],
11722
+ }
11723
+ ],
11724
+ "responses": {
11725
+ "200": {
11726
+ "content": {
11727
+ "application/json": {
11728
+ "schema": {
11729
+ "$ref": "#/components/schemas/GetAnalyticsReviewsResponse"
11730
+ }
11731
+ }
11732
+ },
11733
+ "description": "Successful Response"
11734
+ },
11735
+ "400": {
11736
+ "content": {
11737
+ "application/json": {
11738
+ "schema": {
11739
+ "$ref": "#/components/schemas/ErrorResponse"
11740
+ }
11741
+ }
11742
+ },
11743
+ "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
11744
+ },
11745
+ "401": {
11746
+ "content": {
11747
+ "application/json": {
11748
+ "schema": {
11749
+ "$ref": "#/components/schemas/ErrorResponse"
11750
+ }
11751
+ }
11752
+ },
11753
+ "description": "The bearer token is missing, invalid, or revoked."
11754
+ },
11755
+ "403": {
11756
+ "content": {
11757
+ "application/json": {
11758
+ "schema": {
11759
+ "$ref": "#/components/schemas/ErrorResponse"
11760
+ }
11761
+ }
11762
+ },
11763
+ "description": "The credential may not perform this action, or the account is blocked."
11764
+ },
11765
+ "422": {
11766
+ "content": {
11767
+ "application/json": {
11768
+ "schema": {
11769
+ "$ref": "#/components/schemas/HTTPValidationError"
11770
+ }
11771
+ }
11772
+ },
11773
+ "description": "Validation Error"
11774
+ }
11775
+ },
11776
+ "security": [
11777
+ {
11778
+ "HTTPBearer": []
11779
+ }
11780
+ ],
11781
+ "summary": "Get Analytics Reviews",
11782
+ "tags": [
11783
+ "v1"
11784
+ ],
11785
+ "x-ellipsis-sdk-method": "analytics.reviews",
11786
+ "x-ellipsis-undocumented": true
11787
+ }
11788
+ },
11789
+ "/v1/auth/cli/poll": {
11790
+ "post": {
11791
+ "description": "Poll a device-code auth flow for its token.\n\nUnauthenticated; the device code identifies the flow.",
11792
+ "operationId": "cli_auth_poll",
11793
+ "requestBody": {
11794
+ "content": {
11795
+ "application/json": {
11796
+ "schema": {
11797
+ "$ref": "#/components/schemas/CliAuthPollRequest"
11798
+ }
11799
+ }
11800
+ },
11801
+ "required": true
11802
+ },
11719
11803
  "responses": {
11720
11804
  "200": {
11721
11805
  "content": {
11722
11806
  "application/json": {
11723
11807
  "schema": {
11724
- "$ref": "#/components/schemas/AlertsListResponse"
11808
+ "$ref": "#/components/schemas/PollCliAuthResponse"
11725
11809
  }
11726
11810
  }
11727
11811
  },
@@ -11747,6 +11831,16 @@
11747
11831
  },
11748
11832
  "description": "The credential may not perform this action, or the account is blocked."
11749
11833
  },
11834
+ "404": {
11835
+ "content": {
11836
+ "application/json": {
11837
+ "schema": {
11838
+ "$ref": "#/components/schemas/ErrorResponse"
11839
+ }
11840
+ }
11841
+ },
11842
+ "description": "Unknown device code."
11843
+ },
11750
11844
  "422": {
11751
11845
  "content": {
11752
11846
  "application/json": {
@@ -11758,56 +11852,24 @@
11758
11852
  "description": "Validation Error"
11759
11853
  }
11760
11854
  },
11761
- "security": [
11762
- {
11763
- "HTTPBearer": []
11764
- }
11765
- ],
11766
- "summary": "List Alerts",
11855
+ "summary": "Cli Auth Poll",
11767
11856
  "tags": [
11768
11857
  "v1"
11769
11858
  ],
11770
- "x-ellipsis-sdk-method": "alerts.list",
11859
+ "x-ellipsis-sdk-method": "auth.cli.poll",
11771
11860
  "x-ellipsis-undocumented": true
11772
11861
  }
11773
11862
  },
11774
- "/v1/alerts/{alert_id}": {
11775
- "get": {
11776
- "description": "Return one alert by id.\n\n404 if it doesn't exist or belongs to another organization.",
11777
- "operationId": "get_alert",
11778
- "parameters": [
11779
- {
11780
- "in": "path",
11781
- "name": "alert_id",
11782
- "required": true,
11783
- "schema": {
11784
- "title": "Alert Id",
11785
- "type": "string"
11786
- }
11787
- },
11788
- {
11789
- "in": "header",
11790
- "name": "user-agent",
11791
- "required": false,
11792
- "schema": {
11793
- "anyOf": [
11794
- {
11795
- "type": "string"
11796
- },
11797
- {
11798
- "type": "null"
11799
- }
11800
- ],
11801
- "title": "User-Agent"
11802
- }
11803
- }
11804
- ],
11863
+ "/v1/auth/cli/start": {
11864
+ "post": {
11865
+ "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.",
11866
+ "operationId": "cli_auth_start",
11805
11867
  "responses": {
11806
- "200": {
11868
+ "201": {
11807
11869
  "content": {
11808
11870
  "application/json": {
11809
11871
  "schema": {
11810
- "$ref": "#/components/schemas/AlertResponse"
11872
+ "$ref": "#/components/schemas/StartCliAuthResponse"
11811
11873
  }
11812
11874
  }
11813
11875
  },
@@ -11832,55 +11894,21 @@
11832
11894
  }
11833
11895
  },
11834
11896
  "description": "The credential may not perform this action, or the account is blocked."
11835
- },
11836
- "404": {
11837
- "content": {
11838
- "application/json": {
11839
- "schema": {
11840
- "$ref": "#/components/schemas/ErrorResponse"
11841
- }
11842
- }
11843
- },
11844
- "description": "No such alert in your account."
11845
- },
11846
- "422": {
11847
- "content": {
11848
- "application/json": {
11849
- "schema": {
11850
- "$ref": "#/components/schemas/HTTPValidationError"
11851
- }
11852
- }
11853
- },
11854
- "description": "Validation Error"
11855
11897
  }
11856
11898
  },
11857
- "security": [
11858
- {
11859
- "HTTPBearer": []
11860
- }
11861
- ],
11862
- "summary": "Get Alert",
11899
+ "summary": "Cli Auth Start",
11863
11900
  "tags": [
11864
11901
  "v1"
11865
11902
  ],
11866
- "x-ellipsis-sdk-method": "alerts.get",
11903
+ "x-ellipsis-sdk-method": "auth.cli.start",
11867
11904
  "x-ellipsis-undocumented": true
11868
11905
  }
11869
11906
  },
11870
- "/v1/alerts/{alert_id}/dismiss": {
11871
- "post": {
11872
- "description": "Dismiss an open alert and return it.\n\n409 when the alert is not open; 404 when it doesn't exist.",
11873
- "operationId": "dismiss_alert",
11907
+ "/v1/automations": {
11908
+ "get": {
11909
+ "description": "List automations.",
11910
+ "operationId": "list_automations",
11874
11911
  "parameters": [
11875
- {
11876
- "in": "path",
11877
- "name": "alert_id",
11878
- "required": true,
11879
- "schema": {
11880
- "title": "Alert Id",
11881
- "type": "string"
11882
- }
11883
- },
11884
11912
  {
11885
11913
  "in": "header",
11886
11914
  "name": "user-agent",
@@ -11903,7 +11931,7 @@
11903
11931
  "content": {
11904
11932
  "application/json": {
11905
11933
  "schema": {
11906
- "$ref": "#/components/schemas/AlertResponse"
11934
+ "$ref": "#/components/schemas/AutomationsListResponse"
11907
11935
  }
11908
11936
  }
11909
11937
  },
@@ -11929,26 +11957,6 @@
11929
11957
  },
11930
11958
  "description": "The credential may not perform this action, or the account is blocked."
11931
11959
  },
11932
- "404": {
11933
- "content": {
11934
- "application/json": {
11935
- "schema": {
11936
- "$ref": "#/components/schemas/ErrorResponse"
11937
- }
11938
- }
11939
- },
11940
- "description": "No such alert in your account."
11941
- },
11942
- "409": {
11943
- "content": {
11944
- "application/json": {
11945
- "schema": {
11946
- "$ref": "#/components/schemas/ErrorResponse"
11947
- }
11948
- }
11949
- },
11950
- "description": "The alert is not open."
11951
- },
11952
11960
  "422": {
11953
11961
  "content": {
11954
11962
  "application/json": {
@@ -11965,140 +11973,129 @@
11965
11973
  "HTTPBearer": []
11966
11974
  }
11967
11975
  ],
11968
- "summary": "Dismiss Alert",
11976
+ "summary": "List Automations",
11969
11977
  "tags": [
11970
11978
  "v1"
11971
11979
  ],
11972
- "x-ellipsis-sdk-method": "alerts.dismiss",
11973
- "x-ellipsis-undocumented": true
11974
- }
11975
- },
11976
- "/v1/analytics/metrics": {
11977
- "get": {
11978
- "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.",
11979
- "operationId": "get_analytics_metrics",
11980
+ "x-ellipsis-sdk-method": "automations.list"
11981
+ },
11982
+ "post": {
11983
+ "description": "Create an automation, managed through the API: no file, live\nimmediately. To put its definition in a repository instead, create\nit here and then POST /v1/automations/{automation_id}/link.\n\n409 when another live automation already holds the name.",
11984
+ "operationId": "create_automation",
11980
11985
  "parameters": [
11981
11986
  {
11982
- "in": "query",
11983
- "name": "days",
11987
+ "in": "header",
11988
+ "name": "user-agent",
11984
11989
  "required": false,
11985
11990
  "schema": {
11986
11991
  "anyOf": [
11987
11992
  {
11988
- "type": "integer"
11993
+ "type": "string"
11989
11994
  },
11990
11995
  {
11991
11996
  "type": "null"
11992
11997
  }
11993
11998
  ],
11994
- "title": "Days"
11999
+ "title": "User-Agent"
12000
+ }
12001
+ }
12002
+ ],
12003
+ "requestBody": {
12004
+ "content": {
12005
+ "application/json": {
12006
+ "schema": {
12007
+ "$ref": "#/components/schemas/CreateAutomationRequest"
12008
+ }
11995
12009
  }
11996
12010
  },
11997
- {
11998
- "in": "query",
11999
- "name": "start",
12000
- "required": false,
12001
- "schema": {
12002
- "anyOf": [
12003
- {
12004
- "format": "date-time",
12005
- "type": "string"
12006
- },
12007
- {
12008
- "type": "null"
12011
+ "required": true
12012
+ },
12013
+ "responses": {
12014
+ "201": {
12015
+ "content": {
12016
+ "application/json": {
12017
+ "schema": {
12018
+ "$ref": "#/components/schemas/AutomationResponse"
12009
12019
  }
12010
- ],
12011
- "title": "Start"
12012
- }
12020
+ }
12021
+ },
12022
+ "description": "Successful Response"
12013
12023
  },
12014
- {
12015
- "in": "query",
12016
- "name": "end",
12017
- "required": false,
12018
- "schema": {
12019
- "anyOf": [
12020
- {
12021
- "format": "date-time",
12022
- "type": "string"
12023
- },
12024
- {
12025
- "type": "null"
12024
+ "400": {
12025
+ "content": {
12026
+ "application/json": {
12027
+ "schema": {
12028
+ "$ref": "#/components/schemas/ErrorResponse"
12026
12029
  }
12027
- ],
12028
- "title": "End"
12029
- }
12030
+ }
12031
+ },
12032
+ "description": "The definition is invalid."
12030
12033
  },
12031
- {
12032
- "description": "Filter to repositories by \"owner/name\".",
12033
- "in": "query",
12034
- "name": "repo",
12035
- "required": false,
12036
- "schema": {
12037
- "anyOf": [
12038
- {
12039
- "items": {
12040
- "type": "string"
12041
- },
12042
- "type": "array"
12043
- },
12044
- {
12045
- "type": "null"
12034
+ "401": {
12035
+ "content": {
12036
+ "application/json": {
12037
+ "schema": {
12038
+ "$ref": "#/components/schemas/ErrorResponse"
12046
12039
  }
12047
- ],
12048
- "description": "Filter to repositories by \"owner/name\".",
12049
- "title": "Repo"
12050
- }
12040
+ }
12041
+ },
12042
+ "description": "The bearer token is missing, invalid, or revoked."
12051
12043
  },
12052
- {
12053
- "description": "Filter by PR-author login(s).",
12054
- "in": "query",
12055
- "name": "author",
12056
- "required": false,
12057
- "schema": {
12058
- "anyOf": [
12059
- {
12060
- "items": {
12061
- "type": "string"
12062
- },
12063
- "type": "array"
12064
- },
12065
- {
12066
- "type": "null"
12044
+ "403": {
12045
+ "content": {
12046
+ "application/json": {
12047
+ "schema": {
12048
+ "$ref": "#/components/schemas/ErrorResponse"
12049
+ }
12050
+ }
12051
+ },
12052
+ "description": "The credential may not perform this action, or the account is blocked."
12053
+ },
12054
+ "409": {
12055
+ "content": {
12056
+ "application/json": {
12057
+ "schema": {
12058
+ "$ref": "#/components/schemas/ErrorResponse"
12067
12059
  }
12068
- ],
12069
- "description": "Filter by PR-author login(s).",
12070
- "title": "Author"
12071
- }
12060
+ }
12061
+ },
12062
+ "description": "An automation with that name already exists."
12072
12063
  },
12064
+ "422": {
12065
+ "content": {
12066
+ "application/json": {
12067
+ "schema": {
12068
+ "$ref": "#/components/schemas/ErrorResponse"
12069
+ }
12070
+ }
12071
+ },
12072
+ "description": "The automation's name contains no usable characters, or a file reference names no repository."
12073
+ }
12074
+ },
12075
+ "security": [
12073
12076
  {
12074
- "in": "query",
12075
- "name": "account_type",
12076
- "required": false,
12077
- "schema": {
12078
- "default": "all",
12079
- "title": "Account Type",
12080
- "type": "string"
12081
- }
12082
- },
12077
+ "HTTPBearer": []
12078
+ }
12079
+ ],
12080
+ "summary": "Create Automation",
12081
+ "tags": [
12082
+ "v1"
12083
+ ],
12084
+ "x-ellipsis-sdk-method": "automations.create"
12085
+ }
12086
+ },
12087
+ "/v1/automations/{automation_id}": {
12088
+ "delete": {
12089
+ "description": "Delete an automation, by id or by name.\n\nIt stops running and its name is freed immediately; its past\nsessions remain readable. Only for automations managed through\nthis API \u2014 delete the file to remove one defined by a repository.",
12090
+ "operationId": "delete_automation",
12091
+ "parameters": [
12083
12092
  {
12084
- "description": "Filter by parent-PR status (open|draft|merged|closed).",
12085
- "in": "query",
12086
- "name": "status",
12087
- "required": false,
12093
+ "in": "path",
12094
+ "name": "automation_id",
12095
+ "required": true,
12088
12096
  "schema": {
12089
- "anyOf": [
12090
- {
12091
- "items": {
12092
- "type": "string"
12093
- },
12094
- "type": "array"
12095
- },
12096
- {
12097
- "type": "null"
12098
- }
12099
- ],
12100
- "description": "Filter by parent-PR status (open|draft|merged|closed).",
12101
- "title": "Status"
12097
+ "title": "Automation Id",
12098
+ "type": "string"
12102
12099
  }
12103
12100
  },
12104
12101
  {
@@ -12119,17 +12116,20 @@
12119
12116
  }
12120
12117
  ],
12121
12118
  "responses": {
12122
- "200": {
12119
+ "204": {
12120
+ "description": "Successful Response"
12121
+ },
12122
+ "401": {
12123
12123
  "content": {
12124
12124
  "application/json": {
12125
12125
  "schema": {
12126
- "$ref": "#/components/schemas/GetAnalyticsMetricsResponse"
12126
+ "$ref": "#/components/schemas/ErrorResponse"
12127
12127
  }
12128
12128
  }
12129
12129
  },
12130
- "description": "Successful Response"
12130
+ "description": "The bearer token is missing, invalid, or revoked."
12131
12131
  },
12132
- "400": {
12132
+ "403": {
12133
12133
  "content": {
12134
12134
  "application/json": {
12135
12135
  "schema": {
@@ -12137,9 +12137,9 @@
12137
12137
  }
12138
12138
  }
12139
12139
  },
12140
- "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
12140
+ "description": "The credential may not perform this action, or the account is blocked."
12141
12141
  },
12142
- "401": {
12142
+ "404": {
12143
12143
  "content": {
12144
12144
  "application/json": {
12145
12145
  "schema": {
@@ -12147,9 +12147,9 @@
12147
12147
  }
12148
12148
  }
12149
12149
  },
12150
- "description": "The bearer token is missing, invalid, or revoked."
12150
+ "description": "No such automation in your account."
12151
12151
  },
12152
- "403": {
12152
+ "409": {
12153
12153
  "content": {
12154
12154
  "application/json": {
12155
12155
  "schema": {
@@ -12157,7 +12157,7 @@
12157
12157
  }
12158
12158
  }
12159
12159
  },
12160
- "description": "The credential may not perform this action, or the account is blocked."
12160
+ "description": "The automation is defined by a file in a repository; delete that file instead."
12161
12161
  },
12162
12162
  "422": {
12163
12163
  "content": {
@@ -12175,143 +12175,116 @@
12175
12175
  "HTTPBearer": []
12176
12176
  }
12177
12177
  ],
12178
- "summary": "Get Analytics Metrics",
12178
+ "summary": "Delete Automation",
12179
12179
  "tags": [
12180
12180
  "v1"
12181
12181
  ],
12182
- "x-ellipsis-sdk-method": "analytics.metrics",
12183
- "x-ellipsis-undocumented": true
12184
- }
12185
- },
12186
- "/v1/analytics/pull-requests": {
12182
+ "x-ellipsis-sdk-method": "automations.delete"
12183
+ },
12187
12184
  "get": {
12188
- "description": "Return pull-request analytics.\n\nWindowing: pass explicit start/end, or days (default: the last\n30 days).",
12189
- "operationId": "get_analytics_pull_requests",
12185
+ "description": "Return one automation, by id or by name.",
12186
+ "operationId": "get_automation",
12190
12187
  "parameters": [
12191
12188
  {
12192
- "in": "query",
12193
- "name": "days",
12194
- "required": false,
12189
+ "in": "path",
12190
+ "name": "automation_id",
12191
+ "required": true,
12195
12192
  "schema": {
12196
- "anyOf": [
12197
- {
12198
- "type": "integer"
12199
- },
12200
- {
12201
- "type": "null"
12202
- }
12203
- ],
12204
- "title": "Days"
12193
+ "title": "Automation Id",
12194
+ "type": "string"
12205
12195
  }
12206
12196
  },
12207
12197
  {
12208
- "in": "query",
12209
- "name": "start",
12198
+ "in": "header",
12199
+ "name": "user-agent",
12210
12200
  "required": false,
12211
12201
  "schema": {
12212
12202
  "anyOf": [
12213
12203
  {
12214
- "format": "date-time",
12215
12204
  "type": "string"
12216
12205
  },
12217
12206
  {
12218
12207
  "type": "null"
12219
12208
  }
12220
12209
  ],
12221
- "title": "Start"
12210
+ "title": "User-Agent"
12222
12211
  }
12223
- },
12224
- {
12225
- "in": "query",
12226
- "name": "end",
12227
- "required": false,
12228
- "schema": {
12229
- "anyOf": [
12230
- {
12231
- "format": "date-time",
12232
- "type": "string"
12233
- },
12234
- {
12235
- "type": "null"
12212
+ }
12213
+ ],
12214
+ "responses": {
12215
+ "200": {
12216
+ "content": {
12217
+ "application/json": {
12218
+ "schema": {
12219
+ "$ref": "#/components/schemas/AutomationResponse"
12236
12220
  }
12237
- ],
12238
- "title": "End"
12239
- }
12221
+ }
12222
+ },
12223
+ "description": "Successful Response"
12240
12224
  },
12241
- {
12242
- "in": "query",
12243
- "name": "account_type",
12244
- "required": false,
12245
- "schema": {
12246
- "anyOf": [
12247
- {
12248
- "items": {
12249
- "type": "string"
12250
- },
12251
- "type": "array"
12252
- },
12253
- {
12254
- "type": "null"
12225
+ "401": {
12226
+ "content": {
12227
+ "application/json": {
12228
+ "schema": {
12229
+ "$ref": "#/components/schemas/ErrorResponse"
12255
12230
  }
12256
- ],
12257
- "title": "Account Type"
12258
- }
12231
+ }
12232
+ },
12233
+ "description": "The bearer token is missing, invalid, or revoked."
12259
12234
  },
12260
- {
12261
- "in": "query",
12262
- "name": "repository_id",
12263
- "required": false,
12264
- "schema": {
12265
- "anyOf": [
12266
- {
12267
- "items": {
12268
- "type": "integer"
12269
- },
12270
- "type": "array"
12271
- },
12272
- {
12273
- "type": "null"
12235
+ "403": {
12236
+ "content": {
12237
+ "application/json": {
12238
+ "schema": {
12239
+ "$ref": "#/components/schemas/ErrorResponse"
12274
12240
  }
12275
- ],
12276
- "title": "Repository Id"
12277
- }
12241
+ }
12242
+ },
12243
+ "description": "The credential may not perform this action, or the account is blocked."
12278
12244
  },
12279
- {
12280
- "in": "query",
12281
- "name": "author_id",
12282
- "required": false,
12283
- "schema": {
12284
- "anyOf": [
12285
- {
12286
- "items": {
12287
- "type": "integer"
12288
- },
12289
- "type": "array"
12290
- },
12291
- {
12292
- "type": "null"
12245
+ "404": {
12246
+ "content": {
12247
+ "application/json": {
12248
+ "schema": {
12249
+ "$ref": "#/components/schemas/ErrorResponse"
12293
12250
  }
12294
- ],
12295
- "title": "Author Id"
12296
- }
12251
+ }
12252
+ },
12253
+ "description": "No such automation in your account."
12297
12254
  },
12255
+ "422": {
12256
+ "content": {
12257
+ "application/json": {
12258
+ "schema": {
12259
+ "$ref": "#/components/schemas/HTTPValidationError"
12260
+ }
12261
+ }
12262
+ },
12263
+ "description": "Validation Error"
12264
+ }
12265
+ },
12266
+ "security": [
12298
12267
  {
12299
- "in": "query",
12300
- "name": "status",
12301
- "required": false,
12268
+ "HTTPBearer": []
12269
+ }
12270
+ ],
12271
+ "summary": "Get Automation",
12272
+ "tags": [
12273
+ "v1"
12274
+ ],
12275
+ "x-ellipsis-sdk-method": "automations.get"
12276
+ },
12277
+ "put": {
12278
+ "description": "Replace an automation's definition, by id or by name.\n\nThe whole definition is replaced, and the change is live at\nonce. Only for automations managed through this API: one defined\nby a repository file is a 409, since the next push to that file\nwould revert the change \u2014 unlink it first to take ownership.",
12279
+ "operationId": "update_automation",
12280
+ "parameters": [
12281
+ {
12282
+ "in": "path",
12283
+ "name": "automation_id",
12284
+ "required": true,
12302
12285
  "schema": {
12303
- "anyOf": [
12304
- {
12305
- "items": {
12306
- "type": "string"
12307
- },
12308
- "type": "array"
12309
- },
12310
- {
12311
- "type": "null"
12312
- }
12313
- ],
12314
- "title": "Status"
12286
+ "title": "Automation Id",
12287
+ "type": "string"
12315
12288
  }
12316
12289
  },
12317
12290
  {
@@ -12331,12 +12304,22 @@
12331
12304
  }
12332
12305
  }
12333
12306
  ],
12307
+ "requestBody": {
12308
+ "content": {
12309
+ "application/json": {
12310
+ "schema": {
12311
+ "$ref": "#/components/schemas/UpdateAutomationRequest"
12312
+ }
12313
+ }
12314
+ },
12315
+ "required": true
12316
+ },
12334
12317
  "responses": {
12335
12318
  "200": {
12336
12319
  "content": {
12337
12320
  "application/json": {
12338
12321
  "schema": {
12339
- "$ref": "#/components/schemas/GetAnalyticsPullRequestsResponse"
12322
+ "$ref": "#/components/schemas/AutomationResponse"
12340
12323
  }
12341
12324
  }
12342
12325
  },
@@ -12350,7 +12333,7 @@
12350
12333
  }
12351
12334
  }
12352
12335
  },
12353
- "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
12336
+ "description": "The definition is invalid (for example an unschedulable cron expression)."
12354
12337
  },
12355
12338
  "401": {
12356
12339
  "content": {
@@ -12372,15 +12355,35 @@
12372
12355
  },
12373
12356
  "description": "The credential may not perform this action, or the account is blocked."
12374
12357
  },
12358
+ "404": {
12359
+ "content": {
12360
+ "application/json": {
12361
+ "schema": {
12362
+ "$ref": "#/components/schemas/ErrorResponse"
12363
+ }
12364
+ }
12365
+ },
12366
+ "description": "No such automation in your account."
12367
+ },
12368
+ "409": {
12369
+ "content": {
12370
+ "application/json": {
12371
+ "schema": {
12372
+ "$ref": "#/components/schemas/ErrorResponse"
12373
+ }
12374
+ }
12375
+ },
12376
+ "description": "The automation is defined by a file in a repository, or another live automation already holds the new name."
12377
+ },
12375
12378
  "422": {
12376
12379
  "content": {
12377
12380
  "application/json": {
12378
12381
  "schema": {
12379
- "$ref": "#/components/schemas/HTTPValidationError"
12382
+ "$ref": "#/components/schemas/ErrorResponse"
12380
12383
  }
12381
12384
  }
12382
12385
  },
12383
- "description": "Validation Error"
12386
+ "description": "The automation's name is missing or malformed, or a file reference names no repository."
12384
12387
  }
12385
12388
  },
12386
12389
  "security": [
@@ -12388,136 +12391,150 @@
12388
12391
  "HTTPBearer": []
12389
12392
  }
12390
12393
  ],
12391
- "summary": "Get Analytics Pull Requests",
12394
+ "summary": "Update Automation",
12392
12395
  "tags": [
12393
12396
  "v1"
12394
12397
  ],
12395
- "x-ellipsis-sdk-method": "analytics.pull_requests",
12396
- "x-ellipsis-undocumented": true
12398
+ "x-ellipsis-sdk-method": "automations.update"
12397
12399
  }
12398
12400
  },
12399
- "/v1/analytics/reviews": {
12400
- "get": {
12401
- "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).",
12402
- "operationId": "get_analytics_reviews",
12401
+ "/v1/automations/{automation_id}/link": {
12402
+ "post": {
12403
+ "description": "Move an automation into a repository, by id or by name.\n\nOpens a pull request adding its definition file. The automation\nkeeps running unchanged meanwhile; merging hands it over to the\nfile, after which the file is what changes it. Nothing happens\nif the pull request is never merged.",
12404
+ "operationId": "link_automation",
12403
12405
  "parameters": [
12404
12406
  {
12405
- "in": "query",
12406
- "name": "days",
12407
- "required": false,
12407
+ "in": "path",
12408
+ "name": "automation_id",
12409
+ "required": true,
12408
12410
  "schema": {
12409
- "anyOf": [
12410
- {
12411
- "type": "integer"
12412
- },
12413
- {
12414
- "type": "null"
12415
- }
12416
- ],
12417
- "title": "Days"
12411
+ "title": "Automation Id",
12412
+ "type": "string"
12418
12413
  }
12419
12414
  },
12420
12415
  {
12421
- "in": "query",
12422
- "name": "start",
12416
+ "in": "header",
12417
+ "name": "user-agent",
12423
12418
  "required": false,
12424
12419
  "schema": {
12425
12420
  "anyOf": [
12426
12421
  {
12427
- "format": "date-time",
12428
12422
  "type": "string"
12429
12423
  },
12430
12424
  {
12431
12425
  "type": "null"
12432
12426
  }
12433
12427
  ],
12434
- "title": "Start"
12428
+ "title": "User-Agent"
12429
+ }
12430
+ }
12431
+ ],
12432
+ "requestBody": {
12433
+ "content": {
12434
+ "application/json": {
12435
+ "schema": {
12436
+ "$ref": "#/components/schemas/LinkAutomationRequest"
12437
+ }
12435
12438
  }
12436
12439
  },
12437
- {
12438
- "in": "query",
12439
- "name": "end",
12440
- "required": false,
12441
- "schema": {
12442
- "anyOf": [
12443
- {
12444
- "format": "date-time",
12445
- "type": "string"
12446
- },
12447
- {
12448
- "type": "null"
12440
+ "required": true
12441
+ },
12442
+ "responses": {
12443
+ "200": {
12444
+ "content": {
12445
+ "application/json": {
12446
+ "schema": {
12447
+ "$ref": "#/components/schemas/LinkAutomationResponse"
12449
12448
  }
12450
- ],
12451
- "title": "End"
12452
- }
12449
+ }
12450
+ },
12451
+ "description": "Successful Response"
12453
12452
  },
12454
- {
12455
- "in": "query",
12456
- "name": "repo",
12457
- "required": false,
12458
- "schema": {
12459
- "anyOf": [
12460
- {
12461
- "items": {
12462
- "type": "string"
12463
- },
12464
- "type": "array"
12465
- },
12466
- {
12467
- "type": "null"
12453
+ "400": {
12454
+ "content": {
12455
+ "application/json": {
12456
+ "schema": {
12457
+ "$ref": "#/components/schemas/ErrorResponse"
12468
12458
  }
12469
- ],
12470
- "title": "Repo"
12471
- }
12459
+ }
12460
+ },
12461
+ "description": "The path is not a synced location, or the repository has no commits."
12472
12462
  },
12473
- {
12474
- "description": "Filter by reviewer login(s).",
12475
- "in": "query",
12476
- "name": "author",
12477
- "required": false,
12478
- "schema": {
12479
- "anyOf": [
12480
- {
12481
- "items": {
12482
- "type": "string"
12483
- },
12484
- "type": "array"
12485
- },
12486
- {
12487
- "type": "null"
12463
+ "401": {
12464
+ "content": {
12465
+ "application/json": {
12466
+ "schema": {
12467
+ "$ref": "#/components/schemas/ErrorResponse"
12488
12468
  }
12489
- ],
12490
- "description": "Filter by reviewer login(s).",
12491
- "title": "Author"
12492
- }
12469
+ }
12470
+ },
12471
+ "description": "The bearer token is missing, invalid, or revoked."
12493
12472
  },
12494
- {
12495
- "in": "query",
12496
- "name": "account_type",
12497
- "required": false,
12498
- "schema": {
12499
- "default": "all",
12500
- "title": "Account Type",
12501
- "type": "string"
12502
- }
12473
+ "403": {
12474
+ "content": {
12475
+ "application/json": {
12476
+ "schema": {
12477
+ "$ref": "#/components/schemas/ErrorResponse"
12478
+ }
12479
+ }
12480
+ },
12481
+ "description": "The credential may not perform this action, or the account is blocked."
12482
+ },
12483
+ "404": {
12484
+ "content": {
12485
+ "application/json": {
12486
+ "schema": {
12487
+ "$ref": "#/components/schemas/ErrorResponse"
12488
+ }
12489
+ }
12490
+ },
12491
+ "description": "The automation or repository was not found in your account."
12492
+ },
12493
+ "409": {
12494
+ "content": {
12495
+ "application/json": {
12496
+ "schema": {
12497
+ "$ref": "#/components/schemas/ErrorResponse"
12498
+ }
12499
+ }
12500
+ },
12501
+ "description": "The automation is already defined by a file, a link is already open for it, a file already exists at that path, or another automation syncs from it."
12503
12502
  },
12503
+ "422": {
12504
+ "content": {
12505
+ "application/json": {
12506
+ "schema": {
12507
+ "$ref": "#/components/schemas/ErrorResponse"
12508
+ }
12509
+ }
12510
+ },
12511
+ "description": "GitHub rejected the pull request."
12512
+ }
12513
+ },
12514
+ "security": [
12504
12515
  {
12505
- "in": "query",
12506
- "name": "review_state",
12507
- "required": false,
12516
+ "HTTPBearer": []
12517
+ }
12518
+ ],
12519
+ "summary": "Link Automation",
12520
+ "tags": [
12521
+ "v1"
12522
+ ],
12523
+ "x-ellipsis-sdk-method": "automations.link"
12524
+ }
12525
+ },
12526
+ "/v1/automations/{automation_id}/sessions": {
12527
+ "post": {
12528
+ "description": "Invoke an automation.\n\nRuns the automation exactly as defined \u2014 its persona, model,\nenvironment, permissions, skills, and budget bind \u2014 and returns\nthe session it started. The body carries only what a caller may\nsupply: the typed `input` its schema demands, an optional tighter\n`budget`, and `metadata`. For a different persona or environment,\nstart a raw session with POST /v1/sessions instead.",
12529
+ "operationId": "start_automation_session",
12530
+ "parameters": [
12531
+ {
12532
+ "in": "path",
12533
+ "name": "automation_id",
12534
+ "required": true,
12508
12535
  "schema": {
12509
- "anyOf": [
12510
- {
12511
- "items": {
12512
- "type": "string"
12513
- },
12514
- "type": "array"
12515
- },
12516
- {
12517
- "type": "null"
12518
- }
12519
- ],
12520
- "title": "Review State"
12536
+ "title": "Automation Id",
12537
+ "type": "string"
12521
12538
  }
12522
12539
  },
12523
12540
  {
@@ -12537,12 +12554,22 @@
12537
12554
  }
12538
12555
  }
12539
12556
  ],
12557
+ "requestBody": {
12558
+ "content": {
12559
+ "application/json": {
12560
+ "schema": {
12561
+ "$ref": "#/components/schemas/StartAutomationSessionRequest"
12562
+ }
12563
+ }
12564
+ },
12565
+ "required": true
12566
+ },
12540
12567
  "responses": {
12541
- "200": {
12568
+ "201": {
12542
12569
  "content": {
12543
12570
  "application/json": {
12544
12571
  "schema": {
12545
- "$ref": "#/components/schemas/GetAnalyticsReviewsResponse"
12572
+ "$ref": "#/components/schemas/SessionResponse"
12546
12573
  }
12547
12574
  }
12548
12575
  },
@@ -12556,7 +12583,7 @@
12556
12583
  }
12557
12584
  }
12558
12585
  },
12559
- "description": "The time window is invalid: days combined with start, a non-positive days, or end not after start."
12586
+ "description": "`budget` is above the automation's own session budget or the organization's ceiling, or a one-shot automation was invoked with nothing to say."
12560
12587
  },
12561
12588
  "401": {
12562
12589
  "content": {
@@ -12578,15 +12605,25 @@
12578
12605
  },
12579
12606
  "description": "The credential may not perform this action, or the account is blocked."
12580
12607
  },
12608
+ "404": {
12609
+ "content": {
12610
+ "application/json": {
12611
+ "schema": {
12612
+ "$ref": "#/components/schemas/ErrorResponse"
12613
+ }
12614
+ }
12615
+ },
12616
+ "description": "No such automation in your account, or its environment no longer exists."
12617
+ },
12581
12618
  "422": {
12582
12619
  "content": {
12583
12620
  "application/json": {
12584
12621
  "schema": {
12585
- "$ref": "#/components/schemas/HTTPValidationError"
12622
+ "$ref": "#/components/schemas/ErrorResponse"
12586
12623
  }
12587
12624
  }
12588
12625
  },
12589
- "description": "Validation Error"
12626
+ "description": "The automation requires `input` matching its input schema (missing or failed validation), declares no input schema and `input` was sent, or the body carries a key this route does not accept."
12590
12627
  }
12591
12628
  },
12592
12629
  "security": [
@@ -12594,34 +12631,50 @@
12594
12631
  "HTTPBearer": []
12595
12632
  }
12596
12633
  ],
12597
- "summary": "Get Analytics Reviews",
12634
+ "summary": "Start Automation Session",
12598
12635
  "tags": [
12599
12636
  "v1"
12600
12637
  ],
12601
- "x-ellipsis-sdk-method": "analytics.reviews",
12602
- "x-ellipsis-undocumented": true
12638
+ "x-ellipsis-sdk-method": "automations.run"
12603
12639
  }
12604
12640
  },
12605
- "/v1/auth/cli/poll": {
12606
- "post": {
12607
- "description": "Poll a device-code auth flow for its token.\n\nUnauthenticated; the device code identifies the flow.",
12608
- "operationId": "cli_auth_poll",
12609
- "requestBody": {
12610
- "content": {
12611
- "application/json": {
12612
- "schema": {
12613
- "$ref": "#/components/schemas/CliAuthPollRequest"
12614
- }
12641
+ "/v1/automations/{automation_id}/unlink": {
12642
+ "post": {
12643
+ "description": "Take over an automation from its file, by id or by name.\n\nThe file stops governing it immediately and further changes go\nthrough this API. The file is left in place, inert \u2014 delete it\nwhenever you like.",
12644
+ "operationId": "unlink_automation",
12645
+ "parameters": [
12646
+ {
12647
+ "in": "path",
12648
+ "name": "automation_id",
12649
+ "required": true,
12650
+ "schema": {
12651
+ "title": "Automation Id",
12652
+ "type": "string"
12615
12653
  }
12616
12654
  },
12617
- "required": true
12618
- },
12655
+ {
12656
+ "in": "header",
12657
+ "name": "user-agent",
12658
+ "required": false,
12659
+ "schema": {
12660
+ "anyOf": [
12661
+ {
12662
+ "type": "string"
12663
+ },
12664
+ {
12665
+ "type": "null"
12666
+ }
12667
+ ],
12668
+ "title": "User-Agent"
12669
+ }
12670
+ }
12671
+ ],
12619
12672
  "responses": {
12620
12673
  "200": {
12621
12674
  "content": {
12622
12675
  "application/json": {
12623
12676
  "schema": {
12624
- "$ref": "#/components/schemas/PollCliAuthResponse"
12677
+ "$ref": "#/components/schemas/AutomationResponse"
12625
12678
  }
12626
12679
  }
12627
12680
  },
@@ -12655,43 +12708,9 @@
12655
12708
  }
12656
12709
  }
12657
12710
  },
12658
- "description": "Unknown device code."
12659
- },
12660
- "422": {
12661
- "content": {
12662
- "application/json": {
12663
- "schema": {
12664
- "$ref": "#/components/schemas/HTTPValidationError"
12665
- }
12666
- }
12667
- },
12668
- "description": "Validation Error"
12669
- }
12670
- },
12671
- "summary": "Cli Auth Poll",
12672
- "tags": [
12673
- "v1"
12674
- ],
12675
- "x-ellipsis-sdk-method": "auth.cli.poll",
12676
- "x-ellipsis-undocumented": true
12677
- }
12678
- },
12679
- "/v1/auth/cli/start": {
12680
- "post": {
12681
- "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.",
12682
- "operationId": "cli_auth_start",
12683
- "responses": {
12684
- "201": {
12685
- "content": {
12686
- "application/json": {
12687
- "schema": {
12688
- "$ref": "#/components/schemas/StartCliAuthResponse"
12689
- }
12690
- }
12691
- },
12692
- "description": "Successful Response"
12711
+ "description": "No such automation in your account."
12693
12712
  },
12694
- "401": {
12713
+ "409": {
12695
12714
  "content": {
12696
12715
  "application/json": {
12697
12716
  "schema": {
@@ -12699,9 +12718,9 @@
12699
12718
  }
12700
12719
  }
12701
12720
  },
12702
- "description": "The bearer token is missing, invalid, or revoked."
12721
+ "description": "The automation is already managed through the API."
12703
12722
  },
12704
- "403": {
12723
+ "422": {
12705
12724
  "content": {
12706
12725
  "application/json": {
12707
12726
  "schema": {
@@ -12709,15 +12728,19 @@
12709
12728
  }
12710
12729
  }
12711
12730
  },
12712
- "description": "The credential may not perform this action, or the account is blocked."
12731
+ "description": "The definition has a file reference that names no repository, so it cannot resolve without its source repository."
12713
12732
  }
12714
12733
  },
12715
- "summary": "Cli Auth Start",
12734
+ "security": [
12735
+ {
12736
+ "HTTPBearer": []
12737
+ }
12738
+ ],
12739
+ "summary": "Unlink Automation",
12716
12740
  "tags": [
12717
12741
  "v1"
12718
12742
  ],
12719
- "x-ellipsis-sdk-method": "auth.cli.start",
12720
- "x-ellipsis-undocumented": true
12743
+ "x-ellipsis-sdk-method": "automations.unlink"
12721
12744
  }
12722
12745
  },
12723
12746
  "/v1/budget": {
@@ -13697,7 +13720,7 @@
13697
13720
  },
13698
13721
  "/v1/integrations": {
13699
13722
  "get": {
13700
- "description": "List connected integrations.\n\nA read-only view, so an agent authoring another agent's\nconfig can learn which repositories, channels, teams, and\norganizations it may name before POST /agents/configs.\n\nAvailable to all credential types including sandbox tokens: the\nresponses never include OAuth tokens or any other secret.",
13723
+ "description": "List connected integrations.\n\nA read-only view, so an agent authoring another agent's\nconfig can learn which repositories, channels, teams, and\norganizations it may name before POST /automations.\n\nAvailable to all credential types including sandbox tokens: the\nresponses never include OAuth tokens or any other secret.",
13701
13724
  "operationId": "get_integrations",
13702
13725
  "parameters": [
13703
13726
  {
@@ -15571,13 +15594,13 @@
15571
15594
  },
15572
15595
  "/v1/sessions": {
15573
15596
  "get": {
15574
- "description": "List cloud agent sessions, newest first.\n\nOptionally filtered by config (id or `ellipsis.name`), source, time\nwindow, attributed author, repository, and whether the session is\nstill going.",
15597
+ "description": "List cloud agent sessions, newest first.\n\nOptionally filtered by automation (id or name), source, time\nwindow, attributed author, repository, and whether the session is\nstill going.",
15575
15598
  "operationId": "list_agent_sessions",
15576
15599
  "parameters": [
15577
15600
  {
15578
- "description": "A saved config id, or the agent's `ellipsis.name`.",
15601
+ "description": "An automation id, or its name: only sessions that automation started.",
15579
15602
  "in": "query",
15580
- "name": "config_id",
15603
+ "name": "automation",
15581
15604
  "required": false,
15582
15605
  "schema": {
15583
15606
  "anyOf": [
@@ -15588,8 +15611,8 @@
15588
15611
  "type": "null"
15589
15612
  }
15590
15613
  ],
15591
- "description": "A saved config id, or the agent's `ellipsis.name`.",
15592
- "title": "Config Id"
15614
+ "description": "An automation id, or its name: only sessions that automation started.",
15615
+ "title": "Automation"
15593
15616
  }
15594
15617
  },
15595
15618
  {
@@ -15808,7 +15831,7 @@
15808
15831
  "x-ellipsis-sdk-method": "sessions.list"
15809
15832
  },
15810
15833
  "post": {
15811
- "description": "Start a cloud agent session.\n\nThe base is `from_config_id` (an id or an agent name) or, omitted,\nthe bare ad-hoc config; every AgentConfig key on the request\ndeep-merges on top, so the body is both the pointer and the\nper-session override. `prompt` is the first message; omit it and\nthe session starts idle, waiting for one. 400 when\nellipsis.interactive=false and there is no prompt or input. 422\nwhen the agent declares an input schema and the request's input\nis absent or invalid.",
15834
+ "description": "Start a cloud agent session.\n\nThe daily driver: a prompt, optionally where to run it\n(`environment`) and the run's own settings, in the AgentConfig\nvocabulary. Anything omitted comes from the organization's\nsettings \u2014 default model, default environment, budget \u2014 so\n`{\"prompt\": \"...\"}` alone is a complete request. `prompt` is the\nfirst message; omit it and the session starts idle, waiting for\none. 400 when `interactive` is false and there is no prompt, or\nwhen `budget` exceeds the organization's per-session ceiling. To\nrun a saved automation, use POST /v1/automations/{automation_id}/sessions.",
15812
15835
  "operationId": "start_agent_session",
15813
15836
  "parameters": [
15814
15837
  {
@@ -15857,7 +15880,7 @@
15857
15880
  }
15858
15881
  }
15859
15882
  },
15860
- "description": "The request is incompatible with itself (a one-shot run with no prompt or input) or its config keys produce an invalid config."
15883
+ "description": "The request is incompatible with itself (a one-shot run with no prompt, or both `claude` and `codex`), its keys produce an invalid config, or `budget` exceeds the organization's per-session ceiling."
15861
15884
  },
15862
15885
  "401": {
15863
15886
  "content": {
@@ -15887,7 +15910,7 @@
15887
15910
  }
15888
15911
  }
15889
15912
  },
15890
- "description": "The named agent or environment does not exist in your account."
15913
+ "description": "The named environment does not exist in your account."
15891
15914
  },
15892
15915
  "422": {
15893
15916
  "content": {
@@ -15897,7 +15920,7 @@
15897
15920
  }
15898
15921
  }
15899
15922
  },
15900
- "description": "The agent requires 'input' matching its input schema (missing or failed validation), or declares no input schema and 'input' was sent."
15923
+ "description": "A field is malformed, or the body carries a key this route does not accept."
15901
15924
  }
15902
15925
  },
15903
15926
  "security": [
@@ -17034,10 +17057,10 @@
17034
17057
  "x-ellipsis-undocumented": true
17035
17058
  }
17036
17059
  },
17037
- "/v1/settings/sessions/defaults": {
17060
+ "/v1/settings/organization": {
17038
17061
  "get": {
17039
- "description": "Get the account-wide session defaults.\n\nToday one setting: the default model every session falls back to\nwhen neither its request nor its agent config names one.",
17040
- "operationId": "get_session_defaults",
17062
+ "description": "Get the organization settings.\n\nThe default model and default environment every session falls\nback to when neither its request nor its automation names one,\nand the per-session budget ceiling no session may exceed.",
17063
+ "operationId": "get_organization_settings",
17041
17064
  "parameters": [
17042
17065
  {
17043
17066
  "in": "header",
@@ -17061,7 +17084,7 @@
17061
17084
  "content": {
17062
17085
  "application/json": {
17063
17086
  "schema": {
17064
- "$ref": "#/components/schemas/SessionDefaults"
17087
+ "$ref": "#/components/schemas/OrganizationSettings"
17065
17088
  }
17066
17089
  }
17067
17090
  },
@@ -17103,15 +17126,15 @@
17103
17126
  "HTTPBearer": []
17104
17127
  }
17105
17128
  ],
17106
- "summary": "Get Session Defaults",
17129
+ "summary": "Get Organization Settings",
17107
17130
  "tags": [
17108
17131
  "v1"
17109
17132
  ],
17110
- "x-ellipsis-sdk-method": "settings.sessions.get_defaults"
17133
+ "x-ellipsis-sdk-method": "settings.organization.get"
17111
17134
  },
17112
17135
  "put": {
17113
- "description": "Set the account-wide session defaults.\n\n`model` accepts an alias or canonical id and is stored canonical;\nnull clears it (sessions then fall back to the platform default).\nRefused for sandbox tokens (potentially prompt-injected code must\nnot repoint the account's default model).",
17114
- "operationId": "put_session_defaults",
17136
+ "description": "Set the organization settings.\n\nReplaces all three: `default_model` accepts an alias or canonical\nid and is stored canonical; `default_environment` accepts a name\nor `env_` id and is stored as the id; `budget_ceiling.session` is\nin US dollars, at most the platform ceiling. Null clears each.\nRefused for sandbox tokens (potentially prompt-injected code must\nnot repoint the organization's defaults).",
17137
+ "operationId": "put_organization_settings",
17115
17138
  "parameters": [
17116
17139
  {
17117
17140
  "in": "header",
@@ -17134,7 +17157,7 @@
17134
17157
  "content": {
17135
17158
  "application/json": {
17136
17159
  "schema": {
17137
- "$ref": "#/components/schemas/SessionDefaults"
17160
+ "$ref": "#/components/schemas/OrganizationSettings"
17138
17161
  }
17139
17162
  }
17140
17163
  },
@@ -17145,7 +17168,7 @@
17145
17168
  "content": {
17146
17169
  "application/json": {
17147
17170
  "schema": {
17148
- "$ref": "#/components/schemas/SessionDefaults"
17171
+ "$ref": "#/components/schemas/OrganizationSettings"
17149
17172
  }
17150
17173
  }
17151
17174
  },
@@ -17159,7 +17182,179 @@
17159
17182
  }
17160
17183
  }
17161
17184
  },
17162
- "description": "The model id is unknown, internal-only, or not runnable on the Claude Code harness."
17185
+ "description": "The model id is unknown, internal-only, or not runnable on the Claude Code harness; or the budget ceiling is not positive or exceeds the platform's."
17186
+ },
17187
+ "401": {
17188
+ "content": {
17189
+ "application/json": {
17190
+ "schema": {
17191
+ "$ref": "#/components/schemas/ErrorResponse"
17192
+ }
17193
+ }
17194
+ },
17195
+ "description": "The bearer token is missing, invalid, or revoked."
17196
+ },
17197
+ "403": {
17198
+ "content": {
17199
+ "application/json": {
17200
+ "schema": {
17201
+ "$ref": "#/components/schemas/ErrorResponse"
17202
+ }
17203
+ }
17204
+ },
17205
+ "description": "The credential may not perform this action, or the account is blocked."
17206
+ },
17207
+ "404": {
17208
+ "content": {
17209
+ "application/json": {
17210
+ "schema": {
17211
+ "$ref": "#/components/schemas/ErrorResponse"
17212
+ }
17213
+ }
17214
+ },
17215
+ "description": "The default environment does not exist in your account."
17216
+ },
17217
+ "422": {
17218
+ "content": {
17219
+ "application/json": {
17220
+ "schema": {
17221
+ "$ref": "#/components/schemas/HTTPValidationError"
17222
+ }
17223
+ }
17224
+ },
17225
+ "description": "Validation Error"
17226
+ }
17227
+ },
17228
+ "security": [
17229
+ {
17230
+ "HTTPBearer": []
17231
+ }
17232
+ ],
17233
+ "summary": "Set Organization Settings",
17234
+ "tags": [
17235
+ "v1"
17236
+ ],
17237
+ "x-ellipsis-sdk-method": "settings.organization.set"
17238
+ }
17239
+ },
17240
+ "/v1/templates": {
17241
+ "get": {
17242
+ "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.",
17243
+ "operationId": "list_agent_templates",
17244
+ "parameters": [
17245
+ {
17246
+ "in": "header",
17247
+ "name": "user-agent",
17248
+ "required": false,
17249
+ "schema": {
17250
+ "anyOf": [
17251
+ {
17252
+ "type": "string"
17253
+ },
17254
+ {
17255
+ "type": "null"
17256
+ }
17257
+ ],
17258
+ "title": "User-Agent"
17259
+ }
17260
+ }
17261
+ ],
17262
+ "responses": {
17263
+ "200": {
17264
+ "content": {
17265
+ "application/json": {
17266
+ "schema": {
17267
+ "$ref": "#/components/schemas/AgentTemplatesListResponse"
17268
+ }
17269
+ }
17270
+ },
17271
+ "description": "Successful Response"
17272
+ },
17273
+ "401": {
17274
+ "content": {
17275
+ "application/json": {
17276
+ "schema": {
17277
+ "$ref": "#/components/schemas/ErrorResponse"
17278
+ }
17279
+ }
17280
+ },
17281
+ "description": "The bearer token is missing, invalid, or revoked."
17282
+ },
17283
+ "403": {
17284
+ "content": {
17285
+ "application/json": {
17286
+ "schema": {
17287
+ "$ref": "#/components/schemas/ErrorResponse"
17288
+ }
17289
+ }
17290
+ },
17291
+ "description": "The credential may not perform this action, or the account is blocked."
17292
+ },
17293
+ "422": {
17294
+ "content": {
17295
+ "application/json": {
17296
+ "schema": {
17297
+ "$ref": "#/components/schemas/HTTPValidationError"
17298
+ }
17299
+ }
17300
+ },
17301
+ "description": "Validation Error"
17302
+ }
17303
+ },
17304
+ "security": [
17305
+ {
17306
+ "HTTPBearer": []
17307
+ }
17308
+ ],
17309
+ "summary": "List Agent Templates",
17310
+ "tags": [
17311
+ "v1"
17312
+ ],
17313
+ "x-ellipsis-sdk-method": "templates.list",
17314
+ "x-ellipsis-undocumented": true
17315
+ }
17316
+ },
17317
+ "/v1/templates/{template_id}": {
17318
+ "get": {
17319
+ "description": "Return one built-in agent template by slug.",
17320
+ "operationId": "get_agent_template",
17321
+ "parameters": [
17322
+ {
17323
+ "in": "path",
17324
+ "name": "template_id",
17325
+ "required": true,
17326
+ "schema": {
17327
+ "title": "Template Id",
17328
+ "type": "string"
17329
+ }
17330
+ },
17331
+ {
17332
+ "in": "header",
17333
+ "name": "user-agent",
17334
+ "required": false,
17335
+ "schema": {
17336
+ "anyOf": [
17337
+ {
17338
+ "type": "string"
17339
+ },
17340
+ {
17341
+ "type": "null"
17342
+ }
17343
+ ],
17344
+ "title": "User-Agent"
17345
+ }
17346
+ }
17347
+ ],
17348
+ "responses": {
17349
+ "200": {
17350
+ "content": {
17351
+ "application/json": {
17352
+ "schema": {
17353
+ "$ref": "#/components/schemas/AgentTemplate"
17354
+ }
17355
+ }
17356
+ },
17357
+ "description": "Successful Response"
17163
17358
  },
17164
17359
  "401": {
17165
17360
  "content": {
@@ -17181,6 +17376,16 @@
17181
17376
  },
17182
17377
  "description": "The credential may not perform this action, or the account is blocked."
17183
17378
  },
17379
+ "404": {
17380
+ "content": {
17381
+ "application/json": {
17382
+ "schema": {
17383
+ "$ref": "#/components/schemas/ErrorResponse"
17384
+ }
17385
+ }
17386
+ },
17387
+ "description": "No such template."
17388
+ },
17184
17389
  "422": {
17185
17390
  "content": {
17186
17391
  "application/json": {
@@ -17197,11 +17402,12 @@
17197
17402
  "HTTPBearer": []
17198
17403
  }
17199
17404
  ],
17200
- "summary": "Set Session Defaults",
17405
+ "summary": "Get Agent Template",
17201
17406
  "tags": [
17202
17407
  "v1"
17203
17408
  ],
17204
- "x-ellipsis-sdk-method": "settings.sessions.set_defaults"
17409
+ "x-ellipsis-sdk-method": "templates.get",
17410
+ "x-ellipsis-undocumented": true
17205
17411
  }
17206
17412
  },
17207
17413
  "/v1/usage": {