@openwop/spec-artifacts 2.35.1 → 2.36.1

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
package/api/openapi.yaml CHANGED
@@ -170,6 +170,10 @@ paths:
170
170
  tags: [workflows]
171
171
  summary: Read a workflow definition.
172
172
  operationId: getWorkflow
173
+ security:
174
+ - ApiKeyAuth: ['manifest:read']
175
+ - OAuth2: ['manifest:read']
176
+ - OpenIdConnect: ['manifest:read']
173
177
  parameters:
174
178
  - $ref: '#/components/parameters/WorkflowId'
175
179
  responses:
@@ -189,6 +193,10 @@ paths:
189
193
  tags: [runs]
190
194
  summary: Create a new run.
191
195
  operationId: createRun
196
+ security:
197
+ - ApiKeyAuth: ['runs:create']
198
+ - OAuth2: ['runs:create']
199
+ - OpenIdConnect: ['runs:create']
192
200
  parameters:
193
201
  - $ref: '#/components/parameters/IdempotencyKey'
194
202
  - in: header
@@ -315,6 +323,10 @@ paths:
315
323
  tags: [runs]
316
324
  summary: Read run state (cached projection).
317
325
  operationId: getRun
326
+ security:
327
+ - ApiKeyAuth: ['runs:read']
328
+ - OAuth2: ['runs:read']
329
+ - OpenIdConnect: ['runs:read']
318
330
  parameters:
319
331
  - $ref: '#/components/parameters/RunId'
320
332
  - in: header
@@ -357,6 +369,10 @@ paths:
357
369
  tags: [runs]
358
370
  summary: SSE stream of run events.
359
371
  operationId: streamRunEvents
372
+ security:
373
+ - ApiKeyAuth: ['runs:read']
374
+ - OAuth2: ['runs:read']
375
+ - OpenIdConnect: ['runs:read']
360
376
  parameters:
361
377
  - $ref: '#/components/parameters/RunId'
362
378
  - in: query
@@ -412,6 +428,10 @@ paths:
412
428
  tags: [runs]
413
429
  summary: Long-poll fallback for non-SSE clients.
414
430
  operationId: pollRunEvents
431
+ security:
432
+ - ApiKeyAuth: ['runs:read']
433
+ - OAuth2: ['runs:read']
434
+ - OpenIdConnect: ['runs:read']
415
435
  parameters:
416
436
  - $ref: '#/components/parameters/RunId'
417
437
  - in: query
@@ -444,6 +464,10 @@ paths:
444
464
  tags: [runs]
445
465
  summary: Cancel an in-flight run.
446
466
  operationId: cancelRun
467
+ security:
468
+ - ApiKeyAuth: ['runs:cancel']
469
+ - OAuth2: ['runs:cancel']
470
+ - OpenIdConnect: ['runs:cancel']
447
471
  parameters:
448
472
  - $ref: '#/components/parameters/RunId'
449
473
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -478,6 +502,10 @@ paths:
478
502
  tags: [runs]
479
503
  summary: Record a non-blocking quality annotation on a run (RFC 0056).
480
504
  operationId: createAnnotation
505
+ security:
506
+ - ApiKeyAuth: ['runs:annotate']
507
+ - OAuth2: ['runs:annotate']
508
+ - OpenIdConnect: ['runs:annotate']
481
509
  parameters:
482
510
  - $ref: '#/components/parameters/RunId'
483
511
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -508,6 +536,10 @@ paths:
508
536
  tags: [runs]
509
537
  summary: List the annotations recorded on a run (RFC 0056).
510
538
  operationId: listAnnotations
539
+ security:
540
+ - ApiKeyAuth: ['runs:read']
541
+ - OAuth2: ['runs:read']
542
+ - OpenIdConnect: ['runs:read']
511
543
  parameters:
512
544
  - $ref: '#/components/parameters/RunId'
513
545
  responses:
@@ -553,6 +585,10 @@ paths:
553
585
  TriggerSubscription plus a source-specific `binding`; the binding
554
586
  secret/URL is returned ONCE and is not re-fetchable in cleartext.
555
587
  operationId: createTriggerSubscription
588
+ security:
589
+ - ApiKeyAuth: ['webhooks:manage']
590
+ - OAuth2: ['webhooks:manage']
591
+ - OpenIdConnect: ['webhooks:manage']
556
592
  parameters:
557
593
  - $ref: '#/components/parameters/IdempotencyKey'
558
594
  requestBody:
@@ -662,6 +698,10 @@ paths:
662
698
  Tenant-scoped admin listing of pages (draft + published). Requires a
663
699
  principal with `content.read` scope.
664
700
  operationId: listContentPages
