@openwop/spec-artifacts 2.35.1 → 2.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CORPUS-STAMP.json +103 -89
  2. package/api/openapi.yaml +325 -4
  3. package/api/seams-v2.yaml +342 -1
  4. package/api/v2/asyncapi.yaml +1 -1
  5. package/api/v2/openapi.yaml +564 -8
  6. package/package.json +1 -1
  7. package/schemas/a2a-task-state.schema.json +3 -3
  8. package/schemas/artifact-type-pack-manifest.schema.json +3 -3
  9. package/schemas/capabilities.schema.json +34 -1
  10. package/schemas/connection-pack-manifest.schema.json +14 -0
  11. package/schemas/debug-bundle.schema.json +20 -0
  12. package/schemas/dispatch-config.schema.json +1 -1
  13. package/schemas/localized-content-language-settings.schema.json +3 -3
  14. package/schemas/localized-content-page.schema.json +2 -2
  15. package/schemas/localized-content-section.schema.json +3 -3
  16. package/schemas/run-event-payloads.schema.json +4 -2
  17. package/schemas/suspend-request.schema.json +61 -4
  18. package/schemas/v2/a2a-task-state.schema.json +10 -9
  19. package/schemas/v2/agent-deployment-transition.schema.json +4 -4
  20. package/schemas/v2/agent-deployment.schema.json +7 -7
  21. package/schemas/v2/agent-eval-suite.schema.json +10 -10
  22. package/schemas/v2/agent-inventory-response.schema.json +8 -2
  23. package/schemas/v2/artifact-type-pack-manifest.schema.json +3 -3
  24. package/schemas/v2/artifact.schema.json +84 -0
  25. package/schemas/v2/capabilities.schema.json +82 -8
  26. package/schemas/v2/certification-bundle.schema.json +1 -1
  27. package/schemas/v2/channel-presence-payload.schema.json +3 -3
  28. package/schemas/v2/connection-pack-manifest.schema.json +14 -0
  29. package/schemas/v2/conversation-event.schema.json +9 -2
  30. package/schemas/v2/conversation-turn.schema.json +19 -12
  31. package/schemas/v2/dispatch-config.schema.json +1 -1
  32. package/schemas/v2/envelopes/ui.a2ui-surface.schema.json +920 -22
  33. package/schemas/v2/error-envelope.schema.json +11 -1
  34. package/schemas/v2/eval-summary.schema.json +1 -2
  35. package/schemas/v2/goal.schema.json +4 -4
  36. package/schemas/v2/localized-content-language-settings.schema.json +3 -3
  37. package/schemas/v2/localized-content-page.schema.json +2 -2
  38. package/schemas/v2/localized-content-section.schema.json +3 -3
  39. package/schemas/v2/node-pack-manifest.schema.json +105 -0
  40. package/schemas/v2/part.schema.json +81 -0
  41. package/schemas/v2/proposal.schema.json +6 -6
  42. package/schemas/v2/run-event-payloads.schema.json +5 -3
  43. package/schemas/v2/self-hosted-runner-dispatch-frame.schema.json +2 -2
  44. package/schemas/v2/self-hosted-runner-result-frame.schema.json +1 -1
  45. package/schemas/v2/suspend-request.schema.json +251 -6
  46. package/schemas/v2/tool-descriptor.schema.json +246 -2
  47. package/schemas/v2/trigger-event.schema.json +1 -2
  48. package/schemas/v2/trigger-subscription.schema.json +1 -2
  49. package/schemas/v2/webhook-verification.schema.json +22 -0
  50. package/schemas/v2/workflow-definition.schema.json +25 -25
  51. package/spec/v1/alias-detectors.json +13 -1
  52. package/spec/v1/core-standard-manifest.json +2 -2
  53. package/spec/v1/deprecations.json +45 -1
  54. package/spec/v1/deprecations.schema.json +119 -4
  55. package/spec/v1/gaps.json +1925 -4
  56. package/spec/v2/README.md +5 -2
  57. package/spec/v2/core/capabilities.md +13 -26
  58. package/spec/v2/core/conformance.md +5 -8
  59. package/spec/v2/core/connection-packs.md +1 -1
  60. package/spec/v2/core/conversation.md +1 -1
  61. package/spec/v2/core/errors.md +8 -3
  62. package/spec/v2/core/events.md +8 -20
  63. package/spec/v2/core/form-content-packs.md +2 -2
  64. package/spec/v2/core/headers.md +5 -4
  65. package/spec/v2/core/host-services.md +6 -2
  66. package/spec/v2/core/idempotency.md +1 -1
  67. package/spec/v2/core/identity.md +23 -12
  68. package/spec/v2/core/interop.md +34 -4
  69. package/spec/v2/core/interrupt.md +6 -3
  70. package/spec/v2/core/node-pack-runtimes.md +20 -0
  71. package/spec/v2/core/oauth.md +32 -0
  72. package/spec/v2/core/overview.md +19 -6
  73. package/spec/v2/core/packs.md +4 -6
  74. package/spec/v2/core/persistence.md +20 -55
  75. package/spec/v2/core/replay.md +5 -11
  76. package/spec/v2/core/runs.md +9 -8
  77. package/spec/v2/core/security-defaults.md +18 -20
  78. package/spec/v2/core/tool-catalog.md +22 -0
  79. package/spec/v2/core/versioning.md +10 -28
  80. package/spec/v2/core/webhooks.md +16 -4
  81. package/spec/v2/core/workflow-chain-packs.md +1 -1
  82. package/spec/v2/corrections.json +32 -0
  83. package/spec/v2/corrections.schema.json +49 -0
  84. package/spec/v2/declaration.json +18 -13
  85. package/spec/v2/declaration.schema.json +3 -1
  86. package/spec/v2/errors.json +46 -1
  87. package/spec/v2/ext/a2uiSurface/README.md +131 -17
  88. package/spec/v2/ext/dataIntegration/README.md +5 -0
  89. package/spec/v2/facets/a2a.schema.json +4 -0
  90. package/spec/v2/facets/auth.schema.json +24 -0
  91. package/spec/v2/facets/mcp.schema.json +4 -0
  92. package/spec/v2/facets/oauth.schema.json +70 -0
  93. package/spec/v2/facets/webhooks.schema.json +23 -2
  94. package/spec/v2/id-field-bindings.json +2 -0
  95. package/spec/v2/interop-map.json +639 -0
  96. package/spec/v2/interop-map.schema.json +458 -0
  97. package/spec/v2/migrations.json +7 -0
  98. package/spec/v2/migrations.schema.json +58 -0
  99. package/spec/v2/path-manifest.json +6 -1
  100. package/spec/v2/release.json +3 -3
  101. package/spec/v2/surface-baseline.json +7981 -0
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: OpenWOP v2 API
4
- version: 2.35.0
4
+ version: 2.36.0
5
5
  summary: REST surface for declaring, executing, suspending, resuming, and observing multi-step workflows.
