@shipeasy/openapi 3.2.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-RTN572TI.js → chunk-75Z4SQOM.js} +75 -1
- package/dist/chunk-75Z4SQOM.js.map +1 -0
- package/dist/{chunk-DW33MG4B.js → chunk-ZYK74ZIW.js} +426 -121
- package/dist/chunk-ZYK74ZIW.js.map +1 -0
- package/dist/{client-BPVn4hMC.d.ts → client-DAGqRpF1.d.ts} +1362 -238
- package/dist/client.d.ts +1 -1
- package/dist/client.js +19 -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 +20 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +1648 -907
- package/dist/schemas.js +113 -1
- package/openapi-sdk.json +31 -9
- package/openapi.json +4040 -2083
- package/openapi.yaml +1775 -408
- package/package.json +1 -1
- 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/keys.yaml +30 -0
- package/spec/components/schemas/metrics.yaml +131 -251
- package/spec/components/schemas/ops.yaml +377 -29
- package/spec/components/schemas/projects.yaml +18 -0
- package/spec/components/schemas/tags.yaml +91 -0
- package/spec/openapi.yaml +43 -0
- package/spec/paths/alerts.yaml +5 -3
- package/spec/paths/i18n.yaml +2 -1
- package/spec/paths/keys.yaml +79 -0
- package/spec/paths/metrics.yaml +26 -17
- package/spec/paths/ops.yaml +388 -11
- package/spec/paths/tags.yaml +270 -0
- package/dist/chunk-DW33MG4B.js.map +0 -1
- package/dist/chunk-RTN572TI.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
|
|
@@ -1110,10 +1157,17 @@ CreatePublicBugRequest:
|
|
|
1110
1157
|
description: Emails of teammates to subscribe to this item's Slack pings at creation.
|
|
1111
1158
|
tags:
|
|
1112
1159
|
type: array
|
|
1160
|
+
maxItems: 50
|
|
1113
1161
|
items:
|
|
1114
|
-
|
|
1162
|
+
$ref: ./tags.yaml#/TagName
|
|
1115
1163
|
default: []
|
|
1116
|
-
description:
|
|
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.
|
|
1117
1171
|
reporterEmail:
|
|
1118
1172
|
anyOf:
|
|
1119
1173
|
- type: string
|
|
@@ -1144,6 +1198,20 @@ CreatePublicBugRequest:
|
|
|
1144
1198
|
additionalProperties: {}
|
|
1145
1199
|
- type: "null"
|
|
1146
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.
|
|
1147
1215
|
notify:
|
|
1148
1216
|
anyOf:
|
|
1149
1217
|
- $ref: ./common.yaml#/NotificationTarget
|
|
@@ -1152,7 +1220,7 @@ CreatePublicBugRequest:
|
|
|
1152
1220
|
required:
|
|
1153
1221
|
- title
|
|
1154
1222
|
additionalProperties: false
|
|
1155
|
-
description: "Body for `POST /ops/bug`. The same bug fields as `CreateBugRequest`, minus the `type` discriminator — the path already says what is being filed
|
|
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`."
|
|
1156
1224
|
CreatePublicFeatureRequestRequest:
|
|
1157
1225
|
type: object
|
|
1158
1226
|
properties:
|
|
@@ -1195,10 +1263,17 @@ CreatePublicFeatureRequestRequest:
|
|
|
1195
1263
|
description: Emails of teammates to subscribe to this item's Slack pings at creation.
|
|
1196
1264
|
tags:
|
|
1197
1265
|
type: array
|
|
1266
|
+
maxItems: 50
|
|
1198
1267
|
items:
|
|
1199
|
-
|
|
1268
|
+
$ref: ./tags.yaml#/TagName
|
|
1200
1269
|
default: []
|
|
1201
|
-
description:
|
|
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.
|
|
1202
1277
|
reporterEmail:
|
|
1203
1278
|
anyOf:
|
|
1204
1279
|
- type: string
|
|
@@ -1223,6 +1298,15 @@ CreatePublicFeatureRequestRequest:
|
|
|
1223
1298
|
additionalProperties: {}
|
|
1224
1299
|
- type: "null"
|
|
1225
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.
|
|
1226
1310
|
notify:
|
|
1227
1311
|
anyOf:
|
|
1228
1312
|
- $ref: ./common.yaml#/NotificationTarget
|
|
@@ -1231,7 +1315,7 @@ CreatePublicFeatureRequestRequest:
|
|
|
1231
1315
|
required:
|
|
1232
1316
|
- title
|
|
1233
1317
|
additionalProperties: false
|
|
1234
|
-
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
|
|
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`."
|
|
1235
1319
|
CreateOpsItemRequest:
|
|
1236
1320
|
oneOf:
|
|
1237
1321
|
- $ref: "#/CreateBugRequest"
|
|
@@ -1254,10 +1338,13 @@ CreatePublicTicketResponse:
|
|
|
1254
1338
|
deduped:
|
|
1255
1339
|
type: boolean
|
|
1256
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."
|
|
1257
1344
|
required:
|
|
1258
1345
|
- number
|
|
1259
1346
|
additionalProperties: false
|
|
1260
|
-
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
|
|
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."
|
|
1261
1348
|
CreateOpsItemResponse:
|
|
1262
1349
|
type: object
|
|
1263
1350
|
properties:
|
|
@@ -1321,6 +1408,7 @@ OpsInvestigationState:
|
|
|
1321
1408
|
enum:
|
|
1322
1409
|
- pr_ready
|
|
1323
1410
|
- pr_merged
|
|
1411
|
+
- pr_closed
|
|
1324
1412
|
- investigated
|
|
1325
1413
|
- detected
|
|
1326
1414
|
- question
|
|
@@ -1335,14 +1423,17 @@ OpsInvestigationState:
|
|
|
1335
1423
|
happen**, never authored on its own: linking a PR sets `pr_ready`, moving to
|
|
1336
1424
|
`in_progress` sets `working`, `ready_for_qa` sets `ready_for_qa`, a
|
|
1337
1425
|
system/assistant reply sets `question`, resolving clears it, and creation
|
|
1338
|
-
seeds `backlog`
|
|
1339
|
-
tickets. `backlog` is the single
|
|
1340
|
-
urgent that is reads off `priority`,
|
|
1341
|
-
action is to hand the item to an
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
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".
|
|
1346
1437
|
OpsItemPriorityOrNull:
|
|
1347
1438
|
anyOf:
|
|
1348
1439
|
- $ref: "#/OpsItemPriority"
|
|
@@ -1520,6 +1611,16 @@ AckOpsItemRequest:
|
|
|
1520
1611
|
The agent-run session id (e.g. Claude's `session_01…`), so the dashboard
|
|
1521
1612
|
can deep-link to the exact run page. Omit when the harness has no
|
|
1522
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.
|
|
1523
1624
|
additionalProperties: false
|
|
1524
1625
|
description: >-
|
|
1525
1626
|
Body for `POST /api/admin/ops/{handle}/ack`. With `agent` set this is an AI
|
|
@@ -2168,6 +2269,253 @@ UpdateOpsInvestigationRequest:
|
|
|
2168
2269
|
additionalProperties: false
|
|
2169
2270
|
minProperties: 1
|
|
2170
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).
|
|
2171
2519
|
NotificationFeedItem:
|
|
2172
2520
|
type: object
|
|
2173
2521
|
properties:
|
|
@@ -171,6 +171,12 @@ GetCurrentProjectResponse:
|
|
|
171
171
|
- type: boolean
|
|
172
172
|
- type: number
|
|
173
173
|
description: Whether key-authenticated public ticket creation (`POST /cli/report`) is allowed into this project. Off by default.
|
|
174
|
+
errorAutocloseDays:
|
|
175
|
+
type: integer
|
|
176
|
+
description: 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.
|
|
177
|
+
errorTicketMinOccurrences:
|
|
178
|
+
type: integer
|
|
179
|
+
description: 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.
|
|
174
180
|
stripeSubscriptionId:
|
|
175
181
|
anyOf:
|
|
176
182
|
- type: string
|
|
@@ -250,6 +256,8 @@ GetCurrentProjectResponse:
|
|
|
250
256
|
- moduleUser
|
|
251
257
|
- moduleEvents
|
|
252
258
|
- allowPublicTickets
|
|
259
|
+
- errorAutocloseDays
|
|
260
|
+
- errorTicketMinOccurrences
|
|
253
261
|
- slug
|
|
254
262
|
- logo
|
|
255
263
|
- defaultEnv
|
|
@@ -462,5 +470,15 @@ UpdateProjectRequest:
|
|
|
462
470
|
minimum: 0.0001
|
|
463
471
|
maximum: 0.05
|
|
464
472
|
description: SRM chi-square p-value below which the run is called invalid.
|
|
473
|
+
errorAutocloseDays:
|
|
474
|
+
type: integer
|
|
475
|
+
minimum: 0
|
|
476
|
+
maximum: 365
|
|
477
|
+
description: Days an `open` tracked error may go unseen before the nightly sweep auto-resolves it. `0` disables auto-close for this project.
|
|
478
|
+
errorTicketMinOccurrences:
|
|
479
|
+
type: integer
|
|
480
|
+
minimum: 1
|
|
481
|
+
maximum: 10000
|
|
482
|
+
description: 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.
|
|
465
483
|
additionalProperties: false
|
|
466
484
|
description: "Body for `PATCH /api/admin/projects/{id}`. Partial — every field is optional; only supplied fields change. The project id in the path must match the caller's own project."
|