701
+ security:
702
+ - ApiKeyAuth: ['content:read']
703
+ - OAuth2: ['content:read']
704
+ - OpenIdConnect: ['content:read']
665
705
  responses:
666
706
  '200':
667
707
  description: The caller-tenant's pages.
@@ -684,6 +724,10 @@ paths:
684
724
  summary: Create a content page (RFC 0103 §D, admin).
685
725
  description: Tenant-scoped page creation. Requires `content.write` scope.
686
726
  operationId: createContentPage
727
+ security:
728
+ - ApiKeyAuth: ['content:write']
729
+ - OAuth2: ['content:write']
730
+ - OpenIdConnect: ['content:write']
687
731
  requestBody:
688
732
  required: true
689
733
  content:
@@ -712,9 +756,13 @@ paths:
712
756
  summary: Upsert a section's base or per-locale fields (RFC 0103 §D, admin).
713
757
  description: |
714
758
  Locale-targeted write: `locale == content.baseLocale` upserts the
715
- section's base `data`; any other (BCP-47-subset) locale upserts
759
+ section's base `data`; any other (case-canonical BCP 47 subset, RFC 0206) locale upserts
716
760
  `localizations[locale]`. Tenant-scoped; requires `content.write`.
717
761
  operationId: putContentSection
762
+ security:
763
+ - ApiKeyAuth: ['content:write']
764
+ - OAuth2: ['content:write']
765
+ - OpenIdConnect: ['content:write']
718
766
  parameters:
719
767
  - name: pageId
720
768
  in: path
@@ -735,7 +783,7 @@ paths:
735
783
  properties:
736
784
  locale:
737
785
  type: string
738
- pattern: '^[a-z]{2}(-[A-Z]{2})?$'
786
+ pattern: '^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$'
739
787
  description: Target locale; baseLocale upserts `data`, else `localizations[locale]`.
740
788
  data:
741
789
  type: object
@@ -764,6 +812,10 @@ paths:
764
812
  summary: Read the tenant's content language settings (RFC 0103 §B, admin).
765
813
  description: Tenant-scoped read of `{ baseLocale, supportedLocales, autoTranslateOnPublish }`. Requires `content.read`.
766
814
  operationId: getContentSettings
815
+ security:
816
+ - ApiKeyAuth: ['content:read']
817
+ - OAuth2: ['content:read']
818
+ - OpenIdConnect: ['content:read']
767
819
  responses:
768
820
  '200':
769
821
  description: The tenant's language settings.
@@ -786,6 +838,10 @@ paths:
786
838
  Tenant-scoped settings update. The invariant `baseLocale ∉
787
839
  supportedLocales` MUST hold (else `400`). Requires `content.write`.
788
840
  operationId: putContentSettings
841
+ security:
842
+ - ApiKeyAuth: ['content:write']
843
+ - OAuth2: ['content:write']
844
+ - OpenIdConnect: ['content:write']
789
845
  requestBody:
790
846
  required: true
791
847
  content:
@@ -824,6 +880,10 @@ paths:
824
880
  read surface remains the A2A `tasks/get` JSON-RPC method. Hosts that do
825
881
  not advertise `capabilities.a2a.durableTasks` return `501`.
826
882
  operationId: getA2ATaskState
883
+ security:
884
+ - ApiKeyAuth: ['runs:read']
885
+ - OAuth2: ['runs:read']
886
+ - OpenIdConnect: ['runs:read']
827
887
  parameters:
828
888
  - name: taskId
829
889
  in: path
@@ -862,6 +922,10 @@ paths:
862
922
  workspace}` per RFC 0059 §C. Optional `?prefix=` filters the flat
863
923
  `path` namespace to entries starting with the given prefix.
864
924
  operationId: listWorkspaceFiles
925
+ security:
926
+ - ApiKeyAuth: ['workspace:read']
927
+ - OAuth2: ['workspace:read']
928
+ - OpenIdConnect: ['workspace:read']
865
929
  parameters:
866
930
  - $ref: '#/components/parameters/WorkspacePrefix'
867
931
  responses:
@@ -896,6 +960,10 @@ paths:
896
960
  workspace}`. When `capabilities.workspace.versioned: true`, an
897
961
  optional `?version=N` returns the historical snapshot at version N.
898
962
  operationId: getWorkspaceFile
963
+ security:
964
+ - ApiKeyAuth: ['workspace:read']
965
+ - OAuth2: ['workspace:read']
966
+ - OpenIdConnect: ['workspace:read']
899
967
  parameters:
900
968
  - $ref: '#/components/parameters/WorkspacePath'
901
969
  - $ref: '#/components/parameters/WorkspaceVersion'
@@ -926,6 +994,10 @@ paths:
926
994
  and emits a `workspace.updated` event. A `content` exceeding