6
6
  description: GENERATED by scripts/derive-v2-api.py from api/openapi.yaml and the RFC 0167 children (v2 charter Phase 3,
7
7
  P3-C). Bare origin, unversioned path keys, negotiation by `OpenWOP-Version` + `protocolVersions[]` (RFC 0172 §A). No seam
@@ -141,6 +141,13 @@ paths:
141
141
  - workflows
142
142
  summary: Read a workflow definition.
143
143
  operationId: getWorkflow
144
+ security:
145
+ - ApiKeyAuth:
146
+ - manifest:read
147
+ - OAuth2:
148
+ - manifest:read
149
+ - OpenIdConnect:
150
+ - manifest:read
144
151
  parameters:
145
152
  - $ref: '#/components/parameters/WorkflowId'
146
153
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -166,6 +173,13 @@ paths:
166
173
  - runs
167
174
  summary: Create a new run.
168
175
  operationId: createRun
176
+ security:
177
+ - ApiKeyAuth:
178
+ - runs:create
179
+ - OAuth2:
180
+ - runs:create
181
+ - OpenIdConnect:
182
+ - runs:create
169
183
  parameters:
170
184
  - $ref: '#/components/parameters/IdempotencyKey'
171
185
  - in: header
@@ -383,12 +397,26 @@ paths:
383
397
  $ref: '#/components/responses/Unauthenticated'
384
398
  '404':
385
399
  $ref: '#/components/responses/NotFound'
400
+ security:
401
+ - ApiKeyAuth:
402
+ - runs:read
403
+ - OAuth2:
404
+ - runs:read
405
+ - OpenIdConnect:
406
+ - runs:read
386
407
  /runs/{runId}:
387
408
  get:
388
409
  tags:
389
410
  - runs
390
411
  summary: Read run state (cached projection).
391
412
  operationId: getRun
413
+ security:
414
+ - ApiKeyAuth:
415
+ - runs:read
416
+ - OAuth2:
417
+ - runs:read
418
+ - OpenIdConnect:
419
+ - runs:read
392
420
  parameters:
393
421
  - $ref: '#/components/parameters/RunId'
394
422
  - in: header
@@ -453,6 +481,13 @@ paths:
453
481
  - runs
454
482
  summary: SSE stream of run events.
455
483
  operationId: streamRunEvents
484
+ security:
485
+ - ApiKeyAuth:
486
+ - runs:read
487
+ - OAuth2:
488
+ - runs:read
489
+ - OpenIdConnect:
490
+ - runs:read
456
491
  parameters:
457
492
  - $ref: '#/components/parameters/RunId'
458
493
  - in: query
@@ -519,6 +554,13 @@ paths:
519
554
  - runs
520
555
  summary: Long-poll fallback for non-SSE clients.
521
556
  operationId: pollRunEvents
557
+ security:
558
+ - ApiKeyAuth:
559
+ - runs:read
560
+ - OAuth2:
561
+ - runs:read
562
+ - OpenIdConnect:
563
+ - runs:read
522
564
  parameters:
523
565
  - $ref: '#/components/parameters/RunId'
524
566
  - in: query
@@ -582,6 +624,13 @@ paths:
582
624
  - runs
583
625
  summary: Cancel an in-flight run.
584
626
  operationId: cancelRun
627
+ security:
628
+ - ApiKeyAuth:
629
+ - runs:cancel
630
+ - OAuth2:
631
+ - runs:cancel
632
+ - OpenIdConnect:
633
+ - runs:cancel
585
634
  parameters:
586
635
  - $ref: '#/components/parameters/RunId'
587
636
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -624,6 +673,13 @@ paths:
624
673
  - runs
625
674
  summary: Record a non-blocking quality annotation on a run (RFC 0056).
626
675
  operationId: createAnnotation
676
+ security:
677
+ - ApiKeyAuth:
678
+ - runs:annotate
679
+ - OAuth2:
680
+ - runs:annotate
681
+ - OpenIdConnect:
682
+ - runs:annotate
627
683
  parameters:
628
684
  - $ref: '#/components/parameters/RunId'
629
685
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -666,6 +722,13 @@ paths:
666
722
  - runs
667
723
  summary: List the annotations recorded on a run (RFC 0056).
668
724
  operationId: listAnnotations
725
+ security:
726
+ - ApiKeyAuth:
727
+ - runs:read
728
+ - OAuth2:
729
+ - runs:read
730
+ - OpenIdConnect:
731
+ - runs:read
669
732
  parameters:
670
733
  - $ref: '#/components/parameters/RunId'
671
734
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -721,6 +784,13 @@ paths:
721
784
 
722
785
  '
