@shipeasy/openapi 2.4.0 → 2.5.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/openapi.yaml CHANGED
@@ -207,6 +207,15 @@ tags:
207
207
  **Mentions.** `@teammate` in a body raises an in-app notification for that
208
208
  person; `@shipeasy` asks Jarvis (the AI agent) to read the item and reply.
209
209
  Comments authored by Jarvis carry `authorType: system`.
210
+ - name: Investigations
211
+ parent: Ops
212
+ description: |-
213
+ Investigation records on a queue item — the structured, read-only write-ups
214
+ an AI agent produces while working it (findings / a blocking question / QA
215
+ notes), plus the `working` run rows an ack or an AI hand-off opens. This is
216
+ the AI-write seam the cockpit's detail panel renders: `list` reads what a
217
+ previous run found, `create` appends a new record, and `update` fills in the
218
+ `working` run record you were handed (findings, PR, confidence) as you work.
210
219
  - name: Projects
211
220
  description: |-
212
221
  Projects: the account-level container every other resource is scoped to.
@@ -1997,7 +2006,7 @@ paths:
1997
2006
 
1998
2007
  - **Minimal create** — `name` + `schema`. Initial value defaults to `{}`.
1999
2008
  - **Seeded create** — supply a flat `value` to publish the same object on every env.
2000
- - **Per-env seed** — supply a `{ env: value }` map for different per-env starting values.
2009
+ - **Per-env seed** — supply a `{ env: value }` map under `value`, or pass the env keys `dev`/`staging`/`prod` directly (each overrides `value` for that env and is published at version 1).
2001
2010
  tags:
2002
2011
  - Configs
2003
2012
  parameters:
@@ -2039,8 +2048,8 @@ paths:
2039
2048
  - name: free
2040
2049
  - name: pro
2041
2050
  perEnvSeed:
2042
- summary: Per-env seed
2043
- description: 'Pass a `{ env: value }` map to seed different initial values per env.'
2051
+ summary: Per-env seed (env keys)
2052
+ description: Pass the env keys directly to seed different initial values per env. Each overrides `value` for that env and is published at version 1.
2044
2053
  value:
2045
2054
  name: pricing.tiers
2046
2055
  schema:
@@ -2050,20 +2059,15 @@ paths:
2050
2059
  type: array
2051
2060
  required:
2052
2061
  - tiers
2053
- value:
2054
- dev:
2055
- tiers:
2056
- - name: free
2057
- - name: pro
2058
- - name: enterprise
2059
- stage:
2060
- tiers:
2061
- - name: free
2062
- - name: pro
2063
- prod:
2064
- tiers:
2065
- - name: free
2066
- - name: pro
2062
+ dev:
2063
+ tiers:
2064
+ - name: free
2065
+ - name: pro
2066
+ - name: enterprise
2067
+ prod:
2068
+ tiers:
2069
+ - name: free
2070
+ - name: pro
2067
2071
  responses:
2068
2072
  '201':
2069
2073
  description: Create a dynamic config
@@ -2216,15 +2220,13 @@ paths:
2216
2220
  operationId: updateConfig
2217
2221
  summary: Update a dynamic config
2218
2222
  description: |-
2219
- Partial update. When `value` is supplied it is **republished on every env** (new version per env). When `schema` is supplied it replaces the current schema; every existing value is re-validated.
2220
-
2221
- For env-scoped edits, use the draft/publish flow (`PUT /{id}/drafts` then `POST /{id}/publish`) instead.
2223
+ Partial update. When `value` is supplied it is **republished on every env** (new version per env). A per-env key (`dev`/`staging`/`prod`) publishes a new version to **only that env**, immediately, overriding `value` for it. When `schema` is supplied it replaces the current schema; every existing value is re-validated.
2222
2224
 
2223
2225
  **Use cases**
2224
2226
 
2225
2227
  - **Republish flat value** — `{ "value": {…} }` sets the same value on every env.
2228
+ - **Publish one env** — `{ "prod": {…} }` publishes a new version to prod only, instantly.
2226
2229
  - **Schema migration** — `{ "schema": {…} }` replaces the schema; existing values are re-validated.
2227
- - **Env-scoped edits** — use `PUT /{id}/drafts` + `POST /{id}/publish` instead of PATCH.
2228
2230
  tags:
2229
2231
  - Configs
2230
2232
  parameters:
@@ -2250,6 +2252,15 @@ paths:
2250
2252
  tiers:
2251
2253
  - name: free
2252
2254
  - name: pro
2255
+ prodOnly:
2256
+ summary: Per-env — publish prod only
2257
+ description: Publishes a new version to prod only, immediately. dev/staging untouched.
2258
+ value:
2259
+ prod:
2260
+ tiers:
2261
+ - name: free
2262
+ - name: pro
2263
+ - name: enterprise
2253
2264
  schemaOnly:
2254
2265
  summary: Schema-only update
2255
2266
  description: Replaces the schema. Existing values must still validate or the update fails.
@@ -2410,6 +2421,7 @@ paths:
2410
2421
  - VALIDATION
2411
2422
  x-cli:
2412
2423
  name: draft
2424
+ hidden: true
2413
2425
  positional:
2414
2426
  - id
2415
2427
  delete:
@@ -2469,6 +2481,7 @@ paths:
2469
2481
  - NOT_FOUND
2470
2482
  x-cli:
2471
2483
  name: discard-draft
2484
+ hidden: true
2472
2485
  positional:
2473
2486
  - id
2474
2487
  /api/admin/configs/{id}/publish:
@@ -2540,6 +2553,7 @@ paths:
2540
2553
  - VALIDATION
2541
2554
  x-cli:
2542
2555
  name: publish
2556
+ hidden: true
2543
2557
  positional:
2544
2558
  - id
2545
2559
  /api/admin/configs/{id}/activity:
@@ -2604,6 +2618,7 @@ paths:
2604
2618
  - NOT_FOUND
2605
2619
  x-cli:
2606
2620
  name: activity
2621
+ hidden: true
2607
2622
  positional:
2608
2623
  - id
2609
2624
  /api/admin/configs/{id}/schema:
@@ -2739,6 +2754,7 @@ paths:
2739
2754
  - NOT_FOUND
2740
2755
  x-cli:
2741
2756
  name: versions
2757
+ hidden: true
2742
2758
  positional:
2743
2759
  - id
2744
2760
  /api/admin/killswitches:
@@ -5531,7 +5547,7 @@ paths:
5531
5547
  **Use case:** Read what a previous agent run already found before starting
5532
5548
  your own investigation of the item.
5533
5549
  tags:
5534
- - Ops
5550
+ - Investigations
5535
5551
  parameters:
5536
5552
  - $ref: '#/components/parameters/ProjectId'
5537
5553
  - name: handle
@@ -5562,6 +5578,10 @@ paths:
5562
5578
  - UNAUTHORIZED
5563
5579
  - FORBIDDEN
5564
5580
  - NOT_FOUND
5581
+ x-cli:
5582
+ name: list
5583
+ positional:
5584
+ - handle
5565
5585
  post:
5566
5586
  operationId: createOpsInvestigation
5567
5587
  summary: Record an investigation
@@ -5577,7 +5597,7 @@ paths:
5577
5597
  markdown findings, sources inspected, confidence) so the team — and the
5578
5598
  next agent run — sees what you learned.
5579
5599
  tags:
5580
- - Ops
5600
+ - Investigations
5581
5601
  parameters:
5582
5602
  - $ref: '#/components/parameters/ProjectId'
5583
5603
  - name: handle
@@ -5635,6 +5655,85 @@ paths:
5635
5655
  - FORBIDDEN
5636
5656
  - NOT_FOUND
5637
5657
  - VALIDATION
5658
+ x-cli:
5659
+ name: create
5660
+ positional:
5661
+ - handle
5662
+ /api/admin/ops/{handle}/investigation/{investigationId}:
5663
+ patch:
5664
+ operationId: updateOpsInvestigation
5665
+ summary: Update an investigation record
5666
+ description: |-
5667
+ Update one existing investigation record in place — the write-back seam for
5668
+ the `working` run record you were handed when a run was launched. Fill in
5669
+ the `summary`/`findings`, attach the fixing PR, record your `confidence`
5670
+ and the `sources` you inspected, or flip its `kind` off `working` once the
5671
+ investigation is done. A partial patch: send only the fields you want to
5672
+ change. Safe for restricted ops keys (it never reads or deletes).
5673
+
5674
+ **Use case:** A run started with an empty `working` record; as you work,
5675
+ PATCH it with your findings so the cockpit's detail panel fills in live —
5676
+ no need to append a second record.
5677
+ tags:
5678
+ - Investigations
5679
+ parameters:
5680
+ - $ref: '#/components/parameters/ProjectId'
5681
+ - name: handle
5682
+ in: path
5683
+ required: true
5684
+ description: Per-project item number (e.g. `7`) or the full ops item id.
5685
+ schema:
5686
+ $ref: '#/components/schemas/ResourceId'
5687
+ - name: investigationId
5688
+ in: path
5689
+ required: true
5690
+ description: The investigation record id (from `POST`/`GET .../investigation` or the `runId` an ack/launch returned).
5691
+ schema:
5692
+ $ref: '#/components/schemas/ResourceId'
5693
+ requestBody:
5694
+ required: true
5695
+ content:
5696
+ application/json:
5697
+ schema:
5698
+ $ref: '#/components/schemas/UpdateOpsInvestigationRequest'
5699
+ examples:
5700
+ findings:
5701
+ summary: Fill in the run record's findings
5702
+ value:
5703
+ kind: investigated
5704
+ summary: Root cause is a stale KV read on the checkout flag.
5705
+ findings: The `checkout.cta` gate is rebuilt without a CDN purge, so…
5706
+ confidence: high
5707
+ prNumber: 4821
5708
+ prUrl: https://github.com/acme/web/pull/4821
5709
+ responses:
5710
+ '200':
5711
+ description: The updated investigation record
5712
+ content:
5713
+ application/json:
5714
+ schema:
5715
+ $ref: '#/components/schemas/OpsInvestigation'
5716
+ '400':
5717
+ $ref: '#/components/responses/BadRequest'
5718
+ '401':
5719
+ $ref: '#/components/responses/Unauthorized'
5720
+ '403':
5721
+ $ref: '#/components/responses/Forbidden'
5722
+ '404':
5723
+ $ref: '#/components/responses/NotFound'
5724
+ '422':
5725
+ $ref: '#/components/responses/UnprocessableEntity'
5726
+ x-error-codes:
5727
+ - BAD_REQUEST
5728
+ - UNAUTHORIZED
5729
+ - FORBIDDEN
5730
+ - NOT_FOUND
5731
+ - VALIDATION
5732
+ x-cli:
5733
+ name: update
5734
+ positional:
5735
+ - handle
5736
+ - investigationId
5638
5737
  /api/admin/agent-profiles:
5639
5738
  get:
5640
5739
  operationId: listOpsAgents
@@ -9217,6 +9316,9 @@ components:
9217
9316
  locked:
9218
9317
  description: If `true`, dashboard hides edit controls (e.g. the trailing public-floor entry).
9219
9318
  type: boolean
9319
+ whitelist:
9320
+ description: Cosmetic marker. When `true`, the dashboard renders this condition as the pinned, always-first "whitelist" allowlist block (a direct `email`/`user_id` `in […]` list) rather than a numbered targeting step. Purely presentational — ignored by evaluation, which treats the entry as an ordinary condition.
9321
+ type: boolean
9220
9322
  required:
9221
9323
  - id
9222
9324
  - type
@@ -9618,6 +9720,9 @@ components:
9618
9720
  locked:
9619
9721
  description: If `true`, dashboard hides edit controls (e.g. the trailing public-floor entry).
9620
9722
  type: boolean
9723
+ whitelist:
9724
+ description: Cosmetic marker. When `true`, the dashboard renders this condition as the pinned, always-first "whitelist" allowlist block (a direct `email`/`user_id` `in […]` list) rather than a numbered targeting step. Purely presentational — ignored by evaluation, which treats the entry as an ordinary condition.
9725
+ type: boolean
9621
9726
  required:
9622
9727
  - id
9623
9728
  - type
@@ -9917,6 +10022,9 @@ components:
9917
10022
  locked:
9918
10023
  description: If `true`, dashboard hides edit controls (e.g. the trailing public-floor entry).
9919
10024
  type: boolean