927
995
  `capabilities.workspace.maxFileBytes` returns `workspace_too_large`.
928
996
  operationId: putWorkspaceFile
997
+ security:
998
+ - ApiKeyAuth: ['workspace:write']
999
+ - OAuth2: ['workspace:write']
1000
+ - OpenIdConnect: ['workspace:write']
929
1001
  parameters:
930
1002
  - $ref: '#/components/parameters/WorkspacePath'
931
1003
  - $ref: '#/components/parameters/IfMatch'
@@ -971,6 +1043,10 @@ paths:
971
1043
  Removes the file at `path` (and, when `versioned: true`, writes a
972
1044
  tombstone). Emits a `workspace.updated` event on success.
973
1045
  operationId: deleteWorkspaceFile
1046
+ security:
1047
+ - ApiKeyAuth: ['workspace:write']
1048
+ - OAuth2: ['workspace:write']
1049
+ - OpenIdConnect: ['workspace:write']
974
1050
  parameters:
975
1051
  - $ref: '#/components/parameters/WorkspacePath'
976
1052
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -1000,6 +1076,10 @@ paths:
1000
1076
  Hosts enforce a host-defined cap on the array length (RECOMMENDED
1001
1077
  100); over-cap requests return `400 validation_error`.
1002
1078
  operationId: bulkCancelRuns
1079
+ security:
1080
+ - ApiKeyAuth: ['runs:cancel']
1081
+ - OAuth2: ['runs:cancel']
1082
+ - OpenIdConnect: ['runs:cancel']
1003
1083
  parameters:
1004
1084
  - $ref: '#/components/parameters/IdempotencyKey'
1005
1085
  requestBody:
@@ -1048,6 +1128,10 @@ paths:
1048
1128
  tags: [runs]
1049
1129
  summary: Fork the run for replay or branch (see `replay.md`).
1050
1130
  operationId: forkRun
1131
+ security:
1132
+ - ApiKeyAuth: ['runs:create', 'runs:read']
1133
+ - OAuth2: ['runs:create', 'runs:read']
1134
+ - OpenIdConnect: ['runs:create', 'runs:read']
1051
1135
  parameters:
1052
1136
  - $ref: '#/components/parameters/RunId'
1053
1137
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -1113,6 +1197,10 @@ paths:
1113
1197
  chain by following `parent.wellKnownUrl` per response, one hop at a
1114
1198
  time.
1115
1199
  operationId: getRunAncestry
1200
+ security:
1201
+ - ApiKeyAuth: ['runs:read']
1202
+ - OAuth2: ['runs:read']
1203
+ - OpenIdConnect: ['runs:read']
1116
1204
  parameters:
1117
1205
  - $ref: '#/components/parameters/RunId'
1118
1206
  responses:
@@ -1154,6 +1242,10 @@ paths:
1154
1242
  RFC 0072. A `'tenant'`-scoped host MUST reject unauthenticated/unscoped
1155
1243
  requests per its standard auth contract rather than fall back to a global list.
1156
1244
  operationId: listAgents
1245
+ security:
1246
+ - ApiKeyAuth: ['runs:read']
1247
+ - OAuth2: ['runs:read']
1248
+ - OpenIdConnect: ['runs:read']
1157
1249
  responses:
1158
1250
  '200':
1159
1251
  description: Installed manifest agents (agentId-sorted).
@@ -1183,6 +1275,10 @@ paths:
1183
1275
  approved 404s identically to "not installed", so the surface never
1184
1276
  discloses another tenant's inventory.
1185
1277
  operationId: getAgent
1278
+ security:
1279
+ - ApiKeyAuth: ['runs:read']
1280
+ - OAuth2: ['runs:read']
1281
+ - OpenIdConnect: ['runs:read']
1186
1282
  parameters:
1187
1283
  - in: path
1188
1284
  name: agentId
@@ -1220,6 +1316,10 @@ paths:
1220
1316
  it return 404. Tenant-scoped to the caller's owner triple (RFC 0048/0074)
1221
1317
  when `installScope: 'tenant'`.
1222
1318
  operationId: listAgentDeployments
1319
+ security:
1320
+ - ApiKeyAuth: ['runs:read']
1321
+ - OAuth2: ['runs:read']
1322
+ - OpenIdConnect: ['runs:read']
1223
1323
  parameters:
1224
1324
  - in: path
1225
1325
  name: agentId
@@ -1257,6 +1357,10 @@ paths:
1257
1357
  BEFORE emitting `deployment.promoted`. On success returns the updated
1258
1358
  deployment record and emits the matching content-free `deployment.*` event.
1259
1359
  operationId: transitionAgentDeployment
1360
+ security:
1361
+ - ApiKeyAuth: ['deploy:*']
1362
+ - OAuth2: ['deploy:*']
1363
+ - OpenIdConnect: ['deploy:*']
1260
1364
  parameters:
1261
1365
  - in: path
1262
1366
  name: agentId
@@ -1311,6 +1415,10 @@ paths:
1311
1415
  RFC 0074 — on an `installScope: 'tenant'` host only the caller's
1312
1416
  owner-triple entries are returned. Read-only; content-free (SR-1).
1313
1417
  operationId: listAgentRoster
1418
+ security:
1419
+ - ApiKeyAuth: ['runs:read']
1420
+ - OAuth2: ['runs:read']
1421
+ - OpenIdConnect: ['runs:read']
1314
1422
  responses:
1315
1423
  '200':
1316
1424
  description: The caller's standing roster (rosterId-sorted).
@@ -1336,6 +1444,10 @@ paths:
1336
1444
  caller's owner triple — a cross-tenant entry 404s identically to
1337
1445
  "not found", never disclosing another tenant's roster.
1338
1446
  operationId: getAgentRosterEntry
1447
+ security:
1448
+ - ApiKeyAuth: ['runs:read']
1449
+ - OAuth2: ['runs:read']
1450
+ - OpenIdConnect: ['runs:read']
1339
1451
  parameters:
1340
1452
  - in: path
1341
1453
  name: rosterId
@@ -1367,6 +1479,10 @@ paths:
1367
1479
  advertise it return 404. Tenant-scoped per RFC 0074. DESCRIPTIVE only:
1368
1480
  an org edge confers no authority (§B `org-position-no-authority-escalation`).
1369
1481
  operationId: getAgentOrgChart
1482
+ security:
1483
+ - ApiKeyAuth: ['runs:read']
1484
+ - OAuth2: ['runs:read']
1485
+ - OpenIdConnect: ['runs:read']
1370
1486
  responses:
1371
1487
  '200':
1372
1488
  description: The caller's org-chart.
@@ -1392,6 +1508,10 @@ paths:
1392
1508
  404 when the department is unknown, cross-tenant, or the host doesn't
1393
1509
  advertise `capabilities.agents.orgChart`. The roll-up grants nothing (§B).
1394
1510
  operationId: getAgentOrgChartDepartment
1511
+ security:
1512
+ - ApiKeyAuth: ['runs:read']
1513
+ - OAuth2: ['runs:read']
1514
+ - OpenIdConnect: ['runs:read']
1395
1515
  parameters:
1396
1516
  - in: path
1397
1517
  name: departmentId
@@ -1431,6 +1551,10 @@ paths:
1431
1551
  NOT see another principal's tools (non-disclosure). Read-only; each
1432
1552
  descriptor is content-free of any credential material (SR-1).
1433
1553
  operationId: listTools
1554
+ security:
1555
+ - ApiKeyAuth: ['runs:read']
1556
+ - OAuth2: ['runs:read']
1557
+ - OpenIdConnect: ['runs:read']
1434
1558
  parameters:
1435
1559
  - name: view
1436
1560
  in: query
@@ -1475,6 +1599,10 @@ paths:
1475
1599
  non-disclosure — a cross-principal tool 404s identically to "not
1476
1600
  found"), or the host doesn't advertise `capabilities.toolCatalog`.
1477
1601
  operationId: getTool
1602
+ security:
1603
+ - ApiKeyAuth: ['runs:read']
1604
+ - OAuth2: ['runs:read']
1605
+ - OpenIdConnect: ['runs:read']
1478
1606
  parameters:
1479
1607
  - in: path
1480
1608
  name: toolId
@@ -1522,6 +1650,10 @@ paths:
1522
1650
  `capabilities.agents.evalSuite.supported: true`; hosts that don't advertise
1523
1651
  it return 404. 409 when the run is not yet terminal.
1524
1652
  operationId: getEvalSummary
1653
+ security:
1654
+ - ApiKeyAuth: ['runs:read']
1655
+ - OAuth2: ['runs:read']
1656
+ - OpenIdConnect: ['runs:read']
1525
1657
  parameters:
1526
1658
  - $ref: '#/components/parameters/RunId'
1527
1659
  responses:
@@ -1556,6 +1688,10 @@ paths:
1556
1688
  the two event logs (see `replay.md` determinism contract). Requires
1557
1689
  `runs:read` on BOTH runs. Hosts that don't implement it return 404.
1558
1690
  operationId: diffRun
1691
+ security:
1692
+ - ApiKeyAuth: ['runs:read']
1693
+ - OAuth2: ['runs:read']
1694
+ - OpenIdConnect: ['runs:read']
1559
1695
  parameters:
1560
1696
  - $ref: '#/components/parameters/RunId'
1561
1697
  - name: against
@@ -1602,6 +1738,10 @@ paths:
1602
1738
  Operator-driven pause distinct from cancel (terminal) and HITL suspend (workflow-driven).
1603
1739
  Emits a `run.paused` event when the pause takes effect; exit only via `:resume` or `:cancel`.
1604
1740
  operationId: pauseRun
1741
+ security:
1742
+ - ApiKeyAuth: ['runs:cancel']
1743
+ - OAuth2: ['runs:cancel']
1744
+ - OpenIdConnect: ['runs:cancel']
1605
1745
  parameters:
1606
1746
  - $ref: '#/components/parameters/RunId'
1607
1747
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -1650,6 +1790,10 @@ paths:
1650
1790
  description: |
1651
1791
  Reverses a prior `:pause`. Run transitions from `paused` to `running` and emits `run.resumed`.
1652
1792
  operationId: resumeRun
1793
+ security:
1794
+ - ApiKeyAuth: ['runs:cancel']
1795
+ - OAuth2: ['runs:cancel']
1796
+ - OpenIdConnect: ['runs:cancel']
1653
1797
  parameters:
1654
1798
  - $ref: '#/components/parameters/RunId'
1655
1799
  - $ref: '#/components/parameters/IdempotencyKey'
@@ -1688,6 +1832,10 @@ paths:
1688
1832
  tags: [hitl]
1689
1833
  summary: Resolve an interrupt via the run-scoped surface.
1690
1834
  operationId: resolveInterruptByRun
1835
+ security:
1836
+ - ApiKeyAuth: ['approvals:respond']
1837
+ - OAuth2: ['approvals:respond']
1838
+ - OpenIdConnect: ['approvals:respond']
1691
1839
  parameters:
1692
1840
  - $ref: '#/components/parameters/RunId'
1693
1841
  - in: path
@@ -1794,6 +1942,10 @@ paths:
1794
1942
  tags: [artifacts]
1795
1943
  summary: Read a run-produced artifact.
1796
1944
  operationId: getArtifact
1945
+ security:
1946
+ - ApiKeyAuth: ['artifacts:read']
1947
+ - OAuth2: ['artifacts:read']
1948
+ - OpenIdConnect: ['artifacts:read']
1797
1949
  parameters:
1798
1950
  - $ref: '#/components/parameters/RunId'
1799
1951
  - in: path
@@ -1818,6 +1970,10 @@ paths:
1818
1970
  tags: [webhooks]
1819
1971
  summary: Register a webhook subscription.
1820
1972
  operationId: registerWebhook
1973
+ security:
1974
+ - ApiKeyAuth: ['webhooks:manage']
1975
+ - OAuth2: ['webhooks:manage']
1976
+ - OpenIdConnect: ['webhooks:manage']
1821
1977
  parameters:
1822
1978
  - $ref: '#/components/parameters/IdempotencyKey'
1823
1979
  requestBody:
@@ -1835,11 +1991,30 @@ paths:
1835
1991
  description: Event types to subscribe to (see `run-event.schema.json` enum).
1836
1992
  secret:
1837
1993
  type: string
1838
- description: Server signs payloads with this secret using HMAC-SHA256.
1994
+ description: >
1995
+ Server signs payloads with this secret using HMAC-SHA256. REQUIRED in the
1996
+ Standard Webhooks form `whsec_<base64>` (24–64 decoded bytes) when
1997
+ `signatureAlgorithms` lists `standard-webhooks-1` (RFC 0201 §B.6); never
1998
+ echoed in any response.
1839
1999
  tags:
1840
2000
  type: array
1841
2001
  items: { type: string }
1842
2002
  description: Filter to runs carrying these tags (see `run-options.md`).
2003
+ signatureAlgorithms:
2004
+ type: array
2005
+ minItems: 1
2006
+ uniqueItems: true
2007
+ contains: { const: v1 }
2008
+ items: { type: string }
2009
+ description: >
2010
+ RFC 0201 §B — the per-subscription opt-in. Absent means `["v1"]`, today's
2011
+ behaviour byte for byte. When present it MUST contain `v1`, MUST NOT repeat a
2012
+ value, and every value MUST be listed in the host's
2013
+ `webhooks.signatureAlgorithms`; otherwise `400 validation_error`. Listing
2014
+ `standard-webhooks-1` opts the subscription into the Standard Webhooks 1.0.0
2015
+ companion scheme, which runs endpoint verification before the `201`
2016
+ (`400 webhook_endpoint_unverified` when the endpoint does not echo the
2017
+ challenge).
1843
2018
  additionalProperties: false
1844
2019
  responses:
1845
2020
  '201':
@@ -1851,7 +2026,19 @@ paths:
1851
2026
  required: [webhookId]
1852
2027
  properties:
1853
2028
  webhookId: { type: string }
1854
- '400': { $ref: '#/components/responses/ValidationError' }
2029
+ signatureAlgorithms:
2030
+ type: array
2031
+ items: { type: string }
2032
+ description: RFC 0201 §B.7 — the list the dispatcher will apply; present whenever the request carried `signatureAlgorithms`.
2033
+ '400':
2034
+ description: >
2035
+ `validation_error` (malformed body, or an invalid `signatureAlgorithms` / `secret`
2036
+ opt-in, RFC 0201 §B), `webhook_url_rejected` (egress), or
2037
+ `webhook_endpoint_unverified` (RFC 0201 §D — an opted-in endpoint did not echo the
2038
+ verification challenge; no subscription is persisted).
2039
+ content:
2040
+ application/json:
2041
+ schema: { $ref: '../schemas/error-envelope.schema.json' }
1855
2042
  '401': { $ref: '#/components/responses/Unauthenticated' }
1856
2043
  '403': { $ref: '#/components/responses/Forbidden' }
1857
2044
 
@@ -1860,6 +2047,10 @@ paths:
1860
2047
  tags: [webhooks]
1861
2048
  summary: Unregister a webhook.
1862
2049
  operationId: unregisterWebhook
2050
+ security:
2051
+ - ApiKeyAuth: ['webhooks:manage']
2052
+ - OAuth2: ['webhooks:manage']
2053
+ - OpenIdConnect: ['webhooks:manage']
1863
2054
  parameters:
1864
2055
  - in: path
1865
2056
  name: webhookId
@@ -1888,6 +2079,10 @@ paths:
1888
2079
  advertise the `openwop-audit-log-integrity` profile MAY omit this
1889
2080
  endpoint entirely (clients SHOULD pre-flight via `/.well-known/openwop`).
1890
2081
  operationId: verifyAuditLog
2082
+ security:
2083
+ - ApiKeyAuth: ['audit:read']
2084
+ - OAuth2: ['audit:read']
2085
+ - OpenIdConnect: ['audit:read']
1891
2086
  parameters:
1892
2087
  - in: query
1893
2088
  name: fromSeq
@@ -1926,6 +2121,10 @@ paths:
1926
2121
  tags: [prompts]
1927
2122
  summary: List prompt templates available to the caller.
1928
2123
  operationId: listPromptTemplates
2124
+ security:
2125
+ - ApiKeyAuth: ['prompts:read']
2126
+ - OAuth2: ['prompts:read']
2127
+ - OpenIdConnect: ['prompts:read']
1929
2128
  parameters:
1930
2129
  - in: query
1931
2130
  name: kind
@@ -1982,6 +2181,10 @@ paths:
1982
2181
  tags: [prompts]
1983
2182
  summary: Create a new prompt template (mutable libraries only).
1984
2183
  operationId: createPromptTemplate
2184
+ security:
2185
+ - ApiKeyAuth: ['prompts:write']
2186
+ - OAuth2: ['prompts:write']
2187
+ - OpenIdConnect: ['prompts:write']
1985
2188
  parameters:
1986
2189
  - $ref: '#/components/parameters/IdempotencyKey'
1987
2190
  requestBody:
@@ -2041,6 +2244,10 @@ paths:
2041
2244
  tags: [prompts]
2042
2245
  summary: Fetch a single prompt template.
2043
2246
  operationId: getPromptTemplate
2247
+ security:
2248
+ - ApiKeyAuth: ['prompts:read']
2249
+ - OAuth2: ['prompts:read']
2250
+ - OpenIdConnect: ['prompts:read']
2044
2251
  responses:
2045
2252
  '200':
2046
2253
  description: The PromptTemplate.
@@ -2081,6 +2288,10 @@ paths:
2081
2288
  tags: [prompts]
2082
2289
  summary: Replace a prompt template (mutable libraries; user-source only).
2083
2290
  operationId: updatePromptTemplate
2291
+ security:
2292
+ - ApiKeyAuth: ['prompts:write']
2293
+ - OAuth2: ['prompts:write']
2294
+ - OpenIdConnect: ['prompts:write']
2084
2295
  parameters:
2085
2296
  - $ref: '#/components/parameters/IdempotencyKey'
2086
2297
  requestBody:
@@ -2126,6 +2337,10 @@ paths:
2126
2337
  tags: [prompts]
2127
2338
  summary: Delete a prompt template (mutable libraries; user-source only).
2128
2339
  operationId: deletePromptTemplate
2340
+ security:
2341
+ - ApiKeyAuth: ['prompts:write']
2342
+ - OAuth2: ['prompts:write']
2343
+ - OpenIdConnect: ['prompts:write']
2129
2344
  responses:
2130
2345
  '204':
2131
2346
  description: Template deleted.
@@ -2164,6 +2379,10 @@ paths:
2164
2379
  host resolves the plaintext internally and never echoes it in
2165
2380
  the `composed` response field per SR-1.
2166
2381
  operationId: renderPromptTemplate
2382
+ security:
2383
+ - ApiKeyAuth: ['prompts:read']
2384
+ - OAuth2: ['prompts:read']
2385
+ - OpenIdConnect: ['prompts:read']
2167
2386
  requestBody:
2168
2387
  required: true
2169
2388
  content:
@@ -2269,6 +2488,10 @@ paths:
2269
2488
  (`registry-operations.md`), not defined in this host document
2270
2489
  (see the `packs-test` tag scope note).
2271
2490
  operationId: putTestPackTarball
2491
+ security:
2492
+ - ApiKeyAuth: ['packs:publish']
2493
+ - OAuth2: ['packs:publish']
2494
+ - OpenIdConnect: ['packs:publish']
2272
2495
  parameters:
2273
2496
  - in: header
2274
2497
  name: X-Pack-Signing-Method
@@ -2341,6 +2564,10 @@ paths:
2341
2564
  summary: Fetch a published test-catalog tarball.
2342
2565
  description: 'Mirror of `GET /v1/packs/{name}/-/{version}.tgz`. Returns the gzipped tarball bytes with `Content-Type: application/tar+gzip` and an `ETag: "sha256-..."` matching the manifest''s `tarballSha256`. The mirrored production path is registry-service surface (`registry-operations.md`), not defined in this host document (see the `packs-test` tag scope note).'
2343
2566
  operationId: getTestPackTarball
2567
+ security:
2568
+ - ApiKeyAuth: ['packs:read']
2569
+ - OAuth2: ['packs:read']
2570
+ - OpenIdConnect: ['packs:read']
2344
2571
  responses:
2345
2572
  '200':
2346
2573
  description: Tarball bytes.
@@ -2381,6 +2608,10 @@ paths:
2381
2608
  defined in this host document (see the `packs-test` tag
2382
2609
  scope note).
2383
2610
  operationId: deleteTestPackVersion
2611
+ security:
2612
+ - ApiKeyAuth: ['packs:publish']
2613
+ - OAuth2: ['packs:publish']
2614
+ - OpenIdConnect: ['packs:publish']
2384
2615
  responses:
2385
2616
  '204':
2386
2617
  description: Version successfully unpublished from the test catalog.
@@ -2415,6 +2646,10 @@ paths:
2415
2646
  registry-service surface (`registry-operations.md`), not defined
2416
2647
  in this host document (see the `packs-test` tag scope note).
2417
2648
  operationId: getTestPackSignature
2649
+ security:
2650
+ - ApiKeyAuth: ['packs:read']
2651
+ - OAuth2: ['packs:read']
2652
+ - OpenIdConnect: ['packs:read']
2418
2653
  responses:
2419
2654
  '200':
2420
2655
  description: Signature blob.
@@ -2466,6 +2701,84 @@ components:
2466
2701
  `artifacts:read`, `webhooks:manage`, `approvals:respond`, `audit:read`).
2467
2702
  See `auth.md`.
2468
2703
 
2704
+ # RFC 0200 §F. The three lanes below describe auth the corpus already defines
2705
+ # in `auth-profiles.md` (v1) and `spec/v2/core/identity.md` §2 (v2). Declaring
2706
+ # them changes no wire behaviour: an operation's three alternatives carry the
2707
+ # SAME scope, and a host enforces only the lanes it advertises. The URLs are
2708
+ # placeholders, exactly as `servers` uses `api.example.com`; a host serving its
2709
+ # own document replaces them with its advertised issuers and drops the schemes
2710
+ # for lanes it does not advertise (`a2a-integration.md` §AgentCard, §F.5).
2711
+ OAuth2:
2712
+ type: oauth2
2713
+ description: |
2714
+ RFC 0200 §F. OAuth 2.0 lanes — v1 `openwop-auth-oauth2-client-credentials`,
2715
+ v2 `auth.lanes[].lane: "oauth2"`. Discovery is RFC 9728 Protected Resource
2716
+ Metadata at the path-inserted well-known URI (`identity.md` §2.5).
2717
+ Placeholder URLs.
2718
+ flows:
2719
+ clientCredentials:
2720
+ tokenUrl: https://issuer.example/oauth2/token
2721
+ scopes:
2722
+ 'manifest:read': Read workflow / canvas-type / endpoint manifests
2723
+ 'runs:create': Create new runs
2724
+ 'runs:read': Read run state and event stream
2725
+ 'runs:cancel': Cancel an in-flight run
2726
+ 'runs:annotate': Record a quality annotation on a run
2727
+ 'artifacts:read': Read artifacts produced by runs
2728
+ 'webhooks:manage': Register/unregister webhook subscriptions
2729
+ 'approvals:respond': Respond to HITL approval gates
2730
+ 'packs:publish': Publish node-pack versions
2731
+ 'packs:read': Fetch a published node-pack tarball or signature
2732
+ 'packs:yank': Yank a node-pack version
2733
+ 'packs:yank-revert': Reinstate a yanked node-pack version
2734
+ 'audit:read': Verify audit-log integrity
2735
+ 'workspace:read': Read agent-workspace files
2736
+ 'workspace:write': Write agent-workspace files
2737
+ 'prompts:read': Read and render prompt templates
2738
+ 'prompts:write': Create, update and delete prompt templates
2739
+ 'content:read': Read authored content pages and locale settings
2740
+ 'content:write': Create, publish and translate authored content pages
2741
+ 'deploy:*': Drive an agent deployment state transition
2742
+ authorizationCode:
2743
+ authorizationUrl: https://issuer.example/oauth2/authorize
2744
+ tokenUrl: https://issuer.example/oauth2/token
2745
+ scopes:
2746
+ 'manifest:read': Read workflow / canvas-type / endpoint manifests
2747
+ 'runs:create': Create new runs
2748
+ 'runs:read': Read run state and event stream
2749
+ 'runs:cancel': Cancel an in-flight run
2750
+ 'runs:annotate': Record a quality annotation on a run
2751
+ 'artifacts:read': Read artifacts produced by runs
2752
+ 'webhooks:manage': Register/unregister webhook subscriptions
2753
+ 'approvals:respond': Respond to HITL approval gates
2754
+ 'packs:publish': Publish node-pack versions
2755
+ 'packs:read': Fetch a published node-pack tarball or signature
2756
+ 'packs:yank': Yank a node-pack version
2757
+ 'packs:yank-revert': Reinstate a yanked node-pack version
2758
+ 'audit:read': Verify audit-log integrity
2759
+ 'workspace:read': Read agent-workspace files
2760
+ 'workspace:write': Write agent-workspace files
2761
+ 'prompts:read': Read and render prompt templates
2762
+ 'prompts:write': Create, update and delete prompt templates
2763
+ 'content:read': Read authored content pages and locale settings
2764
+ 'content:write': Create, publish and translate authored content pages
2765
+ 'deploy:*': Drive an agent deployment state transition
2766
+ OpenIdConnect:
2767
+ type: openIdConnect
2768
+ openIdConnectUrl: https://issuer.example/.well-known/openid-configuration
2769
+ description: |
2770
+ RFC 0200 §F. v1 `openwop-auth-oidc-user-bearer` / v2 `auth.lanes[].lane: "oidc"`.
2771
+ An ID token MAY be the bearer only when its `aud` equals the host's configured
2772
+ audience (`identity.md` §2.1); any other `aud` is `audience_mismatch`.
2773
+ Placeholder URL.
2774
+ MutualTLS:
2775
+ type: mutualTLS
2776
+ description: |
2777
+ RFC 0200 §F. v1 `openwop-auth-mtls` / v2 `auth.lanes[].lane: "mtls"`. In OpenWOP
2778
+ mTLS is required *in addition to* a bearer, never instead of one, so it appears
2779
+ in no canonical requirement below: a host that requires it adds `MutualTLS: []`
2780
+ inside each requirement object (AND).
2781
+
2469
2782
  parameters:
2470
2783
  WorkflowId:
2471
2784
  in: path
@@ -2551,12 +2864,20 @@ components:
2551
2864
  responses:
2552
2865
  Unauthenticated:
2553
2866
  description: Missing or invalid credential.
2867
+ headers:
2868
+ WWW-Authenticate:
2869
+ description: RFC 0200 §B — `Bearer` challenge; `resource_metadata` and `error="invalid_token"` on a host with an oauth2/oidc lane. Never on a non-disclosure 404.
2870
+ schema: { type: string }
2554
2871
  content:
2555
2872
  application/json:
2556
2873
  schema: { $ref: '#/components/schemas/Error' }
2557
2874
 
2558
2875
  Forbidden:
2559
2876
  description: Credential valid but lacks required scope or fails resource binding.
2877
+ headers:
2878
+ WWW-Authenticate:
2879
+ description: RFC 0200 §B — `error="insufficient_scope"` with every required `scope` on a scope refusal; absent on a resource-binding 403.
2880
+ schema: { type: string }
2560
2881
  content:
2561
2882
  application/json:
2562
2883
  schema: { $ref: '#/components/schemas/Error' }