@shipeasy/openapi 3.1.0 → 3.3.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.
Files changed (45) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-V4ZESAIF.js → chunk-75Z4SQOM.js} +141 -1
  3. package/dist/chunk-75Z4SQOM.js.map +1 -0
  4. package/dist/{chunk-UV333BIK.js → chunk-ZYK74ZIW.js} +569 -119
  5. package/dist/chunk-ZYK74ZIW.js.map +1 -0
  6. package/dist/{client-yqGYju-M.d.ts → client-DAGqRpF1.d.ts} +2209 -401
  7. package/dist/client.d.ts +1 -1
  8. package/dist/client.js +33 -1
  9. package/dist/custom.d.ts +5 -5
  10. package/dist/custom.js +128 -84
  11. package/dist/custom.js.map +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +34 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/schemas.d.ts +2007 -891
  16. package/dist/schemas.js +179 -1
  17. package/openapi-sdk.json +1769 -0
  18. package/openapi.json +5861 -2597
  19. package/openapi.yaml +2739 -452
  20. package/package.json +6 -4
  21. package/spec/components/responses.yaml +39 -0
  22. package/spec/components/schemas/alert-rules.yaml +405 -7
  23. package/spec/components/schemas/alerts.yaml +9 -7
  24. package/spec/components/schemas/common.yaml +2 -2
  25. package/spec/components/schemas/connectors.yaml +69 -6
  26. package/spec/components/schemas/events.yaml +20 -9
  27. package/spec/components/schemas/gates.yaml +87 -0
  28. package/spec/components/schemas/keys.yaml +32 -2
  29. package/spec/components/schemas/killswitches.yaml +64 -0
  30. package/spec/components/schemas/metrics.yaml +131 -251
  31. package/spec/components/schemas/ops.yaml +555 -22
  32. package/spec/components/schemas/projects.yaml +18 -0
  33. package/spec/components/schemas/tags.yaml +91 -0
  34. package/spec/openapi-sdk.yaml +86 -0
  35. package/spec/openapi.yaml +61 -0
  36. package/spec/paths/alerts.yaml +5 -3
  37. package/spec/paths/gates.yaml +282 -0
  38. package/spec/paths/i18n.yaml +2 -1
  39. package/spec/paths/keys.yaml +79 -0
  40. package/spec/paths/killswitches.yaml +96 -0
  41. package/spec/paths/metrics.yaml +26 -17
  42. package/spec/paths/ops.yaml +566 -10
  43. package/spec/paths/tags.yaml +270 -0
  44. package/dist/chunk-UV333BIK.js.map +0 -1
  45. package/dist/chunk-V4ZESAIF.js.map +0 -1
@@ -328,7 +328,7 @@ type Options$1<TData extends TDataShape = TDataShape, ThrowOnError extends boole
328
328
  declare const createClient: (config?: Config) => Client;
329
329
 
330
330
  type ClientOptions = {
331
- baseUrl: 'https://shipeasy.ai' | 'http://localhost:3000' | (string & {});
331
+ baseUrl: 'https://shipeasy.ai' | 'http://localhost:3000' | 'https://api.shipeasy.ai' | 'http://localhost:8787' | 'https://api.shipeasy.ai' | 'http://localhost:8787' | (string & {});
332
332
  };
333
333
  /**
334
334
  * The single wire shape for a gate row, shared by `ListGatesResponse` (`data[]` items) and `GET /api/admin/gates/{id}`.
@@ -1023,6 +1023,63 @@ type ListGateActivityResponse = Array<{
1023
1023
  */
1024
1024
  createdAt: string;
1025
1025
  }>;