723
786
  operationId: createTriggerSubscription
787
+ security:
788
+ - ApiKeyAuth:
789
+ - webhooks:manage
790
+ - OAuth2:
791
+ - webhooks:manage
792
+ - OpenIdConnect:
793
+ - webhooks:manage
724
794
  parameters:
725
795
  - $ref: '#/components/parameters/IdempotencyKey'
726
796
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -866,6 +936,13 @@ paths:
866
936
 
867
937
  '
868
938
  operationId: listContentPages
939
+ security:
940
+ - ApiKeyAuth:
941
+ - content:read
942
+ - OAuth2:
943
+ - content:read
944
+ - OpenIdConnect:
945
+ - content:read
869
946
  responses:
870
947
  '200':
871
948
  description: The caller-tenant's pages.
@@ -899,6 +976,13 @@ paths:
899
976
  summary: Create a content page (RFC 0103 §D, admin).
900
977
  description: Tenant-scoped page creation. Requires `content.write` scope.
901
978
  operationId: createContentPage
979
+ security:
980
+ - ApiKeyAuth:
981
+ - content:write
982
+ - OAuth2:
983
+ - content:write
984
+ - OpenIdConnect:
985
+ - content:write
902
986
  requestBody:
903
987
  required: true
904
988
  content:
@@ -937,12 +1021,19 @@ paths:
937
1021
  summary: Upsert a section's base or per-locale fields (RFC 0103 §D, admin).
938
1022
  description: 'Locale-targeted write: `locale == content.baseLocale` upserts the
939
1023
 
940
- section''s base `data`; any other (BCP-47-subset) locale upserts
1024
+ section''s base `data`; any other (case-canonical BCP 47 subset, RFC 0206) locale upserts
941
1025
 
942
1026
  `localizations[locale]`. Tenant-scoped; requires `content.write`.
943
1027
 
944
1028
  '
945
1029
  operationId: putContentSection
1030
+ security:
1031
+ - ApiKeyAuth:
1032
+ - content:write
1033
+ - OAuth2:
1034
+ - content:write
1035
+ - OpenIdConnect:
1036
+ - content:write
946
1037
  parameters:
947
1038
  - name: pageId
948
1039
  in: path
@@ -970,7 +1061,7 @@ paths:
970
1061
  properties:
971
1062
  locale:
972
1063
  type: string
973
- pattern: ^[a-z]{2}(-[A-Z]{2})?$
1064
+ pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
974
1065
  description: Target locale; baseLocale upserts `data`, else `localizations[locale]`.
975
1066
  data:
976
1067
  type: object
@@ -1008,6 +1099,13 @@ paths:
1008
1099
  summary: Read the tenant's content language settings (RFC 0103 §B, admin).
1009
1100
  description: Tenant-scoped read of `{ baseLocale, supportedLocales, autoTranslateOnPublish }`. Requires `content.read`.
1010
1101
  operationId: getContentSettings
1102
+ security:
1103
+ - ApiKeyAuth:
1104
+ - content:read
1105
+ - OAuth2:
1106
+ - content:read
1107
+ - OpenIdConnect:
1108
+ - content:read
1011
1109
  responses:
1012
1110
  '200':
1013
1111
  description: The tenant's language settings.
@@ -1043,6 +1141,13 @@ paths:
1043
1141
 
1044
1142
  '
1045
1143
  operationId: putContentSettings
1144
+ security:
1145
+ - ApiKeyAuth:
1146
+ - content:write
1147
+ - OAuth2:
1148
+ - content:write
1149
+ - OpenIdConnect:
1150
+ - content:write
1046
1151
  requestBody:
1047
1152
  required: true
1048
1153
  content:
@@ -1095,6 +1200,13 @@ paths:
1095
1200
 
1096
1201
  '
1097
1202
  operationId: bulkCancelRuns
1203
+ security:
1204
+ - ApiKeyAuth:
1205
+ - runs:cancel
1206
+ - OAuth2:
1207
+ - runs:cancel
1208
+ - OpenIdConnect:
1209
+ - runs:cancel
1098
1210
  parameters:
1099
1211
  - $ref: '#/components/parameters/IdempotencyKey'
1100
1212
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -1164,6 +1276,16 @@ paths:
1164
1276
  - runs
1165
1277
  summary: Fork the run for replay or branch (see `replay.md`).
1166
1278
  operationId: forkRun
1279
+ security:
1280
+ - ApiKeyAuth:
1281
+ - runs:create
1282
+ - runs:read
1283
+ - OAuth2:
1284
+ - runs:create
1285
+ - runs:read
1286
+ - OpenIdConnect:
1287
+ - runs:create
1288
+ - runs:read
1167
1289
  parameters:
1168
1290
  - $ref: '#/components/parameters/RunId'
1169
1291
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -1273,6 +1395,13 @@ paths:
1273
1395
 
1274
1396
  '
1275
1397
  operationId: getRunAncestry
1398
+ security:
1399
+ - ApiKeyAuth:
1400
+ - runs:read
1401
+ - OAuth2:
1402
+ - runs:read
1403
+ - OpenIdConnect:
1404
+ - runs:read
1276
1405
  parameters:
1277
1406
  - $ref: '#/components/parameters/RunId'
1278
1407
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -1343,9 +1472,18 @@ paths:
1343
1472
 
1344
1473
  '
1345
1474
  operationId: listAgents
1475
+ security:
1476
+ - ApiKeyAuth:
1477
+ - runs:read
1478
+ - OAuth2:
1479
+ - runs:read
1480
+ - OpenIdConnect:
1481
+ - runs:read
1346
1482
  responses:
1347
1483
  '200':
1348
- description: Installed manifest agents (agentId-sorted).
1484
+ description: 'Installed manifest agents (agentId-sorted). RFC 0202: when the host advertises `a2a.agentCards`, an
1485
+ entry the host routes a workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent''s card (interop.md
1486
+ §Per-agent cards).'
1349
1487
  content:
1350
1488
  application/json:
1351
1489
  schema:
@@ -1392,6 +1530,13 @@ paths:
1392
1530
 
1393
1531
  '
1394
1532
  operationId: getAgent
1533
+ security:
1534
+ - ApiKeyAuth:
1535
+ - runs:read
1536
+ - OAuth2:
1537
+ - runs:read
1538
+ - OpenIdConnect:
1539
+ - runs:read
1395
1540
  parameters:
1396
1541
  - in: path
1397
1542
  name: agentId
@@ -1411,7 +1556,9 @@ paths:
1411
1556
  - $ref: '#/components/parameters/OpenWOPVersion'
1412
1557
  responses:
1413
1558
  '200':
1414
- description: The agent's inventory entry.
1559
+ description: 'The agent''s inventory entry. RFC 0202: when the host advertises `a2a.agentCards`, an entry the host
1560
+ routes a workflow to carries `a2aTenant`, the opaque A2A `tenant` value of that agent''s card (interop.md §Per-agent
1561
+ cards).'
1415
1562
  content:
1416
1563
  application/json:
1417
1564
  schema:
@@ -1452,6 +1599,13 @@ paths:
1452
1599
 
1453
1600
  '
1454
1601
  operationId: listAgentDeployments
1602
+ security:
1603
+ - ApiKeyAuth:
1604
+ - runs:read
1605
+ - OAuth2:
1606
+ - runs:read
1607
+ - OpenIdConnect:
1608
+ - runs:read
1455
1609
  parameters:
1456
1610
  - in: path
1457
1611
  name: agentId
@@ -1515,6 +1669,13 @@ paths:
1515
1669
 
1516
1670
  '
1517
1671
  operationId: transitionAgentDeployment
1672
+ security:
1673
+ - ApiKeyAuth:
1674
+ - deploy:*
1675
+ - OAuth2:
1676
+ - deploy:*
1677
+ - OpenIdConnect:
1678
+ - deploy:*
1518
1679
  parameters:
1519
1680
  - in: path
1520
1681
  name: agentId
@@ -1599,6 +1760,13 @@ paths:
1599
1760
 
1600
1761
  '
1601
1762
  operationId: listAgentRoster
1763
+ security:
1764
+ - ApiKeyAuth:
1765
+ - runs:read
1766
+ - OAuth2:
1767
+ - runs:read
1768
+ - OpenIdConnect:
1769
+ - runs:read
1602
1770
  responses:
1603
1771
  '200':
1604
1772
  description: The caller's standing roster (rosterId-sorted).
@@ -1640,6 +1808,13 @@ paths:
1640
1808
 
1641
1809
  '
1642
1810
  operationId: getAgentRosterEntry
1811
+ security:
1812
+ - ApiKeyAuth:
1813
+ - runs:read
1814
+ - OAuth2:
1815
+ - runs:read
1816
+ - OpenIdConnect:
1817
+ - runs:read
1643
1818
  parameters:
1644
1819
  - in: path
1645
1820
  name: rosterId
@@ -1687,6 +1862,13 @@ paths:
1687
1862
 
1688
1863
  '
1689
1864
  operationId: getAgentOrgChart
1865
+ security:
1866
+ - ApiKeyAuth:
1867
+ - runs:read
1868
+ - OAuth2:
1869
+ - runs:read
1870
+ - OpenIdConnect:
1871
+ - runs:read
1690
1872
  responses:
1691
1873
  '200':
1692
1874
  description: The caller's org-chart.
@@ -1728,6 +1910,13 @@ paths:
1728
1910
 
1729
1911
  '
1730
1912
  operationId: getAgentOrgChartDepartment
1913
+ security:
1914
+ - ApiKeyAuth:
1915
+ - runs:read
1916
+ - OAuth2:
1917
+ - runs:read
1918
+ - OpenIdConnect:
1919
+ - runs:read
1731
1920
  parameters:
1732
1921
  - in: path
1733
1922
  name: departmentId
@@ -1788,6 +1977,13 @@ paths:
1788
1977
 
1789
1978
  '
1790
1979
  operationId: listTools
1980
+ security:
1981
+ - ApiKeyAuth:
1982
+ - runs:read
1983
+ - OAuth2:
1984
+ - runs:read
1985
+ - OpenIdConnect:
1986
+ - runs:read
1791
1987
  parameters:
1792
1988
  - name: view
1793
1989
  in: query
@@ -1854,6 +2050,13 @@ paths:
1854
2050
 
1855
2051
  '
1856
2052
  operationId: getTool
2053
+ security:
2054
+ - ApiKeyAuth:
2055
+ - runs:read
2056
+ - OAuth2:
2057
+ - runs:read
2058
+ - OpenIdConnect:
2059
+ - runs:read
1857
2060
  parameters:
1858
2061
  - in: path
1859
2062
  name: toolId
@@ -1923,6 +2126,13 @@ paths:
1923
2126
 
1924
2127
  '
1925
2128
  operationId: getEvalSummary
2129
+ security:
2130
+ - ApiKeyAuth:
2131
+ - runs:read
2132
+ - OAuth2:
2133
+ - runs:read
2134
+ - OpenIdConnect:
2135
+ - runs:read
1926
2136
  parameters:
1927
2137
  - $ref: '#/components/parameters/RunId'
1928
2138
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -1978,6 +2188,13 @@ paths:
1978
2188
 
1979
2189
  '
1980
2190
  operationId: diffRun
2191
+ security:
2192
+ - ApiKeyAuth:
2193
+ - runs:read
2194
+ - OAuth2:
2195
+ - runs:read
2196
+ - OpenIdConnect:
2197
+ - runs:read
1981
2198
  parameters:
1982
2199
  - $ref: '#/components/parameters/RunId'
1983
2200
  - name: against
@@ -2051,6 +2268,13 @@ paths:
2051
2268
 
2052
2269
  '
2053
2270
  operationId: pauseRun
2271
+ security:
2272
+ - ApiKeyAuth:
2273
+ - runs:cancel
2274
+ - OAuth2:
2275
+ - runs:cancel
2276
+ - OpenIdConnect:
2277
+ - runs:cancel
2054
2278
  parameters:
2055
2279
  - $ref: '#/components/parameters/RunId'
2056
2280
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -2123,6 +2347,13 @@ paths:
2123
2347
 
2124
2348
  '
2125
2349
  operationId: resumeRun
2350
+ security:
2351
+ - ApiKeyAuth:
2352
+ - runs:cancel
2353
+ - OAuth2:
2354
+ - runs:cancel
2355
+ - OpenIdConnect:
2356
+ - runs:cancel
2126
2357
  parameters:
2127
2358
  - $ref: '#/components/parameters/RunId'
2128
2359
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -2180,6 +2411,13 @@ paths:
2180
2411
  - hitl
2181
2412
  summary: Resolve an interrupt via the run-scoped surface.
2182
2413
  operationId: resolveInterruptByRun
2414
+ security:
2415
+ - ApiKeyAuth:
2416
+ - approvals:respond
2417
+ - OAuth2:
2418
+ - approvals:respond
2419
+ - OpenIdConnect:
2420
+ - approvals:respond
2183
2421
  parameters:
2184
2422
  - $ref: '#/components/parameters/RunId'
2185
2423
  - in: path
@@ -2333,6 +2571,13 @@ paths:
2333
2571
  - artifacts
2334
2572
  summary: Read a run-produced artifact.
2335
2573
  operationId: getArtifact
2574
+ security:
2575
+ - ApiKeyAuth:
2576
+ - artifacts:read
2577
+ - OAuth2:
2578
+ - artifacts:read
2579
+ - OpenIdConnect:
2580
+ - artifacts:read
2336
2581
  parameters:
2337
2582
  - $ref: '#/components/parameters/RunId'
2338
2583
  - in: path
@@ -2344,12 +2589,17 @@ paths:
2344
2589
  - $ref: '#/components/parameters/OpenWOPVersion'
2345
2590
  responses:
2346
2591
  '200':
2347
- description: Artifact payload.
2592
+ description: Artifact payload. Under `application/json` the shape is implementation-defined; under `application/a2a+json`
2593
+ (RFC 0205 §A, negotiated by `Accept`; a host SHOULD offer it) it is an A2A `Artifact` whose `artifactId` equals
2594
+ the path segment, and a `url` Part in it MUST NOT resolve beyond the caller's `artifacts:read` authorization.
2348
2595
  content:
2349
2596
  application/json:
2350
2597
  schema:
2351
2598
  type: object
2352
2599
  description: Implementation-defined artifact shape.
2600
+ application/a2a+json:
2601
+ schema:
2602
+ $ref: ../../schemas/v2/artifact.schema.json
2353
2603
  headers:
2354
2604
  OpenWOP-Version:
2355
2605
  $ref: '#/components/headers/OpenWOPVersion'
@@ -2365,6 +2615,13 @@ paths:
2365
2615
  - webhooks
2366
2616
  summary: Register a webhook subscription.
2367
2617
  operationId: registerWebhook
2618
+ security:
2619
+ - ApiKeyAuth:
2620
+ - webhooks:manage
2621
+ - OAuth2:
2622
+ - webhooks:manage
2623
+ - OpenIdConnect:
2624
+ - webhooks:manage
2368
2625
  parameters:
2369
2626
  - $ref: '#/components/parameters/IdempotencyKey'
2370
2627
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -2388,12 +2645,34 @@ paths:
2388
2645
  description: Event types to subscribe to (see `run-event.schema.json` enum).
2389
2646
  secret:
2390
2647
  type: string
2391
- description: Server signs payloads with this secret using HMAC-SHA256.
2648
+ description: 'Server signs payloads with this secret using HMAC-SHA256. REQUIRED in the Standard Webhooks
2649
+ form `whsec_<base64>` (24–64 decoded bytes) when `signatureAlgorithms` lists `standard-webhooks-1` (RFC
2650
+ 0201 §B.6); never echoed in any response.
2651
+
2652
+ '
2392
2653
  tags:
2393
2654
  type: array
2394
2655
  items:
2395
2656
  type: string
2396
2657
  description: Filter to runs carrying these tags (see `run-options.md`).
2658
+ signatureAlgorithms:
2659
+ type: array
2660
+ minItems: 1
2661
+ uniqueItems: true
2662
+ contains:
2663
+ const: v1
2664
+ items:
2665
+ type: string
2666
+ enum:
2667
+ - v1
2668
+ - standard-webhooks-1
2669
+ description: 'RFC 0201 §B — the per-subscription opt-in. Absent means `["v1"]`, today''s behaviour byte
2670
+ for byte. When present it MUST contain `v1`, MUST NOT repeat a value, and every value MUST be listed in
2671
+ the host''s `webhooks.signatureAlgorithms`; otherwise `400 validation_error`. Listing `standard-webhooks-1`
2672
+ opts the subscription into the Standard Webhooks 1.0.0 companion scheme, which runs endpoint verification
2673
+ before the `201` (`400 webhook_endpoint_unverified` when the endpoint does not echo the challenge).
2674
+
2675
+ '
2397
2676
  additionalProperties: false
2398
2677
  responses:
2399
2678
  '201':
@@ -2407,11 +2686,28 @@ paths:
2407
2686
  properties:
2408
2687
  webhookId:
2409
2688
  $ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
