@openwop/spec-artifacts 2.42.6 → 2.42.7
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/CORPUS-STAMP.json +64 -63
- package/api/seams-v2.yaml +187 -322
- package/api/v2/asyncapi.yaml +83 -113
- package/api/v2/openapi.yaml +339 -724
- package/package.json +1 -1
- package/schemas/audit-verify-result.schema.json +2 -2
- package/schemas/v2/audit-verify-result.schema.json +2 -2
- package/schemas/v2/capabilities.schema.json +2 -5
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/gaps.json +171 -1
- package/spec/v2/README.md +34 -36
- package/spec/v2/core/capabilities.md +186 -119
- package/spec/v2/core/conformance.md +78 -27
- package/spec/v2/core/connection-packs.md +8 -3
- package/spec/v2/core/conversation.md +10 -4
- package/spec/v2/core/errors.md +30 -9
- package/spec/v2/core/events.md +116 -80
- package/spec/v2/core/form-content-packs.md +11 -13
- package/spec/v2/core/headers.md +22 -14
- package/spec/v2/core/host-services.md +22 -5
- package/spec/v2/core/idempotency.md +48 -36
- package/spec/v2/core/identity.md +110 -42
- package/spec/v2/core/interop.md +82 -21
- package/spec/v2/core/interrupt.md +79 -40
- package/spec/v2/core/node-pack-runtimes.md +18 -4
- package/spec/v2/core/oauth.md +40 -6
- package/spec/v2/core/overview.md +61 -33
- package/spec/v2/core/packs.md +53 -28
- package/spec/v2/core/persistence.md +61 -80
- package/spec/v2/core/replay.md +56 -42
- package/spec/v2/core/runs.md +198 -60
- package/spec/v2/core/security-defaults.md +57 -33
- package/spec/v2/core/tool-catalog.md +29 -6
- package/spec/v2/core/versioning.md +95 -49
- package/spec/v2/core/webhooks.md +59 -20
- package/spec/v2/core/workflow-chain-packs.md +16 -14
- package/spec/v2/corrections.json +17 -1
- package/spec/v2/corrections.schema.json +1 -1
- package/spec/v2/declaration.json +24 -7
- package/spec/v2/declaration.schema.json +10 -0
- package/spec/v2/errors.json +109 -2
- package/spec/v2/errors.schema.json +38 -0
- package/spec/v2/ext/README.md +36 -23
- package/spec/v2/ext/a2uiSurface/README.md +75 -89
- package/spec/v2/ext/brand/README.md +15 -15
- package/spec/v2/ext/canvas/README.md +15 -15
- package/spec/v2/ext/chat/README.md +15 -15
- package/spec/v2/ext/coordination/README.md +15 -15
- package/spec/v2/ext/dataIntegration/README.md +17 -20
- package/spec/v2/ext/entities/README.md +15 -15
- package/spec/v2/ext/grpc-transport/README.md +6 -8
- package/spec/v2/ext/kanban/README.md +15 -15
- package/spec/v2/ext/knowledge/README.md +15 -15
- package/spec/v2/ext/launchStudio/README.md +16 -16
- package/spec/v2/ext/messaging/README.md +15 -15
- package/spec/v2/ext/portability/README.md +3 -17
- package/spec/v2/ext/provider-idempotency/README.md +7 -10
- package/spec/v2/ext/restTransport/README.md +30 -19
- package/spec/v2/ext/sandbox-runtime-notes/README.md +7 -9
- package/spec/v2/ext/webResearch/README.md +16 -16
- package/spec/v2/profiles.json +6 -2
- package/spec/v2/release.json +2 -2
- package/spec/v2/surface-baseline.json +542 -2
package/api/seams-v2.yaml
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP conformance seams profile (openwop-conformance-seams-v2)
|
|
4
|
-
version: 2.42.
|
|
5
|
-
description: '
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
version: 2.42.7
|
|
5
|
+
description: 'The OpenWOP conformance seams profile (`openwop-conformance-seams-v2`): test-only operations in their own
|
|
6
|
+
path space, `/conformance/seams/…`. The profile is versioned and validated against the canonical v2 schemas with no tolerance
|
|
7
|
+
path. It is not a capability: a host advertises the profile, never a `testSeams` flag.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
Generated from `api/openapi.yaml` by `scripts/derive-v2-api.py`; do not edit.'
|
|
10
11
|
servers:
|
|
11
12
|
- url: https://{host}
|
|
12
|
-
description:
|
|
13
|
+
description: An OpenWOP server.
|
|
13
14
|
variables:
|
|
14
15
|
host:
|
|
15
16
|
default: api.example.com
|
|
@@ -19,18 +20,10 @@ paths:
|
|
|
19
20
|
get:
|
|
20
21
|
tags:
|
|
21
22
|
- host
|
|
22
|
-
summary: Read the persisted durable A2A task projection (
|
|
23
|
-
description: 'Returns the persisted `A2ATaskState` for `taskId` (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
durable projection that survives caller disconnect. The normative A2A
|
|
28
|
-
|
|
29
|
-
read surface remains the A2A `tasks/get` JSON-RPC method. Hosts that do
|
|
30
|
-
|
|
31
|
-
not advertise `capabilities.a2a.durableTasks` return `501`.
|
|
32
|
-
|
|
33
|
-
'
|
|
23
|
+
summary: Read the persisted durable A2A task projection (host extension).
|
|
24
|
+
description: 'Returns the persisted `A2ATaskState` for `taskId` (equal to the backing `runId`): a host-extension convenience
|
|
25
|
+
read of the durable projection, which survives caller disconnect. The normative A2A read surface remains the A2A `tasks/get`
|
|
26
|
+
JSON-RPC method. Hosts that do not advertise `capabilities.a2a.durableTasks` return `501`.'
|
|
34
27
|
operationId: getA2ATaskState
|
|
35
28
|
security:
|
|
36
29
|
- ApiKeyAuth:
|
|
@@ -61,7 +54,7 @@ paths:
|
|
|
61
54
|
'404':
|
|
62
55
|
$ref: '#/components/responses/NotFound'
|
|
63
56
|
'501':
|
|
64
|
-
description: Host does not advertise capabilities.a2a.durableTasks
|
|
57
|
+
description: Host does not advertise `capabilities.a2a.durableTasks`.
|
|
65
58
|
content:
|
|
66
59
|
application/json:
|
|
67
60
|
schema:
|
|
@@ -70,14 +63,9 @@ paths:
|
|
|
70
63
|
get:
|
|
71
64
|
tags:
|
|
72
65
|
- host
|
|
73
|
-
summary: List workspace file metadata for the caller's tenant·workspace
|
|
74
|
-
description:
|
|
75
|
-
|
|
76
|
-
workspace}` per RFC 0059 §C. Optional `?prefix=` filters the flat
|
|
77
|
-
|
|
78
|
-
`path` namespace to entries starting with the given prefix.
|
|
79
|
-
|
|
80
|
-
'
|
|
66
|
+
summary: List workspace file metadata for the caller's tenant·workspace.
|
|
67
|
+
description: Returns file metadata, without bodies, for the caller's `{tenant, workspace}`. An optional `?prefix=` filters
|
|
68
|
+
the flat `path` namespace to entries starting with that prefix.
|
|
81
69
|
operationId: listWorkspaceFiles
|
|
82
70
|
security:
|
|
83
71
|
- ApiKeyAuth:
|
|
@@ -108,7 +96,7 @@ paths:
|
|
|
108
96
|
'403':
|
|
109
97
|
$ref: '#/components/responses/Forbidden'
|
|
110
98
|
'501':
|
|
111
|
-
description: Host does not advertise capabilities.workspace.supported
|
|
99
|
+
description: Host does not advertise `capabilities.workspace.supported`.
|
|
112
100
|
content:
|
|
113
101
|
application/json:
|
|
114
102
|
schema:
|
|
@@ -117,14 +105,9 @@ paths:
|
|
|
117
105
|
get:
|
|
118
106
|
tags:
|
|
119
107
|
- host
|
|
120
|
-
summary: Read one workspace file
|
|
121
|
-
description: 'Returns the `WorkspaceFile` at `path` for the caller''s `{tenant,
|
|
122
|
-
|
|
123
|
-
workspace}`. When `capabilities.workspace.versioned: true`, an
|
|
124
|
-
|
|
125
|
-
optional `?version=N` returns the historical snapshot at version N.
|
|
126
|
-
|
|
127
|
-
'
|
|
108
|
+
summary: Read one workspace file.
|
|
109
|
+
description: 'Returns the `WorkspaceFile` at `path` for the caller''s `{tenant, workspace}`. When `capabilities.workspace.versioned:
|
|
110
|
+
true`, an optional `?version=N` returns the historical snapshot at version N.'
|
|
128
111
|
operationId: getWorkspaceFile
|
|
129
112
|
security:
|
|
130
113
|
- ApiKeyAuth:
|
|
@@ -150,7 +133,7 @@ paths:
|
|
|
150
133
|
'404':
|
|
151
134
|
$ref: '#/components/responses/NotFound'
|
|
152
135
|
'501':
|
|
153
|
-
description: Host does not advertise capabilities.workspace.supported
|
|
136
|
+
description: Host does not advertise `capabilities.workspace.supported`.
|
|
154
137
|
content:
|
|
155
138
|
application/json:
|
|
156
139
|
schema:
|
|
@@ -158,20 +141,11 @@ paths:
|
|
|
158
141
|
put:
|
|
159
142
|
tags:
|
|
160
143
|
- host
|
|
161
|
-
summary:
|
|
162
|
-
description: 'Atomically creates or replaces the file at `path`
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
workspace_conflict` (`details.currentVersion` carries the live
|
|
167
|
-
|
|
168
|
-
version). On success the host bumps `version`, recomputes `etag`,
|
|
169
|
-
|
|
170
|
-
and emits a `workspace.updated` event. A `content` exceeding
|
|
171
|
-
|
|
172
|
-
`capabilities.workspace.maxFileBytes` returns `workspace_too_large`.
|
|
173
|
-
|
|
174
|
-
'
|
|
144
|
+
summary: Atomically create or replace a workspace file.
|
|
145
|
+
description: 'Atomically creates or replaces the file at `path`. MUST honor `If-Match: <etag>`: a stale token returns
|
|
146
|
+
`409 workspace_conflict`, with `details.currentVersion` carrying the live version. On success the host bumps `version`,
|
|
147
|
+
recomputes `etag`, and emits a `workspace.updated` event. A `content` exceeding `capabilities.workspace.maxFileBytes`
|
|
148
|
+
returns `workspace_too_large`.'
|
|
175
149
|
operationId: putWorkspaceFile
|
|
176
150
|
security:
|
|
177
151
|
- ApiKeyAuth:
|
|
@@ -216,7 +190,7 @@ paths:
|
|
|
216
190
|
schema:
|
|
217
191
|
$ref: ../schemas/v2/error-envelope.schema.json
|
|
218
192
|
'501':
|
|
219
|
-
description: Host does not advertise capabilities.workspace.supported
|
|
193
|
+
description: Host does not advertise `capabilities.workspace.supported`.
|
|
220
194
|
content:
|
|
221
195
|
application/json:
|
|
222
196
|
schema:
|
|
@@ -224,12 +198,9 @@ paths:
|
|
|
224
198
|
delete:
|
|
225
199
|
tags:
|
|
226
200
|
- host
|
|
227
|
-
summary: Delete a workspace file
|
|
228
|
-
description: 'Removes the file at `path` (and, when `versioned: true`, writes a
|
|
229
|
-
|
|
230
|
-
tombstone). Emits a `workspace.updated` event on success.
|
|
231
|
-
|
|
232
|
-
'
|
|
201
|
+
summary: Delete a workspace file.
|
|
202
|
+
description: 'Removes the file at `path` (and, when `versioned: true`, writes a tombstone). Emits a `workspace.updated`
|
|
203
|
+
event on success.'
|
|
233
204
|
operationId: deleteWorkspaceFile
|
|
234
205
|
security:
|
|
235
206
|
- ApiKeyAuth:
|
|
@@ -251,7 +222,7 @@ paths:
|
|
|
251
222
|
'404':
|
|
252
223
|
$ref: '#/components/responses/NotFound'
|
|
253
224
|
'501':
|
|
254
|
-
description: Host does not advertise capabilities.workspace.supported
|
|
225
|
+
description: Host does not advertise `capabilities.workspace.supported`.
|
|
255
226
|
content:
|
|
256
227
|
application/json:
|
|
257
228
|
schema:
|
|
@@ -264,35 +235,15 @@ paths:
|
|
|
264
235
|
tags:
|
|
265
236
|
- packs-test
|
|
266
237
|
summary: Publish a pack tarball to the isolated test catalog.
|
|
267
|
-
description: '
|
|
268
|
-
|
|
269
|
-
`
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
publish error catalog (`invalid_pack_scope`, `invalid_pack_name`,
|
|
274
|
-
|
|
275
|
-
`invalid_version`, `invalid_body`, eight `tarball_*` codes,
|
|
276
|
-
|
|
277
|
-
`invalid_manifest`, `manifest_mismatch` (or the granular
|
|
278
|
-
|
|
279
|
-
`manifest_name_mismatch` / `manifest_version_mismatch` pair),
|
|
280
|
-
|
|
281
|
-
`pack_integrity_failure`, `unsupported_runtime`, `forbidden`,
|
|
282
|
-
|
|
283
|
-
`conflict`/`version_conflict`) MUST be served verbatim. The
|
|
238
|
+
description: 'Mirrors the registry''s `PUT /v1/packs/{name}/-/{version}.tgz` (`spec/v1/node-packs.md`). The request
|
|
239
|
+
shape, response shape, status codes, and publish error catalog MUST be served verbatim: `invalid_pack_scope`, `invalid_pack_name`,
|
|
240
|
+
`invalid_version`, `invalid_body`, eight `tarball_*` codes, `invalid_manifest`, `manifest_mismatch` (or the granular
|
|
241
|
+
`manifest_name_mismatch` / `manifest_version_mismatch` pair), `pack_integrity_failure`, `unsupported_runtime`, `forbidden`,
|
|
242
|
+
`conflict`/`version_conflict`.
|
|
284
243
|
|
|
285
|
-
test catalog MUST be isolated per RFC 0025 §C — a pack PUT''d
|
|
286
244
|
|
|
287
|
-
here MUST NOT appear in `GET /v1/packs/{name}` listings.
|
|
288
|
-
|
|
289
|
-
The mirrored production path is registry-service surface
|
|
290
|
-
|
|
291
|
-
(`registry-operations.md`), not defined in this host document
|
|
292
|
-
|
|
293
|
-
(see the `packs-test` tag scope note).
|
|
294
|
-
|
|
295
|
-
'
|
|
245
|
+
The test catalog MUST be isolated: a pack PUT here MUST NOT appear in `GET /v1/packs/{name}` listings. The mirrored
|
|
246
|
+
production path is registry-service surface (`registry-operations.md`), not defined in this document.'
|
|
296
247
|
operationId: putTestPackTarball
|
|
297
248
|
security:
|
|
298
249
|
- ApiKeyAuth:
|
|
@@ -352,29 +303,12 @@ paths:
|
|
|
352
303
|
schema:
|
|
353
304
|
$ref: '#/components/schemas/TestPackPublishRecord'
|
|
354
305
|
'400':
|
|
355
|
-
description: 'One of the
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
tarball extraction (`tarball_gunzip_failed`, `tarball_too_large`,
|
|
362
|
-
|
|
363
|
-
`tarball_manifest_missing`, `tarball_manifest_too_large`,
|
|
364
|
-
|
|
365
|
-
`tarball_manifest_not_json`, `tarball_entry_missing`,
|
|
366
|
-
|
|
367
|
-
`tarball_entry_too_large`, `tarball_path_traversal`,
|
|
368
|
-
|
|
369
|
-
`tarball_tar_parse_failed`),
|
|
370
|
-
|
|
371
|
-
manifest contents (`invalid_manifest`, `manifest_mismatch` or
|
|
372
|
-
|
|
373
|
-
the granular `manifest_name_mismatch` / `manifest_version_mismatch` pair,
|
|
374
|
-
|
|
375
|
-
`pack_integrity_failure`, `unsupported_runtime`).
|
|
376
|
-
|
|
377
|
-
'
|
|
306
|
+
description: 'One of the documented 400-class publish error codes: URL or scope (`invalid_pack_scope`, `invalid_pack_name`,
|
|
307
|
+
`invalid_version`), body shape (`invalid_body`), tarball extraction (`tarball_gunzip_failed`, `tarball_too_large`,
|
|
308
|
+
`tarball_manifest_missing`, `tarball_manifest_too_large`, `tarball_manifest_not_json`, `tarball_entry_missing`,
|
|
309
|
+
`tarball_entry_too_large`, `tarball_path_traversal`, `tarball_tar_parse_failed`), or manifest contents (`invalid_manifest`,
|
|
310
|
+
`manifest_mismatch` or the granular `manifest_name_mismatch` / `manifest_version_mismatch` pair, `pack_integrity_failure`,
|
|
311
|
+
`unsupported_runtime`).'
|
|
378
312
|
content:
|
|
379
313
|
application/json:
|
|
380
314
|
schema:
|
|
@@ -404,10 +338,9 @@ paths:
|
|
|
404
338
|
tags:
|
|
405
339
|
- packs-test
|
|
406
340
|
summary: Fetch a published test-catalog tarball.
|
|
407
|
-
description: '
|
|
408
|
-
application/tar+gzip` and an `ETag: "sha256-..."` matching the manifest''s `tarballSha256`. The mirrored
|
|
409
|
-
path is registry-service surface (`registry-operations.md`), not defined in this
|
|
410
|
-
tag scope note).'
|
|
341
|
+
description: 'Mirrors the registry''s `GET /v1/packs/{name}/-/{version}.tgz`. Returns the gzipped tarball bytes with
|
|
342
|
+
`Content-Type: application/tar+gzip` and an `ETag: "sha256-..."` matching the manifest''s `tarballSha256`. The mirrored
|
|
343
|
+
production path is registry-service surface (`registry-operations.md`), not defined in this document.'
|
|
411
344
|
operationId: getTestPackTarball
|
|
412
345
|
security:
|
|
413
346
|
- ApiKeyAuth:
|
|
@@ -452,26 +385,11 @@ paths:
|
|
|
452
385
|
delete:
|
|
453
386
|
tags:
|
|
454
387
|
- packs-test
|
|
455
|
-
summary: Unpublish a test-catalog version (
|
|
456
|
-
description: '
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
for versions older than the registry''s unpublish window
|
|
461
|
-
|
|
462
|
-
(default 72h). Test-mode implementations MAY shorten the
|
|
463
|
-
|
|
464
|
-
window for tractable conformance fixtures but MUST surface
|
|
465
|
-
|
|
466
|
-
the same error code. The mirrored production path is
|
|
467
|
-
|
|
468
|
-
registry-service surface (`registry-operations.md`), not
|
|
469
|
-
|
|
470
|
-
defined in this host document (see the `packs-test` tag
|
|
471
|
-
|
|
472
|
-
scope note).
|
|
473
|
-
|
|
474
|
-
'
|
|
388
|
+
summary: Unpublish a test-catalog version (same unpublish-window semantics as the registry).
|
|
389
|
+
description: Mirrors the registry's `DELETE /v1/packs/{name}/-/{version}` (`spec/v1/node-packs.md`). Returns `400 unpublish_window_expired`
|
|
390
|
+
for versions older than the registry's unpublish window (default 72h). Test-mode implementations MAY shorten the window
|
|
391
|
+
for tractable conformance fixtures but MUST surface the same error code. The mirrored production path is registry-service
|
|
392
|
+
surface (`registry-operations.md`), not defined in this document.
|
|
475
393
|
operationId: deleteTestPackVersion
|
|
476
394
|
security:
|
|
477
395
|
- ApiKeyAuth:
|
|
@@ -511,17 +429,9 @@ paths:
|
|
|
511
429
|
tags:
|
|
512
430
|
- packs-test
|
|
513
431
|
summary: Fetch the detached Ed25519 signature for a test-catalog pack.
|
|
514
|
-
description: '
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
to a storage-backend signed URL. The mirrored production path is
|
|
519
|
-
|
|
520
|
-
registry-service surface (`registry-operations.md`), not defined
|
|
521
|
-
|
|
522
|
-
in this host document (see the `packs-test` tag scope note).
|
|
523
|
-
|
|
524
|
-
'
|
|
432
|
+
description: Mirrors the registry's `GET /v1/packs/{name}/-/{version}.sig`. Returns the signature blob over `pack.json`
|
|
433
|
+
for this version. MAY 302-redirect to a storage-backend signed URL. The mirrored production path is registry-service
|
|
434
|
+
surface (`registry-operations.md`), not defined in this document.
|
|
525
435
|
operationId: getTestPackSignature
|
|
526
436
|
security:
|
|
527
437
|
- ApiKeyAuth:
|
|
@@ -560,19 +470,9 @@ paths:
|
|
|
560
470
|
schema:
|
|
561
471
|
$ref: ../schemas/v2/error-envelope.schema.json
|
|
562
472
|
'404':
|
|
563
|
-
description: '`signature_not_available
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
is unwired. The four cases are intentionally
|
|
568
|
-
|
|
569
|
-
indistinguishable per spec/v1/node-packs.md §"GET /v1/packs/{name}/-/{version}.sig".
|
|
570
|
-
|
|
571
|
-
Also returned when the host does not advertise
|
|
572
|
-
|
|
573
|
-
`capabilities.packs.testMode.supported: true`.
|
|
574
|
-
|
|
575
|
-
'
|
|
473
|
+
description: '`signature_not_available`: the version is missing, yanked, or unsigned at publish time, or the registry''s
|
|
474
|
+
storage backend is unwired. The four cases are intentionally indistinguishable (spec/v1/node-packs.md). Also returned
|
|
475
|
+
when the host does not advertise `capabilities.packs.testMode.supported: true`.'
|
|
576
476
|
content:
|
|
577
477
|
application/json:
|
|
578
478
|
schema:
|
|
@@ -582,11 +482,11 @@ paths:
|
|
|
582
482
|
tags:
|
|
583
483
|
- Seams
|
|
584
484
|
operationId: seedEra2EventLog
|
|
585
|
-
summary: Persist a run whose event log
|
|
586
|
-
description: 'The host MUST persist the rows verbatim
|
|
587
|
-
the run reads as era `2` by the absent-⇒-`2` rule of persistence.md
|
|
588
|
-
|
|
589
|
-
witness. `status` is the snapshot status the seeded run holds.'
|
|
485
|
+
summary: Persist a run whose event log uses v1 vocabulary (era 2)
|
|
486
|
+
description: 'Seeds a run whose stored event log is in v1 vocabulary. The host MUST persist the rows verbatim: v1 `type`
|
|
487
|
+
strings, the given `sequence` space, and no era stamp, so the run reads as era `2` by the absent-⇒-`2` rule of persistence.md.
|
|
488
|
+
The host MUST NOT translate at write time. The scenarios `v2-v1-events-translated`, `v2-unmapped-type-refused`, `v2-fork-a-v1-run`
|
|
489
|
+
and `v2-pinned-run-disposition` witness the read projection. `status` is the snapshot status the seeded run holds.'
|
|
590
490
|
requestBody:
|
|
591
491
|
required: true
|
|
592
492
|
content:
|
|
@@ -653,14 +553,15 @@ paths:
|
|
|
653
553
|
tags:
|
|
654
554
|
- Seams
|
|
655
555
|
operationId: appendEra2Event
|
|
656
|
-
summary: Append a v2-named event to a seeded era-2 run through the host's production writer
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
that applies the writer rule (persistence.md §The writer rule) — and MUST NOT branch on the seam: an era-2 run stores
|
|
556
|
+
summary: Append a v2-named event to a seeded era-2 run through the host's production writer
|
|
557
|
+
description: 'The host MUST append the event through the same writer its own code uses for that run (the storage boundary
|
|
558
|
+
that applies the writer rule, persistence.md §The writer rule) and MUST NOT branch on the seam. An era-2 run stores
|
|
660
559
|
the event under its v1 spelling (the codemap''s v1 side), so the production read returns the v2 `type` given here.
|
|
560
|
+
|
|
561
|
+
|
|
661
562
|
The seam MUST refuse a `runId` that `seedEra2EventLog` did not create with `404`, exactly as for an unknown run, so
|
|
662
|
-
it cannot inject into a real run
|
|
663
|
-
answers `400`.
|
|
563
|
+
it cannot inject into a real run. A terminal run answers `409 run_terminal`; a `type` that is not a v2 registry name
|
|
564
|
+
answers `400`. Used by `v2-era-2-append-vocabulary`.'
|
|
664
565
|
requestBody:
|
|
665
566
|
required: true
|
|
666
567
|
content:
|
|
@@ -710,17 +611,16 @@ paths:
|
|
|
710
611
|
tags:
|
|
711
612
|
- Seams
|
|
712
613
|
operationId: fireEffectSeam
|
|
713
|
-
summary: Fire one named effect
|
|
614
|
+
summary: Fire one named effect seam inside a run
|
|
714
615
|
description: 'The host runs a workflow that drives the named seam once. The scenario then forks the run in `replay`
|
|
715
|
-
mode and reads `GET /runs/{runId}/effects` on the fork
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
re-fire on branch would have built this seam only to find the scenario still declining to call it.'
|
|
616
|
+
mode and reads `GET /runs/{runId}/effects` on the fork. A guarded seam MUST NOT produce a new effect attempt there:
|
|
617
|
+
replay suppression is unconditional (`replay.md` §Suppression rule 1) and does not depend on `branchReFires`, which
|
|
618
|
+
states only what a `branch` re-fires by design (§Branch: a host "MUST NOT report that as replay suppression"). The
|
|
619
|
+
witness is the host''s own Layer-2 ledger, so the leg needs no externally reachable receiver.
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
The scenario fires the first `GET /host/effect-seams` row with `guarded: true`, not every row. When no row is guarded
|
|
623
|
+
it records `inapplicable` without calling this operation.'
|
|
724
624
|
requestBody:
|
|
725
625
|
required: true
|
|
726
626
|
content:
|
|
@@ -734,12 +634,12 @@ paths:
|
|
|
734
634
|
seam:
|
|
735
635
|
type: string
|
|
736
636
|
minLength: 1
|
|
737
|
-
description: The `seam` value of a row in GET /host/effect-seams
|
|
637
|
+
description: The `seam` value of a row in `GET /host/effect-seams`.
|
|
738
638
|
receiverUrl:
|
|
739
639
|
type: string
|
|
740
640
|
format: uri
|
|
741
|
-
description: Optional destination for seams whose kind needs one. Omitted, the host uses its own unreachable
|
|
742
|
-
fixture destination
|
|
641
|
+
description: Optional destination, for seams whose kind needs one. Omitted, the host uses its own unreachable
|
|
642
|
+
fixture destination; the witness is the effect ledger, not delivery.
|
|
743
643
|
responses:
|
|
744
644
|
'201':
|
|
745
645
|
description: The run that fired the seam.
|
|
@@ -764,11 +664,10 @@ paths:
|
|
|
764
664
|
tags:
|
|
765
665
|
- Seams
|
|
766
666
|
operationId: forceEffectTransportRetry
|
|
767
|
-
summary: Drive one effect through the suite fixture provider with a forced transport retry
|
|
768
|
-
description:
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
obligation is only claims-checkable.'
|
|
667
|
+
summary: Drive one effect through the suite's fixture provider with a forced transport retry
|
|
668
|
+
description: The host issues one outbound effect to `providerUrl` and retries it at the transport layer. The fixture
|
|
669
|
+
provider records the idempotency key of each attempt. A Layer-2 host MUST present the same business-identity key on
|
|
670
|
+
both attempts; a provider that sees a changed key fails the leg.
|
|
772
671
|
requestBody:
|
|
773
672
|
required: true
|
|
774
673
|
content:
|
|
@@ -809,12 +708,11 @@ paths:
|
|
|
809
708
|
tags:
|
|
810
709
|
- Seams
|
|
811
710
|
operationId: armIdempotencyHold
|
|
812
|
-
summary: Hold the caller's next same-key create in flight
|
|
711
|
+
summary: Hold the caller's next same-key create in flight
|
|
813
712
|
description: 'Arms a single-use hold: the caller tenant''s next real `POST /runs` carrying `key` as its Idempotency-Key
|
|
814
713
|
keeps its Layer-1 claim in flight for `holdMs` after claiming, then completes normally. The seam MUST NOT answer a
|
|
815
714
|
create or emit a 409: the refusal a concurrent same-key create receives while the claim is held comes from the host''s
|
|
816
|
-
production in-flight branch (idempotency.md §Concurrency). Keyed by (tenant, key);
|
|
817
|
-
delayed.'
|
|
715
|
+
production in-flight branch (idempotency.md §Concurrency). Keyed by (tenant, key); an unarmed key is never delayed.'
|
|
818
716
|
requestBody:
|
|
819
717
|
required: true
|
|
820
718
|
content:
|
|
@@ -858,10 +756,11 @@ paths:
|
|
|
858
756
|
tags:
|
|
859
757
|
- Seams
|
|
860
758
|
operationId: receiveWebhookDelivery
|
|
861
|
-
summary: Run a webhook delivery through the host's inbound receiver
|
|
862
|
-
description:
|
|
863
|
-
as the subscription secret and reports the verdict
|
|
864
|
-
MUST be accepted (`v2-v1-signed-webhook-accepted`)
|
|
759
|
+
summary: Run a webhook delivery through the host's inbound receiver
|
|
760
|
+
description: Exercises the host as a webhook subscriber. The host verifies `headers` and `body` with its production
|
|
761
|
+
verifier, using `secret` as the subscription secret, and reports the verdict. A scheme-`v1` delivery carrying only
|
|
762
|
+
`X-openwop-*` headers, signed over `{timestamp}.{rawBody}`, MUST be accepted (`v2-v1-signed-webhook-accepted`); a
|
|
763
|
+
tampered signature MUST be refused.
|
|
865
764
|
requestBody:
|
|
866
765
|
required: true
|
|
867
766
|
content:
|
|
@@ -907,19 +806,24 @@ paths:
|
|
|
907
806
|
tags:
|
|
908
807
|
- Seams
|
|
909
808
|
operationId: emitA2uiSurface
|
|
910
|
-
summary: Admit one `ui.a2ui-surface` envelope into a run through the production
|
|
911
|
-
description: '
|
|
912
|
-
one from the canonical wire
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
809
|
+
summary: Admit one `ui.a2ui-surface` envelope into a run through the production admission path
|
|
810
|
+
description: 'Supplies one `ui.a2ui-surface` envelope for the host to admit. A real one is emitted by a model inside
|
|
811
|
+
a node turn, so the suite cannot choose one from the canonical wire; this seam supplies the envelope only.
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
The host MUST admit it through its production envelope-admission path and MUST record it exactly as production would.
|
|
815
|
+
That path covers the envelope-kind catalog (`supportedEnvelopes`, `schemaVersions`, `envelopeStrictness`; events.md
|
|
816
|
+
§"The envelope-kind catalog"), validation against the one per-kind branch the schema version selects (never the `anyOf`
|
|
817
|
+
union), the cross-field rules (every message `surfaceId` equals the payload `surfaceId`; a `createSurface.catalogId`
|
|
818
|
+
equals the payload `catalogId`), the surface-fold guard (spec/v2/ext/a2uiSurface/README.md §"The fold"), trust propagation,
|
|
819
|
+
and SR-1 redaction. It MUST NOT be a mock that records without those rules. `envelope.nodeId`, when present, binds
|
|
820
|
+
the surface to that node, so a surface emitted at a node suspended on an `approval` interrupt is the surface whose
|
|
821
|
+
`resume` action would resolve it (§"Trust": a tainted fold blocks that interrupt).
|
|
822
|
+
|
|
823
|
+
|
|
824
|
+
Refusals use the canonical error envelope: `422 unknown_schema_version` above the floor, or below it under `strict`;
|
|
825
|
+
`422 envelope_invalid` for a payload that fails its branch, a cross-field rule, or the fold guard; `422 unknown_envelope_kind`
|
|
826
|
+
when the host does not list the kind. `details` SHOULD name the rule. A host that has not wired the seam answers `404`/`405`,
|
|
923
827
|
and the scenario records `inapplicable`.'
|
|
924
828
|
requestBody:
|
|
925
829
|
required: true
|
|
@@ -969,19 +873,23 @@ paths:
|
|
|
969
873
|
tags:
|
|
970
874
|
- Seams
|
|
971
875
|
operationId: startOAuthAuthorization
|
|
972
|
-
summary: Begin an authorization-code grant
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
876
|
+
summary: Begin an authorization-code grant through the production authorization-URL builder
|
|
877
|
+
description: 'Points `provider` at the given endpoints (the suite''s authorization-server double), then begins an authorization-code
|
|
878
|
+
grant for the authenticated caller by calling the host''s production authorization-URL builder, and returns the URL
|
|
879
|
+
a user agent would be redirected to. The provider is a test-only provider definition or, with `connection`, the connection
|
|
880
|
+
pack''s provider registered through the host''s production registration path, which runs discovery and pins its tuple.
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
The builder MUST be the one production uses: PKCE S256, a fresh `state` bound to the caller''s Subject and the provider,
|
|
884
|
+
the provider''s fixed redirect URI, `iss` expectations, and `resource` for an MCP reach. A seam that assembles its
|
|
885
|
+
own URL measures a stub, and a bundle citing it MUST say which. The grant completes on the host''s production callback
|
|
886
|
+
route, which the suite calls as the user agent. `redirectUri` is a probe: the host MUST ignore it (the redirect URI
|
|
887
|
+
is fixed per provider, oauth.md rule 5).
|
|
888
|
+
|
|
889
|
+
|
|
890
|
+
A refused grant (an MCP-reach provider with no `issuer`, `pkce: "unsupported"`, or discovered metadata that disagrees
|
|
891
|
+
with the manifest or the pinned tuple) is `422 connection_auth_metadata_mismatch`, and no authorization URL is issued.
|
|
892
|
+
A host that has not wired the seam answers `404`, and the scenarios record `blocked`.'
|
|
985
893
|
requestBody:
|
|
986
894
|
required: true
|
|
987
895
|
content:
|
|
@@ -1019,8 +927,8 @@ paths:
|
|
|
1019
927
|
minLength: 1
|
|
1020
928
|
connection:
|
|
1021
929
|
$ref: ../schemas/v2/connection-pack-manifest.schema.json
|
|
1022
|
-
description: A connection pack whose provider is reached as an MCP server
|
|
1023
|
-
|
|
930
|
+
description: A connection pack whose provider is reached as an MCP server; registered through the production
|
|
931
|
+
path.
|
|
1024
932
|
redirectUri:
|
|
1025
933
|
type: string
|
|
1026
934
|
description: A probe the host MUST ignore.
|
|
@@ -1056,14 +964,13 @@ paths:
|
|
|
1056
964
|
tags:
|
|
1057
965
|
- Seams
|
|
1058
966
|
operationId: expireOAuthAccessToken
|
|
1059
|
-
summary: Expire the caller's stored access token for a provider so its next use refreshes
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
provider.'
|
|
967
|
+
summary: Expire the caller's stored access token for a provider so its next use refreshes
|
|
968
|
+
description: 'Marks the access token of the caller''s stored credential for `provider` expired, and nothing else. The
|
|
969
|
+
next node that uses it refreshes through the host''s production refresh path against the provider''s token endpoint
|
|
970
|
+
(the suite''s double, which decides whether the refresh token is still good). A terminal refresh failure then follows
|
|
971
|
+
oauth.md §Token lifecycle: `connector.auth-expired`, and either the node fails `connector_auth_expired` or, under
|
|
972
|
+
`oauth.credentialInterrupt`, it suspends on a `credential` interrupt with `reason: "expired"`. `404` when the caller
|
|
973
|
+
holds no credential for the provider.'
|
|
1067
974
|
requestBody:
|
|
1068
975
|
required: true
|
|
1069
976
|
content:
|
|
@@ -1091,9 +998,9 @@ paths:
|
|
|
1091
998
|
tags:
|
|
1092
999
|
- Seams
|
|
1093
1000
|
operationId: mintLaneCredential
|
|
1094
|
-
summary: Mint a fresh credential on an advertised lane for the caller's tenant
|
|
1001
|
+
summary: Mint a fresh credential on an advertised lane for the caller's tenant
|
|
1095
1002
|
description: 'Issues a new credential on `lane` (an advertised `auth.lanes[].lane` whose `revocation` is `next-request`;
|
|
1096
|
-
absent ⇒ `api-key`) for the
|
|
1003
|
+
absent ⇒ `api-key`) for the authenticated caller''s tenant, through the host''s production issuance path, so the credential
|
|
1097
1004
|
it returns authenticates on the canonical API exactly as an ordinary one does. The suite uses it only to hold a credential
|
|
1098
1005
|
it can then revoke: the revocation, and the refusal on the next request (`401 credential_revoked`), are production
|
|
1099
1006
|
behaviour the seam does not simulate. A host that has not wired the seam answers `404`, and the scenario records the
|
|
@@ -1136,8 +1043,7 @@ paths:
|
|
|
1136
1043
|
- kind
|
|
1137
1044
|
description: 'How the suite presents `credential` on the canonical API. Absent ⇒ bearer. A lane whose
|
|
1138
1045
|
production credential is cookie-borne (a `session` lane) answers `{ kind: "cookie", name }`, and the
|
|
1139
|
-
suite sends `Cookie: <name>=<credential>`.
|
|
1140
|
-
can be witnessed without advertising a false rule.'
|
|
1046
|
+
suite sends `Cookie: <name>=<credential>`.'
|
|
1141
1047
|
properties:
|
|
1142
1048
|
kind:
|
|
1143
1049
|
type: string
|
|
@@ -1147,7 +1053,7 @@ paths:
|
|
|
1147
1053
|
name:
|
|
1148
1054
|
type: string
|
|
1149
1055
|
pattern: ^[!#$%&'*+.^_`|~0-9A-Za-z-]+$
|
|
1150
|
-
description: The cookie name (RFC 6265 token). Required when `kind` is `cookie`.
|
|
1056
|
+
description: The cookie name (an RFC 6265 token). Required when `kind` is `cookie`.
|
|
1151
1057
|
if:
|
|
1152
1058
|
properties:
|
|
1153
1059
|
kind:
|
|
@@ -1170,8 +1076,8 @@ paths:
|
|
|
1170
1076
|
tags:
|
|
1171
1077
|
- Seams
|
|
1172
1078
|
operationId: revokeLaneCredential
|
|
1173
|
-
summary: Revoke a credential the mint seam issued
|
|
1174
|
-
description: Revokes `credential` through the host's
|
|
1079
|
+
summary: Revoke a credential the mint seam issued
|
|
1080
|
+
description: Revokes `credential` through the host's production revocation path. On a `next-request` lane the very next
|
|
1175
1081
|
request presenting it MUST be refused `401 credential_revoked` (identity.md §2.2); the suite observes that on the
|
|
1176
1082
|
canonical API, not through this seam. `404` when no active credential matches.
|
|
1177
1083
|
requestBody:
|
|
@@ -1217,16 +1123,25 @@ paths:
|
|
|
1217
1123
|
tags:
|
|
1218
1124
|
- Seams
|
|
1219
1125
|
operationId: getTranscriptWindow
|
|
1220
|
-
summary:
|
|
1221
|
-
description: '
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1126
|
+
summary: Read the host's accounting of what it fed the model on one orchestrator turn
|
|
1127
|
+
description: 'Returns what the host fed the model on turn `iteration` of `runId`. The orchestrator transcript a host
|
|
1128
|
+
assembles each iteration is host-internal and never crosses the wire, so this seam reports the host''s own accounting:
|
|
1129
|
+
|
|
1130
|
+
|
|
1131
|
+
- `tokenCount`, in the advertised `contextBudget.tokenCounter` unit. MUST be ≤ `transcriptTokenBudget`.
|
|
1132
|
+
|
|
1133
|
+
- `eventIds`: the verbatim recent tail, in event-log order.
|
|
1134
|
+
|
|
1135
|
+
- `summarizedRanges`.
|
|
1136
|
+
|
|
1137
|
+
- `entries[] { eventId, rendered }`: the exact text fed per item. REQUIRED when `tokenCounter` is `chars`, so the
|
|
1138
|
+
suite can sum the rendered Unicode code points and require the sum to equal `tokenCount`. A summary substitution''s
|
|
1139
|
+
entry names its `context.summarized` event and renders the summary text.
|
|
1140
|
+
|
|
1141
|
+
|
|
1142
|
+
Served in test mode only; `rendered` MUST NOT carry secret material (SR-1). The ceiling is advertise-and-attest: the
|
|
1143
|
+
seam proves the declared accounting is consistent and bounded, not that nothing else reached the model. A turn past
|
|
1144
|
+
the run''s last answers `400`/`422`; an unwired seam answers `404`/`405`.'
|
|
1230
1145
|
parameters:
|
|
1231
1146
|
- name: runId
|
|
1232
1147
|
in: query
|
|
@@ -1312,28 +1227,13 @@ components:
|
|
|
1312
1227
|
type: http
|
|
1313
1228
|
scheme: bearer
|
|
1314
1229
|
bearerFormat: API key
|
|
1315
|
-
description:
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
(`manifest:read`, `runs:create`, `runs:read`, `runs:cancel`,
|
|
1320
|
-
|
|
1321
|
-
`artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`).
|
|
1322
|
-
|
|
1323
|
-
See `auth.md`.
|
|
1324
|
-
|
|
1325
|
-
'
|
|
1230
|
+
description: OpenWOP API key. The format is implementation-defined; the reference implementation uses `hk_`/`hk_test_`
|
|
1231
|
+
prefixes. Each key carries one or more scopes from the canonical vocabulary (`manifest:read`, `runs:create`, `runs:read`,
|
|
1232
|
+
`runs:cancel`, `artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`). See `auth.md`.
|
|
1326
1233
|
OAuth2:
|
|
1327
1234
|
type: oauth2
|
|
1328
|
-
description: '
|
|
1329
|
-
|
|
1330
|
-
v2 `auth.lanes[].lane: "oauth2"`. Discovery is RFC 9728 Protected Resource
|
|
1331
|
-
|
|
1332
|
-
Metadata at the path-inserted well-known URI (`identity.md` §2.5).
|
|
1333
|
-
|
|
1334
|
-
Placeholder URLs.
|
|
1335
|
-
|
|
1336
|
-
'
|
|
1235
|
+
description: 'The OAuth 2.0 lane (`auth.lanes[].lane: "oauth2"`). Discovery is RFC 9728 Protected Resource Metadata
|
|
1236
|
+
at the path-inserted well-known URI (`identity.md` §2.5). The URLs are placeholders.'
|
|
1337
1237
|
flows:
|
|
1338
1238
|
clientCredentials:
|
|
1339
1239
|
tokenUrl: https://issuer.example/oauth2/token
|
|
@@ -1385,26 +1285,14 @@ components:
|
|
|
1385
1285
|
OpenIdConnect:
|
|
1386
1286
|
type: openIdConnect
|
|
1387
1287
|
openIdConnectUrl: https://issuer.example/.well-known/openid-configuration
|
|
1388
|
-
description: '
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`.
|
|
1393
|
-
|
|
1394
|
-
Placeholder URL.
|
|
1395
|
-
|
|
1396
|
-
'
|
|
1288
|
+
description: 'The OpenID Connect lane (`auth.lanes[].lane: "oidc"`). An ID token MAY be the bearer only when its `aud`
|
|
1289
|
+
equals the host''s configured audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`. The URL is a
|
|
1290
|
+
placeholder.'
|
|
1397
1291
|
MutualTLS:
|
|
1398
1292
|
type: mutualTLS
|
|
1399
|
-
description: '
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
in no canonical requirement below: a host that requires it adds `MutualTLS: []`
|
|
1404
|
-
|
|
1405
|
-
inside each requirement object (AND).
|
|
1406
|
-
|
|
1407
|
-
'
|
|
1293
|
+
description: 'The mTLS lane (`auth.lanes[].lane: "mtls"`). mTLS is required *in addition to* a bearer, never instead
|
|
1294
|
+
of one, so it appears in no canonical requirement below. A host that requires it adds `MutualTLS: []` inside each
|
|
1295
|
+
requirement object (AND).'
|
|
1408
1296
|
parameters:
|
|
1409
1297
|
IdempotencyKey:
|
|
1410
1298
|
in: header
|
|
@@ -1413,15 +1301,8 @@ components:
|
|
|
1413
1301
|
schema:
|
|
1414
1302
|
type: string
|
|
1415
1303
|
maxLength: 255
|
|
1416
|
-
description: 'Per-mutation idempotency token (
|
|
1417
|
-
|
|
1418
|
-
Server caches `(tenantId, endpoint, key)` → response for ≥24h.
|
|
1419
|
-
|
|
1420
|
-
Duplicate requests return the cached response with header
|
|
1421
|
-
|
|
1422
|
-
`OpenWOP-Idempotent-Replay: true`.
|
|
1423
|
-
|
|
1424
|
-
'
|
|
1304
|
+
description: 'Per-mutation idempotency token (`idempotency.md` Layer 1). The server caches `(tenantId, endpoint, key)`
|
|
1305
|
+
→ response for ≥24h. A duplicate request returns the cached response with `OpenWOP-Idempotent-Replay: true`.'
|
|
1425
1306
|
WorkspacePath:
|
|
1426
1307
|
in: path
|
|
1427
1308
|
name: path
|
|
@@ -1429,13 +1310,8 @@ components:
|
|
|
1429
1310
|
schema:
|
|
1430
1311
|
type: string
|
|
1431
1312
|
pattern: ^[A-Za-z0-9][A-Za-z0-9._/-]{0,255}$
|
|
1432
|
-
description:
|
|
1433
|
-
|
|
1434
|
-
`/`-in-names; no `..`, no leading `/`. Matches
|
|
1435
|
-
|
|
1436
|
-
`workspace-file.schema.json#path`.
|
|
1437
|
-
|
|
1438
|
-
'
|
|
1313
|
+
description: Workspace-relative file path in a flat namespace that allows `/` in names; no `..` and no leading `/`.
|
|
1314
|
+
Matches `workspace-file.schema.json#path`.
|
|
1439
1315
|
WorkspacePrefix:
|
|
1440
1316
|
in: query
|
|
1441
1317
|
name: prefix
|
|
@@ -1443,7 +1319,7 @@ components:
|
|
|
1443
1319
|
schema:
|
|
1444
1320
|
type: string
|
|
1445
1321
|
maxLength: 256
|
|
1446
|
-
description:
|
|
1322
|
+
description: Optional prefix filter over the flat `path` namespace for `listWorkspaceFiles`.
|
|
1447
1323
|
WorkspaceVersion:
|
|
1448
1324
|
in: query
|
|
1449
1325
|
name: version
|
|
@@ -1451,11 +1327,8 @@ components:
|
|
|
1451
1327
|
schema:
|
|
1452
1328
|
type: integer
|
|
1453
1329
|
minimum: 1
|
|
1454
|
-
description: '
|
|
1455
|
-
|
|
1456
|
-
historical snapshot at this version. Absent = latest.
|
|
1457
|
-
|
|
1458
|
-
'
|
|
1330
|
+
description: 'When `capabilities.workspace.versioned: true`, requests the historical snapshot at this version. Absent
|
|
1331
|
+
means latest.'
|
|
1459
1332
|
IfMatch:
|
|
1460
1333
|
in: header
|
|
1461
1334
|
name: If-Match
|
|
@@ -1463,11 +1336,8 @@ components:
|
|
|
1463
1336
|
schema:
|
|
1464
1337
|
type: string
|
|
1465
1338
|
maxLength: 255
|
|
1466
|
-
description: '
|
|
1467
|
-
|
|
1468
|
-
A `PUT` carrying a stale `If-Match` returns `409 workspace_conflict`.
|
|
1469
|
-
|
|
1470
|
-
'
|
|
1339
|
+
description: 'Optimistic-concurrency token: the file''s current `etag`. A `PUT` carrying a stale `If-Match` returns
|
|
1340
|
+
`409 workspace_conflict`.'
|
|
1471
1341
|
PackName:
|
|
1472
1342
|
in: path
|
|
1473
1343
|
name: name
|
|
@@ -1490,8 +1360,8 @@ components:
|
|
|
1490
1360
|
description: Missing or invalid credential.
|
|
1491
1361
|
headers:
|
|
1492
1362
|
WWW-Authenticate:
|
|
1493
|
-
description:
|
|
1494
|
-
|
|
1363
|
+
description: A `Bearer` challenge. On a host with an oauth2 or oidc lane it carries `resource_metadata` and `error="invalid_token"`.
|
|
1364
|
+
Never sent on a non-disclosure 404.
|
|
1495
1365
|
schema:
|
|
1496
1366
|
type: string
|
|
1497
1367
|
content:
|
|
@@ -1502,8 +1372,8 @@ components:
|
|
|
1502
1372
|
description: Credential valid but lacks required scope or fails resource binding.
|
|
1503
1373
|
headers:
|
|
1504
1374
|
WWW-Authenticate:
|
|
1505
|
-
description:
|
|
1506
|
-
|
|
1375
|
+
description: On a scope refusal, `error="insufficient_scope"` with every required `scope`. Absent on a resource-binding
|
|
1376
|
+
403.
|
|
1507
1377
|
schema:
|
|
1508
1378
|
type: string
|
|
1509
1379
|
content:
|
|
@@ -1526,13 +1396,8 @@ components:
|
|
|
1526
1396
|
Error:
|
|
1527
1397
|
$ref: ../schemas/v2/error-envelope.schema.json
|
|
1528
1398
|
TestPackPublishRecord:
|
|
1529
|
-
description:
|
|
1530
|
-
|
|
1531
|
-
registry namespace (RFC 0025). Mirror of the production publish
|
|
1532
|
-
|
|
1399
|
+
description: Response body for a successful publish to the test-mode registry namespace. Mirrors the production publish
|
|
1533
1400
|
record returned by `PUT /v1/packs/{name}/-/{version}.tgz`.
|
|
1534
|
-
|
|
1535
|
-
'
|
|
1536
1401
|
type: object
|
|
1537
1402
|
required:
|
|
1538
1403
|
- name
|