1026
+ /**
1027
+ * Which identity attribute the whitelist matches on. `email` compares the caller's `email`; `user_id` compares the caller's `userID`. A whitelist matches on exactly one of the two at a time.
1028
+ */
1029
+ type GateWhitelistAttr = 'email' | 'user_id';
1030
+ /**
1031
+ * A gate's whitelist — the always-first allowlist that admits the listed identities before any targeting rule or rollout runs. Backed by the pinned `whitelist` entry at the head of the gate's `stack`, so it is the same list the dashboard's Whitelist block edits.
1032
+ */
1033
+ type GateWhitelist = {
1034
+ /**
1035
+ * Resolved gate id.
1036
+ */
1037
+ id: string;
1038
+ /**
1039
+ * The gate's stable `name`.
1040
+ */
1041
+ name: string;
1042
+ attr: GateWhitelistAttr;
1043
+ /**
1044
+ * The whitelisted identities, in the order they are stored. Deduplicated case-sensitively; an empty array means the gate has no whitelist.
1045
+ */
1046
+ entries: Array<string>;
1047
+ };
1048
+ /**
1049
+ * Body for `PUT /api/admin/gates/{id}/whitelist`. Replaces the whole list — idempotent, and the only call that can switch `attr` or clear the whitelist.
1050
+ */
1051
+ type SetGateWhitelistRequest = {
1052
+ /**
1053
+ * Identity attribute to match on. Defaults to the whitelist's current attribute, or `email` when the gate has no whitelist yet.
1054
+ */
1055
+ attr?: GateWhitelistAttr;
1056
+ /**
1057
+ * The complete whitelist after the call. Pass `[]` to remove the whitelist from the gate entirely.
1058
+ */
1059
+ entries: Array<string>;
1060
+ };
1061
+ /**
1062
+ * Body for `POST /api/admin/gates/{id}/whitelist`. Adds entries to the whitelist, creating it if the gate doesn't have one.
1063
+ */
1064
+ type AddToGateWhitelistRequest = {
1065
+ /**
1066
+ * Identity attribute to match on. Only honoured when the gate has no whitelist yet (this call creates it); passing an attribute that disagrees with an existing whitelist is a 409 rather than a silent re-key of the entries already there.
1067
+ */
1068
+ attr?: GateWhitelistAttr;
1069
+ /**
1070
+ * Identities to admit. Already-listed entries are skipped, so the call is idempotent.
1071
+ */
1072
+ entries: Array<string>;
1073
+ };
1074
+ /**
1075
+ * Body for `DELETE /api/admin/gates/{id}/whitelist`. Removes entries from the whitelist. Removing the last entry leaves an empty whitelist in place — use `PUT` with `entries: []` to drop the block itself.
1076
+ */
1077
+ type RemoveFromGateWhitelistRequest = {
1078
+ /**
1079
+ * Identities to stop admitting. Entries that aren't listed are skipped, so the call is idempotent.
1080
+ */
1081
+ entries: Array<string>;
1082
+ };
1026
1083
  type ExperimentApiRow = {
1027
1084
  /**
1028
1085
  * Stable opaque experiment id (`exp_…`).
@@ -1188,9 +1245,9 @@ type ExperimentInlineMetric = {
1188
1245
  */
1189
1246
  event?: string;
1190
1247
  /**
1191
- * Reducer for the `event` form. Defaults to `count_users`.
1248
+ * Reducer for the `event` form. Defaults to `count_events`. `count_users` was removed: Analytics Engine samples rows and weights the survivors, and a distinct count cannot be reweighted, so it under-reports by the sample interval. `retention_7d` / `retention_30d` were removed on 2026-08-10: the day count reached no query and no reducer, so both produced the same number as a distinct user count and reported it as a returning-user rate.
1192
1249
  */
1193
- aggregation?: 'count_users' | 'count_events' | 'retention_7d' | 'retention_30d' | 'sum' | 'avg';
1250
+ aggregation?: 'count_events' | 'sum' | 'avg';
1194
1251
  /**
1195
1252
  * Numeric event property for `sum`/`avg` (with `event`).
1196
1253
  */
@@ -2372,6 +2429,52 @@ type SetKillswitchValueResponse = {
2372
2429
  version: number;
2373
2430
  published: KillswitchValue;
2374
2431
  };
2432
+ /**
2433
+ * Body for `POST /api/admin/killswitches/{id}/toggle`. Every field is optional, so the four useful calls read as one method with a widening argument list:
2434
+ *
2435
+ * - `{}` — flip the flat value on prod.
2436
+ * - `{ "switchKey": "eu_region" }` — flip that sub-switch on prod.
2437
+ * - `{ "switchKey": "eu_region", "value": true }` — set that sub-switch on prod, idempotently.
2438
+ * - `{ "switchKey": "eu_region", "value": true, "env": "staging" }` — the same, on a chosen env.
2439
+ */
2440
+ type ToggleKillswitchRequest = {
2441
+ /**
2442
+ * Which target to flip. Omit (or `null`) to flip the killswitch's own flat `value`; name a switch key to flip that nested sub-switch instead, creating the entry if it doesn't exist yet.
2443
+ */
2444
+ switchKey?: string | null;
2445
+ /**
2446
+ * The value to publish. Omit (or `null`) to flip whatever is stored now — read-modify-write in one call. Pass an explicit `true`/`false` to make the call idempotent, so a retry can't undo the first attempt.
2447
+ */
2448
+ value?: boolean | null;
2449
+ /**
2450
+ * Environment to publish on. Defaults to `prod` — the environment an incident response means when it says "kill it".
2451
+ */
2452
+ env?: Env;
2453
+ };
2454
+ type ToggleKillswitchResponse = {
2455
+ /**
2456
+ * Resolved killswitch id.
2457
+ */
2458
+ id: string;
2459
+ env: Env;
2460
+ /**
2461
+ * The sub-switch that was flipped, or `null` when the flat `value` was.
2462
+ */
2463
+ switchKey: string | null;
2464
+ /**
2465
+ * The value that was in effect before this call. Equal to `value` when an idempotent `value` matched what was already stored.
2466
+ */
2467
+ previous: boolean;
2468
+ /**
2469
+ * The value now in effect on `env`.
2470
+ */
2471
+ value: boolean;
2472
+ /**
2473
+ * Newly published version on `env`.
2474
+ */
2475
+ version: number;
2476
+ published: KillswitchValue;
2477
+ };
2375
2478
  type UniverseParam = {
2376
2479
  /**
2377
2480
  * Param key, referenced by `groups[].params` on every experiment in the universe.
@@ -2806,139 +2909,63 @@ type UpdateAttributeResponse = {
2806
2909
  id: string;
2807
2910
  };
2808
2911
  /**
2809
- * Typed query IR — the structured alternative to the `query` DSL string. Exactly one of `query` / `query_ir` is supplied per metric body.
2912
+ * How the metric's series is DRAWN, as opposed to what it measures. Both parts used to be DSL functions (`expected(q, seasonal)`, `forecast(q, …)`), which meant turning a band on minted a different metric; they are properties now, so every chart of the metric picks them up and nothing that JUDGES the metric — an alert rule, the experiment analyzer — reads them at all.
2810
2913
  */
2811
- type QueryIr = {
2914
+ type MetricDisplayConfig = {
2812
2915
  /**
2813
- * Aggregation function applied to the source event.
2916
+ * Shade the seasonal baseline around the series. The fit is the median of this hour of the week over the four weeks before the window, and it is the SAME fit an `anomaly` alert rule fires on — so the shaded region is exactly where such a rule would stay quiet, whether or not one exists.
2814
2917
  */
2815
- agg: {
2816
- kind: 'count_users';
2817
- } | {
2818
- kind: 'count_events';
2819
- } | {
2820
- kind: 'sum';
2821
- } | {
2822
- kind: 'avg';
2823
- } | {
2824
- kind: 'min';
2825
- } | {
2826
- kind: 'max';
2827
- } | {
2828
- kind: 'unique';
2829
- } | {
2830
- kind: 'quantile';
2831
- /**
2832
- * Quantile fraction (0.5 = p50 … 0.999 = p999).
2833
- */
2834
- p: 0.5 | 0.75 | 0.9 | 0.95 | 0.99 | 0.999;
2835
- } | {
2836
- kind: 'retention_Nd';
2918
+ band?: {
2919
+ method: 'seasonal';
2837
2920
  /**
2838
- * Retention window in days (1–90).
2921
+ * Half-width of the band in sigma-equivalents. Omit for 3, the sigma an alert rule also defaults to.
2839
2922
  */
2840
- n: number;
2841
- } | {
2842
- kind: 'ratio';
2923
+ sigma?: number;
2924
+ };
2925
+ /**
2926
+ * Project the series past the end of the window. Projected buckets are marked, so a chart can draw an estimate differently from a measurement.
2927
+ */
2928
+ forecast?: {
2843
2929
  /**
2844
- * Numerator or denominator arm of a `ratio` aggregation.
2930
+ * `linear` continues a least-squares slope over the window it is already reading. `seasonal` de-seasonalises against the four weeks before the window, fits the trend on the remainder and adds the hour-of-week term back — ask for it when the metric has a shape.
2845
2931
  */
2846
- numerator: {
2847
- /**
2848
- * Counting mode for this ratio arm.
2849
- */
2850
- agg: 'count_users' | 'count_events';
2851
- /**
2852
- * Source event name for this ratio arm.
2853
- */
2854
- metric: string;
2855
- /**
2856
- * Optional label filters.
2857
- */
2858
- filters?: Array<{
2859
- /**
2860
- * Event property / label identifier.
2861
- */
2862
- label: string;
2863
- /**
2864
- * Match operator (`=~`/`!~` are regex).
2865
- */
2866
- op: '=' | '!=' | '=~' | '!~';
2867
- /**
2868
- * Quoted filter value (coerced for numeric labels).
2869
- */
2870
- value: string;
2871
- }>;
2872
- };
2932
+ method: 'linear' | 'seasonal';
2873
2933
  /**
2874
- * Numerator or denominator arm of a `ratio` aggregation.
2934
+ * Buckets to project. Omit for a quarter of the window, which is the same claim at every bucket width.
2875
2935
  */
2876
- denominator: {
2877
- /**
2878
- * Counting mode for this ratio arm.
2879
- */
2880
- agg: 'count_users' | 'count_events';
2881
- /**
2882
- * Source event name for this ratio arm.
2883
- */
2884
- metric: string;
2885
- /**
2886
- * Optional label filters.
2887
- */
2888
- filters?: Array<{
2889
- /**
2890
- * Event property / label identifier.
2891
- */
2892
- label: string;
2893
- /**
2894
- * Match operator (`=~`/`!~` are regex).
2895
- */
2896
- op: '=' | '!=' | '=~' | '!~';
2897
- /**
2898
- * Quoted filter value (coerced for numeric labels).
2899
- */
2900
- value: string;
2901
- }>;
2902
- };
2936
+ horizon?: number;
2903
2937
  };
2938
+ };
2939
+ /**
2940
+ * A metric definition as a typed expression tree — the structured alternative to the `query` DSL string, and what the API stores. Exactly one of `query` / `query_ir` is supplied per metric body; `query` is the same definition written as text, and is the spelling to prefer.
2941
+ * Until 2026-08-10 this documented a single aggregation (`{agg, metric, filters}`, with `ratio` as a special case). That shape no longer exists — stored metrics were migrated and the code that read it was deleted — so a body sending it is rejected. Send the `query` string instead, or the tree below.
2942
+ */
2943
+ type QueryIr = {
2904
2944
  /**
2905
- * Source event name (must equal `event_name`).
2906
- */
2907
- metric: string;
2908
- /**
2909
- * Numeric property summed/averaged for `sum`/`avg`/quantile aggregations.
2945
+ * Storage version of the definition. `2` is the only one.
2910
2946
  */
2911
- valueLabel?: string;
2947
+ v: 2;
2912
2948
  /**
2913
- * Label filters on the event.
2949
+ * The expression tree: aggregate leaves (`{node: "agg", event, agg, filters, valueLabel?}`), arithmetic over them (`{node: "binary", op, left, right}`), scalars, and function calls (`{node: "call", fn, arg, params?}`). A ratio is ordinary division of two leaves.
2950
+ * Deliberately opaque here rather than mirrored node by node: the grammar belongs to the query language, a second copy of it in this spec would drift from the one the server enforces, and the server validates every tree by planning it before the metric saves. `GET /api/admin/metrics` returns the grammar itself; the `query` string is the same tree in the form humans and the CLI write.
2914
2951
  */
2915
- filters?: Array<{
2916
- /**
2917
- * Event property / label identifier.
2918
- */
2919
- label: string;
2920
- /**
2921
- * Match operator (`=~`/`!~` are regex).
2922
- */
2923
- op: '=' | '!=' | '=~' | '!~';
2924
- /**
2925
- * Quoted filter value (coerced for numeric labels).
2926
- */
2927
- value: string;
2928
- }>;
2952
+ expr: {
2953
+ [key: string]: unknown;
2954
+ };
2929
2955
  /**
2930
- * Optional group-by clause (ignored for experiment analysis).
2956
+ * How the series is split. On the envelope rather than in `expr` because every leaf of one expression shares it.
2931
2957
  */
2932
2958
  groupBy?: {
2933
2959
  /**
2934
- * `by` keeps the listed labels; `without` drops them.
2960
+ * `by` names the output dimensions; `without` names the ones to drop.
2935
2961
  */
2936
2962
  op: 'by' | 'without';
2937
2963
  /**
2938
- * Labels to group by (max 5).
2964
+ * Labels the grouping names.
2939
2965
  */
2940
2966
  labels: Array<string>;
2941
2967
  };
2968
+ display?: MetricDisplayConfig;
2942
2969
  };
2943
2970
  /**
2944
2971
  * Every metric in the project (the list endpoint is not paginated).
@@ -3018,6 +3045,10 @@ type ListMetricsResponse = Array<{
3018
3045
  updatedAt?: string;
3019
3046
  [key: string]: unknown;
3020
3047
  }>;
3048
+ /**
3049
+ * What a human calls the metric — "Checkout revenue" beside the `checkout.revenue` that identifies it. Unlike `name` it is free text, it is editable, and nothing addresses the metric by it: the dashboard leads with it and falls back to `name` when it is absent, so a metric nobody named simply reads as its key. Send `null` to clear it.
3050
+ */
3051
+ type MetricDisplayName = string | null;
3021
3052
  /**
3022
3053
  * Source event the query reads from.
3023
3054
  */
@@ -3047,6 +3078,7 @@ type MetricDisplayUnit = string | null;
3047
3078
  */
3048
3079
  type CreateMetricWithQuery = {
3049
3080
  name: MetricName;
3081
+ display_name?: MetricDisplayName;
3050
3082
  folder?: Folder;
3051
3083
  event_name: MetricEventName;
3052
3084
  query: MetricQueryDsl;
@@ -3054,12 +3086,14 @@ type CreateMetricWithQuery = {
3054
3086
  default_min_effect_of_interest?: MetricDefaultMinEffectOfInterest;
3055
3087
  direction?: MetricDirection;
3056
3088
  unit?: MetricDisplayUnit;
3089
+ display?: MetricDisplayConfig;
3057
3090
  };
3058
3091
  /**
3059
3092
  * Create a metric, supplying the query as a typed `query_ir`.
3060
3093
  */
3061
3094
  type CreateMetricWithQueryIr = {
3062
3095
  name: MetricName;
3096
+ display_name?: MetricDisplayName;
3063
3097
  folder?: Folder;
3064
3098
  event_name: MetricEventName;
3065
3099
  query_ir: QueryIr;
@@ -3067,6 +3101,7 @@ type CreateMetricWithQueryIr = {
3067
3101
  default_min_effect_of_interest?: MetricDefaultMinEffectOfInterest;
3068
3102
  direction?: MetricDirection;
3069
3103
  unit?: MetricDisplayUnit;
3104
+ display?: MetricDisplayConfig;
3070
3105
  };
3071
3106
  /**
3072
3107
  * Body for `POST /api/admin/metrics`. Requires `name`, `event_name`, and exactly one of `query` / `query_ir` — modelled as a `oneOf` of two strict variants, so supplying both (or neither) is rejected.
@@ -3165,6 +3200,7 @@ type DeleteMetricResponse = {
3165
3200
  * Update-metric variant that replaces the query with a `query` DSL string.
3166
3201
  */
3167
3202
  type UpdateMetricWithQuery = {
3203
+ display_name?: MetricDisplayName;
3168
3204
  folder?: Folder;
3169
3205
  event_name?: MetricEventName;
3170
3206
  query: MetricQueryDsl;
@@ -3172,11 +3208,13 @@ type UpdateMetricWithQuery = {
3172
3208
  default_min_effect_of_interest?: MetricDefaultMinEffectOfInterest;
3173
3209
  direction?: MetricDirection;
3174
3210
  unit?: MetricDisplayUnit;
3211
+ display?: MetricDisplayConfig;
3175
3212
  };
3176
3213
  /**
3177
3214
  * Update-metric variant that replaces the query with a typed `query_ir`.
3178
3215
  */
3179
3216
  type UpdateMetricWithQueryIr = {
3217
+ display_name?: MetricDisplayName;
3180
3218
  folder?: Folder;
3181
3219
  event_name?: MetricEventName;
3182
3220
  query_ir: QueryIr;
@@ -3184,17 +3222,20 @@ type UpdateMetricWithQueryIr = {
3184
3222
  default_min_effect_of_interest?: MetricDefaultMinEffectOfInterest;
3185
3223
  direction?: MetricDirection;
3186
3224
  unit?: MetricDisplayUnit;
3225
+ display?: MetricDisplayConfig;
3187
3226
  };
3188
3227
  /**
3189
- * Update-metric variant that leaves the query untouched (metadata-only edit — folder, event, winsorisation, default minimum effect of interest, direction, display unit).
3228
+ * Update-metric variant that leaves the query untouched (metadata-only edit — folder, event, winsorisation, default minimum effect of interest, direction, display unit, band and projection).
3190
3229
  */
3191
3230
  type UpdateMetricFields = {
3231
+ display_name?: MetricDisplayName;
3192
3232
  folder?: Folder;
3193
3233
  event_name?: MetricEventName;
3194
3234
  winsorize_pct?: MetricWinsorizePct;
3195
3235
  default_min_effect_of_interest?: MetricDefaultMinEffectOfInterest;
3196
3236
  direction?: MetricDirection;
3197
3237
  unit?: MetricDisplayUnit;
3238
+ display?: MetricDisplayConfig;
3198
3239
  };
3199
3240
  /**
3200
3241
  * Body for `PATCH /api/admin/metrics/{id}`. Every field is optional (`name` is immutable); provide at most one of `query` / `query_ir` — modelled as a `oneOf` of three disjoint strict variants (query-only, query_ir-only, or neither), so supplying both is rejected.
@@ -3269,6 +3310,16 @@ type GetMetricSeriesResponse = {
3269
3310
  * Aggregated metric value in the bucket (sample-interval weighted).
3270
3311
  */
3271
3312
  v: number;
3313
+ /**
3314
+ * Lower edge of the seasonal band — what this hour of the week normally holds, `sigma` below the median of the four weeks before the window. Present only for a metric whose `display.band` is on, and always alongside `hi`.
3315
+ *
3316
+ */
3317
+ lo?: number;
3318
+ /**
3319
+ * Upper edge of the seasonal band. Present only for a metric whose `display.band` is on, and always alongside `lo`. A point outside `[lo, hi]` is exactly a bucket an `anomaly` alert rule at the same sigma would breach on — the band a chart draws and the condition a rule fires on come from one fit.
3320
+ *
3321
+ */
3322
+ hi?: number;
3272
3323
  [key: string]: unknown;
3273
3324
  }>;
3274
3325
  };
@@ -3297,7 +3348,7 @@ type ListEventsResponse = Array<{
3297
3348
  */
3298
3349
  properties: Array<{
3299
3350
  /**
3300
- * Property key, e.g. `amount` or `plan`.
3351
+ * Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
3301
3352
  */
3302
3353
  name: string;
3303
3354
  /**
@@ -3312,6 +3363,10 @@ type ListEventsResponse = Array<{
3312
3363
  * Human-readable description of the property.
3313
3364
  */
3314
3365
  description?: string;
3366
+ /**
3367
+ * `true` when this property was DISCOVERED in live traffic rather than declared. Nothing is recorded for it yet — a property is written to Analytics Engine only once it owns a column, and a column is allocated when an admin declares the property (include it in a `PATCH .../events/{id}` body). Approval is a gate rather than a formality: columns are finite and permanently reserved, so auto-allocating them from customer payload keys would exhaust an event's schema irreversibly.
3368
+ */
3369
+ pending?: boolean;
3315
3370
  }>;
3316
3371
  /**
3317
3372
  * `1` if this is an auto-discovered name awaiting approval (metrics on it fail until approved), `0` if approved/usable.
@@ -3327,7 +3382,7 @@ type ListEventsResponse = Array<{
3327
3382
  */
3328
3383
  type CreateEventRequest = {
3329
3384
  /**
3330
- * Event name. Starts with a letter, digit, or `_`; letters, digits, `_`, `-`, `.`; max 128 chars. Immutable after create — this is the handle metric queries reference.
3385
+ * Event name. Starts with a letter, digit, or `_`; letters, digits, `_`, `-`, `.`; max 50 characters. The cap is the Analytics Engine index budget — 96 bytes total, less a 36-byte project UUID and a separator — and the API has always enforced 50 while this spec advertised 128. The charset is ASCII, so characters and bytes are the same count. Immutable after create — this is the handle metric queries reference.
3331
3386
  */
3332
3387
  name: string;
3333
3388
  folder?: Folder;
@@ -3340,7 +3395,7 @@ type CreateEventRequest = {
3340
3395
  */
3341
3396
  properties?: Array<{
3342
3397
  /**
3343
- * Property key, e.g. `amount` or `plan`.
3398
+ * Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
3344
3399
  */
3345
3400
  name: string;
3346
3401
  /**
@@ -3395,7 +3450,7 @@ type GetEventResponse = {
3395
3450
  */
3396
3451
  properties: Array<{
3397
3452
  /**
3398
- * Property key, e.g. `amount` or `plan`.
3453
+ * Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
3399
3454
  */
3400
3455
  name: string;
3401
3456
  /**
@@ -3410,6 +3465,10 @@ type GetEventResponse = {
3410
3465
  * Human-readable description of the property.
3411
3466
  */
3412
3467
  description?: string;
3468
+ /**
3469
+ * `true` when this property was DISCOVERED in live traffic rather than declared. Nothing is recorded for it yet — a property is written to Analytics Engine only once it owns a column, and a column is allocated when an admin declares the property (include it in a `PATCH .../events/{id}` body). Approval is a gate rather than a formality: columns are finite and permanently reserved, so auto-allocating them from customer payload keys would exhaust an event's schema irreversibly.
3470
+ */
3471
+ pending?: boolean;
3413
3472
  }>;
3414
3473
  /**
3415
3474
  * `1` if this is an auto-discovered name awaiting approval (metrics on it fail until approved), `0` if approved/usable.
@@ -3440,7 +3499,7 @@ type UpdateEventRequest = {
3440
3499
  */
3441
3500
  properties?: Array<{
3442
3501
  /**
3443
- * Property key, e.g. `amount` or `plan`.
3502
+ * Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
3444
3503
  */
3445
3504
  name: string;
3446
3505
  /**
@@ -3480,7 +3539,7 @@ type ApproveEventRequest = {
3480
3539
  */
3481
3540
  properties?: Array<{
3482
3541
  /**
3483
- * Property key, e.g. `amount` or `plan`.
3542
+ * Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
3484
3543
  */
3485
3544
  name: string;
3486
3545
  /**
@@ -3515,9 +3574,9 @@ type OpsItemStatus = 'open' | 'pending_approval' | 'investigating_by_ai' | 'in_p
3515
3574
  */
3516
3575
  type OpsItemPriority = 'nice_to_have' | 'medium' | 'high' | 'critical';
3517
3576
  /**
3518
- * Where automation has taken an item in the investigation lifecycle — the signal the ops cockpit renders as "what AI did" plus the one action expected of the user. It is **written as a side-effect of the actions that already happen**, never authored on its own: linking a PR sets `pr_ready`, moving to `in_progress` sets `working`, `ready_for_qa` sets `ready_for_qa`, a system/assistant reply sets `question`, resolving clears it, and creation seeds `backlog` or `investigated`/`detected` for auto-filed error/alert tickets. `backlog` is the single "nothing has happened yet" state — how urgent that is reads off `priority`, not off a separate state, and its one action is to hand the item to an agent. `pr_merged` is derived client-side by scanning the linked pull request on GitHub, so it is accepted on write but not currently emitted by the API. Absent on rows filed before the field existed — consumers should treat a missing value as "derive from the other fields".
3577
+ * Where automation has taken an item in the investigation lifecycle — the signal the ops cockpit renders as "what AI did" plus the one action expected of the user. It is **written as a side-effect of the actions that already happen**, never authored on its own: linking a PR sets `pr_ready`, moving to `in_progress` sets `working`, `ready_for_qa` sets `ready_for_qa`, a system/assistant reply sets `question`, resolving clears it, and creation seeds `backlog` for every untouched item (bugs, features, and auto-filed error/alert tickets alike — type is not a signal). `backlog` is the single "nothing has happened yet" state — how urgent that is reads off `priority`, not off a separate state, and its one action is to hand the item to an agent. `investigated`/`detected` are set when a completed agent run leaves findings to review, not at filing time. `pr_merged` and `pr_closed` are written by the GitHub `pull_request` webhook when the linked PR reaches a terminal outcome — merged (the fix shipped, resolve the item) or closed without merging (the fix was rejected, decide what happens next). Absent on rows filed before the field existed — consumers should treat a missing value as "derive from the other fields".
3519
3578
  */
3520
- type OpsInvestigationState = 'pr_ready' | 'pr_merged' | 'investigated' | 'detected' | 'question' | 'ready_for_qa' | 'pending_approval' | 'working' | 'backlog';
3579
+ type OpsInvestigationState = 'pr_ready' | 'pr_merged' | 'pr_closed' | 'investigated' | 'detected' | 'question' | 'ready_for_qa' | 'pending_approval' | 'working' | 'backlog';
3521
3580
  /**
3522
3581
  * Auto-collected browser environment for a `bug`/`feature_request`, captured at file time.
3523
3582
  */
@@ -3651,21 +3710,29 @@ type OpsAlertMetricSummary = {
3651
3710
  [key: string]: unknown;
3652
3711
  };
3653
3712
  /**
3654
- * Hydrated detail for an auto-filed `alert` ticket, resolving the rule → metric → event chain at request time.
3713
+ * Detail for an `alert` ticket — the fired-alert INSTANCE this ticket is. List rows carry the stored capture subset (`source`, `dedupeKey`, `ruleId`, `detail`, `href`, `observedValue`); the single-item read hydrates the rest, resolving `severity`/`status` off the ticket itself and the rule → metric → event chain at request time.
3655
3714
  */
3656
3715
  type OpsAlertContext = {
3657
3716
  /**
3658
- * What kind of alert transitioned to active.
3717
+ * What kind of condition opened this alert instance.
3659
3718
  */
3660
- source: 'metric_rule' | 'experiment_srm' | 'experiment_peek' | 'guardrail';
3719
+ source: 'metric_rule' | 'killswitch_armed' | 'experiment_srm' | 'experiment_peek' | 'guardrail';
3661
3720
  /**
3662
3721
  * Stable per-condition key; with `source` forms the ticket's `sourceRef`.
3663
3722
  */
3664
3723
  dedupeKey: string;
3665
3724
  /**
3666
- * Alert severity.
3725
+ * The instance's one-line reading — the observed condition in words.
3667
3726
  */
3668
- severity: 'danger' | 'warn' | 'info';
3727
+ detail?: string | null;
3728
+ /**
3729
+ * Id of the alert rule that opened this instance, or `null` for a built-in condition.
3730
+ */
3731
+ ruleId?: string | null;
3732
+ /**
3733
+ * How loud the alert is. Severity belongs to the RULE and is carried by this ticket as `priority`; it is DERIVED from that on the hydrated single-item read, and absent from the raw stored context list rows return.
3734
+ */
3735
+ severity?: 'danger' | 'warn' | 'info';
3669
3736
  /**
3670
3737
  * The metric value that tripped the rule, or `null`.
3671
3738
  */
@@ -3675,7 +3742,7 @@ type OpsAlertContext = {
3675
3742
  */
3676
3743
  href?: string | null;
3677
3744
  /**
3678
- * Current status of the underlying alert (`active` while the condition holds), or `null` if the alert row is gone.
3745
+ * Firing state of this instance, projected from the ticket's own status (`active` while it is open, i.e. while the condition holds). Absent from the raw stored context list rows return.
3679
3746
  */
3680
3747
  status?: 'active' | 'resolved' | 'dismissed' | null;
3681
3748
  /**
@@ -3771,15 +3838,15 @@ type OpsItemContext = {
3771
3838
  alert?: OpsAlertContext;
3772
3839
  measurePlan?: OpsMeasurePlanContext;
3773
3840
  /**
3774
- * Occurrence timeline for an `error` ticket — hourly buckets over the last 24h from the sampled occurrences, hydrated at read time by the single-item read only. ABSENT (not `null`) on non-error tickets, on list rows (raw context), and when no occurrence landed in the window.
3841
+ * Occurrence timeline for an `error` ticket — buckets over the project's error auto-close window (Settings → Errors: `errorAutocloseDays`, 7 days when auto-close is off, capped at 30) from the sampled occurrences, hydrated at read time by the single-item read only. Plotting exactly the quiet window that auto-resolves the error is what makes an empty right-hand edge meaningful. ABSENT (not `null`) on non-error tickets, on list rows (raw context), and when no occurrence landed in the window.
3775
3842
  */
3776
3843
  errorChart?: {
3777
3844
  /**
3778
- * Hourly occurrence buckets, oldest first. Hours with no occurrences are omitted.
3845
+ * Occurrence buckets, oldest first. Buckets with no occurrences are omitted.
3779
3846
  */
3780
3847
  series: Array<{
3781
3848
  /**
3782
- * Bucket start — unix epoch **milliseconds** (hourly buckets).
3849
+ * Bucket start — unix epoch **milliseconds**. Bucket width scales with the window (hourly up to ~5 days, coarser beyond).
3783
3850
  */
3784
3851
  t: number;
3785
3852
  /**
@@ -3789,7 +3856,7 @@ type OpsItemContext = {
3789
3856
  [key: string]: unknown;
3790
3857
  }>;
3791
3858
  /**
3792
- * Chart domain start — unix epoch milliseconds (24h before the read).
3859
+ * Chart domain start — unix epoch milliseconds (the window's start).
3793
3860
  */
3794
3861
  domainFrom: number;
3795
3862
  /**
@@ -3824,6 +3891,26 @@ type GithubPrLink = {
3824
3891
  * How the PR was connected to the issue.
3825
3892
  */
3826
3893
  method?: 'closes' | 'comment';
3894
+ /**
3895
+ * Repository owner (org or user) the pull request lives in. Absent on links recorded before the field existed — `url` still carries it.
3896
+ */
3897
+ owner?: string;
3898
+ /**
3899
+ * Repository name the pull request lives in. Absent on links recorded before the field existed — `url` still carries it.
3900
+ */
3901
+ repo?: string;
3902
+ /**
3903
+ * Outcome of the pull request on GitHub, kept current by the `pull_request` webhook. `merged` and `closed` (closed WITHOUT merging, i.e. rejected) are terminal. Absent means the outcome has never been observed — treat it as `open`.
3904
+ */
3905
+ state?: 'open' | 'merged' | 'closed';
3906
+ /**
3907
+ * ISO-8601 timestamp the pull request merged, when `state` is `merged`.
3908
+ */
3909
+ mergedAt?: string;
3910
+ /**
3911
+ * ISO-8601 timestamp the pull request closed unmerged, when `state` is `closed`.
3912
+ */
3913
+ closedAt?: string;
3827
3914
  [key: string]: unknown;
3828
3915
  };
3829
3916
  /**
@@ -4102,6 +4189,10 @@ type ListOpsItemsResponse = Array<{
4102
4189
  updatedAt: string;
4103
4190
  [key: string]: unknown;
4104
4191
  }>;
4192
+ /**
4193
+ * A tag name. Trimmed; matched case-insensitively against the project's existing tags.
4194
+ */
4195
+ type TagName = string;
4105
4196
  /**
4106
4197
  * Bug-kind fields for `POST /api/admin/ops` (sent with `type: bug`).
4107
4198
  */
@@ -4143,9 +4234,9 @@ type CreateBugRequest = {
4143
4234
  */
4144
4235
  subscribers?: Array<string>;
4145
4236
  /**
4146
- * Tag names to attach at creation (get-or-created by name, deduped case-insensitively).
4237
+ * Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name is matched case-insensitively against the project's existing tags and reuses that tag (keeping its stored casing) when one matches; a name with no match creates a new project tag.
4147
4238
  */
4148
- tags?: Array<string>;
4239
+ tags?: Array<TagName>;
4149
4240
  /**
4150
4241
  * Email of the reporter, or `null`.
4151
4242
  */
@@ -4210,9 +4301,9 @@ type CreateFeatureRequestRequest = {
4210
4301
  */
4211
4302
  subscribers?: Array<string>;
4212
4303
  /**
4213
- * Tag names to attach at creation (get-or-created by name, deduped case-insensitively).
4304
+ * Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name is matched case-insensitively against the project's existing tags and reuses that tag (keeping its stored casing) when one matches; a name with no match creates a new project tag.
4214
4305
  */
4215
- tags?: Array<string>;
4306
+ tags?: Array<TagName>;
4216
4307
  /**
4217
4308
  * Email of the reporter, or `null`.
4218
4309
  */
@@ -4258,116 +4349,271 @@ type CreateOpsItemResponse = {
4258
4349
  number?: number | null;
4259
4350
  };
4260
4351
  /**
4261
- * A file uploaded with a bug/feature report.
4352
+ * Body for `POST /ops/bug`. The same bug fields as `CreateBugRequest`, minus the `type` discriminator — the path already says what is being filed, plus the public intake's own `dedupKey`.
4262
4353
  */
4263
- type OpsItemAttachment = {
4354
+ type CreatePublicBugRequest = {
4264
4355
  /**
4265
- * Attachment id.
4356
+ * One-line bug title (no leading/trailing whitespace).
4266
4357
  */
4267
- id: string;
4358
+ title: string;
4268
4359
  /**
4269
- * `screenshot` | `video` | `log`.
4360
+ * How to reproduce the bug.
4270
4361
  */
4271
- kind: string;
4362
+ stepsToReproduce?: string;
4272
4363
  /**
4273
- * Sanitized original filename.
4364
+ * What actually happened.
4274
4365
  */
4275
- filename: string;
4366
+ actualResult?: string;
4276
4367
  /**
4277
- * MIME type, e.g. `image/png`.
4368
+ * What was expected instead.
4278
4369
  */
4279
- mimeType: string;
4370
+ expectedResult?: string;
4280
4371
  /**
4281
- * Upload size in bytes.
4372
+ * Initial triage priority, or `null`.
4282
4373
  */
4283
- sizeBytes: number;
4374
+ priority?: OpsItemPriority | null;
4284
4375
  /**
4285
- * Admin-API path to download the file (`GET` with the admin/ops key — screenshots render inline; recordings can't be watched).
4376
+ * Initial lifecycle status; defaults to `open` when omitted.
4286
4377
  */
4287
- fetchUrl: string;
4288
- [key: string]: unknown;
4289
- };
4290
- /**
4291
- * Deep links to the resources behind this item — every value is either a dashboard-relative path or an admin-API path fetchable with the same key.
4292
- */
4293
- type OpsItemRelated = {
4378
+ status?: OpsItemStatus;
4294
4379
  /**
4295
- * Dashboard-relative deep link to this item.
4380
+ * The `users.id` of the person to assign as owner at creation, or `null`.
4296
4381
  */
4297
- dashboard?: string;
4382
+ assigneeId?: string | null;
4298
4383
  /**
4299
- * Admin-API path to the tracked error (error tickets only).
4384
+ * Emails of teammates to subscribe to this item's Slack pings at creation.
4300
4385
  */
4301
- error?: string;
4386
+ subscribers?: Array<string>;
4302
4387
  /**
4303
- * Admin-API path to the alert rule (metric-rule alerts only).
4388
+ * Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name is matched case-insensitively against the project's existing tags and reuses that tag (keeping its stored casing) when one matches; a name with no match creates a new project tag. Here the tags only label the ticket: the project's tag rules (owner/status/agent routing) are not applied to a public report while it awaits approval.
4304
4389
  */
4305
- alertRule?: string;
4390
+ tags?: Array<TagName>;
4306
4391
  /**
4307
- * Admin-API path to the metric the alert watches (alert tickets only).
4392
+ * Email of the reporter, or `null`.
4308
4393
  */
4309
- metric?: string;
4394
+ reporterEmail?: string | null;
4310
4395
  /**
4311
- * HTML URL of the connected GitHub issue, if any.
4396
+ * URL of the page the bug relates to, or `null`.
4312
4397
  */
4313
- githubIssue?: string;
4398
+ pageUrl?: string | null;
4314
4399
  /**
4315
- * HTML URL of the linked GitHub pull request, if any.
4400
+ * Reporter's user-agent string, or `null`.
4316
4401
  */
4317
- githubPr?: string;
4318
- [key: string]: unknown;
4319
- };
4320
- /**
4321
- * One queue item, any of the five types. Shared fields apply to all; `stepsToReproduce`/`actualResult`/`expectedResult` are bug-specific, `description`/`useCase` feature-specific. The auto-collected browser fields (page URL, user-agent, viewport) live under `context.browser` for bug/feature. `context` also carries the hydrated per-type payload for auto-filed `error`/`alert`/`measure_plan` tickets, `attachments` lists any uploaded files, and `related` gives deep links to the underlying resources.
4322
- */
4323
- type GetOpsItemResponse = {
4402
+ userAgent?: string | null;
4324
4403
  /**
4325
- * Stable opaque item id.
4404
+ * Reporter's viewport (e.g. `1280x720`), or `null`.
4326
4405
  */
4327
- id: string;
4406
+ viewport?: string | null;
4328
4407
  /**
4329
- * Per-project item number (the `#7` handle), or `null` if unnumbered.
4408
+ * Arbitrary capture context, or `null`.
4330
4409
  */
4331
- number: number | null;
4410
+ context?: {
4411
+ [key: string]: unknown;
4412
+ } | null;
4332
4413
  /**
4333
- * Queue item type. `bug` and `feature_request` are user-fileable; `error`, `alert`, and `measure_plan` tickets are auto-filed by the platform (a tracked production error, a metric-threshold alert, and an assistant-proposed measurement plan respectively).
4414
+ * Caller-chosen dedupe identity for this report, stored on the ticket. A repeat submission carrying the same key does NOT file a second ticket: the open ticket already holding that key is refreshed from this payload (title and the report fields overwritten, a "re-triggered" comment appended) and returned with `deduped: true` and `updated: true`. Triage state a human owns — status, priority, assignee, tags — is left untouched, and a `resolved`/`wont_fix` ticket no longer holds the key, so a failure that comes back after being closed files a fresh ticket. Omit it to fall back to the derived (title + `context.step`) dedupe, whose repeats return the existing ticket unchanged.
4334
4415
  */
4335
- type: 'bug' | 'feature_request' | 'error' | 'alert' | 'measure_plan';
4416
+ dedupKey?: string;
4336
4417
  /**
4337
- * One-line item title (all types).
4418
+ * Where this bug's completion notification lands.
4338
4419
  */
4339
- title: string;
4340
- status: OpsItemStatus;
4420
+ notify?: NotificationTarget | null;
4421
+ };
4422
+ /**
4423
+ * Response for the public ticket intake. A fresh file returns `201` with `id` + `number`; a repeat of a report already tracked by an open ticket returns `200` with that ticket's `number` and `deduped: true` — plus `updated: true` when a `dedupKey` re-triggered it and its fields were refreshed.
4424
+ */
4425
+ type CreatePublicTicketResponse = {
4341
4426
  /**
4342
- * Triage priority, or `null` if not yet set (all types).
4427
+ * The new item's id. Absent on a deduped response — nothing was created, so there is no new id to report.
4343
4428
  */
4344
- priority: OpsItemPriority | null;
4429
+ id?: string;
4345
4430
  /**
4346
- * How the item was filed: `team` (a human admin/teammate — bug/feature) or `system` (auto-filed — error/alert/measure_plan).
4431
+ * Per-project item number. On a deduped response this is the number of the OPEN ticket already tracking the report, which is what a caller should show the user either way.
4347
4432
  */
4348
- source?: 'team' | 'system';
4433
+ number: number;
4349
4434
  /**
4350
- * Stable key of the originating record for auto-filed tickets (error fingerprint, `<alert source>:<dedupeKey>`, or measurement-plan ref); `null` for human-filed bugs/features.
4435
+ * `true` when an open ticket already tracked this report and nothing was filed (HTTP 200). Absent on a fresh file (HTTP 201).
4351
4436
  */
4352
- sourceRef?: string | null;
4437
+ deduped?: boolean;
4353
4438
  /**
4354
- * Where automation has taken this item in the investigation lifecycle (see `OpsInvestigationState`). Written as a side-effect of the actions that already happen (link a PR, change status, an assistant reply); `null` on rows filed before the field existed — derive from `status`/`type` in that case.
4439
+ * `true` when the deduped ticket was REFRESHED from this payload and got a "re-triggered" comment — only ever set alongside `deduped` on a submission that carried a `dedupKey`. Absent when the existing ticket was returned untouched.
4355
4440
  */
4356
- investigationState?: OpsInvestigationState | null;
4441
+ updated?: boolean;
4442
+ };
4443
+ /**
4444
+ * Body for `POST /ops/feature-request`. The same feature-request fields as `CreateFeatureRequestRequest`, minus the `type` discriminator — the path already says what is being filed, plus the public intake's own `dedupKey`.
4445
+ */
4446
+ type CreatePublicFeatureRequestRequest = {
4357
4447
  /**
4358
- * Reporter email (bug/feature), or `null`.
4448
+ * One-line feature-request title (no leading/trailing whitespace).
4359
4449
  */
4360
- reporterEmail?: string | null;
4450
+ title: string;
4361
4451
  /**
4362
- * Reproduction steps — populated for `bug`, empty string otherwise.
4452
+ * What the feature is.
4363
4453
  */
4364
- stepsToReproduce?: string;
4454
+ description?: string;
4365
4455
  /**
4366
- * What actually happened — `bug` only, empty string otherwise.
4456
+ * Why it's needed / the use case.
4367
4457
  */
4368
- actualResult?: string;
4458
+ useCase?: string;
4369
4459
  /**
4370
- * What was expected — `bug` only, empty string otherwise.
4460
+ * Initial triage priority, or `null`.
4461
+ */
4462
+ priority?: OpsItemPriority | null;
4463
+ /**
4464
+ * Initial lifecycle status; defaults to `open` when omitted.
4465
+ */
4466
+ status?: OpsItemStatus;
4467
+ /**
4468
+ * The `users.id` of the person to assign as owner at creation, or `null`.
4469
+ */
4470
+ assigneeId?: string | null;
4471
+ /**
4472
+ * Emails of teammates to subscribe to this item's Slack pings at creation.
4473
+ */
4474
+ subscribers?: Array<string>;
4475
+ /**
4476
+ * Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name is matched case-insensitively against the project's existing tags and reuses that tag (keeping its stored casing) when one matches; a name with no match creates a new project tag. Here the tags only label the ticket: the project's tag rules (owner/status/agent routing) are not applied to a public report while it awaits approval.
4477
+ */
4478
+ tags?: Array<TagName>;
4479
+ /**
4480
+ * Email of the reporter, or `null`.
4481
+ */
4482
+ reporterEmail?: string | null;
4483
+ /**
4484
+ * URL of the page the request relates to, or `null`.
4485
+ */
4486
+ pageUrl?: string | null;
4487
+ /**
4488
+ * Reporter's user-agent string, or `null`.
4489
+ */
4490
+ userAgent?: string | null;
4491
+ /**
4492
+ * Arbitrary capture context, or `null`.
4493
+ */
4494
+ context?: {
4495
+ [key: string]: unknown;
4496
+ } | null;
4497
+ /**
4498
+ * Caller-chosen dedupe identity for this request, stored on the ticket. Behaves exactly as on `POST /ops/bug`: a repeat carrying the same key refreshes the open ticket already holding it (fields overwritten, a "re-triggered" comment appended) and returns `deduped: true` with `updated: true`, instead of filing a second one.
4499
+ */
4500
+ dedupKey?: string;
4501
+ /**
4502
+ * Where this request's completion notification lands.
4503
+ */
4504
+ notify?: NotificationTarget | null;
4505
+ };
4506
+ /**
4507
+ * A file uploaded with a bug/feature report.
4508
+ */
4509
+ type OpsItemAttachment = {
4510
+ /**
4511
+ * Attachment id.
4512
+ */
4513
+ id: string;
4514
+ /**
4515
+ * `screenshot` | `video` | `log`.
4516
+ */
4517
+ kind: string;
4518
+ /**
4519
+ * Sanitized original filename.
4520
+ */
4521
+ filename: string;
4522
+ /**
4523
+ * MIME type, e.g. `image/png`.
4524
+ */
4525
+ mimeType: string;
4526
+ /**
4527
+ * Upload size in bytes.
4528
+ */
4529
+ sizeBytes: number;
4530
+ /**
4531
+ * Admin-API path to download the file (`GET` with the admin/ops key — screenshots render inline; recordings can't be watched).
4532
+ */
4533
+ fetchUrl: string;
4534
+ [key: string]: unknown;
4535
+ };
4536
+ /**
4537
+ * Deep links to the resources behind this item — every value is either a dashboard-relative path or an admin-API path fetchable with the same key.
4538
+ */
4539
+ type OpsItemRelated = {
4540
+ /**
4541
+ * Dashboard-relative deep link to this item.
4542
+ */
4543
+ dashboard?: string;
4544
+ /**
4545
+ * Admin-API path to the tracked error (error tickets only).
4546
+ */
4547
+ error?: string;
4548
+ /**
4549
+ * Admin-API path to the alert rule (metric-rule alerts only).
4550
+ */
4551
+ alertRule?: string;
4552
+ /**
4553
+ * Admin-API path to the metric the alert watches (alert tickets only).
4554
+ */
4555
+ metric?: string;
4556
+ /**
4557
+ * HTML URL of the connected GitHub issue, if any.
4558
+ */
4559
+ githubIssue?: string;
4560
+ /**
4561
+ * HTML URL of the linked GitHub pull request, if any.
4562
+ */
4563
+ githubPr?: string;
4564
+ [key: string]: unknown;
4565
+ };
4566
+ /**
4567
+ * One queue item, any of the five types. Shared fields apply to all; `stepsToReproduce`/`actualResult`/`expectedResult` are bug-specific, `description`/`useCase` feature-specific. The auto-collected browser fields (page URL, user-agent, viewport) live under `context.browser` for bug/feature. `context` also carries the hydrated per-type payload for auto-filed `error`/`alert`/`measure_plan` tickets, `attachments` lists any uploaded files, and `related` gives deep links to the underlying resources.
4568
+ */
4569
+ type GetOpsItemResponse = {
4570
+ /**
4571
+ * Stable opaque item id.
4572
+ */
4573
+ id: string;
4574
+ /**
4575
+ * Per-project item number (the `#7` handle), or `null` if unnumbered.
4576
+ */
4577
+ number: number | null;
4578
+ /**
4579
+ * Queue item type. `bug` and `feature_request` are user-fileable; `error`, `alert`, and `measure_plan` tickets are auto-filed by the platform (a tracked production error, a metric-threshold alert, and an assistant-proposed measurement plan respectively).
4580
+ */
4581
+ type: 'bug' | 'feature_request' | 'error' | 'alert' | 'measure_plan';
4582
+ /**
4583
+ * One-line item title (all types).
4584
+ */
4585
+ title: string;
4586
+ status: OpsItemStatus;
4587
+ /**
4588
+ * Triage priority, or `null` if not yet set (all types).
4589
+ */
4590
+ priority: OpsItemPriority | null;
4591
+ /**
4592
+ * How the item was filed: `team` (a human admin/teammate — bug/feature) or `system` (auto-filed — error/alert/measure_plan).
4593
+ */
4594
+ source?: 'team' | 'system';
4595
+ /**
4596
+ * Stable key of the originating record for auto-filed tickets (error fingerprint, `<alert source>:<dedupeKey>`, or measurement-plan ref); `null` for human-filed bugs/features.
4597
+ */
4598
+ sourceRef?: string | null;
4599
+ /**
4600
+ * Where automation has taken this item in the investigation lifecycle (see `OpsInvestigationState`). Written as a side-effect of the actions that already happen (link a PR, change status, an assistant reply); `null` on rows filed before the field existed — derive from `status`/`type` in that case.
4601
+ */
4602
+ investigationState?: OpsInvestigationState | null;
4603
+ /**
4604
+ * Reporter email (bug/feature), or `null`.
4605
+ */
4606
+ reporterEmail?: string | null;
4607
+ /**
4608
+ * Reproduction steps — populated for `bug`, empty string otherwise.
4609
+ */
4610
+ stepsToReproduce?: string;
4611
+ /**
4612
+ * What actually happened — `bug` only, empty string otherwise.
4613
+ */
4614
+ actualResult?: string;
4615
+ /**
4616
+ * What was expected — `bug` only, empty string otherwise.
4371
4617
  */
4372
4618
  expectedResult?: string;
4373
4619
  /**
@@ -4546,6 +4792,10 @@ type AckOpsItemRequest = {
4546
4792
  * The agent-run session id (e.g. Claude's `session_01…`), so the dashboard can deep-link to the exact run page. Omit when the harness has no session id.
4547
4793
  */
4548
4794
  sessionId?: string;
4795
+ /**
4796
+ * Whether an AI ack may FIRE the agent's connected trigger. Default `true`: an ack naming a connected agent, with no `sessionId`, starts a new provider run of that agent. Pass `false` to only record the ack — claim the item and open the run record — without starting anything, e.g. when you ARE that agent working the item yourself and have no session id to pass. Ignored on a human ack.
4797
+ */
4798
+ launch?: boolean;
4549
4799
  };
4550
4800
  /**
4551
4801
  * Response for `POST /api/admin/ops/{handle}/ack` — the opened run.
@@ -4871,6 +5121,180 @@ type UpdateOpsInvestigationRequest = {
4871
5121
  */
4872
5122
  sessionId?: string;
4873
5123
  };
5124
+ /**
5125
+ * Where a question stands — `open` (waiting on a person), `completed` (answered), or `cancelled` (withdrawn by the asker).
5126
+ */
5127
+ type OpsQuestionStatus = 'open' | 'completed' | 'cancelled';
5128
+ /**
5129
+ * A person's answer to a question.
5130
+ */
5131
+ type OpsQuestionAnswer = {
5132
+ /**
5133
+ * The option labels the person picked (empty when they only answered "Other").
5134
+ */
5135
+ selected: Array<string>;
5136
+ /**
5137
+ * The free-text "Other" answer, or `null`.
5138
+ */
5139
+ other: string | null;
5140
+ };
5141
+ /**
5142
+ * How the answer gets back to the asker — `resume` re-fires the asking run's trigger connector on the item once every question that run asked is answered; `poll` fires nothing and the asker reads `GET .../questions`.
5143
+ */
5144
+ type OpsQuestionDelivery = 'resume' | 'poll';
5145
+ /**
5146
+ * One structured question on a queue item and, once answered, its answer.
5147
+ */
5148
+ type OpsQuestion = {
5149
+ /**
5150
+ * Question id.
5151
+ */
5152
+ id: string;
5153
+ /**
5154
+ * The queue item the question hangs off.
5155
+ */
5156
+ feedbackId: string;
5157
+ /**
5158
+ * Short chip label for the question.
5159
+ */
5160
+ header: string;
5161
+ /**
5162
+ * The full question (markdown).
5163
+ */
5164
+ question: string;
5165
+ /**
5166
+ * The offered choices, in order.
5167
+ */
5168
+ options: Array<{
5169
+ /**
5170
+ * The option's display text.
5171
+ */
5172
+ label: string;
5173
+ /**
5174
+ * What picking the option means, or `null`.
5175
+ */
5176
+ description: string | null;
5177
+ }>;
5178
+ /**
5179
+ * Whether several options may be picked.
5180
+ */
5181
+ multiSelect: boolean;
5182
+ status: OpsQuestionStatus;
5183
+ /**
5184
+ * The person's answer, or `null` while the question is open (or was withdrawn).
5185
+ */
5186
+ answer: OpsQuestionAnswer | null;
5187
+ /**
5188
+ * Email of the person who answered, or `null`.
5189
+ */
5190
+ answeredBy: string | null;
5191
+ /**
5192
+ * ISO-8601 timestamp of the answer, or `null`.
5193
+ */
5194
+ answeredAt: string | null;
5195
+ /**
5196
+ * The agent that asked, or `null` (asked by a person or an unattributed key).
5197
+ */
5198
+ agent: 'jarvis' | 'claude' | 'cursor' | 'copilot' | 'jules' | null;
5199
+ /**
5200
+ * Email of the person who asked, when a human asked, or `null`.
5201
+ */
5202
+ askedBy: string | null;
5203
+ /**
5204
+ * The run (investigation record id) the question was asked under, or `null`.
5205
+ */
5206
+ runId: string | null;
5207
+ delivery: OpsQuestionDelivery;
5208
+ /**
5209
+ * ISO-8601 timestamp the answer was re-delivered to the asking run (`resume` only), or `null`.
5210
+ */
5211
+ deliveredAt: string | null;
5212
+ /**
5213
+ * Why a `resume` re-delivery failed, or `null`.
5214
+ */
5215
+ deliveryError: string | null;
5216
+ /**
5217
+ * ISO-8601 creation timestamp.
5218
+ */
5219
+ createdAt: string;
5220
+ /**
5221
+ * ISO-8601 last-update timestamp.
5222
+ */
5223
+ updatedAt: string;
5224
+ };
5225
+ /**
5226
+ * Response for `GET /api/admin/ops/{handle}/questions` — the item's questions, newest first (max 100).
5227
+ */
5228
+ type ListOpsQuestionsResponse = Array<OpsQuestion>;
5229
+ /**
5230
+ * One choice offered by a question — rendered as a radio, or a checkbox when the question is `multiSelect`.
5231
+ */
5232
+ type OpsQuestionOption = {
5233
+ /**
5234
+ * The option's display text — short (1–5 words). Answers name options by this label.
5235
+ */
5236
+ label: string;
5237
+ /**
5238
+ * What picking this option means — its trade-off or consequence.
5239
+ */
5240
+ description?: string;
5241
+ };
5242
+ /**
5243
+ * One question to ask — the `AskUserQuestion` shape.
5244
+ */
5245
+ type AskOpsQuestionInput = {
5246
+ /**
5247
+ * Very short chip label for the question (max 24 chars), e.g. `Auth method`.
5248
+ */
5249
+ header: string;
5250
+ /**
5251
+ * The complete question, ending with a question mark (markdown).
5252
+ */
5253
+ question: string;
5254
+ /**
5255
+ * 2–4 distinct choices. Do not add an "Other" option — a free-text answer is always offered.
5256
+ */
5257
+ options: Array<OpsQuestionOption>;
5258
+ /**
5259
+ * `true` lets the person pick several options (checkboxes); `false` (the default) exactly one (radios).
5260
+ */
5261
+ multiSelect?: boolean;
5262
+ };
5263
+ /**
5264
+ * Body for `POST /api/admin/ops/{handle}/questions`.
5265
+ */
5266
+ type AskOpsQuestionsRequest = {
5267
+ /**
5268
+ * 1–4 questions to ask at once.
5269
+ */
5270
+ questions: Array<AskOpsQuestionInput>;
5271
+ /**
5272
+ * The run (investigation record id) you are working the item under — the `runId` an ack or a launch handed you. Ties the questions to that run so a `resume` delivery continues it.
5273
+ */
5274
+ runId?: string;
5275
+ /**
5276
+ * The agent type asking — pass your own type when you are a coding agent. Defaults to the run's agent.
5277
+ */
5278
+ agent?: 'jarvis' | 'claude' | 'cursor' | 'copilot' | 'jules';
5279
+ delivery?: OpsQuestionDelivery;
5280
+ };
5281
+ /**
5282
+ * Response for `POST /api/admin/ops/{handle}/questions` — the created questions, in the order asked.
5283
+ */
5284
+ type AskOpsQuestionsResponse = Array<OpsQuestion>;
5285
+ /**
5286
+ * Body for `POST /api/admin/ops/{handle}/questions/{questionId}/answer` — pick option labels, write a free-text answer, or both (multi-select only).
5287
+ */
5288
+ type AnswerOpsQuestionRequest = {
5289
+ /**
5290
+ * The option labels picked — exactly one for a single-select question (unless answering only with `other`), one or more for `multiSelect`.
5291
+ */
5292
+ selected?: Array<string>;
5293
+ /**
5294
+ * A free-text "Other" answer.
5295
+ */
5296
+ other?: string;
5297
+ };
4874
5298
  /**
4875
5299
  * One connected, assignable AI agent (an authenticated trigger connector).
4876
5300
  */
@@ -5026,7 +5450,20 @@ type ListSlackChannelsResponse = {
5026
5450
  isPrivate?: boolean;
5027
5451
  }>;
5028
5452
  };
5029
- type ListAlertRulesResponse = Array<{
5453
+ /**
5454
+ * What a `composite` rule is a boolean over. `rules` are sibling alert-rule ids in the same project and `op` is how their states combine. A child's state is what the current pass concluded about it, falling back to whether it has an open instance — so a composite still means something on a tick where a child could not be evaluated, which is exactly the tick a "two of these are broken at once" rule is for. One level deep: a child may not itself be composite.
5455
+ */
5456
+ type AlertCompositeSpec = {
5457
+ /**
5458
+ * How the children's states combine.
5459
+ */
5460
+ op: 'and' | 'or';
5461
+ /**
5462
+ * Ids of the alert rules to combine. Stored sorted and de-duplicated.
5463
+ */
5464
+ rules: Array<string>;
5465
+ };
5466
+ type ListAlertRulesResponse = Array<{
5030
5467
  /**
5031
5468
  * Stable opaque alert-rule id.
5032
5469
  */
@@ -5044,17 +5481,81 @@ type ListAlertRulesResponse = Array<{
5044
5481
  */
5045
5482
  metricName: string | null;
5046
5483
  /**
5047
- * How the metric value is compared to the threshold (gt/gte/lt/lte).
5484
+ * What the rule watches for. `normal` compares the metric's own value — against `threshold` via `comparator`, or against the [`rangeMin`, `rangeMax`] corridor it must stay inside. `anomaly` compares it against ITS OWN seasonal baseline in sigmas, which is the same fit a chart draws as the band. `outliers` compares each `by()` group against its peers in the same bucket, so it needs a grouped metric. `no_data` fires when the metric records nothing at all for `noDataMinutes` — a count of zero is not silence, and the two are distinguished by the reader's presence columns. `composite` is a boolean over OTHER rules' current state and watches no metric of its own.
5485
+ */
5486
+ kind: 'normal' | 'anomaly' | 'outliers' | 'no_data' | 'composite';
5487
+ /**
5488
+ * How the metric value is compared to the threshold (gt/gte/lt/lte). Read only by a `normal` rule with no range set.
5048
5489
  */
5049
5490
  comparator: 'gt' | 'gte' | 'lt' | 'lte';
5050
5491
  /**
5051
- * Threshold the metric value is compared against.
5492
+ * Threshold the metric value is compared against. Read only by a `normal` rule with no range set.
5052
5493
  */
5053
5494
  threshold: number;
5495
+ /**
5496
+ * Lower edge of the corridor a `normal` rule must stay inside; `null` if the rule is judged by comparator and threshold.
5497
+ */
5498
+ rangeMin: number | null;
5499
+ /**
5500
+ * Upper edge of the corridor a `normal` rule must stay inside; `null` if the rule is judged by comparator and threshold.
5501
+ */
5502
+ rangeMax: number | null;
5503
+ /**
5504
+ * How far from normal is too far, for `anomaly` and `outliers`, in sigma-equivalents. `null` takes the default of 3, which is also the width of the band a chart draws.
5505
+ */
5506
+ sigma: number | null;
5507
+ /**
5508
+ * Which side of the baseline an `anomaly` or `outliers` rule watches. `null` means either.
5509
+ */
5510
+ direction: 'above' | 'below' | 'either' | null;
5511
+ /**
5512
+ * Whether the rule is judged by ACCUMULATED departure rather than bucket by bucket. `anomaly` and `outliers` only.
5513
+ */
5514
+ sustained: boolean;
5515
+ /**
5516
+ * The milder bound, in the same unit the kind judges in. `null` means the rule has one level.
5517
+ */
5518
+ warnThreshold: number | null;
5519
+ /**
5520
+ * What the metric must get back to before a live alert closes. `null` means no hysteresis — the firing bound clears it.
5521
+ */
5522
+ recoveryThreshold: number | null;
5523
+ /**
5524
+ * Whether the rule fires one alert per `by()` group rather than one for the whole metric.
5525
+ */
5526
+ groupAlerts: boolean;
5527
+ /**
5528
+ * How many groups this rule may alert on at once. `null` takes the shipped cap of 10.
5529
+ */
5530
+ maxGroups: number | null;
5531
+ /**
5532
+ * How long the silence must last for a `no_data` rule. `null` on every other kind.
5533
+ */
5534
+ noDataMinutes: number | null;
5535
+ /**
5536
+ * How far behind live the evaluated window is held, on top of the reader's settle grace. `null` means no extra delay.
5537
+ */
5538
+ delayMinutes: number | null;
5539
+ /**
5540
+ * Close a live instance that has gone this long without a fresh verdict. `null` never auto-resolves.
5541
+ */
5542
+ autoResolveMinutes: number | null;
5543
+ /**
5544
+ * For a `composite` rule, the child rules and how their states combine. `null` on every other kind.
5545
+ */
5546
+ composite: AlertCompositeSpec | null;
5054
5547
  /**
5055
5548
  * Lookback window (hours) the metric is aggregated over.
5056
5549
  */
5057
5550
  windowHours: number;
5551
+ /**
5552
+ * Width of the buckets the window is split into, in minutes. `null` divides the window into 12 equal buckets.
5553
+ */
5554
+ bucketMinutes: number | null;
5555
+ /**
5556
+ * How many buckets must breach before the rule fires. `null` means every bucket that had data.
5557
+ */
5558
+ requiredBuckets: number | null;
5058
5559
  /**
5059
5560
  * Severity of the raised alert.
5060
5561
  */
@@ -5083,19 +5584,80 @@ type CreateAlertRuleRequest = {
5083
5584
  */
5084
5585
  metricId: string;
5085
5586
  /**
5086
- * How the metric value is compared to the threshold (gt/gte/lt/lte).
5587
+ * What the rule watches for. `normal` compares the metric's own value — against `threshold` via `comparator`, or against the [`rangeMin`, `rangeMax`] corridor it must stay inside. `anomaly` compares it against its own seasonal baseline in sigmas: the same fit a chart draws as the band, so a point outside the drawn band is exactly a breaching bucket, and one metric can back rules at several sigmas. `outliers` compares each `by()` group against its peers in the same bucket and is refused on a metric with no grouping.
5087
5588
  */
5088
- comparator: 'gt' | 'gte' | 'lt' | 'lte';
5589
+ kind?: 'normal' | 'anomaly' | 'outliers' | 'no_data' | 'composite';
5089
5590
  /**
5090
- * Threshold the metric value is compared against.
5591
+ * How the metric value is compared to the threshold. Read only by a `normal` rule with no range set.
5091
5592
  */
5092
- threshold: number;
5593
+ comparator?: 'gt' | 'gte' | 'lt' | 'lte';
5594
+ /**
5595
+ * Threshold the metric value is compared against. Required for a `normal` rule unless a range is given; ignored by every other kind.
5596
+ */
5597
+ threshold?: number;
5598
+ /**
5599
+ * Lower edge of the corridor the metric must stay inside. Setting either bound switches a `normal` rule off `comparator`/`threshold` and onto the range, which breaches on LEAVING it in either direction. One bound alone is a one-sided range.
5600
+ */
5601
+ rangeMin?: number | null;
5602
+ /**
5603
+ * Upper edge of the corridor the metric must stay inside.
5604
+ */
5605
+ rangeMax?: number | null;
5606
+ /**
5607
+ * How far from normal is too far, for `anomaly` and `outliers`, in sigma-equivalents. Omit (or `null`) for 3, which is also the half-width of the band a chart draws — so an unconfigured rule fires exactly where the picture says it would.
5608
+ */
5609
+ sigma?: number | null;
5610
+ /**
5611
+ * Which side of the baseline an `anomaly` or `outliers` rule watches. Omit (or `null`) for either, which is what "is this unusual" means; name a side for a metric that is only bad in one direction.
5612
+ */
5613
+ direction?: 'above' | 'below' | 'either' | null;
5614
+ /**
5615
+ * Judge the window by ACCUMULATED departure instead of bucket by bucket. The ordinary check asks every bucket to be past `sigma`, which a slow regression never manages: a metric running 1.5σ worse than normal since Tuesday puts no single bucket past 3σ and pages nobody. A sustained rule adds up each bucket's excess over half a sigma and fires once the total passes twice `sigma` — four buckets at 2σ do it, a lone 3σ spike does not. `anomaly` and `outliers` only, and refused alongside `requiredBuckets`: the accumulated bar IS the evidence bar, and a second one counted in buckets would silently override it.
5616
+ */
5617
+ sustained?: boolean;
5093
5618
  /**
5094
5619
  * Lookback window (hours) the metric is aggregated over. 1–720.
5095
5620
  */
5096
5621
  windowHours?: number;
5097
5622
  /**
5098
- * Severity of the raised alert.
5623
+ * Width of the buckets the window is split into, in minutes. Omit (or `null`) to divide the window into 12 equal buckets. The rule is judged per bucket, so this is the resolution at which "sustained" is measured — a short bucket asks the condition to hold through finer detail.
5624
+ */
5625
+ bucketMinutes?: number | null;
5626
+ /**
5627
+ * How many buckets must breach before the rule fires. Omit (or `null`) to require every bucket that had data. Buckets with nothing in them are excluded before this is counted, so on a sparse metric `null` can mean a single bucket — set this to 2 or more where one lone sample must never page.
5628
+ */
5629
+ requiredBuckets?: number | null;
5630
+ /**
5631
+ * The milder bound — a second level, in the same unit the kind judges in, that raises a quieter alert before the firing level is reached. Must be strictly milder than the level the rule fires at, or it could never fire on its own. Refused on a range rule and on a `sustained` one: neither condition is a single number, so there is nothing to substitute.
5632
+ */
5633
+ warnThreshold?: number | null;
5634
+ /**
5635
+ * What the metric must get back to before a live alert closes. Without it a metric sitting on its threshold pages and clears once per tick. Must be on the safe side of the firing level, or equal to it. Omit (or `null`) for no hysteresis.
5636
+ */
5637
+ recoveryThreshold?: number | null;
5638
+ /**
5639
+ * Fire one alert per `by()` group instead of one for the whole metric. The firing key becomes (rule, group), so each group raises, dedupes and recovers on its own. Refused on a metric with no `by()`, and on `no_data` — a group that went silent has no rows left to be missing from.
5640
+ */
5641
+ groupAlerts?: boolean;
5642
+ /**
5643
+ * How many groups this rule may alert on at once. Omit (or `null`) for 10. Past the cap the worst groups fire and the count of the rest is stated on each ticket — a group set is customer data, and an uncapped rule on `by(user_id)` would file a ticket per user.
5644
+ */
5645
+ maxGroups?: number | null;
5646
+ /**
5647
+ * For a `no_data` rule: how long the silence must last. Omit (or `null`) for 15 minutes. Five is the floor — below it, ordinary ingest lag empties the trailing bucket and reads as an outage.
5648
+ */
5649
+ noDataMinutes?: number | null;
5650
+ /**
5651
+ * Hold the evaluated window back this far behind live, on top of the reader's own settle grace. For a metric assembled from a source that lands in batches, whose trailing buckets are legitimately incomplete for longer than the grace covers.
5652
+ */
5653
+ delayMinutes?: number | null;
5654
+ /**
5655
+ * Close a live instance that has gone this long without a fresh verdict. A rule that cannot reach a verdict deliberately leaves its alert alone, which is right for a tick and wrong for a week. Never closes an instance that is currently breaching. Omit (or `null`) to never auto-resolve.
5656
+ */
5657
+ autoResolveMinutes?: number | null;
5658
+ composite?: AlertCompositeSpec;
5659
+ /**
5660
+ * Severity of the raised alert. A `warnThreshold` breach opens one step quieter than this.
5099
5661
  */
5100
5662
  severity?: 'danger' | 'warn' | 'info';
5101
5663
  /**
@@ -5115,9 +5677,67 @@ type DeleteAlertRuleResponse = {
5115
5677
  };
5116
5678
  type UpdateAlertRuleRequest = {
5117
5679
  name?: string;
5680
+ kind?: 'normal' | 'anomaly' | 'outliers' | 'no_data' | 'composite';
5118
5681
  comparator?: 'gt' | 'gte' | 'lt' | 'lte';
5119
5682
  threshold?: number;
5683
+ /**
5684
+ * Lower edge of the corridor; `null` drops it, returning the rule to comparator and threshold when both bounds are gone.
5685
+ */
5686
+ rangeMin?: number | null;
5687
+ /**
5688
+ * Upper edge of the corridor; `null` drops it.
5689
+ */
5690
+ rangeMax?: number | null;
5691
+ /**
5692
+ * Sigmas an `anomaly` or `outliers` rule fires at; `null` restores the default of 3.
5693
+ */
5694
+ sigma?: number | null;
5695
+ /**
5696
+ * Which side an `anomaly` or `outliers` rule watches; `null` restores either.
5697
+ */
5698
+ direction?: 'above' | 'below' | 'either' | null;
5699
+ /**
5700
+ * Judge the window by accumulated departure rather than bucket by bucket. `anomaly` and `outliers` only; refused alongside `requiredBuckets`.
5701
+ */
5702
+ sustained?: boolean;
5703
+ /**
5704
+ * The milder bound; `null` drops the warning level, leaving the rule with one.
5705
+ */
5706
+ warnThreshold?: number | null;
5707
+ /**
5708
+ * What the metric must get back to before a live alert closes; `null` drops the hysteresis.
5709
+ */
5710
+ recoveryThreshold?: number | null;
5711
+ /**
5712
+ * Fire one alert per `by()` group. Refused on a metric with no grouping.
5713
+ */
5714
+ groupAlerts?: boolean;
5715
+ /**
5716
+ * How many groups may alert at once; `null` restores the default of 10.
5717
+ */
5718
+ maxGroups?: number | null;
5719
+ /**
5720
+ * How long a `no_data` rule's silence must last; `null` restores 15 minutes.
5721
+ */
5722
+ noDataMinutes?: number | null;
5723
+ /**
5724
+ * How far behind live the window is held; `null` drops the delay.
5725
+ */
5726
+ delayMinutes?: number | null;
5727
+ /**
5728
+ * Close a stale live instance after this long; `null` never auto-resolves.
5729
+ */
5730
+ autoResolveMinutes?: number | null;
5731
+ composite?: AlertCompositeSpec;
5120
5732
  windowHours?: number;
5733
+ /**
5734
+ * Bucket width in minutes; `null` restores the default 12 buckets per window.
5735
+ */
5736
+ bucketMinutes?: number | null;
5737
+ /**
5738
+ * Buckets that must breach to fire; `null` restores "every bucket that had data".
5739
+ */
5740
+ requiredBuckets?: number | null;
5121
5741
  severity?: 'danger' | 'warn' | 'info';
5122
5742
  enabled?: boolean;
5123
5743
  notify?: NotificationTarget;
@@ -5129,13 +5749,15 @@ type UpdateAlertRuleResponse = {
5129
5749
  id: string;
5130
5750
  };
5131
5751
  /**
5132
- * One FIRED alert — a condition the platform observed and raised, not the rule that defines it (alert *rules* are the `/api/admin/alert-rules` resource). Alerts are never filed by hand: the UI (killswitch flips) and the worker (analysis consumer + alerts cron) raise them, keyed by `(source, dedupeKey)` so re-raising refreshes the active row and a clearing condition auto-resolves it.
5752
+ * One FIRED alert — an INSTANCE of a condition the platform observed, not the rule that defines it (alert *rules* are the `/api/admin/alert-rules` resource). Instances are never filed by hand: the UI (killswitch flips) and the worker (analysis consumer + alerts cron) open them, keyed by `(source, dedupeKey)`, and at most one instance per condition is open at a time — re-raising refreshes the open one, and the condition clearing closes it.
5753
+ *
5754
+ * An instance IS an ops queue item (`/api/admin/ops` with `type: "alert"`) seen through the alert lens: same `id`, `severity` is that item's `priority`, and `status` is its work status projected onto three states. Resolving the queue item and clearing the alert are therefore the same act.
5133
5755
  *
5134
5756
  * Every field is always present on the wire; nullable fields are `null`, never absent.
5135
5757
  */
5136
5758
  type AlertApiRow = {
5137
5759
  /**
5138
- * Stable opaque alert id.
5760
+ * Stable opaque instance id — also the id of the ops queue item this instance is.
5139
5761
  */
5140
5762
  id: string;
5141
5763
  /**
@@ -5147,11 +5769,11 @@ type AlertApiRow = {
5147
5769
  */
5148
5770
  ruleId: string | null;
5149
5771
  /**
5150
- * How loud the alert is — `danger` pages, `warn` is the default, `info` is FYI-only.
5772
+ * How loud the alert is — `danger` pages, `warn` is the default, `info` is FYI-only. Severity belongs to the RULE and seeds the instance's queue `priority` (`danger`→`critical`, `warn`→`high`, `info`→`medium`); it is read back from there, so re-prioritising the queue item changes what this reports.
5151
5773
  */
5152
5774
  severity: 'danger' | 'warn' | 'info';
5153
5775
  /**
5154
- * Idempotency + reconcile key within `(project, source)` — re-raising the same condition refreshes the existing active row instead of stacking duplicates, and the condition clearing flips that row to `resolved`.
5776
+ * Idempotency + reconcile key within `(project, source)` — re-raising the same condition refreshes the open instance instead of stacking duplicates, and the condition clearing closes it. A later firing of the same condition opens a NEW instance with its own `id`.
5155
5777
  */
5156
5778
  dedupeKey: string;
5157
5779
  /**
@@ -5171,11 +5793,11 @@ type AlertApiRow = {
5171
5793
  */
5172
5794
  observedValue: number | null;
5173
5795
  /**
5174
- * Lifecycle state. `active` means the condition currently holds (shown as "Firing" in the UI); `resolved` means it cleared (auto, when the raiser reconciles, or by hand); `dismissed` means a human waved it off.
5796
+ * Lifecycle state, projected from the queue item's work status. `active` means the item is still open, i.e. the condition holds (shown as "Firing" in the UI); `resolved` means it cleared (auto, when the raiser reconciles, or by hand); `dismissed` means a human waved it off (the item is closed `wont_fix`).
5175
5797
  */
5176
5798
  status: 'active' | 'resolved' | 'dismissed';
5177
5799
  /**
5178
- * ISO-8601 timestamp the alert was first raised.
5800
+ * ISO-8601 timestamp this instance opened — when the condition started firing.
5179
5801
  */
5180
5802
  createdAt: string;
5181
5803
  /**
@@ -5210,7 +5832,7 @@ type ListAlertsResponse = Array<AlertApiRow>;
5210
5832
  */
5211
5833
  type UpdateAlertRequest = {
5212
5834
  /**
5213
- * New lifecycle state. `resolved` / `dismissed` stamp their timestamp; `active` re-opens and clears both.
5835
+ * New lifecycle state, written through to the queue item (`resolved` / `wont_fix` / `open`). `resolved` / `dismissed` stamp their timestamp; `active` re-opens and clears both.
5214
5836
  */
5215
5837
  status?: 'active' | 'resolved' | 'dismissed';
5216
5838
  /**
@@ -5390,6 +6012,14 @@ type GetCurrentProjectResponse = {
5390
6012
  * Whether key-authenticated public ticket creation (`POST /cli/report`) is allowed into this project. Off by default.
5391
6013
  */
5392
6014
  allowPublicTickets: boolean | number;
6015
+ /**
6016
+ * Days an `open` tracked error may go unseen before the nightly sweep auto-resolves it. `0` disables auto-close for this project. Ingest reopens a resolved error the moment it recurs, so this never hides a live issue.
6017
+ */
6018
+ errorAutocloseDays: number;
6019
+ /**
6020
+ * Occurrence count a tracked error must cross before an `error` ticket is auto-filed into the ops queue. Customising it requires a paid plan; unentitled projects always run at the platform default of 10.
6021
+ */
6022
+ errorTicketMinOccurrences: number;
5393
6023
  /**
5394
6024
  * Stripe subscription id backing the project's billing, or `null` when unsubscribed.
5395
6025
  */
@@ -5603,6 +6233,14 @@ type UpdateProjectRequest = {
5603
6233
  * SRM chi-square p-value below which the run is called invalid.
5604
6234
  */
5605
6235
  srmThreshold?: number;
6236
+ /**
6237
+ * Days an `open` tracked error may go unseen before the nightly sweep auto-resolves it. `0` disables auto-close for this project.
6238
+ */
6239
+ errorAutocloseDays?: number;
6240
+ /**
6241
+ * Occurrence count a tracked error must cross before an `error` ticket is auto-filed into the ops queue. Requires a paid plan — the request is rejected with 403 on a plan without the `ops_auto_error_issues` entitlement.
6242
+ */
6243
+ errorTicketMinOccurrences?: number;
5606
6244
  };
5607
6245
  type ListI18nProfilesResponse = Array<{
5608
6246
  /**
@@ -6440,22 +7078,47 @@ type CreateClaudeTriggerRequest = {
6440
7078
  */
6441
7079
  enabled?: boolean;
6442
7080
  };
7081
+ /**
7082
+ * One repo a trigger runs against, with the branch its runs start from.
7083
+ */
7084
+ type CursorTriggerRepo = {
7085
+ /**
7086
+ * Repo the cloud agent runs against, e.g. `https://github.com/owner/repo`.
7087
+ */
7088
+ url: string;
7089
+ /**
7090
+ * Optional branch this repo's runs start from. Omit for the repo's default branch.
7091
+ */
7092
+ startingRef?: string;
7093
+ };
6443
7094
  /**
6444
7095
  * Non-secret config for a Cursor trigger.
6445
7096
  */
6446
7097
  type CursorTriggerConfig = {
6447
7098
  /**
6448
- * Repo the cloud agent runs against, e.g. `https://github.com/owner/repo`. Idempotency key for the connector.
7099
+ * **First** repo the cloud agent runs against, e.g. `https://github.com/owner/repo`. Idempotency key for the connector, and always a mirror of `repos[0].url` when `repos` is supplied.
6449
7100
  */
6450
7101
  repoUrl: string;
6451
7102
  /**
6452
- * Optional git ref the run starts from.
7103
+ * Optional git ref the run starts from. Mirrors `repos[0].startingRef`. Pinned onto the Cursor agent at creation, so changing it provisions a replacement agent.
6453
7104
  */
6454
7105
  startingRef?: string;
7106
+ /**
7107
+ * Every repo this trigger runs against, each with its own starting branch — Cursor launches ONE agent across the whole set. Omit for a single-repo trigger, which is then described by `repoUrl`/`startingRef` alone; when supplied, the first entry must match them. Changing the set re-provisions the agent (its repos are pinned at creation).
7108
+ */
7109
+ repos?: Array<CursorTriggerRepo>;
6455
7110
  /**
6456
7111
  * Shipeasy project id the run targets.
6457
7112
  */
6458
7113
  projectId: string;
7114
+ /**
7115
+ * Server-managed. The reusable Cursor cloud agent (`bc-…`) Shipeasy provisions once at connect and then starts every run on. A supplied value is ignored on create; if Cursor stops recognising the id (404), the next fire provisions a replacement and stores it here.
7116
+ */
7117
+ agentId?: string;
7118
+ /**
7119
+ * Optional standing instruction prepended to every run's prompt — the trigger's base prompt. Lets two triggers on different repos steer their runs differently without changing the `/shipeasy-ops-work` task block.
7120
+ */
7121
+ fireText?: string;
6459
7122
  };
6460
7123
  /**
6461
7124
  * Create a Cursor cloud-agent trigger. Both keys are required up front (never tokenless). Idempotent by `config.repoUrl`.
@@ -6479,7 +7142,7 @@ type CreateCursorTriggerRequest = {
6479
7142
  */
6480
7143
  apiKey: string;
6481
7144
  /**
6482
- * Restricted Shipeasy ops key, injected into the run as `SHIPEASY_CLI_TOKEN` via the launch envVars (secret). Encrypted; never returned.
7145
+ * Restricted Shipeasy ops key (secret). Sent as the Bearer for the Shipeasy MCP server handed to each run inline — never in the prompt text or the run env. Encrypted; never returned.
6483
7146
  */
6484
7147
  opsKey: string;
6485
7148
  /**
@@ -6487,12 +7150,29 @@ type CreateCursorTriggerRequest = {
6487
7150
  */
6488
7151
  enabled?: boolean;
6489
7152
  };
7153
+ /**
7154
+ * One repo a Copilot trigger runs against, with the base branch its tasks branch from.
7155
+ */
7156
+ type CopilotTriggerRepo = {
7157
+ /**
7158
+ * GitHub repo owner.
7159
+ */
7160
+ owner: string;
7161
+ /**
7162
+ * GitHub repo name.
7163
+ */
7164
+ repo: string;
7165
+ /**
7166
+ * Optional base ref this repo's agent task branches from. Omit for the repo's default branch.
7167
+ */
7168
+ baseRef?: string;
7169
+ };
6490
7170
  /**
6491
7171
  * Non-secret config for a Copilot trigger.
6492
7172
  */
6493
7173
  type CopilotTriggerConfig = {
6494
7174
  /**
6495
- * GitHub repo owner. Together with `repo` forms the connector's idempotency key (`owner/repo`).
7175
+ * **First** GitHub repo owner. Together with `repo` forms the connector's idempotency key (`owner/repo`), and both mirror `repos[0]` when `repos` is supplied.
6496
7176
  */
6497
7177
  owner: string;
6498
7178
  /**
@@ -6500,13 +7180,21 @@ type CopilotTriggerConfig = {
6500
7180
  */
6501
7181
  repo: string;
6502
7182
  /**
6503
- * Optional base ref the agent branches from.
7183
+ * Optional base ref the agent branches from. Mirrors `repos[0].baseRef`.
6504
7184
  */
6505
7185
  baseRef?: string;
7186
+ /**
7187
+ * Every repo this trigger runs against, each with its own base branch. GitHub's agent-tasks API is per-repo, so ONE fire starts one task per entry. Omit for a single-repo trigger, which is then described by `owner`/`repo`/`baseRef` alone; when supplied, the first entry must match them.
7188
+ */
7189
+ repos?: Array<CopilotTriggerRepo>;
6506
7190
  /**
6507
7191
  * Shipeasy project id the run targets.
6508
7192
  */
6509
7193
  projectId: string;
7194
+ /**
7195
+ * Optional standing instruction prepended to every run's prompt — the trigger's base prompt. Lets two triggers on different repos steer their runs differently without changing the `/shipeasy-ops-work` task block.
7196
+ */
7197
+ fireText?: string;
6510
7198
  };
6511
7199
  /**
6512
7200
  * Create a GitHub Copilot coding-agent trigger. Idempotent by `config.owner/config.repo`.
@@ -6550,6 +7238,10 @@ type JulesTriggerConfig = {
6550
7238
  * Shipeasy project id the run targets.
6551
7239
  */
6552
7240
  projectId: string;
7241
+ /**
7242
+ * Optional standing instruction prepended to every run's prompt — the trigger's base prompt. Lets two triggers on different repos steer their runs differently without changing the `/shipeasy-ops-work` task block.
7243
+ */
7244
+ fireText?: string;
6553
7245
  };
6554
7246
  /**
6555
7247
  * Create a Google Jules trigger. Both keys are required up front. Idempotent by `config.source`.
@@ -6686,7 +7378,7 @@ type UpdateClaudeTriggerRequest = {
6686
7378
  token?: string;
6687
7379
  };
6688
7380
  /**
6689
- * Per-provider PATCH body for editing an existing `cursor_trigger` connector. `config` replaces the stored config wholesale; `name` and either credential are optional (a supplied credential rotates just that key).
7381
+ * Per-provider PATCH body for editing an existing `cursor_trigger` connector. `config` replaces the stored config wholesale, except for the server-managed keys: the provisioned `agentId` is carried over (and dropped, so a replacement agent is provisioned, when `repoUrl`/`startingRef` change), as is the last-run pointer. `name` and either credential are optional (a supplied credential rotates just that key).
6690
7382
  */
6691
7383
  type UpdateCursorTriggerRequest = {
6692
7384
  /**
@@ -6807,6 +7499,10 @@ type KeyRecord = {
6807
7499
  * Human label for the key. `null` for unnamed dashboard mints; programmatic mints auto-name themselves.
6808
7500
  */
6809
7501
  name: string | null;
7502
+ /**
7503
+ * Free-text note recording what the key is for (the service that holds it, the rotation owner, the ticket it was minted under). Display only — `null` unless someone set it via `PATCH /api/admin/keys/{id}`.
7504
+ */
7505
+ description: string | null;
6810
7506
  /**
6811
7507
  * Permission strings recorded on the key for audit/display, or `null` when none were set.
6812
7508
  */
@@ -6837,7 +7533,7 @@ type CreateKeyRequest = {
6837
7533
  */
6838
7534
  type: 'server' | 'client' | 'admin' | 'ops';
6839
7535
  /**
6840
- * Optional human label. Programmatic (API) mints that omit it get an auto-generated descriptive name; dashboard mints may leave it blank.
7536
+ * Optional human label. Programmatic (API) mints that omit it get an auto-generated descriptive name; dashboard mints may leave it blank. The cap is generous because provenance labels are composed, not typed — `shipeasy setup` mints keys named with the stack, package, date, and operator that produced them, which does not fit in a one-line-input budget.
6841
7537
  */
6842
7538
  name?: string;
6843
7539
  /**
@@ -6878,6 +7574,23 @@ type CreateKeyResponse = {
6878
7574
  */
6879
7575
  expires_at: string | null;
6880
7576
  };
7577
+ /**
7578
+ * Body for `PATCH /api/admin/keys/{id}`. Only the key's **label** is editable — `name` and `description`.
7579
+ *
7580
+ * Everything that gives a key its authority (`type`, `env`, `scopes`, `expires_at`) is fixed at mint: those are the isolation boundary the worker derives the read env and permissions from, so changing them would silently re-point a credential that is already deployed. Rotate instead — mint a replacement and revoke the old key.
7581
+ *
7582
+ * Omitted fields are left untouched; send `null` to clear one.
7583
+ */
7584
+ type UpdateKeyRequest = {
7585
+ /**
7586
+ * New human label, or `null` to clear it. Same 160-char budget as create — provenance labels are composed, not typed.
7587
+ */
7588
+ name?: string | null;
7589
+ /**
7590
+ * New free-text note, or `null` to clear it.
7591
+ */
7592
+ description?: string | null;
7593
+ };
6881
7594
  /**
6882
7595
  * Confirms the key is revoked. Idempotent — revoking an already-revoked key returns the same shape.
6883
7596
  */
@@ -6919,6 +7632,54 @@ type SearchHit = {
6919
7632
  type SearchResponse = {
6920
7633
  hits: Array<SearchHit>;
6921
7634
  };
7635
+ type Tag = {
7636
+ /**
7637
+ * Stable opaque tag id.
7638
+ */
7639
+ id: string;
7640
+ /**
7641
+ * Display name — also the tag's identity, unique case-insensitively within the project.
7642
+ */
7643
+ name: string;
7644
+ };
7645
+ /**
7646
+ * The project's tags, sorted by name.
7647
+ */
7648
+ type ListTagsResponse = Array<Tag>;
7649
+ /**
7650
+ * The kind of item a tag set hangs off: `ops` (any queue item — bug, feature request, error/alert/measure-plan ticket), `flag` (feature gate), `config` (dynamic config), `killswitch`, `metric`, `error` (tracked error group), `alert_rule`, or `experiment`.
7651
+ */
7652
+ type TaggableEntityType = 'ops' | 'flag' | 'config' | 'killswitch' | 'metric' | 'error' | 'alert_rule' | 'experiment';
7653
+ type EntityTagsResponse = {
7654
+ entityType: TaggableEntityType;
7655
+ /**
7656
+ * The item's canonical id (the handle you passed, resolved).
7657
+ */
7658
+ entityId: string;
7659
+ /**
7660
+ * The tag names now attached to the item, sorted by name.
7661
+ */
7662
+ tags: Array<string>;
7663
+ };
7664
+ type SetEntityTagsRequest = {
7665
+ /**
7666
+ * The complete tag set the item should carry — tags not listed are detached. Names are get-or-created (a new name mints a project tag), deduped case-insensitively; `[]` clears every tag.
7667
+ */
7668
+ tags: Array<TagName>;
7669
+ };
7670
+ /**
7671
+ * Incremental tag edit — pass `add`, `remove`, or both. Every other tag on the item is left as is.
7672
+ */
7673
+ type UpdateEntityTagsRequest = {
7674
+ /**
7675
+ * Tag names to attach (get-or-created by name, case-insensitive). Already-attached names are a no-op.
7676
+ */
7677
+ add?: Array<TagName>;
7678
+ /**
7679
+ * Tag names to detach (case-insensitive). Names the item doesn't carry are a no-op. A name in both lists is removed.
7680
+ */
7681
+ remove?: Array<TagName>;
7682
+ };
6922
7683
  /**
6923
7684
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
6924
7685
  */
@@ -7351,36 +8112,24 @@ type ListGateActivityResponses = {
7351
8112
  200: ListGateActivityResponse;
7352
8113
  };
7353
8114
  type ListGateActivityResponse2 = ListGateActivityResponses[keyof ListGateActivityResponses];
7354
- type ListExperimentsData = {
7355
- body?: never;
8115
+ type RemoveFromGateWhitelistData = {
8116
+ body: RemoveFromGateWhitelistRequest;
7356
8117
  headers?: {
7357
8118
  /**
7358
8119
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
7359
8120
  */
7360
8121
  'X-Project-Id'?: string;
7361
8122
  };
7362
- path?: never;
7363
- query?: {
7364
- /**
7365
- * Page size (1–500). Defaults to 100.
7366
- */
7367
- limit?: number;
7368
- /**
7369
- * Opaque cursor returned in the previous page's `next_cursor`. Omit for the first page.
7370
- */
7371
- cursor?: string;
7372
- /**
7373
- * Filter by lifecycle status. Pass `archived` to return the archive tab; any other value (or omitting it) returns the non-archived experiments.
7374
- */
7375
- status?: string;
8123
+ path: {
7376
8124
  /**
7377
- * Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything.
8125
+ * Stable opaque gate id (`gate_…`) or the gate's `name`.
7378
8126
  */
7379
- q?: string;
8127
+ id: ResourceId;
7380
8128
  };
7381
- url: '/api/admin/experiments';
8129
+ query?: never;
8130
+ url: '/api/admin/gates/{id}/whitelist';
7382
8131
  };
7383
- type ListExperimentsErrors = {
8132
+ type RemoveFromGateWhitelistErrors = {
7384
8133
  /**
7385
8134
  * The request was malformed (bad JSON or missing project scope).
7386
8135
  */
@@ -7406,27 +8155,32 @@ type ListExperimentsErrors = {
7406
8155
  */
7407
8156
  422: Error;
7408
8157
  };
7409
- type ListExperimentsError = ListExperimentsErrors[keyof ListExperimentsErrors];
7410
- type ListExperimentsResponses = {
8158
+ type RemoveFromGateWhitelistError = RemoveFromGateWhitelistErrors[keyof RemoveFromGateWhitelistErrors];
8159
+ type RemoveFromGateWhitelistResponses = {
7411
8160
  /**
7412
- * List experiments
8161
+ * Remove entries from a gate's whitelist
7413
8162
  */
7414
- 200: ListExperimentsResponse;
8163
+ 200: GateWhitelist;
7415
8164
  };
7416
- type ListExperimentsResponse2 = ListExperimentsResponses[keyof ListExperimentsResponses];
7417
- type CreateExperimentData = {
7418
- body: CreateExperimentRequest;
8165
+ type RemoveFromGateWhitelistResponse = RemoveFromGateWhitelistResponses[keyof RemoveFromGateWhitelistResponses];
8166
+ type GetGateWhitelistData = {
8167
+ body?: never;
7419
8168
  headers?: {
7420
8169
  /**
7421
8170
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
7422
8171
  */
7423
8172
  'X-Project-Id'?: string;
7424
8173
  };
7425
- path?: never;
8174
+ path: {
8175
+ /**
8176
+ * Stable opaque gate id (`gate_…`) or the gate's `name`.
8177
+ */
8178
+ id: ResourceId;
8179
+ };
7426
8180
  query?: never;
7427
- url: '/api/admin/experiments';
8181
+ url: '/api/admin/gates/{id}/whitelist';
7428
8182
  };
7429
- type CreateExperimentErrors = {
8183
+ type GetGateWhitelistErrors = {
7430
8184
  /**
7431
8185
  * The request was malformed (bad JSON or missing project scope).
7432
8186
  */
@@ -7452,16 +8206,16 @@ type CreateExperimentErrors = {
7452
8206
  */
7453
8207
  422: Error;
7454
8208
  };
7455
- type CreateExperimentError = CreateExperimentErrors[keyof CreateExperimentErrors];
7456
- type CreateExperimentResponses = {
8209
+ type GetGateWhitelistError = GetGateWhitelistErrors[keyof GetGateWhitelistErrors];
8210
+ type GetGateWhitelistResponses = {
7457
8211
  /**
7458
- * Create an experiment
8212
+ * Read a gate's whitelist
7459
8213
  */
7460
- 201: CreateExperimentResponse;
8214
+ 200: GateWhitelist;
7461
8215
  };
7462
- type CreateExperimentResponse2 = CreateExperimentResponses[keyof CreateExperimentResponses];
7463
- type DeleteExperimentData = {
7464
- body?: never;
8216
+ type GetGateWhitelistResponse = GetGateWhitelistResponses[keyof GetGateWhitelistResponses];
8217
+ type AddToGateWhitelistData = {
8218
+ body: AddToGateWhitelistRequest;
7465
8219
  headers?: {
7466
8220
  /**
7467
8221
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
@@ -7470,14 +8224,14 @@ type DeleteExperimentData = {
7470
8224
  };
7471
8225
  path: {
7472
8226
  /**
7473
- * Stable opaque experiment id (`exp_…`) or the experiment's `name`.
8227
+ * Stable opaque gate id (`gate_…`) or the gate's `name`.
7474
8228
  */
7475
8229
  id: ResourceId;
7476
8230
  };
7477
8231
  query?: never;
7478
- url: '/api/admin/experiments/{id}';
8232
+ url: '/api/admin/gates/{id}/whitelist';
7479
8233
  };
7480
- type DeleteExperimentErrors = {
8234
+ type AddToGateWhitelistErrors = {
7481
8235
  /**
7482
8236
  * The request was malformed (bad JSON or missing project scope).
7483
8237
  */
@@ -7503,16 +8257,16 @@ type DeleteExperimentErrors = {
7503
8257
  */
7504
8258
  422: Error;
7505
8259
  };
7506
- type DeleteExperimentError = DeleteExperimentErrors[keyof DeleteExperimentErrors];
7507
- type DeleteExperimentResponses = {
8260
+ type AddToGateWhitelistError = AddToGateWhitelistErrors[keyof AddToGateWhitelistErrors];
8261
+ type AddToGateWhitelistResponses = {
7508
8262
  /**
7509
- * Delete an experiment
8263
+ * Add entries to a gate's whitelist
7510
8264
  */
7511
- 200: DeleteExperimentResponse;
8265
+ 200: GateWhitelist;
7512
8266
  };
7513
- type DeleteExperimentResponse2 = DeleteExperimentResponses[keyof DeleteExperimentResponses];
7514
- type GetExperimentData = {
7515
- body?: never;
8267
+ type AddToGateWhitelistResponse = AddToGateWhitelistResponses[keyof AddToGateWhitelistResponses];
8268
+ type SetGateWhitelistData = {
8269
+ body: SetGateWhitelistRequest;
7516
8270
  headers?: {
7517
8271
  /**
7518
8272
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
@@ -7521,14 +8275,14 @@ type GetExperimentData = {
7521
8275
  };
7522
8276
  path: {
7523
8277
  /**
7524
- * Stable opaque experiment id (`exp_…`) or the experiment's `name`.
8278
+ * Stable opaque gate id (`gate_…`) or the gate's `name`.
7525
8279
  */
7526
8280
  id: ResourceId;
7527
8281
  };
7528
8282
  query?: never;
7529
- url: '/api/admin/experiments/{id}';
8283
+ url: '/api/admin/gates/{id}/whitelist';
7530
8284
  };
7531
- type GetExperimentErrors = {
8285
+ type SetGateWhitelistErrors = {
7532
8286
  /**
7533
8287
  * The request was malformed (bad JSON or missing project scope).
7534
8288
  */
@@ -7554,16 +8308,227 @@ type GetExperimentErrors = {
7554
8308
  */
7555
8309
  422: Error;
7556
8310
  };
7557
- type GetExperimentError = GetExperimentErrors[keyof GetExperimentErrors];
7558
- type GetExperimentResponses = {
8311
+ type SetGateWhitelistError = SetGateWhitelistErrors[keyof SetGateWhitelistErrors];
8312
+ type SetGateWhitelistResponses = {
7559
8313
  /**
7560
- * Get one experiment
8314
+ * Replace a gate's whitelist
7561
8315
  */
7562
- 200: ExperimentApiRow;
8316
+ 200: GateWhitelist;
7563
8317
  };
7564
- type GetExperimentResponse = GetExperimentResponses[keyof GetExperimentResponses];
7565
- type UpdateExperimentData = {
7566
- body: UpdateExperimentRequest;
8318
+ type SetGateWhitelistResponse = SetGateWhitelistResponses[keyof SetGateWhitelistResponses];
8319
+ type ListExperimentsData = {
8320
+ body?: never;
8321
+ headers?: {
8322
+ /**
8323
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
8324
+ */
8325
+ 'X-Project-Id'?: string;
8326
+ };
8327
+ path?: never;
8328
+ query?: {
8329
+ /**
8330
+ * Page size (1–500). Defaults to 100.
8331
+ */
8332
+ limit?: number;
8333
+ /**
8334
+ * Opaque cursor returned in the previous page's `next_cursor`. Omit for the first page.
8335
+ */
8336
+ cursor?: string;
8337
+ /**
8338
+ * Filter by lifecycle status. Pass `archived` to return the archive tab; any other value (or omitting it) returns the non-archived experiments.
8339
+ */
8340
+ status?: string;
8341
+ /**
8342
+ * Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything.
8343
+ */
8344
+ q?: string;
8345
+ };
8346
+ url: '/api/admin/experiments';
8347
+ };
8348
+ type ListExperimentsErrors = {
8349
+ /**
8350
+ * The request was malformed (bad JSON or missing project scope).
8351
+ */
8352
+ 400: Error;
8353
+ /**
8354
+ * Missing or invalid admin SDK key.
8355
+ */
8356
+ 401: Error;
8357
+ /**
8358
+ * The key is valid but not allowed to perform this action.
8359
+ */
8360
+ 403: Error;
8361
+ /**
8362
+ * The resource does not exist or is not visible to the caller.
8363
+ */
8364
+ 404: Error;
8365
+ /**
8366
+ * The mutation conflicts with current state.
8367
+ */
8368
+ 409: Error;
8369
+ /**
8370
+ * The request body failed validation.
8371
+ */
8372
+ 422: Error;
8373
+ };
8374
+ type ListExperimentsError = ListExperimentsErrors[keyof ListExperimentsErrors];
8375
+ type ListExperimentsResponses = {
8376
+ /**
8377
+ * List experiments
8378
+ */
8379
+ 200: ListExperimentsResponse;
8380
+ };
8381
+ type ListExperimentsResponse2 = ListExperimentsResponses[keyof ListExperimentsResponses];
8382
+ type CreateExperimentData = {
8383
+ body: CreateExperimentRequest;
8384
+ headers?: {
8385
+ /**
8386
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
8387
+ */
8388
+ 'X-Project-Id'?: string;
8389
+ };
8390
+ path?: never;
8391
+ query?: never;
8392
+ url: '/api/admin/experiments';
8393
+ };
8394
+ type CreateExperimentErrors = {
8395
+ /**
8396
+ * The request was malformed (bad JSON or missing project scope).
8397
+ */
8398
+ 400: Error;
8399
+ /**
8400
+ * Missing or invalid admin SDK key.
8401
+ */
8402
+ 401: Error;
8403
+ /**
8404
+ * The key is valid but not allowed to perform this action.
8405
+ */
8406
+ 403: Error;
8407
+ /**
8408
+ * The resource does not exist or is not visible to the caller.
8409
+ */
8410
+ 404: Error;
8411
+ /**
8412
+ * The mutation conflicts with current state.
8413
+ */
8414
+ 409: Error;
8415
+ /**
8416
+ * The request body failed validation.
8417
+ */
8418
+ 422: Error;
8419
+ };
8420
+ type CreateExperimentError = CreateExperimentErrors[keyof CreateExperimentErrors];
8421
+ type CreateExperimentResponses = {
8422
+ /**
8423
+ * Create an experiment
8424
+ */
8425
+ 201: CreateExperimentResponse;
8426
+ };
8427
+ type CreateExperimentResponse2 = CreateExperimentResponses[keyof CreateExperimentResponses];
8428
+ type DeleteExperimentData = {
8429
+ body?: never;
8430
+ headers?: {
8431
+ /**
8432
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
8433
+ */
8434
+ 'X-Project-Id'?: string;
8435
+ };
8436
+ path: {
8437
+ /**
8438
+ * Stable opaque experiment id (`exp_…`) or the experiment's `name`.
8439
+ */
8440
+ id: ResourceId;
8441
+ };
8442
+ query?: never;
8443
+ url: '/api/admin/experiments/{id}';
8444
+ };
8445
+ type DeleteExperimentErrors = {
8446
+ /**
8447
+ * The request was malformed (bad JSON or missing project scope).
8448
+ */
8449
+ 400: Error;
8450
+ /**
8451
+ * Missing or invalid admin SDK key.
8452
+ */
8453
+ 401: Error;
8454
+ /**
8455
+ * The key is valid but not allowed to perform this action.
8456
+ */
8457
+ 403: Error;
8458
+ /**
8459
+ * The resource does not exist or is not visible to the caller.
8460
+ */
8461
+ 404: Error;
8462
+ /**
8463
+ * The mutation conflicts with current state.
8464
+ */
8465
+ 409: Error;
8466
+ /**
8467
+ * The request body failed validation.
8468
+ */
8469
+ 422: Error;
8470
+ };
8471
+ type DeleteExperimentError = DeleteExperimentErrors[keyof DeleteExperimentErrors];
8472
+ type DeleteExperimentResponses = {
8473
+ /**
8474
+ * Delete an experiment
8475
+ */
8476
+ 200: DeleteExperimentResponse;
8477
+ };
8478
+ type DeleteExperimentResponse2 = DeleteExperimentResponses[keyof DeleteExperimentResponses];
8479
+ type GetExperimentData = {
8480
+ body?: never;
8481
+ headers?: {
8482
+ /**
8483
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
8484
+ */
8485
+ 'X-Project-Id'?: string;
8486
+ };
8487
+ path: {
8488
+ /**
8489
+ * Stable opaque experiment id (`exp_…`) or the experiment's `name`.
8490
+ */
8491
+ id: ResourceId;
8492
+ };
8493
+ query?: never;
8494
+ url: '/api/admin/experiments/{id}';
8495
+ };
8496
+ type GetExperimentErrors = {
8497
+ /**
8498
+ * The request was malformed (bad JSON or missing project scope).
8499
+ */
8500
+ 400: Error;
8501
+ /**
8502
+ * Missing or invalid admin SDK key.
8503
+ */
8504
+ 401: Error;
8505
+ /**
8506
+ * The key is valid but not allowed to perform this action.
8507
+ */
8508
+ 403: Error;
8509
+ /**
8510
+ * The resource does not exist or is not visible to the caller.
8511
+ */
8512
+ 404: Error;
8513
+ /**
8514
+ * The mutation conflicts with current state.
8515
+ */
8516
+ 409: Error;
8517
+ /**
8518
+ * The request body failed validation.
8519
+ */
8520
+ 422: Error;
8521
+ };
8522
+ type GetExperimentError = GetExperimentErrors[keyof GetExperimentErrors];
8523
+ type GetExperimentResponses = {
8524
+ /**
8525
+ * Get one experiment
8526
+ */
8527
+ 200: ExperimentApiRow;
8528
+ };
8529
+ type GetExperimentResponse = GetExperimentResponses[keyof GetExperimentResponses];
8530
+ type UpdateExperimentData = {
8531
+ body: UpdateExperimentRequest;
7567
8532
  headers?: {
7568
8533
  /**
7569
8534
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
@@ -8964,6 +9929,57 @@ type SetKillswitchValueResponses = {
8964
9929
  200: SetKillswitchValueResponse;
8965
9930
  };
8966
9931
  type SetKillswitchValueResponse2 = SetKillswitchValueResponses[keyof SetKillswitchValueResponses];
9932
+ type ToggleKillswitchData = {
9933
+ body?: ToggleKillswitchRequest;
9934
+ headers?: {
9935
+ /**
9936
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
9937
+ */
9938
+ 'X-Project-Id'?: string;
9939
+ };
9940
+ path: {
9941
+ /**
9942
+ * Stable opaque killswitch id (`ksw_…`) or the killswitch's `name`.
9943
+ */
9944
+ id: ResourceId;
9945
+ };
9946
+ query?: never;
9947
+ url: '/api/admin/killswitches/{id}/toggle';
9948
+ };
9949
+ type ToggleKillswitchErrors = {
9950
+ /**
9951
+ * The request was malformed (bad JSON or missing project scope).
9952
+ */
9953
+ 400: Error;
9954
+ /**
9955
+ * Missing or invalid admin SDK key.
9956
+ */
9957
+ 401: Error;
9958
+ /**
9959
+ * The key is valid but not allowed to perform this action.
9960
+ */
9961
+ 403: Error;
9962
+ /**
9963
+ * The resource does not exist or is not visible to the caller.
9964
+ */
9965
+ 404: Error;
9966
+ /**
9967
+ * The mutation conflicts with current state.
9968
+ */
9969
+ 409: Error;
9970
+ /**
9971
+ * The request body failed validation.
9972
+ */
9973
+ 422: Error;
9974
+ };
9975
+ type ToggleKillswitchError = ToggleKillswitchErrors[keyof ToggleKillswitchErrors];
9976
+ type ToggleKillswitchResponses = {
9977
+ /**
9978
+ * Toggle a killswitch or one of its switches
9979
+ */
9980
+ 200: ToggleKillswitchResponse;
9981
+ };
9982
+ type ToggleKillswitchResponse2 = ToggleKillswitchResponses[keyof ToggleKillswitchResponses];
8967
9983
  type ListUniversesData = {
8968
9984
  body?: never;
8969
9985
  headers?: {
@@ -10372,22 +11388,34 @@ type ListOpsItemsData = {
10372
11388
  path?: never;
10373
11389
  query?: {
10374
11390
  /**
10375
- * Filter by item type (`bug`/`feature_request`/`error`/`alert`), or `all`.
11391
+ * Filter by item type, or `all` (the default). Every type a returned item can carry is filterable, including the auto-filed ones.
10376
11392
  */
10377
- type?: 'bug' | 'feature_request' | 'error' | 'alert' | 'all';
11393
+ type?: 'bug' | 'feature_request' | 'error' | 'alert' | 'measure_plan' | 'all';
10378
11394
  /**
10379
- * Filter by lifecycle status, or `all`. The human-gated holding state (`pending_approval`) is excluded from `all`/default and returned only when requested as the exact status.
11395
+ * Filter by one lifecycle status, `unresolved` for every status that is not `resolved` or `wont_fix`, or `all` for every status. Defaults to `all` over HTTP; the CLI and MCP tool default to `unresolved`, so pass `all` there to include resolved and won't-fix items. The human-gated holding state (`pending_approval`) is excluded from `unresolved` and `all`, and returned only when requested as the exact status.
10380
11396
  */
10381
- status?: OpsItemStatus | 'all';
11397
+ status?: OpsItemStatus | 'unresolved' | 'all';
10382
11398
  /**
10383
- * Max items to return (1–500).
11399
+ * Filter by triage priority, or `all` (the default). Items with no priority set are returned only under `all`.
10384
11400
  */
10385
- limit?: number;
11401
+ priority?: OpsItemPriority | 'all';
10386
11402
  /**
10387
- * Narrow to items owned by one person OR one agent. Matches a person by `users.id`, email, or display name, and an agent by connector id, display name, or kebab-case handle — e.g. `owner=Claude` or `owner=alice@acme.dev`. Case-insensitive exact match, applied over the returned page.
11403
+ * `ready` narrows to the items ready to be picked up right now: status `open`, no open run (nobody has acked it and is still working), and either unowned (no person and no agent) or reopened (sent back to `open` after an earlier run finished). Leave `status` unset with it. `all` (the default) applies no such narrowing.
10388
11404
  */
10389
- owner?: string;
10390
- };
11405
+ scope?: 'all' | 'ready';
11406
+ /**
11407
+ * Page size — max items to return (1–500). A page shorter than `limit` is the last one.
11408
+ */
11409
+ limit?: number;
11410
+ /**
11411
+ * Number of items to skip before the page starts. Defaults to 0. The order is stable, so `offset += limit` walks the queue page by page.
11412
+ */
11413
+ offset?: number;
11414
+ /**
11415
+ * Narrow to items owned by one person OR one agent. Matches a person by `users.id`, email, or display name, and an agent by connector id, display name, or kebab-case handle — e.g. `owner=Claude` or `owner=alice@acme.dev`. Case-insensitive exact match.
11416
+ */
11417
+ owner?: string;
11418
+ };
10391
11419
  url: '/api/admin/ops';
10392
11420
  };
10393
11421
  type ListOpsItemsErrors = {
@@ -10470,6 +11498,98 @@ type CreateOpsItemResponses = {
10470
11498
  201: CreateOpsItemResponse;
10471
11499
  };
10472
11500
  type CreateOpsItemResponse2 = CreateOpsItemResponses[keyof CreateOpsItemResponses];
11501
+ type CreatePublicBugData = {
11502
+ body: CreatePublicBugRequest;
11503
+ path?: never;
11504
+ query?: never;
11505
+ url: '/ops/bug';
11506
+ };
11507
+ type CreatePublicBugErrors = {
11508
+ /**
11509
+ * The request was malformed (bad JSON or missing project scope).
11510
+ */
11511
+ 400: Error;
11512
+ /**
11513
+ * Missing or invalid admin SDK key.
11514
+ */
11515
+ 401: Error;
11516
+ /**
11517
+ * The key is valid but not allowed to perform this action.
11518
+ */
11519
+ 403: Error;
11520
+ /**
11521
+ * The request body exceeded the intake's fixed size cap (16 KB).
11522
+ */
11523
+ 413: Error;
11524
+ /**
11525
+ * The public intake is rate-limited per (project, client IP). Back off and retry;
11526
+ * the limit is a burst guard, not a quota, so a modest delay clears it.
11527
+ */
11528
+ 429: Error;
11529
+ /**
11530
+ * A backing store the endpoint needs is not bound in this environment. Transient
11531
+ * and infrastructural — no stable `ErrorCode` is assigned, so `code` is omitted.
11532
+ */
11533
+ 503: Error;
11534
+ };
11535
+ type CreatePublicBugError = CreatePublicBugErrors[keyof CreatePublicBugErrors];
11536
+ type CreatePublicBugResponses = {
11537
+ /**
11538
+ * An open ticket already tracks this report; nothing was filed
11539
+ */
11540
+ 200: CreatePublicTicketResponse;
11541
+ /**
11542
+ * File a bug
11543
+ */
11544
+ 201: CreatePublicTicketResponse;
11545
+ };
11546
+ type CreatePublicBugResponse = CreatePublicBugResponses[keyof CreatePublicBugResponses];
11547
+ type CreatePublicFeatureRequestData = {
11548
+ body: CreatePublicFeatureRequestRequest;
11549
+ path?: never;
11550
+ query?: never;
11551
+ url: '/ops/feature-request';
11552
+ };
11553
+ type CreatePublicFeatureRequestErrors = {
11554
+ /**
11555
+ * The request was malformed (bad JSON or missing project scope).
11556
+ */
11557
+ 400: Error;
11558
+ /**
11559
+ * Missing or invalid admin SDK key.
11560
+ */
11561
+ 401: Error;
11562
+ /**
11563
+ * The key is valid but not allowed to perform this action.
11564
+ */
11565
+ 403: Error;
11566
+ /**
11567
+ * The request body exceeded the intake's fixed size cap (16 KB).
11568
+ */
11569
+ 413: Error;
11570
+ /**
11571
+ * The public intake is rate-limited per (project, client IP). Back off and retry;
11572
+ * the limit is a burst guard, not a quota, so a modest delay clears it.
11573
+ */
11574
+ 429: Error;
11575
+ /**
11576
+ * A backing store the endpoint needs is not bound in this environment. Transient
11577
+ * and infrastructural — no stable `ErrorCode` is assigned, so `code` is omitted.
11578
+ */
11579
+ 503: Error;
11580
+ };
11581
+ type CreatePublicFeatureRequestError = CreatePublicFeatureRequestErrors[keyof CreatePublicFeatureRequestErrors];
11582
+ type CreatePublicFeatureRequestResponses = {
11583
+ /**
11584
+ * An open ticket already tracks this report; nothing was filed
11585
+ */
11586
+ 200: CreatePublicTicketResponse;
11587
+ /**
11588
+ * File a feature request
11589
+ */
11590
+ 201: CreatePublicTicketResponse;
11591
+ };
11592
+ type CreatePublicFeatureRequestResponse = CreatePublicFeatureRequestResponses[keyof CreatePublicFeatureRequestResponses];
10473
11593
  type DeleteOpsItemData = {
10474
11594
  body?: never;
10475
11595
  headers?: {
@@ -10870,6 +11990,211 @@ type UpdateOpsInvestigationResponses = {
10870
11990
  200: OpsInvestigation;
10871
11991
  };
10872
11992
  type UpdateOpsInvestigationResponse = UpdateOpsInvestigationResponses[keyof UpdateOpsInvestigationResponses];
11993
+ type ListOpsQuestionsData = {
11994
+ body?: never;
11995
+ headers?: {
11996
+ /**
11997
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
11998
+ */
11999
+ 'X-Project-Id'?: string;
12000
+ };
12001
+ path: {
12002
+ /**
12003
+ * Per-project item number (e.g. `7`) or the full ops item id.
12004
+ */
12005
+ handle: ResourceId;
12006
+ };
12007
+ query?: {
12008
+ /**
12009
+ * Filter by question status, or `all` (the default).
12010
+ */
12011
+ status?: OpsQuestionStatus | 'all';
12012
+ };
12013
+ url: '/api/admin/ops/{handle}/questions';
12014
+ };
12015
+ type ListOpsQuestionsErrors = {
12016
+ /**
12017
+ * The request was malformed (bad JSON or missing project scope).
12018
+ */
12019
+ 400: Error;
12020
+ /**
12021
+ * Missing or invalid admin SDK key.
12022
+ */
12023
+ 401: Error;
12024
+ /**
12025
+ * The key is valid but not allowed to perform this action.
12026
+ */
12027
+ 403: Error;
12028
+ /**
12029
+ * The resource does not exist or is not visible to the caller.
12030
+ */
12031
+ 404: Error;
12032
+ /**
12033
+ * The request body failed validation.
12034
+ */
12035
+ 422: Error;
12036
+ };
12037
+ type ListOpsQuestionsError = ListOpsQuestionsErrors[keyof ListOpsQuestionsErrors];
12038
+ type ListOpsQuestionsResponses = {
12039
+ /**
12040
+ * List an item's questions
12041
+ */
12042
+ 200: ListOpsQuestionsResponse;
12043
+ };
12044
+ type ListOpsQuestionsResponse2 = ListOpsQuestionsResponses[keyof ListOpsQuestionsResponses];
12045
+ type AskOpsQuestionsData = {
12046
+ body: AskOpsQuestionsRequest;
12047
+ headers?: {
12048
+ /**
12049
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
12050
+ */
12051
+ 'X-Project-Id'?: string;
12052
+ };
12053
+ path: {
12054
+ /**
12055
+ * Per-project item number (e.g. `7`) or the full ops item id.
12056
+ */
12057
+ handle: ResourceId;
12058
+ };
12059
+ query?: never;
12060
+ url: '/api/admin/ops/{handle}/questions';
12061
+ };
12062
+ type AskOpsQuestionsErrors = {
12063
+ /**
12064
+ * The request was malformed (bad JSON or missing project scope).
12065
+ */
12066
+ 400: Error;
12067
+ /**
12068
+ * Missing or invalid admin SDK key.
12069
+ */
12070
+ 401: Error;
12071
+ /**
12072
+ * The key is valid but not allowed to perform this action.
12073
+ */
12074
+ 403: Error;
12075
+ /**
12076
+ * The resource does not exist or is not visible to the caller.
12077
+ */
12078
+ 404: Error;
12079
+ /**
12080
+ * The request body failed validation.
12081
+ */
12082
+ 422: Error;
12083
+ };
12084
+ type AskOpsQuestionsError = AskOpsQuestionsErrors[keyof AskOpsQuestionsErrors];
12085
+ type AskOpsQuestionsResponses = {
12086
+ /**
12087
+ * The created questions, in the order asked
12088
+ */
12089
+ 200: AskOpsQuestionsResponse;
12090
+ };
12091
+ type AskOpsQuestionsResponse2 = AskOpsQuestionsResponses[keyof AskOpsQuestionsResponses];
12092
+ type AnswerOpsQuestionData = {
12093
+ body: AnswerOpsQuestionRequest;
12094
+ headers?: {
12095
+ /**
12096
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
12097
+ */
12098
+ 'X-Project-Id'?: string;
12099
+ };
12100
+ path: {
12101
+ /**
12102
+ * Per-project item number (e.g. `7`) or the full ops item id.
12103
+ */
12104
+ handle: ResourceId;
12105
+ /**
12106
+ * The question id (from `ask` or `list`).
12107
+ */
12108
+ questionId: ResourceId;
12109
+ };
12110
+ query?: never;
12111
+ url: '/api/admin/ops/{handle}/questions/{questionId}/answer';
12112
+ };
12113
+ type AnswerOpsQuestionErrors = {
12114
+ /**
12115
+ * The request was malformed (bad JSON or missing project scope).
12116
+ */
12117
+ 400: Error;
12118
+ /**
12119
+ * Missing or invalid admin SDK key.
12120
+ */
12121
+ 401: Error;
12122
+ /**
12123
+ * The key is valid but not allowed to perform this action.
12124
+ */
12125
+ 403: Error;
12126
+ /**
12127
+ * The resource does not exist or is not visible to the caller.
12128
+ */
12129
+ 404: Error;
12130
+ /**
12131
+ * The mutation conflicts with current state.
12132
+ */
12133
+ 409: Error;
12134
+ /**
12135
+ * The request body failed validation.
12136
+ */
12137
+ 422: Error;
12138
+ };
12139
+ type AnswerOpsQuestionError = AnswerOpsQuestionErrors[keyof AnswerOpsQuestionErrors];
12140
+ type AnswerOpsQuestionResponses = {
12141
+ /**
12142
+ * The answered question
12143
+ */
12144
+ 200: OpsQuestion;
12145
+ };
12146
+ type AnswerOpsQuestionResponse = AnswerOpsQuestionResponses[keyof AnswerOpsQuestionResponses];
12147
+ type CancelOpsQuestionData = {
12148
+ body?: never;
12149
+ headers?: {
12150
+ /**
12151
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
12152
+ */
12153
+ 'X-Project-Id'?: string;
12154
+ };
12155
+ path: {
12156
+ /**
12157
+ * Per-project item number (e.g. `7`) or the full ops item id.
12158
+ */
12159
+ handle: ResourceId;
12160
+ /**
12161
+ * The question id (from `ask` or `list`).
12162
+ */
12163
+ questionId: ResourceId;
12164
+ };
12165
+ query?: never;
12166
+ url: '/api/admin/ops/{handle}/questions/{questionId}/cancel';
12167
+ };
12168
+ type CancelOpsQuestionErrors = {
12169
+ /**
12170
+ * The request was malformed (bad JSON or missing project scope).
12171
+ */
12172
+ 400: Error;
12173
+ /**
12174
+ * Missing or invalid admin SDK key.
12175
+ */
12176
+ 401: Error;
12177
+ /**
12178
+ * The key is valid but not allowed to perform this action.
12179
+ */
12180
+ 403: Error;
12181
+ /**
12182
+ * The resource does not exist or is not visible to the caller.
12183
+ */
12184
+ 404: Error;
12185
+ /**
12186
+ * The mutation conflicts with current state.
12187
+ */
12188
+ 409: Error;
12189
+ };
12190
+ type CancelOpsQuestionError = CancelOpsQuestionErrors[keyof CancelOpsQuestionErrors];
12191
+ type CancelOpsQuestionResponses = {
12192
+ /**
12193
+ * The withdrawn question
12194
+ */
12195
+ 200: OpsQuestion;
12196
+ };
12197
+ type CancelOpsQuestionResponse = CancelOpsQuestionResponses[keyof CancelOpsQuestionResponses];
10873
12198
  type ListOpsAgentsData = {
10874
12199
  body?: never;
10875
12200
  headers?: {
@@ -11346,7 +12671,7 @@ type UpdateAlertData = {
11346
12671
  };
11347
12672
  path: {
11348
12673
  /**
11349
- * Stable opaque alert id (`al_…`).
12674
+ * Stable opaque instance id — the same id as the `alert` ops item this instance is.
11350
12675
  */
11351
12676
  id: ResourceId;
11352
12677
  };
@@ -11696,7 +13021,7 @@ type ListI18nKeysData = {
11696
13021
  */
11697
13022
  q?: string;
11698
13023
  /**
11699
- * Max keys to return (1–500).
13024
+ * Max keys to return (1–500). Defaults to 200.
11700
13025
  */
11701
13026
  limit?: number;
11702
13027
  /**
@@ -12950,16 +14275,275 @@ type FireConnectorData = {
12950
14275
  */
12951
14276
  'X-Project-Id'?: string;
12952
14277
  };
12953
- path: {
12954
- /**
12955
- * Stable opaque connector id.
12956
- */
12957
- id: ResourceId;
12958
- };
14278
+ path: {
14279
+ /**
14280
+ * Stable opaque connector id.
14281
+ */
14282
+ id: ResourceId;
14283
+ };
14284
+ query?: never;
14285
+ url: '/api/admin/connectors/{id}/fire';
14286
+ };
14287
+ type FireConnectorErrors = {
14288
+ /**
14289
+ * The request was malformed (bad JSON or missing project scope).
14290
+ */
14291
+ 400: Error;
14292
+ /**
14293
+ * Missing or invalid admin SDK key.
14294
+ */
14295
+ 401: Error;
14296
+ /**
14297
+ * The key is valid but not allowed to perform this action.
14298
+ */
14299
+ 403: Error;
14300
+ /**
14301
+ * The resource does not exist or is not visible to the caller.
14302
+ */
14303
+ 404: Error;
14304
+ /**
14305
+ * The mutation conflicts with current state.
14306
+ */
14307
+ 409: Error;
14308
+ /**
14309
+ * The request body failed validation.
14310
+ */
14311
+ 422: Error;
14312
+ /**
14313
+ * The request was well-formed and the resource exists, but a downstream provider
14314
+ * the endpoint delegates to (e.g. a connector's Slack/GitHub/cloud-agent dispatch)
14315
+ * failed. The failure is upstream of this API, not a client error. No stable
14316
+ * `ErrorCode` is assigned to upstream failures, so `code` is omitted.
14317
+ */
14318
+ 502: Error;
14319
+ };
14320
+ type FireConnectorError = FireConnectorErrors[keyof FireConnectorErrors];
14321
+ type FireConnectorResponses = {
14322
+ /**
14323
+ * The trigger run was successfully kicked off.
14324
+ */
14325
+ 200: FireConnectorResponse;
14326
+ };
14327
+ type FireConnectorResponse2 = FireConnectorResponses[keyof FireConnectorResponses];
14328
+ type TestConnectorData = {
14329
+ body?: never;
14330
+ headers?: {
14331
+ /**
14332
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
14333
+ */
14334
+ 'X-Project-Id'?: string;
14335
+ };
14336
+ path: {
14337
+ /**
14338
+ * Stable opaque connector id.
14339
+ */
14340
+ id: ResourceId;
14341
+ };
14342
+ query?: never;
14343
+ url: '/api/admin/connectors/{id}/test';
14344
+ };
14345
+ type TestConnectorErrors = {
14346
+ /**
14347
+ * The request was malformed (bad JSON or missing project scope).
14348
+ */
14349
+ 400: Error;
14350
+ /**
14351
+ * Missing or invalid admin SDK key.
14352
+ */
14353
+ 401: Error;
14354
+ /**
14355
+ * The key is valid but not allowed to perform this action.
14356
+ */
14357
+ 403: Error;
14358
+ /**
14359
+ * The resource does not exist or is not visible to the caller.
14360
+ */
14361
+ 404: Error;
14362
+ /**
14363
+ * The mutation conflicts with current state.
14364
+ */
14365
+ 409: Error;
14366
+ /**
14367
+ * The request body failed validation.
14368
+ */
14369
+ 422: Error;
14370
+ /**
14371
+ * The request was well-formed and the resource exists, but a downstream provider
14372
+ * the endpoint delegates to (e.g. a connector's Slack/GitHub/cloud-agent dispatch)
14373
+ * failed. The failure is upstream of this API, not a client error. No stable
14374
+ * `ErrorCode` is assigned to upstream failures, so `code` is omitted.
14375
+ */
14376
+ 502: Error;
14377
+ };
14378
+ type TestConnectorError = TestConnectorErrors[keyof TestConnectorErrors];
14379
+ type TestConnectorResponses = {
14380
+ /**
14381
+ * The test dispatch reached the destination.
14382
+ */
14383
+ 200: TestConnectorResponse;
14384
+ };
14385
+ type TestConnectorResponse2 = TestConnectorResponses[keyof TestConnectorResponses];
14386
+ type UpdateTriggerConnectorData = {
14387
+ body: UpdateTriggerConnectorRequest;
14388
+ headers?: {
14389
+ /**
14390
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
14391
+ */
14392
+ 'X-Project-Id'?: string;
14393
+ };
14394
+ path: {
14395
+ /**
14396
+ * Stable opaque connector id. Its stored `provider` must match the body's `provider`.
14397
+ */
14398
+ id: ResourceId;
14399
+ };
14400
+ query?: never;
14401
+ url: '/api/admin/connectors/{id}/trigger';
14402
+ };
14403
+ type UpdateTriggerConnectorErrors = {
14404
+ /**
14405
+ * The request was malformed (bad JSON or missing project scope).
14406
+ */
14407
+ 400: Error;
14408
+ /**
14409
+ * Missing or invalid admin SDK key.
14410
+ */
14411
+ 401: Error;
14412
+ /**
14413
+ * The key is valid but not allowed to perform this action.
14414
+ */
14415
+ 403: Error;
14416
+ /**
14417
+ * The resource does not exist or is not visible to the caller.
14418
+ */
14419
+ 404: Error;
14420
+ /**
14421
+ * The mutation conflicts with current state.
14422
+ */
14423
+ 409: Error;
14424
+ /**
14425
+ * The request body failed validation.
14426
+ */
14427
+ 422: Error;
14428
+ };
14429
+ type UpdateTriggerConnectorError = UpdateTriggerConnectorErrors[keyof UpdateTriggerConnectorErrors];
14430
+ type UpdateTriggerConnectorResponses = {
14431
+ /**
14432
+ * Update a trigger connector
14433
+ */
14434
+ 200: UpdateConnectorResponse;
14435
+ };
14436
+ type UpdateTriggerConnectorResponse = UpdateTriggerConnectorResponses[keyof UpdateTriggerConnectorResponses];
14437
+ type CreateTriggerConnectorData = {
14438
+ body: CreateTriggerConnectorRequest;
14439
+ headers?: {
14440
+ /**
14441
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
14442
+ */
14443
+ 'X-Project-Id'?: string;
14444
+ };
14445
+ path?: never;
14446
+ query?: never;
14447
+ url: '/api/admin/connectors/trigger';
14448
+ };
14449
+ type CreateTriggerConnectorErrors = {
14450
+ /**
14451
+ * The request was malformed (bad JSON or missing project scope).
14452
+ */
14453
+ 400: Error;
14454
+ /**
14455
+ * Missing or invalid admin SDK key.
14456
+ */
14457
+ 401: Error;
14458
+ /**
14459
+ * The key is valid but not allowed to perform this action.
14460
+ */
14461
+ 403: Error;
14462
+ /**
14463
+ * The request body failed validation.
14464
+ */
14465
+ 422: Error;
14466
+ };
14467
+ type CreateTriggerConnectorError = CreateTriggerConnectorErrors[keyof CreateTriggerConnectorErrors];
14468
+ type CreateTriggerConnectorResponses = {
14469
+ /**
14470
+ * Trigger connector created (or idempotently updated)
14471
+ */
14472
+ 201: CreateConnectorResponse;
14473
+ };
14474
+ type CreateTriggerConnectorResponse = CreateTriggerConnectorResponses[keyof CreateTriggerConnectorResponses];
14475
+ type ListKeysData = {
14476
+ body?: never;
14477
+ headers?: {
14478
+ /**
14479
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
14480
+ */
14481
+ 'X-Project-Id'?: string;
14482
+ };
14483
+ path?: never;
14484
+ query?: {
14485
+ /**
14486
+ * Page size (1–500). Defaults to 100.
14487
+ */
14488
+ limit?: number;
14489
+ /**
14490
+ * Opaque cursor returned in the previous page's `next_cursor`. Omit for the first page.
14491
+ */
14492
+ cursor?: string;
14493
+ /**
14494
+ * Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything.
14495
+ */
14496
+ q?: string;
14497
+ };
14498
+ url: '/api/admin/keys';
14499
+ };
14500
+ type ListKeysErrors = {
14501
+ /**
14502
+ * The request was malformed (bad JSON or missing project scope).
14503
+ */
14504
+ 400: Error;
14505
+ /**
14506
+ * Missing or invalid admin SDK key.
14507
+ */
14508
+ 401: Error;
14509
+ /**
14510
+ * The key is valid but not allowed to perform this action.
14511
+ */
14512
+ 403: Error;
14513
+ /**
14514
+ * The resource does not exist or is not visible to the caller.
14515
+ */
14516
+ 404: Error;
14517
+ /**
14518
+ * The mutation conflicts with current state.
14519
+ */
14520
+ 409: Error;
14521
+ /**
14522
+ * The request body failed validation.
14523
+ */
14524
+ 422: Error;
14525
+ };
14526
+ type ListKeysError = ListKeysErrors[keyof ListKeysErrors];
14527
+ type ListKeysResponses = {
14528
+ /**
14529
+ * List API keys
14530
+ */
14531
+ 200: ListKeysResponse;
14532
+ };
14533
+ type ListKeysResponse2 = ListKeysResponses[keyof ListKeysResponses];
14534
+ type CreateKeyData = {
14535
+ body: CreateKeyRequest;
14536
+ headers?: {
14537
+ /**
14538
+ * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
14539
+ */
14540
+ 'X-Project-Id'?: string;
14541
+ };
14542
+ path?: never;
12959
14543
  query?: never;
12960
- url: '/api/admin/connectors/{id}/fire';
14544
+ url: '/api/admin/keys';
12961
14545
  };
12962
- type FireConnectorErrors = {
14546
+ type CreateKeyErrors = {
12963
14547
  /**
12964
14548
  * The request was malformed (bad JSON or missing project scope).
12965
14549
  */
@@ -12984,24 +14568,17 @@ type FireConnectorErrors = {
12984
14568
  * The request body failed validation.
12985
14569
  */
12986
14570
  422: Error;
12987
- /**
12988
- * The request was well-formed and the resource exists, but a downstream provider
12989
- * the endpoint delegates to (e.g. a connector's Slack/GitHub/cloud-agent dispatch)
12990
- * failed. The failure is upstream of this API, not a client error. No stable
12991
- * `ErrorCode` is assigned to upstream failures, so `code` is omitted.
12992
- */
12993
- 502: Error;
12994
14571
  };
12995
- type FireConnectorError = FireConnectorErrors[keyof FireConnectorErrors];
12996
- type FireConnectorResponses = {
14572
+ type CreateKeyError = CreateKeyErrors[keyof CreateKeyErrors];
14573
+ type CreateKeyResponses = {
12997
14574
  /**
12998
- * The trigger run was successfully kicked off.
14575
+ * Create an API key
12999
14576
  */
13000
- 200: FireConnectorResponse;
14577
+ 201: CreateKeyResponse;
13001
14578
  };
13002
- type FireConnectorResponse2 = FireConnectorResponses[keyof FireConnectorResponses];
13003
- type TestConnectorData = {
13004
- body?: never;
14579
+ type CreateKeyResponse2 = CreateKeyResponses[keyof CreateKeyResponses];
14580
+ type UpdateKeyData = {
14581
+ body: UpdateKeyRequest;
13005
14582
  headers?: {
13006
14583
  /**
13007
14584
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
@@ -13010,14 +14587,14 @@ type TestConnectorData = {
13010
14587
  };
13011
14588
  path: {
13012
14589
  /**
13013
- * Stable opaque connector id.
14590
+ * Stable opaque key id (UUID) returned by `create` / `list`.
13014
14591
  */
13015
14592
  id: ResourceId;
13016
14593
  };
13017
14594
  query?: never;
13018
- url: '/api/admin/connectors/{id}/test';
14595
+ url: '/api/admin/keys/{id}';
13019
14596
  };
13020
- type TestConnectorErrors = {
14597
+ type UpdateKeyErrors = {
13021
14598
  /**
13022
14599
  * The request was malformed (bad JSON or missing project scope).
13023
14600
  */
@@ -13042,24 +14619,17 @@ type TestConnectorErrors = {
13042
14619
  * The request body failed validation.
13043
14620
  */
13044
14621
  422: Error;
13045
- /**
13046
- * The request was well-formed and the resource exists, but a downstream provider
13047
- * the endpoint delegates to (e.g. a connector's Slack/GitHub/cloud-agent dispatch)
13048
- * failed. The failure is upstream of this API, not a client error. No stable
13049
- * `ErrorCode` is assigned to upstream failures, so `code` is omitted.
13050
- */
13051
- 502: Error;
13052
14622
  };
13053
- type TestConnectorError = TestConnectorErrors[keyof TestConnectorErrors];
13054
- type TestConnectorResponses = {
14623
+ type UpdateKeyError = UpdateKeyErrors[keyof UpdateKeyErrors];
14624
+ type UpdateKeyResponses = {
13055
14625
  /**
13056
- * The test dispatch reached the destination.
14626
+ * Update an API key's label
13057
14627
  */
13058
- 200: TestConnectorResponse;
14628
+ 200: KeyRecord;
13059
14629
  };
13060
- type TestConnectorResponse2 = TestConnectorResponses[keyof TestConnectorResponses];
13061
- type UpdateTriggerConnectorData = {
13062
- body: UpdateTriggerConnectorRequest;
14630
+ type UpdateKeyResponse = UpdateKeyResponses[keyof UpdateKeyResponses];
14631
+ type RevokeKeyData = {
14632
+ body?: never;
13063
14633
  headers?: {
13064
14634
  /**
13065
14635
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
@@ -13068,14 +14638,14 @@ type UpdateTriggerConnectorData = {
13068
14638
  };
13069
14639
  path: {
13070
14640
  /**
13071
- * Stable opaque connector id. Its stored `provider` must match the body's `provider`.
14641
+ * Stable opaque key id (UUID) returned by `create` / `list`.
13072
14642
  */
13073
14643
  id: ResourceId;
13074
14644
  };
13075
14645
  query?: never;
13076
- url: '/api/admin/connectors/{id}/trigger';
14646
+ url: '/api/admin/keys/{id}/revoke';
13077
14647
  };
13078
- type UpdateTriggerConnectorErrors = {
14648
+ type RevokeKeyErrors = {
13079
14649
  /**
13080
14650
  * The request was malformed (bad JSON or missing project scope).
13081
14651
  */
@@ -13101,16 +14671,16 @@ type UpdateTriggerConnectorErrors = {
13101
14671
  */
13102
14672
  422: Error;
13103
14673
  };
13104
- type UpdateTriggerConnectorError = UpdateTriggerConnectorErrors[keyof UpdateTriggerConnectorErrors];
13105
- type UpdateTriggerConnectorResponses = {
14674
+ type RevokeKeyError = RevokeKeyErrors[keyof RevokeKeyErrors];
14675
+ type RevokeKeyResponses = {
13106
14676
  /**
13107
- * Update a trigger connector
14677
+ * Revoke an API key
13108
14678
  */
13109
- 200: UpdateConnectorResponse;
14679
+ 200: RevokeKeyResponse;
13110
14680
  };
13111
- type UpdateTriggerConnectorResponse = UpdateTriggerConnectorResponses[keyof UpdateTriggerConnectorResponses];
13112
- type CreateTriggerConnectorData = {
13113
- body: CreateTriggerConnectorRequest;
14681
+ type RevokeKeyResponse2 = RevokeKeyResponses[keyof RevokeKeyResponses];
14682
+ type SearchResourcesData = {
14683
+ body?: never;
13114
14684
  headers?: {
13115
14685
  /**
13116
14686
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
@@ -13118,10 +14688,15 @@ type CreateTriggerConnectorData = {
13118
14688
  'X-Project-Id'?: string;
13119
14689
  };
13120
14690
  path?: never;
13121
- query?: never;
13122
- url: '/api/admin/connectors/trigger';
14691
+ query?: {
14692
+ /**
14693
+ * Search query. Matched as a case-insensitive substring against each resource's `name` and title/display name. Trimmed; empty returns no hits.
14694
+ */
14695
+ q?: string;
14696
+ };
14697
+ url: '/api/admin/search';
13123
14698
  };
13124
- type CreateTriggerConnectorErrors = {
14699
+ type SearchResourcesErrors = {
13125
14700
  /**
13126
14701
  * The request was malformed (bad JSON or missing project scope).
13127
14702
  */
@@ -13134,20 +14709,28 @@ type CreateTriggerConnectorErrors = {
13134
14709
  * The key is valid but not allowed to perform this action.
13135
14710
  */
13136
14711
  403: Error;
14712
+ /**
14713
+ * The resource does not exist or is not visible to the caller.
14714
+ */
14715
+ 404: Error;
14716
+ /**
14717
+ * The mutation conflicts with current state.
14718
+ */
14719
+ 409: Error;
13137
14720
  /**
13138
14721
  * The request body failed validation.
13139
14722
  */
13140
14723
  422: Error;
13141
14724
  };
13142
- type CreateTriggerConnectorError = CreateTriggerConnectorErrors[keyof CreateTriggerConnectorErrors];
13143
- type CreateTriggerConnectorResponses = {
14725
+ type SearchResourcesError = SearchResourcesErrors[keyof SearchResourcesErrors];
14726
+ type SearchResourcesResponses = {
13144
14727
  /**
13145
- * Trigger connector created (or idempotently updated)
14728
+ * Search project resources
13146
14729
  */
13147
- 201: CreateConnectorResponse;
14730
+ 200: SearchResponse;
13148
14731
  };
13149
- type CreateTriggerConnectorResponse = CreateTriggerConnectorResponses[keyof CreateTriggerConnectorResponses];
13150
- type ListKeysData = {
14732
+ type SearchResourcesResponse = SearchResourcesResponses[keyof SearchResourcesResponses];
14733
+ type ListTagsData = {
13151
14734
  body?: never;
13152
14735
  headers?: {
13153
14736
  /**
@@ -13158,21 +14741,13 @@ type ListKeysData = {
13158
14741
  path?: never;
13159
14742
  query?: {
13160
14743
  /**
13161
- * Page size (1–500). Defaults to 100.
13162
- */
13163
- limit?: number;
13164
- /**
13165
- * Opaque cursor returned in the previous page's `next_cursor`. Omit for the first page.
13166
- */
13167
- cursor?: string;
13168
- /**
13169
- * Case-insensitive substring filter across the resource's human-readable text columns (e.g. `name`, `title`, `description`). OR-matched across those columns; omit to return everything.
14744
+ * Case-insensitive substring filter on the tag name. Omit to return every tag.
13170
14745
  */
13171
14746
  q?: string;
13172
14747
  };
13173
- url: '/api/admin/keys';
14748
+ url: '/api/admin/tags';
13174
14749
  };
13175
- type ListKeysErrors = {
14750
+ type ListTagsErrors = {
13176
14751
  /**
13177
14752
  * The request was malformed (bad JSON or missing project scope).
13178
14753
  */
@@ -13198,27 +14773,36 @@ type ListKeysErrors = {
13198
14773
  */
13199
14774
  422: Error;
13200
14775
  };
13201
- type ListKeysError = ListKeysErrors[keyof ListKeysErrors];
13202
- type ListKeysResponses = {
14776
+ type ListTagsError = ListTagsErrors[keyof ListTagsErrors];
14777
+ type ListTagsResponses = {
13203
14778
  /**
13204
- * List API keys
14779
+ * List the project's tags
13205
14780
  */
13206
- 200: ListKeysResponse;
14781
+ 200: ListTagsResponse;
13207
14782
  };
13208
- type ListKeysResponse2 = ListKeysResponses[keyof ListKeysResponses];
13209
- type CreateKeyData = {
13210
- body: CreateKeyRequest;
14783
+ type ListTagsResponse2 = ListTagsResponses[keyof ListTagsResponses];
14784
+ type GetEntityTagsData = {
14785
+ body?: never;
13211
14786
  headers?: {
13212
14787
  /**
13213
14788
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
13214
14789
  */
13215
14790
  'X-Project-Id'?: string;
13216
14791
  };
13217
- path?: never;
14792
+ path: {
14793
+ /**
14794
+ * The kind of item — `ops`, `flag`, `config`, `killswitch`, `metric`, `error`, `alert_rule`, or `experiment`.
14795
+ */
14796
+ entityType: TaggableEntityType;
14797
+ /**
14798
+ * The item's handle — an ops item's number (e.g. `7`) or id; a flag/config/killswitch/metric/alert rule/experiment's name or id; a tracked error's id.
14799
+ */
14800
+ entityId: ResourceId;
14801
+ };
13218
14802
  query?: never;
13219
- url: '/api/admin/keys';
14803
+ url: '/api/admin/tags/{entityType}/{entityId}';
13220
14804
  };
13221
- type CreateKeyErrors = {
14805
+ type GetEntityTagsErrors = {
13222
14806
  /**
13223
14807
  * The request was malformed (bad JSON or missing project scope).
13224
14808
  */
@@ -13244,16 +14828,16 @@ type CreateKeyErrors = {
13244
14828
  */
13245
14829
  422: Error;
13246
14830
  };
13247
- type CreateKeyError = CreateKeyErrors[keyof CreateKeyErrors];
13248
- type CreateKeyResponses = {
14831
+ type GetEntityTagsError = GetEntityTagsErrors[keyof GetEntityTagsErrors];
14832
+ type GetEntityTagsResponses = {
13249
14833
  /**
13250
- * Create an API key
14834
+ * Read an item's tags
13251
14835
  */
13252
- 201: CreateKeyResponse;
14836
+ 200: EntityTagsResponse;
13253
14837
  };
13254
- type CreateKeyResponse2 = CreateKeyResponses[keyof CreateKeyResponses];
13255
- type RevokeKeyData = {
13256
- body?: never;
14838
+ type GetEntityTagsResponse = GetEntityTagsResponses[keyof GetEntityTagsResponses];
14839
+ type UpdateEntityTagsData = {
14840
+ body: UpdateEntityTagsRequest;
13257
14841
  headers?: {
13258
14842
  /**
13259
14843
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
@@ -13262,14 +14846,18 @@ type RevokeKeyData = {
13262
14846
  };
13263
14847
  path: {
13264
14848
  /**
13265
- * Stable opaque key id (UUID) returned by `create` / `list`.
14849
+ * The kind of item — `ops`, `flag`, `config`, `killswitch`, `metric`, `error`, `alert_rule`, or `experiment`.
13266
14850
  */
13267
- id: ResourceId;
14851
+ entityType: TaggableEntityType;
14852
+ /**
14853
+ * The item's handle — an ops item's number (e.g. `7`) or id; a flag/config/killswitch/metric/alert rule/experiment's name or id; a tracked error's id.
14854
+ */
14855
+ entityId: ResourceId;
13268
14856
  };
13269
14857
  query?: never;
13270
- url: '/api/admin/keys/{id}/revoke';
14858
+ url: '/api/admin/tags/{entityType}/{entityId}';
13271
14859
  };
13272
- type RevokeKeyErrors = {
14860
+ type UpdateEntityTagsErrors = {
13273
14861
  /**
13274
14862
  * The request was malformed (bad JSON or missing project scope).
13275
14863
  */
@@ -13295,32 +14883,36 @@ type RevokeKeyErrors = {
13295
14883
  */
13296
14884
  422: Error;
13297
14885
  };
13298
- type RevokeKeyError = RevokeKeyErrors[keyof RevokeKeyErrors];
13299
- type RevokeKeyResponses = {
14886
+ type UpdateEntityTagsError = UpdateEntityTagsErrors[keyof UpdateEntityTagsErrors];
14887
+ type UpdateEntityTagsResponses = {
13300
14888
  /**
13301
- * Revoke an API key
14889
+ * Add or remove tags on an item
13302
14890
  */
13303
- 200: RevokeKeyResponse;
14891
+ 200: EntityTagsResponse;
13304
14892
  };
13305
- type RevokeKeyResponse2 = RevokeKeyResponses[keyof RevokeKeyResponses];
13306
- type SearchResourcesData = {
13307
- body?: never;
14893
+ type UpdateEntityTagsResponse = UpdateEntityTagsResponses[keyof UpdateEntityTagsResponses];
14894
+ type SetEntityTagsData = {
14895
+ body: SetEntityTagsRequest;
13308
14896
  headers?: {
13309
14897
  /**
13310
14898
  * Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
13311
14899
  */
13312
14900
  'X-Project-Id'?: string;
13313
14901
  };
13314
- path?: never;
13315
- query?: {
14902
+ path: {
13316
14903
  /**
13317
- * Search query. Matched as a case-insensitive substring against each resource's `name` and title/display name. Trimmed; empty returns no hits.
14904
+ * The kind of item — `ops`, `flag`, `config`, `killswitch`, `metric`, `error`, `alert_rule`, or `experiment`.
13318
14905
  */
13319
- q?: string;
14906
+ entityType: TaggableEntityType;
14907
+ /**
14908
+ * The item's handle — an ops item's number (e.g. `7`) or id; a flag/config/killswitch/metric/alert rule/experiment's name or id; a tracked error's id.
14909
+ */
14910
+ entityId: ResourceId;
13320
14911
  };
13321
- url: '/api/admin/search';
14912
+ query?: never;
14913
+ url: '/api/admin/tags/{entityType}/{entityId}';
13322
14914
  };
13323
- type SearchResourcesErrors = {
14915
+ type SetEntityTagsErrors = {
13324
14916
  /**
13325
14917
  * The request was malformed (bad JSON or missing project scope).
13326
14918
  */
@@ -13346,14 +14938,14 @@ type SearchResourcesErrors = {
13346
14938
  */
13347
14939
  422: Error;
13348
14940
  };
13349
- type SearchResourcesError = SearchResourcesErrors[keyof SearchResourcesErrors];
13350
- type SearchResourcesResponses = {
14941
+ type SetEntityTagsError = SetEntityTagsErrors[keyof SetEntityTagsErrors];
14942
+ type SetEntityTagsResponses = {
13351
14943
  /**
13352
- * Search project resources
14944
+ * Replace an item's tags
13353
14945
  */
13354
- 200: SearchResponse;
14946
+ 200: EntityTagsResponse;
13355
14947
  };
13356
- type SearchResourcesResponse = SearchResourcesResponses[keyof SearchResourcesResponses];
14948
+ type SetEntityTagsResponse = SetEntityTagsResponses[keyof SetEntityTagsResponses];
13357
14949
 
13358
14950
  type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options$1<TData, ThrowOnError, TResponse> & {
13359
14951
  /**
@@ -13451,6 +15043,50 @@ declare const disableGate: <ThrowOnError extends boolean = false>(options: Optio
13451
15043
  * **Use case:** Render the activity feed in the gate detail panel or answer "who ramped this gate, and when?" during an incident review.
13452
15044
  */
13453
15045
  declare const listGateActivity: <ThrowOnError extends boolean = false>(options: Options<ListGateActivityData, ThrowOnError>) => RequestResult<ListGateActivityResponses, ListGateActivityErrors, ThrowOnError>;
15046
+ /**
15047
+ * Remove entries from a gate's whitelist
15048
+ *
15049
+ * Removes identities from the gate's whitelist. Entries that aren't on the list are skipped, so the call is idempotent.
15050
+ *
15051
+ * Removing the last entry leaves an empty whitelist block in place; to drop the block itself use `PUT` with `entries: []`.
15052
+ *
15053
+ * **Use case:** Revoke one beta tester's access without touching anyone else's.
15054
+ */
15055
+ declare const removeFromGateWhitelist: <ThrowOnError extends boolean = false>(options: Options<RemoveFromGateWhitelistData, ThrowOnError>) => RequestResult<RemoveFromGateWhitelistResponses, RemoveFromGateWhitelistErrors, ThrowOnError>;
15056
+ /**
15057
+ * Read a gate's whitelist
15058
+ *
15059
+ * Returns the gate's whitelist — the always-first allowlist that admits the listed identities before any targeting rule or percentage rollout is evaluated.
15060
+ *
15061
+ * A gate with no whitelist returns `entries: []` (and the default `attr`), never a 404 — so a caller can read-then-write without special-casing the empty gate.
15062
+ *
15063
+ * **Use case:** Check whether an account is already let through before adding it.
15064
+ */
15065
+ declare const getGateWhitelist: <ThrowOnError extends boolean = false>(options: Options<GetGateWhitelistData, ThrowOnError>) => RequestResult<GetGateWhitelistResponses, GetGateWhitelistErrors, ThrowOnError>;
15066
+ /**
15067
+ * Add entries to a gate's whitelist
15068
+ *
15069
+ * Adds identities to the gate's whitelist, creating the block if the gate doesn't have one yet. Entries already on the list are skipped, so the call is idempotent and safe to retry.
15070
+ *
15071
+ * Adding to a gate that already has a whitelist keyed on the other attribute is rejected (409) rather than silently re-keying the entries already there — use `PUT` to switch `attr` deliberately.
15072
+ *
15073
+ * **Use case:** Let one more customer into a private beta without reading the current list first.
15074
+ */
15075
+ declare const addToGateWhitelist: <ThrowOnError extends boolean = false>(options: Options<AddToGateWhitelistData, ThrowOnError>) => RequestResult<AddToGateWhitelistResponses, AddToGateWhitelistErrors, ThrowOnError>;
15076
+ /**
15077
+ * Replace a gate's whitelist
15078
+ *
15079
+ * Replaces the gate's whole whitelist with `entries`, creating the block if the gate didn't have one. Idempotent — the same call twice leaves the same list.
15080
+ *
15081
+ * This is the only whitelist call that can switch `attr` (`email` ⇄ `user_id`) or clear the block: `entries: []` removes the whitelist from the gate entirely.
15082
+ *
15083
+ * **Use cases**
15084
+ *
15085
+ * - **Pin an exact list** — `{ "entries": ["alice@acme.dev", "bob@acme.dev"] }`.
15086
+ * - **Switch to user ids** — `{ "attr": "user_id", "entries": ["usr_123"] }`.
15087
+ * - **Drop the whitelist** — `{ "entries": [] }`.
15088
+ */
15089
+ declare const setGateWhitelist: <ThrowOnError extends boolean = false>(options: Options<SetGateWhitelistData, ThrowOnError>) => RequestResult<SetGateWhitelistResponses, SetGateWhitelistErrors, ThrowOnError>;
13454
15090
  /**
13455
15091
  * List experiments
13456
15092
  *
@@ -13771,6 +15407,23 @@ declare const setKillswitchSwitch: <ThrowOnError extends boolean = false>(option
13771
15407
  * - **Untrip on prod** — `{ "env": "prod", "value": false }`.
13772
15408
  */
13773
15409
  declare const setKillswitchValue: <ThrowOnError extends boolean = false>(options: Options<SetKillswitchValueData, ThrowOnError>) => RequestResult<SetKillswitchValueResponses, SetKillswitchValueErrors, ThrowOnError>;
15410
+ /**
15411
+ * Toggle a killswitch or one of its switches
15412
+ *
15413
+ * Flips a killswitch on one environment and publishes a new version there. This is the one-call incident verb: it reads the current value, flips it, and publishes, so you don't have to fetch the killswitch first.
15414
+ *
15415
+ * Every body field is optional, which is what makes the call widen cleanly:
15416
+ *
15417
+ * - **Flip the killswitch** — `{}`. Flips the flat `value` on `prod`.
15418
+ * - **Flip one sub-switch** — `{ "switchKey": "eu_region" }`. Flips that entry on `prod`, creating it (from `false`) if it isn't in the map yet.
15419
+ * - **Set it idempotently** — `{ "switchKey": "eu_region", "value": true }`. Publishes exactly that value, so a retried call can't undo the first one. A `null` `value` means "flip", not "set to null".
15420
+ * - **Choose the environment** — add `"env": "staging"`. Omitted, `env` is `prod`.
15421
+ *
15422
+ * The response reports both `previous` and `value`, so a caller that asked for a flip can see what it actually changed.
15423
+ *
15424
+ * Prefer this over `PUT /{id}/value` and `PUT /{id}/switch` unless you specifically need those endpoints' unconditional set semantics.
15425
+ */
15426
+ declare const toggleKillswitch: <ThrowOnError extends boolean = false>(options: Options<ToggleKillswitchData, ThrowOnError>) => RequestResult<ToggleKillswitchResponses, ToggleKillswitchErrors, ThrowOnError>;
13774
15427
  /**
13775
15428
  * List universes
13776
15429
  *
@@ -13908,7 +15561,7 @@ declare const listMetrics: <ThrowOnError extends boolean = false>(options?: Opti
13908
15561
  *
13909
15562
  * **Use cases**
13910
15563
  *
13911
- * - **Track an event** — `count_users(<event>)` for unique-user counts.
15564
+ * - **Track an event** — `count(<event>)` for event counts.
13912
15565
  * - **Sum a value** — `sum(<event>, <label>)` for revenue / quantity metrics.
13913
15566
  * - **Experiment success metric** — create the metric, then attach its id to an experiment.
13914
15567
  */
@@ -14023,7 +15676,11 @@ declare const approveEvent: <ThrowOnError extends boolean = false>(options: Opti
14023
15676
  /**
14024
15677
  * List the operational queue
14025
15678
  *
14026
- * Returns the unified ops queue (bugs, feature requests, errors, alerts) in work order — highest priority first, oldest first within a priority — so consumers work it top-down. Filter by `type` and/or `status`, and cap with `limit`. Human-gated holding states (items awaiting human sign-off in the dashboard) are never returned by `all`/default status.
15679
+ * Returns the unified ops queue (bugs, feature requests, errors, alerts, measurement plans) in work order — highest priority first, oldest first within a priority — so consumers work it top-down. Every filter is applied in SQL before paging, and filters combine with AND. Human-gated holding states (items awaiting human sign-off in the dashboard) are never returned by `all`/default status.
15680
+ *
15681
+ * **Filters:** `type` (one item type), `status` (one lifecycle status, or `unresolved` — everything not yet `resolved`/`wont_fix`), `priority` (one triage priority), `owner` (one person or agent), and `scope=ready` — the items ready to be picked up right now: `open`, with nobody working them (no open run), and either unowned or reopened (sent back to `open` after an earlier run finished).
15682
+ *
15683
+ * **Paging:** `limit` is the page size and `offset` the number of items to skip. The order is stable, so walk the queue with `offset += limit`; a page shorter than `limit` is the last one.
14027
15684
  *
14028
15685
  * **Use case:** Pull the open queue to triage — e.g. every `bug` still `open` — before working items down one by one.
14029
15686
  */
@@ -14039,6 +15696,38 @@ declare const listOpsItems: <ThrowOnError extends boolean = false>(options?: Opt
14039
15696
  * - **File a feature request** — `{ "type": "feature_request", "title": "Dark mode", "priority": "nice_to_have" }`.
14040
15697
  */
14041
15698
  declare const createOpsItem: <ThrowOnError extends boolean = false>(options: Options<CreateOpsItemData, ThrowOnError>) => RequestResult<CreateOpsItemResponses, CreateOpsItemErrors, ThrowOnError>;
15699
+ /**
15700
+ * File a bug
15701
+ *
15702
+ * Files one bug onto a project's queue, awaiting human approval. This is the **public** intake: it authenticates with a *client* SDK key rather than an admin key, so it can be called from a CLI, an installer script, a devtools overlay, or any shipped code — the same places a client key already lives.
15703
+ *
15704
+ * Three gates decide whether a ticket is filed, and nothing else the caller sends can widen them:
15705
+ *
15706
+ * 1. the key is a `client` key carrying the `tickets:public_create` scope,
15707
+ * 2. the key's project has public ticket creation enabled, and
15708
+ * 3. the item is filed as `pending_approval` — parked out of the work queue until a human promotes it in the dashboard.
15709
+ *
15710
+ * The project is the key's own project; there is no `X-Project-Id` to pass and no way to file into someone else's queue. Repeat submissions of the same title dedupe against the open ticket already tracking it, which returns `200` with `deduped: true` instead of filing again.
15711
+ *
15712
+ * Send a `dedupKey` to own that grain yourself — the same key from a monitor, a job, or a retried install re-triggers its open ticket: the ticket's fields are refreshed from the new payload and a "re-triggered" comment is appended (`200` with `deduped: true, updated: true`), so one recurring failure stays one ticket with its history intact.
15713
+ *
15714
+ * This endpoint is served by the Shipeasy **edge worker** (`api.shipeasy.ai`), not the admin API — see `servers` below.
15715
+ *
15716
+ * **Use case:** `shipeasy setup` fails on a customer's machine and self-reports the failure with the user's consent — `{ "title": "Setup failed at Feature installs", "stepsToReproduce": "…", "actualResult": "…" }`.
15717
+ */
15718
+ declare const createPublicBug: <ThrowOnError extends boolean = false>(options: Options<CreatePublicBugData, ThrowOnError>) => RequestResult<CreatePublicBugResponses, CreatePublicBugErrors, ThrowOnError>;
15719
+ /**
15720
+ * File a feature request
15721
+ *
15722
+ * Files one feature request onto a project's queue, awaiting human approval. The feature-request counterpart to `POST /ops/bug`, with the same three gates: a `client` key carrying `tickets:public_create`, a project that has opted in, and a `pending_approval` state forced server-side.
15723
+ *
15724
+ * The project is the key's own project; there is no `X-Project-Id` to pass. Repeat submissions of the same title dedupe against the open ticket already tracking it, which returns `200` with `deduped: true` instead of filing again. A `dedupKey` works exactly as on `POST /ops/bug`: a repeat carrying the same key refreshes the open ticket and comments that it was re-triggered.
15725
+ *
15726
+ * This endpoint is served by the Shipeasy **edge worker** (`api.shipeasy.ai`), not the admin API — see `servers` below.
15727
+ *
15728
+ * **Use case:** An in-product "request a feature" form posts what the user asked for — `{ "title": "Dark mode", "useCase": "Reduce eye strain at night" }`.
15729
+ */
15730
+ declare const createPublicFeatureRequest: <ThrowOnError extends boolean = false>(options: Options<CreatePublicFeatureRequestData, ThrowOnError>) => RequestResult<CreatePublicFeatureRequestResponses, CreatePublicFeatureRequestErrors, ThrowOnError>;
14042
15731
  /**
14043
15732
  * Delete a queue item
14044
15733
  *
@@ -14095,6 +15784,11 @@ declare const linkPrToOpsItem: <ThrowOnError extends boolean = false>(options: O
14095
15784
  * list` and use one of those (or connect the agent under Settings →
14096
15785
  * Triggers).
14097
15786
  *
15787
+ * **Launching.** When the named agent has a connected trigger and you pass
15788
+ * no `sessionId`, the ack also fires that trigger — a new provider run
15789
+ * starts working the item. Pass `launch: false` to only claim the item and
15790
+ * record the run (you are doing the work yourself), without starting one.
15791
+ *
14098
15792
  * **Completion.** The run closes automatically on the loop's final actions —
14099
15793
  * linking the fixing PR (`link-pr`), an ops-notify escalation, or a
14100
15794
  * completion status change (`ready_for_qa`/`resolved`) — and the dashboard
@@ -14125,7 +15819,9 @@ declare const listOpsInvestigations: <ThrowOnError extends boolean = false>(opti
14125
15819
  * (`kind: investigated`), a blocking question for the team (`kind:
14126
15820
  * question`), or how to verify the fix (`kind: ready_for_qa` with
14127
15821
  * `qaNotes`). Append-only and create-only, so it is safe for restricted ops
14128
- * keys.
15822
+ * keys. For a decision between options you can name, ask a structured
15823
+ * question instead (`ops questions ask`) — it is answerable in one tap and
15824
+ * the answer comes back to your run.
14129
15825
  *
14130
15826
  * **Use case:** After working an item, leave a findings write-up (summary,
14131
15827
  * markdown findings, sources inspected, confidence) so the team — and the
@@ -14147,6 +15843,66 @@ declare const createOpsInvestigation: <ThrowOnError extends boolean = false>(opt
14147
15843
  * no need to append a second record.
14148
15844
  */
14149
15845
  declare const updateOpsInvestigation: <ThrowOnError extends boolean = false>(options: Options<UpdateOpsInvestigationData, ThrowOnError>) => RequestResult<UpdateOpsInvestigationResponses, UpdateOpsInvestigationErrors, ThrowOnError>;
15846
+ /**
15847
+ * List an item's questions
15848
+ *
15849
+ * The structured questions asked on a queue item, with their answers —
15850
+ * newest first (max 100). Pull this to read the answers to questions you
15851
+ * asked: an answered question reads `status: completed` and carries
15852
+ * `answer.selected` (the option labels picked) and `answer.other` (the
15853
+ * free-text "Other" reply, or `null`).
15854
+ *
15855
+ * **Use case:** You asked with `delivery: poll` from a live session — poll
15856
+ * this until your questions read `completed`, then continue with the answers.
15857
+ */
15858
+ declare const listOpsQuestions: <ThrowOnError extends boolean = false>(options: Options<ListOpsQuestionsData, ThrowOnError>) => RequestResult<ListOpsQuestionsResponses, ListOpsQuestionsErrors, ThrowOnError>;
15859
+ /**
15860
+ * Ask the team questions about an item
15861
+ *
15862
+ * Ask 1–4 structured questions about a queue item — the way to get a
15863
+ * decision from a person when the implementation needs one. Each question
15864
+ * is the `AskUserQuestion` shape: a short `header` chip, the full
15865
+ * `question`, 2–4 `options` (`label` + `description`), and `multiSelect`
15866
+ * (checkboxes instead of radios). The person can always answer "Other" in
15867
+ * free text, so never add an "Other" option yourself. The questions render
15868
+ * at the very top of the item's detail panel and mark the row in the queue.
15869
+ *
15870
+ * **Delivery.** `resume` re-fires your trigger-connector run on the item
15871
+ * once every question it asked is answered, continuing the same run record
15872
+ * with the answers in the prompt — stop after asking. `poll` fires nothing;
15873
+ * poll `GET .../questions` instead. Omitted, it is `resume` when `runId`
15874
+ * names a run launched through a trigger connector, else `poll`.
15875
+ *
15876
+ * **Use case:** Blocked on a product decision (which behaviour to keep,
15877
+ * which of two fixes to ship) — ask instead of guessing, then wait for the
15878
+ * answer.
15879
+ */
15880
+ declare const askOpsQuestions: <ThrowOnError extends boolean = false>(options: Options<AskOpsQuestionsData, ThrowOnError>) => RequestResult<AskOpsQuestionsResponses, AskOpsQuestionsErrors, ThrowOnError>;
15881
+ /**
15882
+ * Answer a question
15883
+ *
15884
+ * Answer one open question on a queue item — pick option labels in
15885
+ * `selected` (exactly one unless the question is `multiSelect`) and/or
15886
+ * write a free-text `other`. The question moves to `completed`. When it was
15887
+ * the last open question of a `resume` run, that agent is re-fired on the
15888
+ * item with every answer. A person's action: never allow-listed for
15889
+ * restricted ops keys.
15890
+ *
15891
+ * **Use case:** Unblock an agent from the CLI instead of the dashboard.
15892
+ */
15893
+ declare const answerOpsQuestion: <ThrowOnError extends boolean = false>(options: Options<AnswerOpsQuestionData, ThrowOnError>) => RequestResult<AnswerOpsQuestionResponses, AnswerOpsQuestionErrors, ThrowOnError>;
15894
+ /**
15895
+ * Withdraw a question
15896
+ *
15897
+ * Withdraw one open question you asked — it no longer needs an answer
15898
+ * (you found it out yourself, or the item moved on). The question moves to
15899
+ * `cancelled` and leaves the detail panel. Withdrawing the last open
15900
+ * question of a run delivers nothing.
15901
+ *
15902
+ * **Use case:** You asked, then answered it yourself from the code — take
15903
+ * it off the person's plate.
15904
+ */
15905
+ declare const cancelOpsQuestion: <ThrowOnError extends boolean = false>(options: Options<CancelOpsQuestionData, ThrowOnError>) => RequestResult<CancelOpsQuestionResponses, CancelOpsQuestionErrors, ThrowOnError>;
14150
15906
  /**
14151
15907
  * List connected AI agents
14152
15908
  *
@@ -14244,7 +16000,9 @@ declare const updateAlertRule: <ThrowOnError extends boolean = false>(options: O
14244
16000
  *
14245
16001
  * Returns the project's FIRED alerts as a **bare JSON array** (no pagination envelope), ordered by `createdAt desc`. Defaults to the currently-firing ones (`status=active`); pass a `status` to widen to resolved/dismissed history or `all`.
14246
16002
  *
14247
- * Fired alerts are raised only by the platform — the UI's killswitch handlers plus the worker's analysis consumer and alerts cron — never filed by hand, so this surface is list + triage (via PATCH), with no create. The rules that *define* metric-threshold alerts live at `/api/admin/alert-rules`.
16003
+ * A fired alert is an **instance** of an alert rule, and an instance IS its ops queue item — the same row `/api/admin/ops` returns with `type: "alert"`, viewed through the alert lens. One rule produces many instances over its life and at most one is open at a time: when the condition clears the instance closes, and the next firing is a NEW instance with its own id and history. That is why `severity` reads off the rule (the queue item carries it as `priority`) and why resolving the queue item and clearing the alert are one act, not two rows to keep in step.
16004
+ *
16005
+ * Instances are opened only by the platform — the UI's killswitch handlers plus the worker's analysis consumer and alerts cron — never filed by hand, so this surface is list + triage (via PATCH), with no create. The rules that *define* metric-threshold alerts live at `/api/admin/alert-rules`.
14248
16006
  *
14249
16007
  * **Use case:** Snapshot what is currently firing for an on-call view or the home Alerts block, or pull `status=all` to audit how a noisy rule has behaved over time.
14250
16008
  */
@@ -14254,7 +16012,7 @@ declare const listAlerts: <ThrowOnError extends boolean = false>(options?: Optio
14254
16012
  *
14255
16013
  * Triage writes on one fired alert — the only mutations this surface allows. All body fields are optional (at least one required); only the fields present are changed.
14256
16014
  *
14257
- * - **`status`** — flip between `active` / `resolved` / `dismissed`. `resolved` and `dismissed` stamp `resolvedAt` / `dismissedAt`; `active` re-opens and clears both. A resolved alert re-fires (as the same row, re-activated) if its condition is raised again.
16015
+ * - **`status`** — flip between `active` / `resolved` / `dismissed`. `resolved` and `dismissed` stamp `resolvedAt` / `dismissedAt`; `active` re-opens and clears both. These write the underlying queue item's own status (`resolved` / `wont_fix` / `open`), so clearing an alert here and resolving it in the ops queue are the same act. A cleared instance is never revived: if the condition fires again it opens a NEW instance with its own id.
14258
16016
  * - **`assigneeId`** — the PERSON owner (a `users.id`), or `null` to unassign.
14259
16017
  * - **`agent`** — the AGENT owner: a connected trigger connector's id, or the built-in `"jarvis"` (**Enterprise plan only** — `403` otherwise), or `null` to clear. Person and agent halves are independent.
14260
16018
  *
@@ -14622,6 +16380,16 @@ declare const listKeys: <ThrowOnError extends boolean = false>(options?: Options
14622
16380
  * - **Scoped, expiring key** — `{ "type": "server", "env": "staging", "scopes": ["gates:evaluate"], "expiresInDays": 30 }` for a time-boxed integration.
14623
16381
  */
14624
16382
  declare const createKey: <ThrowOnError extends boolean = false>(options: Options<CreateKeyData, ThrowOnError>) => RequestResult<CreateKeyResponses, CreateKeyErrors, ThrowOnError>;
16383
+ /**
16384
+ * Update an API key's label
16385
+ *
16386
+ * Renames a key or re-notes what it is for. **Only `name` and `description` are editable** — everything that gives the key its authority (`type`, `env`, `scopes`, `expires_at`) is fixed at mint, because the worker derives the read env and permissions from the key itself. To change any of those, rotate: mint a replacement and revoke this one.
16387
+ *
16388
+ * Omitted fields are left untouched; send `null` to clear one. Returns the updated key row. Revoked keys can still be relabelled (the audit trail outlives the credential). Returns `404` if no such key exists in the project.
16389
+ *
16390
+ * **Use case:** A key minted by `shipeasy setup` carries an auto-composed provenance label — rename it to the service that actually holds it and note the rotation owner.
16391
+ */
16392
+ declare const updateKey: <ThrowOnError extends boolean = false>(options: Options<UpdateKeyData, ThrowOnError>) => RequestResult<UpdateKeyResponses, UpdateKeyErrors, ThrowOnError>;
14625
16393
  /**
14626
16394
  * Revoke an API key
14627
16395
  *
@@ -14642,6 +16410,46 @@ declare const revokeKey: <ThrowOnError extends boolean = false>(options: Options
14642
16410
  * **Use case:** Back a command-palette / quick-switcher in the dashboard, or look up the id of a resource by a fragment of its name before driving another API call.
14643
16411
  */
14644
16412
  declare const searchResources: <ThrowOnError extends boolean = false>(options?: Options<SearchResourcesData, ThrowOnError>) => RequestResult<SearchResourcesResponses, SearchResourcesErrors, ThrowOnError>;
16413
+ /**
16414
+ * List the project's tags
16415
+ *
16416
+ * Returns every tag in the project — the shared roster any item (queue items, flags, configs, kill switches, metrics, tracked errors, alert rules, experiments) can carry. Sorted by name.
16417
+ *
16418
+ * **Use case:** See which tags already exist before tagging an item, so you reuse `ios` instead of minting `iOS-app`.
16419
+ */
16420
+ declare const listTags: <ThrowOnError extends boolean = false>(options?: Options<ListTagsData, ThrowOnError>) => RequestResult<ListTagsResponses, ListTagsErrors, ThrowOnError>;
16421
+ /**
16422
+ * Read an item's tags
16423
+ *
16424
+ * Returns the tags attached to one item. The item is addressed by kind (`entityType`) plus its handle, so the same call reads tags off a queue item, a flag, a config, a kill switch, a metric, a tracked error, an alert rule, or an experiment.
16425
+ *
16426
+ * **Use case:** Check an item's current tags before editing them.
16427
+ */
16428
+ declare const getEntityTags: <ThrowOnError extends boolean = false>(options: Options<GetEntityTagsData, ThrowOnError>) => RequestResult<GetEntityTagsResponses, GetEntityTagsErrors, ThrowOnError>;
16429
+ /**
16430
+ * Add or remove tags on an item
16431
+ *
16432
+ * Edits an item's tags incrementally: attaches every name in `add` (creating project tags as needed) and detaches every name in `remove`, leaving the item's other tags untouched. Matching is case-insensitive; a name in both lists ends up removed.
16433
+ *
16434
+ * **Use cases**
16435
+ *
16436
+ * - **Add a tag** — `{ "add": ["regression"] }`.
16437
+ * - **Swap a tag** — `{ "add": ["p1"], "remove": ["p2"] }`.
16438
+ */
16439
+ declare const updateEntityTags: <ThrowOnError extends boolean = false>(options: Options<UpdateEntityTagsData, ThrowOnError>) => RequestResult<UpdateEntityTagsResponses, UpdateEntityTagsErrors, ThrowOnError>;
16440
+ /**
16441
+ * Replace an item's tags
16442
+ *
16443
+ * Replaces the item's whole tag set with `tags`: names not yet in the project are created, attached names not in the list are detached, and `[]` clears every tag. Names are deduped case-insensitively, reusing an existing tag's casing (sending `iOS` when `ios` exists attaches `ios`).
16444
+ *
16445
+ * **Use cases**
16446
+ *
16447
+ * - **Tag an item** — `{ "tags": ["checkout", "ios"] }`.
16448
+ * - **Clear tags** — `{ "tags": [] }`.
16449
+ *
16450
+ * To add or remove a few tags without restating the rest, use the incremental `PATCH` instead.
16451
+ */
16452
+ declare const setEntityTags: <ThrowOnError extends boolean = false>(options: Options<SetEntityTagsData, ThrowOnError>) => RequestResult<SetEntityTagsResponses, SetEntityTagsErrors, ThrowOnError>;
14645
16453
 
14646
16454
  /**
14647
16455
  * The `createClientConfig()` function will be called on client initialization
@@ -14682,4 +16490,4 @@ interface ConfigureOptions {
14682
16490
  */
14683
16491
  declare function configure({ apiKey, projectId, baseUrl }: ConfigureOptions): void;
14684
16492
 
14685
- export { type CreateConnectorData as $, type AckOpsItemData as A, type CreateAlertRuleData as B, type ClaudeTriggerConfig as C, type CreateAlertRuleError as D, type ErrorCode as E, type CreateAlertRuleErrors as F, type CreateAlertRuleRequest as G, type CreateAlertRuleResponse as H, type CreateAlertRuleResponse2 as I, type CreateAlertRuleResponses as J, type CreateAttributeData as K, type CreateAttributeError as L, type CreateAttributeErrors as M, type CreateAttributeRequest as N, type CreateAttributeResponse as O, type CreateAttributeResponse2 as P, type CreateAttributeResponses as Q, type CreateBugRequest as R, type CreateClaudeTriggerRequest as S, type CreateClientConfig as T, type CreateConfigData as U, type CreateConfigError as V, type CreateConfigErrors as W, type CreateConfigRequest as X, type CreateConfigResponse as Y, type CreateConfigResponse2 as Z, type CreateConfigResponses as _, type Error as a, type CreateKeyResponse2 as a$, type CreateConnectorError as a0, type CreateConnectorErrors as a1, type CreateConnectorRequest as a2, type CreateConnectorResponse as a3, type CreateConnectorResponse2 as a4, type CreateConnectorResponses as a5, type CreateCopilotTriggerRequest as a6, type CreateCursorTriggerRequest as a7, type CreateEventData as a8, type CreateEventError as a9, type CreateGateResponses as aA, type CreateGateTemplateData as aB, type CreateGateTemplateError as aC, type CreateGateTemplateErrors as aD, type CreateGateTemplateRequest as aE, type CreateGateTemplateResponse as aF, type CreateGateTemplateResponse2 as aG, type CreateGateTemplateResponses as aH, type CreateI18nDraftData as aI, type CreateI18nDraftError as aJ, type CreateI18nDraftErrors as aK, type CreateI18nDraftRequest as aL, type CreateI18nDraftResponse as aM, type CreateI18nDraftResponses as aN, type CreateI18nProfileData as aO, type CreateI18nProfileError as aP, type CreateI18nProfileErrors as aQ, type CreateI18nProfileRequest as aR, type CreateI18nProfileResponse as aS, type CreateI18nProfileResponse2 as aT, type CreateI18nProfileResponses as aU, type CreateJulesTriggerRequest as aV, type CreateKeyData as aW, type CreateKeyError as aX, type CreateKeyErrors as aY, type CreateKeyRequest as aZ, type CreateKeyResponse as a_, type CreateEventErrors as aa, type CreateEventRequest as ab, type CreateEventResponse as ac, type CreateEventResponse2 as ad, type CreateEventResponses as ae, type CreateExperimentData as af, type CreateExperimentError as ag, type CreateExperimentErrors as ah, type CreateExperimentReadoutData as ai, type CreateExperimentReadoutError as aj, type CreateExperimentReadoutErrors as ak, type CreateExperimentReadoutRequest as al, type CreateExperimentReadoutResponse as am, type CreateExperimentReadoutResponse2 as an, type CreateExperimentReadoutResponses as ao, type CreateExperimentRequest as ap, type CreateExperimentResponse as aq, type CreateExperimentResponse2 as ar, type CreateExperimentResponses as as, type CreateFeatureRequestRequest as at, type CreateGateData as au, type CreateGateError as av, type CreateGateErrors as aw, type CreateGateRequest as ax, type CreateGateResponse as ay, type CreateGateResponse2 as az, type AckOpsItemError as b, type DeleteAttributeResponses as b$, type CreateKeyResponses as b0, type CreateKillswitchData as b1, type CreateKillswitchError as b2, type CreateKillswitchErrors as b3, type CreateKillswitchRequest as b4, type CreateKillswitchResponse as b5, type CreateKillswitchResponse2 as b6, type CreateKillswitchResponses as b7, type CreateMetricData as b8, type CreateMetricError as b9, type CreateOpsItemResponse2 as bA, type CreateOpsItemResponses as bB, type CreateTriggerConnectorData as bC, type CreateTriggerConnectorError as bD, type CreateTriggerConnectorErrors as bE, type CreateTriggerConnectorRequest as bF, type CreateTriggerConnectorResponse as bG, type CreateTriggerConnectorResponses as bH, type CreateUniverseData as bI, type CreateUniverseError as bJ, type CreateUniverseErrors as bK, type CreateUniverseRequest as bL, type CreateUniverseResponse as bM, type CreateUniverseResponse2 as bN, type CreateUniverseResponses as bO, type CursorTriggerConfig as bP, type DeleteAlertRuleData as bQ, type DeleteAlertRuleError as bR, type DeleteAlertRuleErrors as bS, type DeleteAlertRuleResponse as bT, type DeleteAlertRuleResponse2 as bU, type DeleteAlertRuleResponses as bV, type DeleteAttributeData as bW, type DeleteAttributeError as bX, type DeleteAttributeErrors as bY, type DeleteAttributeResponse as bZ, type DeleteAttributeResponse2 as b_, type CreateMetricErrors as ba, type CreateMetricRequest as bb, type CreateMetricResponse as bc, type CreateMetricResponse2 as bd, type CreateMetricResponses as be, type CreateMetricWithQuery as bf, type CreateMetricWithQueryIr as bg, type CreateOAuthConnectorRequest as bh, type CreateOpsCommentData as bi, type CreateOpsCommentError as bj, type CreateOpsCommentErrors as bk, type CreateOpsCommentRequest as bl, type CreateOpsCommentResponse as bm, type CreateOpsCommentResponse2 as bn, type CreateOpsCommentResponses as bo, type CreateOpsInvestigationData as bp, type CreateOpsInvestigationError as bq, type CreateOpsInvestigationErrors as br, type CreateOpsInvestigationRequest as bs, type CreateOpsInvestigationResponse as bt, type CreateOpsInvestigationResponses as bu, type CreateOpsItemData as bv, type CreateOpsItemError as bw, type CreateOpsItemErrors as bx, type CreateOpsItemRequest as by, type CreateOpsItemResponse as bz, type AckOpsItemErrors as c, type DeleteOpsItemData as c$, type DeleteConfigData as c0, type DeleteConfigError as c1, type DeleteConfigErrors as c2, type DeleteConfigResponse as c3, type DeleteConfigResponse2 as c4, type DeleteConfigResponses as c5, type DeleteConnectorData as c6, type DeleteConnectorError as c7, type DeleteConnectorErrors as c8, type DeleteConnectorResponse as c9, type DeleteI18nDraftData as cA, type DeleteI18nDraftError as cB, type DeleteI18nDraftErrors as cC, type DeleteI18nDraftResponse as cD, type DeleteI18nDraftResponses as cE, type DeleteI18nKeyData as cF, type DeleteI18nKeyError as cG, type DeleteI18nKeyErrors as cH, type DeleteI18nKeyResponse as cI, type DeleteI18nKeyResponses as cJ, type DeleteI18nProfileData as cK, type DeleteI18nProfileError as cL, type DeleteI18nProfileErrors as cM, type DeleteI18nProfileResponse as cN, type DeleteI18nProfileResponses as cO, type DeleteKillswitchData as cP, type DeleteKillswitchError as cQ, type DeleteKillswitchErrors as cR, type DeleteKillswitchResponse as cS, type DeleteKillswitchResponse2 as cT, type DeleteKillswitchResponses as cU, type DeleteMetricData as cV, type DeleteMetricError as cW, type DeleteMetricErrors as cX, type DeleteMetricResponse as cY, type DeleteMetricResponse2 as cZ, type DeleteMetricResponses as c_, type DeleteConnectorResponse2 as ca, type DeleteConnectorResponses as cb, type DeleteEventData as cc, type DeleteEventError as cd, type DeleteEventErrors as ce, type DeleteEventResponse as cf, type DeleteEventResponse2 as cg, type DeleteEventResponses as ch, type DeleteExperimentData as ci, type DeleteExperimentError as cj, type DeleteExperimentErrors as ck, type DeleteExperimentResponse as cl, type DeleteExperimentResponse2 as cm, type DeleteExperimentResponses as cn, type DeleteGateData as co, type DeleteGateError as cp, type DeleteGateErrors as cq, type DeleteGateResponse as cr, type DeleteGateResponse2 as cs, type DeleteGateResponses as ct, type DeleteGateTemplateData as cu, type DeleteGateTemplateError as cv, type DeleteGateTemplateErrors as cw, type DeleteGateTemplateResponse as cx, type DeleteGateTemplateResponse2 as cy, type DeleteGateTemplateResponses as cz, type AckOpsItemRequest as d, type GetAttributeErrors as d$, type DeleteOpsItemError as d0, type DeleteOpsItemErrors as d1, type DeleteOpsItemResponse as d2, type DeleteOpsItemResponse2 as d3, type DeleteOpsItemResponses as d4, type DeleteUniverseData as d5, type DeleteUniverseError as d6, type DeleteUniverseErrors as d7, type DeleteUniverseResponse as d8, type DeleteUniverseResponse2 as d9, type ErrorSeriesResponse as dA, type ExperimentApiRow as dB, type ExperimentInlineMetric as dC, type ExperimentReadoutApiRow as dD, type ExperimentReadoutCaveat as dE, type ExperimentReadoutMetric as dF, type ExperimentResultRow as dG, type FileErrorTicketData as dH, type FileErrorTicketError as dI, type FileErrorTicketErrors as dJ, type FileErrorTicketResponse as dK, type FileErrorTicketResponse2 as dL, type FileErrorTicketResponses as dM, type FireConnectorData as dN, type FireConnectorError as dO, type FireConnectorErrors as dP, type FireConnectorRequest as dQ, type FireConnectorResponse as dR, type FireConnectorResponse2 as dS, type FireConnectorResponses as dT, type Folder as dU, type GateApiRow as dV, type GateTemplate as dW, type GateTemplateRule as dX, type GateTemplateRuleResponse as dY, type GetAttributeData as dZ, type GetAttributeError as d_, type DeleteUniverseResponses as da, type DisableGateData as db, type DisableGateError as dc, type DisableGateErrors as dd, type DisableGateResponse as de, type DisableGateResponse2 as df, type DisableGateResponses as dg, type DiscardConfigDraftData as dh, type DiscardConfigDraftError as di, type DiscardConfigDraftErrors as dj, type DiscardConfigDraftRequest as dk, type DiscardConfigDraftResponse as dl, type DiscardConfigDraftResponse2 as dm, type DiscardConfigDraftResponses as dn, type Domain as dp, type EnableGateData as dq, type EnableGateError as dr, type EnableGateErrors as ds, type EnableGateResponse as dt, type EnableGateResponse2 as du, type EnableGateResponses as dv, type Env as dw, type ErrorOccurrence as dx, type ErrorRecord as dy, type ErrorSeriesRequest as dz, type AckOpsItemResponse as e, type GetGateTemplateData as e$, type GetAttributeResponse as e0, type GetAttributeResponse2 as e1, type GetAttributeResponses as e2, type GetConfigData as e3, type GetConfigError as e4, type GetConfigErrors as e5, type GetConfigResponse as e6, type GetConfigResponse2 as e7, type GetConfigResponses as e8, type GetConnectorData as e9, type GetExperimentData as eA, type GetExperimentError as eB, type GetExperimentErrors as eC, type GetExperimentReadoutData as eD, type GetExperimentReadoutError as eE, type GetExperimentReadoutErrors as eF, type GetExperimentReadoutResponse as eG, type GetExperimentReadoutResponses as eH, type GetExperimentResponse as eI, type GetExperimentResponses as eJ, type GetExperimentResultsData as eK, type GetExperimentResultsError as eL, type GetExperimentResultsErrors as eM, type GetExperimentResultsResponse as eN, type GetExperimentResultsResponse2 as eO, type GetExperimentResultsResponses as eP, type GetExperimentTimeseriesData as eQ, type GetExperimentTimeseriesError as eR, type GetExperimentTimeseriesErrors as eS, type GetExperimentTimeseriesResponse as eT, type GetExperimentTimeseriesResponse2 as eU, type GetExperimentTimeseriesResponses as eV, type GetGateData as eW, type GetGateError as eX, type GetGateErrors as eY, type GetGateResponse as eZ, type GetGateResponses as e_, type GetConnectorError as ea, type GetConnectorErrors as eb, type GetConnectorResponse as ec, type GetConnectorResponses as ed, type GetCurrentProjectData as ee, type GetCurrentProjectError as ef, type GetCurrentProjectErrors as eg, type GetCurrentProjectResponse as eh, type GetCurrentProjectResponse2 as ei, type GetCurrentProjectResponses as ej, type GetErrorData as ek, type GetErrorError as el, type GetErrorErrors as em, type GetErrorResponse as en, type GetErrorResponses as eo, type GetErrorSeriesData as ep, type GetErrorSeriesError as eq, type GetErrorSeriesErrors as er, type GetErrorSeriesResponse as es, type GetErrorSeriesResponses as et, type GetEventData as eu, type GetEventError as ev, type GetEventErrors as ew, type GetEventResponse as ex, type GetEventResponse2 as ey, type GetEventResponses as ez, type AckOpsItemResponse2 as f, type ListAttributesResponse2 as f$, type GetGateTemplateError as f0, type GetGateTemplateErrors as f1, type GetGateTemplateResponse as f2, type GetGateTemplateResponses as f3, type GetKillswitchData as f4, type GetKillswitchError as f5, type GetKillswitchErrors as f6, type GetKillswitchResponse as f7, type GetKillswitchResponse2 as f8, type GetKillswitchResponses as f9, type I18nDraft as fA, type JulesTriggerConfig as fB, type KeyRecord as fC, type KillswitchValue as fD, type LinkPrToOpsItemData as fE, type LinkPrToOpsItemError as fF, type LinkPrToOpsItemErrors as fG, type LinkPrToOpsItemRequest as fH, type LinkPrToOpsItemResponse as fI, type LinkPrToOpsItemResponse2 as fJ, type LinkPrToOpsItemResponses as fK, type ListAlertRulesData as fL, type ListAlertRulesError as fM, type ListAlertRulesErrors as fN, type ListAlertRulesResponse as fO, type ListAlertRulesResponse2 as fP, type ListAlertRulesResponses as fQ, type ListAlertsData as fR, type ListAlertsError as fS, type ListAlertsErrors as fT, type ListAlertsResponse as fU, type ListAlertsResponse2 as fV, type ListAlertsResponses as fW, type ListAttributesData as fX, type ListAttributesError as fY, type ListAttributesErrors as fZ, type ListAttributesResponse as f_, type GetMetricData as fa, type GetMetricError as fb, type GetMetricErrors as fc, type GetMetricResponse as fd, type GetMetricResponse2 as fe, type GetMetricResponses as ff, type GetMetricSeriesData as fg, type GetMetricSeriesError as fh, type GetMetricSeriesErrors as fi, type GetMetricSeriesRequest as fj, type GetMetricSeriesResponse as fk, type GetMetricSeriesResponse2 as fl, type GetMetricSeriesResponses as fm, type GetOpsItemData as fn, type GetOpsItemError as fo, type GetOpsItemErrors as fp, type GetOpsItemResponse as fq, type GetOpsItemResponse2 as fr, type GetOpsItemResponses as fs, type GetProjectData as ft, type GetProjectError as fu, type GetProjectErrors as fv, type GetProjectResponse as fw, type GetProjectResponses as fx, type GithubConnectorData as fy, type GithubPrLink as fz, type AckOpsItemResponses as g, type ListI18nDraftKeysErrors as g$, type ListAttributesResponses as g0, type ListConfigActivityData as g1, type ListConfigActivityError as g2, type ListConfigActivityErrors as g3, type ListConfigActivityResponse as g4, type ListConfigActivityResponse2 as g5, type ListConfigActivityResponses as g6, type ListConfigVersionsData as g7, type ListConfigVersionsError as g8, type ListConfigVersionsErrors as g9, type ListEventsResponses as gA, type ListExperimentsData as gB, type ListExperimentsError as gC, type ListExperimentsErrors as gD, type ListExperimentsResponse as gE, type ListExperimentsResponse2 as gF, type ListExperimentsResponses as gG, type ListGateActivityData as gH, type ListGateActivityError as gI, type ListGateActivityErrors as gJ, type ListGateActivityResponse as gK, type ListGateActivityResponse2 as gL, type ListGateActivityResponses as gM, type ListGateTemplatesData as gN, type ListGateTemplatesError as gO, type ListGateTemplatesErrors as gP, type ListGateTemplatesResponse as gQ, type ListGateTemplatesResponse2 as gR, type ListGateTemplatesResponses as gS, type ListGatesData as gT, type ListGatesError as gU, type ListGatesErrors as gV, type ListGatesResponse as gW, type ListGatesResponse2 as gX, type ListGatesResponses as gY, type ListI18nDraftKeysData as gZ, type ListI18nDraftKeysError as g_, type ListConfigVersionsResponse as ga, type ListConfigVersionsResponse2 as gb, type ListConfigVersionsResponses as gc, type ListConfigsData as gd, type ListConfigsError as ge, type ListConfigsErrors as gf, type ListConfigsResponse as gg, type ListConfigsResponse2 as gh, type ListConfigsResponses as gi, type ListConnectorsData as gj, type ListConnectorsError as gk, type ListConnectorsErrors as gl, type ListConnectorsResponse as gm, type ListConnectorsResponse2 as gn, type ListConnectorsResponses as go, type ListErrorsData as gp, type ListErrorsError as gq, type ListErrorsErrors as gr, type ListErrorsResponse as gs, type ListErrorsResponse2 as gt, type ListErrorsResponses as gu, type ListEventsData as gv, type ListEventsError as gw, type ListEventsErrors as gx, type ListEventsResponse as gy, type ListEventsResponse2 as gz, type AlertApiRow as h, type ListOpsItemsData as h$, type ListI18nDraftKeysResponse as h0, type ListI18nDraftKeysResponse2 as h1, type ListI18nDraftKeysResponses as h2, type ListI18nDraftsData as h3, type ListI18nDraftsError as h4, type ListI18nDraftsErrors as h5, type ListI18nDraftsResponse as h6, type ListI18nDraftsResponse2 as h7, type ListI18nDraftsResponses as h8, type ListI18nKeysData as h9, type ListMetricExperimentsResponse as hA, type ListMetricExperimentsResponse2 as hB, type ListMetricExperimentsResponses as hC, type ListMetricsData as hD, type ListMetricsError as hE, type ListMetricsErrors as hF, type ListMetricsResponse as hG, type ListMetricsResponse2 as hH, type ListMetricsResponses as hI, type ListOpsAgentsData as hJ, type ListOpsAgentsError as hK, type ListOpsAgentsErrors as hL, type ListOpsAgentsResponse as hM, type ListOpsAgentsResponse2 as hN, type ListOpsAgentsResponses as hO, type ListOpsCommentsData as hP, type ListOpsCommentsError as hQ, type ListOpsCommentsErrors as hR, type ListOpsCommentsResponse as hS, type ListOpsCommentsResponse2 as hT, type ListOpsCommentsResponses as hU, type ListOpsInvestigationsData as hV, type ListOpsInvestigationsError as hW, type ListOpsInvestigationsErrors as hX, type ListOpsInvestigationsResponse as hY, type ListOpsInvestigationsResponse2 as hZ, type ListOpsInvestigationsResponses as h_, type ListI18nKeysError as ha, type ListI18nKeysErrors as hb, type ListI18nKeysResponse as hc, type ListI18nKeysResponse2 as hd, type ListI18nKeysResponses as he, type ListI18nProfilesData as hf, type ListI18nProfilesError as hg, type ListI18nProfilesErrors as hh, type ListI18nProfilesResponse as hi, type ListI18nProfilesResponse2 as hj, type ListI18nProfilesResponses as hk, type ListKeysData as hl, type ListKeysError as hm, type ListKeysErrors as hn, type ListKeysResponse as ho, type ListKeysResponse2 as hp, type ListKeysResponses as hq, type ListKillswitchesData as hr, type ListKillswitchesError as hs, type ListKillswitchesErrors as ht, type ListKillswitchesResponse as hu, type ListKillswitchesResponse2 as hv, type ListKillswitchesResponses as hw, type ListMetricExperimentsData as hx, type ListMetricExperimentsError as hy, type ListMetricExperimentsErrors as hz, type ApproveEventData as i, type PublishConfigDraftData as i$, type ListOpsItemsError as i0, type ListOpsItemsErrors as i1, type ListOpsItemsResponse as i2, type ListOpsItemsResponse2 as i3, type ListOpsItemsResponses as i4, type ListSlackChannelsData as i5, type ListSlackChannelsError as i6, type ListSlackChannelsErrors as i7, type ListSlackChannelsResponse as i8, type ListSlackChannelsResponse2 as i9, type OkResponse as iA, type OpsAgentProfile as iB, type OpsAlertContext as iC, type OpsAlertMetricSummary as iD, type OpsAlertRuleSummary as iE, type OpsBrowserContext as iF, type OpsComment as iG, type OpsCommentAuthorType as iH, type OpsErrorContext as iI, type OpsInvestigation as iJ, type OpsInvestigationState as iK, type OpsItemAttachment as iL, type OpsItemContext as iM, type OpsItemNotifyOrNull as iN, type OpsItemOwner as iO, type OpsItemPriority as iP, type OpsItemPriorityOrNull as iQ, type OpsItemRelated as iR, type OpsItemStatus as iS, type OpsMeasurePlanContext as iT, type OpsRun as iU, type OpsRunAction as iV, type OpsRunActionOrNull as iW, type Options$1 as iX, type PaginationCursor as iY, type PaginationLimit as iZ, type ProjectId as i_, type ListSlackChannelsResponses as ia, type ListUniversesData as ib, type ListUniversesError as ic, type ListUniversesErrors as id, type ListUniversesResponse as ie, type ListUniversesResponse2 as ig, type ListUniversesResponses as ih, type MeasurePlanResource as ii, type MeasurePlanStep as ij, type MetricDefaultMinEffectOfInterest as ik, type MetricDirection as il, type MetricDisplayUnit as im, type MetricEventName as io, type MetricName as ip, type MetricQueryDsl as iq, type MetricWinsorizePct as ir, type NotificationTarget as is, type NotifyOpsData as it, type NotifyOpsError as iu, type NotifyOpsErrors as iv, type NotifyOpsRequest as iw, type NotifyOpsResponse as ix, type NotifyOpsResponse2 as iy, type NotifyOpsResponses as iz, type ApproveEventError as j, type SetExperimentStatusError as j$, type PublishConfigDraftError as j0, type PublishConfigDraftErrors as j1, type PublishConfigDraftRequest as j2, type PublishConfigDraftResponse as j3, type PublishConfigDraftResponse2 as j4, type PublishConfigDraftResponses as j5, type PublishI18nProfileData as j6, type PublishI18nProfileError as j7, type PublishI18nProfileErrors as j8, type PublishI18nProfileRequest as j9, type RevokeKeyError as jA, type RevokeKeyErrors as jB, type RevokeKeyResponse as jC, type RevokeKeyResponse2 as jD, type RevokeKeyResponses as jE, type SaveConfigDraftData as jF, type SaveConfigDraftError as jG, type SaveConfigDraftErrors as jH, type SaveConfigDraftRequest as jI, type SaveConfigDraftResponse as jJ, type SaveConfigDraftResponse2 as jK, type SaveConfigDraftResponses as jL, type SearchHit as jM, type SearchResourcesData as jN, type SearchResourcesError as jO, type SearchResourcesErrors as jP, type SearchResourcesResponse as jQ, type SearchResourcesResponses as jR, type SearchResponse as jS, type SetExperimentMetricsData as jT, type SetExperimentMetricsError as jU, type SetExperimentMetricsErrors as jV, type SetExperimentMetricsRequest as jW, type SetExperimentMetricsResponse as jX, type SetExperimentMetricsResponse2 as jY, type SetExperimentMetricsResponses as jZ, type SetExperimentStatusData as j_, type PublishI18nProfileResponse as ja, type PublishI18nProfileResponse2 as jb, type PublishI18nProfileResponses as jc, type PushI18nKeysData as jd, type PushI18nKeysError as je, type PushI18nKeysErrors as jf, type PushI18nKeysRequest as jg, type PushI18nKeysResponse as jh, type PushI18nKeysResponse2 as ji, type PushI18nKeysResponses as jj, type Q as jk, type QueryIr as jl, type ReanalyzeExperimentData as jm, type ReanalyzeExperimentError as jn, type ReanalyzeExperimentErrors as jo, type ReanalyzeExperimentResponse as jp, type ReanalyzeExperimentResponse2 as jq, type ReanalyzeExperimentResponses as jr, type RequestResult as js, type ResolveErrorData as jt, type ResolveErrorError as ju, type ResolveErrorErrors as jv, type ResolveErrorResponse as jw, type ResolveErrorResponses as jx, type ResourceId as jy, type RevokeKeyData as jz, type ApproveEventErrors as k, type UpdateAttributeErrors as k$, type SetExperimentStatusErrors as k0, type SetExperimentStatusRequest as k1, type SetExperimentStatusResponse as k2, type SetExperimentStatusResponse2 as k3, type SetExperimentStatusResponses as k4, type SetI18nLabelData as k5, type SetI18nLabelError as k6, type SetI18nLabelErrors as k7, type SetI18nLabelRequest as k8, type SetI18nLabelResponse as k9, type UnarchiveMetricResponse as kA, type UnarchiveMetricResponse2 as kB, type UnarchiveMetricResponses as kC, type UniverseParam as kD, type UniverseParamSchema as kE, type UnsetKillswitchSwitchData as kF, type UnsetKillswitchSwitchError as kG, type UnsetKillswitchSwitchErrors as kH, type UnsetKillswitchSwitchRequest as kI, type UnsetKillswitchSwitchResponse as kJ, type UnsetKillswitchSwitchResponse2 as kK, type UnsetKillswitchSwitchResponses as kL, type UpdateAlertData as kM, type UpdateAlertError as kN, type UpdateAlertErrors as kO, type UpdateAlertRequest as kP, type UpdateAlertResponse as kQ, type UpdateAlertResponses as kR, type UpdateAlertRuleData as kS, type UpdateAlertRuleError as kT, type UpdateAlertRuleErrors as kU, type UpdateAlertRuleRequest as kV, type UpdateAlertRuleResponse as kW, type UpdateAlertRuleResponse2 as kX, type UpdateAlertRuleResponses as kY, type UpdateAttributeData as kZ, type UpdateAttributeError as k_, type SetI18nLabelResponse2 as ka, type SetI18nLabelResponses as kb, type SetKillswitchSwitchData as kc, type SetKillswitchSwitchError as kd, type SetKillswitchSwitchErrors as ke, type SetKillswitchSwitchRequest as kf, type SetKillswitchSwitchResponse as kg, type SetKillswitchSwitchResponse2 as kh, type SetKillswitchSwitchResponses as ki, type SetKillswitchValueData as kj, type SetKillswitchValueError as kk, type SetKillswitchValueErrors as kl, type SetKillswitchValueRequest as km, type SetKillswitchValueResponse as kn, type SetKillswitchValueResponse2 as ko, type SetKillswitchValueResponses as kp, type SlackConnectorData as kq, type TestConnectorData as kr, type TestConnectorError as ks, type TestConnectorErrors as kt, type TestConnectorResponse as ku, type TestConnectorResponse2 as kv, type TestConnectorResponses as kw, type UnarchiveMetricData as kx, type UnarchiveMetricError as ky, type UnarchiveMetricErrors as kz, type ApproveEventRequest as l, type UpdateGateTemplateResponses as l$, type UpdateAttributeRequest as l0, type UpdateAttributeResponse as l1, type UpdateAttributeResponse2 as l2, type UpdateAttributeResponses as l3, type UpdateBugRequest as l4, type UpdateClaudeTriggerRequest as l5, type UpdateConfigData as l6, type UpdateConfigError as l7, type UpdateConfigErrors as l8, type UpdateConfigRequest as l9, type UpdateEventError as lA, type UpdateEventErrors as lB, type UpdateEventRequest as lC, type UpdateEventResponse as lD, type UpdateEventResponse2 as lE, type UpdateEventResponses as lF, type UpdateExperimentData as lG, type UpdateExperimentError as lH, type UpdateExperimentErrors as lI, type UpdateExperimentRequest as lJ, type UpdateExperimentResponse as lK, type UpdateExperimentResponse2 as lL, type UpdateExperimentResponses as lM, type UpdateFeatureRequestRequest as lN, type UpdateGateData as lO, type UpdateGateError as lP, type UpdateGateErrors as lQ, type UpdateGateRequest as lR, type UpdateGateResponse as lS, type UpdateGateResponse2 as lT, type UpdateGateResponses as lU, type UpdateGateTemplateData as lV, type UpdateGateTemplateError as lW, type UpdateGateTemplateErrors as lX, type UpdateGateTemplateRequest as lY, type UpdateGateTemplateResponse as lZ, type UpdateGateTemplateResponse2 as l_, type UpdateConfigResponse as la, type UpdateConfigResponse2 as lb, type UpdateConfigResponses as lc, type UpdateConfigSchemaData as ld, type UpdateConfigSchemaError as le, type UpdateConfigSchemaErrors as lf, type UpdateConfigSchemaRequest as lg, type UpdateConfigSchemaResponse as lh, type UpdateConfigSchemaResponse2 as li, type UpdateConfigSchemaResponses as lj, type UpdateConnectorData as lk, type UpdateConnectorError as ll, type UpdateConnectorErrors as lm, type UpdateConnectorRequest as ln, type UpdateConnectorResponse as lo, type UpdateConnectorResponse2 as lp, type UpdateConnectorResponses as lq, type UpdateCopilotTriggerRequest as lr, type UpdateCursorTriggerRequest as ls, type UpdateErrorStatusData as lt, type UpdateErrorStatusError as lu, type UpdateErrorStatusErrors as lv, type UpdateErrorStatusRequest as lw, type UpdateErrorStatusResponse as lx, type UpdateErrorStatusResponses as ly, type UpdateEventData as lz, type ApproveEventResponse as m, type UpsertI18nDraftKeyData as m$, type UpdateI18nDraftData as m0, type UpdateI18nDraftError as m1, type UpdateI18nDraftErrors as m2, type UpdateI18nDraftRequest as m3, type UpdateI18nDraftResponse as m4, type UpdateI18nDraftResponses as m5, type UpdateI18nKeyData as m6, type UpdateI18nKeyError as m7, type UpdateI18nKeyErrors as m8, type UpdateI18nKeyRequest as m9, type UpdateOpsItemData as mA, type UpdateOpsItemError as mB, type UpdateOpsItemErrors as mC, type UpdateOpsItemRequest as mD, type UpdateOpsItemResponse as mE, type UpdateOpsItemResponse2 as mF, type UpdateOpsItemResponses as mG, type UpdateOpsItemStatusRequest as mH, type UpdateProjectData as mI, type UpdateProjectError as mJ, type UpdateProjectErrors as mK, type UpdateProjectRequest as mL, type UpdateProjectResponse as mM, type UpdateProjectResponses as mN, type UpdateTriggerConnectorData as mO, type UpdateTriggerConnectorError as mP, type UpdateTriggerConnectorErrors as mQ, type UpdateTriggerConnectorRequest as mR, type UpdateTriggerConnectorResponse as mS, type UpdateTriggerConnectorResponses as mT, type UpdateUniverseData as mU, type UpdateUniverseError as mV, type UpdateUniverseErrors as mW, type UpdateUniverseRequest as mX, type UpdateUniverseResponse as mY, type UpdateUniverseResponse2 as mZ, type UpdateUniverseResponses as m_, type UpdateI18nKeyResponse as ma, type UpdateI18nKeyResponse2 as mb, type UpdateI18nKeyResponses as mc, type UpdateJulesTriggerRequest as md, type UpdateKillswitchData as me, type UpdateKillswitchError as mf, type UpdateKillswitchErrors as mg, type UpdateKillswitchRequest as mh, type UpdateKillswitchResponse as mi, type UpdateKillswitchResponse2 as mj, type UpdateKillswitchResponses as mk, type UpdateMetricData as ml, type UpdateMetricError as mm, type UpdateMetricErrors as mn, type UpdateMetricFields as mo, type UpdateMetricRequest as mp, type UpdateMetricResponse as mq, type UpdateMetricResponses as mr, type UpdateMetricWithQuery as ms, type UpdateMetricWithQueryIr as mt, type UpdateOpsInvestigationData as mu, type UpdateOpsInvestigationError as mv, type UpdateOpsInvestigationErrors as mw, type UpdateOpsInvestigationRequest as mx, type UpdateOpsInvestigationResponse as my, type UpdateOpsInvestigationResponses as mz, type ApproveEventResponse2 as n, fireConnector as n$, type UpsertI18nDraftKeyError as n0, type UpsertI18nDraftKeyErrors as n1, type UpsertI18nDraftKeyRequest as n2, type UpsertI18nDraftKeyResponse as n3, type UpsertI18nDraftKeyResponses as n4, type UpsertI18nKeysData as n5, type UpsertI18nKeysError as n6, type UpsertI18nKeysErrors as n7, type UpsertI18nKeysRequest as n8, type UpsertI18nKeysResponse as n9, createKey as nA, createKillswitch as nB, createMetric as nC, createOpsComment as nD, createOpsInvestigation as nE, createOpsItem as nF, createTriggerConnector as nG, createUniverse as nH, deleteAlertRule as nI, deleteAttribute as nJ, deleteConfig as nK, deleteConnector as nL, deleteEvent as nM, deleteExperiment as nN, deleteGate as nO, deleteGateTemplate as nP, deleteI18nDraft as nQ, deleteI18nKey as nR, deleteI18nProfile as nS, deleteKillswitch as nT, deleteMetric as nU, deleteOpsItem as nV, deleteUniverse as nW, disableGate as nX, discardConfigDraft as nY, enableGate as nZ, fileErrorTicket as n_, type UpsertI18nKeysResponse2 as na, type UpsertI18nKeysResponses as nb, type UpsertProjectData as nc, type UpsertProjectError as nd, type UpsertProjectErrors as ne, type UpsertProjectRequest as nf, type UpsertProjectResponse as ng, type UpsertProjectResponse2 as nh, type UpsertProjectResponses as ni, ackOpsItem as nj, approveEvent as nk, client as nl, configure as nm, createAlertRule as nn, createAttribute as no, createClient as np, createConfig$1 as nq, createConfig as nr, createConnector as ns, createEvent as nt, createExperiment as nu, createExperimentReadout as nv, createGate as nw, createGateTemplate as nx, createI18nDraft as ny, createI18nProfile as nz, type ApproveEventResponses as o, updateAlert as o$, getAttribute as o0, getConfig as o1, getConnector as o2, getCurrentProject as o3, getError as o4, getErrorSeries as o5, getEvent as o6, getExperiment as o7, getExperimentReadout as o8, getExperimentResults as o9, listKeys as oA, listKillswitches as oB, listMetricExperiments as oC, listMetrics as oD, listOpsAgents as oE, listOpsComments as oF, listOpsInvestigations as oG, listOpsItems as oH, listSlackChannels as oI, listUniverses as oJ, notifyOps as oK, publishConfigDraft as oL, publishI18nProfile as oM, pushI18nKeys as oN, reanalyzeExperiment as oO, resolveError as oP, revokeKey as oQ, saveConfigDraft as oR, searchResources as oS, setExperimentMetrics as oT, setExperimentStatus as oU, setI18nLabel as oV, setKillswitchSwitch as oW, setKillswitchValue as oX, testConnector as oY, unarchiveMetric as oZ, unsetKillswitchSwitch as o_, getExperimentTimeseries as oa, getGate as ob, getGateTemplate as oc, getKillswitch as od, getMetric as oe, getMetricSeries as of, getOpsItem as og, getProject as oh, linkPrToOpsItem as oi, listAlertRules as oj, listAlerts as ok, listAttributes as ol, listConfigActivity as om, listConfigVersions as on, listConfigs as oo, listConnectors as op, listErrors as oq, listEvents as or, listExperiments as os, listGateActivity as ot, listGateTemplates as ou, listGates as ov, listI18nDraftKeys as ow, listI18nDrafts as ox, listI18nKeys as oy, listI18nProfiles as oz, type AttributeType as p, updateAlertRule as p0, updateAttribute as p1, updateConfig as p2, updateConfigSchema as p3, updateConnector as p4, updateErrorStatus as p5, updateEvent as p6, updateExperiment as p7, updateGate as p8, updateGateTemplate as p9, updateI18nDraft as pa, updateI18nKey as pb, updateKillswitch as pc, updateMetric as pd, updateOpsInvestigation as pe, updateOpsItem as pf, updateProject as pg, updateTriggerConnector as ph, updateUniverse as pi, upsertI18nDraftKey as pj, upsertI18nKeys as pk, upsertProject as pl, type Client as q, type ClientOptions as r, type Config as s, type ConfigName as t, type ConfigureOptions as u, type ConnectorData as v, type ConnectorEvent as w, type ConnectorProvider as x, type ConnectorRecord as y, type CopilotTriggerConfig as z };
16493
+ export { type ConnectorRecord as $, type AckOpsItemData as A, type ApproveEventResponse2 as B, type ApproveEventResponses as C, type AskOpsQuestionInput as D, type ErrorCode as E, type AskOpsQuestionsData as F, type AskOpsQuestionsError as G, type AskOpsQuestionsErrors as H, type AskOpsQuestionsRequest as I, type AskOpsQuestionsResponse as J, type AskOpsQuestionsResponse2 as K, type AskOpsQuestionsResponses as L, type AttributeType as M, type CancelOpsQuestionData as N, type CancelOpsQuestionError as O, type CancelOpsQuestionErrors as P, type CancelOpsQuestionResponse as Q, type CancelOpsQuestionResponses as R, type ClaudeTriggerConfig as S, type Client as T, type ClientOptions as U, type Config as V, type ConfigName as W, type ConfigureOptions as X, type ConnectorData as Y, type ConnectorEvent as Z, type ConnectorProvider as _, type Error as a, type CreateGateResponses as a$, type CopilotTriggerConfig as a0, type CopilotTriggerRepo as a1, type CreateAlertRuleData as a2, type CreateAlertRuleError as a3, type CreateAlertRuleErrors as a4, type CreateAlertRuleRequest as a5, type CreateAlertRuleResponse as a6, type CreateAlertRuleResponse2 as a7, type CreateAlertRuleResponses as a8, type CreateAttributeData as a9, type CreateEventError as aA, type CreateEventErrors as aB, type CreateEventRequest as aC, type CreateEventResponse as aD, type CreateEventResponse2 as aE, type CreateEventResponses as aF, type CreateExperimentData as aG, type CreateExperimentError as aH, type CreateExperimentErrors as aI, type CreateExperimentReadoutData as aJ, type CreateExperimentReadoutError as aK, type CreateExperimentReadoutErrors as aL, type CreateExperimentReadoutRequest as aM, type CreateExperimentReadoutResponse as aN, type CreateExperimentReadoutResponse2 as aO, type CreateExperimentReadoutResponses as aP, type CreateExperimentRequest as aQ, type CreateExperimentResponse as aR, type CreateExperimentResponse2 as aS, type CreateExperimentResponses as aT, type CreateFeatureRequestRequest as aU, type CreateGateData as aV, type CreateGateError as aW, type CreateGateErrors as aX, type CreateGateRequest as aY, type CreateGateResponse as aZ, type CreateGateResponse2 as a_, type CreateAttributeError as aa, type CreateAttributeErrors as ab, type CreateAttributeRequest as ac, type CreateAttributeResponse as ad, type CreateAttributeResponse2 as ae, type CreateAttributeResponses as af, type CreateBugRequest as ag, type CreateClaudeTriggerRequest as ah, type CreateClientConfig as ai, type CreateConfigData as aj, type CreateConfigError as ak, type CreateConfigErrors as al, type CreateConfigRequest as am, type CreateConfigResponse as an, type CreateConfigResponse2 as ao, type CreateConfigResponses as ap, type CreateConnectorData as aq, type CreateConnectorError as ar, type CreateConnectorErrors as as, type CreateConnectorRequest as at, type CreateConnectorResponse as au, type CreateConnectorResponse2 as av, type CreateConnectorResponses as aw, type CreateCopilotTriggerRequest as ax, type CreateCursorTriggerRequest as ay, type CreateEventData as az, type AckOpsItemError as b, type CreateOpsItemResponse2 as b$, type CreateGateTemplateData as b0, type CreateGateTemplateError as b1, type CreateGateTemplateErrors as b2, type CreateGateTemplateRequest as b3, type CreateGateTemplateResponse as b4, type CreateGateTemplateResponse2 as b5, type CreateGateTemplateResponses as b6, type CreateI18nDraftData as b7, type CreateI18nDraftError as b8, type CreateI18nDraftErrors as b9, type CreateMetricError as bA, type CreateMetricErrors as bB, type CreateMetricRequest as bC, type CreateMetricResponse as bD, type CreateMetricResponse2 as bE, type CreateMetricResponses as bF, type CreateMetricWithQuery as bG, type CreateMetricWithQueryIr as bH, type CreateOAuthConnectorRequest as bI, type CreateOpsCommentData as bJ, type CreateOpsCommentError as bK, type CreateOpsCommentErrors as bL, type CreateOpsCommentRequest as bM, type CreateOpsCommentResponse as bN, type CreateOpsCommentResponse2 as bO, type CreateOpsCommentResponses as bP, type CreateOpsInvestigationData as bQ, type CreateOpsInvestigationError as bR, type CreateOpsInvestigationErrors as bS, type CreateOpsInvestigationRequest as bT, type CreateOpsInvestigationResponse as bU, type CreateOpsInvestigationResponses as bV, type CreateOpsItemData as bW, type CreateOpsItemError as bX, type CreateOpsItemErrors as bY, type CreateOpsItemRequest as bZ, type CreateOpsItemResponse as b_, type CreateI18nDraftRequest as ba, type CreateI18nDraftResponse as bb, type CreateI18nDraftResponses as bc, type CreateI18nProfileData as bd, type CreateI18nProfileError as be, type CreateI18nProfileErrors as bf, type CreateI18nProfileRequest as bg, type CreateI18nProfileResponse as bh, type CreateI18nProfileResponse2 as bi, type CreateI18nProfileResponses as bj, type CreateJulesTriggerRequest as bk, type CreateKeyData as bl, type CreateKeyError as bm, type CreateKeyErrors as bn, type CreateKeyRequest as bo, type CreateKeyResponse as bp, type CreateKeyResponse2 as bq, type CreateKeyResponses as br, type CreateKillswitchData as bs, type CreateKillswitchError as bt, type CreateKillswitchErrors as bu, type CreateKillswitchRequest as bv, type CreateKillswitchResponse as bw, type CreateKillswitchResponse2 as bx, type CreateKillswitchResponses as by, type CreateMetricData as bz, type AckOpsItemErrors as c, type DeleteExperimentResponse2 as c$, type CreateOpsItemResponses as c0, type CreatePublicBugData as c1, type CreatePublicBugError as c2, type CreatePublicBugErrors as c3, type CreatePublicBugRequest as c4, type CreatePublicBugResponse as c5, type CreatePublicBugResponses as c6, type CreatePublicFeatureRequestData as c7, type CreatePublicFeatureRequestError as c8, type CreatePublicFeatureRequestErrors as c9, type DeleteAttributeError as cA, type DeleteAttributeErrors as cB, type DeleteAttributeResponse as cC, type DeleteAttributeResponse2 as cD, type DeleteAttributeResponses as cE, type DeleteConfigData as cF, type DeleteConfigError as cG, type DeleteConfigErrors as cH, type DeleteConfigResponse as cI, type DeleteConfigResponse2 as cJ, type DeleteConfigResponses as cK, type DeleteConnectorData as cL, type DeleteConnectorError as cM, type DeleteConnectorErrors as cN, type DeleteConnectorResponse as cO, type DeleteConnectorResponse2 as cP, type DeleteConnectorResponses as cQ, type DeleteEventData as cR, type DeleteEventError as cS, type DeleteEventErrors as cT, type DeleteEventResponse as cU, type DeleteEventResponse2 as cV, type DeleteEventResponses as cW, type DeleteExperimentData as cX, type DeleteExperimentError as cY, type DeleteExperimentErrors as cZ, type DeleteExperimentResponse as c_, type CreatePublicFeatureRequestRequest as ca, type CreatePublicFeatureRequestResponse as cb, type CreatePublicFeatureRequestResponses as cc, type CreatePublicTicketResponse as cd, type CreateTriggerConnectorData as ce, type CreateTriggerConnectorError as cf, type CreateTriggerConnectorErrors as cg, type CreateTriggerConnectorRequest as ch, type CreateTriggerConnectorResponse as ci, type CreateTriggerConnectorResponses as cj, type CreateUniverseData as ck, type CreateUniverseError as cl, type CreateUniverseErrors as cm, type CreateUniverseRequest as cn, type CreateUniverseResponse as co, type CreateUniverseResponse2 as cp, type CreateUniverseResponses as cq, type CursorTriggerConfig as cr, type CursorTriggerRepo as cs, type DeleteAlertRuleData as ct, type DeleteAlertRuleError as cu, type DeleteAlertRuleErrors as cv, type DeleteAlertRuleResponse as cw, type DeleteAlertRuleResponse2 as cx, type DeleteAlertRuleResponses as cy, type DeleteAttributeData as cz, type AckOpsItemRequest as d, type DiscardConfigDraftResponse as d$, type DeleteExperimentResponses as d0, type DeleteGateData as d1, type DeleteGateError as d2, type DeleteGateErrors as d3, type DeleteGateResponse as d4, type DeleteGateResponse2 as d5, type DeleteGateResponses as d6, type DeleteGateTemplateData as d7, type DeleteGateTemplateError as d8, type DeleteGateTemplateErrors as d9, type DeleteMetricError as dA, type DeleteMetricErrors as dB, type DeleteMetricResponse as dC, type DeleteMetricResponse2 as dD, type DeleteMetricResponses as dE, type DeleteOpsItemData as dF, type DeleteOpsItemError as dG, type DeleteOpsItemErrors as dH, type DeleteOpsItemResponse as dI, type DeleteOpsItemResponse2 as dJ, type DeleteOpsItemResponses as dK, type DeleteUniverseData as dL, type DeleteUniverseError as dM, type DeleteUniverseErrors as dN, type DeleteUniverseResponse as dO, type DeleteUniverseResponse2 as dP, type DeleteUniverseResponses as dQ, type DisableGateData as dR, type DisableGateError as dS, type DisableGateErrors as dT, type DisableGateResponse as dU, type DisableGateResponse2 as dV, type DisableGateResponses as dW, type DiscardConfigDraftData as dX, type DiscardConfigDraftError as dY, type DiscardConfigDraftErrors as dZ, type DiscardConfigDraftRequest as d_, type DeleteGateTemplateResponse as da, type DeleteGateTemplateResponse2 as db, type DeleteGateTemplateResponses as dc, type DeleteI18nDraftData as dd, type DeleteI18nDraftError as de, type DeleteI18nDraftErrors as df, type DeleteI18nDraftResponse as dg, type DeleteI18nDraftResponses as dh, type DeleteI18nKeyData as di, type DeleteI18nKeyError as dj, type DeleteI18nKeyErrors as dk, type DeleteI18nKeyResponse as dl, type DeleteI18nKeyResponses as dm, type DeleteI18nProfileData as dn, type DeleteI18nProfileError as dp, type DeleteI18nProfileErrors as dq, type DeleteI18nProfileResponse as dr, type DeleteI18nProfileResponses as ds, type DeleteKillswitchData as dt, type DeleteKillswitchError as du, type DeleteKillswitchErrors as dv, type DeleteKillswitchResponse as dw, type DeleteKillswitchResponse2 as dx, type DeleteKillswitchResponses as dy, type DeleteMetricData as dz, type AckOpsItemResponse as e, type GetCurrentProjectResponses as e$, type DiscardConfigDraftResponse2 as e0, type DiscardConfigDraftResponses as e1, type Domain as e2, type EnableGateData as e3, type EnableGateError as e4, type EnableGateErrors as e5, type EnableGateResponse as e6, type EnableGateResponse2 as e7, type EnableGateResponses as e8, type EntityTagsResponse as e9, type GateTemplate as eA, type GateTemplateRule as eB, type GateTemplateRuleResponse as eC, type GateWhitelist as eD, type GateWhitelistAttr as eE, type GetAttributeData as eF, type GetAttributeError as eG, type GetAttributeErrors as eH, type GetAttributeResponse as eI, type GetAttributeResponse2 as eJ, type GetAttributeResponses as eK, type GetConfigData as eL, type GetConfigError as eM, type GetConfigErrors as eN, type GetConfigResponse as eO, type GetConfigResponse2 as eP, type GetConfigResponses as eQ, type GetConnectorData as eR, type GetConnectorError as eS, type GetConnectorErrors as eT, type GetConnectorResponse as eU, type GetConnectorResponses as eV, type GetCurrentProjectData as eW, type GetCurrentProjectError as eX, type GetCurrentProjectErrors as eY, type GetCurrentProjectResponse as eZ, type GetCurrentProjectResponse2 as e_, type Env as ea, type ErrorOccurrence as eb, type ErrorRecord as ec, type ErrorSeriesRequest as ed, type ErrorSeriesResponse as ee, type ExperimentApiRow as ef, type ExperimentInlineMetric as eg, type ExperimentReadoutApiRow as eh, type ExperimentReadoutCaveat as ei, type ExperimentReadoutMetric as ej, type ExperimentResultRow as ek, type FileErrorTicketData as el, type FileErrorTicketError as em, type FileErrorTicketErrors as en, type FileErrorTicketResponse as eo, type FileErrorTicketResponse2 as ep, type FileErrorTicketResponses as eq, type FireConnectorData as er, type FireConnectorError as es, type FireConnectorErrors as et, type FireConnectorRequest as eu, type FireConnectorResponse as ev, type FireConnectorResponse2 as ew, type FireConnectorResponses as ex, type Folder as ey, type GateApiRow as ez, type AckOpsItemResponse2 as f, type GetKillswitchResponses as f$, type GetEntityTagsData as f0, type GetEntityTagsError as f1, type GetEntityTagsErrors as f2, type GetEntityTagsResponse as f3, type GetEntityTagsResponses as f4, type GetErrorData as f5, type GetErrorError as f6, type GetErrorErrors as f7, type GetErrorResponse as f8, type GetErrorResponses as f9, type GetExperimentResultsResponses as fA, type GetExperimentTimeseriesData as fB, type GetExperimentTimeseriesError as fC, type GetExperimentTimeseriesErrors as fD, type GetExperimentTimeseriesResponse as fE, type GetExperimentTimeseriesResponse2 as fF, type GetExperimentTimeseriesResponses as fG, type GetGateData as fH, type GetGateError as fI, type GetGateErrors as fJ, type GetGateResponse as fK, type GetGateResponses as fL, type GetGateTemplateData as fM, type GetGateTemplateError as fN, type GetGateTemplateErrors as fO, type GetGateTemplateResponse as fP, type GetGateTemplateResponses as fQ, type GetGateWhitelistData as fR, type GetGateWhitelistError as fS, type GetGateWhitelistErrors as fT, type GetGateWhitelistResponse as fU, type GetGateWhitelistResponses as fV, type GetKillswitchData as fW, type GetKillswitchError as fX, type GetKillswitchErrors as fY, type GetKillswitchResponse as fZ, type GetKillswitchResponse2 as f_, type GetErrorSeriesData as fa, type GetErrorSeriesError as fb, type GetErrorSeriesErrors as fc, type GetErrorSeriesResponse as fd, type GetErrorSeriesResponses as fe, type GetEventData as ff, type GetEventError as fg, type GetEventErrors as fh, type GetEventResponse as fi, type GetEventResponse2 as fj, type GetEventResponses as fk, type GetExperimentData as fl, type GetExperimentError as fm, type GetExperimentErrors as fn, type GetExperimentReadoutData as fo, type GetExperimentReadoutError as fp, type GetExperimentReadoutErrors as fq, type GetExperimentReadoutResponse as fr, type GetExperimentReadoutResponses as fs, type GetExperimentResponse as ft, type GetExperimentResponses as fu, type GetExperimentResultsData as fv, type GetExperimentResultsError as fw, type GetExperimentResultsErrors as fx, type GetExperimentResultsResponse as fy, type GetExperimentResultsResponse2 as fz, type AckOpsItemResponses as g, type ListConfigVersionsErrors as g$, type GetMetricData as g0, type GetMetricError as g1, type GetMetricErrors as g2, type GetMetricResponse as g3, type GetMetricResponse2 as g4, type GetMetricResponses as g5, type GetMetricSeriesData as g6, type GetMetricSeriesError as g7, type GetMetricSeriesErrors as g8, type GetMetricSeriesRequest as g9, type LinkPrToOpsItemResponses as gA, type ListAlertRulesData as gB, type ListAlertRulesError as gC, type ListAlertRulesErrors as gD, type ListAlertRulesResponse as gE, type ListAlertRulesResponse2 as gF, type ListAlertRulesResponses as gG, type ListAlertsData as gH, type ListAlertsError as gI, type ListAlertsErrors as gJ, type ListAlertsResponse as gK, type ListAlertsResponse2 as gL, type ListAlertsResponses as gM, type ListAttributesData as gN, type ListAttributesError as gO, type ListAttributesErrors as gP, type ListAttributesResponse as gQ, type ListAttributesResponse2 as gR, type ListAttributesResponses as gS, type ListConfigActivityData as gT, type ListConfigActivityError as gU, type ListConfigActivityErrors as gV, type ListConfigActivityResponse as gW, type ListConfigActivityResponse2 as gX, type ListConfigActivityResponses as gY, type ListConfigVersionsData as gZ, type ListConfigVersionsError as g_, type GetMetricSeriesResponse as ga, type GetMetricSeriesResponse2 as gb, type GetMetricSeriesResponses as gc, type GetOpsItemData as gd, type GetOpsItemError as ge, type GetOpsItemErrors as gf, type GetOpsItemResponse as gg, type GetOpsItemResponse2 as gh, type GetOpsItemResponses as gi, type GetProjectData as gj, type GetProjectError as gk, type GetProjectErrors as gl, type GetProjectResponse as gm, type GetProjectResponses as gn, type GithubConnectorData as go, type GithubPrLink as gp, type I18nDraft as gq, type JulesTriggerConfig as gr, type KeyRecord as gs, type KillswitchValue as gt, type LinkPrToOpsItemData as gu, type LinkPrToOpsItemError as gv, type LinkPrToOpsItemErrors as gw, type LinkPrToOpsItemRequest as gx, type LinkPrToOpsItemResponse as gy, type LinkPrToOpsItemResponse2 as gz, type AddToGateWhitelistData as h, type ListI18nKeysData as h$, type ListConfigVersionsResponse as h0, type ListConfigVersionsResponse2 as h1, type ListConfigVersionsResponses as h2, type ListConfigsData as h3, type ListConfigsError as h4, type ListConfigsErrors as h5, type ListConfigsResponse as h6, type ListConfigsResponse2 as h7, type ListConfigsResponses as h8, type ListConnectorsData as h9, type ListGateActivityResponse as hA, type ListGateActivityResponse2 as hB, type ListGateActivityResponses as hC, type ListGateTemplatesData as hD, type ListGateTemplatesError as hE, type ListGateTemplatesErrors as hF, type ListGateTemplatesResponse as hG, type ListGateTemplatesResponse2 as hH, type ListGateTemplatesResponses as hI, type ListGatesData as hJ, type ListGatesError as hK, type ListGatesErrors as hL, type ListGatesResponse as hM, type ListGatesResponse2 as hN, type ListGatesResponses as hO, type ListI18nDraftKeysData as hP, type ListI18nDraftKeysError as hQ, type ListI18nDraftKeysErrors as hR, type ListI18nDraftKeysResponse as hS, type ListI18nDraftKeysResponse2 as hT, type ListI18nDraftKeysResponses as hU, type ListI18nDraftsData as hV, type ListI18nDraftsError as hW, type ListI18nDraftsErrors as hX, type ListI18nDraftsResponse as hY, type ListI18nDraftsResponse2 as hZ, type ListI18nDraftsResponses as h_, type ListConnectorsError as ha, type ListConnectorsErrors as hb, type ListConnectorsResponse as hc, type ListConnectorsResponse2 as hd, type ListConnectorsResponses as he, type ListErrorsData as hf, type ListErrorsError as hg, type ListErrorsErrors as hh, type ListErrorsResponse as hi, type ListErrorsResponse2 as hj, type ListErrorsResponses as hk, type ListEventsData as hl, type ListEventsError as hm, type ListEventsErrors as hn, type ListEventsResponse as ho, type ListEventsResponse2 as hp, type ListEventsResponses as hq, type ListExperimentsData as hr, type ListExperimentsError as hs, type ListExperimentsErrors as ht, type ListExperimentsResponse as hu, type ListExperimentsResponse2 as hv, type ListExperimentsResponses as hw, type ListGateActivityData as hx, type ListGateActivityError as hy, type ListGateActivityErrors as hz, type AddToGateWhitelistError as i, type ListOpsQuestionsErrors as i$, type ListI18nKeysError as i0, type ListI18nKeysErrors as i1, type ListI18nKeysResponse as i2, type ListI18nKeysResponse2 as i3, type ListI18nKeysResponses as i4, type ListI18nProfilesData as i5, type ListI18nProfilesError as i6, type ListI18nProfilesErrors as i7, type ListI18nProfilesResponse as i8, type ListI18nProfilesResponse2 as i9, type ListMetricsResponses as iA, type ListOpsAgentsData as iB, type ListOpsAgentsError as iC, type ListOpsAgentsErrors as iD, type ListOpsAgentsResponse as iE, type ListOpsAgentsResponse2 as iF, type ListOpsAgentsResponses as iG, type ListOpsCommentsData as iH, type ListOpsCommentsError as iI, type ListOpsCommentsErrors as iJ, type ListOpsCommentsResponse as iK, type ListOpsCommentsResponse2 as iL, type ListOpsCommentsResponses as iM, type ListOpsInvestigationsData as iN, type ListOpsInvestigationsError as iO, type ListOpsInvestigationsErrors as iP, type ListOpsInvestigationsResponse as iQ, type ListOpsInvestigationsResponse2 as iR, type ListOpsInvestigationsResponses as iS, type ListOpsItemsData as iT, type ListOpsItemsError as iU, type ListOpsItemsErrors as iV, type ListOpsItemsResponse as iW, type ListOpsItemsResponse2 as iX, type ListOpsItemsResponses as iY, type ListOpsQuestionsData as iZ, type ListOpsQuestionsError as i_, type ListI18nProfilesResponses as ia, type ListKeysData as ib, type ListKeysError as ic, type ListKeysErrors as id, type ListKeysResponse as ie, type ListKeysResponse2 as ig, type ListKeysResponses as ih, type ListKillswitchesData as ii, type ListKillswitchesError as ij, type ListKillswitchesErrors as ik, type ListKillswitchesResponse as il, type ListKillswitchesResponse2 as im, type ListKillswitchesResponses as io, type ListMetricExperimentsData as ip, type ListMetricExperimentsError as iq, type ListMetricExperimentsErrors as ir, type ListMetricExperimentsResponse as is, type ListMetricExperimentsResponse2 as it, type ListMetricExperimentsResponses as iu, type ListMetricsData as iv, type ListMetricsError as iw, type ListMetricsErrors as ix, type ListMetricsResponse as iy, type ListMetricsResponse2 as iz, type AddToGateWhitelistErrors as j, type OpsQuestionOption as j$, type ListOpsQuestionsResponse as j0, type ListOpsQuestionsResponse2 as j1, type ListOpsQuestionsResponses as j2, type ListSlackChannelsData as j3, type ListSlackChannelsError as j4, type ListSlackChannelsErrors as j5, type ListSlackChannelsResponse as j6, type ListSlackChannelsResponse2 as j7, type ListSlackChannelsResponses as j8, type ListTagsData as j9, type NotifyOpsRequest as jA, type NotifyOpsResponse as jB, type NotifyOpsResponse2 as jC, type NotifyOpsResponses as jD, type OkResponse as jE, type OpsAgentProfile as jF, type OpsAlertContext as jG, type OpsAlertMetricSummary as jH, type OpsAlertRuleSummary as jI, type OpsBrowserContext as jJ, type OpsComment as jK, type OpsCommentAuthorType as jL, type OpsErrorContext as jM, type OpsInvestigation as jN, type OpsInvestigationState as jO, type OpsItemAttachment as jP, type OpsItemContext as jQ, type OpsItemNotifyOrNull as jR, type OpsItemOwner as jS, type OpsItemPriority as jT, type OpsItemPriorityOrNull as jU, type OpsItemRelated as jV, type OpsItemStatus as jW, type OpsMeasurePlanContext as jX, type OpsQuestion as jY, type OpsQuestionAnswer as jZ, type OpsQuestionDelivery as j_, type ListTagsError as ja, type ListTagsErrors as jb, type ListTagsResponse as jc, type ListTagsResponse2 as jd, type ListTagsResponses as je, type ListUniversesData as jf, type ListUniversesError as jg, type ListUniversesErrors as jh, type ListUniversesResponse as ji, type ListUniversesResponse2 as jj, type ListUniversesResponses as jk, type MeasurePlanResource as jl, type MeasurePlanStep as jm, type MetricDefaultMinEffectOfInterest as jn, type MetricDirection as jo, type MetricDisplayConfig as jp, type MetricDisplayName as jq, type MetricDisplayUnit as jr, type MetricEventName as js, type MetricName as jt, type MetricQueryDsl as ju, type MetricWinsorizePct as jv, type NotificationTarget as jw, type NotifyOpsData as jx, type NotifyOpsError as jy, type NotifyOpsErrors as jz, type AddToGateWhitelistRequest as k, type SearchHit as k$, type OpsQuestionStatus as k0, type OpsRun as k1, type OpsRunAction as k2, type OpsRunActionOrNull as k3, type Options$1 as k4, type PaginationCursor as k5, type PaginationLimit as k6, type ProjectId as k7, type PublishConfigDraftData as k8, type PublishConfigDraftError as k9, type ReanalyzeExperimentResponses as kA, type RemoveFromGateWhitelistData as kB, type RemoveFromGateWhitelistError as kC, type RemoveFromGateWhitelistErrors as kD, type RemoveFromGateWhitelistRequest as kE, type RemoveFromGateWhitelistResponse as kF, type RemoveFromGateWhitelistResponses as kG, type RequestResult as kH, type ResolveErrorData as kI, type ResolveErrorError as kJ, type ResolveErrorErrors as kK, type ResolveErrorResponse as kL, type ResolveErrorResponses as kM, type ResourceId as kN, type RevokeKeyData as kO, type RevokeKeyError as kP, type RevokeKeyErrors as kQ, type RevokeKeyResponse as kR, type RevokeKeyResponse2 as kS, type RevokeKeyResponses as kT, type SaveConfigDraftData as kU, type SaveConfigDraftError as kV, type SaveConfigDraftErrors as kW, type SaveConfigDraftRequest as kX, type SaveConfigDraftResponse as kY, type SaveConfigDraftResponse2 as kZ, type SaveConfigDraftResponses as k_, type PublishConfigDraftErrors as ka, type PublishConfigDraftRequest as kb, type PublishConfigDraftResponse as kc, type PublishConfigDraftResponse2 as kd, type PublishConfigDraftResponses as ke, type PublishI18nProfileData as kf, type PublishI18nProfileError as kg, type PublishI18nProfileErrors as kh, type PublishI18nProfileRequest as ki, type PublishI18nProfileResponse as kj, type PublishI18nProfileResponse2 as kk, type PublishI18nProfileResponses as kl, type PushI18nKeysData as km, type PushI18nKeysError as kn, type PushI18nKeysErrors as ko, type PushI18nKeysRequest as kp, type PushI18nKeysResponse as kq, type PushI18nKeysResponse2 as kr, type PushI18nKeysResponses as ks, type Q as kt, type QueryIr as ku, type ReanalyzeExperimentData as kv, type ReanalyzeExperimentError as kw, type ReanalyzeExperimentErrors as kx, type ReanalyzeExperimentResponse as ky, type ReanalyzeExperimentResponse2 as kz, type AddToGateWhitelistResponse as l, type ToggleKillswitchData as l$, type SearchResourcesData as l0, type SearchResourcesError as l1, type SearchResourcesErrors as l2, type SearchResourcesResponse as l3, type SearchResourcesResponses as l4, type SearchResponse as l5, type SetEntityTagsData as l6, type SetEntityTagsError as l7, type SetEntityTagsErrors as l8, type SetEntityTagsRequest as l9, type SetI18nLabelResponse as lA, type SetI18nLabelResponse2 as lB, type SetI18nLabelResponses as lC, type SetKillswitchSwitchData as lD, type SetKillswitchSwitchError as lE, type SetKillswitchSwitchErrors as lF, type SetKillswitchSwitchRequest as lG, type SetKillswitchSwitchResponse as lH, type SetKillswitchSwitchResponse2 as lI, type SetKillswitchSwitchResponses as lJ, type SetKillswitchValueData as lK, type SetKillswitchValueError as lL, type SetKillswitchValueErrors as lM, type SetKillswitchValueRequest as lN, type SetKillswitchValueResponse as lO, type SetKillswitchValueResponse2 as lP, type SetKillswitchValueResponses as lQ, type SlackConnectorData as lR, type Tag as lS, type TagName as lT, type TaggableEntityType as lU, type TestConnectorData as lV, type TestConnectorError as lW, type TestConnectorErrors as lX, type TestConnectorResponse as lY, type TestConnectorResponse2 as lZ, type TestConnectorResponses as l_, type SetEntityTagsResponse as la, type SetEntityTagsResponses as lb, type SetExperimentMetricsData as lc, type SetExperimentMetricsError as ld, type SetExperimentMetricsErrors as le, type SetExperimentMetricsRequest as lf, type SetExperimentMetricsResponse as lg, type SetExperimentMetricsResponse2 as lh, type SetExperimentMetricsResponses as li, type SetExperimentStatusData as lj, type SetExperimentStatusError as lk, type SetExperimentStatusErrors as ll, type SetExperimentStatusRequest as lm, type SetExperimentStatusResponse as ln, type SetExperimentStatusResponse2 as lo, type SetExperimentStatusResponses as lp, type SetGateWhitelistData as lq, type SetGateWhitelistError as lr, type SetGateWhitelistErrors as ls, type SetGateWhitelistRequest as lt, type SetGateWhitelistResponse as lu, type SetGateWhitelistResponses as lv, type SetI18nLabelData as lw, type SetI18nLabelError as lx, type SetI18nLabelErrors as ly, type SetI18nLabelRequest as lz, type AddToGateWhitelistResponses as m, type UpdateConnectorResponses as m$, type ToggleKillswitchError as m0, type ToggleKillswitchErrors as m1, type ToggleKillswitchRequest as m2, type ToggleKillswitchResponse as m3, type ToggleKillswitchResponse2 as m4, type ToggleKillswitchResponses as m5, type UnarchiveMetricData as m6, type UnarchiveMetricError as m7, type UnarchiveMetricErrors as m8, type UnarchiveMetricResponse as m9, type UpdateAttributeErrors as mA, type UpdateAttributeRequest as mB, type UpdateAttributeResponse as mC, type UpdateAttributeResponse2 as mD, type UpdateAttributeResponses as mE, type UpdateBugRequest as mF, type UpdateClaudeTriggerRequest as mG, type UpdateConfigData as mH, type UpdateConfigError as mI, type UpdateConfigErrors as mJ, type UpdateConfigRequest as mK, type UpdateConfigResponse as mL, type UpdateConfigResponse2 as mM, type UpdateConfigResponses as mN, type UpdateConfigSchemaData as mO, type UpdateConfigSchemaError as mP, type UpdateConfigSchemaErrors as mQ, type UpdateConfigSchemaRequest as mR, type UpdateConfigSchemaResponse as mS, type UpdateConfigSchemaResponse2 as mT, type UpdateConfigSchemaResponses as mU, type UpdateConnectorData as mV, type UpdateConnectorError as mW, type UpdateConnectorErrors as mX, type UpdateConnectorRequest as mY, type UpdateConnectorResponse as mZ, type UpdateConnectorResponse2 as m_, type UnarchiveMetricResponse2 as ma, type UnarchiveMetricResponses as mb, type UniverseParam as mc, type UniverseParamSchema as md, type UnsetKillswitchSwitchData as me, type UnsetKillswitchSwitchError as mf, type UnsetKillswitchSwitchErrors as mg, type UnsetKillswitchSwitchRequest as mh, type UnsetKillswitchSwitchResponse as mi, type UnsetKillswitchSwitchResponse2 as mj, type UnsetKillswitchSwitchResponses as mk, type UpdateAlertData as ml, type UpdateAlertError as mm, type UpdateAlertErrors as mn, type UpdateAlertRequest as mo, type UpdateAlertResponse as mp, type UpdateAlertResponses as mq, type UpdateAlertRuleData as mr, type UpdateAlertRuleError as ms, type UpdateAlertRuleErrors as mt, type UpdateAlertRuleRequest as mu, type UpdateAlertRuleResponse as mv, type UpdateAlertRuleResponse2 as mw, type UpdateAlertRuleResponses as mx, type UpdateAttributeData as my, type UpdateAttributeError as mz, type AlertApiRow as n, type UpdateKillswitchData as n$, type UpdateCopilotTriggerRequest as n0, type UpdateCursorTriggerRequest as n1, type UpdateEntityTagsData as n2, type UpdateEntityTagsError as n3, type UpdateEntityTagsErrors as n4, type UpdateEntityTagsRequest as n5, type UpdateEntityTagsResponse as n6, type UpdateEntityTagsResponses as n7, type UpdateErrorStatusData as n8, type UpdateErrorStatusError as n9, type UpdateGateTemplateData as nA, type UpdateGateTemplateError as nB, type UpdateGateTemplateErrors as nC, type UpdateGateTemplateRequest as nD, type UpdateGateTemplateResponse as nE, type UpdateGateTemplateResponse2 as nF, type UpdateGateTemplateResponses as nG, type UpdateI18nDraftData as nH, type UpdateI18nDraftError as nI, type UpdateI18nDraftErrors as nJ, type UpdateI18nDraftRequest as nK, type UpdateI18nDraftResponse as nL, type UpdateI18nDraftResponses as nM, type UpdateI18nKeyData as nN, type UpdateI18nKeyError as nO, type UpdateI18nKeyErrors as nP, type UpdateI18nKeyRequest as nQ, type UpdateI18nKeyResponse as nR, type UpdateI18nKeyResponse2 as nS, type UpdateI18nKeyResponses as nT, type UpdateJulesTriggerRequest as nU, type UpdateKeyData as nV, type UpdateKeyError as nW, type UpdateKeyErrors as nX, type UpdateKeyRequest as nY, type UpdateKeyResponse as nZ, type UpdateKeyResponses as n_, type UpdateErrorStatusErrors as na, type UpdateErrorStatusRequest as nb, type UpdateErrorStatusResponse as nc, type UpdateErrorStatusResponses as nd, type UpdateEventData as ne, type UpdateEventError as nf, type UpdateEventErrors as ng, type UpdateEventRequest as nh, type UpdateEventResponse as ni, type UpdateEventResponse2 as nj, type UpdateEventResponses as nk, type UpdateExperimentData as nl, type UpdateExperimentError as nm, type UpdateExperimentErrors as nn, type UpdateExperimentRequest as no, type UpdateExperimentResponse as np, type UpdateExperimentResponse2 as nq, type UpdateExperimentResponses as nr, type UpdateFeatureRequestRequest as ns, type UpdateGateData as nt, type UpdateGateError as nu, type UpdateGateErrors as nv, type UpdateGateRequest as nw, type UpdateGateResponse as nx, type UpdateGateResponse2 as ny, type UpdateGateResponses as nz, type AlertCompositeSpec as o, type UpsertProjectErrors as o$, type UpdateKillswitchError as o0, type UpdateKillswitchErrors as o1, type UpdateKillswitchRequest as o2, type UpdateKillswitchResponse as o3, type UpdateKillswitchResponse2 as o4, type UpdateKillswitchResponses as o5, type UpdateMetricData as o6, type UpdateMetricError as o7, type UpdateMetricErrors as o8, type UpdateMetricFields as o9, type UpdateTriggerConnectorError as oA, type UpdateTriggerConnectorErrors as oB, type UpdateTriggerConnectorRequest as oC, type UpdateTriggerConnectorResponse as oD, type UpdateTriggerConnectorResponses as oE, type UpdateUniverseData as oF, type UpdateUniverseError as oG, type UpdateUniverseErrors as oH, type UpdateUniverseRequest as oI, type UpdateUniverseResponse as oJ, type UpdateUniverseResponse2 as oK, type UpdateUniverseResponses as oL, type UpsertI18nDraftKeyData as oM, type UpsertI18nDraftKeyError as oN, type UpsertI18nDraftKeyErrors as oO, type UpsertI18nDraftKeyRequest as oP, type UpsertI18nDraftKeyResponse as oQ, type UpsertI18nDraftKeyResponses as oR, type UpsertI18nKeysData as oS, type UpsertI18nKeysError as oT, type UpsertI18nKeysErrors as oU, type UpsertI18nKeysRequest as oV, type UpsertI18nKeysResponse as oW, type UpsertI18nKeysResponse2 as oX, type UpsertI18nKeysResponses as oY, type UpsertProjectData as oZ, type UpsertProjectError as o_, type UpdateMetricRequest as oa, type UpdateMetricResponse as ob, type UpdateMetricResponses as oc, type UpdateMetricWithQuery as od, type UpdateMetricWithQueryIr as oe, type UpdateOpsInvestigationData as of, type UpdateOpsInvestigationError as og, type UpdateOpsInvestigationErrors as oh, type UpdateOpsInvestigationRequest as oi, type UpdateOpsInvestigationResponse as oj, type UpdateOpsInvestigationResponses as ok, type UpdateOpsItemData as ol, type UpdateOpsItemError as om, type UpdateOpsItemErrors as on, type UpdateOpsItemRequest as oo, type UpdateOpsItemResponse as op, type UpdateOpsItemResponse2 as oq, type UpdateOpsItemResponses as or, type UpdateOpsItemStatusRequest as os, type UpdateProjectData as ot, type UpdateProjectError as ou, type UpdateProjectErrors as ov, type UpdateProjectRequest as ow, type UpdateProjectResponse as ox, type UpdateProjectResponses as oy, type UpdateTriggerConnectorData as oz, type AnswerOpsQuestionData as p, getExperiment as p$, type UpsertProjectRequest as p0, type UpsertProjectResponse as p1, type UpsertProjectResponse2 as p2, type UpsertProjectResponses as p3, ackOpsItem as p4, addToGateWhitelist as p5, answerOpsQuestion as p6, approveEvent as p7, askOpsQuestions as p8, cancelOpsQuestion as p9, deleteAttribute as pA, deleteConfig as pB, deleteConnector as pC, deleteEvent as pD, deleteExperiment as pE, deleteGate as pF, deleteGateTemplate as pG, deleteI18nDraft as pH, deleteI18nKey as pI, deleteI18nProfile as pJ, deleteKillswitch as pK, deleteMetric as pL, deleteOpsItem as pM, deleteUniverse as pN, disableGate as pO, discardConfigDraft as pP, enableGate as pQ, fileErrorTicket as pR, fireConnector as pS, getAttribute as pT, getConfig as pU, getConnector as pV, getCurrentProject as pW, getEntityTags as pX, getError as pY, getErrorSeries as pZ, getEvent as p_, client as pa, configure as pb, createAlertRule as pc, createAttribute as pd, createClient as pe, createConfig$1 as pf, createConfig as pg, createConnector as ph, createEvent as pi, createExperiment as pj, createExperimentReadout as pk, createGate as pl, createGateTemplate as pm, createI18nDraft as pn, createI18nProfile as po, createKey as pp, createKillswitch as pq, createMetric as pr, createOpsComment as ps, createOpsInvestigation as pt, createOpsItem as pu, createPublicBug as pv, createPublicFeatureRequest as pw, createTriggerConnector as px, createUniverse as py, deleteAlertRule as pz, type AnswerOpsQuestionError as q, updateAlertRule as q$, getExperimentReadout as q0, getExperimentResults as q1, getExperimentTimeseries as q2, getGate as q3, getGateTemplate as q4, getGateWhitelist as q5, getKillswitch as q6, getMetric as q7, getMetricSeries as q8, getOpsItem as q9, listOpsItems as qA, listOpsQuestions as qB, listSlackChannels as qC, listTags as qD, listUniverses as qE, notifyOps as qF, publishConfigDraft as qG, publishI18nProfile as qH, pushI18nKeys as qI, reanalyzeExperiment as qJ, removeFromGateWhitelist as qK, resolveError as qL, revokeKey as qM, saveConfigDraft as qN, searchResources as qO, setEntityTags as qP, setExperimentMetrics as qQ, setExperimentStatus as qR, setGateWhitelist as qS, setI18nLabel as qT, setKillswitchSwitch as qU, setKillswitchValue as qV, testConnector as qW, toggleKillswitch as qX, unarchiveMetric as qY, unsetKillswitchSwitch as qZ, updateAlert as q_, getProject as qa, linkPrToOpsItem as qb, listAlertRules as qc, listAlerts as qd, listAttributes as qe, listConfigActivity as qf, listConfigVersions as qg, listConfigs as qh, listConnectors as qi, listErrors as qj, listEvents as qk, listExperiments as ql, listGateActivity as qm, listGateTemplates as qn, listGates as qo, listI18nDraftKeys as qp, listI18nDrafts as qq, listI18nKeys as qr, listI18nProfiles as qs, listKeys as qt, listKillswitches as qu, listMetricExperiments as qv, listMetrics as qw, listOpsAgents as qx, listOpsComments as qy, listOpsInvestigations as qz, type AnswerOpsQuestionErrors as r, updateAttribute as r0, updateConfig as r1, updateConfigSchema as r2, updateConnector as r3, updateEntityTags as r4, updateErrorStatus as r5, updateEvent as r6, updateExperiment as r7, updateGate as r8, updateGateTemplate as r9, updateI18nDraft as ra, updateI18nKey as rb, updateKey as rc, updateKillswitch as rd, updateMetric as re, updateOpsInvestigation as rf, updateOpsItem as rg, updateProject as rh, updateTriggerConnector as ri, updateUniverse as rj, upsertI18nDraftKey as rk, upsertI18nKeys as rl, upsertProject as rm, type AnswerOpsQuestionRequest as s, type AnswerOpsQuestionResponse as t, type AnswerOpsQuestionResponses as u, type ApproveEventData as v, type ApproveEventError as w, type ApproveEventErrors as x, type ApproveEventRequest as y, type ApproveEventResponse as z };