@shipeasy/openapi 2.2.0 → 2.4.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/dist/{chunk-643YSMLU.js → chunk-4QSU744W.js} +183 -1
- package/dist/chunk-4QSU744W.js.map +1 -0
- package/dist/{chunk-MRW3DJ57.js → chunk-ZPKHTUVV.js} +1238 -335
- package/dist/chunk-ZPKHTUVV.js.map +1 -0
- package/dist/{client-K0ShmsC7.d.ts → client-WGNXT4xl.d.ts} +5818 -2647
- package/dist/client.d.ts +1 -1
- package/dist/client.js +51 -1
- package/dist/custom.js +4 -4
- package/dist/custom.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +52 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +3538 -534
- package/dist/schemas.js +253 -5
- package/openapi.json +12914 -7158
- package/openapi.yaml +7672 -3742
- package/package.json +1 -1
- package/spec/components/errors.yaml +33 -1
- package/spec/components/schemas/alerts.yaml +138 -0
- package/spec/components/schemas/attributes.yaml +53 -3
- package/spec/components/schemas/common.yaml +16 -0
- package/spec/components/schemas/configs.yaml +58 -0
- package/spec/components/schemas/connectors.yaml +5 -1
- package/spec/components/schemas/errors-api.yaml +116 -6
- package/spec/components/schemas/experiment-api-row.yaml +293 -0
- package/spec/components/schemas/experiments.yaml +395 -380
- package/spec/components/schemas/gates.yaml +355 -272
- package/spec/components/schemas/i18n.yaml +169 -40
- package/spec/components/schemas/keys.yaml +2 -1
- package/spec/components/schemas/killswitches.yaml +36 -0
- package/spec/components/schemas/metrics.yaml +200 -23
- package/spec/components/schemas/ops.yaml +918 -29
- package/spec/components/schemas/projects.yaml +246 -2
- package/spec/components/schemas/universes.yaml +83 -1
- package/spec/openapi.yaml +61 -0
- package/spec/paths/alert-rules.yaml +1 -0
- package/spec/paths/alerts.yaml +184 -0
- package/spec/paths/attributes.yaml +23 -5
- package/spec/paths/configs.yaml +71 -0
- package/spec/paths/errors.yaml +112 -2
- package/spec/paths/events.yaml +1 -0
- package/spec/paths/experiments.yaml +244 -16
- package/spec/paths/gates.yaml +138 -0
- package/spec/paths/i18n.yaml +290 -6
- package/spec/paths/keys.yaml +1 -0
- package/spec/paths/killswitches.yaml +7 -0
- package/spec/paths/metrics.yaml +187 -0
- package/spec/paths/ops.yaml +410 -0
- package/spec/paths/projects.yaml +62 -2
- package/spec/paths/universes.yaml +1 -0
- package/dist/chunk-643YSMLU.js.map +0 -1
- package/dist/chunk-MRW3DJ57.js.map +0 -1
|
@@ -35,9 +35,88 @@ ListOpsItemsResponse:
|
|
|
35
35
|
anyOf:
|
|
36
36
|
- type: string
|
|
37
37
|
- type: "null"
|
|
38
|
+
investigationState:
|
|
39
|
+
anyOf:
|
|
40
|
+
- $ref: "#/OpsInvestigationState"
|
|
41
|
+
- type: "null"
|
|
42
|
+
description: >-
|
|
43
|
+
Where automation has taken this item in the investigation lifecycle
|
|
44
|
+
(see `OpsInvestigationState`). Optional — absent/`null` on rows filed
|
|
45
|
+
before the field existed; derive from `status`/`type` in that case.
|
|
46
|
+
source:
|
|
47
|
+
type: string
|
|
48
|
+
enum:
|
|
49
|
+
- team
|
|
50
|
+
- system
|
|
51
|
+
description: "How the item was filed: `team` (a human admin/teammate — bug/feature) or `system` (auto-filed — error/alert/measure_plan)."
|
|
52
|
+
reporterEmail:
|
|
53
|
+
anyOf:
|
|
54
|
+
- type: string
|
|
55
|
+
- type: "null"
|
|
56
|
+
description: Reporter email (bug/feature), or `null`.
|
|
57
|
+
stepsToReproduce:
|
|
58
|
+
type: string
|
|
59
|
+
description: Reproduction steps — populated for `bug`, empty string otherwise.
|
|
60
|
+
actualResult:
|
|
61
|
+
type: string
|
|
62
|
+
description: What actually happened — `bug` only, empty string otherwise.
|
|
63
|
+
expectedResult:
|
|
64
|
+
type: string
|
|
65
|
+
description: What was expected — `bug` only, empty string otherwise.
|
|
66
|
+
description:
|
|
67
|
+
type: string
|
|
68
|
+
description: Feature description — populated for `feature_request`, empty string otherwise.
|
|
69
|
+
useCase:
|
|
70
|
+
type: string
|
|
71
|
+
description: Feature use case — `feature_request` only, empty string otherwise.
|
|
72
|
+
context:
|
|
73
|
+
anyOf:
|
|
74
|
+
- $ref: "#/OpsItemContext"
|
|
75
|
+
- type: "null"
|
|
76
|
+
description: "The RAW stored capture context on the row — NOT hydrated: list rows carry only what was captured at file time (e.g. `context.browser` for bug/feature, the trigger subset for auto-filed tickets). The live `error`/`alert` readings and `errorChart` are added only by the single-item read (`GET /api/admin/ops/{handle}`). `null` when nothing was captured."
|
|
77
|
+
connectorData:
|
|
78
|
+
anyOf:
|
|
79
|
+
- $ref: "#/ConnectorData"
|
|
80
|
+
- type: "null"
|
|
81
|
+
description: "Per-connector linkage recorded for this item, keyed by connector provider. `null` if no connector has touched the item."
|
|
82
|
+
notify:
|
|
83
|
+
anyOf:
|
|
84
|
+
- $ref: ./common.yaml#/NotificationTarget
|
|
85
|
+
- type: "null"
|
|
86
|
+
description: Per-item completion-notification target, or `null` (falls back to the project default).
|
|
87
|
+
assigneeId:
|
|
88
|
+
anyOf:
|
|
89
|
+
- type: string
|
|
90
|
+
- type: "null"
|
|
91
|
+
description: The PERSON owner — a `users.id` (resolved into `owner.user`), or `null` when unassigned.
|
|
92
|
+
assigneeConnectorId:
|
|
93
|
+
anyOf:
|
|
94
|
+
- type: string
|
|
95
|
+
- type: "null"
|
|
96
|
+
description: The AGENT owner when it is a connected trigger connector — a `connectors` row id (resolved into `owner.agent`), or `null`. Mutually exclusive with `assigneeAgent`.
|
|
97
|
+
assigneeAgent:
|
|
98
|
+
anyOf:
|
|
99
|
+
- type: string
|
|
100
|
+
- type: "null"
|
|
101
|
+
description: The AGENT owner when it is a built-in hosted Shipeasy agent — currently only `jarvis` — or `null`. Mutually exclusive with `assigneeConnectorId`.
|
|
102
|
+
owner:
|
|
103
|
+
$ref: "#/OpsItemOwner"
|
|
104
|
+
run:
|
|
105
|
+
anyOf:
|
|
106
|
+
- $ref: "#/OpsRun"
|
|
107
|
+
- type: "null"
|
|
108
|
+
description: The currently OPEN run on this item (someone acked it and is actively working — the cockpit's live working indicator), or `null` when nothing is in flight.
|
|
109
|
+
lastRun:
|
|
110
|
+
anyOf:
|
|
111
|
+
- $ref: "#/OpsRun"
|
|
112
|
+
- type: "null"
|
|
113
|
+
description: The most recently COMPLETED run (the run result — final action, PR, duration), excluding superseded runs; `null` when no run has completed yet.
|
|
38
114
|
createdAt:
|
|
39
115
|
type: string
|
|
40
116
|
description: ISO-8601 creation timestamp.
|
|
117
|
+
updatedAt:
|
|
118
|
+
type: string
|
|
119
|
+
description: ISO-8601 last-update timestamp.
|
|
41
120
|
required:
|
|
42
121
|
- id
|
|
43
122
|
- number
|
|
@@ -45,9 +124,14 @@ ListOpsItemsResponse:
|
|
|
45
124
|
- title
|
|
46
125
|
- status
|
|
47
126
|
- priority
|
|
127
|
+
- source
|
|
128
|
+
- owner
|
|
129
|
+
- run
|
|
130
|
+
- lastRun
|
|
48
131
|
- createdAt
|
|
132
|
+
- updatedAt
|
|
49
133
|
additionalProperties: {}
|
|
50
|
-
description: One queue item — any type.
|
|
134
|
+
description: One queue item — any type — plus its resolved `owner` and run state.
|
|
51
135
|
description: A page of queue items, newest first.
|
|
52
136
|
GetOpsItemResponse:
|
|
53
137
|
type: object
|
|
@@ -90,6 +174,16 @@ GetOpsItemResponse:
|
|
|
90
174
|
- type: string
|
|
91
175
|
- type: "null"
|
|
92
176
|
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."
|
|
177
|
+
investigationState:
|
|
178
|
+
anyOf:
|
|
179
|
+
- $ref: "#/OpsInvestigationState"
|
|
180
|
+
- type: "null"
|
|
181
|
+
description: >-
|
|
182
|
+
Where automation has taken this item in the investigation lifecycle
|
|
183
|
+
(see `OpsInvestigationState`). Written as a side-effect of the actions
|
|
184
|
+
that already happen (link a PR, change status, an assistant reply);
|
|
185
|
+
`null` on rows filed before the field existed — derive from
|
|
186
|
+
`status`/`type` in that case.
|
|
93
187
|
reporterEmail:
|
|
94
188
|
anyOf:
|
|
95
189
|
- type: string
|
|
@@ -132,6 +226,23 @@ GetOpsItemResponse:
|
|
|
132
226
|
- $ref: ./common.yaml#/NotificationTarget
|
|
133
227
|
- type: "null"
|
|
134
228
|
description: Per-item completion-notification target, or `null` (falls back to the project default).
|
|
229
|
+
assigneeId:
|
|
230
|
+
anyOf:
|
|
231
|
+
- type: string
|
|
232
|
+
- type: "null"
|
|
233
|
+
description: The PERSON owner — a `users.id` (resolved into `owner.user`), or `null` when unassigned.
|
|
234
|
+
assigneeConnectorId:
|
|
235
|
+
anyOf:
|
|
236
|
+
- type: string
|
|
237
|
+
- type: "null"
|
|
238
|
+
description: The AGENT owner when it is a connected trigger connector — a `connectors` row id (resolved into `owner.agent`), or `null`. Mutually exclusive with `assigneeAgent`.
|
|
239
|
+
assigneeAgent:
|
|
240
|
+
anyOf:
|
|
241
|
+
- type: string
|
|
242
|
+
- type: "null"
|
|
243
|
+
description: The AGENT owner when it is a built-in hosted Shipeasy agent — currently only `jarvis` — or `null`. Mutually exclusive with `assigneeConnectorId`.
|
|
244
|
+
owner:
|
|
245
|
+
$ref: "#/OpsItemOwner"
|
|
135
246
|
createdAt:
|
|
136
247
|
type: string
|
|
137
248
|
description: ISO-8601 creation timestamp.
|
|
@@ -148,9 +259,144 @@ GetOpsItemResponse:
|
|
|
148
259
|
- context
|
|
149
260
|
- attachments
|
|
150
261
|
- related
|
|
262
|
+
- owner
|
|
151
263
|
- createdAt
|
|
152
264
|
additionalProperties: {}
|
|
153
265
|
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."
|
|
266
|
+
OpsItemOwner:
|
|
267
|
+
type: object
|
|
268
|
+
properties:
|
|
269
|
+
user:
|
|
270
|
+
anyOf:
|
|
271
|
+
- type: object
|
|
272
|
+
properties:
|
|
273
|
+
id:
|
|
274
|
+
type: string
|
|
275
|
+
description: The `users.id` of the assigned person (what `assigneeId` stores).
|
|
276
|
+
email:
|
|
277
|
+
type: string
|
|
278
|
+
description: The person's email.
|
|
279
|
+
name:
|
|
280
|
+
anyOf:
|
|
281
|
+
- type: string
|
|
282
|
+
- type: "null"
|
|
283
|
+
description: The person's display name, or `null` when none is set.
|
|
284
|
+
required:
|
|
285
|
+
- id
|
|
286
|
+
- email
|
|
287
|
+
- name
|
|
288
|
+
additionalProperties: false
|
|
289
|
+
description: The resolved person owner.
|
|
290
|
+
- type: "null"
|
|
291
|
+
description: The PERSON half of the owner (resolved from `assigneeId`), or `null` when no person is assigned.
|
|
292
|
+
agent:
|
|
293
|
+
anyOf:
|
|
294
|
+
- type: object
|
|
295
|
+
properties:
|
|
296
|
+
connectorId:
|
|
297
|
+
anyOf:
|
|
298
|
+
- type: string
|
|
299
|
+
- type: "null"
|
|
300
|
+
description: The `connectors` row id for a connector-backed agent; `null` for the built-in one.
|
|
301
|
+
builtin:
|
|
302
|
+
anyOf:
|
|
303
|
+
- type: string
|
|
304
|
+
const: jarvis
|
|
305
|
+
- type: "null"
|
|
306
|
+
description: The built-in-agent key (`jarvis`) when this is the hosted Shipeasy agent; `null` for a connector-backed one.
|
|
307
|
+
provider:
|
|
308
|
+
type: string
|
|
309
|
+
enum:
|
|
310
|
+
- claude_trigger
|
|
311
|
+
- cursor_trigger
|
|
312
|
+
- copilot_trigger
|
|
313
|
+
- jules_trigger
|
|
314
|
+
- jarvis
|
|
315
|
+
description: The trigger-connector provider backing this agent, or `jarvis` for the built-in hosted agent.
|
|
316
|
+
name:
|
|
317
|
+
type: string
|
|
318
|
+
description: Display name — the connector's `name`, the provider default (e.g. "Claude"), or "Jarvis".
|
|
319
|
+
required:
|
|
320
|
+
- connectorId
|
|
321
|
+
- builtin
|
|
322
|
+
- provider
|
|
323
|
+
- name
|
|
324
|
+
additionalProperties: false
|
|
325
|
+
description: The resolved agent owner. Exactly one of `connectorId` / `builtin` is set.
|
|
326
|
+
- type: "null"
|
|
327
|
+
description: The AGENT half of the owner (resolved from `assigneeConnectorId` / `assigneeAgent`), or `null` when no agent is assigned.
|
|
328
|
+
required:
|
|
329
|
+
- user
|
|
330
|
+
- agent
|
|
331
|
+
additionalProperties: false
|
|
332
|
+
description: "The fully-resolved owner of a queue item — a person and/or an AI agent. The two halves are independent: an item may have a person, an agent, both, or neither (both `null`)."
|
|
333
|
+
OpsRun:
|
|
334
|
+
type: object
|
|
335
|
+
properties:
|
|
336
|
+
id:
|
|
337
|
+
type: string
|
|
338
|
+
description: Run record id.
|
|
339
|
+
agent:
|
|
340
|
+
anyOf:
|
|
341
|
+
- type: string
|
|
342
|
+
- type: "null"
|
|
343
|
+
description: "The AI agent type working the run (`jarvis` | `claude` | `cursor` | `copilot` | `jules`); `null` for a human ack."
|
|
344
|
+
connectorId:
|
|
345
|
+
anyOf:
|
|
346
|
+
- type: string
|
|
347
|
+
- type: "null"
|
|
348
|
+
description: The trigger-connector row id backing the acking agent; `null` for a human ack or the built-in Jarvis agent.
|
|
349
|
+
ackedBy:
|
|
350
|
+
anyOf:
|
|
351
|
+
- type: string
|
|
352
|
+
- type: "null"
|
|
353
|
+
description: Email of the human who acked; `null` for an AI ack.
|
|
354
|
+
sessionId:
|
|
355
|
+
anyOf:
|
|
356
|
+
- type: string
|
|
357
|
+
- type: "null"
|
|
358
|
+
description: The agent-run session id recorded on the ack (dashboard deep-links to the run page), or `null`.
|
|
359
|
+
startedAt:
|
|
360
|
+
type: string
|
|
361
|
+
description: ISO-8601 timestamp the run started (the ack time).
|
|
362
|
+
completedAt:
|
|
363
|
+
anyOf:
|
|
364
|
+
- type: string
|
|
365
|
+
- type: "null"
|
|
366
|
+
description: ISO-8601 timestamp the run closed, or `null` while still open.
|
|
367
|
+
completedAction:
|
|
368
|
+
anyOf:
|
|
369
|
+
- type: string
|
|
370
|
+
enum:
|
|
371
|
+
- link_pr
|
|
372
|
+
- notify
|
|
373
|
+
- status
|
|
374
|
+
- superseded
|
|
375
|
+
- type: "null"
|
|
376
|
+
description: "Which final action closed the run — `link_pr`/`notify` are the agent's terminal ops actions, `status` a completion status flip (ready_for_qa/resolved), `superseded` a newer ack replacing it. `null` while the run is open."
|
|
377
|
+
prNumber:
|
|
378
|
+
anyOf:
|
|
379
|
+
- type: number
|
|
380
|
+
- type: "null"
|
|
381
|
+
description: The PR the run linked as its final action, or `null`.
|
|
382
|
+
prUrl:
|
|
383
|
+
anyOf:
|
|
384
|
+
- type: string
|
|
385
|
+
- type: "null"
|
|
386
|
+
description: HTML URL of that PR, or `null`.
|
|
387
|
+
required:
|
|
388
|
+
- id
|
|
389
|
+
- agent
|
|
390
|
+
- connectorId
|
|
391
|
+
- ackedBy
|
|
392
|
+
- sessionId
|
|
393
|
+
- startedAt
|
|
394
|
+
- completedAt
|
|
395
|
+
- completedAction
|
|
396
|
+
- prNumber
|
|
397
|
+
- prUrl
|
|
398
|
+
additionalProperties: false
|
|
399
|
+
description: "One run on a queue item — who (person or AI agent) picked it up when, and, once closed, how it ended (final action + PR + session link). Opened by `POST /api/admin/ops/{handle}/ack`."
|
|
154
400
|
OpsItemContext:
|
|
155
401
|
type: object
|
|
156
402
|
properties:
|
|
@@ -162,6 +408,38 @@ OpsItemContext:
|
|
|
162
408
|
$ref: "#/OpsAlertContext"
|
|
163
409
|
measurePlan:
|
|
164
410
|
$ref: "#/OpsMeasurePlanContext"
|
|
411
|
+
errorChart:
|
|
412
|
+
type: object
|
|
413
|
+
properties:
|
|
414
|
+
series:
|
|
415
|
+
type: array
|
|
416
|
+
items:
|
|
417
|
+
type: object
|
|
418
|
+
properties:
|
|
419
|
+
t:
|
|
420
|
+
type: number
|
|
421
|
+
description: Bucket start — unix epoch **milliseconds** (hourly buckets).
|
|
422
|
+
v:
|
|
423
|
+
type: number
|
|
424
|
+
description: Occurrence count in the bucket (sample-rate weighted).
|
|
425
|
+
required:
|
|
426
|
+
- t
|
|
427
|
+
- v
|
|
428
|
+
additionalProperties: {}
|
|
429
|
+
description: One hourly occurrence bucket.
|
|
430
|
+
description: Hourly occurrence buckets, oldest first. Hours with no occurrences are omitted.
|
|
431
|
+
domainFrom:
|
|
432
|
+
type: number
|
|
433
|
+
description: Chart domain start — unix epoch milliseconds (24h before the read).
|
|
434
|
+
domainTo:
|
|
435
|
+
type: number
|
|
436
|
+
description: Chart domain end — unix epoch milliseconds (the read time).
|
|
437
|
+
required:
|
|
438
|
+
- series
|
|
439
|
+
- domainFrom
|
|
440
|
+
- domainTo
|
|
441
|
+
additionalProperties: {}
|
|
442
|
+
description: "Occurrence timeline for an `error` ticket — hourly buckets over the last 24h from the sampled occurrences, hydrated at read time by the single-item read only. ABSENT (not `null`) on non-error tickets, on list rows (raw context), and when no occurrence landed in the window."
|
|
165
443
|
additionalProperties: {}
|
|
166
444
|
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
445
|
OpsBrowserContext:
|
|
@@ -245,6 +523,11 @@ OpsErrorContext:
|
|
|
245
523
|
items:
|
|
246
524
|
type: string
|
|
247
525
|
description: "Distinct, id-normalized routes this error has surfaced on (UUIDs/ids collapsed to `#`)."
|
|
526
|
+
stackTail:
|
|
527
|
+
anyOf:
|
|
528
|
+
- type: string
|
|
529
|
+
- type: "null"
|
|
530
|
+
description: "The last 3 non-empty lines of the latest occurrence's stack — the innermost frames closest to where the throw bubbled out, baked in as an at-a-glance locator. `null` when the source supplied no stack. Fetch the full stack via `related.error`."
|
|
248
531
|
sdkVersion:
|
|
249
532
|
anyOf:
|
|
250
533
|
- type: string
|
|
@@ -380,6 +663,11 @@ OpsAlertMetricSummary:
|
|
|
380
663
|
OpsMeasurePlanContext:
|
|
381
664
|
type: object
|
|
382
665
|
properties:
|
|
666
|
+
goal:
|
|
667
|
+
anyOf:
|
|
668
|
+
- type: string
|
|
669
|
+
- type: "null"
|
|
670
|
+
description: "The customer's underlying intent in their own words — WHAT they want to learn or achieve and WHY, independent of the specific steps. The plan below is a best-effort proposal made without repo access; when the code reveals a better path, this goal is the target you optimize for, not literal step-adherence."
|
|
383
671
|
created:
|
|
384
672
|
type: array
|
|
385
673
|
items:
|
|
@@ -545,33 +833,35 @@ GithubConnectorData:
|
|
|
545
833
|
additionalProperties: {}
|
|
546
834
|
description: The GitHub issue this item opened.
|
|
547
835
|
pr:
|
|
548
|
-
|
|
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`.
|
|
836
|
+
$ref: "#/GithubPrLink"
|
|
573
837
|
additionalProperties: {}
|
|
574
838
|
description: "GitHub connector trace — the issue it opened and, once linked, the pull request."
|
|
839
|
+
GithubPrLink:
|
|
840
|
+
type: object
|
|
841
|
+
properties:
|
|
842
|
+
number:
|
|
843
|
+
type: number
|
|
844
|
+
description: Pull request number.
|
|
845
|
+
url:
|
|
846
|
+
type: string
|
|
847
|
+
description: HTML URL of the linked pull request.
|
|
848
|
+
linkedAt:
|
|
849
|
+
type: string
|
|
850
|
+
description: ISO-8601 timestamp the PR was linked.
|
|
851
|
+
connectedToIssue:
|
|
852
|
+
type: boolean
|
|
853
|
+
description: "Whether the PR was wired to the issue on GitHub (via a closing keyword or a comment)."
|
|
854
|
+
method:
|
|
855
|
+
type: string
|
|
856
|
+
enum:
|
|
857
|
+
- closes
|
|
858
|
+
- comment
|
|
859
|
+
description: How the PR was connected to the issue.
|
|
860
|
+
required:
|
|
861
|
+
- number
|
|
862
|
+
- url
|
|
863
|
+
additionalProperties: {}
|
|
864
|
+
description: The pull request linked to a queue item via `link-pr` (stored on `connectorData.github.pr`).
|
|
575
865
|
SlackConnectorData:
|
|
576
866
|
type: object
|
|
577
867
|
properties:
|
|
@@ -763,17 +1053,23 @@ OpsItemStatus:
|
|
|
763
1053
|
- pending_approval
|
|
764
1054
|
- triage
|
|
765
1055
|
- triaged
|
|
1056
|
+
- investigating_by_ai
|
|
766
1057
|
- in_progress
|
|
1058
|
+
- blocked
|
|
767
1059
|
- ready_for_qa
|
|
768
1060
|
- resolved
|
|
769
1061
|
- wont_fix
|
|
770
1062
|
description: >-
|
|
771
1063
|
Lifecycle status of a queue item. The working flow is `open` → `triaged` →
|
|
772
1064
|
`in_progress` → `ready_for_qa` → `resolved` (or `wont_fix`, terminal from
|
|
773
|
-
any earlier stage). `
|
|
1065
|
+
any earlier stage). `blocked` marks an item that can't progress until an
|
|
1066
|
+
external dependency clears — a working state a human sets and clears.
|
|
1067
|
+
`ready_for_qa` is what a developer sets once a fix
|
|
774
1068
|
lands; `resolved` is the QA sign-off, normally flipped in the dashboard
|
|
775
1069
|
after verification — set it directly from code only when the fix has been
|
|
776
|
-
verified end-to-end.
|
|
1070
|
+
verified end-to-end. `investigating_by_ai` is a system-owned display state —
|
|
1071
|
+
set when the AI agent (Jarvis) picks an item up to investigate, never chosen
|
|
1072
|
+
by a human — so it is shown but not offered as a manual choice. Two
|
|
777
1073
|
human-gated holding states park an item OUT of the work queue until a human
|
|
778
1074
|
promotes it to `open` in the dashboard, so `GET /api/admin/ops` excludes
|
|
779
1075
|
them under `status=all`/default and returns them only when requested as an
|
|
@@ -796,6 +1092,31 @@ OpsItemPriority:
|
|
|
796
1092
|
Triage priority of a queue item. The lowest tier is `nice_to_have` (not
|
|
797
1093
|
`low`) — carried over from the feature-request "importance" scale this
|
|
798
1094
|
priority set replaced.
|
|
1095
|
+
OpsInvestigationState:
|
|
1096
|
+
type: string
|
|
1097
|
+
enum:
|
|
1098
|
+
- pr_ready
|
|
1099
|
+
- investigated
|
|
1100
|
+
- detected
|
|
1101
|
+
- question
|
|
1102
|
+
- ready_for_qa
|
|
1103
|
+
- pending_approval
|
|
1104
|
+
- needs_triage
|
|
1105
|
+
- working
|
|
1106
|
+
- triaged_low
|
|
1107
|
+
- backlog
|
|
1108
|
+
description: >-
|
|
1109
|
+
Where automation has taken an item in the investigation lifecycle — the
|
|
1110
|
+
signal the ops cockpit renders as "what AI did" plus the one action expected
|
|
1111
|
+
of the user. It is **written as a side-effect of the actions that already
|
|
1112
|
+
happen**, never authored on its own: linking a PR sets `pr_ready`, moving to
|
|
1113
|
+
`in_progress` sets `working`, `ready_for_qa` sets `ready_for_qa`, a
|
|
1114
|
+
system/assistant reply sets `question`, resolving clears it, and creation
|
|
1115
|
+
seeds `needs_triage`/`backlog` (by priority) or `investigated`/`detected`
|
|
1116
|
+
for auto-filed error/alert tickets. `triaged_low` marks a low-signal item AI
|
|
1117
|
+
has looked at but that nothing is moving. Absent on rows filed before the
|
|
1118
|
+
field existed — consumers should treat a missing value as "derive from the
|
|
1119
|
+
other fields".
|
|
799
1120
|
OpsItemPriorityOrNull:
|
|
800
1121
|
anyOf:
|
|
801
1122
|
- $ref: "#/OpsItemPriority"
|
|
@@ -923,10 +1244,220 @@ LinkPrToOpsItemResponse:
|
|
|
923
1244
|
id:
|
|
924
1245
|
type: string
|
|
925
1246
|
description: Item id that was updated.
|
|
1247
|
+
pr:
|
|
1248
|
+
anyOf:
|
|
1249
|
+
- $ref: "#/GithubPrLink"
|
|
1250
|
+
- type: "null"
|
|
1251
|
+
description: "The PR link now recorded on the item (`connectorData.github.pr`), or `null` after an unlink (`prNumber: null`)."
|
|
926
1252
|
required:
|
|
927
1253
|
- id
|
|
1254
|
+
- pr
|
|
928
1255
|
additionalProperties: false
|
|
929
|
-
description: Response for
|
|
1256
|
+
description: Response for `POST /api/admin/ops/{handle}/link-pr` — the item id and the resulting PR link.
|
|
1257
|
+
AckOpsItemRequest:
|
|
1258
|
+
type: object
|
|
1259
|
+
properties:
|
|
1260
|
+
agent:
|
|
1261
|
+
type: string
|
|
1262
|
+
enum:
|
|
1263
|
+
- claude
|
|
1264
|
+
- cursor
|
|
1265
|
+
- copilot
|
|
1266
|
+
- jules
|
|
1267
|
+
- gemini
|
|
1268
|
+
- jarvis
|
|
1269
|
+
description: >-
|
|
1270
|
+
The AI agent type acking on the item's behalf — pass your own type when
|
|
1271
|
+
you are a coding agent (Claude Code passes `claude`, Cursor `cursor`,
|
|
1272
|
+
Copilot `copilot`, Jules/Gemini `jules`). Omit entirely for a human ack
|
|
1273
|
+
by the authenticated caller.
|
|
1274
|
+
sessionId:
|
|
1275
|
+
type: string
|
|
1276
|
+
maxLength: 300
|
|
1277
|
+
description: >-
|
|
1278
|
+
The agent-run session id (e.g. Claude's `session_01…`), so the dashboard
|
|
1279
|
+
can deep-link to the exact run page. Omit when the harness has no
|
|
1280
|
+
session id.
|
|
1281
|
+
additionalProperties: false
|
|
1282
|
+
description: >-
|
|
1283
|
+
Body for `POST /api/admin/ops/{handle}/ack`. With `agent` set this is an AI
|
|
1284
|
+
ack — the named agent type must have a connected trigger connector in the
|
|
1285
|
+
project, or the call fails with `AGENT_NOT_CONNECTED` and instructions to
|
|
1286
|
+
query the available agents (`ops agents list`). `gemini` is accepted as an
|
|
1287
|
+
alias for `jules`. Without `agent` it is a HUMAN ack by the authenticated
|
|
1288
|
+
caller.
|
|
1289
|
+
AckOpsItemResponse:
|
|
1290
|
+
type: object
|
|
1291
|
+
properties:
|
|
1292
|
+
id:
|
|
1293
|
+
type: string
|
|
1294
|
+
description: Item id that was acked.
|
|
1295
|
+
number:
|
|
1296
|
+
anyOf:
|
|
1297
|
+
- type: number
|
|
1298
|
+
- type: "null"
|
|
1299
|
+
description: Per-project item number.
|
|
1300
|
+
status:
|
|
1301
|
+
type: string
|
|
1302
|
+
description: The working status the ack moved the item into (`investigating_by_ai` for an AI ack, `in_progress` for a human one).
|
|
1303
|
+
runId:
|
|
1304
|
+
type: string
|
|
1305
|
+
description: Id of the run record the ack opened.
|
|
1306
|
+
agent:
|
|
1307
|
+
anyOf:
|
|
1308
|
+
- type: string
|
|
1309
|
+
- type: "null"
|
|
1310
|
+
description: The AI agent type working the item; `null` for a human ack.
|
|
1311
|
+
connectorName:
|
|
1312
|
+
anyOf:
|
|
1313
|
+
- type: string
|
|
1314
|
+
- type: "null"
|
|
1315
|
+
description: Display name of the connected agent (the connector's name); `null` for a human ack.
|
|
1316
|
+
sessionId:
|
|
1317
|
+
anyOf:
|
|
1318
|
+
- type: string
|
|
1319
|
+
- type: "null"
|
|
1320
|
+
description: The session id recorded on the run, if one was supplied.
|
|
1321
|
+
startedAt:
|
|
1322
|
+
type: string
|
|
1323
|
+
description: ISO-8601 timestamp the run started (the ack time).
|
|
1324
|
+
required:
|
|
1325
|
+
- id
|
|
1326
|
+
- number
|
|
1327
|
+
- status
|
|
1328
|
+
- runId
|
|
1329
|
+
- agent
|
|
1330
|
+
- connectorName
|
|
1331
|
+
- sessionId
|
|
1332
|
+
- startedAt
|
|
1333
|
+
additionalProperties: false
|
|
1334
|
+
description: Response for `POST /api/admin/ops/{handle}/ack` — the opened run.
|
|
1335
|
+
OpsAgentProfile:
|
|
1336
|
+
type: object
|
|
1337
|
+
properties:
|
|
1338
|
+
connectorId:
|
|
1339
|
+
type: string
|
|
1340
|
+
description: The connector row id — what an agent assignment stores.
|
|
1341
|
+
provider:
|
|
1342
|
+
type: string
|
|
1343
|
+
enum:
|
|
1344
|
+
- claude_trigger
|
|
1345
|
+
- cursor_trigger
|
|
1346
|
+
- copilot_trigger
|
|
1347
|
+
- jules_trigger
|
|
1348
|
+
description: The trigger-connector provider backing this agent.
|
|
1349
|
+
name:
|
|
1350
|
+
type: string
|
|
1351
|
+
description: Display name — the connector's `name`, or the provider default (e.g. "Claude").
|
|
1352
|
+
handle:
|
|
1353
|
+
type: string
|
|
1354
|
+
description: Mention/search handle — the kebab-cased name (e.g. `claude`).
|
|
1355
|
+
required:
|
|
1356
|
+
- connectorId
|
|
1357
|
+
- provider
|
|
1358
|
+
- name
|
|
1359
|
+
- handle
|
|
1360
|
+
additionalProperties: false
|
|
1361
|
+
description: One connected, assignable AI agent (an authenticated trigger connector).
|
|
1362
|
+
ListOpsAgentsResponse:
|
|
1363
|
+
type: array
|
|
1364
|
+
items:
|
|
1365
|
+
$ref: "#/OpsAgentProfile"
|
|
1366
|
+
description: >-
|
|
1367
|
+
The project's connected AI agents — the agent types `POST
|
|
1368
|
+
/api/admin/ops/{handle}/ack` accepts. Empty when no trigger connector is
|
|
1369
|
+
connected yet.
|
|
1370
|
+
OpsCommentAuthorType:
|
|
1371
|
+
type: string
|
|
1372
|
+
enum:
|
|
1373
|
+
- user
|
|
1374
|
+
- system
|
|
1375
|
+
description: >-
|
|
1376
|
+
Who wrote a comment. `user` is a teammate (their email is in `authorEmail`);
|
|
1377
|
+
`system` is Jarvis — the AI agent — which authors comments when an ops-notify
|
|
1378
|
+
escalation lands on the item and when it is `@shipeasy`-mentioned in a thread.
|
|
1379
|
+
OpsComment:
|
|
1380
|
+
type: object
|
|
1381
|
+
properties:
|
|
1382
|
+
id:
|
|
1383
|
+
type: string
|
|
1384
|
+
description: Comment id.
|
|
1385
|
+
feedbackId:
|
|
1386
|
+
type: string
|
|
1387
|
+
description: The queue item this comment hangs off.
|
|
1388
|
+
parentId:
|
|
1389
|
+
anyOf:
|
|
1390
|
+
- type: string
|
|
1391
|
+
- type: "null"
|
|
1392
|
+
description: The top-level comment this is a reply to, or `null` for a top-level comment.
|
|
1393
|
+
authorType:
|
|
1394
|
+
$ref: "#/OpsCommentAuthorType"
|
|
1395
|
+
authorEmail:
|
|
1396
|
+
anyOf:
|
|
1397
|
+
- type: string
|
|
1398
|
+
- type: "null"
|
|
1399
|
+
description: The teammate who wrote it, or `null` for a `system` (Jarvis) comment.
|
|
1400
|
+
body:
|
|
1401
|
+
type: string
|
|
1402
|
+
description: Comment body as markdown (may contain sanitised inline image/video embeds).
|
|
1403
|
+
createdAt:
|
|
1404
|
+
type: string
|
|
1405
|
+
description: ISO-8601 creation timestamp.
|
|
1406
|
+
updatedAt:
|
|
1407
|
+
type: string
|
|
1408
|
+
description: ISO-8601 last-edit timestamp.
|
|
1409
|
+
required:
|
|
1410
|
+
- id
|
|
1411
|
+
- feedbackId
|
|
1412
|
+
- parentId
|
|
1413
|
+
- authorType
|
|
1414
|
+
- authorEmail
|
|
1415
|
+
- body
|
|
1416
|
+
- createdAt
|
|
1417
|
+
- updatedAt
|
|
1418
|
+
additionalProperties: false
|
|
1419
|
+
description: A single comment on a queue item.
|
|
1420
|
+
ListOpsCommentsResponse:
|
|
1421
|
+
type: object
|
|
1422
|
+
properties:
|
|
1423
|
+
comments:
|
|
1424
|
+
type: array
|
|
1425
|
+
items:
|
|
1426
|
+
$ref: "#/OpsComment"
|
|
1427
|
+
required:
|
|
1428
|
+
- comments
|
|
1429
|
+
additionalProperties: false
|
|
1430
|
+
description: Response for `GET /api/admin/ops/{handle}/comments` — the thread, oldest first.
|
|
1431
|
+
CreateOpsCommentRequest:
|
|
1432
|
+
type: object
|
|
1433
|
+
properties:
|
|
1434
|
+
body:
|
|
1435
|
+
type: string
|
|
1436
|
+
minLength: 1
|
|
1437
|
+
maxLength: 10000
|
|
1438
|
+
description: The comment body as markdown. Mentions (`@teammate`, `@shipeasy`) are parsed from it.
|
|
1439
|
+
parentId:
|
|
1440
|
+
anyOf:
|
|
1441
|
+
- type: string
|
|
1442
|
+
- type: "null"
|
|
1443
|
+
description: >-
|
|
1444
|
+
Reply under this top-level comment. Omit / `null` for a top-level
|
|
1445
|
+
comment. Replying to a reply attaches to the same top-level parent
|
|
1446
|
+
(threading is one level deep).
|
|
1447
|
+
required:
|
|
1448
|
+
- body
|
|
1449
|
+
additionalProperties: false
|
|
1450
|
+
description: Body for `POST /api/admin/ops/{handle}/comments`.
|
|
1451
|
+
CreateOpsCommentResponse:
|
|
1452
|
+
type: object
|
|
1453
|
+
properties:
|
|
1454
|
+
id:
|
|
1455
|
+
type: string
|
|
1456
|
+
description: Newly created comment id.
|
|
1457
|
+
required:
|
|
1458
|
+
- id
|
|
1459
|
+
additionalProperties: false
|
|
1460
|
+
description: Response for `POST /api/admin/ops/{handle}/comments`.
|
|
930
1461
|
NotifyOpsRequest:
|
|
931
1462
|
type: object
|
|
932
1463
|
properties:
|
|
@@ -1011,3 +1542,361 @@ ListSlackChannelsResponse:
|
|
|
1011
1542
|
- channels
|
|
1012
1543
|
additionalProperties: false
|
|
1013
1544
|
description: Response for `GET /api/admin/slack/channels`.
|
|
1545
|
+
DeleteOpsItemResponse:
|
|
1546
|
+
type: object
|
|
1547
|
+
properties:
|
|
1548
|
+
ok:
|
|
1549
|
+
type: boolean
|
|
1550
|
+
const: true
|
|
1551
|
+
description: Always `true` — the item (and its comments, attachments, tags, and investigation records) was deleted.
|
|
1552
|
+
required:
|
|
1553
|
+
- ok
|
|
1554
|
+
additionalProperties: false
|
|
1555
|
+
description: Response for `DELETE /api/admin/ops/{handle}`.
|
|
1556
|
+
OpsInvestigation:
|
|
1557
|
+
type: object
|
|
1558
|
+
properties:
|
|
1559
|
+
id:
|
|
1560
|
+
type: string
|
|
1561
|
+
description: Investigation record id.
|
|
1562
|
+
feedbackId:
|
|
1563
|
+
type: string
|
|
1564
|
+
description: The queue item this record hangs off.
|
|
1565
|
+
kind:
|
|
1566
|
+
type: string
|
|
1567
|
+
enum:
|
|
1568
|
+
- investigated
|
|
1569
|
+
- detected
|
|
1570
|
+
- question
|
|
1571
|
+
- ready_for_qa
|
|
1572
|
+
- working
|
|
1573
|
+
- note
|
|
1574
|
+
description: "Which lifecycle stage the record documents — mirrors the investigation-state buckets the cockpit renders. `working` records double as run rows (see `OpsRun`)."
|
|
1575
|
+
summary:
|
|
1576
|
+
anyOf:
|
|
1577
|
+
- type: string
|
|
1578
|
+
- type: "null"
|
|
1579
|
+
description: One-line summary of the record, or `null`.
|
|
1580
|
+
findings:
|
|
1581
|
+
anyOf:
|
|
1582
|
+
- type: string
|
|
1583
|
+
- type: "null"
|
|
1584
|
+
description: The agent's full findings write-up (markdown), or `null`.
|
|
1585
|
+
question:
|
|
1586
|
+
anyOf:
|
|
1587
|
+
- type: string
|
|
1588
|
+
- type: "null"
|
|
1589
|
+
description: A blocking question for the team (markdown), or `null`.
|
|
1590
|
+
qaNotes:
|
|
1591
|
+
anyOf:
|
|
1592
|
+
- type: string
|
|
1593
|
+
- type: "null"
|
|
1594
|
+
description: How to verify the fix — QA notes (markdown), or `null`.
|
|
1595
|
+
agent:
|
|
1596
|
+
anyOf:
|
|
1597
|
+
- type: string
|
|
1598
|
+
enum:
|
|
1599
|
+
- jarvis
|
|
1600
|
+
- claude
|
|
1601
|
+
- cursor
|
|
1602
|
+
- copilot
|
|
1603
|
+
- jules
|
|
1604
|
+
- type: "null"
|
|
1605
|
+
description: Which agent produced the record (`jarvis` is the in-house assistant; the rest are trigger-connector coding agents), or `null`.
|
|
1606
|
+
model:
|
|
1607
|
+
anyOf:
|
|
1608
|
+
- type: string
|
|
1609
|
+
- type: "null"
|
|
1610
|
+
description: The model the agent ran on (self-reported), or `null`.
|
|
1611
|
+
connectorId:
|
|
1612
|
+
anyOf:
|
|
1613
|
+
- type: string
|
|
1614
|
+
- type: "null"
|
|
1615
|
+
description: The trigger-connector row id the agent ran through, or `null`.
|
|
1616
|
+
prNumber:
|
|
1617
|
+
anyOf:
|
|
1618
|
+
- type: number
|
|
1619
|
+
- type: "null"
|
|
1620
|
+
description: A PR the record references (e.g. the run's fixing PR), or `null`.
|
|
1621
|
+
prUrl:
|
|
1622
|
+
anyOf:
|
|
1623
|
+
- type: string
|
|
1624
|
+
- type: "null"
|
|
1625
|
+
description: HTML URL of that PR, or `null`.
|
|
1626
|
+
sources:
|
|
1627
|
+
anyOf:
|
|
1628
|
+
- type: array
|
|
1629
|
+
items:
|
|
1630
|
+
type: object
|
|
1631
|
+
properties:
|
|
1632
|
+
path:
|
|
1633
|
+
type: string
|
|
1634
|
+
description: Repo-relative file path the agent inspected.
|
|
1635
|
+
url:
|
|
1636
|
+
type: string
|
|
1637
|
+
description: External link the agent consulted.
|
|
1638
|
+
label:
|
|
1639
|
+
type: string
|
|
1640
|
+
description: Human-readable label for the source.
|
|
1641
|
+
additionalProperties: false
|
|
1642
|
+
description: One file/link the agent inspected while producing the record.
|
|
1643
|
+
- type: "null"
|
|
1644
|
+
description: The files/links the agent inspected, or `null`.
|
|
1645
|
+
confidence:
|
|
1646
|
+
anyOf:
|
|
1647
|
+
- type: string
|
|
1648
|
+
enum:
|
|
1649
|
+
- low
|
|
1650
|
+
- medium
|
|
1651
|
+
- high
|
|
1652
|
+
- type: "null"
|
|
1653
|
+
description: The agent's self-reported confidence, or `null`.
|
|
1654
|
+
tokensUsed:
|
|
1655
|
+
anyOf:
|
|
1656
|
+
- type: number
|
|
1657
|
+
- type: "null"
|
|
1658
|
+
description: Tokens the run consumed (self-reported), or `null`.
|
|
1659
|
+
durationMs:
|
|
1660
|
+
anyOf:
|
|
1661
|
+
- type: number
|
|
1662
|
+
- type: "null"
|
|
1663
|
+
description: Run duration in milliseconds, or `null`.
|
|
1664
|
+
visibility:
|
|
1665
|
+
type: string
|
|
1666
|
+
enum:
|
|
1667
|
+
- draft
|
|
1668
|
+
- published
|
|
1669
|
+
description: "`draft` records are the agent's scratch state; only `published` ones render in the panel (and are returned by default)."
|
|
1670
|
+
startedAt:
|
|
1671
|
+
anyOf:
|
|
1672
|
+
- type: string
|
|
1673
|
+
- type: "null"
|
|
1674
|
+
description: ISO-8601 timestamp the work started, or `null`.
|
|
1675
|
+
completedAt:
|
|
1676
|
+
anyOf:
|
|
1677
|
+
- type: string
|
|
1678
|
+
- type: "null"
|
|
1679
|
+
description: ISO-8601 timestamp the work finished, or `null`.
|
|
1680
|
+
sessionId:
|
|
1681
|
+
anyOf:
|
|
1682
|
+
- type: string
|
|
1683
|
+
- type: "null"
|
|
1684
|
+
description: The agent-run session id, or `null`.
|
|
1685
|
+
ackedBy:
|
|
1686
|
+
anyOf:
|
|
1687
|
+
- type: string
|
|
1688
|
+
- type: "null"
|
|
1689
|
+
description: Email of the human who acked (run records for a human ack), or `null`.
|
|
1690
|
+
completedAction:
|
|
1691
|
+
anyOf:
|
|
1692
|
+
- type: string
|
|
1693
|
+
enum:
|
|
1694
|
+
- link_pr
|
|
1695
|
+
- notify
|
|
1696
|
+
- status
|
|
1697
|
+
- superseded
|
|
1698
|
+
- type: "null"
|
|
1699
|
+
description: "Which final action closed a `working` run record, or `null` (open run / non-run record)."
|
|
1700
|
+
createdAt:
|
|
1701
|
+
type: string
|
|
1702
|
+
description: ISO-8601 creation timestamp.
|
|
1703
|
+
updatedAt:
|
|
1704
|
+
type: string
|
|
1705
|
+
description: ISO-8601 last-update timestamp.
|
|
1706
|
+
required:
|
|
1707
|
+
- id
|
|
1708
|
+
- feedbackId
|
|
1709
|
+
- kind
|
|
1710
|
+
- summary
|
|
1711
|
+
- findings
|
|
1712
|
+
- question
|
|
1713
|
+
- qaNotes
|
|
1714
|
+
- agent
|
|
1715
|
+
- model
|
|
1716
|
+
- connectorId
|
|
1717
|
+
- prNumber
|
|
1718
|
+
- prUrl
|
|
1719
|
+
- sources
|
|
1720
|
+
- confidence
|
|
1721
|
+
- tokensUsed
|
|
1722
|
+
- durationMs
|
|
1723
|
+
- visibility
|
|
1724
|
+
- startedAt
|
|
1725
|
+
- completedAt
|
|
1726
|
+
- sessionId
|
|
1727
|
+
- ackedBy
|
|
1728
|
+
- completedAction
|
|
1729
|
+
- createdAt
|
|
1730
|
+
- updatedAt
|
|
1731
|
+
additionalProperties: false
|
|
1732
|
+
description: "One structured investigation record on a queue item — the read-only write-up an AI agent produces while working it (findings / blocking question / QA notes), rendered by the cockpit's detail panel."
|
|
1733
|
+
ListOpsInvestigationsResponse:
|
|
1734
|
+
type: array
|
|
1735
|
+
items:
|
|
1736
|
+
$ref: "#/OpsInvestigation"
|
|
1737
|
+
description: Response for `GET /api/admin/ops/{handle}/investigation` — the item's `published` investigation records, newest first (max 50).
|
|
1738
|
+
CreateOpsInvestigationRequest:
|
|
1739
|
+
type: object
|
|
1740
|
+
properties:
|
|
1741
|
+
kind:
|
|
1742
|
+
type: string
|
|
1743
|
+
enum:
|
|
1744
|
+
- investigated
|
|
1745
|
+
- detected
|
|
1746
|
+
- question
|
|
1747
|
+
- ready_for_qa
|
|
1748
|
+
- working
|
|
1749
|
+
- note
|
|
1750
|
+
description: Which lifecycle stage the record documents.
|
|
1751
|
+
summary:
|
|
1752
|
+
type: string
|
|
1753
|
+
maxLength: 2000
|
|
1754
|
+
description: One-line summary of the record.
|
|
1755
|
+
findings:
|
|
1756
|
+
type: string
|
|
1757
|
+
maxLength: 50000
|
|
1758
|
+
description: The full findings write-up (markdown).
|
|
1759
|
+
question:
|
|
1760
|
+
type: string
|
|
1761
|
+
maxLength: 10000
|
|
1762
|
+
description: A blocking question for the team (markdown).
|
|
1763
|
+
qaNotes:
|
|
1764
|
+
type: string
|
|
1765
|
+
maxLength: 50000
|
|
1766
|
+
description: How to verify the fix — QA notes (markdown).
|
|
1767
|
+
agent:
|
|
1768
|
+
type: string
|
|
1769
|
+
enum:
|
|
1770
|
+
- jarvis
|
|
1771
|
+
- claude
|
|
1772
|
+
- cursor
|
|
1773
|
+
- copilot
|
|
1774
|
+
- jules
|
|
1775
|
+
description: The agent type producing the record — pass your own type when you are a coding agent.
|
|
1776
|
+
model:
|
|
1777
|
+
type: string
|
|
1778
|
+
maxLength: 200
|
|
1779
|
+
description: The model the agent ran on.
|
|
1780
|
+
connectorId:
|
|
1781
|
+
type: string
|
|
1782
|
+
maxLength: 200
|
|
1783
|
+
description: The trigger-connector row id the agent ran through.
|
|
1784
|
+
prNumber:
|
|
1785
|
+
type: integer
|
|
1786
|
+
description: A PR the record references.
|
|
1787
|
+
prUrl:
|
|
1788
|
+
type: string
|
|
1789
|
+
format: uri
|
|
1790
|
+
maxLength: 2000
|
|
1791
|
+
description: HTML URL of that PR.
|
|
1792
|
+
sources:
|
|
1793
|
+
type: array
|
|
1794
|
+
maxItems: 200
|
|
1795
|
+
items:
|
|
1796
|
+
type: object
|
|
1797
|
+
properties:
|
|
1798
|
+
path:
|
|
1799
|
+
type: string
|
|
1800
|
+
description: Repo-relative file path inspected.
|
|
1801
|
+
url:
|
|
1802
|
+
type: string
|
|
1803
|
+
description: External link consulted.
|
|
1804
|
+
label:
|
|
1805
|
+
type: string
|
|
1806
|
+
description: Human-readable label for the source.
|
|
1807
|
+
additionalProperties: false
|
|
1808
|
+
description: One file/link inspected while producing the record.
|
|
1809
|
+
description: The files/links inspected.
|
|
1810
|
+
confidence:
|
|
1811
|
+
type: string
|
|
1812
|
+
enum:
|
|
1813
|
+
- low
|
|
1814
|
+
- medium
|
|
1815
|
+
- high
|
|
1816
|
+
description: Self-reported confidence in the record.
|
|
1817
|
+
tokensUsed:
|
|
1818
|
+
type: integer
|
|
1819
|
+
description: Tokens the run consumed.
|
|
1820
|
+
durationMs:
|
|
1821
|
+
type: integer
|
|
1822
|
+
description: Run duration in milliseconds.
|
|
1823
|
+
visibility:
|
|
1824
|
+
type: string
|
|
1825
|
+
enum:
|
|
1826
|
+
- draft
|
|
1827
|
+
- published
|
|
1828
|
+
description: Record visibility. Defaults to `published`; `draft` keeps it out of the panel.
|
|
1829
|
+
startedAt:
|
|
1830
|
+
type: string
|
|
1831
|
+
description: ISO-8601 timestamp the work started.
|
|
1832
|
+
completedAt:
|
|
1833
|
+
type: string
|
|
1834
|
+
description: ISO-8601 timestamp the work finished.
|
|
1835
|
+
sessionId:
|
|
1836
|
+
type: string
|
|
1837
|
+
maxLength: 300
|
|
1838
|
+
description: The agent-run session id, so the dashboard can deep-link to the run.
|
|
1839
|
+
required:
|
|
1840
|
+
- kind
|
|
1841
|
+
additionalProperties: false
|
|
1842
|
+
description: "Body for `POST /api/admin/ops/{handle}/investigation`. `kind` is required; include at least one content field (`summary`/`findings`/`question`/`qaNotes`) — the panel renders whatever it gets."
|
|
1843
|
+
NotificationFeedItem:
|
|
1844
|
+
type: object
|
|
1845
|
+
properties:
|
|
1846
|
+
id:
|
|
1847
|
+
type: string
|
|
1848
|
+
description: Notification id (pass to the mark-read `POST` to mark just this one).
|
|
1849
|
+
event:
|
|
1850
|
+
type: string
|
|
1851
|
+
description: The notification's event key (e.g. `ops.attention`, `feedback.completed`, `comment.mention`).
|
|
1852
|
+
title:
|
|
1853
|
+
type: string
|
|
1854
|
+
description: One-line headline.
|
|
1855
|
+
body:
|
|
1856
|
+
type: string
|
|
1857
|
+
description: "Notification body. For `ops.attention` escalations: line 1 = summary, following lines = numbered unblock steps."
|
|
1858
|
+
href:
|
|
1859
|
+
anyOf:
|
|
1860
|
+
- type: string
|
|
1861
|
+
- type: "null"
|
|
1862
|
+
description: Dashboard-relative deep link to the related item, or `null`.
|
|
1863
|
+
createdAt:
|
|
1864
|
+
type: string
|
|
1865
|
+
description: ISO-8601 creation timestamp.
|
|
1866
|
+
read:
|
|
1867
|
+
type: boolean
|
|
1868
|
+
description: Whether the notification has been marked read.
|
|
1869
|
+
required:
|
|
1870
|
+
- id
|
|
1871
|
+
- event
|
|
1872
|
+
- title
|
|
1873
|
+
- body
|
|
1874
|
+
- href
|
|
1875
|
+
- createdAt
|
|
1876
|
+
- read
|
|
1877
|
+
additionalProperties: false
|
|
1878
|
+
description: One in-app notification as the bell feed renders it.
|
|
1879
|
+
ListNotificationFeedResponse:
|
|
1880
|
+
type: object
|
|
1881
|
+
properties:
|
|
1882
|
+
notifications:
|
|
1883
|
+
type: array
|
|
1884
|
+
items:
|
|
1885
|
+
$ref: "#/NotificationFeedItem"
|
|
1886
|
+
description: The feed, newest first (max 30). Project-wide broadcasts plus notifications addressed to the caller; events muted for the in-app channel are omitted.
|
|
1887
|
+
unread:
|
|
1888
|
+
type: integer
|
|
1889
|
+
description: Count of the caller's unread (visible, unmuted) notifications.
|
|
1890
|
+
required:
|
|
1891
|
+
- notifications
|
|
1892
|
+
- unread
|
|
1893
|
+
additionalProperties: false
|
|
1894
|
+
description: Response for `GET /api/admin/notifications/feed` — the bell feed plus its unread badge count.
|
|
1895
|
+
MarkNotificationsReadRequest:
|
|
1896
|
+
type: object
|
|
1897
|
+
properties:
|
|
1898
|
+
id:
|
|
1899
|
+
type: string
|
|
1900
|
+
description: Mark just this notification read. Omit to mark the caller's whole feed read.
|
|
1901
|
+
additionalProperties: false
|
|
1902
|
+
description: "Body for `POST /api/admin/notifications/feed`. An empty body (`{}`) marks ALL of the caller's notifications read."
|