@shipeasy/openapi 2.4.0 → 3.0.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-ZPKHTUVV.js → chunk-7T77D5YO.js} +101 -36
- package/dist/chunk-7T77D5YO.js.map +1 -0
- package/dist/{chunk-4QSU744W.js → chunk-V4ZESAIF.js} +11 -1
- package/dist/chunk-V4ZESAIF.js.map +1 -0
- package/dist/{client-WGNXT4xl.d.ts → client-DzEqdN5N.d.ts} +294 -64
- package/dist/client.d.ts +1 -1
- package/dist/client.js +3 -1
- package/dist/custom.d.ts +9 -4
- package/dist/custom.js +57 -9
- package/dist/custom.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.ts +318 -35
- package/dist/schemas.js +17 -1
- package/openapi.json +513 -151
- package/openapi.yaml +374 -102
- package/package.json +1 -1
- package/spec/components/schemas/configs.yaml +33 -3
- package/spec/components/schemas/gates.yaml +9 -0
- package/spec/components/schemas/i18n.yaml +20 -44
- package/spec/components/schemas/metrics.yaml +16 -1
- package/spec/components/schemas/ops.yaml +163 -19
- package/spec/openapi.yaml +13 -2
- package/spec/paths/configs.yaml +28 -21
- package/spec/paths/i18n.yaml +13 -11
- package/spec/paths/ops.yaml +85 -2
- package/dist/chunk-4QSU744W.js.map +0 -1
- package/dist/chunk-ZPKHTUVV.js.map +0 -1
package/openapi.json
CHANGED
|
@@ -113,18 +113,23 @@
|
|
|
113
113
|
"parent": "Ops",
|
|
114
114
|
"description": "Comments on a queue item — the discussion thread that hangs off any bug,\nfeature request, or auto-filed error/alert ticket. Append a comment or read\nthe thread; one level of threaded replies via `parentId`.\n\n**Mentions.** `@teammate` in a body raises an in-app notification for that\nperson; `@shipeasy` asks Jarvis (the AI agent) to read the item and reply.\nComments authored by Jarvis carry `authorType: system`."
|
|
115
115
|
},
|
|
116
|
+
{
|
|
117
|
+
"name": "Investigations",
|
|
118
|
+
"parent": "Ops",
|
|
119
|
+
"description": "Investigation records on a queue item — the structured, read-only write-ups\nan AI agent produces while working it (findings / a blocking question / QA\nnotes), plus the `working` run rows an ack or an AI hand-off opens. This is\nthe AI-write seam the cockpit's detail panel renders: `list` reads what a\nprevious run found, `create` appends a new record, and `update` fills in the\n`working` run record you were handed (findings, PR, confidence) as you work."
|
|
120
|
+
},
|
|
116
121
|
{
|
|
117
122
|
"name": "Projects",
|
|
118
123
|
"description": "Projects: the account-level container every other resource is scoped to.\n\n**Account-level, not bound-project-level.** Both operations resolve from the caller's credential rather than the `.shipeasy`-bound project — `current` reads the project the auth header maps to, and `upsert` find-or-creates under the session's owner. Neither touches the local `.shipeasy` binding; recording the result there is a consumer side-effect layered on top.\n\n**Idempotent upsert.** A project is keyed by `(owner_email, domain)`. Calling `upsert` again with the same domain returns the existing project with `created: false`, so it is safe to run on every install."
|
|
119
124
|
},
|
|
120
125
|
{
|
|
121
126
|
"name": "i18n",
|
|
122
|
-
"description": "String Manager (i18n): the worker-safe REST surface — locale profiles, the\ninsert-only key push, single-key overwrite,
|
|
127
|
+
"description": "String Manager (i18n): the worker-safe REST surface — locale profiles, the\ninsert-only key push, single-key overwrite, profile publish, and the read-only\nkey/draft listings.\n\nThe fs/AST parts (scan, validate, install-loader, codemod) are NOT part of\nthis API — they stay in the fs-having CLI/MCP."
|
|
123
128
|
},
|
|
124
129
|
{
|
|
125
130
|
"name": "Profiles",
|
|
126
131
|
"parent": "i18n",
|
|
127
|
-
"description": "Locale profiles (e.g. `en:prod`) — create, list, and publish a profile
|
|
132
|
+
"description": "Locale profiles (e.g. `en:prod`) — create, list, and publish a profile to the CDN."
|
|
128
133
|
},
|
|
129
134
|
{
|
|
130
135
|
"name": "Keys",
|
|
@@ -2544,7 +2549,7 @@
|
|
|
2544
2549
|
"post": {
|
|
2545
2550
|
"operationId": "createConfig",
|
|
2546
2551
|
"summary": "Create a dynamic config",
|
|
2547
|
-
"description": "Creates a new config with the given `schema`. The initial `value` (or an empty object) is published as version 1 on **every** env.\n\nReturns `409` if `name` already exists in the project, `400` if `value` doesn't validate against `schema`.\n\n**Use cases**\n\n- **Minimal create** — `name` + `schema`. Initial value defaults to `{}`.\n- **Seeded create** — supply a flat `value` to publish the same object on every env.\n- **Per-env seed** — supply a `{ env: value }` map for
|
|
2552
|
+
"description": "Creates a new config with the given `schema`. The initial `value` (or an empty object) is published as version 1 on **every** env.\n\nReturns `409` if `name` already exists in the project, `400` if `value` doesn't validate against `schema`.\n\n**Use cases**\n\n- **Minimal create** — `name` + `schema`. Initial value defaults to `{}`.\n- **Seeded create** — supply a flat `value` to publish the same object on every env.\n- **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).",
|
|
2548
2553
|
"tags": [
|
|
2549
2554
|
"Configs"
|
|
2550
2555
|
],
|
|
@@ -2609,8 +2614,8 @@
|
|
|
2609
2614
|
}
|
|
2610
2615
|
},
|
|
2611
2616
|
"perEnvSeed": {
|
|
2612
|
-
"summary": "Per-env seed",
|
|
2613
|
-
"description": "Pass
|
|
2617
|
+
"summary": "Per-env seed (env keys)",
|
|
2618
|
+
"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.",
|
|
2614
2619
|
"value": {
|
|
2615
2620
|
"name": "pricing.tiers",
|
|
2616
2621
|
"schema": {
|
|
@@ -2624,40 +2629,28 @@
|
|
|
2624
2629
|
"tiers"
|
|
2625
2630
|
]
|
|
2626
2631
|
},
|
|
2627
|
-
"
|
|
2628
|
-
"
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
"
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
]
|
|
2650
|
-
},
|
|
2651
|
-
"prod": {
|
|
2652
|
-
"tiers": [
|
|
2653
|
-
{
|
|
2654
|
-
"name": "free"
|
|
2655
|
-
},
|
|
2656
|
-
{
|
|
2657
|
-
"name": "pro"
|
|
2658
|
-
}
|
|
2659
|
-
]
|
|
2660
|
-
}
|
|
2632
|
+
"dev": {
|
|
2633
|
+
"tiers": [
|
|
2634
|
+
{
|
|
2635
|
+
"name": "free"
|
|
2636
|
+
},
|
|
2637
|
+
{
|
|
2638
|
+
"name": "pro"
|
|
2639
|
+
},
|
|
2640
|
+
{
|
|
2641
|
+
"name": "enterprise"
|
|
2642
|
+
}
|
|
2643
|
+
]
|
|
2644
|
+
},
|
|
2645
|
+
"prod": {
|
|
2646
|
+
"tiers": [
|
|
2647
|
+
{
|
|
2648
|
+
"name": "free"
|
|
2649
|
+
},
|
|
2650
|
+
{
|
|
2651
|
+
"name": "pro"
|
|
2652
|
+
}
|
|
2653
|
+
]
|
|
2661
2654
|
}
|
|
2662
2655
|
}
|
|
2663
2656
|
}
|
|
@@ -2901,7 +2894,7 @@
|
|
|
2901
2894
|
"patch": {
|
|
2902
2895
|
"operationId": "updateConfig",
|
|
2903
2896
|
"summary": "Update a dynamic config",
|
|
2904
|
-
"description": "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.\n\
|
|
2897
|
+
"description": "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.\n\n**Use cases**\n\n- **Republish flat value** — `{ \"value\": {…} }` sets the same value on every env.\n- **Publish one env** — `{ \"prod\": {…} }` publishes a new version to prod only, instantly.\n- **Schema migration** — `{ \"schema\": {…} }` replaces the schema; existing values are re-validated.",
|
|
2905
2898
|
"tags": [
|
|
2906
2899
|
"Configs"
|
|
2907
2900
|
],
|
|
@@ -2943,6 +2936,25 @@
|
|
|
2943
2936
|
}
|
|
2944
2937
|
}
|
|
2945
2938
|
},
|
|
2939
|
+
"prodOnly": {
|
|
2940
|
+
"summary": "Per-env — publish prod only",
|
|
2941
|
+
"description": "Publishes a new version to prod only, immediately. dev/staging untouched.",
|
|
2942
|
+
"value": {
|
|
2943
|
+
"prod": {
|
|
2944
|
+
"tiers": [
|
|
2945
|
+
{
|
|
2946
|
+
"name": "free"
|
|
2947
|
+
},
|
|
2948
|
+
{
|
|
2949
|
+
"name": "pro"
|
|
2950
|
+
},
|
|
2951
|
+
{
|
|
2952
|
+
"name": "enterprise"
|
|
2953
|
+
}
|
|
2954
|
+
]
|
|
2955
|
+
}
|
|
2956
|
+
}
|
|
2957
|
+
},
|
|
2946
2958
|
"schemaOnly": {
|
|
2947
2959
|
"summary": "Schema-only update",
|
|
2948
2960
|
"description": "Replaces the schema. Existing values must still validate or the update fails.",
|
|
@@ -3181,6 +3193,7 @@
|
|
|
3181
3193
|
],
|
|
3182
3194
|
"x-cli": {
|
|
3183
3195
|
"name": "draft",
|
|
3196
|
+
"hidden": true,
|
|
3184
3197
|
"positional": [
|
|
3185
3198
|
"id"
|
|
3186
3199
|
]
|
|
@@ -3267,6 +3280,7 @@
|
|
|
3267
3280
|
],
|
|
3268
3281
|
"x-cli": {
|
|
3269
3282
|
"name": "discard-draft",
|
|
3283
|
+
"hidden": true,
|
|
3270
3284
|
"positional": [
|
|
3271
3285
|
"id"
|
|
3272
3286
|
]
|
|
@@ -3366,6 +3380,7 @@
|
|
|
3366
3380
|
],
|
|
3367
3381
|
"x-cli": {
|
|
3368
3382
|
"name": "publish",
|
|
3383
|
+
"hidden": true,
|
|
3369
3384
|
"positional": [
|
|
3370
3385
|
"id"
|
|
3371
3386
|
]
|
|
@@ -3457,6 +3472,7 @@
|
|
|
3457
3472
|
],
|
|
3458
3473
|
"x-cli": {
|
|
3459
3474
|
"name": "activity",
|
|
3475
|
+
"hidden": true,
|
|
3460
3476
|
"positional": [
|
|
3461
3477
|
"id"
|
|
3462
3478
|
]
|
|
@@ -3663,6 +3679,7 @@
|
|
|
3663
3679
|
],
|
|
3664
3680
|
"x-cli": {
|
|
3665
3681
|
"name": "versions",
|
|
3682
|
+
"hidden": true,
|
|
3666
3683
|
"positional": [
|
|
3667
3684
|
"id"
|
|
3668
3685
|
]
|
|
@@ -7545,7 +7562,7 @@
|
|
|
7545
7562
|
"summary": "List an item's investigation records",
|
|
7546
7563
|
"description": "The structured, read-only investigation records on a queue item — the\nfindings / blocking questions / QA notes an AI agent posted while working\nit, plus its `working` run rows. Returns `published` records only, newest\nfirst (max 50).\n\n**Use case:** Read what a previous agent run already found before starting\nyour own investigation of the item.",
|
|
7547
7564
|
"tags": [
|
|
7548
|
-
"
|
|
7565
|
+
"Investigations"
|
|
7549
7566
|
],
|
|
7550
7567
|
"parameters": [
|
|
7551
7568
|
{
|
|
@@ -7593,14 +7610,20 @@
|
|
|
7593
7610
|
"UNAUTHORIZED",
|
|
7594
7611
|
"FORBIDDEN",
|
|
7595
7612
|
"NOT_FOUND"
|
|
7596
|
-
]
|
|
7613
|
+
],
|
|
7614
|
+
"x-cli": {
|
|
7615
|
+
"name": "list",
|
|
7616
|
+
"positional": [
|
|
7617
|
+
"handle"
|
|
7618
|
+
]
|
|
7619
|
+
}
|
|
7597
7620
|
},
|
|
7598
7621
|
"post": {
|
|
7599
7622
|
"operationId": "createOpsInvestigation",
|
|
7600
7623
|
"summary": "Record an investigation",
|
|
7601
7624
|
"description": "Append one structured investigation record to a queue item — the AI-write\nseam the cockpit's detail panel renders read-only. Post your findings\n(`kind: investigated`), a blocking question for the team (`kind:\nquestion`), or how to verify the fix (`kind: ready_for_qa` with\n`qaNotes`). Append-only and create-only, so it is safe for restricted ops\nkeys.\n\n**Use case:** After working an item, leave a findings write-up (summary,\nmarkdown findings, sources inspected, confidence) so the team — and the\nnext agent run — sees what you learned.",
|
|
7602
7625
|
"tags": [
|
|
7603
|
-
"
|
|
7626
|
+
"Investigations"
|
|
7604
7627
|
],
|
|
7605
7628
|
"parameters": [
|
|
7606
7629
|
{
|
|
@@ -7688,7 +7711,110 @@
|
|
|
7688
7711
|
"FORBIDDEN",
|
|
7689
7712
|
"NOT_FOUND",
|
|
7690
7713
|
"VALIDATION"
|
|
7691
|
-
]
|
|
7714
|
+
],
|
|
7715
|
+
"x-cli": {
|
|
7716
|
+
"name": "create",
|
|
7717
|
+
"positional": [
|
|
7718
|
+
"handle"
|
|
7719
|
+
]
|
|
7720
|
+
}
|
|
7721
|
+
}
|
|
7722
|
+
},
|
|
7723
|
+
"/api/admin/ops/{handle}/investigation/{investigationId}": {
|
|
7724
|
+
"patch": {
|
|
7725
|
+
"operationId": "updateOpsInvestigation",
|
|
7726
|
+
"summary": "Update an investigation record",
|
|
7727
|
+
"description": "Update one existing investigation record in place — the write-back seam for\nthe `working` run record you were handed when a run was launched. Fill in\nthe `summary`/`findings`, attach the fixing PR, record your `confidence`\nand the `sources` you inspected, or flip its `kind` off `working` once the\ninvestigation is done. A partial patch: send only the fields you want to\nchange. Safe for restricted ops keys (it never reads or deletes).\n\n**Use case:** A run started with an empty `working` record; as you work,\nPATCH it with your findings so the cockpit's detail panel fills in live —\nno need to append a second record.",
|
|
7728
|
+
"tags": [
|
|
7729
|
+
"Investigations"
|
|
7730
|
+
],
|
|
7731
|
+
"parameters": [
|
|
7732
|
+
{
|
|
7733
|
+
"$ref": "#/components/parameters/ProjectId"
|
|
7734
|
+
},
|
|
7735
|
+
{
|
|
7736
|
+
"name": "handle",
|
|
7737
|
+
"in": "path",
|
|
7738
|
+
"required": true,
|
|
7739
|
+
"description": "Per-project item number (e.g. `7`) or the full ops item id.",
|
|
7740
|
+
"schema": {
|
|
7741
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
7742
|
+
}
|
|
7743
|
+
},
|
|
7744
|
+
{
|
|
7745
|
+
"name": "investigationId",
|
|
7746
|
+
"in": "path",
|
|
7747
|
+
"required": true,
|
|
7748
|
+
"description": "The investigation record id (from `POST`/`GET .../investigation` or the `runId` an ack/launch returned).",
|
|
7749
|
+
"schema": {
|
|
7750
|
+
"$ref": "#/components/schemas/ResourceId"
|
|
7751
|
+
}
|
|
7752
|
+
}
|
|
7753
|
+
],
|
|
7754
|
+
"requestBody": {
|
|
7755
|
+
"required": true,
|
|
7756
|
+
"content": {
|
|
7757
|
+
"application/json": {
|
|
7758
|
+
"schema": {
|
|
7759
|
+
"$ref": "#/components/schemas/UpdateOpsInvestigationRequest"
|
|
7760
|
+
},
|
|
7761
|
+
"examples": {
|
|
7762
|
+
"findings": {
|
|
7763
|
+
"summary": "Fill in the run record's findings",
|
|
7764
|
+
"value": {
|
|
7765
|
+
"kind": "investigated",
|
|
7766
|
+
"summary": "Root cause is a stale KV read on the checkout flag.",
|
|
7767
|
+
"findings": "The `checkout.cta` gate is rebuilt without a CDN purge, so…",
|
|
7768
|
+
"confidence": "high",
|
|
7769
|
+
"prNumber": 4821,
|
|
7770
|
+
"prUrl": "https://github.com/acme/web/pull/4821"
|
|
7771
|
+
}
|
|
7772
|
+
}
|
|
7773
|
+
}
|
|
7774
|
+
}
|
|
7775
|
+
}
|
|
7776
|
+
},
|
|
7777
|
+
"responses": {
|
|
7778
|
+
"200": {
|
|
7779
|
+
"description": "The updated investigation record",
|
|
7780
|
+
"content": {
|
|
7781
|
+
"application/json": {
|
|
7782
|
+
"schema": {
|
|
7783
|
+
"$ref": "#/components/schemas/OpsInvestigation"
|
|
7784
|
+
}
|
|
7785
|
+
}
|
|
7786
|
+
}
|
|
7787
|
+
},
|
|
7788
|
+
"400": {
|
|
7789
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7790
|
+
},
|
|
7791
|
+
"401": {
|
|
7792
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7793
|
+
},
|
|
7794
|
+
"403": {
|
|
7795
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7796
|
+
},
|
|
7797
|
+
"404": {
|
|
7798
|
+
"$ref": "#/components/responses/NotFound"
|
|
7799
|
+
},
|
|
7800
|
+
"422": {
|
|
7801
|
+
"$ref": "#/components/responses/UnprocessableEntity"
|
|
7802
|
+
}
|
|
7803
|
+
},
|
|
7804
|
+
"x-error-codes": [
|
|
7805
|
+
"BAD_REQUEST",
|
|
7806
|
+
"UNAUTHORIZED",
|
|
7807
|
+
"FORBIDDEN",
|
|
7808
|
+
"NOT_FOUND",
|
|
7809
|
+
"VALIDATION"
|
|
7810
|
+
],
|
|
7811
|
+
"x-cli": {
|
|
7812
|
+
"name": "update",
|
|
7813
|
+
"positional": [
|
|
7814
|
+
"handle",
|
|
7815
|
+
"investigationId"
|
|
7816
|
+
]
|
|
7817
|
+
}
|
|
7692
7818
|
}
|
|
7693
7819
|
},
|
|
7694
7820
|
"/api/admin/agent-profiles": {
|
|
@@ -8973,7 +9099,7 @@
|
|
|
8973
9099
|
"get": {
|
|
8974
9100
|
"operationId": "listI18nProfiles",
|
|
8975
9101
|
"summary": "List i18n profiles",
|
|
8976
|
-
"description": "Returns every locale profile in the project (e.g. `en:prod`, `fr:prod`).\n\n**Use case:** Discover which locale profiles exist before pushing keys or publishing
|
|
9102
|
+
"description": "Returns every locale profile in the project (e.g. `en:prod`, `fr:prod`).\n\n**Use case:** Discover which locale profiles exist before pushing keys or publishing.",
|
|
8977
9103
|
"tags": [
|
|
8978
9104
|
"Profiles"
|
|
8979
9105
|
],
|
|
@@ -9222,8 +9348,8 @@
|
|
|
9222
9348
|
},
|
|
9223
9349
|
"post": {
|
|
9224
9350
|
"operationId": "pushI18nKeys",
|
|
9225
|
-
"summary": "Push
|
|
9226
|
-
"description": "Add NEW keys to a profile. Insert-only — existing keys are left untouched
|
|
9351
|
+
"summary": "Push i18n keys (insert-only, or `force` to overwrite)",
|
|
9352
|
+
"description": "Add NEW keys to a profile. Insert-only by default — existing keys are left untouched and reported back as `skipped`.\n\nPass `force: true` to overwrite the existing ones in bulk with the submitted values: they come back as `updated` instead of `skipped`. Without `force` the only overwrite paths are `updateI18nKey` (one key) and the devtools-only `upsertI18nKeys`.\n\n**Use case:** Seed newly-extracted keys without clobbering translations already in the profile — or re-push a whole source-language file with `force` after the copy changed.",
|
|
9227
9353
|
"tags": [
|
|
9228
9354
|
"Keys"
|
|
9229
9355
|
],
|
|
@@ -9253,7 +9379,7 @@
|
|
|
9253
9379
|
},
|
|
9254
9380
|
"responses": {
|
|
9255
9381
|
"201": {
|
|
9256
|
-
"description": "Push
|
|
9382
|
+
"description": "Push i18n keys (insert-only, or `force` to overwrite)",
|
|
9257
9383
|
"content": {
|
|
9258
9384
|
"application/json": {
|
|
9259
9385
|
"schema": {
|
|
@@ -9264,8 +9390,10 @@
|
|
|
9264
9390
|
"checkout.cta"
|
|
9265
9391
|
],
|
|
9266
9392
|
"skipped": [],
|
|
9393
|
+
"updated": [],
|
|
9267
9394
|
"pushed_count": 1,
|
|
9268
|
-
"skipped_count": 0
|
|
9395
|
+
"skipped_count": 0,
|
|
9396
|
+
"updated_count": 0
|
|
9269
9397
|
}
|
|
9270
9398
|
}
|
|
9271
9399
|
}
|
|
@@ -9340,8 +9468,7 @@
|
|
|
9340
9468
|
"$ref": "#/components/schemas/UpsertI18nKeysResponse"
|
|
9341
9469
|
},
|
|
9342
9470
|
"example": {
|
|
9343
|
-
"upserted": 1
|
|
9344
|
-
"chunk": "default"
|
|
9471
|
+
"upserted": 1
|
|
9345
9472
|
}
|
|
9346
9473
|
}
|
|
9347
9474
|
}
|
|
@@ -10010,7 +10137,7 @@
|
|
|
10010
10137
|
"post": {
|
|
10011
10138
|
"operationId": "publishI18nProfile",
|
|
10012
10139
|
"summary": "Publish a profile live",
|
|
10013
|
-
"description": "Publish a profile to the CDN — rebuild its KV snapshot + purge the edge. Publishing is PROFILE-WIDE: the whole profile is snapshotted into one KV blob, so the
|
|
10140
|
+
"description": "Publish a profile to the CDN — rebuild its KV snapshot + purge the edge. Publishing is PROFILE-WIDE: the whole profile is snapshotted into one KV blob, so the body takes no options.\n\n**Use case:** Ship the latest translations live after pushing/updating keys.",
|
|
10014
10141
|
"tags": [
|
|
10015
10142
|
"Profiles"
|
|
10016
10143
|
],
|
|
@@ -10029,21 +10156,19 @@
|
|
|
10029
10156
|
}
|
|
10030
10157
|
],
|
|
10031
10158
|
"requestBody": {
|
|
10032
|
-
"required":
|
|
10159
|
+
"required": false,
|
|
10033
10160
|
"content": {
|
|
10034
10161
|
"application/json": {
|
|
10035
10162
|
"schema": {
|
|
10036
10163
|
"$ref": "#/components/schemas/PublishI18nProfileRequest"
|
|
10037
10164
|
},
|
|
10038
|
-
"example": {
|
|
10039
|
-
"chunk": "default"
|
|
10040
|
-
}
|
|
10165
|
+
"example": {}
|
|
10041
10166
|
}
|
|
10042
10167
|
}
|
|
10043
10168
|
},
|
|
10044
10169
|
"responses": {
|
|
10045
10170
|
"200": {
|
|
10046
|
-
"description": "Publish a profile
|
|
10171
|
+
"description": "Publish a profile",
|
|
10047
10172
|
"content": {
|
|
10048
10173
|
"application/json": {
|
|
10049
10174
|
"schema": {
|
|
@@ -12391,6 +12516,10 @@
|
|
|
12391
12516
|
"locked": {
|
|
12392
12517
|
"description": "If `true`, dashboard hides edit controls (e.g. the trailing public-floor entry).",
|
|
12393
12518
|
"type": "boolean"
|
|
12519
|
+
},
|
|
12520
|
+
"whitelist": {
|
|
12521
|
+
"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.",
|
|
12522
|
+
"type": "boolean"
|
|
12394
12523
|
}
|
|
12395
12524
|
},
|
|
12396
12525
|
"required": [
|
|
@@ -12926,6 +13055,10 @@
|
|
|
12926
13055
|
"locked": {
|
|
12927
13056
|
"description": "If `true`, dashboard hides edit controls (e.g. the trailing public-floor entry).",
|
|
12928
13057
|
"type": "boolean"
|
|
13058
|
+
},
|
|
13059
|
+
"whitelist": {
|
|
13060
|
+
"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.",
|
|
13061
|
+
"type": "boolean"
|
|
12929
13062
|
}
|
|
12930
13063
|
},
|
|
12931
13064
|
"required": [
|
|
@@ -13322,6 +13455,10 @@
|
|
|
13322
13455
|
"locked": {
|
|
13323
13456
|
"description": "If `true`, dashboard hides edit controls (e.g. the trailing public-floor entry).",
|
|
13324
13457
|
"type": "boolean"
|
|
13458
|
+
},
|
|
13459
|
+
"whitelist": {
|
|
13460
|
+
"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.",
|
|
13461
|
+
"type": "boolean"
|
|
13325
13462
|
}
|
|
13326
13463
|
},
|
|
13327
13464
|
"required": [
|
|
@@ -15588,7 +15725,24 @@
|
|
|
15588
15725
|
"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."
|
|
15589
15726
|
},
|
|
15590
15727
|
"value": {
|
|
15728
|
+
"type": "object",
|
|
15729
|
+
"additionalProperties": {},
|
|
15591
15730
|
"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."
|
|
15731
|
+
},
|
|
15732
|
+
"dev": {
|
|
15733
|
+
"type": "object",
|
|
15734
|
+
"additionalProperties": {},
|
|
15735
|
+
"description": "Seed the **dev** env's initial value (version 1), overriding `value` for dev. Published immediately. Must match `schema`."
|
|
15736
|
+
},
|
|
15737
|
+
"staging": {
|
|
15738
|
+
"type": "object",
|
|
15739
|
+
"additionalProperties": {},
|
|
15740
|
+
"description": "Seed the **staging** env's initial value (version 1), overriding `value` for staging. Published immediately. Must match `schema`."
|
|
15741
|
+
},
|
|
15742
|
+
"prod": {
|
|
15743
|
+
"type": "object",
|
|
15744
|
+
"additionalProperties": {},
|
|
15745
|
+
"description": "Seed the **prod** env's initial value (version 1), overriding `value` for prod. Published immediately. Must match `schema`."
|
|
15592
15746
|
}
|
|
15593
15747
|
},
|
|
15594
15748
|
"required": [
|
|
@@ -15596,7 +15750,7 @@
|
|
|
15596
15750
|
"schema"
|
|
15597
15751
|
],
|
|
15598
15752
|
"additionalProperties": false,
|
|
15599
|
-
"description": "Body for `POST /api/admin/configs`. `name` + `schema` required."
|
|
15753
|
+
"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`)."
|
|
15600
15754
|
},
|
|
15601
15755
|
"CreateConfigResponse": {
|
|
15602
15756
|
"type": "object",
|
|
@@ -15784,14 +15938,31 @@
|
|
|
15784
15938
|
"additionalProperties": {}
|
|
15785
15939
|
},
|
|
15786
15940
|
"value": {
|
|
15787
|
-
"
|
|
15941
|
+
"type": "object",
|
|
15942
|
+
"additionalProperties": {},
|
|
15943
|
+
"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."
|
|
15944
|
+
},
|
|
15945
|
+
"dev": {
|
|
15946
|
+
"type": "object",
|
|
15947
|
+
"additionalProperties": {},
|
|
15948
|
+
"description": "Publish a new version to the **dev** env only, immediately (no draft). Overrides `value` for dev. Must match the effective schema."
|
|
15949
|
+
},
|
|
15950
|
+
"staging": {
|
|
15951
|
+
"type": "object",
|
|
15952
|
+
"additionalProperties": {},
|
|
15953
|
+
"description": "Publish a new version to the **staging** env only, immediately (no draft). Overrides `value` for staging. Must match the effective schema."
|
|
15954
|
+
},
|
|
15955
|
+
"prod": {
|
|
15956
|
+
"type": "object",
|
|
15957
|
+
"additionalProperties": {},
|
|
15958
|
+
"description": "Publish a new version to the **prod** env only, immediately (no draft). Overrides `value` for prod. Must match the effective schema."
|
|
15788
15959
|
},
|
|
15789
15960
|
"folder": {
|
|
15790
15961
|
"$ref": "#/components/schemas/Folder"
|
|
15791
15962
|
}
|
|
15792
15963
|
},
|
|
15793
15964
|
"additionalProperties": false,
|
|
15794
|
-
"description": "Body for `PATCH /api/admin/configs/{id}`. Partial — only supplied fields change. `value` republishes on every env."
|
|
15965
|
+
"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."
|
|
15795
15966
|
},
|
|
15796
15967
|
"UpdateConfigResponse": {
|
|
15797
15968
|
"type": "object",
|
|
@@ -15822,6 +15993,8 @@
|
|
|
15822
15993
|
"$ref": "#/components/schemas/Env"
|
|
15823
15994
|
},
|
|
15824
15995
|
"value": {
|
|
15996
|
+
"type": "object",
|
|
15997
|
+
"additionalProperties": {},
|
|
15825
15998
|
"description": "Draft value to stage on `env`. Validated against the config's current schema."
|
|
15826
15999
|
}
|
|
15827
16000
|
},
|
|
@@ -18135,6 +18308,17 @@
|
|
|
18135
18308
|
],
|
|
18136
18309
|
"description": "Desired direction of movement. `higher_better` (default), `lower_better`, or `neutral` (guardrail)."
|
|
18137
18310
|
},
|
|
18311
|
+
"MetricDisplayUnit": {
|
|
18312
|
+
"description": "Display unit (e.g. `ms`, `%`, `$`), or `null` when unitless.",
|
|
18313
|
+
"anyOf": [
|
|
18314
|
+
{
|
|
18315
|
+
"type": "string"
|
|
18316
|
+
},
|
|
18317
|
+
{
|
|
18318
|
+
"type": "null"
|
|
18319
|
+
}
|
|
18320
|
+
]
|
|
18321
|
+
},
|
|
18138
18322
|
"CreateMetricWithQuery": {
|
|
18139
18323
|
"type": "object",
|
|
18140
18324
|
"properties": {
|
|
@@ -18158,6 +18342,9 @@
|
|
|
18158
18342
|
},
|
|
18159
18343
|
"direction": {
|
|
18160
18344
|
"$ref": "#/components/schemas/MetricDirection"
|
|
18345
|
+
},
|
|
18346
|
+
"unit": {
|
|
18347
|
+
"$ref": "#/components/schemas/MetricDisplayUnit"
|
|
18161
18348
|
}
|
|
18162
18349
|
},
|
|
18163
18350
|
"required": [
|
|
@@ -18191,6 +18378,9 @@
|
|
|
18191
18378
|
},
|
|
18192
18379
|
"direction": {
|
|
18193
18380
|
"$ref": "#/components/schemas/MetricDirection"
|
|
18381
|
+
},
|
|
18382
|
+
"unit": {
|
|
18383
|
+
"$ref": "#/components/schemas/MetricDisplayUnit"
|
|
18194
18384
|
}
|
|
18195
18385
|
},
|
|
18196
18386
|
"required": [
|
|
@@ -18417,6 +18607,9 @@
|
|
|
18417
18607
|
},
|
|
18418
18608
|
"direction": {
|
|
18419
18609
|
"$ref": "#/components/schemas/MetricDirection"
|
|
18610
|
+
},
|
|
18611
|
+
"unit": {
|
|
18612
|
+
"$ref": "#/components/schemas/MetricDisplayUnit"
|
|
18420
18613
|
}
|
|
18421
18614
|
},
|
|
18422
18615
|
"required": [
|
|
@@ -18445,6 +18638,9 @@
|
|
|
18445
18638
|
},
|
|
18446
18639
|
"direction": {
|
|
18447
18640
|
"$ref": "#/components/schemas/MetricDirection"
|
|
18641
|
+
},
|
|
18642
|
+
"unit": {
|
|
18643
|
+
"$ref": "#/components/schemas/MetricDisplayUnit"
|
|
18448
18644
|
}
|
|
18449
18645
|
},
|
|
18450
18646
|
"required": [
|
|
@@ -18470,10 +18666,13 @@
|
|
|
18470
18666
|
},
|
|
18471
18667
|
"direction": {
|
|
18472
18668
|
"$ref": "#/components/schemas/MetricDirection"
|
|
18669
|
+
},
|
|
18670
|
+
"unit": {
|
|
18671
|
+
"$ref": "#/components/schemas/MetricDisplayUnit"
|
|
18473
18672
|
}
|
|
18474
18673
|
},
|
|
18475
18674
|
"additionalProperties": false,
|
|
18476
|
-
"description": "Update-metric variant that leaves the query untouched (metadata-only edit — folder, event, winsorisation, default minimum effect of interest, direction)."
|
|
18675
|
+
"description": "Update-metric variant that leaves the query untouched (metadata-only edit — folder, event, winsorisation, default minimum effect of interest, direction, display unit)."
|
|
18477
18676
|
},
|
|
18478
18677
|
"UpdateMetricRequest": {
|
|
18479
18678
|
"oneOf": [
|
|
@@ -19955,6 +20154,27 @@
|
|
|
19955
20154
|
"additionalProperties": false,
|
|
19956
20155
|
"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`)."
|
|
19957
20156
|
},
|
|
20157
|
+
"OpsRunAction": {
|
|
20158
|
+
"type": "string",
|
|
20159
|
+
"enum": [
|
|
20160
|
+
"link_pr",
|
|
20161
|
+
"notify",
|
|
20162
|
+
"status",
|
|
20163
|
+
"superseded"
|
|
20164
|
+
],
|
|
20165
|
+
"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."
|
|
20166
|
+
},
|
|
20167
|
+
"OpsRunActionOrNull": {
|
|
20168
|
+
"anyOf": [
|
|
20169
|
+
{
|
|
20170
|
+
"$ref": "#/components/schemas/OpsRunAction"
|
|
20171
|
+
},
|
|
20172
|
+
{
|
|
20173
|
+
"type": "null"
|
|
20174
|
+
}
|
|
20175
|
+
],
|
|
20176
|
+
"description": "Which final action closed the run, or `null` while it is open (or a non-run record)."
|
|
20177
|
+
},
|
|
19958
20178
|
"OpsRun": {
|
|
19959
20179
|
"type": "object",
|
|
19960
20180
|
"properties": {
|
|
@@ -20006,11 +20226,7 @@
|
|
|
20006
20226
|
],
|
|
20007
20227
|
"description": "The agent-run session id recorded on the ack (dashboard deep-links to the run page), or `null`."
|
|
20008
20228
|
},
|
|
20009
|
-
"
|
|
20010
|
-
"type": "string",
|
|
20011
|
-
"description": "ISO-8601 timestamp the run started (the ack time)."
|
|
20012
|
-
},
|
|
20013
|
-
"completedAt": {
|
|
20229
|
+
"sessionUrl": {
|
|
20014
20230
|
"anyOf": [
|
|
20015
20231
|
{
|
|
20016
20232
|
"type": "string"
|
|
@@ -20019,24 +20235,25 @@
|
|
|
20019
20235
|
"type": "null"
|
|
20020
20236
|
}
|
|
20021
20237
|
],
|
|
20022
|
-
"description": "
|
|
20238
|
+
"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."
|
|
20023
20239
|
},
|
|
20024
|
-
"
|
|
20240
|
+
"startedAt": {
|
|
20241
|
+
"type": "string",
|
|
20242
|
+
"description": "ISO-8601 timestamp the run started (the ack time)."
|
|
20243
|
+
},
|
|
20244
|
+
"completedAt": {
|
|
20025
20245
|
"anyOf": [
|
|
20026
20246
|
{
|
|
20027
|
-
"type": "string"
|
|
20028
|
-
"enum": [
|
|
20029
|
-
"link_pr",
|
|
20030
|
-
"notify",
|
|
20031
|
-
"status",
|
|
20032
|
-
"superseded"
|
|
20033
|
-
]
|
|
20247
|
+
"type": "string"
|
|
20034
20248
|
},
|
|
20035
20249
|
{
|
|
20036
20250
|
"type": "null"
|
|
20037
20251
|
}
|
|
20038
20252
|
],
|
|
20039
|
-
"description": "
|
|
20253
|
+
"description": "ISO-8601 timestamp the run closed, or `null` while still open."
|
|
20254
|
+
},
|
|
20255
|
+
"completedAction": {
|
|
20256
|
+
"$ref": "#/components/schemas/OpsRunActionOrNull"
|
|
20040
20257
|
},
|
|
20041
20258
|
"prNumber": {
|
|
20042
20259
|
"anyOf": [
|
|
@@ -20067,6 +20284,7 @@
|
|
|
20067
20284
|
"connectorId",
|
|
20068
20285
|
"ackedBy",
|
|
20069
20286
|
"sessionId",
|
|
20287
|
+
"sessionUrl",
|
|
20070
20288
|
"startedAt",
|
|
20071
20289
|
"completedAt",
|
|
20072
20290
|
"completedAction",
|
|
@@ -20351,6 +20569,42 @@
|
|
|
20351
20569
|
],
|
|
20352
20570
|
"description": "Initial triage priority, or `null`."
|
|
20353
20571
|
},
|
|
20572
|
+
"status": {
|
|
20573
|
+
"anyOf": [
|
|
20574
|
+
{
|
|
20575
|
+
"$ref": "#/components/schemas/OpsItemStatus"
|
|
20576
|
+
}
|
|
20577
|
+
],
|
|
20578
|
+
"description": "Initial lifecycle status; defaults to `open` when omitted."
|
|
20579
|
+
},
|
|
20580
|
+
"assigneeId": {
|
|
20581
|
+
"anyOf": [
|
|
20582
|
+
{
|
|
20583
|
+
"type": "string"
|
|
20584
|
+
},
|
|
20585
|
+
{
|
|
20586
|
+
"type": "null"
|
|
20587
|
+
}
|
|
20588
|
+
],
|
|
20589
|
+
"description": "The `users.id` of the person to assign as owner at creation, or `null`."
|
|
20590
|
+
},
|
|
20591
|
+
"subscribers": {
|
|
20592
|
+
"type": "array",
|
|
20593
|
+
"items": {
|
|
20594
|
+
"type": "string",
|
|
20595
|
+
"format": "email"
|
|
20596
|
+
},
|
|
20597
|
+
"default": [],
|
|
20598
|
+
"description": "Emails of teammates to subscribe to this item's Slack pings at creation."
|
|
20599
|
+
},
|
|
20600
|
+
"tags": {
|
|
20601
|
+
"type": "array",
|
|
20602
|
+
"items": {
|
|
20603
|
+
"type": "string"
|
|
20604
|
+
},
|
|
20605
|
+
"default": [],
|
|
20606
|
+
"description": "Tag names to attach at creation (get-or-created by name, deduped case-insensitively)."
|
|
20607
|
+
},
|
|
20354
20608
|
"reporterEmail": {
|
|
20355
20609
|
"anyOf": [
|
|
20356
20610
|
{
|
|
@@ -20470,6 +20724,42 @@
|
|
|
20470
20724
|
],
|
|
20471
20725
|
"description": "Initial triage priority, or `null`."
|
|
20472
20726
|
},
|
|
20727
|
+
"status": {
|
|
20728
|
+
"anyOf": [
|
|
20729
|
+
{
|
|
20730
|
+
"$ref": "#/components/schemas/OpsItemStatus"
|
|
20731
|
+
}
|
|
20732
|
+
],
|
|
20733
|
+
"description": "Initial lifecycle status; defaults to `open` when omitted."
|
|
20734
|
+
},
|
|
20735
|
+
"assigneeId": {
|
|
20736
|
+
"anyOf": [
|
|
20737
|
+
{
|
|
20738
|
+
"type": "string"
|
|
20739
|
+
},
|
|
20740
|
+
{
|
|
20741
|
+
"type": "null"
|
|
20742
|
+
}
|
|
20743
|
+
],
|
|
20744
|
+
"description": "The `users.id` of the person to assign as owner at creation, or `null`."
|
|
20745
|
+
},
|
|
20746
|
+
"subscribers": {
|
|
20747
|
+
"type": "array",
|
|
20748
|
+
"items": {
|
|
20749
|
+
"type": "string",
|
|
20750
|
+
"format": "email"
|
|
20751
|
+
},
|
|
20752
|
+
"default": [],
|
|
20753
|
+
"description": "Emails of teammates to subscribe to this item's Slack pings at creation."
|
|
20754
|
+
},
|
|
20755
|
+
"tags": {
|
|
20756
|
+
"type": "array",
|
|
20757
|
+
"items": {
|
|
20758
|
+
"type": "string"
|
|
20759
|
+
},
|
|
20760
|
+
"default": [],
|
|
20761
|
+
"description": "Tag names to attach at creation (get-or-created by name, deduped case-insensitively)."
|
|
20762
|
+
},
|
|
20473
20763
|
"reporterEmail": {
|
|
20474
20764
|
"anyOf": [
|
|
20475
20765
|
{
|
|
@@ -21431,7 +21721,7 @@
|
|
|
21431
21721
|
],
|
|
21432
21722
|
"description": "The agent-run session id, or `null`."
|
|
21433
21723
|
},
|
|
21434
|
-
"
|
|
21724
|
+
"sessionUrl": {
|
|
21435
21725
|
"anyOf": [
|
|
21436
21726
|
{
|
|
21437
21727
|
"type": "string"
|
|
@@ -21440,24 +21730,21 @@
|
|
|
21440
21730
|
"type": "null"
|
|
21441
21731
|
}
|
|
21442
21732
|
],
|
|
21443
|
-
"description": "
|
|
21733
|
+
"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."
|
|
21444
21734
|
},
|
|
21445
|
-
"
|
|
21735
|
+
"ackedBy": {
|
|
21446
21736
|
"anyOf": [
|
|
21447
21737
|
{
|
|
21448
|
-
"type": "string"
|
|
21449
|
-
"enum": [
|
|
21450
|
-
"link_pr",
|
|
21451
|
-
"notify",
|
|
21452
|
-
"status",
|
|
21453
|
-
"superseded"
|
|
21454
|
-
]
|
|
21738
|
+
"type": "string"
|
|
21455
21739
|
},
|
|
21456
21740
|
{
|
|
21457
21741
|
"type": "null"
|
|
21458
21742
|
}
|
|
21459
21743
|
],
|
|
21460
|
-
"description": "
|
|
21744
|
+
"description": "Email of the human who acked (run records for a human ack), or `null`."
|
|
21745
|
+
},
|
|
21746
|
+
"completedAction": {
|
|
21747
|
+
"$ref": "#/components/schemas/OpsRunActionOrNull"
|
|
21461
21748
|
},
|
|
21462
21749
|
"createdAt": {
|
|
21463
21750
|
"type": "string",
|
|
@@ -21489,6 +21776,7 @@
|
|
|
21489
21776
|
"startedAt",
|
|
21490
21777
|
"completedAt",
|
|
21491
21778
|
"sessionId",
|
|
21779
|
+
"sessionUrl",
|
|
21492
21780
|
"ackedBy",
|
|
21493
21781
|
"completedAction",
|
|
21494
21782
|
"createdAt",
|
|
@@ -21639,6 +21927,119 @@
|
|
|
21639
21927
|
"additionalProperties": false,
|
|
21640
21928
|
"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."
|
|
21641
21929
|
},
|
|
21930
|
+
"UpdateOpsInvestigationRequest": {
|
|
21931
|
+
"type": "object",
|
|
21932
|
+
"properties": {
|
|
21933
|
+
"kind": {
|
|
21934
|
+
"type": "string",
|
|
21935
|
+
"enum": [
|
|
21936
|
+
"investigated",
|
|
21937
|
+
"detected",
|
|
21938
|
+
"question",
|
|
21939
|
+
"ready_for_qa",
|
|
21940
|
+
"working",
|
|
21941
|
+
"note"
|
|
21942
|
+
],
|
|
21943
|
+
"description": "Reclassify the record's lifecycle stage (e.g. flip a `working` run into `investigated` once findings land)."
|
|
21944
|
+
},
|
|
21945
|
+
"summary": {
|
|
21946
|
+
"type": "string",
|
|
21947
|
+
"maxLength": 2000,
|
|
21948
|
+
"description": "One-line summary of the record."
|
|
21949
|
+
},
|
|
21950
|
+
"findings": {
|
|
21951
|
+
"type": "string",
|
|
21952
|
+
"maxLength": 50000,
|
|
21953
|
+
"description": "The full findings write-up (markdown)."
|
|
21954
|
+
},
|
|
21955
|
+
"question": {
|
|
21956
|
+
"type": "string",
|
|
21957
|
+
"maxLength": 10000,
|
|
21958
|
+
"description": "A blocking question for the team (markdown)."
|
|
21959
|
+
},
|
|
21960
|
+
"qaNotes": {
|
|
21961
|
+
"type": "string",
|
|
21962
|
+
"maxLength": 50000,
|
|
21963
|
+
"description": "How to verify the fix — QA notes (markdown)."
|
|
21964
|
+
},
|
|
21965
|
+
"model": {
|
|
21966
|
+
"type": "string",
|
|
21967
|
+
"maxLength": 200,
|
|
21968
|
+
"description": "The model the agent ran on."
|
|
21969
|
+
},
|
|
21970
|
+
"prNumber": {
|
|
21971
|
+
"type": "integer",
|
|
21972
|
+
"description": "A PR the record references."
|
|
21973
|
+
},
|
|
21974
|
+
"prUrl": {
|
|
21975
|
+
"type": "string",
|
|
21976
|
+
"format": "uri",
|
|
21977
|
+
"maxLength": 2000,
|
|
21978
|
+
"description": "HTML URL of that PR."
|
|
21979
|
+
},
|
|
21980
|
+
"sources": {
|
|
21981
|
+
"type": "array",
|
|
21982
|
+
"maxItems": 200,
|
|
21983
|
+
"items": {
|
|
21984
|
+
"type": "object",
|
|
21985
|
+
"properties": {
|
|
21986
|
+
"path": {
|
|
21987
|
+
"type": "string",
|
|
21988
|
+
"description": "Repo-relative file path inspected."
|
|
21989
|
+
},
|
|
21990
|
+
"url": {
|
|
21991
|
+
"type": "string",
|
|
21992
|
+
"description": "External link consulted."
|
|
21993
|
+
},
|
|
21994
|
+
"label": {
|
|
21995
|
+
"type": "string",
|
|
21996
|
+
"description": "Human-readable label for the source."
|
|
21997
|
+
}
|
|
21998
|
+
},
|
|
21999
|
+
"additionalProperties": false,
|
|
22000
|
+
"description": "One file/link inspected while producing the record."
|
|
22001
|
+
},
|
|
22002
|
+
"description": "The files/links inspected."
|
|
22003
|
+
},
|
|
22004
|
+
"confidence": {
|
|
22005
|
+
"type": "string",
|
|
22006
|
+
"enum": [
|
|
22007
|
+
"low",
|
|
22008
|
+
"medium",
|
|
22009
|
+
"high"
|
|
22010
|
+
],
|
|
22011
|
+
"description": "Self-reported confidence in the record."
|
|
22012
|
+
},
|
|
22013
|
+
"tokensUsed": {
|
|
22014
|
+
"type": "integer",
|
|
22015
|
+
"description": "Tokens the run consumed."
|
|
22016
|
+
},
|
|
22017
|
+
"durationMs": {
|
|
22018
|
+
"type": "integer",
|
|
22019
|
+
"description": "Run duration in milliseconds."
|
|
22020
|
+
},
|
|
22021
|
+
"visibility": {
|
|
22022
|
+
"type": "string",
|
|
22023
|
+
"enum": [
|
|
22024
|
+
"draft",
|
|
22025
|
+
"published"
|
|
22026
|
+
],
|
|
22027
|
+
"description": "Record visibility. `draft` keeps it out of the panel; `published` surfaces it."
|
|
22028
|
+
},
|
|
22029
|
+
"completedAt": {
|
|
22030
|
+
"type": "string",
|
|
22031
|
+
"description": "ISO-8601 timestamp the work finished. Set it (or flip `kind` off `working`) to mark a run record done."
|
|
22032
|
+
},
|
|
22033
|
+
"sessionId": {
|
|
22034
|
+
"type": "string",
|
|
22035
|
+
"maxLength": 300,
|
|
22036
|
+
"description": "The agent-run session id, so the dashboard can deep-link to the run."
|
|
22037
|
+
}
|
|
22038
|
+
},
|
|
22039
|
+
"additionalProperties": false,
|
|
22040
|
+
"minProperties": 1,
|
|
22041
|
+
"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."
|
|
22042
|
+
},
|
|
21642
22043
|
"OpsAgentProfile": {
|
|
21643
22044
|
"type": "object",
|
|
21644
22045
|
"properties": {
|
|
@@ -23209,21 +23610,6 @@
|
|
|
23209
23610
|
}
|
|
23210
23611
|
]
|
|
23211
23612
|
},
|
|
23212
|
-
"chunkId": {
|
|
23213
|
-
"description": "Owning chunk (authoring grouping) id.",
|
|
23214
|
-
"type": "string"
|
|
23215
|
-
},
|
|
23216
|
-
"chunkName": {
|
|
23217
|
-
"description": "Name of the owning chunk (authoring grouping), or `null` when it cannot be resolved.",
|
|
23218
|
-
"anyOf": [
|
|
23219
|
-
{
|
|
23220
|
-
"type": "string"
|
|
23221
|
-
},
|
|
23222
|
-
{
|
|
23223
|
-
"type": "null"
|
|
23224
|
-
}
|
|
23225
|
-
]
|
|
23226
|
-
},
|
|
23227
23613
|
"updatedAt": {
|
|
23228
23614
|
"description": "ISO-8601 timestamp of the last edit.",
|
|
23229
23615
|
"type": "string"
|
|
@@ -23241,8 +23627,6 @@
|
|
|
23241
23627
|
"variables",
|
|
23242
23628
|
"profileId",
|
|
23243
23629
|
"profileName",
|
|
23244
|
-
"chunkId",
|
|
23245
|
-
"chunkName",
|
|
23246
23630
|
"updatedAt",
|
|
23247
23631
|
"updatedBy"
|
|
23248
23632
|
],
|
|
@@ -23271,13 +23655,6 @@
|
|
|
23271
23655
|
"format": "uuid",
|
|
23272
23656
|
"description": "Target profile id to upsert keys into."
|
|
23273
23657
|
},
|
|
23274
|
-
"chunk": {
|
|
23275
|
-
"description": "Logical grouping the keys are filed under. Defaults to `default`.",
|
|
23276
|
-
"type": "string",
|
|
23277
|
-
"minLength": 1,
|
|
23278
|
-
"maxLength": 64,
|
|
23279
|
-
"default": "default"
|
|
23280
|
-
},
|
|
23281
23658
|
"keys": {
|
|
23282
23659
|
"type": "array",
|
|
23283
23660
|
"minItems": 1,
|
|
@@ -23332,15 +23709,10 @@
|
|
|
23332
23709
|
"upserted": {
|
|
23333
23710
|
"type": "number",
|
|
23334
23711
|
"description": "Number of keys written (inserted or overwritten)."
|
|
23335
|
-
},
|
|
23336
|
-
"chunk": {
|
|
23337
|
-
"type": "string",
|
|
23338
|
-
"description": "The chunk the keys were filed under."
|
|
23339
23712
|
}
|
|
23340
23713
|
},
|
|
23341
23714
|
"required": [
|
|
23342
|
-
"upserted"
|
|
23343
|
-
"chunk"
|
|
23715
|
+
"upserted"
|
|
23344
23716
|
],
|
|
23345
23717
|
"additionalProperties": false,
|
|
23346
23718
|
"description": "Result of a bulk key upsert. The affected profile's KV snapshot is rebuilt (and the CDN purged) before this returns."
|
|
@@ -23353,13 +23725,6 @@
|
|
|
23353
23725
|
"format": "uuid",
|
|
23354
23726
|
"description": "Target profile id to add keys to."
|
|
23355
23727
|
},
|
|
23356
|
-
"chunk": {
|
|
23357
|
-
"description": "Logical grouping the new keys are filed under. Defaults to `default`.",
|
|
23358
|
-
"type": "string",
|
|
23359
|
-
"minLength": 1,
|
|
23360
|
-
"maxLength": 64,
|
|
23361
|
-
"default": "default"
|
|
23362
|
-
},
|
|
23363
23728
|
"keys": {
|
|
23364
23729
|
"type": "array",
|
|
23365
23730
|
"minItems": 1,
|
|
@@ -23398,7 +23763,12 @@
|
|
|
23398
23763
|
],
|
|
23399
23764
|
"additionalProperties": false
|
|
23400
23765
|
},
|
|
23401
|
-
"description": "Keys to add. Insert-only — existing keys are reported back as `skipped
|
|
23766
|
+
"description": "Keys to add. Insert-only by default — existing keys are reported back as `skipped` (set `force` to overwrite them instead)."
|
|
23767
|
+
},
|
|
23768
|
+
"force": {
|
|
23769
|
+
"type": "boolean",
|
|
23770
|
+
"default": false,
|
|
23771
|
+
"description": "Overwrite keys that already exist with the submitted value instead of skipping them. Overwritten keys come back as `updated`. Off by default so a routine push can never clobber live translations."
|
|
23402
23772
|
}
|
|
23403
23773
|
},
|
|
23404
23774
|
"required": [
|
|
@@ -23406,7 +23776,7 @@
|
|
|
23406
23776
|
"keys"
|
|
23407
23777
|
],
|
|
23408
23778
|
"additionalProperties": false,
|
|
23409
|
-
"description": "Body for `POST /api/admin/i18n/keys`. Insert-only: keys that already exist are never overwritten — use `PUT /keys/{id}` to change
|
|
23779
|
+
"description": "Body for `POST /api/admin/i18n/keys`. Insert-only by default: keys that already exist are never overwritten — pass `force: true` to overwrite them in bulk, or use `PUT /keys/{id}` to change one value."
|
|
23410
23780
|
},
|
|
23411
23781
|
"PushI18nKeysResponse": {
|
|
23412
23782
|
"type": "object",
|
|
@@ -23423,7 +23793,14 @@
|
|
|
23423
23793
|
"items": {
|
|
23424
23794
|
"type": "string"
|
|
23425
23795
|
},
|
|
23426
|
-
"description": "Key names that already existed and were left untouched."
|
|
23796
|
+
"description": "Key names that already existed and were left untouched. Always empty when `force` was set — those key names come back under `updated` instead."
|
|
23797
|
+
},
|
|
23798
|
+
"updated": {
|
|
23799
|
+
"type": "array",
|
|
23800
|
+
"items": {
|
|
23801
|
+
"type": "string"
|
|
23802
|
+
},
|
|
23803
|
+
"description": "Key names that already existed and were overwritten with the submitted value. Only ever non-empty when the push set `force`."
|
|
23427
23804
|
},
|
|
23428
23805
|
"pushed_count": {
|
|
23429
23806
|
"type": "number",
|
|
@@ -23433,19 +23810,21 @@
|
|
|
23433
23810
|
"type": "number",
|
|
23434
23811
|
"description": "Number of keys skipped (== `skipped.length`)."
|
|
23435
23812
|
},
|
|
23436
|
-
"
|
|
23437
|
-
"
|
|
23438
|
-
"
|
|
23813
|
+
"updated_count": {
|
|
23814
|
+
"type": "number",
|
|
23815
|
+
"description": "Number of existing keys overwritten (== `updated.length`)."
|
|
23439
23816
|
}
|
|
23440
23817
|
},
|
|
23441
23818
|
"required": [
|
|
23442
23819
|
"added",
|
|
23443
23820
|
"skipped",
|
|
23821
|
+
"updated",
|
|
23444
23822
|
"pushed_count",
|
|
23445
|
-
"skipped_count"
|
|
23823
|
+
"skipped_count",
|
|
23824
|
+
"updated_count"
|
|
23446
23825
|
],
|
|
23447
23826
|
"additionalProperties": false,
|
|
23448
|
-
"description": "Result of
|
|
23827
|
+
"description": "Result of a key push — what was inserted, what was left alone, and (with `force`) what was overwritten."
|
|
23449
23828
|
},
|
|
23450
23829
|
"UpdateI18nKeyRequest": {
|
|
23451
23830
|
"type": "object",
|
|
@@ -23719,14 +24098,9 @@
|
|
|
23719
24098
|
},
|
|
23720
24099
|
"PublishI18nProfileRequest": {
|
|
23721
24100
|
"type": "object",
|
|
23722
|
-
"properties": {
|
|
23723
|
-
"chunk": {
|
|
23724
|
-
"description": "Optional chunk label to stamp on the audit log. Publishing is profile-wide regardless — the whole profile is snapshotted into one KV blob.",
|
|
23725
|
-
"type": "string"
|
|
23726
|
-
}
|
|
23727
|
-
},
|
|
24101
|
+
"properties": {},
|
|
23728
24102
|
"additionalProperties": false,
|
|
23729
|
-
"description": "Body for `POST /api/admin/i18n/profiles/{profileId}/publish`.
|
|
24103
|
+
"description": "Body for `POST /api/admin/i18n/profiles/{profileId}/publish`. Publishing is profile-wide — the whole profile is snapshotted into one KV blob — so the body takes no options."
|
|
23730
24104
|
},
|
|
23731
24105
|
"PublishI18nProfileResponse": {
|
|
23732
24106
|
"type": "object",
|
|
@@ -23740,17 +24114,6 @@
|
|
|
23740
24114
|
"type": "string",
|
|
23741
24115
|
"description": "Profile that was published."
|
|
23742
24116
|
},
|
|
23743
|
-
"chunk": {
|
|
23744
|
-
"anyOf": [
|
|
23745
|
-
{
|
|
23746
|
-
"type": "string"
|
|
23747
|
-
},
|
|
23748
|
-
{
|
|
23749
|
-
"type": "null"
|
|
23750
|
-
}
|
|
23751
|
-
],
|
|
23752
|
-
"description": "Audit chunk label, or `null` when none was given."
|
|
23753
|
-
},
|
|
23754
24117
|
"published_at": {
|
|
23755
24118
|
"type": "string",
|
|
23756
24119
|
"description": "ISO-8601 timestamp of the publish."
|
|
@@ -23788,7 +24151,6 @@
|
|
|
23788
24151
|
"required": [
|
|
23789
24152
|
"ok",
|
|
23790
24153
|
"profile_id",
|
|
23791
|
-
"chunk",
|
|
23792
24154
|
"published_at",
|
|
23793
24155
|
"version",
|
|
23794
24156
|
"key_count",
|