@shipeasy/openapi 1.6.0 → 2.2.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 (151) hide show
  1. package/README.md +37 -0
  2. package/dist/chunk-643YSMLU.js +1616 -0
  3. package/dist/chunk-643YSMLU.js.map +1 -0
  4. package/dist/chunk-MRW3DJ57.js +3385 -0
  5. package/dist/chunk-MRW3DJ57.js.map +1 -0
  6. package/dist/client-K0ShmsC7.d.ts +11284 -0
  7. package/dist/client.d.ts +1 -0
  8. package/dist/client.js +215 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/custom.d.ts +86 -0
  11. package/dist/custom.js +300 -0
  12. package/dist/custom.js.map +1 -0
  13. package/dist/index.d.ts +29 -41
  14. package/dist/index.js +258 -4375
  15. package/dist/index.js.map +1 -0
  16. package/dist/node-context.d.ts +81 -33
  17. package/dist/node-context.js +98 -44
  18. package/dist/node-context.js.map +1 -0
  19. package/dist/schemas.d.ts +7973 -0
  20. package/dist/schemas.js +1099 -0
  21. package/dist/schemas.js.map +1 -0
  22. package/openapi.json +15922 -3232
  23. package/openapi.yaml +14277 -0
  24. package/package.json +33 -26
  25. package/spec/components/errors.yaml +53 -0
  26. package/spec/components/parameters.yaml +32 -0
  27. package/spec/components/responses.yaml +122 -0
  28. package/spec/components/schemas/alert-rules.yaml +175 -0
  29. package/spec/components/schemas/attributes.yaml +157 -0
  30. package/spec/components/schemas/common.yaml +92 -0
  31. package/spec/components/schemas/configs.yaml +371 -0
  32. package/spec/components/schemas/connectors.yaml +587 -0
  33. package/spec/components/schemas/errors-api.yaml +209 -0
  34. package/spec/components/schemas/events.yaml +321 -0
  35. package/spec/components/schemas/experiments.yaml +865 -0
  36. package/spec/components/schemas/gate-templates.yaml +237 -0
  37. package/spec/components/schemas/gates.yaml +890 -0
  38. package/spec/components/schemas/i18n.yaml +478 -0
  39. package/spec/components/schemas/keys.yaml +186 -0
  40. package/spec/components/schemas/killswitches.yaml +309 -0
  41. package/spec/components/schemas/metrics.yaml +547 -0
  42. package/spec/components/schemas/ops.yaml +1013 -0
  43. package/spec/components/schemas/projects.yaml +222 -0
  44. package/spec/components/schemas/search.yaml +46 -0
  45. package/spec/components/schemas/universes.yaml +127 -0
  46. package/spec/openapi.yaml +367 -0
  47. package/spec/paths/alert-rules.yaml +258 -0
  48. package/spec/paths/attributes.yaml +272 -0
  49. package/spec/paths/configs.yaml +758 -0
  50. package/spec/paths/connectors.yaml +782 -0
  51. package/spec/paths/errors.yaml +382 -0
  52. package/spec/paths/events.yaml +380 -0
  53. package/spec/paths/experiments.yaml +803 -0
  54. package/spec/paths/gate-templates.yaml +267 -0
  55. package/spec/paths/gates.yaml +465 -0
  56. package/spec/paths/i18n.yaml +557 -0
  57. package/spec/paths/keys.yaml +182 -0
  58. package/spec/paths/killswitches.yaml +574 -0
  59. package/spec/paths/metrics.yaml +313 -0
  60. package/spec/paths/ops.yaml +446 -0
  61. package/spec/paths/projects.yaml +210 -0
  62. package/spec/paths/search.yaml +62 -0
  63. package/spec/paths/universes.yaml +255 -0
  64. package/dist/operations/attributes.d.ts +0 -33
  65. package/dist/operations/attributes.js +0 -16
  66. package/dist/operations/cli-adapter.d.ts +0 -35
  67. package/dist/operations/cli-adapter.js +0 -91
  68. package/dist/operations/coerce.d.ts +0 -32
  69. package/dist/operations/coerce.js +0 -53
  70. package/dist/operations/configs.d.ts +0 -28
  71. package/dist/operations/configs.js +0 -119
  72. package/dist/operations/docs.d.ts +0 -37
  73. package/dist/operations/docs.js +0 -39
  74. package/dist/operations/events.d.ts +0 -28
  75. package/dist/operations/events.js +0 -121
  76. package/dist/operations/experiments.d.ts +0 -28
  77. package/dist/operations/experiments.js +0 -280
  78. package/dist/operations/gates.d.ts +0 -28
  79. package/dist/operations/gates.js +0 -132
  80. package/dist/operations/i18n.d.ts +0 -28
  81. package/dist/operations/i18n.js +0 -121
  82. package/dist/operations/index.d.ts +0 -63
  83. package/dist/operations/index.js +0 -1751
  84. package/dist/operations/killswitches.d.ts +0 -28
  85. package/dist/operations/killswitches.js +0 -126
  86. package/dist/operations/mcp-adapter.d.ts +0 -35
  87. package/dist/operations/mcp-adapter.js +0 -94
  88. package/dist/operations/metrics.d.ts +0 -30
  89. package/dist/operations/metrics.js +0 -114
  90. package/dist/operations/ops.d.ts +0 -28
  91. package/dist/operations/ops.js +0 -313
  92. package/dist/operations/projects.d.ts +0 -28
  93. package/dist/operations/projects.js +0 -36
  94. package/dist/operations/sdk-docs.d.ts +0 -28
  95. package/dist/operations/sdk-docs.js +0 -160
  96. package/dist/operations/types.d.ts +0 -138
  97. package/dist/operations/types.js +0 -9
  98. package/dist/operations/universes.d.ts +0 -28
  99. package/dist/operations/universes.js +0 -93
  100. package/dist/operations/util.d.ts +0 -33
  101. package/dist/operations/util.js +0 -9
  102. package/dist/resources/alert-rules.d.ts +0 -50
  103. package/dist/resources/alert-rules.js +0 -75
  104. package/dist/resources/attributes.d.ts +0 -19
  105. package/dist/resources/attributes.js +0 -10
  106. package/dist/resources/configs.d.ts +0 -681
  107. package/dist/resources/configs.js +0 -509
  108. package/dist/resources/events.d.ts +0 -61
  109. package/dist/resources/events.js +0 -42
  110. package/dist/resources/experiments.d.ts +0 -849
  111. package/dist/resources/experiments.js +0 -707
  112. package/dist/resources/gates.d.ts +0 -808
  113. package/dist/resources/gates.js +0 -522
  114. package/dist/resources/i18n.d.ts +0 -84
  115. package/dist/resources/i18n.js +0 -60
  116. package/dist/resources/index.d.ts +0 -2767
  117. package/dist/resources/index.js +0 -2563
  118. package/dist/resources/killswitches.d.ts +0 -436
  119. package/dist/resources/killswitches.js +0 -514
  120. package/dist/resources/metrics.d.ts +0 -54
  121. package/dist/resources/metrics.js +0 -40
  122. package/dist/resources/ops.d.ts +0 -88
  123. package/dist/resources/ops.js +0 -36
  124. package/dist/resources/projects.d.ts +0 -54
  125. package/dist/resources/projects.js +0 -14
  126. package/dist/resources/universes.d.ts +0 -185
  127. package/dist/resources/universes.js +0 -234
  128. package/dist/schemas/alert-rules.d.ts +0 -65
  129. package/dist/schemas/alert-rules.js +0 -37
  130. package/dist/schemas/configs.d.ts +0 -154
  131. package/dist/schemas/configs.js +0 -134
  132. package/dist/schemas/constants.d.ts +0 -6
  133. package/dist/schemas/constants.js +0 -7
  134. package/dist/schemas/experiments.d.ts +0 -229
  135. package/dist/schemas/experiments.js +0 -221
  136. package/dist/schemas/folder.d.ts +0 -10
  137. package/dist/schemas/folder.js +0 -8
  138. package/dist/schemas/gates.d.ts +0 -386
  139. package/dist/schemas/gates.js +0 -190
  140. package/dist/schemas/index.d.ts +0 -11
  141. package/dist/schemas/index.js +0 -762
  142. package/dist/schemas/killswitches.d.ts +0 -110
  143. package/dist/schemas/killswitches.js +0 -226
  144. package/dist/schemas/metric-name.d.ts +0 -5
  145. package/dist/schemas/metric-name.js +0 -6
  146. package/dist/schemas/pagination.d.ts +0 -37
  147. package/dist/schemas/pagination.js +0 -44
  148. package/dist/schemas/universes.d.ts +0 -35
  149. package/dist/schemas/universes.js +0 -55
  150. package/dist/transport.d.ts +0 -30
  151. package/dist/transport.js +0 -44
@@ -0,0 +1,1013 @@
1
+ ListOpsItemsResponse:
2
+ type: array
3
+ items:
4
+ type: object
5
+ properties:
6
+ id:
7
+ type: string
8
+ description: Stable opaque item id.
9
+ number:
10
+ anyOf:
11
+ - type: number
12
+ - type: "null"
13
+ description: Per-project item number (the `#7` handle), or `null` if unnumbered.
14
+ type:
15
+ type: string
16
+ enum:
17
+ - bug
18
+ - feature_request
19
+ - error
20
+ - alert
21
+ - measure_plan
22
+ description: "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)."
23
+ title:
24
+ type: string
25
+ description: One-line item title.
26
+ status:
27
+ $ref: "#/OpsItemStatus"
28
+ priority:
29
+ anyOf:
30
+ - $ref: "#/OpsItemPriority"
31
+ - type: "null"
32
+ description: Triage priority, or `null` if not yet set.
33
+ sourceRef:
34
+ description: Source reference for auto-filed tickets (e.g. an error fingerprint).
35
+ anyOf:
36
+ - type: string
37
+ - type: "null"
38
+ createdAt:
39
+ type: string
40
+ description: ISO-8601 creation timestamp.
41
+ required:
42
+ - id
43
+ - number
44
+ - type
45
+ - title
46
+ - status
47
+ - priority
48
+ - createdAt
49
+ additionalProperties: {}
50
+ description: One queue item — any type.
51
+ description: A page of queue items, newest first.
52
+ GetOpsItemResponse:
53
+ type: object
54
+ properties:
55
+ id:
56
+ type: string
57
+ description: Stable opaque item id.
58
+ number:
59
+ anyOf:
60
+ - type: number
61
+ - type: "null"
62
+ description: Per-project item number (the `#7` handle), or `null` if unnumbered.
63
+ type:
64
+ type: string
65
+ enum:
66
+ - bug
67
+ - feature_request
68
+ - error
69
+ - alert
70
+ - measure_plan
71
+ description: "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)."
72
+ title:
73
+ type: string
74
+ description: One-line item title (all types).
75
+ status:
76
+ $ref: "#/OpsItemStatus"
77
+ priority:
78
+ anyOf:
79
+ - $ref: "#/OpsItemPriority"
80
+ - type: "null"
81
+ description: Triage priority, or `null` if not yet set (all types).
82
+ source:
83
+ type: string
84
+ enum:
85
+ - team
86
+ - system
87
+ description: "How the item was filed: `team` (a human admin/teammate — bug/feature) or `system` (auto-filed — error/alert/measure_plan)."
88
+ sourceRef:
89
+ anyOf:
90
+ - type: string
91
+ - type: "null"
92
+ description: "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."
93
+ reporterEmail:
94
+ anyOf:
95
+ - type: string
96
+ - type: "null"
97
+ description: Reporter email (bug/feature), or `null`.
98
+ stepsToReproduce:
99
+ type: string
100
+ description: Reproduction steps — populated for `bug`, empty string otherwise.
101
+ actualResult:
102
+ type: string
103
+ description: What actually happened — `bug` only, empty string otherwise.
104
+ expectedResult:
105
+ type: string
106
+ description: What was expected — `bug` only, empty string otherwise.
107
+ description:
108
+ type: string
109
+ description: Feature description — populated for `feature_request`, empty string otherwise.
110
+ useCase:
111
+ type: string
112
+ description: Feature use case — `feature_request` only, empty string otherwise.
113
+ context:
114
+ anyOf:
115
+ - $ref: "#/OpsItemContext"
116
+ - type: "null"
117
+ description: "Type-specific capture context. For `bug`/`feature_request` it carries `browser` (the auto-collected page URL / user-agent / viewport). For auto-filed tickets it carries the hydrated `error`, `alert`, or `measurePlan` block. `null` only for legacy rows with nothing captured."
118
+ attachments:
119
+ type: array
120
+ items:
121
+ $ref: "#/OpsItemAttachment"
122
+ description: "Files attached to the report — screenshots, recordings, logs. Populated for `bug`/`feature_request`; always an empty array for auto-filed `error`/`alert`/`measure_plan` tickets. Fetch each via its `fetchUrl` with the same admin/ops key (the download route is ops-key allow-listed)."
123
+ related:
124
+ $ref: "#/OpsItemRelated"
125
+ connectorData:
126
+ anyOf:
127
+ - $ref: "#/ConnectorData"
128
+ - type: "null"
129
+ description: "Per-connector linkage recorded for this item, keyed by connector provider. Populated as connectors act on the item (e.g. GitHub opens an issue, Slack posts a message); more than one provider can be present at once. `null` if no connector has touched the item."
130
+ notify:
131
+ anyOf:
132
+ - $ref: ./common.yaml#/NotificationTarget
133
+ - type: "null"
134
+ description: Per-item completion-notification target, or `null` (falls back to the project default).
135
+ createdAt:
136
+ type: string
137
+ description: ISO-8601 creation timestamp.
138
+ updatedAt:
139
+ type: string
140
+ description: ISO-8601 last-update timestamp.
141
+ required:
142
+ - id
143
+ - number
144
+ - type
145
+ - title
146
+ - status
147
+ - priority
148
+ - context
149
+ - attachments
150
+ - related
151
+ - createdAt
152
+ additionalProperties: {}
153
+ description: "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."
154
+ OpsItemContext:
155
+ type: object
156
+ properties:
157
+ browser:
158
+ $ref: "#/OpsBrowserContext"
159
+ error:
160
+ $ref: "#/OpsErrorContext"
161
+ alert:
162
+ $ref: "#/OpsAlertContext"
163
+ measurePlan:
164
+ $ref: "#/OpsMeasurePlanContext"
165
+ additionalProperties: {}
166
+ description: "Per-type capture context on a queue item. Exactly one of `browser` (bug/feature), `error`, `alert`, or `measurePlan` is populated depending on `type`; other keys (e.g. the AI dedupe block on bugs) may also be present."
167
+ OpsBrowserContext:
168
+ type: object
169
+ properties:
170
+ pageUrl:
171
+ anyOf:
172
+ - type: string
173
+ - type: "null"
174
+ description: URL of the page the report was filed from, or `null`.
175
+ userAgent:
176
+ anyOf:
177
+ - type: string
178
+ - type: "null"
179
+ description: Reporter's user-agent string, or `null`.
180
+ viewport:
181
+ anyOf:
182
+ - type: string
183
+ - type: "null"
184
+ description: "Reporter's viewport (e.g. `1280x720`), or `null`."
185
+ additionalProperties: {}
186
+ description: "Auto-collected browser environment for a `bug`/`feature_request`, captured at file time."
187
+ OpsErrorContext:
188
+ type: object
189
+ properties:
190
+ id:
191
+ type: string
192
+ description: The tracked `errors` row id (fetch full detail via `related.error`).
193
+ fingerprint:
194
+ type: string
195
+ description: Stable dedupe key of the tracked error.
196
+ causedByFingerprint:
197
+ anyOf:
198
+ - type: string
199
+ - type: "null"
200
+ description: "Fingerprint of the upstream issue this error descends from (set when the same error was reported at an inner boundary first), or `null` for a root issue."
201
+ errorType:
202
+ anyOf:
203
+ - type: string
204
+ - type: "null"
205
+ description: "Error class/name, e.g. `TypeError`, or `null` when the source didn't supply one."
206
+ message:
207
+ type: string
208
+ description: The error message.
209
+ subject:
210
+ anyOf:
211
+ - type: string
212
+ - type: "null"
213
+ description: "The `see()` consequence subject — the `causes_the(<subject>)` value. Grep the codebase for this to find the throw site. `null` if the error was never instrumented."
214
+ outcome:
215
+ anyOf:
216
+ - type: string
217
+ - type: "null"
218
+ description: "The `see()` consequence outcome — the `.to(<outcome>)` value. `null` if uninstrumented."
219
+ kind:
220
+ anyOf:
221
+ - type: string
222
+ - type: "null"
223
+ description: "`see()` error kind: `caught` | `uncaught` | `unhandled_rejection` | `network` | `violation`."
224
+ side:
225
+ anyOf:
226
+ - type: string
227
+ - type: "null"
228
+ description: "Which SDK side reported it: `client` | `server`."
229
+ env:
230
+ anyOf:
231
+ - type: string
232
+ - type: "null"
233
+ description: Published env the reporting SDK ran against (dev/staging/prod).
234
+ count:
235
+ type: number
236
+ description: Folded occurrence count for this fingerprint.
237
+ firstSeenAt:
238
+ type: string
239
+ description: ISO-8601 timestamp of the first occurrence.
240
+ lastSeenAt:
241
+ type: string
242
+ description: ISO-8601 timestamp of the most recent occurrence.
243
+ seenUrls:
244
+ type: array
245
+ items:
246
+ type: string
247
+ description: "Distinct, id-normalized routes this error has surfaced on (UUIDs/ids collapsed to `#`)."
248
+ sdkVersion:
249
+ anyOf:
250
+ - type: string
251
+ - type: "null"
252
+ description: "@shipeasy/sdk version of the latest occurrence, or `null`."
253
+ required:
254
+ - id
255
+ - fingerprint
256
+ - message
257
+ - count
258
+ - firstSeenAt
259
+ - lastSeenAt
260
+ - seenUrls
261
+ additionalProperties: {}
262
+ description: "Hydrated detail for an auto-filed `error` ticket, read from the tracked `errors` row at request time (so `count`/`lastSeenAt` reflect the latest state)."
263
+ OpsAlertContext:
264
+ type: object
265
+ properties:
266
+ source:
267
+ type: string
268
+ enum:
269
+ - metric_rule
270
+ - experiment_srm
271
+ - experiment_peek
272
+ - guardrail
273
+ description: What kind of alert transitioned to active.
274
+ dedupeKey:
275
+ type: string
276
+ description: Stable per-condition key; with `source` forms the ticket's `sourceRef`.
277
+ severity:
278
+ type: string
279
+ enum:
280
+ - danger
281
+ - warn
282
+ - info
283
+ description: Alert severity.
284
+ observedValue:
285
+ anyOf:
286
+ - type: number
287
+ - type: "null"
288
+ description: The metric value that tripped the rule, or `null`.
289
+ href:
290
+ anyOf:
291
+ - type: string
292
+ - type: "null"
293
+ description: Dashboard deep link to the alert, or `null`.
294
+ status:
295
+ anyOf:
296
+ - type: string
297
+ enum:
298
+ - active
299
+ - resolved
300
+ - dismissed
301
+ - type: "null"
302
+ description: "Current status of the underlying alert (`active` while the condition holds), or `null` if the alert row is gone."
303
+ activeSince:
304
+ anyOf:
305
+ - type: string
306
+ - type: "null"
307
+ description: ISO-8601 timestamp the alert became active, or `null`.
308
+ resolvedAt:
309
+ anyOf:
310
+ - type: string
311
+ - type: "null"
312
+ description: ISO-8601 timestamp the alert cleared, or `null` while still active.
313
+ rule:
314
+ anyOf:
315
+ - $ref: "#/OpsAlertRuleSummary"
316
+ - type: "null"
317
+ description: "The alert rule condition that tripped (metric-rule alerts only); `null` for SRM/peek/guardrail alerts with no rule."
318
+ metric:
319
+ anyOf:
320
+ - $ref: "#/OpsAlertMetricSummary"
321
+ - type: "null"
322
+ description: "The metric the alert watches, hydrated with its backing event(s); `null` if not resolvable."
323
+ required:
324
+ - source
325
+ - dedupeKey
326
+ - severity
327
+ additionalProperties: {}
328
+ description: "Hydrated detail for an auto-filed `alert` ticket, resolving the rule → metric → event chain at request time."
329
+ OpsAlertRuleSummary:
330
+ type: object
331
+ properties:
332
+ id:
333
+ type: string
334
+ description: Alert-rule id.
335
+ name:
336
+ type: string
337
+ description: Alert-rule name.
338
+ comparator:
339
+ type: string
340
+ enum:
341
+ - gt
342
+ - gte
343
+ - lt
344
+ - lte
345
+ description: How `observedValue` is compared to `threshold`.
346
+ threshold:
347
+ type: number
348
+ description: The threshold value the rule fires on.
349
+ windowHours:
350
+ type: number
351
+ description: Rolling evaluation window in hours.
352
+ required:
353
+ - id
354
+ - name
355
+ - comparator
356
+ - threshold
357
+ - windowHours
358
+ additionalProperties: {}
359
+ description: "The condition of a metric-rule alert."
360
+ OpsAlertMetricSummary:
361
+ type: object
362
+ properties:
363
+ id:
364
+ type: string
365
+ description: Metric id (fetch full detail via `related.metric`).
366
+ name:
367
+ type: string
368
+ description: Metric name.
369
+ events:
370
+ type: array
371
+ items:
372
+ type: string
373
+ description: "The event name(s) the metric aggregates over — one for count metrics, numerator + denominator for ratio metrics. Grep the codebase for `track('<event>')` on each to find the instrumentation feeding the metric."
374
+ required:
375
+ - id
376
+ - name
377
+ - events
378
+ additionalProperties: {}
379
+ description: "The metric an alert watches, with its backing events."
380
+ OpsMeasurePlanContext:
381
+ type: object
382
+ properties:
383
+ created:
384
+ type: array
385
+ items:
386
+ $ref: "#/MeasurePlanResource"
387
+ description: Resources the assistant already created on approval (live now) — don't recreate them.
388
+ pending:
389
+ type: array
390
+ items:
391
+ $ref: "#/MeasurePlanResource"
392
+ description: Resources the assistant couldn't create yet (usually a metric whose backing event isn't emitted); create these after the instrumentation lands.
393
+ instrumentation:
394
+ type: array
395
+ items:
396
+ $ref: "#/MeasurePlanStep"
397
+ description: The code instrumentation to implement before the metrics can collect data.
398
+ required:
399
+ - created
400
+ - instrumentation
401
+ additionalProperties: {}
402
+ description: "An assistant-proposed measurement plan: what it already built, what it still needs, and the event instrumentation you implement."
403
+ MeasurePlanResource:
404
+ type: object
405
+ properties:
406
+ kind:
407
+ type: string
408
+ enum:
409
+ - metric
410
+ - experiment
411
+ - alert_rule
412
+ - event
413
+ description: Resource kind.
414
+ id:
415
+ anyOf:
416
+ - type: string
417
+ - type: "null"
418
+ description: Resource id when it was created; absent/`null` for resources still to be made.
419
+ name:
420
+ type: string
421
+ description: Resource name.
422
+ required:
423
+ - kind
424
+ - name
425
+ additionalProperties: {}
426
+ description: "A resource referenced by a measurement plan."
427
+ MeasurePlanStep:
428
+ type: object
429
+ properties:
430
+ event:
431
+ anyOf:
432
+ - type: string
433
+ - type: "null"
434
+ description: The event name the instrumentation should emit, when known.
435
+ attribute:
436
+ anyOf:
437
+ - type: string
438
+ - type: "null"
439
+ description: "A new user attribute the project must start sending on its identify/evaluate context (when a gate's targeting needs a field that doesn't exist yet)."
440
+ label:
441
+ type: string
442
+ description: Short human-readable name for the moment being instrumented.
443
+ description:
444
+ anyOf:
445
+ - type: string
446
+ - type: "null"
447
+ description: "What to track and why, described conceptually — which user moment/action to capture and what it enables. Deliberately NOT a file path (the assistant has no repo access and can't name real files); you locate the call site yourself."
448
+ properties:
449
+ type: array
450
+ items:
451
+ type: string
452
+ description: "Event properties the downstream metric needs attached (e.g. `method`, `plan`)."
453
+ required:
454
+ - label
455
+ additionalProperties: {}
456
+ description: "One piece of code instrumentation a measurement plan still needs."
457
+ OpsItemAttachment:
458
+ type: object
459
+ properties:
460
+ id:
461
+ type: string
462
+ description: Attachment id.
463
+ kind:
464
+ type: string
465
+ description: "`screenshot` | `video` | `log`."
466
+ filename:
467
+ type: string
468
+ description: Sanitized original filename.
469
+ mimeType:
470
+ type: string
471
+ description: "MIME type, e.g. `image/png`."
472
+ sizeBytes:
473
+ type: number
474
+ description: Upload size in bytes.
475
+ fetchUrl:
476
+ type: string
477
+ description: "Admin-API path to download the file (`GET` with the admin/ops key — screenshots render inline; recordings can't be watched)."
478
+ required:
479
+ - id
480
+ - kind
481
+ - filename
482
+ - mimeType
483
+ - sizeBytes
484
+ - fetchUrl
485
+ additionalProperties: {}
486
+ description: "A file uploaded with a bug/feature report."
487
+ OpsItemRelated:
488
+ type: object
489
+ properties:
490
+ dashboard:
491
+ type: string
492
+ description: Dashboard-relative deep link to this item.
493
+ error:
494
+ type: string
495
+ description: Admin-API path to the tracked error (error tickets only).
496
+ alertRule:
497
+ type: string
498
+ description: Admin-API path to the alert rule (metric-rule alerts only).
499
+ metric:
500
+ type: string
501
+ description: Admin-API path to the metric the alert watches (alert tickets only).
502
+ githubIssue:
503
+ type: string
504
+ description: HTML URL of the connected GitHub issue, if any.
505
+ githubPr:
506
+ type: string
507
+ description: HTML URL of the linked GitHub pull request, if any.
508
+ additionalProperties: {}
509
+ description: "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."
510
+ ConnectorData:
511
+ type: object
512
+ properties:
513
+ github:
514
+ $ref: "#/GithubConnectorData"
515
+ slack:
516
+ $ref: "#/SlackConnectorData"
517
+ additionalProperties: {}
518
+ description: "Connector linkage for one queue item, keyed by provider. Each provider's driver deep-merges its own trace into this blob, so any subset of providers may be present. Unknown/future providers may appear as additional keys."
519
+ GithubConnectorData:
520
+ type: object
521
+ properties:
522
+ issue:
523
+ type: object
524
+ properties:
525
+ number:
526
+ type: number
527
+ description: GitHub issue number.
528
+ url:
529
+ type: string
530
+ description: HTML URL of the opened issue.
531
+ owner:
532
+ type: string
533
+ description: Repository owner (org or user).
534
+ repo:
535
+ type: string
536
+ description: Repository name.
537
+ createdAt:
538
+ type: string
539
+ description: ISO-8601 timestamp the issue was opened.
540
+ required:
541
+ - number
542
+ - url
543
+ - owner
544
+ - repo
545
+ additionalProperties: {}
546
+ description: The GitHub issue this item opened.
547
+ pr:
548
+ type: object
549
+ properties:
550
+ number:
551
+ type: number
552
+ description: Pull request number.
553
+ url:
554
+ type: string
555
+ description: HTML URL of the linked pull request.
556
+ linkedAt:
557
+ type: string
558
+ description: ISO-8601 timestamp the PR was linked.
559
+ connectedToIssue:
560
+ type: boolean
561
+ description: "Whether the PR was wired to the issue on GitHub (via a closing keyword or a comment)."
562
+ method:
563
+ type: string
564
+ enum:
565
+ - closes
566
+ - comment
567
+ description: How the PR was connected to the issue.
568
+ required:
569
+ - number
570
+ - url
571
+ additionalProperties: {}
572
+ description: The pull request linked to this item via `link-pr`.
573
+ additionalProperties: {}
574
+ description: "GitHub connector trace — the issue it opened and, once linked, the pull request."
575
+ SlackConnectorData:
576
+ type: object
577
+ properties:
578
+ message:
579
+ type: object
580
+ properties:
581
+ channel:
582
+ type: string
583
+ description: Slack channel id the message was posted to.
584
+ ts:
585
+ type: string
586
+ description: Slack message timestamp (`ts`) — the message handle used for in-place `chat.update`.
587
+ postedAt:
588
+ type: string
589
+ description: ISO-8601 timestamp the message was posted.
590
+ required:
591
+ - channel
592
+ - ts
593
+ additionalProperties: {}
594
+ description: The Slack message the driver posted for this item.
595
+ additionalProperties: {}
596
+ description: "Slack connector trace — the message the driver posted for this item. The linked pull request is recorded on `github.pr`, not here."
597
+ CreateBugRequest:
598
+ type: object
599
+ properties:
600
+ type:
601
+ type: string
602
+ enum:
603
+ - bug
604
+ description: Discriminator — files a bug.
605
+ title:
606
+ type: string
607
+ minLength: 1
608
+ maxLength: 200
609
+ pattern: '^\S(.*\S)?$'
610
+ description: One-line bug title (no leading/trailing whitespace).
611
+ stepsToReproduce:
612
+ type: string
613
+ maxLength: 8000
614
+ default: ""
615
+ description: How to reproduce the bug.
616
+ actualResult:
617
+ type: string
618
+ maxLength: 8000
619
+ default: ""
620
+ description: What actually happened.
621
+ expectedResult:
622
+ type: string
623
+ maxLength: 8000
624
+ default: ""
625
+ description: What was expected instead.
626
+ priority:
627
+ anyOf:
628
+ - $ref: "#/OpsItemPriority"
629
+ - type: "null"
630
+ description: Initial triage priority, or `null`.
631
+ reporterEmail:
632
+ anyOf:
633
+ - type: string
634
+ format: email
635
+ - type: "null"
636
+ description: Email of the reporter, or `null`.
637
+ pageUrl:
638
+ anyOf:
639
+ - type: string
640
+ format: uri
641
+ - type: "null"
642
+ description: URL of the page the bug relates to, or `null`.
643
+ userAgent:
644
+ anyOf:
645
+ - type: string
646
+ maxLength: 500
647
+ - type: "null"
648
+ description: Reporter's user-agent string, or `null`.
649
+ viewport:
650
+ anyOf:
651
+ - type: string
652
+ maxLength: 40
653
+ - type: "null"
654
+ description: Reporter's viewport (e.g. `1280x720`), or `null`.
655
+ context:
656
+ anyOf:
657
+ - type: object
658
+ additionalProperties: {}
659
+ - type: "null"
660
+ description: Arbitrary capture context, or `null`.
661
+ notify:
662
+ anyOf:
663
+ - $ref: ./common.yaml#/NotificationTarget
664
+ - type: "null"
665
+ description: Where this bug's completion notification lands.
666
+ required:
667
+ - type
668
+ - title
669
+ additionalProperties: false
670
+ description: "Bug-kind fields for `POST /api/admin/ops` (sent with `type: bug`)."
671
+ CreateFeatureRequestRequest:
672
+ type: object
673
+ properties:
674
+ type:
675
+ type: string
676
+ enum:
677
+ - feature_request
678
+ description: Discriminator — files a feature request.
679
+ title:
680
+ type: string
681
+ minLength: 1
682
+ maxLength: 200
683
+ pattern: '^\S(.*\S)?$'
684
+ description: One-line feature-request title (no leading/trailing whitespace).
685
+ description:
686
+ type: string
687
+ maxLength: 8000
688
+ default: ""
689
+ description: What the feature is.
690
+ useCase:
691
+ type: string
692
+ maxLength: 8000
693
+ default: ""
694
+ description: Why it's needed / the use case.
695
+ priority:
696
+ anyOf:
697
+ - $ref: "#/OpsItemPriority"
698
+ - type: "null"
699
+ description: Initial triage priority, or `null`.
700
+ reporterEmail:
701
+ anyOf:
702
+ - type: string
703
+ format: email
704
+ - type: "null"
705
+ description: Email of the reporter, or `null`.
706
+ pageUrl:
707
+ anyOf:
708
+ - type: string
709
+ format: uri
710
+ - type: "null"
711
+ description: URL of the page the request relates to, or `null`.
712
+ userAgent:
713
+ anyOf:
714
+ - type: string
715
+ maxLength: 500
716
+ - type: "null"
717
+ description: Reporter's user-agent string, or `null`.
718
+ context:
719
+ anyOf:
720
+ - type: object
721
+ additionalProperties: {}
722
+ - type: "null"
723
+ description: Arbitrary capture context, or `null`.
724
+ notify:
725
+ anyOf:
726
+ - $ref: ./common.yaml#/NotificationTarget
727
+ - type: "null"
728
+ description: Where this request's completion notification lands.
729
+ required:
730
+ - type
731
+ - title
732
+ additionalProperties: false
733
+ description: "Feature-request-kind fields for `POST /api/admin/ops` (sent with `type: feature_request`)."
734
+ CreateOpsItemRequest:
735
+ oneOf:
736
+ - $ref: "#/CreateBugRequest"
737
+ - $ref: "#/CreateFeatureRequestRequest"
738
+ discriminator:
739
+ propertyName: type
740
+ mapping:
741
+ bug: "#/CreateBugRequest"
742
+ feature_request: "#/CreateFeatureRequestRequest"
743
+ description: "Body for `POST /api/admin/ops`. A discriminated union on `type`: `bug` carries the bug fields, `feature_request` the feature fields. Only these two user-fileable types are accepted — `error`, `alert`, and `measure_plan` tickets are auto-filed by the platform and cannot be created over the API."
744
+ CreateOpsItemResponse:
745
+ type: object
746
+ properties:
747
+ id:
748
+ type: string
749
+ description: Newly created item id.
750
+ number:
751
+ description: Per-project item number assigned to the new item.
752
+ anyOf:
753
+ - type: number
754
+ - type: "null"
755
+ required:
756
+ - id
757
+ additionalProperties: false
758
+ description: Response for `POST /api/admin/ops`.
759
+ OpsItemStatus:
760
+ type: string
761
+ enum:
762
+ - open
763
+ - pending_approval
764
+ - triage
765
+ - triaged
766
+ - in_progress
767
+ - ready_for_qa
768
+ - resolved
769
+ - wont_fix
770
+ description: >-
771
+ Lifecycle status of a queue item. The working flow is `open` → `triaged` →
772
+ `in_progress` → `ready_for_qa` → `resolved` (or `wont_fix`, terminal from
773
+ any earlier stage). `ready_for_qa` is what a developer sets once a fix
774
+ lands; `resolved` is the QA sign-off, normally flipped in the dashboard
775
+ after verification — set it directly from code only when the fix has been
776
+ verified end-to-end. Two
777
+ human-gated holding states park an item OUT of the work queue until a human
778
+ promotes it to `open` in the dashboard, so `GET /api/admin/ops` excludes
779
+ them under `status=all`/default and returns them only when requested as an
780
+ exact `status`: `pending_approval` is the pre-open approval gate for
781
+ untriaged inbound (e.g. connector requests filed from a customer's
782
+ connectors panel) so it never gets auto-implemented — approving = flipping
783
+ the status to `open`; `triage` is the onboarding-help bucket —
784
+ questions/errors submitted to the "Stuck in onboarding?" assistant are
785
+ funnelled into the platform project as `triage` rows so the team can see
786
+ where people get stuck and follow up, keeping onboarding chatter out of the
787
+ work queue until a human moves real items to `open`.
788
+ OpsItemPriority:
789
+ type: string
790
+ enum:
791
+ - nice_to_have
792
+ - medium
793
+ - high
794
+ - critical
795
+ description: >-
796
+ Triage priority of a queue item. The lowest tier is `nice_to_have` (not
797
+ `low`) — carried over from the feature-request "importance" scale this
798
+ priority set replaced.
799
+ OpsItemPriorityOrNull:
800
+ anyOf:
801
+ - $ref: "#/OpsItemPriority"
802
+ - type: "null"
803
+ description: Triage priority, or `null` when not set (in an update, `null` clears it).
804
+ OpsItemNotifyOrNull:
805
+ anyOf:
806
+ - $ref: ./common.yaml#/NotificationTarget
807
+ - type: "null"
808
+ description: Where this item's completion notification lands, or `null`.
809
+ UpdateOpsItemStatusRequest:
810
+ type: object
811
+ properties:
812
+ status:
813
+ $ref: "#/OpsItemStatus"
814
+ priority:
815
+ $ref: "#/OpsItemPriorityOrNull"
816
+ notify:
817
+ $ref: "#/OpsItemNotifyOrNull"
818
+ additionalProperties: false
819
+ description: "Triage-only update — the shape accepted for any item, and the ONLY shape for auto-filed `error`/`alert`/`measure_plan` tickets (their content is not user-editable)."
820
+ UpdateBugRequest:
821
+ type: object
822
+ properties:
823
+ title:
824
+ type: string
825
+ minLength: 1
826
+ maxLength: 200
827
+ pattern: '^\S(.*\S)?$'
828
+ description: New bug title (no leading/trailing whitespace).
829
+ stepsToReproduce:
830
+ type: string
831
+ maxLength: 8000
832
+ description: Updated reproduction steps.
833
+ actualResult:
834
+ type: string
835
+ maxLength: 8000
836
+ description: Updated actual result.
837
+ expectedResult:
838
+ type: string
839
+ maxLength: 8000
840
+ description: Updated expected result.
841
+ status:
842
+ $ref: "#/OpsItemStatus"
843
+ priority:
844
+ $ref: "#/OpsItemPriorityOrNull"
845
+ githubPrNumber:
846
+ anyOf:
847
+ - type: integer
848
+ minimum: 1
849
+ - type: "null"
850
+ description: Link (or, when `null`, unlink) a GitHub pull request to this bug.
851
+ notify:
852
+ $ref: "#/OpsItemNotifyOrNull"
853
+ additionalProperties: false
854
+ description: "Content + triage update for a `bug` item (`PATCH /api/admin/ops/{handle}` when the item is a bug)."
855
+ UpdateFeatureRequestRequest:
856
+ type: object
857
+ properties:
858
+ title:
859
+ type: string
860
+ minLength: 1
861
+ maxLength: 200
862
+ pattern: '^\S(.*\S)?$'
863
+ description: New feature-request title (no leading/trailing whitespace).
864
+ description:
865
+ type: string
866
+ maxLength: 8000
867
+ description: Updated description.
868
+ useCase:
869
+ type: string
870
+ maxLength: 8000
871
+ description: Updated use case.
872
+ status:
873
+ $ref: "#/OpsItemStatus"
874
+ priority:
875
+ $ref: "#/OpsItemPriorityOrNull"
876
+ githubPrNumber:
877
+ anyOf:
878
+ - type: integer
879
+ minimum: 1
880
+ - type: "null"
881
+ description: Link (or, when `null`, unlink) a GitHub pull request to this request.
882
+ notify:
883
+ $ref: "#/OpsItemNotifyOrNull"
884
+ additionalProperties: false
885
+ description: "Content + triage update for a `feature_request` item (`PATCH /api/admin/ops/{handle}` when the item is a feature request)."
886
+ UpdateOpsItemRequest:
887
+ anyOf:
888
+ - $ref: "#/UpdateBugRequest"
889
+ - $ref: "#/UpdateFeatureRequestRequest"
890
+ - $ref: "#/UpdateOpsItemStatusRequest"
891
+ description: "Body for `PATCH /api/admin/ops/{handle}`. The body is type-less — the server validates it against the stored item's type: a `bug` accepts the bug content fields, a `feature_request` the feature fields, and `error`/`alert`/`measure_plan` only `status`/`priority`/`notify`. Pass at least one field."
892
+ UpdateOpsItemResponse:
893
+ type: object
894
+ properties:
895
+ id:
896
+ type: string
897
+ description: Item id that was updated.
898
+ required:
899
+ - id
900
+ additionalProperties: false
901
+ description: Response for the update / link-pr endpoints.
902
+ LinkPrToOpsItemRequest:
903
+ type: object
904
+ properties:
905
+ prNumber:
906
+ anyOf:
907
+ - type: integer
908
+ exclusiveMinimum: 0
909
+ maximum: 9007199254740991
910
+ - type: "null"
911
+ description: PR number to record on the item. `null` unlinks the PR.
912
+ prUrl:
913
+ description: Explicit PR URL. Required for error/alert tickets (no GitHub issue to derive the URL from).
914
+ type: string
915
+ format: uri
916
+ required:
917
+ - prNumber
918
+ additionalProperties: false
919
+ description: Body for `POST /api/admin/ops/{handle}/link-pr`.
920
+ LinkPrToOpsItemResponse:
921
+ type: object
922
+ properties:
923
+ id:
924
+ type: string
925
+ description: Item id that was updated.
926
+ required:
927
+ - id
928
+ additionalProperties: false
929
+ description: Response for the update / link-pr endpoints.
930
+ NotifyOpsRequest:
931
+ type: object
932
+ properties:
933
+ title:
934
+ type: string
935
+ minLength: 1
936
+ maxLength: 200
937
+ description: One-line headline of what's blocked.
938
+ summary:
939
+ type: string
940
+ minLength: 1
941
+ maxLength: 280
942
+ description: "One sentence: why it can't be fixed in code. Renders markdown."
943
+ steps:
944
+ description: Ordered steps the human should take to unblock — self-contained (the human reads only this card, not the agent's transcript), 3–6 steps, each naming the exact file, command, env var, or dashboard page. Renders markdown.
945
+ type: array
946
+ items:
947
+ type: string
948
+ href:
949
+ description: Dashboard-relative deep link to the related item. `null` is accepted and treated as "no link".
950
+ anyOf:
951
+ - type: string
952
+ - type: "null"
953
+ dedupeKey:
954
+ description: Stable per-escalation key (e.g. `feedback:7`) so re-runs dedupe to one row.
955
+ type: string
956
+ required:
957
+ - title
958
+ - summary
959
+ additionalProperties: false
960
+ description: >-
961
+ Body for `POST /api/admin/notifications`. In `title`, `summary`, and each
962
+ step, reference admin entities inline with tokens — `#42` (feedback item),
963
+ `@gate:<name>` (alias `@flag:`), `@experiment:<name>` (`@exp:`),
964
+ `@config:<name>`, `@killswitch:<name>` (`@ks:`), `@metric:<name>`,
965
+ `@universe:<name>`, `@alert:<name>` — where `<name>` is the entity's
966
+ immutable name/slug (e.g. `features.checkout`). The dashboard renders each
967
+ token as a live hover chip deep-linking to the entity; tokens degrade to
968
+ plain text elsewhere, so they're always safe to use.
969
+ NotifyOpsResponse:
970
+ type: object
971
+ properties:
972
+ dedupeKey:
973
+ type: string
974
+ description: The dedupe key the escalation was recorded under.
975
+ dispatched:
976
+ type: boolean
977
+ description: "`true` if a new escalation was dispatched; `false` on an idempotent repeat."
978
+ required:
979
+ - dedupeKey
980
+ - dispatched
981
+ additionalProperties: false
982
+ description: Response for `POST /api/admin/notifications`.
983
+ ListSlackChannelsResponse:
984
+ type: object
985
+ properties:
986
+ connected:
987
+ type: boolean
988
+ description: Whether a Slack connector is connected and authenticated.
989
+ channels:
990
+ type: array
991
+ items:
992
+ type: object
993
+ properties:
994
+ id:
995
+ type: string
996
+ description: Slack channel id.
997
+ name:
998
+ type: string
999
+ description: Slack channel name (without the leading `#`).
1000
+ isPrivate:
1001
+ description: Whether the channel is private.
1002
+ type: boolean
1003
+ required:
1004
+ - id
1005
+ - name
1006
+ additionalProperties: false
1007
+ description: One Slack channel the project can post to.
1008
+ description: The project's Slack channels (empty when no Slack is connected).
1009
+ required:
1010
+ - connected
1011
+ - channels
1012
+ additionalProperties: false
1013
+ description: Response for `GET /api/admin/slack/channels`.