2689
+ signatureAlgorithms:
2690
+ type: array
2691
+ items:
2692
+ type: string
2693
+ description: RFC 0201 §B.7 — the list the dispatcher will apply; present whenever the request carried
2694
+ `signatureAlgorithms`.
2410
2695
  headers:
2411
2696
  OpenWOP-Version:
2412
2697
  $ref: '#/components/headers/OpenWOPVersion'
2413
2698
  '400':
2414
- $ref: '#/components/responses/ValidationError'
2699
+ description: '`validation_error` (malformed body, or an invalid `signatureAlgorithms` / `secret` opt-in, RFC 0201
2700
+ §B), `webhook_url_rejected` (egress), or `webhook_endpoint_unverified` (RFC 0201 §D — an opted-in endpoint did
2701
+ not echo the verification challenge; no subscription is persisted).
2702
+
2703
+ '
2704
+ content:
2705
+ application/json:
2706
+ schema:
2707
+ $ref: ../../schemas/v2/error-envelope.schema.json
2708
+ headers:
2709
+ OpenWOP-Version:
2710
+ $ref: '#/components/headers/OpenWOPVersion'
2415
2711
  '401':
2416
2712
  $ref: '#/components/responses/Unauthenticated'
2417
2713
  '403':
@@ -2422,6 +2718,13 @@ paths:
2422
2718
  - webhooks
2423
2719
  summary: Unregister a webhook.
2424
2720
  operationId: unregisterWebhook
2721
+ security:
2722
+ - ApiKeyAuth:
2723
+ - webhooks:manage
2724
+ - OAuth2:
2725
+ - webhooks:manage
2726
+ - OpenIdConnect:
2727
+ - webhooks:manage
2425
2728
  parameters:
2426
2729
  - in: path
2427
2730
  name: webhookId
@@ -2471,6 +2774,13 @@ paths:
2471
2774
 
2472
2775
  '
2473
2776
  operationId: verifyAuditLog
2777
+ security:
2778
+ - ApiKeyAuth:
2779
+ - audit:read
2780
+ - OAuth2:
2781
+ - audit:read
2782
+ - OpenIdConnect:
2783
+ - audit:read
2474
2784
  parameters:
2475
2785
  - in: query
2476
2786
  name: fromSeq
@@ -2518,6 +2828,13 @@ paths:
2518
2828
  - prompts
2519
2829
  summary: List prompt templates available to the caller.
2520
2830
  operationId: listPromptTemplates
2831
+ security:
2832
+ - ApiKeyAuth:
2833
+ - prompts:read
2834
+ - OAuth2:
2835
+ - prompts:read
2836
+ - OpenIdConnect:
2837
+ - prompts:read
2521
2838
  parameters:
2522
2839
  - in: query
2523
2840
  name: kind
@@ -2607,6 +2924,13 @@ paths:
2607
2924
  - prompts
2608
2925
  summary: Create a new prompt template (mutable libraries only).
2609
2926
  operationId: createPromptTemplate
2927
+ security:
2928
+ - ApiKeyAuth:
2929
+ - prompts:write
2930
+ - OAuth2:
2931
+ - prompts:write
2932
+ - OpenIdConnect:
2933
+ - prompts:write
2610
2934
  parameters:
2611
2935
  - $ref: '#/components/parameters/IdempotencyKey'
2612
2936
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -2682,6 +3006,13 @@ paths:
2682
3006
  - prompts
2683
3007
  summary: Fetch a single prompt template.
2684
3008
  operationId: getPromptTemplate
3009
+ security:
3010
+ - ApiKeyAuth:
3011
+ - prompts:read
3012
+ - OAuth2:
3013
+ - prompts:read
3014
+ - OpenIdConnect:
3015
+ - prompts:read
2685
3016
  responses:
2686
3017
  '200':
2687
3018
  description: The PromptTemplate.
@@ -2744,6 +3075,13 @@ paths:
2744
3075
  - prompts
2745
3076
  summary: Replace a prompt template (mutable libraries; user-source only).
2746
3077
  operationId: updatePromptTemplate
3078
+ security:
3079
+ - ApiKeyAuth:
3080
+ - prompts:write
3081
+ - OAuth2:
3082
+ - prompts:write
3083
+ - OpenIdConnect:
3084
+ - prompts:write
2747
3085
  parameters:
2748
3086
  - $ref: '#/components/parameters/IdempotencyKey'
2749
3087
  - $ref: '#/components/parameters/OpenWOPVersion'
@@ -2808,6 +3146,13 @@ paths:
2808
3146
  - prompts
2809
3147
  summary: Delete a prompt template (mutable libraries; user-source only).
2810
3148
  operationId: deletePromptTemplate
3149
+ security:
3150
+ - ApiKeyAuth:
3151
+ - prompts:write
3152
+ - OAuth2:
3153
+ - prompts:write
3154
+ - OpenIdConnect:
3155
+ - prompts:write
2811
3156
  responses:
2812
3157
  '204':
2813
3158
  description: Template deleted.
@@ -2870,6 +3215,13 @@ paths:
2870
3215
 
2871
3216
  '
2872
3217
  operationId: renderPromptTemplate
3218
+ security:
3219
+ - ApiKeyAuth:
3220
+ - prompts:read
3221
+ - OAuth2:
3222
+ - prompts:read
3223
+ - OpenIdConnect:
3224
+ - prompts:read
2873
3225
  requestBody:
2874
3226
  required: true
2875
3227
  content:
@@ -2999,6 +3351,13 @@ paths:
2999
3351
  $ref: '#/components/responses/Unauthenticated'
3000
3352
  parameters:
3001
3353
  - $ref: '#/components/parameters/OpenWOPVersion'
3354
+ security:
3355
+ - ApiKeyAuth:
3356
+ - runs:read
3357
+ - OAuth2:
3358
+ - runs:read
3359
+ - OpenIdConnect:
3360
+ - runs:read
3002
3361
  /runs/{runId}/compensation:
3003
3362
  parameters:
3004
3363
  - $ref: '#/components/parameters/RunId'
@@ -3023,6 +3382,13 @@ paths:
3023
3382
  $ref: '#/components/responses/NotFound'
3024
3383
  parameters:
3025
3384
  - $ref: '#/components/parameters/OpenWOPVersion'
3385
+ security:
3386
+ - ApiKeyAuth:
3387
+ - runs:read
3388
+ - OAuth2:
3389
+ - runs:read
3390
+ - OpenIdConnect:
3391
+ - runs:read
3026
3392
  /runs/{runId}/effects:
3027
3393
  parameters:
3028
3394
  - $ref: '#/components/parameters/RunId'
@@ -3046,6 +3412,13 @@ paths:
3046
3412
  $ref: '#/components/responses/NotFound'
3047
3413
  parameters:
3048
3414
  - $ref: '#/components/parameters/OpenWOPVersion'
3415
+ security:
3416
+ - ApiKeyAuth:
3417
+ - runs:read
3418
+ - OAuth2:
3419
+ - runs:read
3420
+ - OpenIdConnect:
3421
+ - runs:read
3049
3422
  /webhooks/{webhookId}/dead-letters:
3050
3423
  get:
3051
3424
  tags:
@@ -3100,6 +3473,13 @@ paths:
3100
3473
  $ref: '#/components/responses/Forbidden'
3101
3474
  '404':
3102
3475
  $ref: '#/components/responses/NotFound'
3476
+ security:
3477
+ - ApiKeyAuth:
3478
+ - webhooks:manage
3479
+ - OAuth2:
3480
+ - webhooks:manage
3481
+ - OpenIdConnect:
3482
+ - webhooks:manage
3103
3483
  /host/events:
3104
3484
  get:
3105
3485
  tags:
@@ -3122,6 +3502,88 @@ paths:
3122
3502
  $ref: '#/components/responses/Unauthenticated'
3123
3503
  parameters:
3124
3504
  - $ref: '#/components/parameters/OpenWOPVersion'
3505
+ security:
3506
+ - ApiKeyAuth:
3507
+ - runs:read
3508
+ - OAuth2:
3509
+ - runs:read
3510
+ - OpenIdConnect:
3511
+ - runs:read
3512
+ /webhooks/{webhookId}/rotate-secret:
3513
+ post:
3514
+ tags:
3515
+ - webhooks
3516
+ operationId: rotateWebhookSecret
3517
+ summary: Rotate a Standard Webhooks subscription's secret with an overlap (RFC 0201 §E)
3518
+ description: 'Gated on `webhooks.secretRotation`: a host that does not advertise it MUST answer `404 not_found`. Only
3519
+ for a subscription that opted into `standard-webhooks-1`; any other subscription gets `400 validation_error` (its
3520
+ single `v1` signature cannot overlap). Tenant checks are exactly those of `unregisterWebhook`: `403 id_tenant_mismatch`
3521
+ when the id''s tenant segment is not the caller''s, checked before the lookup (`identity.md` §5); `404` when unknown.
3522
+ For `overlapSeconds` after `rotatedAt`, `webhook-signature` carries one entry under the new secret and one under the
3523
+ previous one, and `OpenWOP-Signature` stays on the previous secret; at `previousSecretExpiresAt` only the new secret
3524
+ signs. A second rotation inside an overlap retires the oldest secret immediately. Rotation does not re-verify the
3525
+ endpoint. The response carries no secret.'
3526
+ parameters:
3527
+ - name: webhookId
3528
+ in: path
3529
+ required: true
3530
+ schema:
3531
+ $ref: ../../schemas/v2/ids.schema.json#/$defs/subscriptionId
3532
+ description: 'Tenant-bound `<tenantId>/<opaque>` (`identity.md` §5, RFC 0187 §A.1), one path segment: `~`-projected
3533
+ (RFC 0184) or percent-encoded.'
3534
+ - $ref: '#/components/parameters/IdempotencyKey'
3535
+ - $ref: '#/components/parameters/OpenWOPVersion'
3536
+ requestBody:
3537
+ required: true
3538
+ content:
3539
+ application/json:
3540
+ schema:
3541
+ type: object
3542
+ required:
3543
+ - secret
3544
+ additionalProperties: false
3545
+ properties:
3546
+ secret:
3547
+ type: string
3548
+ pattern: ^whsec_[A-Za-z0-9+/]+={0,2}$
3549
+ description: The new secret, `whsec_<base64>` decoding to 24–64 bytes (RFC 0201 §B.6).
3550
+ responses:
3551
+ '200':
3552
+ description: Rotated. No secret is returned.
3553
+ content:
3554
+ application/json:
3555
+ schema:
3556
+ type: object
3557
+ required:
3558
+ - rotatedAt
3559
+ - previousSecretExpiresAt
3560
+ additionalProperties: false
3561
+ properties:
3562
+ rotatedAt:
3563
+ type: string
3564
+ format: date-time
3565
+ previousSecretExpiresAt:
3566
+ type: string
3567
+ format: date-time
3568
+ description: '`rotatedAt + overlapSeconds`.'
3569
+ headers:
3570
+ OpenWOP-Version:
3571
+ $ref: '#/components/headers/OpenWOPVersion'
3572
+ '400':
3573
+ $ref: '#/components/responses/ValidationError'
3574
+ '401':
3575
+ $ref: '#/components/responses/Unauthenticated'
3576
+ '403':
3577
+ $ref: '#/components/responses/Forbidden'
3578
+ '404':
3579
+ $ref: '#/components/responses/NotFound'
3580
+ security:
3581
+ - ApiKeyAuth:
3582
+ - webhooks:manage
3583
+ - OAuth2:
3584
+ - webhooks:manage
3585
+ - OpenIdConnect:
3586
+ - webhooks:manage
3125
3587
  components:
3126
3588
  securitySchemes:
3127
3589
  ApiKeyAuth:
@@ -3138,6 +3600,88 @@ components:
3138
3600
 
3139
3601
  See `auth.md`.
3140
3602
 
3603
+ '
3604
+ OAuth2:
3605
+ type: oauth2
3606
+ description: 'RFC 0200 §F. OAuth 2.0 lanes — v1 `openwop-auth-oauth2-client-credentials`,
3607
+
3608
+ v2 `auth.lanes[].lane: "oauth2"`. Discovery is RFC 9728 Protected Resource
3609
+
3610
+ Metadata at the path-inserted well-known URI (`identity.md` §2.5).
3611
+
3612
+ Placeholder URLs.
3613
+
3614
+ '
3615
+ flows:
3616
+ clientCredentials:
3617
+ tokenUrl: https://issuer.example/oauth2/token
3618
+ scopes:
3619
+ manifest:read: Read workflow / canvas-type / endpoint manifests
3620
+ runs:create: Create new runs
3621
+ runs:read: Read run state and event stream
3622
+ runs:cancel: Cancel an in-flight run
3623
+ runs:annotate: Record a quality annotation on a run
3624
+ artifacts:read: Read artifacts produced by runs
3625
+ webhooks:manage: Register/unregister webhook subscriptions
3626
+ approvals:respond: Respond to HITL approval gates
3627
+ packs:publish: Publish node-pack versions
3628
+ packs:read: Fetch a published node-pack tarball or signature
3629
+ packs:yank: Yank a node-pack version
3630
+ packs:yank-revert: Reinstate a yanked node-pack version
3631
+ audit:read: Verify audit-log integrity
3632
+ workspace:read: Read agent-workspace files
3633
+ workspace:write: Write agent-workspace files
3634
+ prompts:read: Read and render prompt templates
3635
+ prompts:write: Create, update and delete prompt templates
3636
+ content:read: Read authored content pages and locale settings
3637
+ content:write: Create, publish and translate authored content pages
3638
+ deploy:*: Drive an agent deployment state transition
3639
+ authorizationCode:
3640
+ authorizationUrl: https://issuer.example/oauth2/authorize
3641
+ tokenUrl: https://issuer.example/oauth2/token
3642
+ scopes:
3643
+ manifest:read: Read workflow / canvas-type / endpoint manifests
3644
+ runs:create: Create new runs
3645
+ runs:read: Read run state and event stream
3646
+ runs:cancel: Cancel an in-flight run
3647
+ runs:annotate: Record a quality annotation on a run
3648
+ artifacts:read: Read artifacts produced by runs
3649
+ webhooks:manage: Register/unregister webhook subscriptions
3650
+ approvals:respond: Respond to HITL approval gates
3651
+ packs:publish: Publish node-pack versions
3652
+ packs:read: Fetch a published node-pack tarball or signature
3653
+ packs:yank: Yank a node-pack version
3654
+ packs:yank-revert: Reinstate a yanked node-pack version
3655
+ audit:read: Verify audit-log integrity
3656
+ workspace:read: Read agent-workspace files
3657
+ workspace:write: Write agent-workspace files
3658
+ prompts:read: Read and render prompt templates
3659
+ prompts:write: Create, update and delete prompt templates
3660
+ content:read: Read authored content pages and locale settings
3661
+ content:write: Create, publish and translate authored content pages
3662
+ deploy:*: Drive an agent deployment state transition
3663
+ OpenIdConnect:
3664
+ type: openIdConnect
3665
+ openIdConnectUrl: https://issuer.example/.well-known/openid-configuration
3666
+ description: 'RFC 0200 §F. v1 `openwop-auth-oidc-user-bearer` / v2 `auth.lanes[].lane: "oidc"`.
3667
+
3668
+ An ID token MAY be the bearer only when its `aud` equals the host''s configured
3669
+
3670
+ audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`.
3671
+
3672
+ Placeholder URL.
3673
+
3674
+ '
3675
+ MutualTLS:
3676
+ type: mutualTLS
3677
+ description: 'RFC 0200 §F. v1 `openwop-auth-mtls` / v2 `auth.lanes[].lane: "mtls"`. In OpenWOP
3678
+
3679
+ mTLS is required *in addition to* a bearer, never instead of one, so it appears
3680
+
3681
+ in no canonical requirement below: a host that requires it adds `MutualTLS: []`
3682
+
3683
+ inside each requirement object (AND).
3684
+
3141
3685
  '
3142
3686
  parameters:
3143
3687
  WorkflowId:
@@ -3184,12 +3728,24 @@ components:
3184
3728
  responses:
3185
3729
  Unauthenticated:
3186
3730
  description: Missing or invalid credential.
3731
+ headers:
3732
+ WWW-Authenticate:
3733
+ description: RFC 0200 §B — `Bearer` challenge; `resource_metadata` and `error="invalid_token"` on a host with an
3734
+ oauth2/oidc lane. Never on a non-disclosure 404.
3735
+ schema:
3736
+ type: string
3187
3737
  content:
3188
3738
  application/json:
3189
3739
  schema:
3190
3740
  $ref: '#/components/schemas/Error'
3191
3741
  Forbidden:
3192
3742
  description: Credential valid but lacks required scope or fails resource binding.
3743
+ headers:
3744
+ WWW-Authenticate:
3745
+ description: RFC 0200 §B — `error="insufficient_scope"` with every required `scope` on a scope refusal; absent on
3746
+ a resource-binding 403.
3747
+ schema:
3748
+ type: string
3193
3749
  content:
3194
3750
  application/json:
3195
3751
  schema: