@openwop/spec-artifacts 2.42.6 → 2.42.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CORPUS-STAMP.json +64 -63
- package/api/seams-v2.yaml +187 -322
- package/api/v2/asyncapi.yaml +83 -113
- package/api/v2/openapi.yaml +339 -724
- package/package.json +1 -1
- package/schemas/audit-verify-result.schema.json +2 -2
- package/schemas/v2/audit-verify-result.schema.json +2 -2
- package/schemas/v2/capabilities.schema.json +2 -5
- package/spec/v1/core-standard-manifest.json +2 -2
- package/spec/v1/gaps.json +171 -1
- package/spec/v2/README.md +34 -36
- package/spec/v2/core/capabilities.md +186 -119
- package/spec/v2/core/conformance.md +78 -27
- package/spec/v2/core/connection-packs.md +8 -3
- package/spec/v2/core/conversation.md +10 -4
- package/spec/v2/core/errors.md +30 -9
- package/spec/v2/core/events.md +116 -80
- package/spec/v2/core/form-content-packs.md +11 -13
- package/spec/v2/core/headers.md +22 -14
- package/spec/v2/core/host-services.md +22 -5
- package/spec/v2/core/idempotency.md +48 -36
- package/spec/v2/core/identity.md +110 -42
- package/spec/v2/core/interop.md +82 -21
- package/spec/v2/core/interrupt.md +79 -40
- package/spec/v2/core/node-pack-runtimes.md +18 -4
- package/spec/v2/core/oauth.md +40 -6
- package/spec/v2/core/overview.md +61 -33
- package/spec/v2/core/packs.md +53 -28
- package/spec/v2/core/persistence.md +61 -80
- package/spec/v2/core/replay.md +56 -42
- package/spec/v2/core/runs.md +198 -60
- package/spec/v2/core/security-defaults.md +57 -33
- package/spec/v2/core/tool-catalog.md +29 -6
- package/spec/v2/core/versioning.md +95 -49
- package/spec/v2/core/webhooks.md +59 -20
- package/spec/v2/core/workflow-chain-packs.md +16 -14
- package/spec/v2/corrections.json +17 -1
- package/spec/v2/corrections.schema.json +1 -1
- package/spec/v2/declaration.json +24 -7
- package/spec/v2/declaration.schema.json +10 -0
- package/spec/v2/errors.json +109 -2
- package/spec/v2/errors.schema.json +38 -0
- package/spec/v2/ext/README.md +36 -23
- package/spec/v2/ext/a2uiSurface/README.md +75 -89
- package/spec/v2/ext/brand/README.md +15 -15
- package/spec/v2/ext/canvas/README.md +15 -15
- package/spec/v2/ext/chat/README.md +15 -15
- package/spec/v2/ext/coordination/README.md +15 -15
- package/spec/v2/ext/dataIntegration/README.md +17 -20
- package/spec/v2/ext/entities/README.md +15 -15
- package/spec/v2/ext/grpc-transport/README.md +6 -8
- package/spec/v2/ext/kanban/README.md +15 -15
- package/spec/v2/ext/knowledge/README.md +15 -15
- package/spec/v2/ext/launchStudio/README.md +16 -16
- package/spec/v2/ext/messaging/README.md +15 -15
- package/spec/v2/ext/portability/README.md +3 -17
- package/spec/v2/ext/provider-idempotency/README.md +7 -10
- package/spec/v2/ext/restTransport/README.md +30 -19
- package/spec/v2/ext/sandbox-runtime-notes/README.md +7 -9
- package/spec/v2/ext/webResearch/README.md +16 -16
- package/spec/v2/profiles.json +6 -2
- package/spec/v2/release.json +2 -2
- package/spec/v2/surface-baseline.json +542 -2
package/api/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.7
|
|
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,10 +72,9 @@ 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'
|
|
77
79
|
responses:
|
|
78
80
|
'200':
|
|
@@ -85,9 +87,8 @@ paths:
|
|
|
85
87
|
ETag:
|
|
86
88
|
schema:
|
|
87
89
|
type: string
|
|
88
|
-
description:
|
|
89
|
-
|
|
90
|
-
the bytes is non-conformant.'
|
|
90
|
+
description: Strong validator for the discovery document (capabilities.md §1). A v2 host MUST send it and MUST
|
|
91
|
+
honor `If-None-Match` with `304`. A host that changes semantics without changing the bytes is non-conformant.
|
|
91
92
|
OpenWOP-Version:
|
|
92
93
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
93
94
|
content:
|
|
@@ -95,7 +96,7 @@ paths:
|
|
|
95
96
|
schema:
|
|
96
97
|
$ref: '#/components/schemas/Capabilities'
|
|
97
98
|
'304':
|
|
98
|
-
description:
|
|
99
|
+
description: '`If-None-Match` matched the current `ETag`; the body is unchanged.'
|
|
99
100
|
headers:
|
|
100
101
|
OpenWOP-Version:
|
|
101
102
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
@@ -189,25 +190,16 @@ paths:
|
|
|
189
190
|
type: string
|
|
190
191
|
enum:
|
|
191
192
|
- enforce
|
|
192
|
-
description: When set,
|
|
193
|
+
description: When set, the host's cross-host claim system rejects a duplicate `(tenantId, scopeId)` pair with `409
|
|
194
|
+
Conflict`.
|
|
193
195
|
- in: header
|
|
194
196
|
name: OpenWOP-Force-Engine-Version
|
|
195
197
|
schema:
|
|
196
198
|
type: integer
|
|
197
199
|
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
|
-
'
|
|
200
|
+
description: Test keys only. The server emits this run's events as if it ran the given engine version, which must
|
|
201
|
+
be within `Capabilities.testing.forceEngineVersionRange`. Servers MUST reject it on production API keys with `403
|
|
202
|
+
force_engine_version_forbidden`.
|
|
211
203
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
212
204
|
requestBody:
|
|
213
205
|
required: true
|
|
@@ -228,10 +220,10 @@ paths:
|
|
|
228
220
|
$ref: ../../schemas/v2/residency.schema.json
|
|
229
221
|
tenantId:
|
|
230
222
|
type: string
|
|
231
|
-
description: Tenant
|
|
223
|
+
description: Tenant scope. A host typically derives it from the API key.
|
|
232
224
|
scopeId:
|
|
233
225
|
type: string
|
|
234
|
-
description: Opaque correlation ID for `
|
|
226
|
+
description: Opaque correlation ID for `OpenWOP-Dedup`.
|
|
235
227
|
callbackUrl:
|
|
236
228
|
type: string
|
|
237
229
|
format: uri
|
|
@@ -240,29 +232,18 @@ paths:
|
|
|
240
232
|
type: string
|
|
241
233
|
enum:
|
|
242
234
|
- 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
|
-
'
|
|
235
|
+
description: 'Set to `eval` to run an eval-suite projection instead of a workflow run: the host runs the
|
|
236
|
+
`evalSuiteRef` against `agentId`, emits the content-free `eval.*` family, and terminates with an `EvalSummary`
|
|
237
|
+
readable at `GET /runs/{runId}/eval-summary`. Gated on `capabilities.agents.evalSuite.supported`; a
|
|
238
|
+
host that omits it rejects `mode: "eval"` with 501. Omit for a normal workflow run.'
|
|
258
239
|
evalSuiteRef:
|
|
259
240
|
type: string
|
|
260
241
|
minLength: 1
|
|
261
|
-
description:
|
|
242
|
+
description: URI of the `AgentEvalSuite` to run. Required when mode is `eval`.
|
|
262
243
|
agentId:
|
|
263
244
|
type: string
|
|
264
245
|
minLength: 1
|
|
265
|
-
description:
|
|
246
|
+
description: The manifest agent the eval suite targets. Required when mode is `eval`.
|
|
266
247
|
if:
|
|
267
248
|
properties:
|
|
268
249
|
mode:
|
|
@@ -319,7 +300,7 @@ paths:
|
|
|
319
300
|
'403':
|
|
320
301
|
$ref: '#/components/responses/Forbidden'
|
|
321
302
|
'409':
|
|
322
|
-
description:
|
|
303
|
+
description: An `OpenWOP-Dedup` collision, or a concurrent `Idempotency-Key` collision.
|
|
323
304
|
headers:
|
|
324
305
|
Retry-After:
|
|
325
306
|
schema:
|
|
@@ -337,11 +318,13 @@ paths:
|
|
|
337
318
|
tags:
|
|
338
319
|
- runs
|
|
339
320
|
operationId: listRuns
|
|
340
|
-
summary:
|
|
341
|
-
description: '
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
321
|
+
summary: List the caller's runs, newest first
|
|
322
|
+
description: 'Lists only runs whose tenant segment is the caller''s; every `runId` is tenant-bound (identity.md §5).
|
|
323
|
+
The list is cursor-paginated. Gated on the `runList` family: a host that does not advertise it answers `404 not_found`.
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
`limit` is honoured up to `runList.maxPageSize`. `cursor` is opaque; a cursor the host did not mint is `400 validation_error`.
|
|
327
|
+
`workflowId` and `status` are exact-match filters when `runList.filters` names them; an unadvertised filter is ignored.'
|
|
345
328
|
parameters:
|
|
346
329
|
- name: limit
|
|
347
330
|
in: query
|
|
@@ -349,7 +332,7 @@ paths:
|
|
|
349
332
|
schema:
|
|
350
333
|
type: integer
|
|
351
334
|
minimum: 1
|
|
352
|
-
description: Page size; clamped to runList.maxPageSize
|
|
335
|
+
description: Page size; clamped to `runList.maxPageSize`.
|
|
353
336
|
- name: cursor
|
|
354
337
|
in: query
|
|
355
338
|
required: false
|
|
@@ -357,13 +340,13 @@ paths:
|
|
|
357
340
|
type: string
|
|
358
341
|
minLength: 1
|
|
359
342
|
maxLength: 2048
|
|
360
|
-
description: Opaque cursor from a previous page's nextCursor
|
|
343
|
+
description: Opaque cursor from a previous page's `nextCursor`.
|
|
361
344
|
- name: workflowId
|
|
362
345
|
in: query
|
|
363
346
|
required: false
|
|
364
347
|
schema:
|
|
365
348
|
$ref: ../../schemas/v2/ids.schema.json#/$defs/workflowId
|
|
366
|
-
description: Exact-match filter
|
|
349
|
+
description: Exact-match filter, when advertised in `runList.filters`.
|
|
367
350
|
- name: status
|
|
368
351
|
in: query
|
|
369
352
|
required: false
|
|
@@ -380,7 +363,7 @@ paths:
|
|
|
380
363
|
- failed
|
|
381
364
|
- cancelling
|
|
382
365
|
- cancelled
|
|
383
|
-
description: Exact-match filter
|
|
366
|
+
description: Exact-match filter, when advertised in `runList.filters`.
|
|
384
367
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
385
368
|
responses:
|
|
386
369
|
'200':
|
|
@@ -425,10 +408,9 @@ paths:
|
|
|
425
408
|
required: false
|
|
426
409
|
schema:
|
|
427
410
|
type: string
|
|
428
|
-
description:
|
|
429
|
-
`ETag`
|
|
430
|
-
|
|
431
|
-
§1.4).'
|
|
411
|
+
description: Conditional request on the discovery document (capabilities.md §1) and the run snapshot (runs.md §Snapshot).
|
|
412
|
+
A value matching the `ETag` the host sent MUST yield `304 Not Modified` with no body. The 304 carries `OpenWOP-Version`
|
|
413
|
+
like every response (versioning.md §1.4).
|
|
432
414
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
433
415
|
responses:
|
|
434
416
|
'200':
|
|
@@ -437,13 +419,8 @@ paths:
|
|
|
437
419
|
ETag:
|
|
438
420
|
schema:
|
|
439
421
|
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
|
-
'
|
|
422
|
+
description: Strong validator derived from the run's latest persisted event-log sequence number. It changes
|
|
423
|
+
on every observable state transition and is stable while none occurs.
|
|
447
424
|
Content-Encoding:
|
|
448
425
|
required: false
|
|
449
426
|
schema:
|
|
@@ -452,13 +429,8 @@ paths:
|
|
|
452
429
|
- gzip
|
|
453
430
|
- br
|
|
454
431
|
- 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
|
-
'
|
|
432
|
+
description: 'Present only when the host negotiated compression from `Accept-Encoding`; pairs with `Vary: Accept-Encoding`.
|
|
433
|
+
The decoded body is byte-identical to the identity body.'
|
|
462
434
|
OpenWOP-Version:
|
|
463
435
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
464
436
|
content:
|
|
@@ -466,7 +438,7 @@ paths:
|
|
|
466
438
|
schema:
|
|
467
439
|
$ref: '#/components/schemas/RunSnapshot'
|
|
468
440
|
'304':
|
|
469
|
-
description:
|
|
441
|
+
description: 'Not Modified: `If-None-Match` matched the current `ETag`. Empty body.'
|
|
470
442
|
headers:
|
|
471
443
|
OpenWOP-Version:
|
|
472
444
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
@@ -497,26 +469,17 @@ paths:
|
|
|
497
469
|
type: string
|
|
498
470
|
pattern: ^(values|(updates|messages|debug)(,(updates|messages|debug))*)$
|
|
499
471
|
default: updates
|
|
500
|
-
description:
|
|
472
|
+
description: A stream mode from the closed set, or a comma-separated combination of them. `values` never combines.
|
|
501
473
|
- in: query
|
|
502
474
|
name: bufferMs
|
|
503
475
|
schema:
|
|
504
476
|
type: integer
|
|
505
477
|
minimum: 0
|
|
506
478
|
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
|
-
'
|
|
479
|
+
description: 'Optional batching hint. When set, the server accumulates events for up to N ms, or until a forced-flush
|
|
480
|
+
trigger fires (terminal events, suspensions, connection close), and emits a single SSE event with `event: batch`
|
|
481
|
+
and `data:` as a JSON array of `RunEventDoc`. Range 0..5000; `0` means no buffering. See `stream-modes.md` §Aggregation
|
|
482
|
+
hint.'
|
|
520
483
|
- in: header
|
|
521
484
|
name: Last-Event-ID
|
|
522
485
|
schema:
|
|
@@ -569,8 +532,8 @@ paths:
|
|
|
569
532
|
schema:
|
|
570
533
|
type: integer
|
|
571
534
|
minimum: 0
|
|
572
|
-
description:
|
|
573
|
-
0).
|
|
535
|
+
description: Return events with `sequence > afterSequence`. Omitted, the poll starts from the first event (sequence
|
|
536
|
+
0).
|
|
574
537
|
- in: query
|
|
575
538
|
name: timeout
|
|
576
539
|
schema:
|
|
@@ -582,7 +545,7 @@ paths:
|
|
|
582
545
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
583
546
|
responses:
|
|
584
547
|
'200':
|
|
585
|
-
description: Events
|
|
548
|
+
description: Events after `afterSequence`.
|
|
586
549
|
content:
|
|
587
550
|
application/json:
|
|
588
551
|
schema:
|
|
@@ -604,8 +567,7 @@ paths:
|
|
|
604
567
|
lastSequence:
|
|
605
568
|
type: integer
|
|
606
569
|
minimum: -1
|
|
607
|
-
description: The highest sequence in the log at the time of the response
|
|
608
|
-
is empty.
|
|
570
|
+
description: The highest sequence in the log at the time of the response; -1 when the log is empty.
|
|
609
571
|
status:
|
|
610
572
|
type: string
|
|
611
573
|
isTerminal:
|
|
@@ -672,7 +634,7 @@ paths:
|
|
|
672
634
|
post:
|
|
673
635
|
tags:
|
|
674
636
|
- runs
|
|
675
|
-
summary: Record a non-blocking quality annotation on a run
|
|
637
|
+
summary: Record a non-blocking quality annotation on a run.
|
|
676
638
|
operationId: createAnnotation
|
|
677
639
|
security:
|
|
678
640
|
- ApiKeyAuth:
|
|
@@ -710,7 +672,7 @@ paths:
|
|
|
710
672
|
'404':
|
|
711
673
|
$ref: '#/components/responses/NotFound'
|
|
712
674
|
'501':
|
|
713
|
-
description: Host does not advertise capabilities.feedback.supported
|
|
675
|
+
description: Host does not advertise `capabilities.feedback.supported`.
|
|
714
676
|
content:
|
|
715
677
|
application/json:
|
|
716
678
|
schema:
|
|
@@ -721,7 +683,7 @@ paths:
|
|
|
721
683
|
get:
|
|
722
684
|
tags:
|
|
723
685
|
- runs
|
|
724
|
-
summary: List the annotations recorded on a run
|
|
686
|
+
summary: List the annotations recorded on a run.
|
|
725
687
|
operationId: listAnnotations
|
|
726
688
|
security:
|
|
727
689
|
- ApiKeyAuth:
|
|
@@ -758,7 +720,7 @@ paths:
|
|
|
758
720
|
'404':
|
|
759
721
|
$ref: '#/components/responses/NotFound'
|
|
760
722
|
'501':
|
|
761
|
-
description: Host does not advertise capabilities.feedback.supported
|
|
723
|
+
description: Host does not advertise `capabilities.feedback.supported`.
|
|
762
724
|
content:
|
|
763
725
|
application/json:
|
|
764
726
|
schema:
|
|
@@ -770,20 +732,11 @@ paths:
|
|
|
770
732
|
post:
|
|
771
733
|
tags:
|
|
772
734
|
- 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
|
-
'
|
|
735
|
+
summary: Register an external-event trigger subscription.
|
|
736
|
+
description: Creates an external-event (`webhook`/`email`/`form`) TriggerSubscription bound to a workflow, with a dedup
|
|
737
|
+
config and a source-authenticity verification policy. The `workflowId` MUST resolve under the caller's owner triple.
|
|
738
|
+
The response carries the created TriggerSubscription plus a source-specific `binding`; the binding secret or URL is
|
|
739
|
+
returned once and cannot be re-fetched in cleartext.
|
|
787
740
|
operationId: createTriggerSubscription
|
|
788
741
|
security:
|
|
789
742
|
- ApiKeyAuth:
|
|
@@ -817,15 +770,9 @@ paths:
|
|
|
817
770
|
$ref: ../../schemas/v2/trigger-subscription.schema.json
|
|
818
771
|
binding:
|
|
819
772
|
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
|
-
'
|
|
773
|
+
description: 'Source-specific binding the caller needs to wire the external source. For `webhook`: `{
|
|
774
|
+
ingestUrl, secretFingerprint }`; for `email`: `{ ingestAddress }`; for `form`: `{ ingestUrl }`. The
|
|
775
|
+
secret is returned once, at creation (SR-1).'
|
|
829
776
|
additionalProperties: true
|
|
830
777
|
properties:
|
|
831
778
|
ingestUrl:
|
|
@@ -846,7 +793,7 @@ paths:
|
|
|
846
793
|
'403':
|
|
847
794
|
$ref: '#/components/responses/Forbidden'
|
|
848
795
|
'501':
|
|
849
|
-
description: Host does not advertise capabilities.triggerBridge.ingestion.registrationEndpoint
|
|
796
|
+
description: Host does not advertise `capabilities.triggerBridge.ingestion.registrationEndpoint`.
|
|
850
797
|
content:
|
|
851
798
|
application/json:
|
|
852
799
|
schema:
|
|
@@ -859,32 +806,19 @@ paths:
|
|
|
859
806
|
tags:
|
|
860
807
|
- content
|
|
861
808
|
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
|
|
809
|
+
summary: Deliver a published content page resolved for the negotiated locale.
|
|
810
|
+
description: 'Returns the published page `slug` for the locale negotiated from `Accept-Language`, with its sections
|
|
811
|
+
already merged, in render order. Locale fallback follows i18n.md: q-value order, then language family, then `content.baseLocale`.
|
|
812
|
+
Sections are merged field by field (`localized-content.md` §C).
|
|
870
813
|
|
|
871
|
-
render order. Sets `Content-Language` to the locale used,
|
|
872
814
|
|
|
873
|
-
`Vary: Accept-Language, Accept-Encoding`, and
|
|
815
|
+
The response sets `Content-Language` to the locale used, `Vary: Accept-Language, Accept-Encoding`, and `Cache-Control:
|
|
816
|
+
public, max-age=300, stale-while-revalidate=3600`. Only `status: "published"` content is served.
|
|
874
817
|
|
|
875
|
-
`Cache-Control: public, max-age=300, stale-while-revalidate=3600`.
|
|
876
818
|
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
host-defined (e.g. domain) when anonymous. A `slug` absent for the
|
|
882
|
-
|
|
883
|
-
resolved tenant returns the same `404` as a nonexistent slug (no
|
|
884
|
-
|
|
885
|
-
cross-tenant enumeration).
|
|
886
|
-
|
|
887
|
-
'
|
|
819
|
+
The tenant is host-resolved (`localized-content.md` §F): from the credential when authenticated, host-defined (for
|
|
820
|
+
example by domain) when anonymous. A `slug` absent for the resolved tenant returns the same `404` as a nonexistent
|
|
821
|
+
slug, so tenants cannot be enumerated.'
|
|
888
822
|
operationId: getContentPage
|
|
889
823
|
parameters:
|
|
890
824
|
- name: slug
|
|
@@ -899,7 +833,8 @@ paths:
|
|
|
899
833
|
required: false
|
|
900
834
|
schema:
|
|
901
835
|
type: string
|
|
902
|
-
description: BCP-47 preference list; authoritative for locale selection (i18n.md). A malformed value MUST NOT
|
|
836
|
+
description: BCP-47 preference list; authoritative for locale selection (i18n.md). A malformed value MUST NOT produce
|
|
837
|
+
a 400.
|
|
903
838
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
904
839
|
responses:
|
|
905
840
|
'200':
|
|
@@ -918,7 +853,7 @@ paths:
|
|
|
918
853
|
'404':
|
|
919
854
|
$ref: '#/components/responses/NotFound'
|
|
920
855
|
'501':
|
|
921
|
-
description: Host does not advertise capabilities.content.supported
|
|
856
|
+
description: Host does not advertise `capabilities.content.supported`.
|
|
922
857
|
content:
|
|
923
858
|
application/json:
|
|
924
859
|
schema:
|
|
@@ -929,28 +864,15 @@ paths:
|
|
|
929
864
|
delete:
|
|
930
865
|
tags:
|
|
931
866
|
- 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
|
|
867
|
+
summary: Delete a content page (admin).
|
|
868
|
+
description: 'Deletes a page with its sections and every locale overlay: the `DELETE …/content/pages/{pageId}` admin
|
|
869
|
+
operation of `localized-content.md` §D. Tenant-scoped; requires `content.write`.
|
|
940
870
|
|
|
941
|
-
item with public delivery, which addresses the same segment by `slug`,
|
|
942
871
|
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
parameter name
|
|
946
|
-
|
|
947
|
-
delivery''s name for that reason alone. A `pageId` absent for the
|
|
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
|
-
'
|
|
872
|
+
The path segment is the page''s `pageId`, not its slug. The operation shares this path item with public delivery,
|
|
873
|
+
which addresses the same segment by `slug`, and OpenAPI 3.1 forbids two templates that differ only in parameter name,
|
|
874
|
+
so the parameter keeps delivery''s name. A `pageId` absent for the caller''s tenant returns the same `404` as a nonexistent
|
|
875
|
+
one (`localized-content.md` §F), so tenants cannot be enumerated.'
|
|
954
876
|
operationId: deleteContentPage
|
|
955
877
|
security:
|
|
956
878
|
- ApiKeyAuth:
|
|
@@ -966,7 +888,8 @@ paths:
|
|
|
966
888
|
schema:
|
|
967
889
|
type: string
|
|
968
890
|
minLength: 1
|
|
969
|
-
description: For this operation, the page's `pageId
|
|
891
|
+
description: For this operation, the page's `pageId`, not its slug; the operation description explains the shared
|
|
892
|
+
name.
|
|
970
893
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
971
894
|
responses:
|
|
972
895
|
'204':
|
|
@@ -984,12 +907,8 @@ paths:
|
|
|
984
907
|
get:
|
|
985
908
|
tags:
|
|
986
909
|
- content
|
|
987
|
-
summary: List content pages for the caller's tenant (
|
|
988
|
-
description:
|
|
989
|
-
|
|
990
|
-
principal with `content.read` scope.
|
|
991
|
-
|
|
992
|
-
'
|
|
910
|
+
summary: List content pages for the caller's tenant (admin).
|
|
911
|
+
description: Tenant-scoped admin listing of pages, draft and published. Requires a principal with `content.read` scope.
|
|
993
912
|
operationId: listContentPages
|
|
994
913
|
security:
|
|
995
914
|
- ApiKeyAuth:
|
|
@@ -1015,7 +934,7 @@ paths:
|
|
|
1015
934
|
'403':
|
|
1016
935
|
$ref: '#/components/responses/Forbidden'
|
|
1017
936
|
'501':
|
|
1018
|
-
description: Host does not advertise capabilities.content.supported
|
|
937
|
+
description: Host does not advertise `capabilities.content.supported`.
|
|
1019
938
|
content:
|
|
1020
939
|
application/json:
|
|
1021
940
|
schema:
|
|
@@ -1028,7 +947,7 @@ paths:
|
|
|
1028
947
|
post:
|
|
1029
948
|
tags:
|
|
1030
949
|
- content
|
|
1031
|
-
summary: Create a content page (
|
|
950
|
+
summary: Create a content page (admin).
|
|
1032
951
|
description: Tenant-scoped page creation. Requires `content.write` scope.
|
|
1033
952
|
operationId: createContentPage
|
|
1034
953
|
security:
|
|
@@ -1055,7 +974,7 @@ paths:
|
|
|
1055
974
|
OpenWOP-Version:
|
|
1056
975
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1057
976
|
'400':
|
|
1058
|
-
description: Invalid request (
|
|
977
|
+
description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
|
|
1059
978
|
content:
|
|
1060
979
|
application/json:
|
|
1061
980
|
schema:
|
|
@@ -1073,14 +992,9 @@ paths:
|
|
|
1073
992
|
put:
|
|
1074
993
|
tags:
|
|
1075
994
|
- 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
|
-
'
|
|
995
|
+
summary: Upsert a section's base or per-locale fields (admin).
|
|
996
|
+
description: Locale-targeted write. `locale == content.baseLocale` upserts the section's base `data`; any other locale
|
|
997
|
+
(case-canonical BCP 47 subset) upserts `localizations[locale]`. Tenant-scoped; requires `content.write`.
|
|
1084
998
|
operationId: putContentSection
|
|
1085
999
|
security:
|
|
1086
1000
|
- ApiKeyAuth:
|
|
@@ -1117,7 +1031,7 @@ paths:
|
|
|
1117
1031
|
locale:
|
|
1118
1032
|
type: string
|
|
1119
1033
|
pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
|
|
1120
|
-
description: Target locale
|
|
1034
|
+
description: Target locale. `baseLocale` upserts `data`; any other locale upserts `localizations[locale]`.
|
|
1121
1035
|
data:
|
|
1122
1036
|
type: object
|
|
1123
1037
|
additionalProperties: true
|
|
@@ -1133,7 +1047,7 @@ paths:
|
|
|
1133
1047
|
OpenWOP-Version:
|
|
1134
1048
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1135
1049
|
'400':
|
|
1136
|
-
description: Invalid request (
|
|
1050
|
+
description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
|
|
1137
1051
|
content:
|
|
1138
1052
|
application/json:
|
|
1139
1053
|
schema:
|
|
@@ -1151,7 +1065,7 @@ paths:
|
|
|
1151
1065
|
get:
|
|
1152
1066
|
tags:
|
|
1153
1067
|
- content
|
|
1154
|
-
summary: Read the tenant's content language settings (
|
|
1068
|
+
summary: Read the tenant's content language settings (admin).
|
|
1155
1069
|
description: Tenant-scoped read of `{ baseLocale, supportedLocales, autoTranslateOnPublish }`. Requires `content.read`.
|
|
1156
1070
|
operationId: getContentSettings
|
|
1157
1071
|
security:
|
|
@@ -1176,7 +1090,7 @@ paths:
|
|
|
1176
1090
|
'403':
|
|
1177
1091
|
$ref: '#/components/responses/Forbidden'
|
|
1178
1092
|
'501':
|
|
1179
|
-
description: Host does not advertise capabilities.content.supported
|
|
1093
|
+
description: Host does not advertise `capabilities.content.supported`.
|
|
1180
1094
|
content:
|
|
1181
1095
|
application/json:
|
|
1182
1096
|
schema:
|
|
@@ -1189,12 +1103,9 @@ paths:
|
|
|
1189
1103
|
put:
|
|
1190
1104
|
tags:
|
|
1191
1105
|
- content
|
|
1192
|
-
summary: Update the tenant's content language settings (
|
|
1193
|
-
description:
|
|
1194
|
-
|
|
1195
|
-
supportedLocales` MUST hold (else `400`). Requires `content.write`.
|
|
1196
|
-
|
|
1197
|
-
'
|
|
1106
|
+
summary: Update the tenant's content language settings (admin).
|
|
1107
|
+
description: Tenant-scoped settings update. The invariant `baseLocale ∉ supportedLocales` MUST hold, else `400`. Requires
|
|
1108
|
+
`content.write`.
|
|
1198
1109
|
operationId: putContentSettings
|
|
1199
1110
|
security:
|
|
1200
1111
|
- ApiKeyAuth:
|
|
@@ -1220,7 +1131,7 @@ paths:
|
|
|
1220
1131
|
OpenWOP-Version:
|
|
1221
1132
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1222
1133
|
'400':
|
|
1223
|
-
description: Invalid request (
|
|
1134
|
+
description: Invalid request (for example `baseLocale` in `supportedLocales`, or a malformed locale or slug).
|
|
1224
1135
|
content:
|
|
1225
1136
|
application/json:
|
|
1226
1137
|
schema:
|
|
@@ -1239,21 +1150,10 @@ paths:
|
|
|
1239
1150
|
tags:
|
|
1240
1151
|
- runs
|
|
1241
1152
|
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
|
-
'
|
|
1153
|
+
description: 'Accepts a non-empty array of runIds and cancels each one independently. Returns `200` with a per-id results
|
|
1154
|
+
array even when some cancellations fail: the operation succeeds when the request reached the host, whatever the per-id
|
|
1155
|
+
outcomes. Hosts enforce a host-defined cap on the array length (RECOMMENDED 100); an over-cap request returns `400
|
|
1156
|
+
validation_error`.'
|
|
1257
1157
|
operationId: bulkCancelRuns
|
|
1258
1158
|
security:
|
|
1259
1159
|
- ApiKeyAuth:
|
|
@@ -1357,15 +1257,9 @@ paths:
|
|
|
1357
1257
|
fromSeq:
|
|
1358
1258
|
type: integer
|
|
1359
1259
|
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
|
-
'
|
|
1260
|
+
description: 'Inclusive: events `< fromSeq` are fixed history and events `>= fromSeq` are re-executed. Required
|
|
1261
|
+
for `branch` (the branch point). Optional for `replay`, where it defaults to `0`, full re-execution from
|
|
1262
|
+
the start of the source run (`replay.md` §"Replay-mode defaults").'
|
|
1369
1263
|
mode:
|
|
1370
1264
|
type: string
|
|
1371
1265
|
enum:
|
|
@@ -1373,7 +1267,7 @@ paths:
|
|
|
1373
1267
|
- branch
|
|
1374
1268
|
runOptionsOverlay:
|
|
1375
1269
|
type: object
|
|
1376
|
-
description:
|
|
1270
|
+
description: '`branch` mode only: caller-supplied `RunOptions` to overlay.'
|
|
1377
1271
|
additionalProperties: false
|
|
1378
1272
|
responses:
|
|
1379
1273
|
'201':
|
|
@@ -1409,7 +1303,7 @@ paths:
|
|
|
1409
1303
|
OpenWOP-Version:
|
|
1410
1304
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1411
1305
|
'400':
|
|
1412
|
-
description: Invalid `fromSeq`, `replay` with non-empty `runOptionsOverlay`,
|
|
1306
|
+
description: Invalid `fromSeq`, `replay` with a non-empty `runOptionsOverlay`, and similar.
|
|
1413
1307
|
content:
|
|
1414
1308
|
application/json:
|
|
1415
1309
|
schema:
|
|
@@ -1424,7 +1318,7 @@ paths:
|
|
|
1424
1318
|
'404':
|
|
1425
1319
|
$ref: '#/components/responses/NotFound'
|
|
1426
1320
|
'422':
|
|
1427
|
-
description: '`fromSeq`
|
|
1321
|
+
description: '`fromSeq` names a sequence number that does not exist in the source run''s event log.'
|
|
1428
1322
|
content:
|
|
1429
1323
|
application/json:
|
|
1430
1324
|
schema:
|
|
@@ -1436,19 +1330,10 @@ paths:
|
|
|
1436
1330
|
get:
|
|
1437
1331
|
tags:
|
|
1438
1332
|
- 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
|
-
'
|
|
1333
|
+
summary: Read a run's parent in the cross-host composition chain
|
|
1334
|
+
description: 'Returns the run''s immediate parent in the cross-host composition chain. Gated on `capabilities.multiAgent.executionModel.crossHostCausation.ancestryEndpointSupported:
|
|
1335
|
+
true`; a host that does not advertise it returns 404 not_found. Clients walk the full chain one hop at a time by following
|
|
1336
|
+
`parent.wellKnownUrl` in each response.'
|
|
1452
1337
|
operationId: getRunAncestry
|
|
1453
1338
|
security:
|
|
1454
1339
|
- ApiKeyAuth:
|
|
@@ -1462,9 +1347,7 @@ paths:
|
|
|
1462
1347
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1463
1348
|
responses:
|
|
1464
1349
|
'200':
|
|
1465
|
-
description: '
|
|
1466
|
-
|
|
1467
|
-
'
|
|
1350
|
+
description: 'The run''s immediate parent (`parent: null` for a top-level run).'
|
|
1468
1351
|
content:
|
|
1469
1352
|
application/json:
|
|
1470
1353
|
schema:
|
|
@@ -1477,15 +1360,8 @@ paths:
|
|
|
1477
1360
|
'403':
|
|
1478
1361
|
$ref: '#/components/responses/Forbidden'
|
|
1479
1362
|
'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
|
-
'
|
|
1363
|
+
description: 'The run does not exist, or the host does not advertise `crossHostCausation.ancestryEndpointSupported:
|
|
1364
|
+
true` and treats the endpoint as absent. Clients can tell the two apart from the host''s discovery document.'
|
|
1489
1365
|
content:
|
|
1490
1366
|
application/json:
|
|
1491
1367
|
schema:
|
|
@@ -1497,35 +1373,18 @@ paths:
|
|
|
1497
1373
|
get:
|
|
1498
1374
|
tags:
|
|
1499
1375
|
- 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
|
-
'
|
|
1376
|
+
summary: List installed manifest agents
|
|
1377
|
+
description: 'Lists the manifest agents installed in this host''s AgentRegistry. Gated on `capabilities.agents.manifestRuntime.supported:
|
|
1378
|
+
true`; a host that does not advertise it returns 404. The projection is read-only and never carries the system-prompt
|
|
1379
|
+
body, resolved handoff schemas, or credential material (SR-1). There is no dispatch endpoint: a manifest agent is
|
|
1380
|
+
invoked as a run whose node pins it with `WorkflowNode.agent` + `POST /runs`.
|
|
1381
|
+
|
|
1382
|
+
|
|
1383
|
+
The result is scoped to the authenticated principal''s owner triple. When `capabilities.agents.manifestRuntime.installScope`
|
|
1384
|
+
is `''tenant''`, only the agents available to the caller''s tenant and workspace are returned; an agent another workspace
|
|
1385
|
+
installed is absent, never disclosed. When it is `''host''` (the default), the inventory is host-global. A `''tenant''`-scoped
|
|
1386
|
+
host MUST reject unauthenticated or unscoped requests under its standard auth contract rather than fall back to a
|
|
1387
|
+
global list.'
|
|
1529
1388
|
operationId: listAgents
|
|
1530
1389
|
security:
|
|
1531
1390
|
- ApiKeyAuth:
|
|
@@ -1536,9 +1395,9 @@ paths:
|
|
|
1536
1395
|
- runs:read
|
|
1537
1396
|
responses:
|
|
1538
1397
|
'200':
|
|
1539
|
-
description:
|
|
1540
|
-
|
|
1541
|
-
§Per-agent cards).
|
|
1398
|
+
description: Installed manifest agents, sorted by `agentId`. When the host advertises `a2a.agentCards`, an entry
|
|
1399
|
+
the host routes a workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent's card (interop.md
|
|
1400
|
+
§Per-agent cards).
|
|
1542
1401
|
content:
|
|
1543
1402
|
application/json:
|
|
1544
1403
|
schema:
|
|
@@ -1551,11 +1410,7 @@ paths:
|
|
|
1551
1410
|
'403':
|
|
1552
1411
|
$ref: '#/components/responses/Forbidden'
|
|
1553
1412
|
'404':
|
|
1554
|
-
description:
|
|
1555
|
-
|
|
1556
|
-
treats the endpoint as absent.
|
|
1557
|
-
|
|
1558
|
-
'
|
|
1413
|
+
description: Host does not advertise `capabilities.agents.manifestRuntime` and treats the endpoint as absent.
|
|
1559
1414
|
content:
|
|
1560
1415
|
application/json:
|
|
1561
1416
|
schema:
|
|
@@ -1569,21 +1424,11 @@ paths:
|
|
|
1569
1424
|
get:
|
|
1570
1425
|
tags:
|
|
1571
1426
|
- 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
|
-
'
|
|
1427
|
+
summary: Read one installed manifest agent
|
|
1428
|
+
description: 'Returns one installed manifest agent''s inventory entry, or 404 when no such agent is installed or the
|
|
1429
|
+
host does not advertise `capabilities.agents.manifestRuntime`. The lookup is resolved within the authenticated principal''s
|
|
1430
|
+
owner triple: on an `installScope: ''tenant''` host, an agent the caller''s workspace has not approved returns the
|
|
1431
|
+
same 404 as "not installed", so another tenant''s inventory is never disclosed.'
|
|
1587
1432
|
operationId: getAgent
|
|
1588
1433
|
security:
|
|
1589
1434
|
- ApiKeyAuth:
|
|
@@ -1599,21 +1444,13 @@ paths:
|
|
|
1599
1444
|
schema:
|
|
1600
1445
|
type: string
|
|
1601
1446
|
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
|
-
'
|
|
1447
|
+
description: The manifest agentId. MUST NOT be the reserved literals `roster` or `org-chart`, which name the sibling
|
|
1448
|
+
collection routes (`/agents/roster`, `/agents/org-chart`), so `/agents/{agentId}` stays unambiguous.
|
|
1611
1449
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1612
1450
|
responses:
|
|
1613
1451
|
'200':
|
|
1614
|
-
description:
|
|
1615
|
-
|
|
1616
|
-
cards).'
|
|
1452
|
+
description: The agent's inventory entry. When the host advertises `a2a.agentCards`, an entry the host routes a
|
|
1453
|
+
workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent's card (interop.md §Per-agent cards).
|
|
1617
1454
|
content:
|
|
1618
1455
|
application/json:
|
|
1619
1456
|
schema:
|
|
@@ -1638,21 +1475,11 @@ paths:
|
|
|
1638
1475
|
get:
|
|
1639
1476
|
tags:
|
|
1640
1477
|
- 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
|
-
'
|
|
1478
|
+
summary: List an agent's deployment records
|
|
1479
|
+
description: 'Lists the deployment records, one per `(agentId, version)`, for a manifest agent: the lifecycle `state`,
|
|
1480
|
+
the named `channels`, the canary share, the rollback pointer, and the last-transition provenance. Read-only and content-free
|
|
1481
|
+
of any manifest body or credential (SR-1). Gated on `capabilities.agents.deployment.supported: true`; a host that
|
|
1482
|
+
does not advertise it returns 404. Tenant-scoped to the caller''s owner triple when `installScope: ''tenant''`.'
|
|
1656
1483
|
operationId: listAgentDeployments
|
|
1657
1484
|
security:
|
|
1658
1485
|
- ApiKeyAuth:
|
|
@@ -1668,17 +1495,9 @@ paths:
|
|
|
1668
1495
|
schema:
|
|
1669
1496
|
type: string
|
|
1670
1497
|
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
|
-
'
|
|
1498
|
+
description: The manifest agentId. MUST NOT be the reserved literals `roster` or `org-chart`, which name the sibling
|
|
1499
|
+
collection routes (`/agents/roster/{rosterId}`, `/agents/org-chart/{departmentId}`), so `/agents/{agentId}/deployments`
|
|
1500
|
+
stays unambiguous.
|
|
1682
1501
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
1683
1502
|
responses:
|
|
1684
1503
|
'200':
|
|
@@ -1708,21 +1527,12 @@ paths:
|
|
|
1708
1527
|
post:
|
|
1709
1528
|
tags:
|
|
1710
1529
|
- 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
|
-
'
|
|
1530
|
+
summary: Request a deployment state transition
|
|
1531
|
+
description: 'Requests a transition: promote, pause, deprecate, rollback, or adjust-canary. The host MUST authorize
|
|
1532
|
+
fail-closed against the `deploy:*` scope (an absent or unseeded role denies), run any configured approvalGate, and,
|
|
1533
|
+
when the gate carries `requiredEval`, verify that the referenced eval run is terminal and `EvalSummary.passed` before
|
|
1534
|
+
emitting `deployment.promoted`. On success it returns the updated deployment record and emits the matching content-free
|
|
1535
|
+
`deployment.*` event.'
|
|
1726
1536
|
operationId: transitionAgentDeployment
|
|
1727
1537
|
security:
|
|
1728
1538
|
- ApiKeyAuth:
|
|
@@ -1757,13 +1567,8 @@ paths:
|
|
|
1757
1567
|
OpenWOP-Version:
|
|
1758
1568
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
1759
1569
|
'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
|
-
'
|
|
1570
|
+
description: A validation error; a transition the host's advertised `states`/`canary` cannot satisfy; or `no_active_deployment`
|
|
1571
|
+
when a referenced channel resolves to no active version.
|
|
1767
1572
|
content:
|
|
1768
1573
|
application/json:
|
|
1769
1574
|
schema:
|
|
@@ -1774,13 +1579,8 @@ paths:
|
|
|
1774
1579
|
'401':
|
|
1775
1580
|
$ref: '#/components/responses/Unauthenticated'
|
|
1776
1581
|
'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
|
-
'
|
|
1582
|
+
description: Fail-closed authorization denial (the principal lacks the required `deploy:*` scope), or `eval_gate_unmet`
|
|
1583
|
+
when a `requiredEval` gate's referenced eval run is not terminal and passed.
|
|
1784
1584
|
content:
|
|
1785
1585
|
application/json:
|
|
1786
1586
|
schema:
|
|
@@ -1801,19 +1601,11 @@ paths:
|
|
|
1801
1601
|
get:
|
|
1802
1602
|
tags:
|
|
1803
1603
|
- 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
|
-
'
|
|
1604
|
+
summary: List the standing agent roster
|
|
1605
|
+
description: 'Lists the standing agent roster visible to the caller: named "digital-twin employee" instances and their
|
|
1606
|
+
workflow portfolios. Gated on `capabilities.agents.roster.supported: true`; a host that does not advertise it returns
|
|
1607
|
+
404. Tenant-scoped: on an `installScope: ''tenant''` host only the caller''s owner-triple entries are returned. Read-only;
|
|
1608
|
+
content-free (SR-1).'
|
|
1817
1609
|
operationId: listAgentRoster
|
|
1818
1610
|
security:
|
|
1819
1611
|
- ApiKeyAuth:
|
|
@@ -1851,17 +1643,10 @@ paths:
|
|
|
1851
1643
|
get:
|
|
1852
1644
|
tags:
|
|
1853
1645
|
- 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
|
-
'
|
|
1646
|
+
summary: Read one standing roster entry
|
|
1647
|
+
description: 'Returns one standing roster entry, or 404 when no such entry exists, the host does not advertise `capabilities.agents.roster`,
|
|
1648
|
+
or (on an `installScope: ''tenant''` host) the entry is outside the caller''s owner triple. A cross-tenant entry returns
|
|
1649
|
+
the same 404 as "not found", so another tenant''s roster is never disclosed.'
|
|
1865
1650
|
operationId: getAgentRosterEntry
|
|
1866
1651
|
security:
|
|
1867
1652
|
- ApiKeyAuth:
|
|
@@ -1905,17 +1690,10 @@ paths:
|
|
|
1905
1690
|
get:
|
|
1906
1691
|
tags:
|
|
1907
1692
|
- 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
|
-
'
|
|
1693
|
+
summary: Read the caller's agent org chart
|
|
1694
|
+
description: 'Returns the caller''s agent org chart: departments, roles, and `reportsTo` edges over roster members.
|
|
1695
|
+
Gated on `capabilities.agents.orgChart.supported: true`; a host that does not advertise it returns 404. Tenant-scoped.
|
|
1696
|
+
The chart is descriptive only: an org edge confers no authority (`org-position-no-authority-escalation`).'
|
|
1919
1697
|
operationId: getAgentOrgChart
|
|
1920
1698
|
security:
|
|
1921
1699
|
- ApiKeyAuth:
|
|
@@ -1953,17 +1731,10 @@ paths:
|
|
|
1953
1731
|
get:
|
|
1954
1732
|
tags:
|
|
1955
1733
|
- 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
|
-
'
|
|
1734
|
+
summary: Read one department's subtree and responsibility roll-up
|
|
1735
|
+
description: Returns one department's subtree and responsibility roll-up (the union of its members' portfolios). `?recursive=false`
|
|
1736
|
+
narrows the roll-up to direct members without changing the response shape. Returns 404 when the department is unknown
|
|
1737
|
+
or cross-tenant, or the host does not advertise `capabilities.agents.orgChart`. The roll-up grants nothing.
|
|
1967
1738
|
operationId: getAgentOrgChartDepartment
|
|
1968
1739
|
security:
|
|
1969
1740
|
- ApiKeyAuth:
|
|
@@ -1978,7 +1749,7 @@ paths:
|
|
|
1978
1749
|
required: true
|
|
1979
1750
|
schema:
|
|
1980
1751
|
type: string
|
|
1981
|
-
description: The department id to root the subtree
|
|
1752
|
+
description: The department id to root the subtree and roll-up at.
|
|
1982
1753
|
- in: query
|
|
1983
1754
|
name: recursive
|
|
1984
1755
|
required: false
|
|
@@ -2014,23 +1785,11 @@ paths:
|
|
|
2014
1785
|
get:
|
|
2015
1786
|
tags:
|
|
2016
1787
|
- 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
|
-
'
|
|
1788
|
+
summary: List the tools the caller may invoke
|
|
1789
|
+
description: 'Lists the portable `ToolDescriptor`s visible to the caller across every tool source (node-pack, workflow,
|
|
1790
|
+
mcp, connector, host-extension). Gated on `capabilities.toolCatalog.supported: true`; a host that does not advertise
|
|
1791
|
+
it returns 404. The projection is authorization-scoped: a principal sees only the tools it may invoke, and a second
|
|
1792
|
+
principal MUST NOT see another principal''s tools. Read-only; no descriptor carries credential material (SR-1).'
|
|
2034
1793
|
operationId: listTools
|
|
2035
1794
|
security:
|
|
2036
1795
|
- ApiKeyAuth:
|
|
@@ -2049,12 +1808,10 @@ paths:
|
|
|
2049
1808
|
- standard
|
|
2050
1809
|
- compact
|
|
2051
1810
|
default: standard
|
|
2052
|
-
description: '
|
|
2053
|
-
|
|
2054
|
-
true`. Defaults to `standard
|
|
2055
|
-
query
|
|
2056
|
-
|
|
2057
|
-
'
|
|
1811
|
+
description: '`compact` returns the `{ tools: CompactToolDescriptor[] }` projection (heavy descriptor fields omitted,
|
|
1812
|
+
`inputSchema` bounded to the compact structural subset) when the host advertises `capabilities.toolCatalog.compactView:
|
|
1813
|
+
true`. Defaults to `standard`. A host that does not advertise `compactView` treats `view=compact` like any unknown
|
|
1814
|
+
query parameter and returns the standard view.'
|
|
2058
1815
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2059
1816
|
responses:
|
|
2060
1817
|
'200':
|
|
@@ -2095,15 +1852,10 @@ paths:
|
|
|
2095
1852
|
get:
|
|
2096
1853
|
tags:
|
|
2097
1854
|
- 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
|
-
'
|
|
1855
|
+
summary: Read one tool descriptor
|
|
1856
|
+
description: Returns one `ToolDescriptor` by its stable `toolId`, or 404 when no such tool exists, the caller is not
|
|
1857
|
+
authorized for it, or the host does not advertise `capabilities.toolCatalog`. A tool the caller may not see returns
|
|
1858
|
+
the same 404 as "not found".
|
|
2107
1859
|
operationId: getTool
|
|
2108
1860
|
security:
|
|
2109
1861
|
- ApiKeyAuth:
|
|
@@ -2128,11 +1880,9 @@ paths:
|
|
|
2128
1880
|
- standard
|
|
2129
1881
|
- compact
|
|
2130
1882
|
default: standard
|
|
2131
|
-
description: '
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
'
|
|
1883
|
+
description: '`compact` returns one `CompactToolDescriptor` (heavy fields omitted, `inputSchema` bounded to the compact
|
|
1884
|
+
structural subset) when the host advertises `capabilities.toolCatalog.compactView: true`. Defaults to `standard`.
|
|
1885
|
+
A host that does not advertise `compactView` treats `view=compact` like any unknown query parameter.'
|
|
2136
1886
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2137
1887
|
responses:
|
|
2138
1888
|
'200':
|
|
@@ -2163,23 +1913,12 @@ paths:
|
|
|
2163
1913
|
get:
|
|
2164
1914
|
tags:
|
|
2165
1915
|
- 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
|
-
'
|
|
1916
|
+
summary: Read the scorecard of a terminal eval run
|
|
1917
|
+
description: 'Returns the `EvalSummary` scorecard for a terminal eval run (one started with `mode: "eval"`): aggregate
|
|
1918
|
+
and per-task scores, cost, latency, schema validity, redaction-safe safety findings, the suite provenance, and, in
|
|
1919
|
+
regression mode, the score delta against a baseline. It carries no task output, rubric prose, or credentials (SR-1;
|
|
1920
|
+
`eval-summary-no-content-leak`). Gated on `capabilities.agents.evalSuite.supported: true`; a host that does not advertise
|
|
1921
|
+
it returns 404. Returns 409 while the run is not yet terminal.'
|
|
2183
1922
|
operationId: getEvalSummary
|
|
2184
1923
|
security:
|
|
2185
1924
|
- ApiKeyAuth:
|
|
@@ -2206,11 +1945,7 @@ paths:
|
|
|
2206
1945
|
'403':
|
|
2207
1946
|
$ref: '#/components/responses/Forbidden'
|
|
2208
1947
|
'404':
|
|
2209
|
-
description:
|
|
2210
|
-
|
|
2211
|
-
`capabilities.agents.evalSuite`.
|
|
2212
|
-
|
|
2213
|
-
'
|
|
1948
|
+
description: No such run, the run is not an eval run, or the host does not advertise `capabilities.agents.evalSuite`.
|
|
2214
1949
|
content:
|
|
2215
1950
|
application/json:
|
|
2216
1951
|
schema:
|
|
@@ -2231,17 +1966,10 @@ paths:
|
|
|
2231
1966
|
get:
|
|
2232
1967
|
tags:
|
|
2233
1968
|
- 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
|
-
'
|
|
1969
|
+
summary: Diff two runs
|
|
1970
|
+
description: 'Returns a deterministic, replay-aware structured diff of two runs, typically a run and its fork: `divergedAtSeq`,
|
|
1971
|
+
ordered `eventDiffs[]`, and `stateDiff`. The diff is a pure function of the two event logs (see the `replay.md` determinism
|
|
1972
|
+
contract). Requires `runs:read` on both runs. A host that does not implement it returns 404.'
|
|
2245
1973
|
operationId: diffRun
|
|
2246
1974
|
security:
|
|
2247
1975
|
- ApiKeyAuth:
|
|
@@ -2261,11 +1989,8 @@ paths:
|
|
|
2261
1989
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2262
1990
|
responses:
|
|
2263
1991
|
'200':
|
|
2264
|
-
description: 'Structured diff of the two runs. `divergedAtSeq: null`
|
|
2265
|
-
|
|
2266
|
-
`eventDiffs` when the logs are identical.
|
|
2267
|
-
|
|
2268
|
-
'
|
|
1992
|
+
description: 'Structured diff of the two runs. `divergedAtSeq: null` and an empty `eventDiffs` when the logs are
|
|
1993
|
+
identical.'
|
|
2269
1994
|
content:
|
|
2270
1995
|
application/json:
|
|
2271
1996
|
schema:
|
|
@@ -2285,13 +2010,8 @@ paths:
|
|
|
2285
2010
|
'401':
|
|
2286
2011
|
$ref: '#/components/responses/Unauthenticated'
|
|
2287
2012
|
'403':
|
|
2288
|
-
description:
|
|
2289
|
-
|
|
2290
|
-
(`forbidden`); composes with RFC 0048 cross-workspace
|
|
2291
|
-
|
|
2013
|
+
description: The caller lacks `runs:read` on `{runId}` or on `against` (`forbidden`); composes with cross-workspace
|
|
2292
2014
|
isolation.
|
|
2293
|
-
|
|
2294
|
-
'
|
|
2295
2015
|
content:
|
|
2296
2016
|
application/json:
|
|
2297
2017
|
schema:
|
|
@@ -2300,11 +2020,8 @@ paths:
|
|
|
2300
2020
|
OpenWOP-Version:
|
|
2301
2021
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2302
2022
|
'404':
|
|
2303
|
-
description:
|
|
2304
|
-
|
|
2305
|
-
endpoint and treats the path as absent.
|
|
2306
|
-
|
|
2307
|
-
'
|
|
2023
|
+
description: Either run does not exist, or the host does not implement the diff endpoint and treats the path as
|
|
2024
|
+
absent.
|
|
2308
2025
|
content:
|
|
2309
2026
|
application/json:
|
|
2310
2027
|
schema:
|
|
@@ -2316,12 +2033,9 @@ paths:
|
|
|
2316
2033
|
post:
|
|
2317
2034
|
tags:
|
|
2318
2035
|
- 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
|
-
'
|
|
2036
|
+
summary: Administratively pause an in-flight run.
|
|
2037
|
+
description: An operator-driven pause, distinct from cancel (terminal) and from a HITL suspend (workflow-driven). Emits
|
|
2038
|
+
a `run.paused` event when the pause takes effect. The run leaves `paused` only through `:resume` or `:cancel`.
|
|
2325
2039
|
operationId: pauseRun
|
|
2326
2040
|
security:
|
|
2327
2041
|
- ApiKeyAuth:
|
|
@@ -2349,15 +2063,12 @@ paths:
|
|
|
2349
2063
|
- immediate
|
|
2350
2064
|
- drain-current-node
|
|
2351
2065
|
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
|
-
'
|
|
2066
|
+
description: '`immediate` snapshots between events; `drain-current-node` lets the running node reach a terminal
|
|
2067
|
+
state before the run transitions to `paused`.'
|
|
2357
2068
|
additionalProperties: false
|
|
2358
2069
|
responses:
|
|
2359
2070
|
'202':
|
|
2360
|
-
description: Pause requested; transition emits `run.paused` when complete.
|
|
2071
|
+
description: Pause requested; the transition emits `run.paused` when complete.
|
|
2361
2072
|
content:
|
|
2362
2073
|
application/json:
|
|
2363
2074
|
schema:
|
|
@@ -2397,10 +2108,8 @@ paths:
|
|
|
2397
2108
|
post:
|
|
2398
2109
|
tags:
|
|
2399
2110
|
- runs
|
|
2400
|
-
summary: Resume a paused run
|
|
2401
|
-
description: 'Reverses a prior `:pause
|
|
2402
|
-
|
|
2403
|
-
'
|
|
2111
|
+
summary: Resume a paused run.
|
|
2112
|
+
description: 'Reverses a prior `:pause`: the run transitions from `paused` to `running` and emits `run.resumed`.'
|
|
2404
2113
|
operationId: resumeRun
|
|
2405
2114
|
security:
|
|
2406
2115
|
- ApiKeyAuth:
|
|
@@ -2528,7 +2237,7 @@ paths:
|
|
|
2528
2237
|
OpenWOP-Version:
|
|
2529
2238
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2530
2239
|
'409':
|
|
2531
|
-
description: Concurrent resolve
|
|
2240
|
+
description: Concurrent resolve; only one wins.
|
|
2532
2241
|
content:
|
|
2533
2242
|
application/json:
|
|
2534
2243
|
schema:
|
|
@@ -2537,7 +2246,7 @@ paths:
|
|
|
2537
2246
|
OpenWOP-Version:
|
|
2538
2247
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2539
2248
|
'422':
|
|
2540
|
-
description:
|
|
2249
|
+
description: The run was cancelled while the interrupt was pending.
|
|
2541
2250
|
content:
|
|
2542
2251
|
application/json:
|
|
2543
2252
|
schema:
|
|
@@ -2644,9 +2353,9 @@ paths:
|
|
|
2644
2353
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2645
2354
|
responses:
|
|
2646
2355
|
'200':
|
|
2647
|
-
description: Artifact payload. Under `application/json` the shape is implementation-defined
|
|
2648
|
-
(
|
|
2649
|
-
|
|
2356
|
+
description: Artifact payload. Under `application/json` the shape is implementation-defined. Under `application/a2a+json`
|
|
2357
|
+
(negotiated by `Accept`; a host SHOULD offer it) it is an A2A `Artifact` whose `artifactId` equals the path segment,
|
|
2358
|
+
and a `url` Part in it MUST NOT resolve beyond the caller's `artifacts:read` authorization.
|
|
2650
2359
|
content:
|
|
2651
2360
|
application/json:
|
|
2652
2361
|
schema:
|
|
@@ -2700,11 +2409,9 @@ paths:
|
|
|
2700
2409
|
description: Event types to subscribe to (see `run-event.schema.json` enum).
|
|
2701
2410
|
secret:
|
|
2702
2411
|
type: string
|
|
2703
|
-
description:
|
|
2704
|
-
form `whsec_<base64>` (24–64 decoded bytes) when `signatureAlgorithms` lists `standard-webhooks-1
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
'
|
|
2412
|
+
description: The host signs payloads with this secret using HMAC-SHA256. REQUIRED in the Standard Webhooks
|
|
2413
|
+
form `whsec_<base64>` (24–64 decoded bytes) when `signatureAlgorithms` lists `standard-webhooks-1`. Never
|
|
2414
|
+
echoed in any response.
|
|
2708
2415
|
tags:
|
|
2709
2416
|
type: array
|
|
2710
2417
|
items:
|
|
@@ -2721,13 +2428,14 @@ paths:
|
|
|
2721
2428
|
enum:
|
|
2722
2429
|
- v1
|
|
2723
2430
|
- standard-webhooks-1
|
|
2724
|
-
description: '
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
before the `201` (`400 webhook_endpoint_unverified` when the endpoint does not echo the challenge).
|
|
2431
|
+
description: 'The per-subscription signature opt-in. Absent means `["v1"]`. When present it MUST contain
|
|
2432
|
+
`v1`, MUST NOT repeat a value, and every value MUST be listed in the host''s `webhooks.signatureAlgorithms`;
|
|
2433
|
+
otherwise `400 validation_error`.
|
|
2434
|
+
|
|
2729
2435
|
|
|
2730
|
-
|
|
2436
|
+
Listing `standard-webhooks-1` opts the subscription into the Standard Webhooks 1.0.0 companion scheme,
|
|
2437
|
+
which runs endpoint verification before the `201` (`400 webhook_endpoint_unverified` when the endpoint
|
|
2438
|
+
does not echo the challenge).'
|
|
2731
2439
|
additionalProperties: false
|
|
2732
2440
|
responses:
|
|
2733
2441
|
'201':
|
|
@@ -2745,17 +2453,14 @@ paths:
|
|
|
2745
2453
|
type: array
|
|
2746
2454
|
items:
|
|
2747
2455
|
type: string
|
|
2748
|
-
description:
|
|
2749
|
-
`signatureAlgorithms`.
|
|
2456
|
+
description: The list the dispatcher will apply; present whenever the request carried `signatureAlgorithms`.
|
|
2750
2457
|
headers:
|
|
2751
2458
|
OpenWOP-Version:
|
|
2752
2459
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
2753
2460
|
'400':
|
|
2754
|
-
description: '`validation_error` (malformed body, or an invalid `signatureAlgorithms`
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
'
|
|
2461
|
+
description: '`validation_error` (malformed body, or an invalid `signatureAlgorithms` or `secret` opt-in), `webhook_url_rejected`
|
|
2462
|
+
(egress), or `webhook_endpoint_unverified` (an opted-in endpoint did not echo the verification challenge; no subscription
|
|
2463
|
+
is persisted).'
|
|
2759
2464
|
content:
|
|
2760
2465
|
application/json:
|
|
2761
2466
|
schema:
|
|
@@ -2786,11 +2491,8 @@ paths:
|
|
|
2786
2491
|
required: true
|
|
2787
2492
|
schema:
|
|
2788
2493
|
$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
|
-
'
|
|
2494
|
+
description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5), carried as one path segment: `~`-projected or
|
|
2495
|
+
percent-encoded.'
|
|
2794
2496
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2795
2497
|
responses:
|
|
2796
2498
|
'204':
|
|
@@ -2809,13 +2511,15 @@ paths:
|
|
|
2809
2511
|
tags:
|
|
2810
2512
|
- webhooks
|
|
2811
2513
|
operationId: rotateWebhookSecret
|
|
2812
|
-
summary: Rotate a Standard Webhooks subscription's secret with an overlap
|
|
2813
|
-
description: '
|
|
2814
|
-
|
|
2815
|
-
single `v1` signature cannot overlap
|
|
2514
|
+
summary: Rotate a Standard Webhooks subscription's secret with an overlap
|
|
2515
|
+
description: 'Rotates the secret of a subscription that opted into `standard-webhooks-1`. Gated on `webhooks.secretRotation`:
|
|
2516
|
+
a host that does not advertise it MUST answer `404 not_found`. Any other subscription gets `400 validation_error`,
|
|
2517
|
+
because its single `v1` signature cannot overlap. Tenant checks are those of `unregisterWebhook`: `403 id_tenant_mismatch`
|
|
2816
2518
|
when the id''s tenant segment is not the caller''s, checked before the lookup (`identity.md` §5); `404` when unknown.
|
|
2519
|
+
|
|
2520
|
+
|
|
2817
2521
|
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
|
|
2522
|
+
previous one, and `OpenWOP-Signature` stays on the previous secret. At `previousSecretExpiresAt` only the new secret
|
|
2819
2523
|
signs. A second rotation inside an overlap retires the oldest secret immediately. Rotation does not re-verify the
|
|
2820
2524
|
endpoint. The response carries no secret.'
|
|
2821
2525
|
parameters:
|
|
@@ -2824,8 +2528,8 @@ paths:
|
|
|
2824
2528
|
required: true
|
|
2825
2529
|
schema:
|
|
2826
2530
|
$ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
|
|
2827
|
-
description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5,
|
|
2828
|
-
|
|
2531
|
+
description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5), carried as one path segment: `~`-projected or
|
|
2532
|
+
percent-encoded.'
|
|
2829
2533
|
- $ref: '#/components/parameters/IdempotencyKey'
|
|
2830
2534
|
- $ref: '#/components/parameters/OpenWOPVersion'
|
|
2831
2535
|
requestBody:
|
|
@@ -2841,7 +2545,7 @@ paths:
|
|
|
2841
2545
|
secret:
|
|
2842
2546
|
type: string
|
|
2843
2547
|
pattern: ^whsec_[A-Za-z0-9+/]+={0,2}$
|
|
2844
|
-
description: The new secret
|
|
2548
|
+
description: 'The new secret: `whsec_<base64>`, decoding to 24–64 bytes.'
|
|
2845
2549
|
responses:
|
|
2846
2550
|
'200':
|
|
2847
2551
|
description: Rotated. No secret is returned.
|
|
@@ -2884,25 +2588,11 @@ paths:
|
|
|
2884
2588
|
tags:
|
|
2885
2589
|
- audit
|
|
2886
2590
|
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
|
-
'
|
|
2591
|
+
description: Re-walks the audit-log entries in the requested range, recomputes each entry's `prevHash` from the canonical
|
|
2592
|
+
RFC 8785 JCS serialization of the prior entry, verifies signed checkpoints against the host's advertised `auditLogIntegrity.checkpointPublicKey`,
|
|
2593
|
+
and returns `chainValid` with any anomalies. Hosts MUST require the `audit:read` scope. Hosts that do not advertise
|
|
2594
|
+
the `openwop-audit-log-integrity` profile MAY omit this endpoint entirely; clients SHOULD check `/.well-known/openwop`
|
|
2595
|
+
first. See `spec/v1/auth-profiles.md` §`openwop-audit-log-integrity` §4.
|
|
2906
2596
|
operationId: verifyAuditLog
|
|
2907
2597
|
security:
|
|
2908
2598
|
- ApiKeyAuth:
|
|
@@ -2980,13 +2670,8 @@ paths:
|
|
|
2980
2670
|
name: tag
|
|
2981
2671
|
schema:
|
|
2982
2672
|
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
|
-
'
|
|
2673
|
+
description: Filter to templates whose `tags[]` contains this exact tag. Hosts MAY accept the parameter more than
|
|
2674
|
+
once; repeated values combine with AND (every named tag must be present).
|
|
2990
2675
|
- in: query
|
|
2991
2676
|
name: modelClass
|
|
2992
2677
|
schema:
|
|
@@ -3040,8 +2725,8 @@ paths:
|
|
|
3040
2725
|
'403':
|
|
3041
2726
|
$ref: '#/components/responses/Forbidden'
|
|
3042
2727
|
'501':
|
|
3043
|
-
description: Host does not advertise capabilities.prompts.endpointsSupported
|
|
3044
|
-
|
|
2728
|
+
description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
|
|
2729
|
+
composition; `endpointsSupported` gates this REST surface independently.)
|
|
3045
2730
|
content:
|
|
3046
2731
|
application/json:
|
|
3047
2732
|
schema:
|
|
@@ -3096,7 +2781,7 @@ paths:
|
|
|
3096
2781
|
OpenWOP-Version:
|
|
3097
2782
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3098
2783
|
'501':
|
|
3099
|
-
description: Host does not advertise capabilities.prompts.mutableLibrary
|
|
2784
|
+
description: Host does not advertise `capabilities.prompts.mutableLibrary`.
|
|
3100
2785
|
content:
|
|
3101
2786
|
application/json:
|
|
3102
2787
|
schema:
|
|
@@ -3112,7 +2797,7 @@ paths:
|
|
|
3112
2797
|
schema:
|
|
3113
2798
|
type: string
|
|
3114
2799
|
pattern: ^[a-z0-9][a-z0-9._-]{0,127}$
|
|
3115
|
-
description: PromptTemplate.templateId
|
|
2800
|
+
description: '`PromptTemplate.templateId`.'
|
|
3116
2801
|
- in: query
|
|
3117
2802
|
name: version
|
|
3118
2803
|
schema:
|
|
@@ -3124,13 +2809,8 @@ paths:
|
|
|
3124
2809
|
schema:
|
|
3125
2810
|
type: string
|
|
3126
2811
|
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
|
-
'
|
|
2812
|
+
description: Disambiguates when several installed packs ship the same templateId. Hosts MUST return `prompt_ref_ambiguous`
|
|
2813
|
+
when the reference is ambiguous and libraryId is omitted.
|
|
3134
2814
|
get:
|
|
3135
2815
|
tags:
|
|
3136
2816
|
- prompts
|
|
@@ -3167,7 +2847,7 @@ paths:
|
|
|
3167
2847
|
OpenWOP-Version:
|
|
3168
2848
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3169
2849
|
'400':
|
|
3170
|
-
description: '`prompt_ref_ambiguous` when libraryId disambiguation is required.'
|
|
2850
|
+
description: '`prompt_ref_ambiguous` when `libraryId` disambiguation is required.'
|
|
3171
2851
|
content:
|
|
3172
2852
|
application/json:
|
|
3173
2853
|
schema:
|
|
@@ -3189,8 +2869,8 @@ paths:
|
|
|
3189
2869
|
OpenWOP-Version:
|
|
3190
2870
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3191
2871
|
'501':
|
|
3192
|
-
description: Host does not advertise capabilities.prompts.endpointsSupported
|
|
3193
|
-
|
|
2872
|
+
description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
|
|
2873
|
+
composition; `endpointsSupported` gates this REST surface independently.)
|
|
3194
2874
|
content:
|
|
3195
2875
|
application/json:
|
|
3196
2876
|
schema:
|
|
@@ -3263,7 +2943,7 @@ paths:
|
|
|
3263
2943
|
OpenWOP-Version:
|
|
3264
2944
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3265
2945
|
'501':
|
|
3266
|
-
description: Host does not advertise capabilities.prompts.mutableLibrary
|
|
2946
|
+
description: Host does not advertise `capabilities.prompts.mutableLibrary`.
|
|
3267
2947
|
content:
|
|
3268
2948
|
application/json:
|
|
3269
2949
|
schema:
|
|
@@ -3310,7 +2990,7 @@ paths:
|
|
|
3310
2990
|
OpenWOP-Version:
|
|
3311
2991
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3312
2992
|
'501':
|
|
3313
|
-
description: Host does not advertise capabilities.prompts.mutableLibrary
|
|
2993
|
+
description: Host does not advertise `capabilities.prompts.mutableLibrary`.
|
|
3314
2994
|
content:
|
|
3315
2995
|
application/json:
|
|
3316
2996
|
schema:
|
|
@@ -3325,25 +3005,11 @@ paths:
|
|
|
3325
3005
|
tags:
|
|
3326
3006
|
- prompts
|
|
3327
3007
|
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
|
-
'
|
|
3008
|
+
description: Returns the composed body, its sha256 hash, and per-variable hashes. Does not dispatch an LLM call. The
|
|
3009
|
+
response's `hash` MUST equal the `hash` a matching `prompt.composed` event would carry at dispatch time for the same
|
|
3010
|
+
`(ref, variables, contentTrust)` inputs, so rendering is deterministic and replay-safe. Secret-source variable values
|
|
3011
|
+
MUST be supplied as `[REDACTED:<credentialRef>]` markers; the host resolves the plaintext internally and never echoes
|
|
3012
|
+
it in the `composed` response field (SR-1).
|
|
3347
3013
|
operationId: renderPromptTemplate
|
|
3348
3014
|
security:
|
|
3349
3015
|
- ApiKeyAuth:
|
|
@@ -3366,24 +3032,15 @@ paths:
|
|
|
3366
3032
|
$ref: ../../schemas/v2/prompt-ref.schema.json
|
|
3367
3033
|
variables:
|
|
3368
3034
|
type: object
|
|
3369
|
-
description:
|
|
3370
|
-
|
|
3371
|
-
Secret-source bindings carry `[REDACTED:<credentialRef>]`
|
|
3372
|
-
|
|
3035
|
+
description: Variable bindings keyed by `PromptVariable.name`. Secret-source bindings carry `[REDACTED:<credentialRef>]`
|
|
3373
3036
|
markers; the host resolves the real value internally.
|
|
3374
|
-
|
|
3375
|
-
'
|
|
3376
3037
|
additionalProperties: true
|
|
3377
3038
|
contentTrust:
|
|
3378
3039
|
type: string
|
|
3379
3040
|
enum:
|
|
3380
3041
|
- trusted
|
|
3381
3042
|
- untrusted
|
|
3382
|
-
description:
|
|
3383
|
-
|
|
3384
|
-
propagated through composition per RFC 0027 §E.
|
|
3385
|
-
|
|
3386
|
-
'
|
|
3043
|
+
description: Aggregate trust marker for the supplied bindings, propagated through composition.
|
|
3387
3044
|
responses:
|
|
3388
3045
|
'200':
|
|
3389
3046
|
description: Composed result.
|
|
@@ -3420,13 +3077,8 @@ paths:
|
|
|
3420
3077
|
OpenWOP-Version:
|
|
3421
3078
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3422
3079
|
'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
|
-
'
|
|
3080
|
+
description: '`prompt_variable_unresolved` (a required variable is missing), `prompt_variable_type_mismatch` (bound
|
|
3081
|
+
type differs from declared type), or `prompt_ref_invalid` (malformed PromptRef).'
|
|
3430
3082
|
content:
|
|
3431
3083
|
application/json:
|
|
3432
3084
|
schema:
|
|
@@ -3448,8 +3100,8 @@ paths:
|
|
|
3448
3100
|
OpenWOP-Version:
|
|
3449
3101
|
$ref: '#/components/headers/OpenWOPVersion'
|
|
3450
3102
|
'501':
|
|
3451
|
-
description: Host does not advertise capabilities.prompts.endpointsSupported
|
|
3452
|
-
|
|
3103
|
+
description: Host does not advertise `capabilities.prompts.endpointsSupported`. (`supported` gates node-execution
|
|
3104
|
+
composition; `endpointsSupported` gates this REST surface independently.)
|
|
3453
3105
|
content:
|
|
3454
3106
|
application/json:
|
|
3455
3107
|
schema:
|
|
@@ -3464,9 +3116,9 @@ paths:
|
|
|
3464
3116
|
tags:
|
|
3465
3117
|
- host
|
|
3466
3118
|
operationId: getEffectSeamManifest
|
|
3467
|
-
summary:
|
|
3468
|
-
description:
|
|
3469
|
-
|
|
3119
|
+
summary: Read the host's effect-seam manifest
|
|
3120
|
+
description: Lists every outbound effect seam that replay suppression covers. A seam omitted here is invisible to the
|
|
3121
|
+
conformance suite; an audit of the host's seams is the control.
|
|
3470
3122
|
responses:
|
|
3471
3123
|
'200':
|
|
3472
3124
|
description: The manifest.
|
|
@@ -3495,9 +3147,8 @@ paths:
|
|
|
3495
3147
|
tags:
|
|
3496
3148
|
- runs
|
|
3497
3149
|
operationId: getRunCompensation
|
|
3498
|
-
summary:
|
|
3499
|
-
description: The
|
|
3500
|
-
/ RFC 0173 §B).
|
|
3150
|
+
summary: Read a run's compensation plan and attempts
|
|
3151
|
+
description: The run's compensation plan and every attempt, as a read projection.
|
|
3501
3152
|
responses:
|
|
3502
3153
|
'200':
|
|
3503
3154
|
description: The projection.
|
|
@@ -3526,8 +3177,8 @@ paths:
|
|
|
3526
3177
|
tags:
|
|
3527
3178
|
- runs
|
|
3528
3179
|
operationId: getRunEffects
|
|
3529
|
-
summary:
|
|
3530
|
-
description:
|
|
3180
|
+
summary: Read a run's Layer-2 effect ledger
|
|
3181
|
+
description: Effect records keyed by business identity; the witness for the Layer-2 effect-identity obligation.
|
|
3531
3182
|
responses:
|
|
3532
3183
|
'200':
|
|
3533
3184
|
description: The ledger projection.
|
|
@@ -3554,20 +3205,22 @@ paths:
|
|
|
3554
3205
|
tags:
|
|
3555
3206
|
- webhooks
|
|
3556
3207
|
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
|
-
|
|
3208
|
+
summary: List a subscription's dead-lettered deliveries
|
|
3209
|
+
description: 'Lists deliveries that were dead-lettered, making `webhooks.md` §Durability observable. A delivery whose
|
|
3210
|
+
retries are exhausted, or a `payload_unprojectable` delivery dead-lettered on its first attempt, appears here until
|
|
3211
|
+
`retentionDays` elapse. Gated on the `webhooks.deadLetter` facet: a host that does not advertise it answers `404 not_found`.
|
|
3212
|
+
|
|
3213
|
+
|
|
3214
|
+
The record is content-free: it names a delivery and never carries the delivered bytes, the request headers, or the
|
|
3215
|
+
subscription secret.'
|
|
3563
3216
|
parameters:
|
|
3564
3217
|
- name: webhookId
|
|
3565
3218
|
in: path
|
|
3566
3219
|
required: true
|
|
3567
3220
|
schema:
|
|
3568
3221
|
$ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
|
|
3569
|
-
description: The subscription, tenant-bound (`identity.md` §5
|
|
3570
|
-
|
|
3222
|
+
description: 'The subscription, tenant-bound (`identity.md` §5) and carried as one path segment: `~`-projected or
|
|
3223
|
+
percent-encoded.'
|
|
3571
3224
|
- name: limit
|
|
3572
3225
|
in: query
|
|
3573
3226
|
required: false
|
|
@@ -3615,12 +3268,12 @@ paths:
|
|
|
3615
3268
|
tags:
|
|
3616
3269
|
- host
|
|
3617
3270
|
operationId: streamHostEvents
|
|
3618
|
-
summary:
|
|
3619
|
-
description: The
|
|
3620
|
-
|
|
3271
|
+
summary: Stream host-scoped events (`heartbeat.*`) as SSE
|
|
3272
|
+
description: The default `hostEvents` address; a host MAY declare another under `heartbeat.deliveryChannel`. Carries
|
|
3273
|
+
no run data.
|
|
3621
3274
|
responses:
|
|
3622
3275
|
'200':
|
|
3623
|
-
description: text/event-stream of hostEvents messages.
|
|
3276
|
+
description: '`text/event-stream` of `hostEvents` messages.'
|
|
3624
3277
|
content:
|
|
3625
3278
|
text/event-stream:
|
|
3626
3279
|
schema:
|
|
@@ -3645,28 +3298,13 @@ components:
|
|
|
3645
3298
|
type: http
|
|
3646
3299
|
scheme: bearer
|
|
3647
3300
|
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
|
-
'
|
|
3301
|
+
description: OpenWOP API key. The format is implementation-defined; the reference implementation uses `hk_`/`hk_test_`
|
|
3302
|
+
prefixes. Each key carries one or more scopes from the canonical vocabulary (`manifest:read`, `runs:create`, `runs:read`,
|
|
3303
|
+
`runs:cancel`, `artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`). See `auth.md`.
|
|
3659
3304
|
OAuth2:
|
|
3660
3305
|
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
|
-
'
|
|
3306
|
+
description: 'The OAuth 2.0 lane (`auth.lanes[].lane: "oauth2"`). Discovery is RFC 9728 Protected Resource Metadata
|
|
3307
|
+
at the path-inserted well-known URI (`identity.md` §2.5). The URLs are placeholders.'
|
|
3670
3308
|
flows:
|
|
3671
3309
|
clientCredentials:
|
|
3672
3310
|
tokenUrl: https://issuer.example/oauth2/token
|
|
@@ -3718,26 +3356,14 @@ components:
|
|
|
3718
3356
|
OpenIdConnect:
|
|
3719
3357
|
type: openIdConnect
|
|
3720
3358
|
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
|
-
'
|
|
3359
|
+
description: 'The OpenID Connect lane (`auth.lanes[].lane: "oidc"`). An ID token MAY be the bearer only when its `aud`
|
|
3360
|
+
equals the host''s configured audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`. The URL is a
|
|
3361
|
+
placeholder.'
|
|
3730
3362
|
MutualTLS:
|
|
3731
3363
|
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
|
-
'
|
|
3364
|
+
description: 'The mTLS lane (`auth.lanes[].lane: "mtls"`). mTLS is required *in addition to* a bearer, never instead
|
|
3365
|
+
of one, so it appears in no canonical requirement below. A host that requires it adds `MutualTLS: []` inside each
|
|
3366
|
+
requirement object (AND).'
|
|
3741
3367
|
parameters:
|
|
3742
3368
|
WorkflowId:
|
|
3743
3369
|
in: path
|
|
@@ -3751,11 +3377,8 @@ components:
|
|
|
3751
3377
|
required: true
|
|
3752
3378
|
schema:
|
|
3753
3379
|
$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
|
-
'
|
|
3380
|
+
description: Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5). The `/` is part of the identifier and MUST be percent-encoded
|
|
3381
|
+
as `%2F` in the path segment.
|
|
3759
3382
|
IdempotencyKey:
|
|
3760
3383
|
in: header
|
|
3761
3384
|
name: Idempotency-Key
|
|
@@ -3763,15 +3386,8 @@ components:
|
|
|
3763
3386
|
schema:
|
|
3764
3387
|
type: string
|
|
3765
3388
|
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
|
-
'
|
|
3389
|
+
description: 'Per-mutation idempotency token (`idempotency.md` Layer 1). The server caches `(tenantId, endpoint, key)`
|
|
3390
|
+
→ response for ≥24h. A duplicate request returns the cached response with `OpenWOP-Idempotent-Replay: true`.'
|
|
3775
3391
|
OpenWOPVersion:
|
|
3776
3392
|
name: OpenWOP-Version
|
|
3777
3393
|
in: header
|
|
@@ -3779,14 +3395,15 @@ components:
|
|
|
3779
3395
|
schema:
|
|
3780
3396
|
type: string
|
|
3781
3397
|
pattern: ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$
|
|
3782
|
-
description:
|
|
3398
|
+
description: Selects one of the host's listed major.minor versions. Absent, the host uses its `preferredVersion`; an
|
|
3399
|
+
unlisted value is 406 protocol_version_unsupported.
|
|
3783
3400
|
responses:
|
|
3784
3401
|
Unauthenticated:
|
|
3785
3402
|
description: Missing or invalid credential.
|
|
3786
3403
|
headers:
|
|
3787
3404
|
WWW-Authenticate:
|
|
3788
|
-
description:
|
|
3789
|
-
|
|
3405
|
+
description: A `Bearer` challenge. On a host with an oauth2 or oidc lane it carries `resource_metadata` and `error="invalid_token"`.
|
|
3406
|
+
Never sent on a non-disclosure 404.
|
|
3790
3407
|
schema:
|
|
3791
3408
|
type: string
|
|
3792
3409
|
content:
|
|
@@ -3797,8 +3414,8 @@ components:
|
|
|
3797
3414
|
description: Credential valid but lacks required scope or fails resource binding.
|
|
3798
3415
|
headers:
|
|
3799
3416
|
WWW-Authenticate:
|
|
3800
|
-
description:
|
|
3801
|
-
|
|
3417
|
+
description: On a scope refusal, `error="insufficient_scope"` with every required `scope`. Absent on a resource-binding
|
|
3418
|
+
403.
|
|
3802
3419
|
schema:
|
|
3803
3420
|
type: string
|
|
3804
3421
|
content:
|
|
@@ -3836,15 +3453,13 @@ components:
|
|
|
3836
3453
|
$ref: ../../schemas/v2/run-snapshot.schema.json
|
|
3837
3454
|
RunClaimConflict:
|
|
3838
3455
|
$ref: ../../schemas/v2/error-envelope.schema.json
|
|
3839
|
-
description:
|
|
3840
|
-
carries the code).
|
|
3456
|
+
description: '`RunClaimConflict` is the canonical error envelope; `error` carries the code.'
|
|
3841
3457
|
UnsupportedStreamMode:
|
|
3842
3458
|
$ref: ../../schemas/v2/error-envelope.schema.json
|
|
3843
|
-
description:
|
|
3844
|
-
carries the code).
|
|
3459
|
+
description: '`UnsupportedStreamMode` is the canonical error envelope; `error` carries the code.'
|
|
3845
3460
|
headers:
|
|
3846
3461
|
OpenWOPVersion:
|
|
3847
3462
|
schema:
|
|
3848
3463
|
type: string
|
|
3849
|
-
description:
|
|
3464
|
+
description: The contract that produced this response. It MUST equal the one used.
|
|
3850
3465
|
required: true
|