@shipeasy/openapi 3.2.0 → 3.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.
Files changed (40) hide show
  1. package/README.md +1 -1
  2. package/dist/{chunk-RTN572TI.js → chunk-JJA7XEPU.js} +91 -1
  3. package/dist/chunk-JJA7XEPU.js.map +1 -0
  4. package/dist/{chunk-DW33MG4B.js → chunk-Z3CY5Y44.js} +514 -126
  5. package/dist/chunk-Z3CY5Y44.js.map +1 -0
  6. package/dist/{client-BPVn4hMC.d.ts → client-CkRbr8I2.d.ts} +1544 -212
  7. package/dist/client.d.ts +1 -1
  8. package/dist/client.js +23 -1
  9. package/dist/custom.d.ts +5 -5
  10. package/dist/custom.js +128 -84
  11. package/dist/custom.js.map +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +24 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/schemas.d.ts +1935 -963
  16. package/dist/schemas.js +141 -1
  17. package/openapi-sdk.json +31 -9
  18. package/openapi.json +10449 -8118
  19. package/openapi.yaml +2274 -634
  20. package/package.json +1 -1
  21. package/spec/components/schemas/alert-rules.yaml +434 -10
  22. package/spec/components/schemas/alerts.yaml +9 -7
  23. package/spec/components/schemas/common.yaml +2 -2
  24. package/spec/components/schemas/connectors.yaml +69 -6
  25. package/spec/components/schemas/events.yaml +20 -9
  26. package/spec/components/schemas/keys.yaml +39 -0
  27. package/spec/components/schemas/metrics.yaml +131 -251
  28. package/spec/components/schemas/ops.yaml +471 -29
  29. package/spec/components/schemas/projects.yaml +18 -0
  30. package/spec/components/schemas/search.yaml +1 -0
  31. package/spec/components/schemas/tags.yaml +91 -0
  32. package/spec/openapi.yaml +56 -0
  33. package/spec/paths/alerts.yaml +5 -3
  34. package/spec/paths/i18n.yaml +2 -1
  35. package/spec/paths/keys.yaml +79 -0
  36. package/spec/paths/metrics.yaml +26 -17
  37. package/spec/paths/ops.yaml +514 -11
  38. package/spec/paths/tags.yaml +270 -0
  39. package/dist/chunk-DW33MG4B.js.map +0 -1
  40. package/dist/chunk-RTN572TI.js.map +0 -1
@@ -204,7 +204,7 @@ CreateCursorTriggerRequest:
204
204
  opsKey:
205
205
  type: string
206
206
  minLength: 1
207
- description: Restricted Shipeasy ops key, injected into the run as `SHIPEASY_CLI_TOKEN` via the launch envVars (secret). Encrypted; never returned.
207
+ description: Restricted Shipeasy ops key (secret). Sent as the Bearer for the Shipeasy MCP server handed to each run inline — never in the prompt text or the run env. Encrypted; never returned.
208
208
  enabled:
209
209
  type: boolean
210
210
  default: true
@@ -308,33 +308,82 @@ ClaudeTriggerConfig:
308
308
  - routineId
309
309
  additionalProperties: false
310
310
  description: Non-secret config for a Claude trigger.
311
+ CursorTriggerRepo:
312
+ type: object
313
+ properties:
314
+ url:
315
+ type: string
316
+ format: uri
317
+ description: "Repo the cloud agent runs against, e.g. `https://github.com/owner/repo`."
318
+ startingRef:
319
+ type: string
320
+ minLength: 1
321
+ description: "Optional branch this repo's runs start from. Omit for the repo's default branch."
322
+ required:
323
+ - url
324
+ additionalProperties: false
325
+ description: One repo a trigger runs against, with the branch its runs start from.
311
326
  CursorTriggerConfig:
312
327
  type: object
313
328
  properties:
314
329
  repoUrl:
315
330
  type: string
316
331
  format: uri
317
- description: Repo the cloud agent runs against, e.g. `https://github.com/owner/repo`. Idempotency key for the connector.
332
+ description: "**First** repo the cloud agent runs against, e.g. `https://github.com/owner/repo`. Idempotency key for the connector, and always a mirror of `repos[0].url` when `repos` is supplied."
318
333
  startingRef:
319
334
  type: string
320
335
  minLength: 1
321
- description: Optional git ref the run starts from.
336
+ description: Optional git ref the run starts from. Mirrors `repos[0].startingRef`. Pinned onto the Cursor agent at creation, so changing it provisions a replacement agent.
337
+ repos:
338
+ type: array
339
+ minItems: 1
340
+ items:
341
+ $ref: "#/CursorTriggerRepo"
342
+ description: "Every repo this trigger runs against, each with its own starting branch — Cursor launches ONE agent across the whole set. Omit for a single-repo trigger, which is then described by `repoUrl`/`startingRef` alone; when supplied, the first entry must match them. Changing the set re-provisions the agent (its repos are pinned at creation)."
322
343
  projectId:
323
344
  type: string
324
345
  minLength: 1
325
346
  description: Shipeasy project id the run targets.
347
+ agentId:
348
+ type: string
349
+ minLength: 1
350
+ description: "Server-managed. The reusable Cursor cloud agent (`bc-…`) Shipeasy provisions once at connect and then starts every run on. A supplied value is ignored on create; if Cursor stops recognising the id (404), the next fire provisions a replacement and stores it here."
351
+ fireText:
352
+ type: string
353
+ minLength: 1
354
+ description: "Optional standing instruction prepended to every run's prompt — the trigger's base prompt. Lets two triggers on different repos steer their runs differently without changing the `/shipeasy-ops-work` task block."
326
355
  required:
327
356
  - repoUrl
328
357
  - projectId
329
358
  additionalProperties: false
330
359
  description: Non-secret config for a Cursor trigger.
360
+ CopilotTriggerRepo:
361
+ type: object
362
+ properties:
363
+ owner:
364
+ type: string
365
+ minLength: 1
366
+ description: GitHub repo owner.
367
+ repo:
368
+ type: string
369
+ minLength: 1
370
+ description: GitHub repo name.
371
+ baseRef:
372
+ type: string
373
+ minLength: 1
374
+ description: "Optional base ref this repo's agent task branches from. Omit for the repo's default branch."
375
+ required:
376
+ - owner
377
+ - repo
378
+ additionalProperties: false
379
+ description: One repo a Copilot trigger runs against, with the base branch its tasks branch from.
331
380
  CopilotTriggerConfig:
332
381
  type: object
333
382
  properties:
334
383
  owner:
335
384
  type: string
336
385
  minLength: 1
337
- description: GitHub repo owner. Together with `repo` forms the connector's idempotency key (`owner/repo`).
386
+ description: "**First** GitHub repo owner. Together with `repo` forms the connector's idempotency key (`owner/repo`), and both mirror `repos[0]` when `repos` is supplied."
338
387
  repo:
339
388
  type: string
340
389
  minLength: 1
@@ -342,11 +391,21 @@ CopilotTriggerConfig:
342
391
  baseRef:
343
392
  type: string
344
393
  minLength: 1
345
- description: Optional base ref the agent branches from.
394
+ description: Optional base ref the agent branches from. Mirrors `repos[0].baseRef`.
395
+ repos:
396
+ type: array
397
+ minItems: 1
398
+ items:
399
+ $ref: "#/CopilotTriggerRepo"
400
+ description: "Every repo this trigger runs against, each with its own base branch. GitHub's agent-tasks API is per-repo, so ONE fire starts one task per entry. Omit for a single-repo trigger, which is then described by `owner`/`repo`/`baseRef` alone; when supplied, the first entry must match them."
346
401
  projectId:
347
402
  type: string
348
403
  minLength: 1
349
404
  description: Shipeasy project id the run targets.
405
+ fireText:
406
+ type: string
407
+ minLength: 1
408
+ description: "Optional standing instruction prepended to every run's prompt — the trigger's base prompt. Lets two triggers on different repos steer their runs differently without changing the `/shipeasy-ops-work` task block."
350
409
  required:
351
410
  - owner
352
411
  - repo
@@ -368,6 +427,10 @@ JulesTriggerConfig:
368
427
  type: string
369
428
  minLength: 1
370
429
  description: Shipeasy project id the run targets.
430
+ fireText:
431
+ type: string
432
+ minLength: 1
433
+ description: "Optional standing instruction prepended to every run's prompt — the trigger's base prompt. Lets two triggers on different repos steer their runs differently without changing the `/shipeasy-ops-work` task block."
371
434
  required:
372
435
  - source
373
436
  - projectId
@@ -452,7 +515,7 @@ UpdateCursorTriggerRequest:
452
515
  - provider
453
516
  - config
454
517
  additionalProperties: false
455
- description: "Per-provider PATCH body for editing an existing `cursor_trigger` connector. `config` replaces the stored config wholesale; `name` and either credential are optional (a supplied credential rotates just that key)."
518
+ description: "Per-provider PATCH body for editing an existing `cursor_trigger` connector. `config` replaces the stored config wholesale, except for the server-managed keys: the provisioned `agentId` is carried over (and dropped, so a replacement agent is provisioned, when `repoUrl`/`startingRef` change), as is the last-run pointer. `name` and either credential are optional (a supplied credential rotates just that key)."
456
519
  UpdateCopilotTriggerRequest:
457
520
  type: object
458
521
  properties:
@@ -33,7 +33,8 @@ ListEventsResponse:
33
33
  type: string
34
34
  minLength: 1
35
35
  maxLength: 64
36
- description: Property key, e.g. `amount` or `plan`.
36
+ pattern: ^[a-zA-Z_][a-zA-Z_0-9]*$
37
+ description: Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
37
38
  type:
38
39
  type: string
39
40
  enum:
@@ -49,11 +50,14 @@ ListEventsResponse:
49
50
  default: ""
50
51
  description: Human-readable description of the property.
51
52
  type: string
53
+ pending:
54
+ description: "`true` when this property was DISCOVERED in live traffic rather than declared. Nothing is recorded for it yet — a property is written to Analytics Engine only once it owns a column, and a column is allocated when an admin declares the property (include it in a `PATCH .../events/{id}` body). Approval is a gate rather than a formality: columns are finite and permanently reserved, so auto-allocating them from customer payload keys would exhaust an event's schema irreversibly."
55
+ type: boolean
52
56
  required:
53
57
  - name
54
58
  - type
55
59
  additionalProperties: false
56
- description: One typed property declared on a catalogued event.
60
+ description: One typed property on a catalogued event — declared by an admin, or discovered in traffic and awaiting declaration.
57
61
  description: Typed properties declared on the event.
58
62
  pending:
59
63
  type: integer
@@ -106,7 +110,8 @@ GetEventResponse:
106
110
  type: string
107
111
  minLength: 1
108
112
  maxLength: 64
109
- description: Property key, e.g. `amount` or `plan`.
113
+ pattern: ^[a-zA-Z_][a-zA-Z_0-9]*$
114
+ description: Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
110
115
  type:
111
116
  type: string
112
117
  enum:
@@ -122,11 +127,14 @@ GetEventResponse:
122
127
  default: ""
123
128
  description: Human-readable description of the property.
124
129
  type: string
130
+ pending:
131
+ description: "`true` when this property was DISCOVERED in live traffic rather than declared. Nothing is recorded for it yet — a property is written to Analytics Engine only once it owns a column, and a column is allocated when an admin declares the property (include it in a `PATCH .../events/{id}` body). Approval is a gate rather than a formality: columns are finite and permanently reserved, so auto-allocating them from customer payload keys would exhaust an event's schema irreversibly."
132
+ type: boolean
125
133
  required:
126
134
  - name
127
135
  - type
128
136
  additionalProperties: false
129
- description: One typed property declared on a catalogued event.
137
+ description: One typed property on a catalogued event — declared by an admin, or discovered in traffic and awaiting declaration.
130
138
  description: Typed properties declared on the event.
131
139
  pending:
132
140
  type: integer
@@ -150,8 +158,8 @@ CreateEventRequest:
150
158
  properties:
151
159
  name:
152
160
  type: string
153
- pattern: ^[a-zA-Z0-9_][a-zA-Z0-9_\-.]{0,127}$
154
- description: Event name. Starts with a letter, digit, or `_`; letters, digits, `_`, `-`, `.`; max 128 chars. Immutable after create — this is the handle metric queries reference.
161
+ pattern: ^[a-zA-Z0-9_][a-zA-Z0-9_\-.]{0,49}$
162
+ description: Event name. Starts with a letter, digit, or `_`; letters, digits, `_`, `-`, `.`; max 50 characters. The cap is the Analytics Engine index budget — 96 bytes total, less a 36-byte project UUID and a separator — and the API has always enforced 50 while this spec advertised 128. The charset is ASCII, so characters and bytes are the same count. Immutable after create — this is the handle metric queries reference.
155
163
  folder:
156
164
  $ref: ./common.yaml#/Folder
157
165
  description:
@@ -168,7 +176,8 @@ CreateEventRequest:
168
176
  type: string
169
177
  minLength: 1
170
178
  maxLength: 64
171
- description: Property key, e.g. `amount` or `plan`.
179
+ pattern: ^[a-zA-Z_][a-zA-Z_0-9]*$
180
+ description: Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
172
181
  type:
173
182
  type: string
174
183
  enum:
@@ -225,7 +234,8 @@ UpdateEventRequest:
225
234
  type: string
226
235
  minLength: 1
227
236
  maxLength: 64
228
- description: Property key, e.g. `amount` or `plan`.
237
+ pattern: ^[a-zA-Z_][a-zA-Z_0-9]*$
238
+ description: Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
229
239
  type:
230
240
  type: string
231
241
  enum:
@@ -276,7 +286,8 @@ ApproveEventRequest:
276
286
  type: string
277
287
  minLength: 1
278
288
  maxLength: 64
279
- description: Property key, e.g. `amount` or `plan`.
289
+ pattern: ^[a-zA-Z_][a-zA-Z_0-9]*$
290
+ description: Property key, e.g. `amount` or `plan`. Must be a bare identifier — it is emitted as a SQL alias when the property is used as a `by()` dimension, and there is no way to quote one in the Analytics Engine dialect.
280
291
  type:
281
292
  type: string
282
293
  enum:
@@ -60,6 +60,11 @@ KeyRecord:
60
60
  - type: string
61
61
  - type: "null"
62
62
  description: Human label for the key. `null` for unnamed dashboard mints; programmatic mints auto-name themselves.
63
+ description:
64
+ anyOf:
65
+ - type: string
66
+ - type: "null"
67
+ description: Free-text note recording what the key is for (the service that holds it, the rotation owner, the ticket it was minted under). Display only — `null` unless someone set it via `PATCH /api/admin/keys/{id}`.
63
68
  scopes:
64
69
  anyOf:
65
70
  - type: array
@@ -72,6 +77,14 @@ KeyRecord:
72
77
  - type: string
73
78
  - type: "null"
74
79
  description: Last 4 characters of the raw token, so the dashboard mask is matchable against the held key. `null` for keys minted before this column.
80
+ origin:
81
+ type: string
82
+ enum:
83
+ - cli
84
+ - mobile
85
+ - dashboard
86
+ - api
87
+ description: Where the key was minted. `cli` (a signed-in CLI session from device auth), `mobile` (a mobile app login), `dashboard` (the "New API key" dialog) or `api` (minted with another key — CLI, MCP, agents). Set at mint time; keys that predate the column were backfilled from their label, defaulting to `dashboard`.
75
88
  required:
76
89
  - id
77
90
  - type
@@ -81,8 +94,34 @@ KeyRecord:
81
94
  - expires_at
82
95
  - created_by_email
83
96
  - name
97
+ - description
84
98
  - scopes
85
99
  - last4
100
+ - origin
101
+ additionalProperties: false
102
+ UpdateKeyRequest:
103
+ type: object
104
+ description: |-
105
+ Body for `PATCH /api/admin/keys/{id}`. Only the key's **label** is editable — `name` and `description`.
106
+
107
+ Everything that gives a key its authority (`type`, `env`, `scopes`, `expires_at`) is fixed at mint: those are the isolation boundary the worker derives the read env and permissions from, so changing them would silently re-point a credential that is already deployed. Rotate instead — mint a replacement and revoke the old key.
108
+
109
+ Omitted fields are left untouched; send `null` to clear one.
110
+ properties:
111
+ name:
112
+ anyOf:
113
+ - type: string
114
+ minLength: 1
115
+ maxLength: 160
116
+ - type: "null"
117
+ description: New human label, or `null` to clear it. Same 160-char budget as create — provenance labels are composed, not typed.
118
+ description:
119
+ anyOf:
120
+ - type: string
121
+ minLength: 1
122
+ maxLength: 500
123
+ - type: "null"
124
+ description: New free-text note, or `null` to clear it.
86
125
  additionalProperties: false
87
126
  CreateKeyRequest:
88
127
  type: object