@openwop/spec-artifacts 2.42.6 → 2.42.8
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 +70 -67
- package/api/seams-v2.yaml +238 -322
- package/api/v2/asyncapi.yaml +83 -113
- package/api/v2/openapi.yaml +408 -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 +4 -7
- package/schemas/v2/error-envelope.schema.json +144 -69
- package/spec/v1/alias-detectors.json +6 -0
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/deprecations.json +22 -0
- package/spec/v1/gaps.json +188 -1
- package/spec/v1/migrations.json +18 -0
- package/spec/v2/README.md +35 -37
- 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 +23 -14
- package/spec/v2/core/host-services.md +22 -5
- package/spec/v2/core/i18n.md +64 -0
- 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/portability.md +44 -0
- 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 +115 -50
- package/spec/v2/core/webhooks.md +61 -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 +26 -9
- package/spec/v2/declaration.schema.json +10 -0
- package/spec/v2/errors.json +121 -4
- 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 +544 -2
package/api/v2/openapi.yaml
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: OpenWOP v2 API
|
|
4
|
-
version: 2.42.
|
|
4
|
+
version: 2.42.8
|
|
5
5
|
summary: REST surface for declaring, executing, suspending, resuming, and observing multi-step workflows.
|
|
6
|
-
description:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
description: 'The OpenWOP v2 REST API. Paths are unversioned and served at the bare origin; a client selects a version with
|
|
7
|
+
the `OpenWOP-Version` header from the host''s `protocolVersions[]`. Conformance seams and test-mode operations are not
|
|
8
|
+
in this document: they are in `api/seams-v2.yaml`. Every non-standard header is named `OpenWOP-<Name>`. Retry timing is
|
|
9
|
+
carried only in `Retry-After`.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
Generated from `api/openapi.yaml` by `scripts/derive-v2-api.py`; do not edit.'
|
|
10
13
|
contact:
|
|
11
14
|
name: openwop spec working group
|
|
12
15
|
url: https://openwop.dev/spec/v1/
|
|
@@ -14,11 +17,11 @@ info:
|
|
|
14
17
|
name: Apache-2.0
|
|
15
18
|
identifier: Apache-2.0
|
|
16
19
|
externalDocs:
|
|
17
|
-
description:
|
|
20
|
+
description: OpenWOP specification (v1 corpus)
|
|
18
21
|
url: https://openwop.dev/spec/v1/
|
|
19
22
|
servers:
|
|
20
23
|
- url: https://{host}
|
|
21
|
-
description:
|
|
24
|
+
description: An OpenWOP server.
|
|
22
25
|
variables:
|
|
23
26
|
host:
|
|
24
27
|
default: api.example.com
|
|
@@ -33,11 +36,11 @@ tags:
|
|
|
33
36
|
- name: runs
|
|
34
37
|
description: Run lifecycle — create, read, stream, cancel, fork.
|
|
35
38
|
- name: agents
|
|
36
|
-
description: Manifest-agent inventory
|
|
37
|
-
|
|
39
|
+
description: Manifest-agent inventory. Read-only; gated on `capabilities.agents.manifestRuntime`. Dispatch uses the run
|
|
40
|
+
surface (`WorkflowNode.agent` + `POST /runs`).
|
|
38
41
|
- name: tools
|
|
39
|
-
description: Portable tool catalog
|
|
40
|
-
|
|
42
|
+
description: 'Portable tool catalog: a read-only `ToolDescriptor` projection across tool sources (node-pack, workflow, mcp,
|
|
43
|
+
connector, host-extension). Gated on `capabilities.toolCatalog`; scoped to the tools the caller is authorized to invoke.'
|
|
41
44
|
- name: hitl
|
|
42
45
|
description: Human-in-the-loop interrupts and approvals.
|
|
43
46
|
- name: artifacts
|
|
@@ -45,16 +48,16 @@ tags:
|
|
|
45
48
|
- name: webhooks
|
|
46
49
|
description: Subscribe to run events via outbound HTTP.
|
|
47
50
|
- name: triggers
|
|
48
|
-
description: Durable trigger-bridge subscriptions
|
|
51
|
+
description: Durable trigger-bridge subscriptions. The external-event create surface (`POST /trigger-subscriptions`) is
|
|
49
52
|
gated on `capabilities.triggerBridge.ingestion.registrationEndpoint`.
|
|
50
53
|
- name: audit
|
|
51
54
|
description: Audit-log integrity verification (gated on the `openwop-audit-log-integrity` profile).
|
|
52
55
|
- name: prompts
|
|
53
|
-
description: Prompt-template library
|
|
56
|
+
description: 'Prompt-template library: list, fetch, render, mutate. Gated on `capabilities.prompts.*`.'
|
|
54
57
|
- name: content
|
|
55
|
-
description: Localized authored content
|
|
58
|
+
description: 'Localized authored content: public delivery and tenant-scoped admin CRUD. Gated on `capabilities.content.supported`.'
|
|
56
59
|
- name: host
|
|
57
|
-
description: Host-capability resources
|
|
60
|
+
description: Host-capability resources, such as the agent workspace file store (gated on `capabilities.workspace.*`).
|
|
58
61
|
paths:
|
|
59
62
|
/.well-known/openwop:
|
|
60
63
|
get:
|
|
@@ -69,11 +72,11 @@ paths:
|
|
|
69
72
|
required: false
|
|
70
73
|
schema:
|
|
71
74
|
type: string
|
|
72
|
-
description:
|
|
73
|
-
`ETag`
|
|
74
|
-
|
|
75
|
-
§1.4).'
|
|
75
|
+
description: Conditional request on the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot).
|
|
76
|
+
A value matching the `ETag` the host sent MUST yield `304 Not Modified` with no body. The 304 carries `OpenWOP-Version`
|
|
77
|
+
like every response (versioning.md §1.4).
|
|
76
78
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
79
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
77
80
|
responses:
|
|
78
81
|
'200':
|
|
79
82
|
description: Capabilities object — see `capabilities.md`.
|
|
@@ -85,9 +88,8 @@ paths:
|
|
|
85
88
|
ETag:
|
|
86
89
|
schema:
|
|
87
90
|
type: string
|
|
88
|
-
description:
|
|
89
|
-
|
|
90
|
-
the bytes is non-conformant.'
|
|
91
|
+
description: Strong validator for the discovery document (capabilities.md §1). A v2 host MUST send it and MUST
|
|
92
|
+
honor `If-None-Match` with `304`. A host that changes semantics without changing the bytes is non-conformant.
|
|
91
93
|
OpenWOP-Version:
|
|
92
94
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
93
95
|
content:
|
|
@@ -95,7 +97,7 @@ paths:
|
|
|
95
97
|
schema:
|
|
96
98
|
$ref: '#/components/schemas/Capabilities'
|
|
97
99
|
'304':
|
|
98
|
-
description:
|
|
100
|
+
description: '`If-None-Match` matched the current `ETag`; the body is unchanged.'
|
|
99
101
|
headers:
|
|
100
102
|
OpenWOP-Version:
|
|
101
103
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
@@ -136,6 +138,7 @@ paths:
|
|
|
136
138
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
137
139
|
parameters:
|
|
138
140
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
141
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
139
142
|
/workflows/{workflowId}:
|
|
140
143
|
get:
|
|
141
144
|
tags:
|
|
@@ -152,6 +155,7 @@ paths:
|
|
|
152
155
|
parameters:
|
|
153
156
|
- $ref: '#/components/parameters/WorkflowId'
|
|
154
157
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
158
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
155
159
|
responses:
|
|
156
160
|
'200':
|
|
157
161
|
description: Workflow definition.
|
|
@@ -189,26 +193,18 @@ paths:
|
|
|
189
193
|
type: string
|
|
190
194
|
enum:
|
|
191
195
|
- enforce
|
|
192
|
-
description: When set,
|
|
196
|
+
description: When set, the host's cross-host claim system rejects a duplicate `(tenantId, scopeId)` pair with `409
|
|
197
|
+
Conflict`.
|
|
193
198
|
- in: header
|
|
194
199
|
name: OpenWOP-Force-Engine-Version
|
|
195
200
|
schema:
|
|
196
201
|
type: integer
|
|
197
202
|
minimum: 0
|
|
198
|
-
description:
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
advertised `Capabilities.testing.forceEngineVersionRange`). Used by the
|
|
203
|
-
|
|
204
|
-
conformance suite to verify version-negotiation fold-best-effort tolerance
|
|
205
|
-
|
|
206
|
-
across the spec''s forward-compat matrix. Servers MUST reject on production
|
|
207
|
-
|
|
208
|
-
API keys with `403 force_engine_version_forbidden`. Closes F5.
|
|
209
|
-
|
|
210
|
-
'
|
|
203
|
+
description: Test keys only. The server emits this run's events as if it ran the given engine version, which must
|
|
204
|
+
be within `Capabilities.testing.forceEngineVersionRange`. Servers MUST reject it on production API keys with `403
|
|
205
|
+
force_engine_version_forbidden`.
|
|
211
206
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
207
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
212
208
|
requestBody:
|
|
213
209
|
required: true
|
|
214
210
|
content:
|
|
@@ -228,10 +224,10 @@ paths:
|
|
|
228
224
|
$ref: ../../schemas/v2/residency.schema.json
|
|
229
225
|
tenantId:
|
|
230
226
|
type: string
|
|
231
|
-
description: Tenant
|
|
227
|
+
description: Tenant scope. A host typically derives it from the API key.
|
|
232
228
|
scopeId:
|
|
233
229
|
type: string
|
|
234
|
-
description: Opaque correlation ID for `
|
|
230
|
+
description: Opaque correlation ID for `OpenWOP-Dedup`.
|
|
235
231
|
callbackUrl:
|
|
236
232
|
type: string
|
|
237
233
|
format: uri
|
|
@@ -240,29 +236,18 @@ paths:
|
|
|
240
236
|
type: string
|
|
241
237
|
enum:
|
|
242
238
|
- eval
|
|
243
|
-
description: '
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
`agentId`, emits the content-free `eval.*` family, and terminates
|
|
248
|
-
|
|
249
|
-
with an `EvalSummary` readable via `GET /v1/runs/{runId}/eval-summary`.
|
|
250
|
-
|
|
251
|
-
Capability-gated on `capabilities.agents.evalSuite.supported`; a
|
|
252
|
-
|
|
253
|
-
host that omits it rejects `mode: "eval"` with 501. Omit for a
|
|
254
|
-
|
|
255
|
-
normal workflow run.
|
|
256
|
-
|
|
257
|
-
'
|
|
239
|
+
description: 'Set to `eval` to run an eval-suite projection instead of a workflow run: the host runs the
|
|
240
|
+
`evalSuiteRef` against `agentId`, emits the content-free `eval.*` family, and terminates with an `EvalSummary`
|
|
241
|
+
readable at `GET /runs/{runId}/eval-summary`. Gated on `capabilities.agents.evalSuite.supported`; a
|
|
242
|
+
host that omits it rejects `mode: "eval"` with 501. Omit for a normal workflow run.'
|
|
258
243
|
evalSuiteRef:
|
|
259
244
|
type: string
|
|
260
245
|
minLength: 1
|
|
261
|
-
description:
|
|
246
|
+
description: URI of the `AgentEvalSuite` to run. Required when mode is `eval`.
|
|
262
247
|
agentId:
|
|
263
248
|
type: string
|
|
264
249
|
minLength: 1
|
|
265
|
-
description:
|
|
250
|
+
description: The manifest agent the eval suite targets. Required when mode is `eval`.
|
|
266
251
|
if:
|
|
267
252
|
properties:
|
|
268
253
|
mode:
|
|
@@ -319,7 +304,7 @@ paths:
|
|
|
319
304
|
'403':
|
|
320
305
|
$ref: '#/components/responses/Forbidden'
|
|
321
306
|
'409':
|
|
322
|
-
description:
|
|
307
|
+
description: An `OpenWOP-Dedup` collision, or a concurrent `Idempotency-Key` collision.
|
|
323
308
|
headers:
|
|
324
309
|
Retry-After:
|
|
325
310
|
schema:
|
|
@@ -337,11 +322,13 @@ paths:
|
|
|
337
322
|
tags:
|
|
338
323
|
- runs
|
|
339
324
|
operationId: listRuns
|
|
340
|
-
summary:
|
|
341
|
-
description: '
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
325
|
+
summary: List the caller's runs, newest first
|
|
326
|
+
description: 'Lists only runs whose tenant segment is the caller''s; every `runId` is tenant-bound (identity.md §5).
|
|
327
|
+
The list is cursor-paginated. Gated on the `runList` family: a host that does not advertise it answers `404 not_found`.
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
`limit` is honoured up to `runList.maxPageSize`. `cursor` is opaque; a cursor the host did not mint is `400 validation_error`.
|
|
331
|
+
`workflowId` and `status` are exact-match filters when `runList.filters` names them; an unadvertised filter is ignored.'
|
|
345
332
|
parameters:
|
|
346
333
|
- name: limit
|
|
347
334
|
in: query
|
|
@@ -349,7 +336,7 @@ paths:
|
|
|
349
336
|
schema:
|
|
350
337
|
type: integer
|
|
351
338
|
minimum: 1
|
|
352
|
-
description: Page size; clamped to runList.maxPageSize
|
|
339
|
+
description: Page size; clamped to `runList.maxPageSize`.
|
|
353
340
|
- name: cursor
|
|
354
341
|
in: query
|
|
355
342
|
required: false
|
|
@@ -357,13 +344,13 @@ paths:
|
|
|
357
344
|
type: string
|
|
358
345
|
minLength: 1
|
|
359
346
|
maxLength: 2048
|
|
360
|
-
description: Opaque cursor from a previous page's nextCursor
|
|
347
|
+
description: Opaque cursor from a previous page's `nextCursor`.
|
|
361
348
|
- name: workflowId
|
|
362
349
|
in: query
|
|
363
350
|
required: false
|
|
364
351
|
schema:
|
|
365
352
|
$ref: ../../schemas/v2/ids.schema.json#/$defs/workflowId
|
|
366
|
-
description: Exact-match filter
|
|
353
|
+
description: Exact-match filter, when advertised in `runList.filters`.
|
|
367
354
|
- name: status
|
|
368
355
|
in: query
|
|
369
356
|
required: false
|
|
@@ -380,8 +367,9 @@ paths:
|
|
|
380
367
|
- failed
|
|
381
368
|
- cancelling
|
|
382
369
|
- cancelled
|
|
383
|
-
description: Exact-match filter
|
|
370
|
+
description: Exact-match filter, when advertised in `runList.filters`.
|
|
384
371
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
372
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
385
373
|
responses:
|
|
386
374
|
'200':
|
|
387
375
|
description: One page of the caller's runs.
|
|
@@ -425,11 +413,11 @@ paths:
|
|
|
425
413
|
required: false
|
|
426
414
|
schema:
|
|
427
415
|
type: string
|
|
428
|
-
description:
|
|
429
|
-
`ETag`
|
|
430
|
-
|
|
431
|
-
§1.4).'
|
|
416
|
+
description: Conditional request on the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot).
|
|
417
|
+
A value matching the `ETag` the host sent MUST yield `304 Not Modified` with no body. The 304 carries `OpenWOP-Version`
|
|
418
|
+
like every response (versioning.md §1.4).
|
|
432
419
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
420
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
433
421
|
responses:
|
|
434
422
|
'200':
|
|
435
423
|
description: Projected run state.
|
|
@@ -437,13 +425,8 @@ paths:
|
|
|
437
425
|
ETag:
|
|
438
426
|
schema:
|
|
439
427
|
type: string
|
|
440
|
-
description:
|
|
441
|
-
|
|
442
|
-
persisted event-log sequence number; changes on every
|
|
443
|
-
|
|
444
|
-
observable state transition, stable while none occurs.
|
|
445
|
-
|
|
446
|
-
'
|
|
428
|
+
description: Strong validator derived from the run's latest persisted event-log sequence number. It changes
|
|
429
|
+
on every observable state transition and is stable while none occurs.
|
|
447
430
|
Content-Encoding:
|
|
448
431
|
required: false
|
|
449
432
|
schema:
|
|
@@ -452,13 +435,8 @@ paths:
|
|
|
452
435
|
- gzip
|
|
453
436
|
- br
|
|
454
437
|
- zstd
|
|
455
|
-
description: '
|
|
456
|
-
|
|
457
|
-
from `Accept-Encoding`; pairs with `Vary: Accept-Encoding`.
|
|
458
|
-
|
|
459
|
-
The decoded body is byte-identical to the identity body.
|
|
460
|
-
|
|
461
|
-
'
|
|
438
|
+
description: 'Present only when the host negotiated compression from `Accept-Encoding`; pairs with `Vary: Accept-Encoding`.
|
|
439
|
+
The decoded body is byte-identical to the identity body.'
|
|
462
440
|
OpenWOP-Version:
|
|
463
441
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
464
442
|
content:
|
|
@@ -466,7 +444,7 @@ paths:
|
|
|
466
444
|
schema:
|
|
467
445
|
$ref: '#/components/schemas/RunSnapshot'
|
|
468
446
|
'304':
|
|
469
|
-
description:
|
|
447
|
+
description: 'Not Modified: `If-None-Match` matched the current `ETag`. Empty body.'
|
|
470
448
|
headers:
|
|
471
449
|
OpenWOP-Version:
|
|
472
450
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
@@ -497,32 +475,24 @@ paths:
|
|
|
497
475
|
type: string
|
|
498
476
|
pattern: ^(values|(updates|messages|debug)(,(updates|messages|debug))*)$
|
|
499
477
|
default: updates
|
|
500
|
-
description:
|
|
478
|
+
description: A stream mode from the closed set, or a comma-separated combination of them. `values` never combines.
|
|
501
479
|
- in: query
|
|
502
480
|
name: bufferMs
|
|
503
481
|
schema:
|
|
504
482
|
type: integer
|
|
505
483
|
minimum: 0
|
|
506
484
|
maximum: 5000
|
|
507
|
-
description: 'Optional batching hint
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
trigger fires — terminal events, suspensions, connection close)
|
|
512
|
-
|
|
513
|
-
and emits a single SSE event with `event: batch` and `data:` as
|
|
514
|
-
|
|
515
|
-
a JSON array of `RunEventDoc`. Range 0..5000; `0` = no buffering.
|
|
516
|
-
|
|
517
|
-
See `stream-modes.md` §Aggregation hint.
|
|
518
|
-
|
|
519
|
-
'
|
|
485
|
+
description: 'Optional batching hint. When set, the server accumulates events for up to N ms, or until a forced-flush
|
|
486
|
+
trigger fires (terminal events, suspensions, connection close), and emits a single SSE event with `event: batch`
|
|
487
|
+
and `data:` as a JSON array of `RunEventDoc`. Range 0..5000; `0` means no buffering. See `stream-modes.md` §Aggregation
|
|
488
|
+
hint.'
|
|
520
489
|
- in: header
|
|
521
490
|
name: Last-Event-ID
|
|
522
491
|
schema:
|
|
523
492
|
type: string
|
|
524
493
|
description: Resume from sequence after this ID.
|
|
525
494
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
495
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
526
496
|
responses:
|
|
527
497
|
'200':
|
|
528
498
|
description: SSE stream. Auto-closes on terminal event. Keep-alive comments every 30s.
|
|
@@ -569,8 +539,8 @@ paths:
|
|
|
569
539
|
schema:
|
|
570
540
|
type: integer
|
|
571
541
|
minimum: 0
|
|
572
|
-
description:
|
|
573
|
-
0).
|
|
542
|
+
description: Return events with `sequence > afterSequence`. Omitted, the poll starts from the first event (sequence
|
|
543
|
+
0).
|
|
574
544
|
- in: query
|
|
575
545
|
name: timeout
|
|
576
546
|
schema:
|
|
@@ -580,9 +550,10 @@ paths:
|
|
|
580
550
|
default: 30
|
|
581
551
|
description: Seconds to wait for new events. Max 60.
|
|
582
552
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
553
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
583
554
|
responses:
|
|
584
555
|
'200':
|
|
585
|
-
description: Events
|
|
556
|
+
description: Events after `afterSequence`.
|
|
586
557
|
content:
|
|
587
558
|
application/json:
|
|
588
559
|
schema:
|
|
@@ -604,8 +575,7 @@ paths:
|
|
|
604
575
|
lastSequence:
|
|
605
576
|
type: integer
|
|
606
577
|
minimum: -1
|
|
607
|
-
description: The highest sequence in the log at the time of the response
|
|
608
|
-
is empty.
|
|
578
|
+
description: The highest sequence in the log at the time of the response; -1 when the log is empty.
|
|
609
579
|
status:
|
|
610
580
|
type: string
|
|
611
581
|
isTerminal:
|
|
@@ -636,6 +606,7 @@ paths:
|
|
|
636
606
|
- $ref: '#/components/parameters/RunId'
|
|
637
607
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
638
608
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
609
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
639
610
|
requestBody:
|
|
640
611
|
content:
|
|
641
612
|
application/json:
|
|
@@ -672,7 +643,7 @@ paths:
|
|
|
672
643
|
post:
|
|
673
644
|
tags:
|
|
674
645
|
- runs
|
|
675
|
-
summary: Record a non-blocking quality annotation on a run
|
|
646
|
+
summary: Record a non-blocking quality annotation on a run.
|
|
676
647
|
operationId: createAnnotation
|
|
677
648
|
security:
|
|
678
649
|
- ApiKeyAuth:
|
|
@@ -685,6 +656,7 @@ paths:
|
|
|
685
656
|
- $ref: '#/components/parameters/RunId'
|
|
686
657
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
687
658
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
659
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
688
660
|
requestBody:
|
|
689
661
|
required: true
|
|
690
662
|
content:
|
|
@@ -710,7 +682,7 @@ paths:
|
|
|
710
682
|
'404':
|
|
711
683
|
$ref: '#/components/responses/NotFound'
|
|
712
684
|
'501':
|
|
713
|
-
description: Host does not advertise capabilities.feedback.supported
|
|
685
|
+
description: Host does not advertise `capabilities.feedback.supported`.
|
|
714
686
|
content:
|
|
715
687
|
application/json:
|
|
716
688
|
schema:
|
|
@@ -721,7 +693,7 @@ paths:
|
|
|
721
693
|
get:
|
|
722
694
|
tags:
|
|
723
695
|
- runs
|
|
724
|
-
summary: List the annotations recorded on a run
|
|
696
|
+
summary: List the annotations recorded on a run.
|
|
725
697
|
operationId: listAnnotations
|
|
726
698
|
security:
|
|
727
699
|
- ApiKeyAuth:
|
|
@@ -733,6 +705,7 @@ paths:
|
|
|
733
705
|
parameters:
|
|
734
706
|
- $ref: '#/components/parameters/RunId'
|
|
735
707
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
708
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
736
709
|
responses:
|
|
737
710
|
'200':
|
|
738
711
|
description: Annotations for the run (tenant-scoped).
|
|
@@ -758,7 +731,7 @@ paths:
|
|
|
758
731
|
'404':
|
|
759
732
|
$ref: '#/components/responses/NotFound'
|
|
760
733
|
'501':
|
|
761
|
-
description: Host does not advertise capabilities.feedback.supported
|
|
734
|
+
description: Host does not advertise `capabilities.feedback.supported`.
|
|
762
735
|
content:
|
|
763
736
|
application/json:
|
|
764
737
|
schema:
|
|
@@ -770,20 +743,11 @@ paths:
|
|
|
770
743
|
post:
|
|
771
744
|
tags:
|
|
772
745
|
- triggers
|
|
773
|
-
summary: Register an external-event trigger subscription
|
|
774
|
-
description:
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
verification policy (RFC 0099 §F.2). The `workflowId` MUST resolve under
|
|
779
|
-
|
|
780
|
-
the caller''s RFC 0048 owner triple. The response carries the created
|
|
781
|
-
|
|
782
|
-
TriggerSubscription plus a source-specific `binding`; the binding
|
|
783
|
-
|
|
784
|
-
secret/URL is returned ONCE and is not re-fetchable in cleartext.
|
|
785
|
-
|
|
786
|
-
'
|
|
746
|
+
summary: Register an external-event trigger subscription.
|
|
747
|
+
description: Creates an external-event (`webhook`/`email`/`form`) TriggerSubscription bound to a workflow, with a dedup
|
|
748
|
+
config and a source-authenticity verification policy. The `workflowId` MUST resolve under the caller's owner triple.
|
|
749
|
+
The response carries the created TriggerSubscription plus a source-specific `binding`; the binding secret or URL is
|
|
750
|
+
returned once and cannot be re-fetched in cleartext.
|
|
787
751
|
operationId: createTriggerSubscription
|
|
788
752
|
security:
|
|
789
753
|
- ApiKeyAuth:
|
|
@@ -795,6 +759,7 @@ paths:
|
|
|
795
759
|
parameters:
|
|
796
760
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
797
761
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
762
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
798
763
|
requestBody:
|
|
799
764
|
required: true
|
|
800
765
|
content:
|
|
@@ -817,15 +782,9 @@ paths:
|
|
|
817
782
|
$ref: ../../schemas/v2/trigger-subscription.schema.json
|
|
818
783
|
binding:
|
|
819
784
|
type: object
|
|
820
|
-
description: 'Source-specific binding the caller needs to wire the external
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
`email`: `{ ingestAddress }`; for `form`: `{ ingestUrl }`. The
|
|
825
|
-
|
|
826
|
-
secret is returned once at creation (SR-1).
|
|
827
|
-
|
|
828
|
-
'
|
|
785
|
+
description: 'Source-specific binding the caller needs to wire the external source. For `webhook`: `{
|
|
786
|
+
ingestUrl, secretFingerprint }`; for `email`: `{ ingestAddress }`; for `form`: `{ ingestUrl }`. The
|
|
787
|
+
secret is returned once, at creation (SR-1).'
|
|
829
788
|
additionalProperties: true
|
|
830
789
|
properties:
|
|
831
790
|
ingestUrl:
|
|
@@ -846,7 +805,7 @@ paths:
|
|
|
846
805
|
'403':
|
|
847
806
|
$ref: '#/components/responses/Forbidden'
|
|
848
807
|
'501':
|
|
849
|
-
description: Host does not advertise capabilities.triggerBridge.ingestion.registrationEndpoint
|
|
808
|
+
description: Host does not advertise `capabilities.triggerBridge.ingestion.registrationEndpoint`.
|
|
850
809
|
content:
|
|
851
810
|
application/json:
|
|
852
811
|
schema:
|
|
@@ -859,32 +818,19 @@ paths:
|
|
|
859
818
|
tags:
|
|
860
819
|
- content
|
|
861
820
|
security: []
|
|
862
|
-
summary: Deliver a published content page resolved for the negotiated locale
|
|
863
|
-
description: '
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
`content.baseLocale`), applies the per-section field merge
|
|
868
|
-
|
|
869
|
-
(`localized-content.md` §C), and returns the already-merged sections in
|
|
870
|
-
|
|
871
|
-
render order. Sets `Content-Language` to the locale used,
|
|
821
|
+
summary: Deliver a published content page resolved for the negotiated locale.
|
|
822
|
+
description: 'Returns the published page `slug` for the locale negotiated from `Accept-Language`, with its sections
|
|
823
|
+
already merged, in render order. Locale fallback follows i18n.md: q-value order, then language family, then `content.baseLocale`.
|
|
824
|
+
Sections are merged field by field (`localized-content.md` §C).
|
|
872
825
|
|
|
873
|
-
`Vary: Accept-Language, Accept-Encoding`, and
|
|
874
826
|
|
|
875
|
-
`
|
|
827
|
+
The response sets `Content-Language` to the locale used, `Vary: Accept-Language, Accept-Encoding`, and `Cache-Control:
|
|
828
|
+
public, max-age=300, stale-while-revalidate=3600`. Only `status: "published"` content is served.
|
|
876
829
|
|
|
877
|
-
Serves `status: "published"` content only. Tenant is host-resolved
|
|
878
830
|
|
|
879
|
-
(`localized-content.md` §F): credential
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
resolved tenant returns the same `404` as a nonexistent slug (no
|
|
884
|
-
|
|
885
|
-
cross-tenant enumeration).
|
|
886
|
-
|
|
887
|
-
'
|
|
831
|
+
The tenant is host-resolved (`localized-content.md` §F): from the credential when authenticated, host-defined (for
|
|
832
|
+
example by domain) when anonymous. A `slug` absent for the resolved tenant returns the same `404` as a nonexistent
|
|
833
|
+
slug, so tenants cannot be enumerated.'
|
|
888
834
|
operationId: getContentPage
|
|
889
835
|
parameters:
|
|
890
836
|
- name: slug
|
|
@@ -899,8 +845,10 @@ paths:
|
|
|
899
845
|
required: false
|
|
900
846
|
schema:
|
|
901
847
|
type: string
|
|
902
|
-
description: BCP-47 preference list; authoritative for locale selection (i18n.md). A malformed value MUST NOT
|
|
848
|
+
description: BCP-47 preference list; authoritative for locale selection (i18n.md). A malformed value MUST NOT produce
|
|
849
|
+
a 400.
|
|
903
850
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
851
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
904
852
|
responses:
|
|
905
853
|
'200':
|
|
906
854
|
description: The resolved, published page for the negotiated locale.
|
|
@@ -918,7 +866,7 @@ paths:
|
|
|
918
866
|
'404':
|
|
919
867
|
$ref: '#/components/responses/NotFound'
|
|
920
868
|
'501':
|
|
921
|
-
description: Host does not advertise capabilities.content.supported
|
|
869
|
+
description: Host does not advertise `capabilities.content.supported`.
|
|
922
870
|
content:
|
|
923
871
|
application/json:
|
|
924
872
|
schema:
|
|
@@ -929,28 +877,15 @@ paths:
|
|
|
929
877
|
delete:
|
|
930
878
|
tags:
|
|
931
879
|
- content
|
|
932
|
-
summary: Delete a content page (
|
|
933
|
-
description: '
|
|
934
|
-
|
|
935
|
-
the admin CRUD operations: tenant-scoped, requires `content.write`, and
|
|
936
|
-
|
|
937
|
-
removes the page with its sections and every locale overlay. The path
|
|
938
|
-
|
|
939
|
-
segment is the page''s **`pageId`**, not its slug. It shares this path
|
|
940
|
-
|
|
941
|
-
item with public delivery, which addresses the same segment by `slug`,
|
|
880
|
+
summary: Delete a content page (admin).
|
|
881
|
+
description: 'Deletes a page with its sections and every locale overlay: the `DELETE …/content/pages/{pageId}` admin
|
|
882
|
+
operation of `localized-content.md` §D. Tenant-scoped; requires `content.write`.
|
|
942
883
|
|
|
943
|
-
because OpenAPI 3.1 treats two templates that differ only in the
|
|
944
884
|
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
delivery''s name
|
|
948
|
-
|
|
949
|
-
caller''s tenant returns the same `404` as a nonexistent one
|
|
950
|
-
|
|
951
|
-
(`localized-content.md` §F, no cross-tenant enumeration).
|
|
952
|
-
|
|
953
|
-
'
|
|
885
|
+
The path segment is the page''s `pageId`, not its slug. The operation shares this path item with public delivery,
|
|
886
|
+
which addresses the same segment by `slug`, and OpenAPI 3.1 forbids two templates that differ only in parameter name,
|
|
887
|
+
so the parameter keeps delivery''s name. A `pageId` absent for the caller''s tenant returns the same `404` as a nonexistent
|
|
888
|
+
one (`localized-content.md` §F), so tenants cannot be enumerated.'
|
|
954
889
|
operationId: deleteContentPage
|
|
955
890
|
security:
|
|
956
891
|
- ApiKeyAuth:
|
|
@@ -966,8 +901,10 @@ paths:
|
|
|
966
901
|
schema:
|
|
967
902
|
type: string
|
|
968
903
|
minLength: 1
|
|
969
|
-
description: For this operation, the page's `pageId
|
|
904
|
+
description: For this operation, the page's `pageId`, not its slug; the operation description explains the shared
|
|
905
|
+
name.
|
|
970
906
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
907
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
971
908
|
responses:
|
|
972
909
|
'204':
|
|
973
910
|
description: The page, its sections and its locale overlays were deleted.
|
|
@@ -984,12 +921,8 @@ paths:
|
|
|
984
921
|
get:
|
|
985
922
|
tags:
|
|
986
923
|
- content
|
|
987
|
-
summary: List content pages for the caller's tenant (
|
|
988
|
-
description:
|
|
989
|
-
|
|
990
|
-
principal with `content.read` scope.
|
|
991
|
-
|
|
992
|
-
'
|
|
924
|
+
summary: List content pages for the caller's tenant (admin).
|
|
925
|
+
description: Tenant-scoped admin listing of pages, draft and published. Requires a principal with `content.read` scope.
|
|
993
926
|
operationId: listContentPages
|
|
994
927
|
security:
|
|
995
928
|
- ApiKeyAuth:
|
|
@@ -1015,7 +948,7 @@ paths:
|
|
|
1015
948
|
'403':
|
|
1016
949
|
$ref: '#/components/responses/Forbidden'
|
|
1017
950
|
'501':
|
|
1018
|
-
description: Host does not advertise capabilities.content.supported
|
|
951
|
+
description: Host does not advertise `capabilities.content.supported`.
|
|
1019
952
|
content:
|
|
1020
953
|
application/json:
|
|
1021
954
|
schema:
|
|
@@ -1025,10 +958,11 @@ paths:
|
|
|
1025
958
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1026
959
|
parameters:
|
|
1027
960
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
961
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1028
962
|
post:
|
|
1029
963
|
tags:
|
|
1030
964
|
- content
|
|
1031
|
-
summary: Create a content page (
|
|
965
|
+
summary: Create a content page (admin).
|
|
1032
966
|
description: Tenant-scoped page creation. Requires `content.write` scope.
|
|
1033
967
|
operationId: createContentPage
|
|
1034
968
|
security:
|
|
@@ -1055,7 +989,7 @@ paths:
|
|
|
1055
989
|
OpenWOP-Version:
|
|
1056
990
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1057
991
|
'400':
|
|
1058
|
-
description: Invalid request (
|
|
992
|
+
description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
|
|
1059
993
|
content:
|
|
1060
994
|
application/json:
|
|
1061
995
|
schema:
|
|
@@ -1069,18 +1003,14 @@ paths:
|
|
|
1069
1003
|
$ref: '#/components/responses/Forbidden'
|
|
1070
1004
|
parameters:
|
|
1071
1005
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1006
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1072
1007
|
/content/pages/{pageId}/sections/{sectionId}:
|
|
1073
1008
|
put:
|
|
1074
1009
|
tags:
|
|
1075
1010
|
- content
|
|
1076
|
-
summary: Upsert a section's base or per-locale fields (
|
|
1077
|
-
description:
|
|
1078
|
-
|
|
1079
|
-
section''s base `data`; any other (case-canonical BCP 47 subset, RFC 0206) locale upserts
|
|
1080
|
-
|
|
1081
|
-
`localizations[locale]`. Tenant-scoped; requires `content.write`.
|
|
1082
|
-
|
|
1083
|
-
'
|
|
1011
|
+
summary: Upsert a section's base or per-locale fields (admin).
|
|
1012
|
+
description: Locale-targeted write. `locale == content.baseLocale` upserts the section's base `data`; any other locale
|
|
1013
|
+
(case-canonical BCP 47 subset) upserts `localizations[locale]`. Tenant-scoped; requires `content.write`.
|
|
1084
1014
|
operationId: putContentSection
|
|
1085
1015
|
security:
|
|
1086
1016
|
- ApiKeyAuth:
|
|
@@ -1103,6 +1033,7 @@ paths:
|
|
|
1103
1033
|
type: string
|
|
1104
1034
|
minLength: 1
|
|
1105
1035
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1036
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1106
1037
|
requestBody:
|
|
1107
1038
|
required: true
|
|
1108
1039
|
content:
|
|
@@ -1117,7 +1048,7 @@ paths:
|
|
|
1117
1048
|
locale:
|
|
1118
1049
|
type: string
|
|
1119
1050
|
pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
|
|
1120
|
-
description: Target locale
|
|
1051
|
+
description: Target locale. `baseLocale` upserts `data`; any other locale upserts `localizations[locale]`.
|
|
1121
1052
|
data:
|
|
1122
1053
|
type: object
|
|
1123
1054
|
additionalProperties: true
|
|
@@ -1133,7 +1064,7 @@ paths:
|
|
|
1133
1064
|
OpenWOP-Version:
|
|
1134
1065
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1135
1066
|
'400':
|
|
1136
|
-
description: Invalid request (
|
|
1067
|
+
description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
|
|
1137
1068
|
content:
|
|
1138
1069
|
application/json:
|
|
1139
1070
|
schema:
|
|
@@ -1151,7 +1082,7 @@ paths:
|
|
|
1151
1082
|
get:
|
|
1152
1083
|
tags:
|
|
1153
1084
|
- content
|
|
1154
|
-
summary: Read the tenant's content language settings (
|
|
1085
|
+
summary: Read the tenant's content language settings (admin).
|
|
1155
1086
|
description: Tenant-scoped read of `{ baseLocale, supportedLocales, autoTranslateOnPublish }`. Requires `content.read`.
|
|
1156
1087
|
operationId: getContentSettings
|
|
1157
1088
|
security:
|
|
@@ -1176,7 +1107,7 @@ paths:
|
|
|
1176
1107
|
'403':
|
|
1177
1108
|
$ref: '#/components/responses/Forbidden'
|
|
1178
1109
|
'501':
|
|
1179
|
-
description: Host does not advertise capabilities.content.supported
|
|
1110
|
+
description: Host does not advertise `capabilities.content.supported`.
|
|
1180
1111
|
content:
|
|
1181
1112
|
application/json:
|
|
1182
1113
|
schema:
|
|
@@ -1186,15 +1117,13 @@ paths:
|
|
|
1186
1117
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1187
1118
|
parameters:
|
|
1188
1119
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1120
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1189
1121
|
put:
|
|
1190
1122
|
tags:
|
|
1191
1123
|
- content
|
|
1192
|
-
summary: Update the tenant's content language settings (
|
|
1193
|
-
description:
|
|
1194
|
-
|
|
1195
|
-
supportedLocales` MUST hold (else `400`). Requires `content.write`.
|
|
1196
|
-
|
|
1197
|
-
'
|
|
1124
|
+
summary: Update the tenant's content language settings (admin).
|
|
1125
|
+
description: Tenant-scoped settings update. The invariant `baseLocale ∉ supportedLocales` MUST hold, else `400`. Requires
|
|
1126
|
+
`content.write`.
|
|
1198
1127
|
operationId: putContentSettings
|
|
1199
1128
|
security:
|
|
1200
1129
|
- ApiKeyAuth:
|
|
@@ -1220,7 +1149,7 @@ paths:
|
|
|
1220
1149
|
OpenWOP-Version:
|
|
1221
1150
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1222
1151
|
'400':
|
|
1223
|
-
description: Invalid request (
|
|
1152
|
+
description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
|
|
1224
1153
|
content:
|
|
1225
1154
|
application/json:
|
|
1226
1155
|
schema:
|
|
@@ -1234,26 +1163,16 @@ paths:
|
|
|
1234
1163
|
$ref: '#/components/responses/Forbidden'
|
|
1235
1164
|
parameters:
|
|
1236
1165
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1166
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1237
1167
|
/runs:bulk-cancel:
|
|
1238
1168
|
post:
|
|
1239
1169
|
tags:
|
|
1240
1170
|
- runs
|
|
1241
1171
|
summary: Cancel a set of in-flight runs in a single request.
|
|
1242
|
-
description: '
|
|
1243
|
-
|
|
1244
|
-
a
|
|
1245
|
-
|
|
1246
|
-
independently. Returns `200` with a per-id results array even when
|
|
1247
|
-
|
|
1248
|
-
some individual cancellations fail; the top-level operation succeeds
|
|
1249
|
-
|
|
1250
|
-
when the request reached the host, regardless of per-id outcomes.
|
|
1251
|
-
|
|
1252
|
-
Hosts enforce a host-defined cap on the array length (RECOMMENDED
|
|
1253
|
-
|
|
1254
|
-
100); over-cap requests return `400 validation_error`.
|
|
1255
|
-
|
|
1256
|
-
'
|
|
1172
|
+
description: 'Accepts a non-empty array of runIds and cancels each one independently. Returns `200` with a per-id results
|
|
1173
|
+
array even when some cancellations fail: the operation succeeds when the request reached the host, whatever the per-id
|
|
1174
|
+
outcomes. Hosts enforce a host-defined cap on the array length (RECOMMENDED 100); an over-cap request returns `400
|
|
1175
|
+
validation_error`.'
|
|
1257
1176
|
operationId: bulkCancelRuns
|
|
1258
1177
|
security:
|
|
1259
1178
|
- ApiKeyAuth:
|
|
@@ -1265,6 +1184,7 @@ paths:
|
|
|
1265
1184
|
parameters:
|
|
1266
1185
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
1267
1186
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1187
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1268
1188
|
requestBody:
|
|
1269
1189
|
required: true
|
|
1270
1190
|
content:
|
|
@@ -1345,6 +1265,7 @@ paths:
|
|
|
1345
1265
|
- $ref: '#/components/parameters/RunId'
|
|
1346
1266
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
1347
1267
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1268
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1348
1269
|
requestBody:
|
|
1349
1270
|
required: true
|
|
1350
1271
|
content:
|
|
@@ -1357,15 +1278,9 @@ paths:
|
|
|
1357
1278
|
fromSeq:
|
|
1358
1279
|
type: integer
|
|
1359
1280
|
minimum: 0
|
|
1360
|
-
description: 'Inclusive
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
defaults to `0` (full re-execution from source-run start) per `replay.md`
|
|
1365
|
-
|
|
1366
|
-
§"Replay-mode defaults".
|
|
1367
|
-
|
|
1368
|
-
'
|
|
1281
|
+
description: 'Inclusive: events `< fromSeq` are fixed history and events `>= fromSeq` are re-executed. Required
|
|
1282
|
+
for `branch` (the branch point). Optional for `replay`, where it defaults to `0`, full re-execution from
|
|
1283
|
+
the start of the source run (`replay.md` §"Replay-mode defaults").'
|
|
1369
1284
|
mode:
|
|
1370
1285
|
type: string
|
|
1371
1286
|
enum:
|
|
@@ -1373,7 +1288,7 @@ paths:
|
|
|
1373
1288
|
- branch
|
|
1374
1289
|
runOptionsOverlay:
|
|
1375
1290
|
type: object
|
|
1376
|
-
description:
|
|
1291
|
+
description: '`branch` mode only: caller-supplied `RunOptions` to overlay.'
|
|
1377
1292
|
additionalProperties: false
|
|
1378
1293
|
responses:
|
|
1379
1294
|
'201':
|
|
@@ -1409,7 +1324,7 @@ paths:
|
|
|
1409
1324
|
OpenWOP-Version:
|
|
1410
1325
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1411
1326
|
'400':
|
|
1412
|
-
description: Invalid `fromSeq`, `replay` with non-empty `runOptionsOverlay`,
|
|
1327
|
+
description: Invalid `fromSeq`, `replay` with a non-empty `runOptionsOverlay`, and similar.
|
|
1413
1328
|
content:
|
|
1414
1329
|
application/json:
|
|
1415
1330
|
schema:
|
|
@@ -1424,7 +1339,7 @@ paths:
|
|
|
1424
1339
|
'404':
|
|
1425
1340
|
$ref: '#/components/responses/NotFound'
|
|
1426
1341
|
'422':
|
|
1427
|
-
description: '`fromSeq`
|
|
1342
|
+
description: '`fromSeq` names a sequence number that does not exist in the source run''s event log.'
|
|
1428
1343
|
content:
|
|
1429
1344
|
application/json:
|
|
1430
1345
|
schema:
|
|
@@ -1436,19 +1351,10 @@ paths:
|
|
|
1436
1351
|
get:
|
|
1437
1352
|
tags:
|
|
1438
1353
|
- runs
|
|
1439
|
-
summary:
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
`capabilities.multiAgent.executionModel.crossHostCausation.ancestryEndpointSupported: true`;
|
|
1444
|
-
|
|
1445
|
-
hosts that don''t advertise return 404 not_found. Clients walk the full
|
|
1446
|
-
|
|
1447
|
-
chain by following `parent.wellKnownUrl` per response, one hop at a
|
|
1448
|
-
|
|
1449
|
-
time.
|
|
1450
|
-
|
|
1451
|
-
'
|
|
1354
|
+
summary: Read a run's parent in the cross-host composition chain
|
|
1355
|
+
description: 'Returns the run''s immediate parent in the cross-host composition chain. Gated on `capabilities.multiAgent.executionModel.crossHostCausation.ancestryEndpointSupported:
|
|
1356
|
+
true`; a host that does not advertise it returns 404 not_found. Clients walk the full chain one hop at a time by following
|
|
1357
|
+
`parent.wellKnownUrl` in each response.'
|
|
1452
1358
|
operationId: getRunAncestry
|
|
1453
1359
|
security:
|
|
1454
1360
|
- ApiKeyAuth:
|
|
@@ -1460,11 +1366,10 @@ paths:
|
|
|
1460
1366
|
parameters:
|
|
1461
1367
|
- $ref: '#/components/parameters/RunId'
|
|
1462
1368
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1369
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1463
1370
|
responses:
|
|
1464
1371
|
'200':
|
|
1465
|
-
description: '
|
|
1466
|
-
|
|
1467
|
-
'
|
|
1372
|
+
description: 'The run''s immediate parent (`parent: null` for a top-level run).'
|
|
1468
1373
|
content:
|
|
1469
1374
|
application/json:
|
|
1470
1375
|
schema:
|
|
@@ -1477,15 +1382,8 @@ paths:
|
|
|
1477
1382
|
'403':
|
|
1478
1383
|
$ref: '#/components/responses/Forbidden'
|
|
1479
1384
|
'404':
|
|
1480
|
-
description: '
|
|
1481
|
-
|
|
1482
|
-
`crossHostCausation.ancestryEndpointSupported: true` and treats
|
|
1483
|
-
|
|
1484
|
-
the endpoint as absent. Clients can disambiguate by inspecting
|
|
1485
|
-
|
|
1486
|
-
the host''s discovery doc.
|
|
1487
|
-
|
|
1488
|
-
'
|
|
1385
|
+
description: 'The run does not exist, or the host does not advertise `crossHostCausation.ancestryEndpointSupported:
|
|
1386
|
+
true` and treats the endpoint as absent. Clients can tell the two apart from the host''s discovery document.'
|
|
1489
1387
|
content:
|
|
1490
1388
|
application/json:
|
|
1491
1389
|
schema:
|
|
@@ -1497,35 +1395,18 @@ paths:
|
|
|
1497
1395
|
get:
|
|
1498
1396
|
tags:
|
|
1499
1397
|
- agents
|
|
1500
|
-
summary:
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
`
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
whose node pins it via `WorkflowNode.agent` + `POST /v1/runs` (RFC 0072 §B).
|
|
1513
|
-
|
|
1514
|
-
RFC 0074 — the result is scoped to the authenticated principal''s owner
|
|
1515
|
-
|
|
1516
|
-
triple (RFC 0048). When `capabilities.agents.manifestRuntime.installScope`
|
|
1517
|
-
|
|
1518
|
-
is `''tenant''`, only the agents available to the caller''s tenant·workspace
|
|
1519
|
-
|
|
1520
|
-
are returned (an agent another workspace installed is absent, never
|
|
1521
|
-
|
|
1522
|
-
disclosed); when `''host''` (default) the inventory is host-global as in
|
|
1523
|
-
|
|
1524
|
-
RFC 0072. A `''tenant''`-scoped host MUST reject unauthenticated/unscoped
|
|
1525
|
-
|
|
1526
|
-
requests per its standard auth contract rather than fall back to a global list.
|
|
1527
|
-
|
|
1528
|
-
'
|
|
1398
|
+
summary: List installed manifest agents
|
|
1399
|
+
description: 'Lists the manifest agents installed in this host''s AgentRegistry. Gated on `capabilities.agents.manifestRuntime.supported:
|
|
1400
|
+
true`; a host that does not advertise it returns 404. The projection is read-only and never carries the system-prompt
|
|
1401
|
+
body, resolved handoff schemas, or credential material (SR-1). There is no dispatch endpoint: a manifest agent is
|
|
1402
|
+
invoked as a run whose node pins it with `WorkflowNode.agent` + `POST /runs`.
|
|
1403
|
+
|
|
1404
|
+
|
|
1405
|
+
The result is scoped to the authenticated principal''s owner triple. When `capabilities.agents.manifestRuntime.installScope`
|
|
1406
|
+
is `''tenant''`, only the agents available to the caller''s tenant and workspace are returned; an agent another workspace
|
|
1407
|
+
installed is absent, never disclosed. When it is `''host''` (the default), the inventory is host-global. A `''tenant''`-scoped
|
|
1408
|
+
host MUST reject unauthenticated or unscoped requests under its standard auth contract rather than fall back to a
|
|
1409
|
+
global list.'
|
|
1529
1410
|
operationId: listAgents
|
|
1530
1411
|
security:
|
|
1531
1412
|
- ApiKeyAuth:
|
|
@@ -1536,9 +1417,9 @@ paths:
|
|
|
1536
1417
|
- runs:read
|
|
1537
1418
|
responses:
|
|
1538
1419
|
'200':
|
|
1539
|
-
description:
|
|
1540
|
-
|
|
1541
|
-
§Per-agent cards).
|
|
1420
|
+
description: Installed manifest agents, sorted by `agentId`. When the host advertises `a2a.agentCards`, an entry
|
|
1421
|
+
the host routes a workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent's card (interop.md
|
|
1422
|
+
§Per-agent cards).
|
|
1542
1423
|
content:
|
|
1543
1424
|
application/json:
|
|
1544
1425
|
schema:
|
|
@@ -1551,11 +1432,7 @@ paths:
|
|
|
1551
1432
|
'403':
|
|
1552
1433
|
$ref: '#/components/responses/Forbidden'
|
|
1553
1434
|
'404':
|
|
1554
|
-
description:
|
|
1555
|
-
|
|
1556
|
-
treats the endpoint as absent.
|
|
1557
|
-
|
|
1558
|
-
'
|
|
1435
|
+
description: Host does not advertise `capabilities.agents.manifestRuntime` and treats the endpoint as absent.
|
|
1559
1436
|
content:
|
|
1560
1437
|
application/json:
|
|
1561
1438
|
schema:
|
|
@@ -1565,25 +1442,16 @@ paths:
|
|
|
1565
1442
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1566
1443
|
parameters:
|
|
1567
1444
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1445
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1568
1446
|
/agents/{agentId}:
|
|
1569
1447
|
get:
|
|
1570
1448
|
tags:
|
|
1571
1449
|
- agents
|
|
1572
|
-
summary:
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
authenticated principal''s owner triple (RFC 0048): on an
|
|
1579
|
-
|
|
1580
|
-
`installScope: ''tenant''` host an agent the caller''s workspace has not
|
|
1581
|
-
|
|
1582
|
-
approved 404s identically to "not installed", so the surface never
|
|
1583
|
-
|
|
1584
|
-
discloses another tenant''s inventory.
|
|
1585
|
-
|
|
1586
|
-
'
|
|
1450
|
+
summary: Read one installed manifest agent
|
|
1451
|
+
description: 'Returns one installed manifest agent''s inventory entry, or 404 when no such agent is installed or the
|
|
1452
|
+
host does not advertise `capabilities.agents.manifestRuntime`. The lookup is resolved within the authenticated principal''s
|
|
1453
|
+
owner triple: on an `installScope: ''tenant''` host, an agent the caller''s workspace has not approved returns the
|
|
1454
|
+
same 404 as "not installed", so another tenant''s inventory is never disclosed.'
|
|
1587
1455
|
operationId: getAgent
|
|
1588
1456
|
security:
|
|
1589
1457
|
- ApiKeyAuth:
|
|
@@ -1599,21 +1467,14 @@ paths:
|
|
|
1599
1467
|
schema:
|
|
1600
1468
|
type: string
|
|
1601
1469
|
pattern: ^(?!roster$|org-chart$).+$
|
|
1602
|
-
description:
|
|
1603
|
-
|
|
1604
|
-
`org-chart` — those name the sibling collection routes
|
|
1605
|
-
|
|
1606
|
-
(`/v1/agents/roster`, `/v1/agents/org-chart`), so excluding them here
|
|
1607
|
-
|
|
1608
|
-
keeps `/v1/agents/{agentId}` unambiguous against them.
|
|
1609
|
-
|
|
1610
|
-
'
|
|
1470
|
+
description: The manifest agentId. MUST NOT be the reserved literals `roster` or `org-chart`, which name the sibling
|
|
1471
|
+
collection routes (`/agents/roster`, `/agents/org-chart`), so `/agents/{agentId}` stays unambiguous.
|
|
1611
1472
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1473
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1612
1474
|
responses:
|
|
1613
1475
|
'200':
|
|
1614
|
-
description:
|
|
1615
|
-
|
|
1616
|
-
cards).'
|
|
1476
|
+
description: The agent's inventory entry. When the host advertises `a2a.agentCards`, an entry the host routes a
|
|
1477
|
+
workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent's card (interop.md §Per-agent cards).
|
|
1617
1478
|
content:
|
|
1618
1479
|
application/json:
|
|
1619
1480
|
schema:
|
|
@@ -1638,21 +1499,11 @@ paths:
|
|
|
1638
1499
|
get:
|
|
1639
1500
|
tags:
|
|
1640
1501
|
- agents
|
|
1641
|
-
summary:
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
content-free of any manifest body or credential (SR-1). Capability-gated on
|
|
1648
|
-
|
|
1649
|
-
`capabilities.agents.deployment.supported: true`; hosts that don''t advertise
|
|
1650
|
-
|
|
1651
|
-
it return 404. Tenant-scoped to the caller''s owner triple (RFC 0048/0074)
|
|
1652
|
-
|
|
1653
|
-
when `installScope: ''tenant''`.
|
|
1654
|
-
|
|
1655
|
-
'
|
|
1502
|
+
summary: List an agent's deployment records
|
|
1503
|
+
description: 'Lists the deployment records, one per `(agentId, version)`, for a manifest agent: the lifecycle `state`,
|
|
1504
|
+
the named `channels`, the canary share, the rollback pointer, and the last-transition provenance. Read-only and content-free
|
|
1505
|
+
of any manifest body or credential (SR-1). Gated on `capabilities.agents.deployment.supported: true`; a host that
|
|
1506
|
+
does not advertise it returns 404. Tenant-scoped to the caller''s owner triple when `installScope: ''tenant''`.'
|
|
1656
1507
|
operationId: listAgentDeployments
|
|
1657
1508
|
security:
|
|
1658
1509
|
- ApiKeyAuth:
|
|
@@ -1668,18 +1519,11 @@ paths:
|
|
|
1668
1519
|
schema:
|
|
1669
1520
|
type: string
|
|
1670
1521
|
pattern: ^(?!roster$|org-chart$).+$
|
|
1671
|
-
description:
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
(`/v1/agents/roster/{rosterId}`, `/v1/agents/org-chart/{departmentId}`),
|
|
1676
|
-
|
|
1677
|
-
so excluding them here keeps `/v1/agents/{agentId}/deployments`
|
|
1678
|
-
|
|
1679
|
-
unambiguous against them.
|
|
1680
|
-
|
|
1681
|
-
'
|
|
1522
|
+
description: The manifest agentId. MUST NOT be the reserved literals `roster` or `org-chart`, which name the sibling
|
|
1523
|
+
collection routes (`/agents/roster/{rosterId}`, `/agents/org-chart/{departmentId}`), so `/agents/{agentId}/deployments`
|
|
1524
|
+
stays unambiguous.
|
|
1682
1525
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1526
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1683
1527
|
responses:
|
|
1684
1528
|
'200':
|
|
1685
1529
|
description: The agent's deployment records (version-sorted).
|
|
@@ -1708,21 +1552,12 @@ paths:
|
|
|
1708
1552
|
post:
|
|
1709
1553
|
tags:
|
|
1710
1554
|
- agents
|
|
1711
|
-
summary:
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
configured RFC 0051 approvalGate, and — when the gate carries `requiredEval`
|
|
1718
|
-
|
|
1719
|
-
— verify the referenced RFC 0081 eval run is terminal and `EvalSummary.passed`
|
|
1720
|
-
|
|
1721
|
-
BEFORE emitting `deployment.promoted`. On success returns the updated
|
|
1722
|
-
|
|
1723
|
-
deployment record and emits the matching content-free `deployment.*` event.
|
|
1724
|
-
|
|
1725
|
-
'
|
|
1555
|
+
summary: Request a deployment state transition
|
|
1556
|
+
description: 'Requests a transition: promote, pause, deprecate, rollback, or adjust-canary. The host MUST authorize
|
|
1557
|
+
fail-closed against the `deploy:*` scope (an absent or unseeded role denies), run any configured approvalGate, and,
|
|
1558
|
+
when the gate carries `requiredEval`, verify that the referenced eval run is terminal and `EvalSummary.passed` before
|
|
1559
|
+
emitting `deployment.promoted`. On success it returns the updated deployment record and emits the matching content-free
|
|
1560
|
+
`deployment.*` event.'
|
|
1726
1561
|
operationId: transitionAgentDeployment
|
|
1727
1562
|
security:
|
|
1728
1563
|
- ApiKeyAuth:
|
|
@@ -1740,6 +1575,7 @@ paths:
|
|
|
1740
1575
|
description: The manifest agentId.
|
|
1741
1576
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
1742
1577
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1578
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1743
1579
|
requestBody:
|
|
1744
1580
|
required: true
|
|
1745
1581
|
content:
|
|
@@ -1757,13 +1593,8 @@ paths:
|
|
|
1757
1593
|
OpenWOP-Version:
|
|
1758
1594
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1759
1595
|
'400':
|
|
1760
|
-
description:
|
|
1761
|
-
|
|
1762
|
-
`states`/`canary` cannot satisfy, or `no_active_deployment` when a
|
|
1763
|
-
|
|
1764
|
-
referenced channel resolves to no active version.
|
|
1765
|
-
|
|
1766
|
-
'
|
|
1596
|
+
description: A validation error; a transition the host's advertised `states`/`canary` cannot satisfy; or `no_active_deployment`
|
|
1597
|
+
when a referenced channel resolves to no active version.
|
|
1767
1598
|
content:
|
|
1768
1599
|
application/json:
|
|
1769
1600
|
schema:
|
|
@@ -1774,13 +1605,8 @@ paths:
|
|
|
1774
1605
|
'401':
|
|
1775
1606
|
$ref: '#/components/responses/Unauthenticated'
|
|
1776
1607
|
'403':
|
|
1777
|
-
description:
|
|
1778
|
-
|
|
1779
|
-
`deploy:*` scope — RFC 0049), or `eval_gate_unmet` when a `requiredEval`
|
|
1780
|
-
|
|
1781
|
-
gate''s referenced eval run is not terminal-and-passed (RFC 0081).
|
|
1782
|
-
|
|
1783
|
-
'
|
|
1608
|
+
description: Fail-closed authorization denial (the principal lacks the required `deploy:*` scope), or `eval_gate_unmet`
|
|
1609
|
+
when a `requiredEval` gate's referenced eval run is not terminal and passed.
|
|
1784
1610
|
content:
|
|
1785
1611
|
application/json:
|
|
1786
1612
|
schema:
|
|
@@ -1801,19 +1627,11 @@ paths:
|
|
|
1801
1627
|
get:
|
|
1802
1628
|
tags:
|
|
1803
1629
|
- agents
|
|
1804
|
-
summary:
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
true`; hosts that don''t advertise it return 404. Tenant-scoped per
|
|
1811
|
-
|
|
1812
|
-
RFC 0074 — on an `installScope: ''tenant''` host only the caller''s
|
|
1813
|
-
|
|
1814
|
-
owner-triple entries are returned. Read-only; content-free (SR-1).
|
|
1815
|
-
|
|
1816
|
-
'
|
|
1630
|
+
summary: List the standing agent roster
|
|
1631
|
+
description: 'Lists the standing agent roster visible to the caller: named "digital-twin employee" instances and their
|
|
1632
|
+
workflow portfolios. Gated on `capabilities.agents.roster.supported: true`; a host that does not advertise it returns
|
|
1633
|
+
404. Tenant-scoped: on an `installScope: ''tenant''` host only the caller''s owner-triple entries are returned. Read-only;
|
|
1634
|
+
content-free (SR-1).'
|
|
1817
1635
|
operationId: listAgentRoster
|
|
1818
1636
|
security:
|
|
1819
1637
|
- ApiKeyAuth:
|
|
@@ -1847,21 +1665,15 @@ paths:
|
|
|
1847
1665
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1848
1666
|
parameters:
|
|
1849
1667
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1668
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1850
1669
|
/agents/roster/{rosterId}:
|
|
1851
1670
|
get:
|
|
1852
1671
|
tags:
|
|
1853
1672
|
- agents
|
|
1854
|
-
summary:
|
|
1855
|
-
|
|
1856
|
-
entry
|
|
1857
|
-
|
|
1858
|
-
or (on an `installScope: ''tenant''` host) the entry is outside the
|
|
1859
|
-
|
|
1860
|
-
caller''s owner triple — a cross-tenant entry 404s identically to
|
|
1861
|
-
|
|
1862
|
-
"not found", never disclosing another tenant''s roster.
|
|
1863
|
-
|
|
1864
|
-
'
|
|
1673
|
+
summary: Read one standing roster entry
|
|
1674
|
+
description: 'Returns one standing roster entry, or 404 when no such entry exists, the host does not advertise `capabilities.agents.roster`,
|
|
1675
|
+
or (on an `installScope: ''tenant''` host) the entry is outside the caller''s owner triple. A cross-tenant entry returns
|
|
1676
|
+
the same 404 as "not found", so another tenant''s roster is never disclosed.'
|
|
1865
1677
|
operationId: getAgentRosterEntry
|
|
1866
1678
|
security:
|
|
1867
1679
|
- ApiKeyAuth:
|
|
@@ -1878,6 +1690,7 @@ paths:
|
|
|
1878
1690
|
type: string
|
|
1879
1691
|
description: The standing instance id (a `host:<id>` AgentRef agentId).
|
|
1880
1692
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1693
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1881
1694
|
responses:
|
|
1882
1695
|
'200':
|
|
1883
1696
|
description: The roster entry.
|
|
@@ -1905,17 +1718,10 @@ paths:
|
|
|
1905
1718
|
get:
|
|
1906
1719
|
tags:
|
|
1907
1720
|
- agents
|
|
1908
|
-
summary:
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
`capabilities.agents.orgChart.supported: true`; hosts that don''t
|
|
1913
|
-
|
|
1914
|
-
advertise it return 404. Tenant-scoped per RFC 0074. DESCRIPTIVE only:
|
|
1915
|
-
|
|
1916
|
-
an org edge confers no authority (§B `org-position-no-authority-escalation`).
|
|
1917
|
-
|
|
1918
|
-
'
|
|
1721
|
+
summary: Read the caller's agent org chart
|
|
1722
|
+
description: 'Returns the caller''s agent org chart: departments, roles, and `reportsTo` edges over roster members.
|
|
1723
|
+
Gated on `capabilities.agents.orgChart.supported: true`; a host that does not advertise it returns 404. Tenant-scoped.
|
|
1724
|
+
The chart is descriptive only: an org edge confers no authority (`org-position-no-authority-escalation`).'
|
|
1919
1725
|
operationId: getAgentOrgChart
|
|
1920
1726
|
security:
|
|
1921
1727
|
- ApiKeyAuth:
|
|
@@ -1949,21 +1755,15 @@ paths:
|
|
|
1949
1755
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1950
1756
|
parameters:
|
|
1951
1757
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1758
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1952
1759
|
/agents/org-chart/{departmentId}:
|
|
1953
1760
|
get:
|
|
1954
1761
|
tags:
|
|
1955
1762
|
- agents
|
|
1956
|
-
summary:
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
the roll-up to direct members without changing the response shape.
|
|
1961
|
-
|
|
1962
|
-
404 when the department is unknown, cross-tenant, or the host doesn''t
|
|
1963
|
-
|
|
1964
|
-
advertise `capabilities.agents.orgChart`. The roll-up grants nothing (§B).
|
|
1965
|
-
|
|
1966
|
-
'
|
|
1763
|
+
summary: Read one department's subtree and responsibility roll-up
|
|
1764
|
+
description: Returns one department's subtree and responsibility roll-up (the union of its members' portfolios). `?recursive=false`
|
|
1765
|
+
narrows the roll-up to direct members without changing the response shape. Returns 404 when the department is unknown
|
|
1766
|
+
or cross-tenant, or the host does not advertise `capabilities.agents.orgChart`. The roll-up grants nothing.
|
|
1967
1767
|
operationId: getAgentOrgChartDepartment
|
|
1968
1768
|
security:
|
|
1969
1769
|
- ApiKeyAuth:
|
|
@@ -1978,7 +1778,7 @@ paths:
|
|
|
1978
1778
|
required: true
|
|
1979
1779
|
schema:
|
|
1980
1780
|
type: string
|
|
1981
|
-
description: The department id to root the subtree
|
|
1781
|
+
description: The department id to root the subtree and roll-up at.
|
|
1982
1782
|
- in: query
|
|
1983
1783
|
name: recursive
|
|
1984
1784
|
required: false
|
|
@@ -1987,6 +1787,7 @@ paths:
|
|
|
1987
1787
|
default: true
|
|
1988
1788
|
description: When `false`, the roll-up scopes to direct members only.
|
|
1989
1789
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1790
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
1990
1791
|
responses:
|
|
1991
1792
|
'200':
|
|
1992
1793
|
description: The department subtree + responsibility roll-up.
|
|
@@ -2014,23 +1815,11 @@ paths:
|
|
|
2014
1815
|
get:
|
|
2015
1816
|
tags:
|
|
2016
1817
|
- tools
|
|
2017
|
-
summary:
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
`capabilities.toolCatalog.supported: true`; hosts that don''t advertise
|
|
2024
|
-
|
|
2025
|
-
it return 404. §F-2 — the projection is authorization-scoped: a
|
|
2026
|
-
|
|
2027
|
-
principal sees only the tools it may invoke, and a second principal MUST
|
|
2028
|
-
|
|
2029
|
-
NOT see another principal''s tools (non-disclosure). Read-only; each
|
|
2030
|
-
|
|
2031
|
-
descriptor is content-free of any credential material (SR-1).
|
|
2032
|
-
|
|
2033
|
-
'
|
|
1818
|
+
summary: List the tools the caller may invoke
|
|
1819
|
+
description: 'Lists the portable `ToolDescriptor`s visible to the caller across every tool source (node-pack, workflow,
|
|
1820
|
+
mcp, connector, host-extension). Gated on `capabilities.toolCatalog.supported: true`; a host that does not advertise
|
|
1821
|
+
it returns 404. The projection is authorization-scoped: a principal sees only the tools it may invoke, and a second
|
|
1822
|
+
principal MUST NOT see another principal''s tools. Read-only; no descriptor carries credential material (SR-1).'
|
|
2034
1823
|
operationId: listTools
|
|
2035
1824
|
security:
|
|
2036
1825
|
- ApiKeyAuth:
|
|
@@ -2049,13 +1838,12 @@ paths:
|
|
|
2049
1838
|
- standard
|
|
2050
1839
|
- compact
|
|
2051
1840
|
default: standard
|
|
2052
|
-
description: '
|
|
2053
|
-
|
|
2054
|
-
true`. Defaults to `standard
|
|
2055
|
-
query
|
|
2056
|
-
|
|
2057
|
-
'
|
|
1841
|
+
description: '`compact` returns the `{ tools: CompactToolDescriptor[] }` projection (heavy descriptor fields omitted,
|
|
1842
|
+
`inputSchema` bounded to the compact structural subset) when the host advertises `capabilities.toolCatalog.compactView:
|
|
1843
|
+
true`. Defaults to `standard`. A host that does not advertise `compactView` treats `view=compact` like any unknown
|
|
1844
|
+
query parameter and returns the standard view.'
|
|
2058
1845
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1846
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2059
1847
|
responses:
|
|
2060
1848
|
'200':
|
|
2061
1849
|
description: 'The caller''s authorized tool catalog (standard array, or the compact `{ tools: [] }` projection when
|
|
@@ -2095,15 +1883,10 @@ paths:
|
|
|
2095
1883
|
get:
|
|
2096
1884
|
tags:
|
|
2097
1885
|
- tools
|
|
2098
|
-
summary:
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
non-disclosure — a cross-principal tool 404s identically to "not
|
|
2103
|
-
|
|
2104
|
-
found"), or the host doesn''t advertise `capabilities.toolCatalog`.
|
|
2105
|
-
|
|
2106
|
-
'
|
|
1886
|
+
summary: Read one tool descriptor
|
|
1887
|
+
description: Returns one `ToolDescriptor` by its stable `toolId`, or 404 when no such tool exists, the caller is not
|
|
1888
|
+
authorized for it, or the host does not advertise `capabilities.toolCatalog`. A tool the caller may not see returns
|
|
1889
|
+
the same 404 as "not found".
|
|
2107
1890
|
operationId: getTool
|
|
2108
1891
|
security:
|
|
2109
1892
|
- ApiKeyAuth:
|
|
@@ -2128,12 +1911,11 @@ paths:
|
|
|
2128
1911
|
- standard
|
|
2129
1912
|
- compact
|
|
2130
1913
|
default: standard
|
|
2131
|
-
description: '
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
'
|
|
1914
|
+
description: '`compact` returns one `CompactToolDescriptor` (heavy fields omitted, `inputSchema` bounded to the compact
|
|
1915
|
+
structural subset) when the host advertises `capabilities.toolCatalog.compactView: true`. Defaults to `standard`.
|
|
1916
|
+
A host that does not advertise `compactView` treats `view=compact` like any unknown query parameter.'
|
|
2136
1917
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1918
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2137
1919
|
responses:
|
|
2138
1920
|
'200':
|
|
2139
1921
|
description: The tool descriptor (standard, or one `CompactToolDescriptor` when `view=compact`).
|
|
@@ -2163,23 +1945,12 @@ paths:
|
|
|
2163
1945
|
get:
|
|
2164
1946
|
tags:
|
|
2165
1947
|
- runs
|
|
2166
|
-
summary:
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
suite provenance and (regression mode) the score delta vs a baseline.
|
|
2173
|
-
|
|
2174
|
-
Content-free of task output / rubric prose / credentials (SR-1; the
|
|
2175
|
-
|
|
2176
|
-
`eval-summary-no-content-leak` invariant). Capability-gated on
|
|
2177
|
-
|
|
2178
|
-
`capabilities.agents.evalSuite.supported: true`; hosts that don''t advertise
|
|
2179
|
-
|
|
2180
|
-
it return 404. 409 when the run is not yet terminal.
|
|
2181
|
-
|
|
2182
|
-
'
|
|
1948
|
+
summary: Read the scorecard of a terminal eval run
|
|
1949
|
+
description: 'Returns the `EvalSummary` scorecard for a terminal eval run (one started with `mode: "eval"`): aggregate
|
|
1950
|
+
and per-task scores, cost, latency, schema validity, redaction-safe safety findings, the suite provenance, and, in
|
|
1951
|
+
regression mode, the score delta against a baseline. It carries no task output, rubric prose, or credentials (SR-1;
|
|
1952
|
+
`eval-summary-no-content-leak`). Gated on `capabilities.agents.evalSuite.supported: true`; a host that does not advertise
|
|
1953
|
+
it returns 404. Returns 409 while the run is not yet terminal.'
|
|
2183
1954
|
operationId: getEvalSummary
|
|
2184
1955
|
security:
|
|
2185
1956
|
- ApiKeyAuth:
|
|
@@ -2191,6 +1962,7 @@ paths:
|
|
|
2191
1962
|
parameters:
|
|
2192
1963
|
- $ref: '#/components/parameters/RunId'
|
|
2193
1964
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1965
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2194
1966
|
responses:
|
|
2195
1967
|
'200':
|
|
2196
1968
|
description: The eval run's scorecard.
|
|
@@ -2206,11 +1978,7 @@ paths:
|
|
|
2206
1978
|
'403':
|
|
2207
1979
|
$ref: '#/components/responses/Forbidden'
|
|
2208
1980
|
'404':
|
|
2209
|
-
description:
|
|
2210
|
-
|
|
2211
|
-
`capabilities.agents.evalSuite`.
|
|
2212
|
-
|
|
2213
|
-
'
|
|
1981
|
+
description: No such run, the run is not an eval run, or the host does not advertise `capabilities.agents.evalSuite`.
|
|
2214
1982
|
content:
|
|
2215
1983
|
application/json:
|
|
2216
1984
|
schema:
|
|
@@ -2231,17 +1999,10 @@ paths:
|
|
|
2231
1999
|
get:
|
|
2232
2000
|
tags:
|
|
2233
2001
|
- runs
|
|
2234
|
-
summary:
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
ordered `eventDiffs[]` + `stateDiff`. The diff is a pure function of
|
|
2239
|
-
|
|
2240
|
-
the two event logs (see `replay.md` determinism contract). Requires
|
|
2241
|
-
|
|
2242
|
-
`runs:read` on BOTH runs. Hosts that don''t implement it return 404.
|
|
2243
|
-
|
|
2244
|
-
'
|
|
2002
|
+
summary: Diff two runs
|
|
2003
|
+
description: 'Returns a deterministic, replay-aware structured diff of two runs, typically a run and its fork: `divergedAtSeq`,
|
|
2004
|
+
ordered `eventDiffs[]`, and `stateDiff`. The diff is a pure function of the two event logs (see the `replay.md` determinism
|
|
2005
|
+
contract). Requires `runs:read` on both runs. A host that does not implement it returns 404.'
|
|
2245
2006
|
operationId: diffRun
|
|
2246
2007
|
security:
|
|
2247
2008
|
- ApiKeyAuth:
|
|
@@ -2259,13 +2020,11 @@ paths:
|
|
|
2259
2020
|
schema:
|
|
2260
2021
|
type: string
|
|
2261
2022
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2023
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2262
2024
|
responses:
|
|
2263
2025
|
'200':
|
|
2264
|
-
description: 'Structured diff of the two runs. `divergedAtSeq: null`
|
|
2265
|
-
|
|
2266
|
-
`eventDiffs` when the logs are identical.
|
|
2267
|
-
|
|
2268
|
-
'
|
|
2026
|
+
description: 'Structured diff of the two runs. `divergedAtSeq: null` and an empty `eventDiffs` when the logs are
|
|
2027
|
+
identical.'
|
|
2269
2028
|
content:
|
|
2270
2029
|
application/json:
|
|
2271
2030
|
schema:
|
|
@@ -2285,13 +2044,8 @@ paths:
|
|
|
2285
2044
|
'401':
|
|
2286
2045
|
$ref: '#/components/responses/Unauthenticated'
|
|
2287
2046
|
'403':
|
|
2288
|
-
description:
|
|
2289
|
-
|
|
2290
|
-
(`forbidden`); composes with RFC 0048 cross-workspace
|
|
2291
|
-
|
|
2047
|
+
description: The caller lacks `runs:read` on `{runId}` or on `against` (`forbidden`); composes with cross-workspace
|
|
2292
2048
|
isolation.
|
|
2293
|
-
|
|
2294
|
-
'
|
|
2295
2049
|
content:
|
|
2296
2050
|
application/json:
|
|
2297
2051
|
schema:
|
|
@@ -2300,11 +2054,8 @@ paths:
|
|
|
2300
2054
|
OpenWOP-Version:
|
|
2301
2055
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2302
2056
|
'404':
|
|
2303
|
-
description:
|
|
2304
|
-
|
|
2305
|
-
endpoint and treats the path as absent.
|
|
2306
|
-
|
|
2307
|
-
'
|
|
2057
|
+
description: Either run does not exist, or the host does not implement the diff endpoint and treats the path as
|
|
2058
|
+
absent.
|
|
2308
2059
|
content:
|
|
2309
2060
|
application/json:
|
|
2310
2061
|
schema:
|
|
@@ -2316,12 +2067,9 @@ paths:
|
|
|
2316
2067
|
post:
|
|
2317
2068
|
tags:
|
|
2318
2069
|
- runs
|
|
2319
|
-
summary: Administratively pause an in-flight run
|
|
2320
|
-
description:
|
|
2321
|
-
|
|
2322
|
-
Emits a `run.paused` event when the pause takes effect; exit only via `:resume` or `:cancel`.
|
|
2323
|
-
|
|
2324
|
-
'
|
|
2070
|
+
summary: Administratively pause an in-flight run.
|
|
2071
|
+
description: An operator-driven pause, distinct from cancel (terminal) and from a HITL suspend (workflow-driven). Emits
|
|
2072
|
+
a `run.paused` event when the pause takes effect. The run leaves `paused` only through `:resume` or `:cancel`.
|
|
2325
2073
|
operationId: pauseRun
|
|
2326
2074
|
security:
|
|
2327
2075
|
- ApiKeyAuth:
|
|
@@ -2334,6 +2082,7 @@ paths:
|
|
|
2334
2082
|
- $ref: '#/components/parameters/RunId'
|
|
2335
2083
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
2336
2084
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2085
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2337
2086
|
requestBody:
|
|
2338
2087
|
content:
|
|
2339
2088
|
application/json:
|
|
@@ -2349,15 +2098,12 @@ paths:
|
|
|
2349
2098
|
- immediate
|
|
2350
2099
|
- drain-current-node
|
|
2351
2100
|
default: drain-current-node
|
|
2352
|
-
description: '`immediate` snapshots between events; `drain-current-node` lets the running node
|
|
2353
|
-
|
|
2354
|
-
reach a terminal before transitioning to `paused`.
|
|
2355
|
-
|
|
2356
|
-
'
|
|
2101
|
+
description: '`immediate` snapshots between events; `drain-current-node` lets the running node reach a terminal
|
|
2102
|
+
state before the run transitions to `paused`.'
|
|
2357
2103
|
additionalProperties: false
|
|
2358
2104
|
responses:
|
|
2359
2105
|
'202':
|
|
2360
|
-
description: Pause requested; transition emits `run.paused` when complete.
|
|
2106
|
+
description: Pause requested; the transition emits `run.paused` when complete.
|
|
2361
2107
|
content:
|
|
2362
2108
|
application/json:
|
|
2363
2109
|
schema:
|
|
@@ -2397,10 +2143,8 @@ paths:
|
|
|
2397
2143
|
post:
|
|
2398
2144
|
tags:
|
|
2399
2145
|
- runs
|
|
2400
|
-
summary: Resume a paused run
|
|
2401
|
-
description: 'Reverses a prior `:pause
|
|
2402
|
-
|
|
2403
|
-
'
|
|
2146
|
+
summary: Resume a paused run.
|
|
2147
|
+
description: 'Reverses a prior `:pause`: the run transitions from `paused` to `running` and emits `run.resumed`.'
|
|
2404
2148
|
operationId: resumeRun
|
|
2405
2149
|
security:
|
|
2406
2150
|
- ApiKeyAuth:
|
|
@@ -2413,6 +2157,7 @@ paths:
|
|
|
2413
2157
|
- $ref: '#/components/parameters/RunId'
|
|
2414
2158
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
2415
2159
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2160
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2416
2161
|
requestBody:
|
|
2417
2162
|
content:
|
|
2418
2163
|
application/json:
|
|
@@ -2483,6 +2228,7 @@ paths:
|
|
|
2483
2228
|
minLength: 1
|
|
2484
2229
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
2485
2230
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2231
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2486
2232
|
requestBody:
|
|
2487
2233
|
required: true
|
|
2488
2234
|
content:
|
|
@@ -2528,7 +2274,7 @@ paths:
|
|
|
2528
2274
|
OpenWOP-Version:
|
|
2529
2275
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2530
2276
|
'409':
|
|
2531
|
-
description: Concurrent resolve
|
|
2277
|
+
description: Concurrent resolve; only one wins.
|
|
2532
2278
|
content:
|
|
2533
2279
|
application/json:
|
|
2534
2280
|
schema:
|
|
@@ -2537,7 +2283,7 @@ paths:
|
|
|
2537
2283
|
OpenWOP-Version:
|
|
2538
2284
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2539
2285
|
'422':
|
|
2540
|
-
description:
|
|
2286
|
+
description: The run was cancelled while the interrupt was pending.
|
|
2541
2287
|
content:
|
|
2542
2288
|
application/json:
|
|
2543
2289
|
schema:
|
|
@@ -2581,6 +2327,7 @@ paths:
|
|
|
2581
2327
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2582
2328
|
parameters:
|
|
2583
2329
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2330
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2584
2331
|
post:
|
|
2585
2332
|
tags:
|
|
2586
2333
|
- hitl
|
|
@@ -2590,6 +2337,7 @@ paths:
|
|
|
2590
2337
|
parameters:
|
|
2591
2338
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
2592
2339
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2340
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2593
2341
|
requestBody:
|
|
2594
2342
|
required: true
|
|
2595
2343
|
content:
|
|
@@ -2642,11 +2390,12 @@ paths:
|
|
|
2642
2390
|
type: string
|
|
2643
2391
|
minLength: 1
|
|
2644
2392
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2393
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2645
2394
|
responses:
|
|
2646
2395
|
'200':
|
|
2647
|
-
description: Artifact payload. Under `application/json` the shape is implementation-defined
|
|
2648
|
-
(
|
|
2649
|
-
|
|
2396
|
+
description: Artifact payload. Under `application/json` the shape is implementation-defined. Under `application/a2a+json`
|
|
2397
|
+
(negotiated by `Accept`; a host SHOULD offer it) it is an A2A `Artifact` whose `artifactId` equals the path segment,
|
|
2398
|
+
and a `url` Part in it MUST NOT resolve beyond the caller's `artifacts:read` authorization.
|
|
2650
2399
|
content:
|
|
2651
2400
|
application/json:
|
|
2652
2401
|
schema:
|
|
@@ -2680,6 +2429,7 @@ paths:
|
|
|
2680
2429
|
parameters:
|
|
2681
2430
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
2682
2431
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2432
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2683
2433
|
requestBody:
|
|
2684
2434
|
required: true
|
|
2685
2435
|
content:
|
|
@@ -2700,11 +2450,9 @@ paths:
|
|
|
2700
2450
|
description: Event types to subscribe to (see `run-event.schema.json` enum).
|
|
2701
2451
|
secret:
|
|
2702
2452
|
type: string
|
|
2703
|
-
description:
|
|
2704
|
-
form `whsec_<base64>` (24–64 decoded bytes) when `signatureAlgorithms` lists `standard-webhooks-1
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
'
|
|
2453
|
+
description: The host signs payloads with this secret using HMAC-SHA256. REQUIRED in the Standard Webhooks
|
|
2454
|
+
form `whsec_<base64>` (24–64 decoded bytes) when `signatureAlgorithms` lists `standard-webhooks-1`. Never
|
|
2455
|
+
echoed in any response. When omitted, the host generates one and returns it once in the `201` (RFC 0221).
|
|
2708
2456
|
tags:
|
|
2709
2457
|
type: array
|
|
2710
2458
|
items:
|
|
@@ -2721,13 +2469,14 @@ paths:
|
|
|
2721
2469
|
enum:
|
|
2722
2470
|
- v1
|
|
2723
2471
|
- standard-webhooks-1
|
|
2724
|
-
description: '
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
opts the subscription into the Standard Webhooks 1.0.0 companion scheme, which runs endpoint verification
|
|
2728
|
-
before the `201` (`400 webhook_endpoint_unverified` when the endpoint does not echo the challenge).
|
|
2472
|
+
description: 'The per-subscription signature opt-in. Absent means `["v1"]`. When present it MUST contain
|
|
2473
|
+
`v1`, MUST NOT repeat a value, and every value MUST be listed in the host''s `webhooks.signatureAlgorithms`;
|
|
2474
|
+
otherwise `400 validation_error`.
|
|
2729
2475
|
|
|
2730
|
-
|
|
2476
|
+
|
|
2477
|
+
Listing `standard-webhooks-1` opts the subscription into the Standard Webhooks 1.0.0 companion scheme,
|
|
2478
|
+
which runs endpoint verification before the `201` (`400 webhook_endpoint_unverified` when the endpoint
|
|
2479
|
+
does not echo the challenge).'
|
|
2731
2480
|
additionalProperties: false
|
|
2732
2481
|
responses:
|
|
2733
2482
|
'201':
|
|
@@ -2745,17 +2494,19 @@ paths:
|
|
|
2745
2494
|
type: array
|
|
2746
2495
|
items:
|
|
2747
2496
|
type: string
|
|
2748
|
-
description:
|
|
2749
|
-
|
|
2497
|
+
description: The list the dispatcher will apply; present whenever the request carried `signatureAlgorithms`.
|
|
2498
|
+
secret:
|
|
2499
|
+
type: string
|
|
2500
|
+
minLength: 1
|
|
2501
|
+
description: 'Present only when the request omitted `secret`: the secret the host generated, returned
|
|
2502
|
+
this once. A supplied secret is never echoed.'
|
|
2750
2503
|
headers:
|
|
2751
2504
|
OpenWOP-Version:
|
|
2752
2505
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2753
2506
|
'400':
|
|
2754
|
-
description: '`validation_error` (malformed body, or an invalid `signatureAlgorithms`
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
'
|
|
2507
|
+
description: '`validation_error` (malformed body, or an invalid `signatureAlgorithms` or `secret` opt-in), `webhook_url_rejected`
|
|
2508
|
+
(egress), or `webhook_endpoint_unverified` (an opted-in endpoint did not echo the verification challenge; no subscription
|
|
2509
|
+
is persisted).'
|
|
2759
2510
|
content:
|
|
2760
2511
|
application/json:
|
|
2761
2512
|
schema:
|
|
@@ -2786,12 +2537,10 @@ paths:
|
|
|
2786
2537
|
required: true
|
|
2787
2538
|
schema:
|
|
2788
2539
|
$ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
|
|
2789
|
-
description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5,
|
|
2790
|
-
|
|
2791
|
-
segment: `~`-projected (RFC 0184) or percent-encoded.
|
|
2792
|
-
|
|
2793
|
-
'
|
|
2540
|
+
description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5), carried as one path segment: `~`-projected or
|
|
2541
|
+
percent-encoded.'
|
|
2794
2542
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2543
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2795
2544
|
responses:
|
|
2796
2545
|
'204':
|
|
2797
2546
|
description: Unregistered.
|
|
@@ -2809,13 +2558,15 @@ paths:
|
|
|
2809
2558
|
tags:
|
|
2810
2559
|
- webhooks
|
|
2811
2560
|
operationId: rotateWebhookSecret
|
|
2812
|
-
summary: Rotate a Standard Webhooks subscription's secret with an overlap
|
|
2813
|
-
description: '
|
|
2814
|
-
|
|
2815
|
-
single `v1` signature cannot overlap
|
|
2561
|
+
summary: Rotate a Standard Webhooks subscription's secret with an overlap
|
|
2562
|
+
description: 'Rotates the secret of a subscription that opted into `standard-webhooks-1`. Gated on `webhooks.secretRotation`:
|
|
2563
|
+
a host that does not advertise it MUST answer `404 not_found`. Any other subscription gets `400 validation_error`,
|
|
2564
|
+
because its single `v1` signature cannot overlap. Tenant checks are those of `unregisterWebhook`: `403 id_tenant_mismatch`
|
|
2816
2565
|
when the id''s tenant segment is not the caller''s, checked before the lookup (`identity.md` §5); `404` when unknown.
|
|
2566
|
+
|
|
2567
|
+
|
|
2817
2568
|
For `overlapSeconds` after `rotatedAt`, `webhook-signature` carries one entry under the new secret and one under the
|
|
2818
|
-
previous one, and `OpenWOP-Signature` stays on the previous secret
|
|
2569
|
+
previous one, and `OpenWOP-Signature` stays on the previous secret. At `previousSecretExpiresAt` only the new secret
|
|
2819
2570
|
signs. A second rotation inside an overlap retires the oldest secret immediately. Rotation does not re-verify the
|
|
2820
2571
|
endpoint. The response carries no secret.'
|
|
2821
2572
|
parameters:
|
|
@@ -2824,10 +2575,11 @@ paths:
|
|
|
2824
2575
|
required: true
|
|
2825
2576
|
schema:
|
|
2826
2577
|
$ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
|
|
2827
|
-
description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5,
|
|
2828
|
-
|
|
2578
|
+
description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5), carried as one path segment: `~`-projected or
|
|
2579
|
+
percent-encoded.'
|
|
2829
2580
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
2830
2581
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2582
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2831
2583
|
requestBody:
|
|
2832
2584
|
required: true
|
|
2833
2585
|
content:
|
|
@@ -2841,7 +2593,7 @@ paths:
|
|
|
2841
2593
|
secret:
|
|
2842
2594
|
type: string
|
|
2843
2595
|
pattern: ^whsec_[A-Za-z0-9+/]+={0,2}$
|
|
2844
|
-
description: The new secret
|
|
2596
|
+
description: 'The new secret: `whsec_<base64>`, decoding to 24–64 bytes.'
|
|
2845
2597
|
responses:
|
|
2846
2598
|
'200':
|
|
2847
2599
|
description: Rotated. No secret is returned.
|
|
@@ -2884,25 +2636,11 @@ paths:
|
|
|
2884
2636
|
tags:
|
|
2885
2637
|
- audit
|
|
2886
2638
|
summary: Verify the audit-log hash chain over [fromSeq, toSeq].
|
|
2887
|
-
description:
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
serialization of the prior entry, verifies signed checkpoints
|
|
2894
|
-
|
|
2895
|
-
against the host''s advertised `auditLogIntegrity.checkpointPublicKey`,
|
|
2896
|
-
|
|
2897
|
-
and returns `chainValid` + an enumeration of any anomalies.
|
|
2898
|
-
|
|
2899
|
-
Hosts MUST require the `audit:read` scope. Hosts that do NOT
|
|
2900
|
-
|
|
2901
|
-
advertise the `openwop-audit-log-integrity` profile MAY omit this
|
|
2902
|
-
|
|
2903
|
-
endpoint entirely (clients SHOULD pre-flight via `/.well-known/openwop`).
|
|
2904
|
-
|
|
2905
|
-
'
|
|
2639
|
+
description: Re-walks the audit-log entries in the requested range, recomputes each entry's `prevHash` from the canonical
|
|
2640
|
+
RFC 8785 JCS serialization of the prior entry, verifies signed checkpoints against the host's advertised `auditLogIntegrity.checkpointPublicKey`,
|
|
2641
|
+
and returns `chainValid` with any anomalies. Hosts MUST require the `audit:read` scope. Hosts that do not advertise
|
|
2642
|
+
the `openwop-audit-log-integrity` profile MAY omit this endpoint entirely; clients SHOULD check `/.well-known/openwop`
|
|
2643
|
+
first. See `spec/v1/auth-profiles.md` §`openwop-audit-log-integrity` §4.
|
|
2906
2644
|
operationId: verifyAuditLog
|
|
2907
2645
|
security:
|
|
2908
2646
|
- ApiKeyAuth:
|
|
@@ -2927,6 +2665,7 @@ paths:
|
|
|
2927
2665
|
minimum: 0
|
|
2928
2666
|
description: Last audit-log sequence to include (inclusive). MUST be >= fromSeq.
|
|
2929
2667
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2668
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
2930
2669
|
responses:
|
|
2931
2670
|
'200':
|
|
2932
2671
|
description: Verification result.
|
|
@@ -2980,13 +2719,8 @@ paths:
|
|
|
2980
2719
|
name: tag
|
|
2981
2720
|
schema:
|
|
2982
2721
|
type: string
|
|
2983
|
-
description:
|
|
2984
|
-
|
|
2985
|
-
Hosts MAY accept the parameter multiple times; the semantic
|
|
2986
|
-
|
|
2987
|
-
when repeated is AND (every named tag must be present).
|
|
2988
|
-
|
|
2989
|
-
'
|
|
2722
|
+
description: Filter to templates whose `tags[]` contains this exact tag. Hosts MAY accept the parameter more than
|
|
2723
|
+
once; repeated values combine with AND (every named tag must be present).
|
|
2990
2724
|
- in: query
|
|
2991
2725
|
name: modelClass
|
|
2992
2726
|
schema:
|
|
@@ -3015,6 +2749,7 @@ paths:
|
|
|
3015
2749
|
default: 50
|
|
3016
2750
|
description: Maximum entries per page.
|
|
3017
2751
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2752
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3018
2753
|
responses:
|
|
3019
2754
|
'200':
|
|
3020
2755
|
description: Paginated list of templates.
|
|
@@ -3040,8 +2775,8 @@ paths:
|
|
|
3040
2775
|
'403':
|
|
3041
2776
|
$ref: '#/components/responses/Forbidden'
|
|
3042
2777
|
'501':
|
|
3043
|
-
description: Host does not advertise capabilities.prompts.endpointsSupported
|
|
3044
|
-
|
|
2778
|
+
description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
|
|
2779
|
+
composition; `endpointsSupported` gates this REST surface independently.)
|
|
3045
2780
|
content:
|
|
3046
2781
|
application/json:
|
|
3047
2782
|
schema:
|
|
@@ -3064,6 +2799,7 @@ paths:
|
|
|
3064
2799
|
parameters:
|
|
3065
2800
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
3066
2801
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2802
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3067
2803
|
requestBody:
|
|
3068
2804
|
required: true
|
|
3069
2805
|
content:
|
|
@@ -3096,7 +2832,7 @@ paths:
|
|
|
3096
2832
|
OpenWOP-Version:
|
|
3097
2833
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3098
2834
|
'501':
|
|
3099
|
-
description: Host does not advertise capabilities.prompts.mutableLibrary
|
|
2835
|
+
description: Host does not advertise `capabilities.prompts.mutableLibrary`.
|
|
3100
2836
|
content:
|
|
3101
2837
|
application/json:
|
|
3102
2838
|
schema:
|
|
@@ -3112,7 +2848,7 @@ paths:
|
|
|
3112
2848
|
schema:
|
|
3113
2849
|
type: string
|
|
3114
2850
|
pattern: ^[a-z0-9][a-z0-9._-]{0,127}$
|
|
3115
|
-
description: PromptTemplate.templateId
|
|
2851
|
+
description: '`PromptTemplate.templateId`.'
|
|
3116
2852
|
- in: query
|
|
3117
2853
|
name: version
|
|
3118
2854
|
schema:
|
|
@@ -3124,13 +2860,8 @@ paths:
|
|
|
3124
2860
|
schema:
|
|
3125
2861
|
type: string
|
|
3126
2862
|
pattern: ^[a-z0-9][a-z0-9._-]{0,127}$
|
|
3127
|
-
description:
|
|
3128
|
-
|
|
3129
|
-
templateId. Hosts MUST return `prompt_ref_ambiguous` if
|
|
3130
|
-
|
|
3131
|
-
ambiguous and libraryId is omitted.
|
|
3132
|
-
|
|
3133
|
-
'
|
|
2863
|
+
description: Disambiguates when several installed packs ship the same templateId. Hosts MUST return `prompt_ref_ambiguous`
|
|
2864
|
+
when the reference is ambiguous and libraryId is omitted.
|
|
3134
2865
|
get:
|
|
3135
2866
|
tags:
|
|
3136
2867
|
- prompts
|
|
@@ -3167,7 +2898,7 @@ paths:
|
|
|
3167
2898
|
OpenWOP-Version:
|
|
3168
2899
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3169
2900
|
'400':
|
|
3170
|
-
description: '`prompt_ref_ambiguous` when libraryId disambiguation is required.'
|
|
2901
|
+
description: '`prompt_ref_ambiguous` when `libraryId` disambiguation is required.'
|
|
3171
2902
|
content:
|
|
3172
2903
|
application/json:
|
|
3173
2904
|
schema:
|
|
@@ -3189,8 +2920,8 @@ paths:
|
|
|
3189
2920
|
OpenWOP-Version:
|
|
3190
2921
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3191
2922
|
'501':
|
|
3192
|
-
description: Host does not advertise capabilities.prompts.endpointsSupported
|
|
3193
|
-
|
|
2923
|
+
description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
|
|
2924
|
+
composition; `endpointsSupported` gates this REST surface independently.)
|
|
3194
2925
|
content:
|
|
3195
2926
|
application/json:
|
|
3196
2927
|
schema:
|
|
@@ -3200,6 +2931,7 @@ paths:
|
|
|
3200
2931
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3201
2932
|
parameters:
|
|
3202
2933
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2934
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3203
2935
|
put:
|
|
3204
2936
|
tags:
|
|
3205
2937
|
- prompts
|
|
@@ -3215,6 +2947,7 @@ paths:
|
|
|
3215
2947
|
parameters:
|
|
3216
2948
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
3217
2949
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2950
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3218
2951
|
requestBody:
|
|
3219
2952
|
required: true
|
|
3220
2953
|
content:
|
|
@@ -3263,7 +2996,7 @@ paths:
|
|
|
3263
2996
|
OpenWOP-Version:
|
|
3264
2997
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3265
2998
|
'501':
|
|
3266
|
-
description: Host does not advertise capabilities.prompts.mutableLibrary
|
|
2999
|
+
description: Host does not advertise `capabilities.prompts.mutableLibrary`.
|
|
3267
3000
|
content:
|
|
3268
3001
|
application/json:
|
|
3269
3002
|
schema:
|
|
@@ -3310,7 +3043,7 @@ paths:
|
|
|
3310
3043
|
OpenWOP-Version:
|
|
3311
3044
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3312
3045
|
'501':
|
|
3313
|
-
description: Host does not advertise capabilities.prompts.mutableLibrary
|
|
3046
|
+
description: Host does not advertise `capabilities.prompts.mutableLibrary`.
|
|
3314
3047
|
content:
|
|
3315
3048
|
application/json:
|
|
3316
3049
|
schema:
|
|
@@ -3320,30 +3053,17 @@ paths:
|
|
|
3320
3053
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3321
3054
|
parameters:
|
|
3322
3055
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
3056
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3323
3057
|
/prompts:render:
|
|
3324
3058
|
post:
|
|
3325
3059
|
tags:
|
|
3326
3060
|
- prompts
|
|
3327
3061
|
summary: Render a prompt template with supplied variable bindings.
|
|
3328
|
-
description:
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3332
|
-
`
|
|
3333
|
-
|
|
3334
|
-
same `(ref, variables, contentTrust)` inputs (RFC 0028 §A
|
|
3335
|
-
|
|
3336
|
-
deterministic-render invariant; RFC 0027 §F replay invariant).
|
|
3337
|
-
|
|
3338
|
-
Does NOT dispatch an LLM call. Secret-source variable values
|
|
3339
|
-
|
|
3340
|
-
MUST be supplied as `[REDACTED:<credentialRef>]` markers; the
|
|
3341
|
-
|
|
3342
|
-
host resolves the plaintext internally and never echoes it in
|
|
3343
|
-
|
|
3344
|
-
the `composed` response field per SR-1.
|
|
3345
|
-
|
|
3346
|
-
'
|
|
3062
|
+
description: Returns the composed body, its sha256 hash, and per-variable hashes. Does not dispatch an LLM call. The
|
|
3063
|
+
response's `hash` MUST equal the `hash` a matching `prompt.composed` event would carry at dispatch time for the same
|
|
3064
|
+
`(ref, variables, contentTrust)` inputs, so rendering is deterministic and replay-safe. Secret-source variable values
|
|
3065
|
+
MUST be supplied as `[REDACTED:<credentialRef>]` markers; the host resolves the plaintext internally and never echoes
|
|
3066
|
+
it in the `composed` response field (SR-1).
|
|
3347
3067
|
operationId: renderPromptTemplate
|
|
3348
3068
|
security:
|
|
3349
3069
|
- ApiKeyAuth:
|
|
@@ -3366,24 +3086,15 @@ paths:
|
|
|
3366
3086
|
$ref: ../../schemas/v2/prompt-ref.schema.json
|
|
3367
3087
|
variables:
|
|
3368
3088
|
type: object
|
|
3369
|
-
description:
|
|
3370
|
-
|
|
3371
|
-
Secret-source bindings carry `[REDACTED:<credentialRef>]`
|
|
3372
|
-
|
|
3089
|
+
description: Variable bindings keyed by `PromptVariable.name`. Secret-source bindings carry `[REDACTED:<credentialRef>]`
|
|
3373
3090
|
markers; the host resolves the real value internally.
|
|
3374
|
-
|
|
3375
|
-
'
|
|
3376
3091
|
additionalProperties: true
|
|
3377
3092
|
contentTrust:
|
|
3378
3093
|
type: string
|
|
3379
3094
|
enum:
|
|
3380
3095
|
- trusted
|
|
3381
3096
|
- untrusted
|
|
3382
|
-
description:
|
|
3383
|
-
|
|
3384
|
-
propagated through composition per RFC 0027 §E.
|
|
3385
|
-
|
|
3386
|
-
'
|
|
3097
|
+
description: Aggregate trust marker for the supplied bindings, propagated through composition.
|
|
3387
3098
|
responses:
|
|
3388
3099
|
'200':
|
|
3389
3100
|
description: Composed result.
|
|
@@ -3420,13 +3131,8 @@ paths:
|
|
|
3420
3131
|
OpenWOP-Version:
|
|
3421
3132
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3422
3133
|
'400':
|
|
3423
|
-
description: '`prompt_variable_unresolved` (required variable missing),
|
|
3424
|
-
|
|
3425
|
-
`prompt_variable_type_mismatch` (bound type vs. declared type),
|
|
3426
|
-
|
|
3427
|
-
or `prompt_ref_invalid` (malformed PromptRef).
|
|
3428
|
-
|
|
3429
|
-
'
|
|
3134
|
+
description: '`prompt_variable_unresolved` (a required variable is missing), `prompt_variable_type_mismatch` (bound
|
|
3135
|
+
type differs from declared type), or `prompt_ref_invalid` (malformed PromptRef).'
|
|
3430
3136
|
content:
|
|
3431
3137
|
application/json:
|
|
3432
3138
|
schema:
|
|
@@ -3448,8 +3154,8 @@ paths:
|
|
|
3448
3154
|
OpenWOP-Version:
|
|
3449
3155
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3450
3156
|
'501':
|
|
3451
|
-
description: Host does not advertise capabilities.prompts.endpointsSupported
|
|
3452
|
-
|
|
3157
|
+
description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
|
|
3158
|
+
composition; `endpointsSupported` gates this REST surface independently.)
|
|
3453
3159
|
content:
|
|
3454
3160
|
application/json:
|
|
3455
3161
|
schema:
|
|
@@ -3459,14 +3165,15 @@ paths:
|
|
|
3459
3165
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3460
3166
|
parameters:
|
|
3461
3167
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
3168
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3462
3169
|
/host/effect-seams:
|
|
3463
3170
|
get:
|
|
3464
3171
|
tags:
|
|
3465
3172
|
- host
|
|
3466
3173
|
operationId: getEffectSeamManifest
|
|
3467
|
-
summary:
|
|
3468
|
-
description:
|
|
3469
|
-
|
|
3174
|
+
summary: Read the host's effect-seam manifest
|
|
3175
|
+
description: Lists every outbound effect seam that replay suppression covers. A seam omitted here is invisible to the
|
|
3176
|
+
conformance suite; an audit of the host's seams is the control.
|
|
3470
3177
|
responses:
|
|
3471
3178
|
'200':
|
|
3472
3179
|
description: The manifest.
|
|
@@ -3481,6 +3188,7 @@ paths:
|
|
|
3481
3188
|
$ref: '#/components/responses/Unauthenticated'
|
|
3482
3189
|
parameters:
|
|
3483
3190
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
3191
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3484
3192
|
security:
|
|
3485
3193
|
- ApiKeyAuth:
|
|
3486
3194
|
- runs:read
|
|
@@ -3495,9 +3203,8 @@ paths:
|
|
|
3495
3203
|
tags:
|
|
3496
3204
|
- runs
|
|
3497
3205
|
operationId: getRunCompensation
|
|
3498
|
-
summary:
|
|
3499
|
-
description: The
|
|
3500
|
-
/ RFC 0173 §B).
|
|
3206
|
+
summary: Read a run's compensation plan and attempts
|
|
3207
|
+
description: The run's compensation plan and every attempt, as a read projection.
|
|
3501
3208
|
responses:
|
|
3502
3209
|
'200':
|
|
3503
3210
|
description: The projection.
|
|
@@ -3512,6 +3219,7 @@ paths:
|
|
|
3512
3219
|
$ref: '#/components/responses/NotFound'
|
|
3513
3220
|
parameters:
|
|
3514
3221
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
3222
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3515
3223
|
security:
|
|
3516
3224
|
- ApiKeyAuth:
|
|
3517
3225
|
- runs:read
|
|
@@ -3526,8 +3234,8 @@ paths:
|
|
|
3526
3234
|
tags:
|
|
3527
3235
|
- runs
|
|
3528
3236
|
operationId: getRunEffects
|
|
3529
|
-
summary:
|
|
3530
|
-
description:
|
|
3237
|
+
summary: Read a run's Layer-2 effect ledger
|
|
3238
|
+
description: Effect records keyed by business identity; the witness for the Layer-2 effect-identity obligation.
|
|
3531
3239
|
responses:
|
|
3532
3240
|
'200':
|
|
3533
3241
|
description: The ledger projection.
|
|
@@ -3542,6 +3250,7 @@ paths:
|
|
|
3542
3250
|
$ref: '#/components/responses/NotFound'
|
|
3543
3251
|
parameters:
|
|
3544
3252
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
3253
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3545
3254
|
security:
|
|
3546
3255
|
- ApiKeyAuth:
|
|
3547
3256
|
- runs:read
|
|
@@ -3554,20 +3263,22 @@ paths:
|
|
|
3554
3263
|
tags:
|
|
3555
3264
|
- webhooks
|
|
3556
3265
|
operationId: listWebhookDeadLetters
|
|
3557
|
-
summary:
|
|
3558
|
-
description: '
|
|
3559
|
-
`payload_unprojectable` delivery dead-lettered on its first attempt, appears here until
|
|
3560
|
-
on the `webhooks.deadLetter` facet: a host that does not advertise it answers `404 not_found`.
|
|
3561
|
-
|
|
3562
|
-
|
|
3266
|
+
summary: List a subscription's dead-lettered deliveries
|
|
3267
|
+
description: 'Lists deliveries that were dead-lettered, making `webhooks.md` §Durability observable. A delivery whose
|
|
3268
|
+
retries are exhausted, or a `payload_unprojectable` delivery dead-lettered on its first attempt, appears here until
|
|
3269
|
+
`retentionDays` elapse. Gated on the `webhooks.deadLetter` facet: a host that does not advertise it answers `404 not_found`.
|
|
3270
|
+
|
|
3271
|
+
|
|
3272
|
+
The record is content-free: it names a delivery and never carries the delivered bytes, the request headers, or the
|
|
3273
|
+
subscription secret.'
|
|
3563
3274
|
parameters:
|
|
3564
3275
|
- name: webhookId
|
|
3565
3276
|
in: path
|
|
3566
3277
|
required: true
|
|
3567
3278
|
schema:
|
|
3568
3279
|
$ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
|
|
3569
|
-
description: The subscription, tenant-bound (`identity.md` §5
|
|
3570
|
-
|
|
3280
|
+
description: 'The subscription, tenant-bound (`identity.md` §5) and carried as one path segment: `~`-projected or
|
|
3281
|
+
percent-encoded.'
|
|
3571
3282
|
- name: limit
|
|
3572
3283
|
in: query
|
|
3573
3284
|
required: false
|
|
@@ -3585,6 +3296,7 @@ paths:
|
|
|
3585
3296
|
description: Opaque cursor from a previous page's `nextCursor`. A cursor minted for another subscription MUST be refused
|
|
3586
3297
|
`400 validation_error`.
|
|
3587
3298
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
3299
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3588
3300
|
responses:
|
|
3589
3301
|
'200':
|
|
3590
3302
|
description: One page of dead-lettered deliveries, newest first.
|
|
@@ -3615,12 +3327,12 @@ paths:
|
|
|
3615
3327
|
tags:
|
|
3616
3328
|
- host
|
|
3617
3329
|
operationId: streamHostEvents
|
|
3618
|
-
summary:
|
|
3619
|
-
description: The
|
|
3620
|
-
|
|
3330
|
+
summary: Stream host-scoped events (`heartbeat.*`) as SSE
|
|
3331
|
+
description: The default `hostEvents` address; a host MAY declare another under `heartbeat.deliveryChannel`. Carries
|
|
3332
|
+
no run data.
|
|
3621
3333
|
responses:
|
|
3622
3334
|
'200':
|
|
3623
|
-
description: text/event-stream of hostEvents messages.
|
|
3335
|
+
description: '`text/event-stream` of `hostEvents` messages.'
|
|
3624
3336
|
content:
|
|
3625
3337
|
text/event-stream:
|
|
3626
3338
|
schema:
|
|
@@ -3632,6 +3344,7 @@ paths:
|
|
|
3632
3344
|
$ref: '#/components/responses/Unauthenticated'
|
|
3633
3345
|
parameters:
|
|
3634
3346
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
3347
|
+
- $ref: '#/components/parameters/OpenWOPClientVersion'
|
|
3635
3348
|
security:
|
|
3636
3349
|
- ApiKeyAuth:
|
|
3637
3350
|
- runs:read
|
|
@@ -3645,28 +3358,14 @@ components:
|
|
|
3645
3358
|
type: http
|
|
3646
3359
|
scheme: bearer
|
|
3647
3360
|
bearerFormat: API key
|
|
3648
|
-
description:
|
|
3649
|
-
|
|
3650
|
-
|
|
3651
|
-
|
|
3652
|
-
(`manifest:read`, `runs:create`, `runs:read`, `runs:cancel`,
|
|
3653
|
-
|
|
3654
|
-
`artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`).
|
|
3655
|
-
|
|
3656
|
-
See `auth.md`.
|
|
3657
|
-
|
|
3658
|
-
'
|
|
3361
|
+
description: OpenWOP API key. The format is implementation-defined; the reference implementation uses `hk_`/`hk_test_`
|
|
3362
|
+
prefixes. Each key carries one or more scopes from the canonical vocabulary (`manifest:read`, `runs:create`, `runs:read`,
|
|
3363
|
+
`runs:cancel`, `artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`). Scope matching is in `spec/v2/core/identity.md`
|
|
3364
|
+
§2.1.
|
|
3659
3365
|
OAuth2:
|
|
3660
3366
|
type: oauth2
|
|
3661
|
-
description: '
|
|
3662
|
-
|
|
3663
|
-
v2 `auth.lanes[].lane: "oauth2"`. Discovery is RFC 9728 Protected Resource
|
|
3664
|
-
|
|
3665
|
-
Metadata at the path-inserted well-known URI (`identity.md` §2.5).
|
|
3666
|
-
|
|
3667
|
-
Placeholder URLs.
|
|
3668
|
-
|
|
3669
|
-
'
|
|
3367
|
+
description: 'The OAuth 2.0 lane (`auth.lanes[].lane: "oauth2"`). Discovery is RFC 9728 Protected Resource Metadata
|
|
3368
|
+
at the path-inserted well-known URI (`identity.md` §2.5). The URLs are placeholders.'
|
|
3670
3369
|
flows:
|
|
3671
3370
|
clientCredentials:
|
|
3672
3371
|
tokenUrl: https://issuer.example/oauth2/token
|
|
@@ -3718,26 +3417,14 @@ components:
|
|
|
3718
3417
|
OpenIdConnect:
|
|
3719
3418
|
type: openIdConnect
|
|
3720
3419
|
openIdConnectUrl: https://issuer.example/.well-known/openid-configuration
|
|
3721
|
-
description: '
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`.
|
|
3726
|
-
|
|
3727
|
-
Placeholder URL.
|
|
3728
|
-
|
|
3729
|
-
'
|
|
3420
|
+
description: 'The OpenID Connect lane (`auth.lanes[].lane: "oidc"`). An ID token MAY be the bearer only when its `aud`
|
|
3421
|
+
equals the host''s configured audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`. The URL is a
|
|
3422
|
+
placeholder.'
|
|
3730
3423
|
MutualTLS:
|
|
3731
3424
|
type: mutualTLS
|
|
3732
|
-
description: '
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
in no canonical requirement below: a host that requires it adds `MutualTLS: []`
|
|
3737
|
-
|
|
3738
|
-
inside each requirement object (AND).
|
|
3739
|
-
|
|
3740
|
-
'
|
|
3425
|
+
description: 'The mTLS lane (`auth.lanes[].lane: "mtls"`). mTLS is required *in addition to* a bearer, never instead
|
|
3426
|
+
of one, so it appears in no canonical requirement below. A host that requires it adds `MutualTLS: []` inside each
|
|
3427
|
+
requirement object (AND).'
|
|
3741
3428
|
parameters:
|
|
3742
3429
|
WorkflowId:
|
|
3743
3430
|
in: path
|
|
@@ -3751,11 +3438,8 @@ components:
|
|
|
3751
3438
|
required: true
|
|
3752
3439
|
schema:
|
|
3753
3440
|
$ref: ../../schemas/v2/ids.schema.json#/$defs/runId
|
|
3754
|
-
description:
|
|
3755
|
-
|
|
3756
|
-
identifier and MUST be percent-encoded as `%2F` in the path segment.
|
|
3757
|
-
|
|
3758
|
-
'
|
|
3441
|
+
description: Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5). The `/` is part of the identifier and MUST be percent-encoded
|
|
3442
|
+
as `%2F` in the path segment.
|
|
3759
3443
|
IdempotencyKey:
|
|
3760
3444
|
in: header
|
|
3761
3445
|
name: Idempotency-Key
|
|
@@ -3763,15 +3447,8 @@ components:
|
|
|
3763
3447
|
schema:
|
|
3764
3448
|
type: string
|
|
3765
3449
|
maxLength: 255
|
|
3766
|
-
description: 'Per-mutation idempotency token (
|
|
3767
|
-
|
|
3768
|
-
Server caches `(tenantId, endpoint, key)` → response for ≥24h.
|
|
3769
|
-
|
|
3770
|
-
Duplicate requests return the cached response with header
|
|
3771
|
-
|
|
3772
|
-
`OpenWOP-Idempotent-Replay: true`.
|
|
3773
|
-
|
|
3774
|
-
'
|
|
3450
|
+
description: 'Per-mutation idempotency token (`idempotency.md` Layer 1). The server caches `(tenantId, endpoint, key)`
|
|
3451
|
+
→ response for ≥24h. A duplicate request returns the cached response with `OpenWOP-Idempotent-Replay: true`.'
|
|
3775
3452
|
OpenWOPVersion:
|
|
3776
3453
|
name: OpenWOP-Version
|
|
3777
3454
|
in: header
|
|
@@ -3779,14 +3456,23 @@ components:
|
|
|
3779
3456
|
schema:
|
|
3780
3457
|
type: string
|
|
3781
3458
|
pattern: ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$
|
|
3782
|
-
description:
|
|
3459
|
+
description: Selects one of the host's listed major.minor versions. Absent, `/.well-known/openwop` uses `preferredVersion`
|
|
3460
|
+
and every other unversioned path is v2; an unlisted value is 406 protocol_version_unsupported.
|
|
3461
|
+
OpenWOPClientVersion:
|
|
3462
|
+
name: OpenWOP-Client-Version
|
|
3463
|
+
in: header
|
|
3464
|
+
required: false
|
|
3465
|
+
schema:
|
|
3466
|
+
type: string
|
|
3467
|
+
description: The protocol version the client implements (versioning.md §1.5). Compared with `minClientVersion` on major.minor.
|
|
3468
|
+
A malformed value is treated as absent and MUST NOT produce a 400. Never selects a contract.
|
|
3783
3469
|
responses:
|
|
3784
3470
|
Unauthenticated:
|
|
3785
3471
|
description: Missing or invalid credential.
|
|
3786
3472
|
headers:
|
|
3787
3473
|
WWW-Authenticate:
|
|
3788
|
-
description:
|
|
3789
|
-
|
|
3474
|
+
description: A `Bearer` challenge. On a host with an oauth2 or oidc lane it carries `resource_metadata` and `error="invalid_token"`.
|
|
3475
|
+
Never sent on a non-disclosure 404.
|
|
3790
3476
|
schema:
|
|
3791
3477
|
type: string
|
|
3792
3478
|
content:
|
|
@@ -3797,8 +3483,8 @@ components:
|
|
|
3797
3483
|
description: Credential valid but lacks required scope or fails resource binding.
|
|
3798
3484
|
headers:
|
|
3799
3485
|
WWW-Authenticate:
|
|
3800
|
-
description:
|
|
3801
|
-
|
|
3486
|
+
description: On a scope refusal, `error="insufficient_scope"` with every required `scope`. Absent on a resource-binding
|
|
3487
|
+
403.
|
|
3802
3488
|
schema:
|
|
3803
3489
|
type: string
|
|
3804
3490
|
content:
|
|
@@ -3836,15 +3522,13 @@ components:
|
|
|
3836
3522
|
$ref: ../../schemas/v2/run-snapshot.schema.json
|
|
3837
3523
|
RunClaimConflict:
|
|
3838
3524
|
$ref: ../../schemas/v2/error-envelope.schema.json
|
|
3839
|
-
description:
|
|
3840
|
-
carries the code).
|
|
3525
|
+
description: '`RunClaimConflict` is the canonical error envelope; `error` carries the code.'
|
|
3841
3526
|
UnsupportedStreamMode:
|
|
3842
3527
|
$ref: ../../schemas/v2/error-envelope.schema.json
|
|
3843
|
-
description:
|
|
3844
|
-
carries the code).
|
|
3528
|
+
description: '`UnsupportedStreamMode` is the canonical error envelope; `error` carries the code.'
|
|
3845
3529
|
headers:
|
|
3846
3530
|
OpenWOPVersion:
|
|
3847
3531
|
schema:
|
|
3848
3532
|
type: string
|
|
3849
|
-
description:
|
|
3533
|
+
description: The contract that produced this response. It MUST equal the one used.
|
|
3850
3534
|
required: true
|