@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.
- package/README.md +1 -1
- package/dist/{chunk-V4ZESAIF.js → chunk-75Z4SQOM.js} +141 -1
- package/dist/chunk-75Z4SQOM.js.map +1 -0
- package/dist/{chunk-UV333BIK.js → chunk-ZYK74ZIW.js} +569 -119
- package/dist/chunk-ZYK74ZIW.js.map +1 -0
- package/dist/{client-yqGYju-M.d.ts → client-DAGqRpF1.d.ts} +2209 -401
- package/dist/client.d.ts +1 -1
- package/dist/client.js +33 -1
- package/dist/custom.d.ts +5 -5
- package/dist/custom.js +128 -84
- package/dist/custom.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +34 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +2007 -891
- package/dist/schemas.js +179 -1
- package/openapi-sdk.json +1769 -0
- package/openapi.json +5861 -2597
- package/openapi.yaml +2739 -452
- package/package.json +6 -4
- package/spec/components/responses.yaml +39 -0
- package/spec/components/schemas/alert-rules.yaml +405 -7
- package/spec/components/schemas/alerts.yaml +9 -7
- package/spec/components/schemas/common.yaml +2 -2
- package/spec/components/schemas/connectors.yaml +69 -6
- package/spec/components/schemas/events.yaml +20 -9
- package/spec/components/schemas/gates.yaml +87 -0
- package/spec/components/schemas/keys.yaml +32 -2
- package/spec/components/schemas/killswitches.yaml +64 -0
- package/spec/components/schemas/metrics.yaml +131 -251
- package/spec/components/schemas/ops.yaml +555 -22
- package/spec/components/schemas/projects.yaml +18 -0
- package/spec/components/schemas/tags.yaml +91 -0
- package/spec/openapi-sdk.yaml +86 -0
- package/spec/openapi.yaml +61 -0
- package/spec/paths/alerts.yaml +5 -3
- package/spec/paths/gates.yaml +282 -0
- package/spec/paths/i18n.yaml +2 -1
- package/spec/paths/keys.yaml +79 -0
- package/spec/paths/killswitches.yaml +96 -0
- package/spec/paths/metrics.yaml +26 -17
- package/spec/paths/ops.yaml +566 -10
- package/spec/paths/tags.yaml +270 -0
- package/dist/chunk-UV333BIK.js.map +0 -1
- package/dist/chunk-V4ZESAIF.js.map +0 -1
|
@@ -416,7 +416,7 @@ OpsItemContext:
|
|
|
416
416
|
properties:
|
|
417
417
|
t:
|
|
418
418
|
type: number
|
|
419
|
-
description: Bucket start — unix epoch **milliseconds
|
|
419
|
+
description: Bucket start — unix epoch **milliseconds**. Bucket width scales with the window (hourly up to ~5 days, coarser beyond).
|
|
420
420
|
v:
|
|
421
421
|
type: number
|
|
422
422
|
description: Occurrence count in the bucket (sample-rate weighted).
|
|
@@ -424,11 +424,11 @@ OpsItemContext:
|
|
|
424
424
|
- t
|
|
425
425
|
- v
|
|
426
426
|
additionalProperties: {}
|
|
427
|
-
description: One
|
|
428
|
-
description:
|
|
427
|
+
description: One occurrence bucket.
|
|
428
|
+
description: Occurrence buckets, oldest first. Buckets with no occurrences are omitted.
|
|
429
429
|
domainFrom:
|
|
430
430
|
type: number
|
|
431
|
-
description: Chart domain start — unix epoch milliseconds (
|
|
431
|
+
description: Chart domain start — unix epoch milliseconds (the window's start).
|
|
432
432
|
domainTo:
|
|
433
433
|
type: number
|
|
434
434
|
description: Chart domain end — unix epoch milliseconds (the read time).
|
|
@@ -437,7 +437,7 @@ OpsItemContext:
|
|
|
437
437
|
- domainFrom
|
|
438
438
|
- domainTo
|
|
439
439
|
additionalProperties: {}
|
|
440
|
-
description: "Occurrence timeline for an `error` ticket —
|
|
440
|
+
description: "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."
|
|
441
441
|
additionalProperties: {}
|
|
442
442
|
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."
|
|
443
443
|
OpsBrowserContext:
|
|
@@ -548,20 +548,31 @@ OpsAlertContext:
|
|
|
548
548
|
type: string
|
|
549
549
|
enum:
|
|
550
550
|
- metric_rule
|
|
551
|
+
- killswitch_armed
|
|
551
552
|
- experiment_srm
|
|
552
553
|
- experiment_peek
|
|
553
554
|
- guardrail
|
|
554
|
-
description: What kind of
|
|
555
|
+
description: What kind of condition opened this alert instance.
|
|
555
556
|
dedupeKey:
|
|
556
557
|
type: string
|
|
557
558
|
description: Stable per-condition key; with `source` forms the ticket's `sourceRef`.
|
|
559
|
+
detail:
|
|
560
|
+
anyOf:
|
|
561
|
+
- type: string
|
|
562
|
+
- type: "null"
|
|
563
|
+
description: The instance's one-line reading — the observed condition in words.
|
|
564
|
+
ruleId:
|
|
565
|
+
anyOf:
|
|
566
|
+
- type: string
|
|
567
|
+
- type: "null"
|
|
568
|
+
description: Id of the alert rule that opened this instance, or `null` for a built-in condition.
|
|
558
569
|
severity:
|
|
559
570
|
type: string
|
|
560
571
|
enum:
|
|
561
572
|
- danger
|
|
562
573
|
- warn
|
|
563
574
|
- info
|
|
564
|
-
description:
|
|
575
|
+
description: "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."
|
|
565
576
|
observedValue:
|
|
566
577
|
anyOf:
|
|
567
578
|
- type: number
|
|
@@ -580,7 +591,7 @@ OpsAlertContext:
|
|
|
580
591
|
- resolved
|
|
581
592
|
- dismissed
|
|
582
593
|
- type: "null"
|
|
583
|
-
description: "
|
|
594
|
+
description: "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."
|
|
584
595
|
activeSince:
|
|
585
596
|
anyOf:
|
|
586
597
|
- type: string
|
|
@@ -604,9 +615,8 @@ OpsAlertContext:
|
|
|
604
615
|
required:
|
|
605
616
|
- source
|
|
606
617
|
- dedupeKey
|
|
607
|
-
- severity
|
|
608
618
|
additionalProperties: {}
|
|
609
|
-
description: "
|
|
619
|
+
description: "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."
|
|
610
620
|
OpsAlertRuleSummary:
|
|
611
621
|
type: object
|
|
612
622
|
properties:
|
|
@@ -855,6 +865,33 @@ GithubPrLink:
|
|
|
855
865
|
- closes
|
|
856
866
|
- comment
|
|
857
867
|
description: How the PR was connected to the issue.
|
|
868
|
+
owner:
|
|
869
|
+
type: string
|
|
870
|
+
description: >-
|
|
871
|
+
Repository owner (org or user) the pull request lives in. Absent on
|
|
872
|
+
links recorded before the field existed — `url` still carries it.
|
|
873
|
+
repo:
|
|
874
|
+
type: string
|
|
875
|
+
description: >-
|
|
876
|
+
Repository name the pull request lives in. Absent on links recorded
|
|
877
|
+
before the field existed — `url` still carries it.
|
|
878
|
+
state:
|
|
879
|
+
type: string
|
|
880
|
+
enum:
|
|
881
|
+
- open
|
|
882
|
+
- merged
|
|
883
|
+
- closed
|
|
884
|
+
description: >-
|
|
885
|
+
Outcome of the pull request on GitHub, kept current by the
|
|
886
|
+
`pull_request` webhook. `merged` and `closed` (closed WITHOUT merging,
|
|
887
|
+
i.e. rejected) are terminal. Absent means the outcome has never been
|
|
888
|
+
observed — treat it as `open`.
|
|
889
|
+
mergedAt:
|
|
890
|
+
type: string
|
|
891
|
+
description: ISO-8601 timestamp the pull request merged, when `state` is `merged`.
|
|
892
|
+
closedAt:
|
|
893
|
+
type: string
|
|
894
|
+
description: ISO-8601 timestamp the pull request closed unmerged, when `state` is `closed`.
|
|
858
895
|
required:
|
|
859
896
|
- number
|
|
860
897
|
- url
|
|
@@ -934,10 +971,15 @@ CreateBugRequest:
|
|
|
934
971
|
description: Emails of teammates to subscribe to this item's Slack pings at creation.
|
|
935
972
|
tags:
|
|
936
973
|
type: array
|
|
974
|
+
maxItems: 50
|
|
937
975
|
items:
|
|
938
|
-
|
|
976
|
+
$ref: ./tags.yaml#/TagName
|
|
939
977
|
default: []
|
|
940
|
-
description:
|
|
978
|
+
description: >-
|
|
979
|
+
Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name
|
|
980
|
+
is matched case-insensitively against the project's existing tags and
|
|
981
|
+
reuses that tag (keeping its stored casing) when one matches; a name with
|
|
982
|
+
no match creates a new project tag.
|
|
941
983
|
reporterEmail:
|
|
942
984
|
anyOf:
|
|
943
985
|
- type: string
|
|
@@ -1025,10 +1067,15 @@ CreateFeatureRequestRequest:
|
|
|
1025
1067
|
description: Emails of teammates to subscribe to this item's Slack pings at creation.
|
|
1026
1068
|
tags:
|
|
1027
1069
|
type: array
|
|
1070
|
+
maxItems: 50
|
|
1028
1071
|
items:
|
|
1029
|
-
|
|
1072
|
+
$ref: ./tags.yaml#/TagName
|
|
1030
1073
|
default: []
|
|
1031
|
-
description:
|
|
1074
|
+
description: >-
|
|
1075
|
+
Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name
|
|
1076
|
+
is matched case-insensitively against the project's existing tags and
|
|
1077
|
+
reuses that tag (keeping its stored casing) when one matches; a name with
|
|
1078
|
+
no match creates a new project tag.
|
|
1032
1079
|
reporterEmail:
|
|
1033
1080
|
anyOf:
|
|
1034
1081
|
- type: string
|
|
@@ -1063,6 +1110,212 @@ CreateFeatureRequestRequest:
|
|
|
1063
1110
|
- title
|
|
1064
1111
|
additionalProperties: false
|
|
1065
1112
|
description: "Feature-request-kind fields for `POST /api/admin/ops` (sent with `type: feature_request`)."
|
|
1113
|
+
CreatePublicBugRequest:
|
|
1114
|
+
type: object
|
|
1115
|
+
properties:
|
|
1116
|
+
title:
|
|
1117
|
+
type: string
|
|
1118
|
+
minLength: 1
|
|
1119
|
+
maxLength: 200
|
|
1120
|
+
pattern: '^\S(.*\S)?$'
|
|
1121
|
+
description: One-line bug title (no leading/trailing whitespace).
|
|
1122
|
+
stepsToReproduce:
|
|
1123
|
+
type: string
|
|
1124
|
+
maxLength: 8000
|
|
1125
|
+
default: ""
|
|
1126
|
+
description: How to reproduce the bug.
|
|
1127
|
+
actualResult:
|
|
1128
|
+
type: string
|
|
1129
|
+
maxLength: 8000
|
|
1130
|
+
default: ""
|
|
1131
|
+
description: What actually happened.
|
|
1132
|
+
expectedResult:
|
|
1133
|
+
type: string
|
|
1134
|
+
maxLength: 8000
|
|
1135
|
+
default: ""
|
|
1136
|
+
description: What was expected instead.
|
|
1137
|
+
priority:
|
|
1138
|
+
anyOf:
|
|
1139
|
+
- $ref: "#/OpsItemPriority"
|
|
1140
|
+
- type: "null"
|
|
1141
|
+
description: Initial triage priority, or `null`.
|
|
1142
|
+
status:
|
|
1143
|
+
anyOf:
|
|
1144
|
+
- $ref: "#/OpsItemStatus"
|
|
1145
|
+
description: Initial lifecycle status; defaults to `open` when omitted.
|
|
1146
|
+
assigneeId:
|
|
1147
|
+
anyOf:
|
|
1148
|
+
- type: string
|
|
1149
|
+
- type: "null"
|
|
1150
|
+
description: The `users.id` of the person to assign as owner at creation, or `null`.
|
|
1151
|
+
subscribers:
|
|
1152
|
+
type: array
|
|
1153
|
+
items:
|
|
1154
|
+
type: string
|
|
1155
|
+
format: email
|
|
1156
|
+
default: []
|
|
1157
|
+
description: Emails of teammates to subscribe to this item's Slack pings at creation.
|
|
1158
|
+
tags:
|
|
1159
|
+
type: array
|
|
1160
|
+
maxItems: 50
|
|
1161
|
+
items:
|
|
1162
|
+
$ref: ./tags.yaml#/TagName
|
|
1163
|
+
default: []
|
|
1164
|
+
description: >-
|
|
1165
|
+
Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name
|
|
1166
|
+
is matched case-insensitively against the project's existing tags and
|
|
1167
|
+
reuses that tag (keeping its stored casing) when one matches; a name with
|
|
1168
|
+
no match creates a new project tag. Here the tags only label the
|
|
1169
|
+
ticket: the project's tag rules (owner/status/agent routing) are not
|
|
1170
|
+
applied to a public report while it awaits approval.
|
|
1171
|
+
reporterEmail:
|
|
1172
|
+
anyOf:
|
|
1173
|
+
- type: string
|
|
1174
|
+
format: email
|
|
1175
|
+
- type: "null"
|
|
1176
|
+
description: Email of the reporter, or `null`.
|
|
1177
|
+
pageUrl:
|
|
1178
|
+
anyOf:
|
|
1179
|
+
- type: string
|
|
1180
|
+
format: uri
|
|
1181
|
+
- type: "null"
|
|
1182
|
+
description: URL of the page the bug relates to, or `null`.
|
|
1183
|
+
userAgent:
|
|
1184
|
+
anyOf:
|
|
1185
|
+
- type: string
|
|
1186
|
+
maxLength: 500
|
|
1187
|
+
- type: "null"
|
|
1188
|
+
description: Reporter's user-agent string, or `null`.
|
|
1189
|
+
viewport:
|
|
1190
|
+
anyOf:
|
|
1191
|
+
- type: string
|
|
1192
|
+
maxLength: 40
|
|
1193
|
+
- type: "null"
|
|
1194
|
+
description: Reporter's viewport (e.g. `1280x720`), or `null`.
|
|
1195
|
+
context:
|
|
1196
|
+
anyOf:
|
|
1197
|
+
- type: object
|
|
1198
|
+
additionalProperties: {}
|
|
1199
|
+
- type: "null"
|
|
1200
|
+
description: Arbitrary capture context, or `null`.
|
|
1201
|
+
dedupKey:
|
|
1202
|
+
type: string
|
|
1203
|
+
maxLength: 200
|
|
1204
|
+
description: >-
|
|
1205
|
+
Caller-chosen dedupe identity for this report, stored on the ticket. A
|
|
1206
|
+
repeat submission carrying the same key does NOT file a second ticket:
|
|
1207
|
+
the open ticket already holding that key is refreshed from this payload
|
|
1208
|
+
(title and the report fields overwritten, a "re-triggered" comment
|
|
1209
|
+
appended) and returned with `deduped: true` and `updated: true`. Triage
|
|
1210
|
+
state a human owns — status, priority, assignee, tags — is left
|
|
1211
|
+
untouched, and a `resolved`/`wont_fix` ticket no longer holds the key, so
|
|
1212
|
+
a failure that comes back after being closed files a fresh ticket. Omit
|
|
1213
|
+
it to fall back to the derived (title + `context.step`) dedupe, whose
|
|
1214
|
+
repeats return the existing ticket unchanged.
|
|
1215
|
+
notify:
|
|
1216
|
+
anyOf:
|
|
1217
|
+
- $ref: ./common.yaml#/NotificationTarget
|
|
1218
|
+
- type: "null"
|
|
1219
|
+
description: Where this bug's completion notification lands.
|
|
1220
|
+
required:
|
|
1221
|
+
- title
|
|
1222
|
+
additionalProperties: false
|
|
1223
|
+
description: "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`."
|
|
1224
|
+
CreatePublicFeatureRequestRequest:
|
|
1225
|
+
type: object
|
|
1226
|
+
properties:
|
|
1227
|
+
title:
|
|
1228
|
+
type: string
|
|
1229
|
+
minLength: 1
|
|
1230
|
+
maxLength: 200
|
|
1231
|
+
pattern: '^\S(.*\S)?$'
|
|
1232
|
+
description: One-line feature-request title (no leading/trailing whitespace).
|
|
1233
|
+
description:
|
|
1234
|
+
type: string
|
|
1235
|
+
maxLength: 8000
|
|
1236
|
+
default: ""
|
|
1237
|
+
description: What the feature is.
|
|
1238
|
+
useCase:
|
|
1239
|
+
type: string
|
|
1240
|
+
maxLength: 8000
|
|
1241
|
+
default: ""
|
|
1242
|
+
description: Why it's needed / the use case.
|
|
1243
|
+
priority:
|
|
1244
|
+
anyOf:
|
|
1245
|
+
- $ref: "#/OpsItemPriority"
|
|
1246
|
+
- type: "null"
|
|
1247
|
+
description: Initial triage priority, or `null`.
|
|
1248
|
+
status:
|
|
1249
|
+
anyOf:
|
|
1250
|
+
- $ref: "#/OpsItemStatus"
|
|
1251
|
+
description: Initial lifecycle status; defaults to `open` when omitted.
|
|
1252
|
+
assigneeId:
|
|
1253
|
+
anyOf:
|
|
1254
|
+
- type: string
|
|
1255
|
+
- type: "null"
|
|
1256
|
+
description: The `users.id` of the person to assign as owner at creation, or `null`.
|
|
1257
|
+
subscribers:
|
|
1258
|
+
type: array
|
|
1259
|
+
items:
|
|
1260
|
+
type: string
|
|
1261
|
+
format: email
|
|
1262
|
+
default: []
|
|
1263
|
+
description: Emails of teammates to subscribe to this item's Slack pings at creation.
|
|
1264
|
+
tags:
|
|
1265
|
+
type: array
|
|
1266
|
+
maxItems: 50
|
|
1267
|
+
items:
|
|
1268
|
+
$ref: ./tags.yaml#/TagName
|
|
1269
|
+
default: []
|
|
1270
|
+
description: >-
|
|
1271
|
+
Tag names to label the item with, e.g. `["ios", "checkout"]`. Each name
|
|
1272
|
+
is matched case-insensitively against the project's existing tags and
|
|
1273
|
+
reuses that tag (keeping its stored casing) when one matches; a name with
|
|
1274
|
+
no match creates a new project tag. Here the tags only label the
|
|
1275
|
+
ticket: the project's tag rules (owner/status/agent routing) are not
|
|
1276
|
+
applied to a public report while it awaits approval.
|
|
1277
|
+
reporterEmail:
|
|
1278
|
+
anyOf:
|
|
1279
|
+
- type: string
|
|
1280
|
+
format: email
|
|
1281
|
+
- type: "null"
|
|
1282
|
+
description: Email of the reporter, or `null`.
|
|
1283
|
+
pageUrl:
|
|
1284
|
+
anyOf:
|
|
1285
|
+
- type: string
|
|
1286
|
+
format: uri
|
|
1287
|
+
- type: "null"
|
|
1288
|
+
description: URL of the page the request relates to, or `null`.
|
|
1289
|
+
userAgent:
|
|
1290
|
+
anyOf:
|
|
1291
|
+
- type: string
|
|
1292
|
+
maxLength: 500
|
|
1293
|
+
- type: "null"
|
|
1294
|
+
description: Reporter's user-agent string, or `null`.
|
|
1295
|
+
context:
|
|
1296
|
+
anyOf:
|
|
1297
|
+
- type: object
|
|
1298
|
+
additionalProperties: {}
|
|
1299
|
+
- type: "null"
|
|
1300
|
+
description: Arbitrary capture context, or `null`.
|
|
1301
|
+
dedupKey:
|
|
1302
|
+
type: string
|
|
1303
|
+
maxLength: 200
|
|
1304
|
+
description: >-
|
|
1305
|
+
Caller-chosen dedupe identity for this request, stored on the ticket.
|
|
1306
|
+
Behaves exactly as on `POST /ops/bug`: a repeat carrying the same key
|
|
1307
|
+
refreshes the open ticket already holding it (fields overwritten, a
|
|
1308
|
+
"re-triggered" comment appended) and returns `deduped: true` with
|
|
1309
|
+
`updated: true`, instead of filing a second one.
|
|
1310
|
+
notify:
|
|
1311
|
+
anyOf:
|
|
1312
|
+
- $ref: ./common.yaml#/NotificationTarget
|
|
1313
|
+
- type: "null"
|
|
1314
|
+
description: Where this request's completion notification lands.
|
|
1315
|
+
required:
|
|
1316
|
+
- title
|
|
1317
|
+
additionalProperties: false
|
|
1318
|
+
description: "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`."
|
|
1066
1319
|
CreateOpsItemRequest:
|
|
1067
1320
|
oneOf:
|
|
1068
1321
|
- $ref: "#/CreateBugRequest"
|
|
@@ -1073,6 +1326,25 @@ CreateOpsItemRequest:
|
|
|
1073
1326
|
bug: "#/CreateBugRequest"
|
|
1074
1327
|
feature_request: "#/CreateFeatureRequestRequest"
|
|
1075
1328
|
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."
|
|
1329
|
+
CreatePublicTicketResponse:
|
|
1330
|
+
type: object
|
|
1331
|
+
properties:
|
|
1332
|
+
id:
|
|
1333
|
+
type: string
|
|
1334
|
+
description: The new item's id. Absent on a deduped response — nothing was created, so there is no new id to report.
|
|
1335
|
+
number:
|
|
1336
|
+
type: integer
|
|
1337
|
+
description: 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.
|
|
1338
|
+
deduped:
|
|
1339
|
+
type: boolean
|
|
1340
|
+
description: "`true` when an open ticket already tracked this report and nothing was filed (HTTP 200). Absent on a fresh file (HTTP 201)."
|
|
1341
|
+
updated:
|
|
1342
|
+
type: boolean
|
|
1343
|
+
description: "`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."
|
|
1344
|
+
required:
|
|
1345
|
+
- number
|
|
1346
|
+
additionalProperties: false
|
|
1347
|
+
description: "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."
|
|
1076
1348
|
CreateOpsItemResponse:
|
|
1077
1349
|
type: object
|
|
1078
1350
|
properties:
|
|
@@ -1136,6 +1408,7 @@ OpsInvestigationState:
|
|
|
1136
1408
|
enum:
|
|
1137
1409
|
- pr_ready
|
|
1138
1410
|
- pr_merged
|
|
1411
|
+
- pr_closed
|
|
1139
1412
|
- investigated
|
|
1140
1413
|
- detected
|
|
1141
1414
|
- question
|
|
@@ -1150,14 +1423,17 @@ OpsInvestigationState:
|
|
|
1150
1423
|
happen**, never authored on its own: linking a PR sets `pr_ready`, moving to
|
|
1151
1424
|
`in_progress` sets `working`, `ready_for_qa` sets `ready_for_qa`, a
|
|
1152
1425
|
system/assistant reply sets `question`, resolving clears it, and creation
|
|
1153
|
-
seeds `backlog`
|
|
1154
|
-
tickets. `backlog` is the single
|
|
1155
|
-
urgent that is reads off `priority`,
|
|
1156
|
-
action is to hand the item to an
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1426
|
+
seeds `backlog` for every untouched item (bugs, features, and auto-filed
|
|
1427
|
+
error/alert tickets alike — type is not a signal). `backlog` is the single
|
|
1428
|
+
"nothing has happened yet" state — how urgent that is reads off `priority`,
|
|
1429
|
+
not off a separate state, and its one action is to hand the item to an
|
|
1430
|
+
agent. `investigated`/`detected` are set when a completed agent run leaves
|
|
1431
|
+
findings to review, not at filing time. `pr_merged` and `pr_closed` are
|
|
1432
|
+
written by the GitHub `pull_request` webhook when the linked PR reaches a
|
|
1433
|
+
terminal outcome — merged (the fix shipped, resolve the item) or closed
|
|
1434
|
+
without merging (the fix was rejected, decide what happens next). Absent on
|
|
1435
|
+
rows filed before the field existed — consumers should treat a missing
|
|
1436
|
+
value as "derive from the other fields".
|
|
1161
1437
|
OpsItemPriorityOrNull:
|
|
1162
1438
|
anyOf:
|
|
1163
1439
|
- $ref: "#/OpsItemPriority"
|
|
@@ -1335,6 +1611,16 @@ AckOpsItemRequest:
|
|
|
1335
1611
|
The agent-run session id (e.g. Claude's `session_01…`), so the dashboard
|
|
1336
1612
|
can deep-link to the exact run page. Omit when the harness has no
|
|
1337
1613
|
session id.
|
|
1614
|
+
launch:
|
|
1615
|
+
type: boolean
|
|
1616
|
+
default: true
|
|
1617
|
+
description: >-
|
|
1618
|
+
Whether an AI ack may FIRE the agent's connected trigger. Default
|
|
1619
|
+
`true`: an ack naming a connected agent, with no `sessionId`, starts a
|
|
1620
|
+
new provider run of that agent. Pass `false` to only record the ack —
|
|
1621
|
+
claim the item and open the run record — without starting anything,
|
|
1622
|
+
e.g. when you ARE that agent working the item yourself and have no
|
|
1623
|
+
session id to pass. Ignored on a human ack.
|
|
1338
1624
|
additionalProperties: false
|
|
1339
1625
|
description: >-
|
|
1340
1626
|
Body for `POST /api/admin/ops/{handle}/ack`. With `agent` set this is an AI
|
|
@@ -1983,6 +2269,253 @@ UpdateOpsInvestigationRequest:
|
|
|
1983
2269
|
additionalProperties: false
|
|
1984
2270
|
minProperties: 1
|
|
1985
2271
|
description: "Body for `PATCH /api/admin/ops/{handle}/investigation/{investigationId}` — a partial update of one existing investigation record (typically the `working` run record you were handed). Send only the fields you want to change; at least one is required."
|
|
2272
|
+
OpsQuestionStatus:
|
|
2273
|
+
type: string
|
|
2274
|
+
enum:
|
|
2275
|
+
- open
|
|
2276
|
+
- completed
|
|
2277
|
+
- cancelled
|
|
2278
|
+
description: "Where a question stands — `open` (waiting on a person), `completed` (answered), or `cancelled` (withdrawn by the asker)."
|
|
2279
|
+
OpsQuestionDelivery:
|
|
2280
|
+
type: string
|
|
2281
|
+
enum:
|
|
2282
|
+
- resume
|
|
2283
|
+
- poll
|
|
2284
|
+
description: "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`."
|
|
2285
|
+
OpsQuestionOption:
|
|
2286
|
+
type: object
|
|
2287
|
+
properties:
|
|
2288
|
+
label:
|
|
2289
|
+
type: string
|
|
2290
|
+
minLength: 1
|
|
2291
|
+
maxLength: 120
|
|
2292
|
+
description: The option's display text — short (1–5 words). Answers name options by this label.
|
|
2293
|
+
description:
|
|
2294
|
+
type: string
|
|
2295
|
+
maxLength: 500
|
|
2296
|
+
description: What picking this option means — its trade-off or consequence.
|
|
2297
|
+
required:
|
|
2298
|
+
- label
|
|
2299
|
+
additionalProperties: false
|
|
2300
|
+
description: One choice offered by a question — rendered as a radio, or a checkbox when the question is `multiSelect`.
|
|
2301
|
+
OpsQuestionAnswer:
|
|
2302
|
+
type: object
|
|
2303
|
+
properties:
|
|
2304
|
+
selected:
|
|
2305
|
+
type: array
|
|
2306
|
+
items:
|
|
2307
|
+
type: string
|
|
2308
|
+
description: The option labels the person picked (empty when they only answered "Other").
|
|
2309
|
+
other:
|
|
2310
|
+
anyOf:
|
|
2311
|
+
- type: string
|
|
2312
|
+
- type: "null"
|
|
2313
|
+
description: The free-text "Other" answer, or `null`.
|
|
2314
|
+
required:
|
|
2315
|
+
- selected
|
|
2316
|
+
- other
|
|
2317
|
+
additionalProperties: false
|
|
2318
|
+
description: A person's answer to a question.
|
|
2319
|
+
AskOpsQuestionInput:
|
|
2320
|
+
type: object
|
|
2321
|
+
properties:
|
|
2322
|
+
header:
|
|
2323
|
+
type: string
|
|
2324
|
+
minLength: 1
|
|
2325
|
+
maxLength: 24
|
|
2326
|
+
description: Very short chip label for the question (max 24 chars), e.g. `Auth method`.
|
|
2327
|
+
question:
|
|
2328
|
+
type: string
|
|
2329
|
+
minLength: 1
|
|
2330
|
+
maxLength: 2000
|
|
2331
|
+
description: The complete question, ending with a question mark (markdown).
|
|
2332
|
+
options:
|
|
2333
|
+
type: array
|
|
2334
|
+
minItems: 2
|
|
2335
|
+
maxItems: 4
|
|
2336
|
+
items:
|
|
2337
|
+
$ref: "#/OpsQuestionOption"
|
|
2338
|
+
description: 2–4 distinct choices. Do not add an "Other" option — a free-text answer is always offered.
|
|
2339
|
+
multiSelect:
|
|
2340
|
+
type: boolean
|
|
2341
|
+
default: false
|
|
2342
|
+
description: "`true` lets the person pick several options (checkboxes); `false` (the default) exactly one (radios)."
|
|
2343
|
+
required:
|
|
2344
|
+
- header
|
|
2345
|
+
- question
|
|
2346
|
+
- options
|
|
2347
|
+
additionalProperties: false
|
|
2348
|
+
description: One question to ask — the `AskUserQuestion` shape.
|
|
2349
|
+
AskOpsQuestionsRequest:
|
|
2350
|
+
type: object
|
|
2351
|
+
properties:
|
|
2352
|
+
questions:
|
|
2353
|
+
type: array
|
|
2354
|
+
minItems: 1
|
|
2355
|
+
maxItems: 4
|
|
2356
|
+
items:
|
|
2357
|
+
$ref: "#/AskOpsQuestionInput"
|
|
2358
|
+
description: 1–4 questions to ask at once.
|
|
2359
|
+
runId:
|
|
2360
|
+
type: string
|
|
2361
|
+
maxLength: 200
|
|
2362
|
+
description: 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.
|
|
2363
|
+
agent:
|
|
2364
|
+
type: string
|
|
2365
|
+
enum:
|
|
2366
|
+
- jarvis
|
|
2367
|
+
- claude
|
|
2368
|
+
- cursor
|
|
2369
|
+
- copilot
|
|
2370
|
+
- jules
|
|
2371
|
+
description: The agent type asking — pass your own type when you are a coding agent. Defaults to the run's agent.
|
|
2372
|
+
delivery:
|
|
2373
|
+
$ref: "#/OpsQuestionDelivery"
|
|
2374
|
+
required:
|
|
2375
|
+
- questions
|
|
2376
|
+
additionalProperties: false
|
|
2377
|
+
description: "Body for `POST /api/admin/ops/{handle}/questions`."
|
|
2378
|
+
AskOpsQuestionsResponse:
|
|
2379
|
+
type: array
|
|
2380
|
+
items:
|
|
2381
|
+
$ref: "#/OpsQuestion"
|
|
2382
|
+
description: Response for `POST /api/admin/ops/{handle}/questions` — the created questions, in the order asked.
|
|
2383
|
+
AnswerOpsQuestionRequest:
|
|
2384
|
+
type: object
|
|
2385
|
+
properties:
|
|
2386
|
+
selected:
|
|
2387
|
+
type: array
|
|
2388
|
+
maxItems: 4
|
|
2389
|
+
items:
|
|
2390
|
+
type: string
|
|
2391
|
+
maxLength: 120
|
|
2392
|
+
description: The option labels picked — exactly one for a single-select question (unless answering only with `other`), one or more for `multiSelect`.
|
|
2393
|
+
other:
|
|
2394
|
+
type: string
|
|
2395
|
+
maxLength: 10000
|
|
2396
|
+
description: A free-text "Other" answer.
|
|
2397
|
+
additionalProperties: false
|
|
2398
|
+
minProperties: 1
|
|
2399
|
+
description: "Body for `POST /api/admin/ops/{handle}/questions/{questionId}/answer` — pick option labels, write a free-text answer, or both (multi-select only)."
|
|
2400
|
+
OpsQuestion:
|
|
2401
|
+
type: object
|
|
2402
|
+
properties:
|
|
2403
|
+
id:
|
|
2404
|
+
type: string
|
|
2405
|
+
description: Question id.
|
|
2406
|
+
feedbackId:
|
|
2407
|
+
type: string
|
|
2408
|
+
description: The queue item the question hangs off.
|
|
2409
|
+
header:
|
|
2410
|
+
type: string
|
|
2411
|
+
description: Short chip label for the question.
|
|
2412
|
+
question:
|
|
2413
|
+
type: string
|
|
2414
|
+
description: The full question (markdown).
|
|
2415
|
+
options:
|
|
2416
|
+
type: array
|
|
2417
|
+
items:
|
|
2418
|
+
type: object
|
|
2419
|
+
properties:
|
|
2420
|
+
label:
|
|
2421
|
+
type: string
|
|
2422
|
+
description: The option's display text.
|
|
2423
|
+
description:
|
|
2424
|
+
anyOf:
|
|
2425
|
+
- type: string
|
|
2426
|
+
- type: "null"
|
|
2427
|
+
description: What picking the option means, or `null`.
|
|
2428
|
+
required:
|
|
2429
|
+
- label
|
|
2430
|
+
- description
|
|
2431
|
+
additionalProperties: false
|
|
2432
|
+
description: One offered choice.
|
|
2433
|
+
description: The offered choices, in order.
|
|
2434
|
+
multiSelect:
|
|
2435
|
+
type: boolean
|
|
2436
|
+
description: Whether several options may be picked.
|
|
2437
|
+
status:
|
|
2438
|
+
$ref: "#/OpsQuestionStatus"
|
|
2439
|
+
answer:
|
|
2440
|
+
anyOf:
|
|
2441
|
+
- $ref: "#/OpsQuestionAnswer"
|
|
2442
|
+
- type: "null"
|
|
2443
|
+
description: The person's answer, or `null` while the question is open (or was withdrawn).
|
|
2444
|
+
answeredBy:
|
|
2445
|
+
anyOf:
|
|
2446
|
+
- type: string
|
|
2447
|
+
- type: "null"
|
|
2448
|
+
description: Email of the person who answered, or `null`.
|
|
2449
|
+
answeredAt:
|
|
2450
|
+
anyOf:
|
|
2451
|
+
- type: string
|
|
2452
|
+
- type: "null"
|
|
2453
|
+
description: ISO-8601 timestamp of the answer, or `null`.
|
|
2454
|
+
agent:
|
|
2455
|
+
anyOf:
|
|
2456
|
+
- type: string
|
|
2457
|
+
enum:
|
|
2458
|
+
- jarvis
|
|
2459
|
+
- claude
|
|
2460
|
+
- cursor
|
|
2461
|
+
- copilot
|
|
2462
|
+
- jules
|
|
2463
|
+
- type: "null"
|
|
2464
|
+
description: The agent that asked, or `null` (asked by a person or an unattributed key).
|
|
2465
|
+
askedBy:
|
|
2466
|
+
anyOf:
|
|
2467
|
+
- type: string
|
|
2468
|
+
- type: "null"
|
|
2469
|
+
description: Email of the person who asked, when a human asked, or `null`.
|
|
2470
|
+
runId:
|
|
2471
|
+
anyOf:
|
|
2472
|
+
- type: string
|
|
2473
|
+
- type: "null"
|
|
2474
|
+
description: The run (investigation record id) the question was asked under, or `null`.
|
|
2475
|
+
delivery:
|
|
2476
|
+
$ref: "#/OpsQuestionDelivery"
|
|
2477
|
+
deliveredAt:
|
|
2478
|
+
anyOf:
|
|
2479
|
+
- type: string
|
|
2480
|
+
- type: "null"
|
|
2481
|
+
description: ISO-8601 timestamp the answer was re-delivered to the asking run (`resume` only), or `null`.
|
|
2482
|
+
deliveryError:
|
|
2483
|
+
anyOf:
|
|
2484
|
+
- type: string
|
|
2485
|
+
- type: "null"
|
|
2486
|
+
description: Why a `resume` re-delivery failed, or `null`.
|
|
2487
|
+
createdAt:
|
|
2488
|
+
type: string
|
|
2489
|
+
description: ISO-8601 creation timestamp.
|
|
2490
|
+
updatedAt:
|
|
2491
|
+
type: string
|
|
2492
|
+
description: ISO-8601 last-update timestamp.
|
|
2493
|
+
required:
|
|
2494
|
+
- id
|
|
2495
|
+
- feedbackId
|
|
2496
|
+
- header
|
|
2497
|
+
- question
|
|
2498
|
+
- options
|
|
2499
|
+
- multiSelect
|
|
2500
|
+
- status
|
|
2501
|
+
- answer
|
|
2502
|
+
- answeredBy
|
|
2503
|
+
- answeredAt
|
|
2504
|
+
- agent
|
|
2505
|
+
- askedBy
|
|
2506
|
+
- runId
|
|
2507
|
+
- delivery
|
|
2508
|
+
- deliveredAt
|
|
2509
|
+
- deliveryError
|
|
2510
|
+
- createdAt
|
|
2511
|
+
- updatedAt
|
|
2512
|
+
additionalProperties: false
|
|
2513
|
+
description: One structured question on a queue item and, once answered, its answer.
|
|
2514
|
+
ListOpsQuestionsResponse:
|
|
2515
|
+
type: array
|
|
2516
|
+
items:
|
|
2517
|
+
$ref: "#/OpsQuestion"
|
|
2518
|
+
description: Response for `GET /api/admin/ops/{handle}/questions` — the item's questions, newest first (max 100).
|
|
1986
2519
|
NotificationFeedItem:
|
|
1987
2520
|
type: object
|
|
1988
2521
|
properties:
|