10025
+ whitelist:
10026
+ description: Cosmetic marker. When `true`, the dashboard renders this condition as the pinned, always-first "whitelist" allowlist block (a direct `email`/`user_id` `in […]` list) rather than a numbered targeting step. Purely presentational — ignored by evaluation, which treats the entry as an ordinary condition.
10027
+ type: boolean
9920
10028
  required:
9921
10029
  - id
9922
10030
  - type
@@ -11405,12 +11513,26 @@ components:
11405
11513
  additionalProperties: {}
11406
11514
  description: JSON Schema (draft 2020-12) describing the shape of the config value. Top-level `type` must be `'object'`; every published value is validated against this schema.
11407
11515
  value:
11516
+ type: object
11517
+ additionalProperties: {}
11408
11518
  description: 'Initial config value. Either a single JSON object applied to every env, or a `{ env: value }` map seeding per-env values. Must match `schema`. Defaults to `{}` on every env when omitted.'
11519
+ dev:
11520
+ type: object
11521
+ additionalProperties: {}
11522
+ description: Seed the **dev** env's initial value (version 1), overriding `value` for dev. Published immediately. Must match `schema`.
11523
+ staging:
11524
+ type: object
11525
+ additionalProperties: {}
11526
+ description: Seed the **staging** env's initial value (version 1), overriding `value` for staging. Published immediately. Must match `schema`.
11527
+ prod:
11528
+ type: object
11529
+ additionalProperties: {}
11530
+ description: Seed the **prod** env's initial value (version 1), overriding `value` for prod. Published immediately. Must match `schema`.
11409
11531
  required:
11410
11532
  - name
11411
11533
  - schema
11412
11534
  additionalProperties: false
11413
- description: Body for `POST /api/admin/configs`. `name` + `schema` required.
11535
+ description: Body for `POST /api/admin/configs`. `name` + `schema` required. Per-env `dev`/`staging`/`prod` values are published to that env at version 1 (overriding `value`).
11414
11536
  CreateConfigResponse:
11415
11537
  type: object
11416
11538
  properties:
@@ -11540,11 +11662,25 @@ components:
11540
11662
  type: object
11541
11663
  additionalProperties: {}
11542
11664
  value:
11543
- description: Flat value applied to **every** env. Publishes a new version per env. To target one env, use `PUT /{id}/drafts` then `POST /{id}/publish`.
11665
+ type: object
11666
+ additionalProperties: {}
11667
+ description: Flat value applied to **every** env. Publishes a new version per env. To publish one env only, pass that env's key (`dev`/`staging`/`prod`) instead.
11668
+ dev:
11669
+ type: object
11670
+ additionalProperties: {}
11671
+ description: Publish a new version to the **dev** env only, immediately (no draft). Overrides `value` for dev. Must match the effective schema.
11672
+ staging:
11673
+ type: object
11674
+ additionalProperties: {}
11675
+ description: Publish a new version to the **staging** env only, immediately (no draft). Overrides `value` for staging. Must match the effective schema.
11676
+ prod:
11677
+ type: object
11678
+ additionalProperties: {}
11679
+ description: Publish a new version to the **prod** env only, immediately (no draft). Overrides `value` for prod. Must match the effective schema.
11544
11680
  folder:
11545
11681
  $ref: '#/components/schemas/Folder'
11546
11682
  additionalProperties: false
11547
- description: Body for `PATCH /api/admin/configs/{id}`. Partial — only supplied fields change. `value` republishes on every env.
11683
+ description: Body for `PATCH /api/admin/configs/{id}`. Partial — only supplied fields change. `value` republishes on every env; per-env `dev`/`staging`/`prod` publish a new version to just that env.
11548
11684
  UpdateConfigResponse:
11549
11685
  type: object
11550
11686
  properties:
@@ -11567,6 +11703,8 @@ components:
11567
11703
  env:
11568
11704
  $ref: '#/components/schemas/Env'
11569
11705
  value:
11706
+ type: object
11707
+ additionalProperties: {}
11570
11708
  description: Draft value to stage on `env`. Validated against the config's current schema.
11571
11709
  required:
11572
11710
  - env
@@ -13123,6 +13261,11 @@ components:
13123
13261
  - lower_better
13124
13262
  - neutral
13125
13263
  description: Desired direction of movement. `higher_better` (default), `lower_better`, or `neutral` (guardrail).
13264
+ MetricDisplayUnit:
13265
+ description: Display unit (e.g. `ms`, `%`, `$`), or `null` when unitless.
13266
+ anyOf:
13267
+ - type: string
13268
+ - type: 'null'
13126
13269
  CreateMetricWithQuery:
13127
13270
  type: object
13128
13271
  properties:
@@ -13140,6 +13283,8 @@ components:
13140
13283
  $ref: '#/components/schemas/MetricDefaultMinEffectOfInterest'
13141
13284
  direction:
13142
13285
  $ref: '#/components/schemas/MetricDirection'
13286
+ unit:
13287
+ $ref: '#/components/schemas/MetricDisplayUnit'
13143
13288
  required:
13144
13289
  - name
13145
13290
  - event_name
@@ -13163,6 +13308,8 @@ components:
13163
13308
  $ref: '#/components/schemas/MetricDefaultMinEffectOfInterest'
13164
13309
  direction:
13165
13310
  $ref: '#/components/schemas/MetricDirection'
13311
+ unit:
13312
+ $ref: '#/components/schemas/MetricDisplayUnit'
13166
13313
  required:
13167
13314
  - name
13168
13315
  - event_name
@@ -13300,6 +13447,8 @@ components:
13300
13447
  $ref: '#/components/schemas/MetricDefaultMinEffectOfInterest'
13301
13448
  direction:
13302
13449
  $ref: '#/components/schemas/MetricDirection'
13450
+ unit:
13451
+ $ref: '#/components/schemas/MetricDisplayUnit'
13303
13452
  required:
13304
13453
  - query
13305
13454
  additionalProperties: false
@@ -13319,6 +13468,8 @@ components:
13319
13468
  $ref: '#/components/schemas/MetricDefaultMinEffectOfInterest'
13320
13469
  direction:
13321
13470
  $ref: '#/components/schemas/MetricDirection'
13471
+ unit:
13472
+ $ref: '#/components/schemas/MetricDisplayUnit'
13322
13473
  required:
13323
13474
  - query_ir
13324
13475
  additionalProperties: false
@@ -13336,8 +13487,10 @@ components:
13336
13487
  $ref: '#/components/schemas/MetricDefaultMinEffectOfInterest'
13337
13488
  direction:
13338
13489
  $ref: '#/components/schemas/MetricDirection'
13490
+ unit:
13491
+ $ref: '#/components/schemas/MetricDisplayUnit'
13339
13492
  additionalProperties: false
13340
- description: Update-metric variant that leaves the query untouched (metadata-only edit — folder, event, winsorisation, default minimum effect of interest, direction).
13493
+ description: Update-metric variant that leaves the query untouched (metadata-only edit — folder, event, winsorisation, default minimum effect of interest, direction, display unit).
13341
13494
  UpdateMetricRequest:
13342
13495
  oneOf:
13343
13496
  - $ref: '#/components/schemas/UpdateMetricWithQuery'
@@ -14329,6 +14482,19 @@ components:
14329
14482
  - agent
14330
14483
  additionalProperties: false
14331
14484
  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`).'
14485
+ OpsRunAction:
14486
+ type: string
14487
+ enum:
14488
+ - link_pr
14489
+ - notify
14490
+ - status
14491
+ - superseded
14492
+ description: The final action that closed a run record — `link_pr`/`notify` are the agent's terminal ops actions, `status` a completion status flip (ready_for_qa/resolved), `superseded` a newer ack replacing an open run.
14493
+ OpsRunActionOrNull:
14494
+ anyOf:
14495
+ - $ref: '#/components/schemas/OpsRunAction'
14496
+ - type: 'null'
14497
+ description: Which final action closed the run, or `null` while it is open (or a non-run record).
14332
14498
  OpsRun:
14333
14499
  type: object
14334
14500
  properties:
@@ -14355,6 +14521,11 @@ components:
14355
14521
  - type: string
14356
14522
  - type: 'null'
14357
14523
  description: The agent-run session id recorded on the ack (dashboard deep-links to the run page), or `null`.
14524
+ sessionUrl:
14525
+ anyOf:
14526
+ - type: string
14527
+ - type: 'null'
14528
+ description: 'The run''s session-page deep link, or `null`. DERIVED (never stored): rebuilt from `sessionId` + the run''s trigger connector — Claude''s routine id (`?trigger=`), Copilot''s repo (`/tasks/`), Cursor/Jules from the id alone.'
14358
14529
  startedAt:
14359
14530
  type: string
14360
14531
  description: ISO-8601 timestamp the run started (the ack time).
@@ -14364,15 +14535,7 @@ components:
14364
14535
  - type: 'null'
14365
14536
  description: ISO-8601 timestamp the run closed, or `null` while still open.
14366
14537
  completedAction:
14367
- anyOf:
14368
- - type: string
14369
- enum:
14370
- - link_pr
14371
- - notify
14372
- - status
14373
- - superseded
14374
- - type: 'null'
14375
- 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.
14538
+ $ref: '#/components/schemas/OpsRunActionOrNull'
14376
14539
  prNumber:
14377
14540
  anyOf:
14378
14541
  - type: number
@@ -14389,6 +14552,7 @@ components:
14389
14552
  - connectorId
14390
14553
  - ackedBy
14391
14554
  - sessionId
14555
+ - sessionUrl
14392
14556
  - startedAt
14393
14557
  - completedAt
14394
14558
  - completedAction
@@ -14562,6 +14726,28 @@ components:
14562
14726
  - $ref: '#/components/schemas/OpsItemPriority'
14563
14727
  - type: 'null'
14564
14728
  description: Initial triage priority, or `null`.
14729
+ status:
14730
+ anyOf:
14731
+ - $ref: '#/components/schemas/OpsItemStatus'
14732
+ description: Initial lifecycle status; defaults to `open` when omitted.
14733
+ assigneeId:
14734
+ anyOf:
14735
+ - type: string
14736
+ - type: 'null'
14737
+ description: The `users.id` of the person to assign as owner at creation, or `null`.
14738
+ subscribers:
14739
+ type: array
14740
+ items:
14741
+ type: string
14742
+ format: email
14743
+ default: []
14744
+ description: Emails of teammates to subscribe to this item's Slack pings at creation.
14745
+ tags:
14746
+ type: array
14747
+ items:
14748
+ type: string
14749
+ default: []
14750
+ description: Tag names to attach at creation (get-or-created by name, deduped case-insensitively).
14565
14751
  reporterEmail:
14566
14752
  anyOf:
14567
14753
  - type: string
@@ -14631,6 +14817,28 @@ components:
14631
14817
  - $ref: '#/components/schemas/OpsItemPriority'
14632
14818
  - type: 'null'
14633
14819
  description: Initial triage priority, or `null`.
14820
+ status:
14821
+ anyOf:
14822
+ - $ref: '#/components/schemas/OpsItemStatus'
14823
+ description: Initial lifecycle status; defaults to `open` when omitted.
14824
+ assigneeId:
14825
+ anyOf:
14826
+ - type: string
14827
+ - type: 'null'
14828
+ description: The `users.id` of the person to assign as owner at creation, or `null`.
14829
+ subscribers:
14830
+ type: array
14831
+ items:
14832
+ type: string
14833
+ format: email
14834
+ default: []
14835
+ description: Emails of teammates to subscribe to this item's Slack pings at creation.
14836
+ tags:
14837
+ type: array
14838
+ items:
14839
+ type: string
14840
+ default: []
14841
+ description: Tag names to attach at creation (get-or-created by name, deduped case-insensitively).
14634
14842
  reporterEmail:
14635
14843
  anyOf:
14636
14844
  - type: string
@@ -15210,21 +15418,18 @@ components:
15210
15418
  - type: string
15211
15419
  - type: 'null'
15212
15420
  description: The agent-run session id, or `null`.
15213
- ackedBy:
15421
+ sessionUrl:
15214
15422
  anyOf:
15215
15423
  - type: string
15216
15424
  - type: 'null'
15217
- description: Email of the human who acked (run records for a human ack), or `null`.
15218
- completedAction:
15425
+ description: 'The run''s session-page deep link, or `null`. DERIVED (never stored): rebuilt from `sessionId` + the run''s trigger connector — Claude''s routine id (`?trigger=`), Copilot''s repo (`/tasks/`), Cursor/Jules from the id alone. Only `working` run records carry one.'
15426
+ ackedBy:
15219
15427
  anyOf:
15220
15428
  - type: string
15221
- enum:
15222
- - link_pr
15223
- - notify
15224
- - status
15225
- - superseded
15226
15429
  - type: 'null'
15227
- description: Which final action closed a `working` run record, or `null` (open run / non-run record).
15430
+ description: Email of the human who acked (run records for a human ack), or `null`.
15431
+ completedAction:
15432
+ $ref: '#/components/schemas/OpsRunActionOrNull'
15228
15433
  createdAt:
15229
15434
  type: string
15230
15435
  description: ISO-8601 creation timestamp.
@@ -15252,6 +15457,7 @@ components:
15252
15457
  - startedAt
15253
15458
  - completedAt
15254
15459
  - sessionId
15460
+ - sessionUrl
15255
15461
  - ackedBy
15256
15462
  - completedAction
15257
15463
  - createdAt
@@ -15368,6 +15574,94 @@ components:
15368
15574
  - kind
15369
15575
  additionalProperties: false
15370
15576
  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.
15577
+ UpdateOpsInvestigationRequest:
15578
+ type: object
15579
+ properties:
15580
+ kind:
15581
+ type: string
15582
+ enum:
15583
+ - investigated
15584
+ - detected
15585
+ - question
15586
+ - ready_for_qa
15587
+ - working
15588
+ - note
15589
+ description: Reclassify the record's lifecycle stage (e.g. flip a `working` run into `investigated` once findings land).
15590
+ summary:
15591
+ type: string
15592
+ maxLength: 2000
15593
+ description: One-line summary of the record.
15594
+ findings:
15595
+ type: string
15596
+ maxLength: 50000
15597
+ description: The full findings write-up (markdown).
15598
+ question:
15599
+ type: string
15600
+ maxLength: 10000
15601
+ description: A blocking question for the team (markdown).
15602
+ qaNotes:
15603
+ type: string
15604
+ maxLength: 50000
15605
+ description: How to verify the fix — QA notes (markdown).
15606
+ model:
15607
+ type: string
15608
+ maxLength: 200
15609
+ description: The model the agent ran on.
15610
+ prNumber:
15611
+ type: integer
15612
+ description: A PR the record references.
15613
+ prUrl:
15614
+ type: string
15615
+ format: uri
15616
+ maxLength: 2000
15617
+ description: HTML URL of that PR.
15618
+ sources:
15619
+ type: array
15620
+ maxItems: 200
15621
+ items:
15622
+ type: object
15623
+ properties:
15624
+ path:
15625
+ type: string
15626
+ description: Repo-relative file path inspected.
15627
+ url:
15628
+ type: string
15629
+ description: External link consulted.
15630
+ label:
15631
+ type: string
15632
+ description: Human-readable label for the source.
15633
+ additionalProperties: false
15634
+ description: One file/link inspected while producing the record.
15635
+ description: The files/links inspected.
15636
+ confidence:
15637
+ type: string
15638
+ enum:
15639
+ - low
15640
+ - medium
15641
+ - high
15642
+ description: Self-reported confidence in the record.
15643
+ tokensUsed:
15644
+ type: integer
15645
+ description: Tokens the run consumed.
15646
+ durationMs:
15647
+ type: integer
15648
+ description: Run duration in milliseconds.
15649
+ visibility:
15650
+ type: string
15651
+ enum:
15652
+ - draft
15653
+ - published
15654
+ description: Record visibility. `draft` keeps it out of the panel; `published` surfaces it.
15655
+ completedAt:
15656
+ type: string
15657
+ description: ISO-8601 timestamp the work finished. Set it (or flip `kind` off `working`) to mark a run record done.
15658
+ sessionId:
15659
+ type: string
15660
+ maxLength: 300
15661
+ description: The agent-run session id, so the dashboard can deep-link to the run.
15662
+ additionalProperties: false
15663
+ minProperties: 1
15664
+ 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.
15371
15665
  OpsAgentProfile:
15372
15666
  type: object
15373
15667
  properties:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shipeasy/openapi",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Shipeasy admin OpenAPI 3.2 spec (hand-authored, single source of truth) + the generated TypeScript client, Zod schemas, and types. Consumed by @shipeasy/cli and @shipeasy/mcp.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",