@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
@@ -2,31 +2,930 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://openwop.dev/spec/v2/envelopes/ui.a2ui-surface.schema.json",
4
4
  "title": "UiA2uiSurfacePayload",
5
- "description": "Payload for the OPTIONAL, advertised `ui.a2ui-surface` AI Envelope kind (RFC 0102). Carries a declarative A2UI interface surface — a closed component tree the consumer renders with native widgets, routing user actions back to the producing agent WITHOUT executing any agent-supplied code. `ui.*` is a core, un-namespaced content-primitive family beside `media.*` (ai-envelope.md §\"A2UI surfaces\" / §\"Vendor-namespaced kinds\"). Not one of the four MUST-recognize universal kinds; an unrecognizing consumer falls back to store-without-render.",
6
- "type": "object",
7
- "required": [
8
- "catalogVersion",
9
- "surface"
5
+ "description": "Payload for the OPTIONAL, advertised `ui.a2ui-surface` AI Envelope kind (RFC 0102). Carries a declarative A2UI interface surface — a closed component tree the consumer renders with native widgets, routing user actions back to the producing agent WITHOUT executing any agent-supplied code. `ui.*` is a core, un-namespaced content-primitive family beside `media.*` (ai-envelope.md §\"A2UI surfaces\" / §\"Vendor-namespaced kinds\"). Not one of the four MUST-recognize universal kinds; an unrecognizing consumer falls back to store-without-render. Two per-kind schema versions (RFC 0209 §A): version 1 (or 0/absent) = `$defs/payloadV1`, the RFC 0102 seven-component tree pinned by `catalogVersion`; version 2 = `$defs/payloadV2`, an ordered run of A2UI v0.9 server-to-client messages restricted to the OpenWOP profile of the basic catalog (spec/v2/ext/a2uiSurface/README.md). An engine validates against the ONE branch the version selects (events.md §\"The envelope-kind catalog\"), never the union; the `anyOf` exists for tooling. Every payloadV2 message is also a valid upstream A2UI v0.9 message (RFC 0209 §B.4).",
6
+ "anyOf": [
7
+ {
8
+ "$ref": "#/$defs/payloadV1"
9
+ },
10
+ {
11
+ "$ref": "#/$defs/payloadV2"
12
+ }
10
13
  ],
11
- "additionalProperties": false,
12
- "properties": {
13
- "reasoning": {
14
+ "$defs": {
15
+ "payloadV1": {
16
+ "type": "object",
17
+ "description": "Per-kind schema version 1 (or 0/absent): the RFC 0102 seven-component tree pinned by `catalogVersion`, unchanged from the seeded root (RFC 0209 §A.1). Readers keep accepting it on replay, fork and poll for the life of the major (RFC 0209 §C.11).",
18
+ "required": [
19
+ "catalogVersion",
20
+ "surface"
21
+ ],
22
+ "additionalProperties": false,
23
+ "properties": {
24
+ "reasoning": {
25
+ "type": "string",
26
+ "description": "OPTIONAL per RFC 0030 §A — the model's reasoning, conventionally the first property of a kind whose payload benefits from multi-step composition."
27
+ },
28
+ "catalogVersion": {
29
+ "type": "string",
30
+ "enum": [
31
+ "0.9.1"
32
+ ],
33
+ "description": "REQUIRED — the A2UI catalog version the surface targets. This enum IS the host's supported-version set (ai-envelope.md §\"A2UI surfaces\"); it is never a free string the producer invents. A consumer MUST refuse an unknown/higher version with `unknown_schema_version`. Pinning the version in the payload keeps `:fork`/replay deterministic after the external A2UI standard ships a breaking version."
34
+ },
35
+ "surface": {
36
+ "$ref": "#/$defs/surface",
37
+ "description": "REQUIRED — the A2UI surface document: a closed component tree (ai-envelope.md §\"A2UI surfaces\"). Self-contained: renderable from the payload alone, never a live reference into an external catalog."
38
+ }
39
+ }
40
+ },
41
+ "payloadV2": {
42
+ "type": "object",
43
+ "additionalProperties": false,
44
+ "required": [
45
+ "version",
46
+ "catalogId",
47
+ "surfaceId",
48
+ "messages"
49
+ ],
50
+ "description": "Per-kind schema version 2: an ordered run of A2UI v0.9 server-to-client messages for one surface, restricted to the OpenWOP profile of the basic catalog (RFC 0209 §A.2, §B). Every message's `surfaceId` MUST equal the payload's `surfaceId`, and a `createSurface.catalogId` MUST equal the payload's `catalogId`; the engine checks both cross-field rules at admission (spec/v2/ext/a2uiSurface/README.md).",
51
+ "properties": {
52
+ "reasoning": {
53
+ "type": "string"
54
+ },
55
+ "version": {
56
+ "type": "string",
57
+ "enum": [
58
+ "v0.9"
59
+ ]
60
+ },
61
+ "catalogId": {
62
+ "$ref": "#/$defs/catalogId"
63
+ },
64
+ "surfaceId": {
65
+ "$ref": "#/$defs/surfaceId"
66
+ },
67
+ "messages": {
68
+ "type": "array",
69
+ "minItems": 1,
70
+ "maxItems": 64,
71
+ "items": {
72
+ "$ref": "#/$defs/message"
73
+ }
74
+ }
75
+ }
76
+ },
77
+ "binding": {
78
+ "type": "object",
79
+ "additionalProperties": false,
80
+ "required": [
81
+ "path"
82
+ ],
83
+ "properties": {
84
+ "path": {
85
+ "type": "string",
86
+ "pattern": "^/",
87
+ "maxLength": 512,
88
+ "description": "A JSON Pointer into the surface's data model (A2UI v0.9 DataBinding)."
89
+ }
90
+ }
91
+ },
92
+ "dynString": {
93
+ "description": "A2UI DynamicString, profiled: a literal or a data binding. FunctionCall values are excluded (RFC 0209 §B.4).",
94
+ "anyOf": [
95
+ {
96
+ "type": "string",
97
+ "maxLength": 4096
98
+ },
99
+ {
100
+ "$ref": "#/$defs/binding"
101
+ }
102
+ ]
103
+ },
104
+ "dynBool": {
105
+ "anyOf": [
106
+ {
107
+ "type": "boolean"
108
+ },
109
+ {
110
+ "$ref": "#/$defs/binding"
111
+ }
112
+ ]
113
+ },
114
+ "dynStringList": {
115
+ "anyOf": [
116
+ {
117
+ "type": "array",
118
+ "items": {
119
+ "type": "string",
120
+ "maxLength": 1024
121
+ },
122
+ "maxItems": 256
123
+ },
124
+ {
125
+ "$ref": "#/$defs/binding"
126
+ }
127
+ ]
128
+ },
129
+ "dynValue": {
130
+ "description": "A2UI DynamicValue, profiled: literal string/number/boolean/array or a binding; no FunctionCall.",
131
+ "anyOf": [
132
+ {
133
+ "type": "string",
134
+ "maxLength": 4096
135
+ },
136
+ {
137
+ "type": "number"
138
+ },
139
+ {
140
+ "type": "boolean"
141
+ },
142
+ {
143
+ "type": "array",
144
+ "maxItems": 256
145
+ },
146
+ {
147
+ "$ref": "#/$defs/binding"
148
+ }
149
+ ]
150
+ },
151
+ "componentId": {
152
+ "type": "string",
153
+ "minLength": 1,
154
+ "maxLength": 128,
155
+ "pattern": "^[A-Za-z0-9_.-]+$"
156
+ },
157
+ "accessibility": {
158
+ "type": "object",
159
+ "additionalProperties": false,
160
+ "properties": {
161
+ "label": {
162
+ "$ref": "#/$defs/dynString"
163
+ },
164
+ "description": {
165
+ "$ref": "#/$defs/dynString"
166
+ }
167
+ }
168
+ },
169
+ "check": {
170
+ "type": "object",
171
+ "additionalProperties": false,
172
+ "required": [
173
+ "condition",
174
+ "message"
175
+ ],
176
+ "description": "A2UI CheckRule, profiled to the pure `required` function only (RFC 0209 §B.4).",
177
+ "properties": {
178
+ "message": {
179
+ "type": "string",
180
+ "maxLength": 512
181
+ },
182
+ "condition": {
183
+ "type": "object",
184
+ "additionalProperties": false,
185
+ "required": [
186
+ "call",
187
+ "args"
188
+ ],
189
+ "properties": {
190
+ "call": {
191
+ "type": "string",
192
+ "enum": [
193
+ "required"
194
+ ]
195
+ },
196
+ "args": {
197
+ "type": "object",
198
+ "additionalProperties": false,
199
+ "required": [
200
+ "value"
201
+ ],
202
+ "properties": {
203
+ "value": {
204
+ "$ref": "#/$defs/binding"
205
+ }
206
+ }
207
+ },
208
+ "returnType": {
209
+ "type": "string",
210
+ "enum": [
211
+ "boolean"
212
+ ]
213
+ }
214
+ }
215
+ }
216
+ }
217
+ },
218
+ "Text": {
219
+ "type": "object",
220
+ "additionalProperties": false,
221
+ "required": [
222
+ "id",
223
+ "component",
224
+ "text"
225
+ ],
226
+ "properties": {
227
+ "id": {
228
+ "$ref": "#/$defs/componentId"
229
+ },
230
+ "component": {
231
+ "type": "string",
232
+ "enum": [
233
+ "Text"
234
+ ]
235
+ },
236
+ "accessibility": {
237
+ "$ref": "#/$defs/accessibility"
238
+ },
239
+ "weight": {
240
+ "type": "number"
241
+ },
242
+ "text": {
243
+ "$ref": "#/$defs/dynString"
244
+ },
245
+ "variant": {
246
+ "type": "string",
247
+ "enum": [
248
+ "h1",
249
+ "h2",
250
+ "h3",
251
+ "h4",
252
+ "h5",
253
+ "caption",
254
+ "body"
255
+ ]
256
+ }
257
+ }
258
+ },
259
+ "TextField": {
260
+ "type": "object",
261
+ "additionalProperties": false,
262
+ "required": [
263
+ "id",
264
+ "component",
265
+ "label"
266
+ ],
267
+ "properties": {
268
+ "id": {
269
+ "$ref": "#/$defs/componentId"
270
+ },
271
+ "component": {
272
+ "type": "string",
273
+ "enum": [
274
+ "TextField"
275
+ ]
276
+ },
277
+ "accessibility": {
278
+ "$ref": "#/$defs/accessibility"
279
+ },
280
+ "weight": {
281
+ "type": "number"
282
+ },
283
+ "checks": {
284
+ "type": "array",
285
+ "maxItems": 16,
286
+ "items": {
287
+ "$ref": "#/$defs/check"
288
+ }
289
+ },
290
+ "label": {
291
+ "$ref": "#/$defs/dynString"
292
+ },
293
+ "value": {
294
+ "$ref": "#/$defs/dynString"
295
+ },
296
+ "variant": {
297
+ "type": "string",
298
+ "enum": [
299
+ "longText",
300
+ "number",
301
+ "shortText"
302
+ ],
303
+ "description": "`obscured` is excluded: a surface MUST NOT solicit a secret (RFC 0209 §B.5; invariant a2ui-surface-no-secret-input)."
304
+ },
305
+ "validationRegexp": {
306
+ "type": "string",
307
+ "maxLength": 256
308
+ }
309
+ }
310
+ },
311
+ "CheckBox": {
312
+ "type": "object",
313
+ "additionalProperties": false,
314
+ "required": [
315
+ "id",
316
+ "component",
317
+ "label",
318
+ "value"
319
+ ],
320
+ "properties": {
321
+ "id": {
322
+ "$ref": "#/$defs/componentId"
323
+ },
324
+ "component": {
325
+ "type": "string",
326
+ "enum": [
327
+ "CheckBox"
328
+ ]
329
+ },
330
+ "accessibility": {
331
+ "$ref": "#/$defs/accessibility"
332
+ },
333
+ "weight": {
334
+ "type": "number"
335
+ },
336
+ "checks": {
337
+ "type": "array",
338
+ "maxItems": 16,
339
+ "items": {
340
+ "$ref": "#/$defs/check"
341
+ }
342
+ },
343
+ "label": {
344
+ "$ref": "#/$defs/dynString"
345
+ },
346
+ "value": {
347
+ "$ref": "#/$defs/dynBool"
348
+ }
349
+ }
350
+ },
351
+ "ChoicePicker": {
352
+ "type": "object",
353
+ "additionalProperties": false,
354
+ "required": [
355
+ "id",
356
+ "component",
357
+ "options",
358
+ "value"
359
+ ],
360
+ "properties": {
361
+ "id": {
362
+ "$ref": "#/$defs/componentId"
363
+ },
364
+ "component": {
365
+ "type": "string",
366
+ "enum": [
367
+ "ChoicePicker"
368
+ ]
369
+ },
370
+ "accessibility": {
371
+ "$ref": "#/$defs/accessibility"
372
+ },
373
+ "weight": {
374
+ "type": "number"
375
+ },
376
+ "checks": {
377
+ "type": "array",
378
+ "maxItems": 16,
379
+ "items": {
380
+ "$ref": "#/$defs/check"
381
+ }
382
+ },
383
+ "label": {
384
+ "$ref": "#/$defs/dynString"
385
+ },
386
+ "variant": {
387
+ "type": "string",
388
+ "enum": [
389
+ "multipleSelection",
390
+ "mutuallyExclusive"
391
+ ]
392
+ },
393
+ "options": {
394
+ "type": "array",
395
+ "minItems": 1,
396
+ "maxItems": 256,
397
+ "items": {
398
+ "type": "object",
399
+ "additionalProperties": false,
400
+ "required": [
401
+ "label",
402
+ "value"
403
+ ],
404
+ "properties": {
405
+ "label": {
406
+ "$ref": "#/$defs/dynString"
407
+ },
408
+ "value": {
409
+ "type": "string",
410
+ "maxLength": 1024
411
+ }
412
+ }
413
+ }
414
+ },
415
+ "value": {
416
+ "$ref": "#/$defs/dynStringList"
417
+ },
418
+ "displayStyle": {
419
+ "type": "string",
420
+ "enum": [
421
+ "checkbox",
422
+ "chips"
423
+ ]
424
+ },
425
+ "filterable": {
426
+ "type": "boolean"
427
+ }
428
+ }
429
+ },
430
+ "DateTimeInput": {
431
+ "type": "object",
432
+ "additionalProperties": false,
433
+ "required": [
434
+ "id",
435
+ "component",
436
+ "value"
437
+ ],
438
+ "properties": {
439
+ "id": {
440
+ "$ref": "#/$defs/componentId"
441
+ },
442
+ "component": {
443
+ "type": "string",
444
+ "enum": [
445
+ "DateTimeInput"
446
+ ]
447
+ },
448
+ "accessibility": {
449
+ "$ref": "#/$defs/accessibility"
450
+ },
451
+ "weight": {
452
+ "type": "number"
453
+ },
454
+ "checks": {
455
+ "type": "array",
456
+ "maxItems": 16,
457
+ "items": {
458
+ "$ref": "#/$defs/check"
459
+ }
460
+ },
461
+ "label": {
462
+ "$ref": "#/$defs/dynString"
463
+ },
464
+ "value": {
465
+ "$ref": "#/$defs/dynString"
466
+ },
467
+ "enableDate": {
468
+ "type": "boolean"
469
+ },
470
+ "enableTime": {
471
+ "type": "boolean"
472
+ }
473
+ }
474
+ },
475
+ "Button": {
476
+ "type": "object",
477
+ "additionalProperties": false,
478
+ "required": [
479
+ "id",
480
+ "component",
481
+ "child",
482
+ "action"
483
+ ],
484
+ "properties": {
485
+ "id": {
486
+ "$ref": "#/$defs/componentId"
487
+ },
488
+ "component": {
489
+ "type": "string",
490
+ "enum": [
491
+ "Button"
492
+ ]
493
+ },
494
+ "accessibility": {
495
+ "$ref": "#/$defs/accessibility"
496
+ },
497
+ "weight": {
498
+ "type": "number"
499
+ },
500
+ "child": {
501
+ "$ref": "#/$defs/componentId"
502
+ },
503
+ "variant": {
504
+ "type": "string",
505
+ "enum": [
506
+ "default",
507
+ "primary",
508
+ "borderless"
509
+ ]
510
+ },
511
+ "action": {
512
+ "$ref": "#/$defs/action"
513
+ }
514
+ }
515
+ },
516
+ "action": {
517
+ "type": "object",
518
+ "additionalProperties": false,
519
+ "required": [
520
+ "event"
521
+ ],
522
+ "description": "A2UI Action, profiled to the server-event arm only; `functionCall` (client-side functions, including `openUrl`) is excluded (RFC 0209 §B.3; invariant a2ui-action-confinement).",
523
+ "properties": {
524
+ "event": {
525
+ "type": "object",
526
+ "additionalProperties": false,
527
+ "required": [
528
+ "name"
529
+ ],
530
+ "properties": {
531
+ "name": {
532
+ "type": "string",
533
+ "enum": [
534
+ "resume",
535
+ "exchange"
536
+ ],
537
+ "description": "The host-allowlisted target: an interrupt resume or a conversation exchange."
538
+ },
539
+ "context": {
540
+ "type": "object",
541
+ "maxProperties": 64,
542
+ "additionalProperties": {
543
+ "$ref": "#/$defs/dynValue"
544
+ }
545
+ }
546
+ }
547
+ }
548
+ }
549
+ },
550
+ "Column": {
551
+ "type": "object",
552
+ "additionalProperties": false,
553
+ "required": [
554
+ "id",
555
+ "component",
556
+ "children"
557
+ ],
558
+ "properties": {
559
+ "id": {
560
+ "$ref": "#/$defs/componentId"
561
+ },
562
+ "component": {
563
+ "type": "string",
564
+ "enum": [
565
+ "Column"
566
+ ]
567
+ },
568
+ "accessibility": {
569
+ "$ref": "#/$defs/accessibility"
570
+ },
571
+ "weight": {
572
+ "type": "number"
573
+ },
574
+ "children": {
575
+ "type": "array",
576
+ "maxItems": 256,
577
+ "items": {
578
+ "$ref": "#/$defs/componentId"
579
+ }
580
+ },
581
+ "justify": {
582
+ "type": "string",
583
+ "enum": [
584
+ "start",
585
+ "center",
586
+ "end",
587
+ "spaceBetween",
588
+ "spaceAround",
589
+ "spaceEvenly",
590
+ "stretch"
591
+ ]
592
+ },
593
+ "align": {
594
+ "type": "string",
595
+ "enum": [
596
+ "center",
597
+ "end",
598
+ "start",
599
+ "stretch"
600
+ ]
601
+ }
602
+ }
603
+ },
604
+ "Row": {
605
+ "type": "object",
606
+ "additionalProperties": false,
607
+ "required": [
608
+ "id",
609
+ "component",
610
+ "children"
611
+ ],
612
+ "properties": {
613
+ "id": {
614
+ "$ref": "#/$defs/componentId"
615
+ },
616
+ "component": {
617
+ "type": "string",
618
+ "enum": [
619
+ "Row"
620
+ ]
621
+ },
622
+ "accessibility": {
623
+ "$ref": "#/$defs/accessibility"
624
+ },
625
+ "weight": {
626
+ "type": "number"
627
+ },
628
+ "children": {
629
+ "type": "array",
630
+ "maxItems": 256,
631
+ "items": {
632
+ "$ref": "#/$defs/componentId"
633
+ }
634
+ },
635
+ "justify": {
636
+ "type": "string",
637
+ "enum": [
638
+ "center",
639
+ "end",
640
+ "spaceAround",
641
+ "spaceBetween",
642
+ "spaceEvenly",
643
+ "start",
644
+ "stretch"
645
+ ]
646
+ },
647
+ "align": {
648
+ "type": "string",
649
+ "enum": [
650
+ "start",
651
+ "center",
652
+ "end",
653
+ "stretch"
654
+ ]
655
+ }
656
+ }
657
+ },
658
+ "Card": {
659
+ "type": "object",
660
+ "additionalProperties": false,
661
+ "required": [
662
+ "id",
663
+ "component",
664
+ "child"
665
+ ],
666
+ "properties": {
667
+ "id": {
668
+ "$ref": "#/$defs/componentId"
669
+ },
670
+ "component": {
671
+ "type": "string",
672
+ "enum": [
673
+ "Card"
674
+ ]
675
+ },
676
+ "accessibility": {
677
+ "$ref": "#/$defs/accessibility"
678
+ },
679
+ "weight": {
680
+ "type": "number"
681
+ },
682
+ "child": {
683
+ "$ref": "#/$defs/componentId"
684
+ }
685
+ }
686
+ },
687
+ "Divider": {
688
+ "type": "object",
689
+ "additionalProperties": false,
690
+ "required": [
691
+ "id",
692
+ "component"
693
+ ],
694
+ "properties": {
695
+ "id": {
696
+ "$ref": "#/$defs/componentId"
697
+ },
698
+ "component": {
699
+ "type": "string",
700
+ "enum": [
701
+ "Divider"
702
+ ]
703
+ },
704
+ "accessibility": {
705
+ "$ref": "#/$defs/accessibility"
706
+ },
707
+ "weight": {
708
+ "type": "number"
709
+ },
710
+ "axis": {
711
+ "type": "string",
712
+ "enum": [
713
+ "horizontal",
714
+ "vertical"
715
+ ]
716
+ }
717
+ }
718
+ },
719
+ "component": {
720
+ "description": "One component of the OpenWOP profile of the A2UI v0.9 basic catalog (RFC 0209 §B.2). anyOf with a single-string-enum `component` discriminator, every object closed.",
721
+ "anyOf": [
722
+ {
723
+ "$ref": "#/$defs/Text"
724
+ },
725
+ {
726
+ "$ref": "#/$defs/TextField"
727
+ },
728
+ {
729
+ "$ref": "#/$defs/CheckBox"
730
+ },
731
+ {
732
+ "$ref": "#/$defs/ChoicePicker"
733
+ },
734
+ {
735
+ "$ref": "#/$defs/DateTimeInput"
736
+ },
737
+ {
738
+ "$ref": "#/$defs/Button"
739
+ },
740
+ {
741
+ "$ref": "#/$defs/Column"
742
+ },
743
+ {
744
+ "$ref": "#/$defs/Row"
745
+ },
746
+ {
747
+ "$ref": "#/$defs/Card"
748
+ },
749
+ {
750
+ "$ref": "#/$defs/Divider"
751
+ }
752
+ ]
753
+ },
754
+ "createSurface": {
755
+ "type": "object",
756
+ "additionalProperties": false,
757
+ "required": [
758
+ "version",
759
+ "createSurface"
760
+ ],
761
+ "properties": {
762
+ "version": {
763
+ "type": "string",
764
+ "enum": [
765
+ "v0.9"
766
+ ]
767
+ },
768
+ "createSurface": {
769
+ "type": "object",
770
+ "additionalProperties": false,
771
+ "required": [
772
+ "surfaceId",
773
+ "catalogId"
774
+ ],
775
+ "properties": {
776
+ "surfaceId": {
777
+ "$ref": "#/$defs/surfaceId"
778
+ },
779
+ "catalogId": {
780
+ "$ref": "#/$defs/catalogId"
781
+ },
782
+ "theme": {
783
+ "type": "object",
784
+ "additionalProperties": false,
785
+ "description": "Profiled: `iconUrl` is excluded (network egress, RFC 0209 §B.3).",
786
+ "properties": {
787
+ "primaryColor": {
788
+ "type": "string",
789
+ "pattern": "^#[0-9a-fA-F]{6}$"
790
+ },
791
+ "agentDisplayName": {
792
+ "type": "string",
793
+ "maxLength": 128
794
+ }
795
+ }
796
+ }
797
+ }
798
+ }
799
+ }
800
+ },
801
+ "updateComponents": {
802
+ "type": "object",
803
+ "additionalProperties": false,
804
+ "required": [
805
+ "version",
806
+ "updateComponents"
807
+ ],
808
+ "properties": {
809
+ "version": {
810
+ "type": "string",
811
+ "enum": [
812
+ "v0.9"
813
+ ]
814
+ },
815
+ "updateComponents": {
816
+ "type": "object",
817
+ "additionalProperties": false,
818
+ "required": [
819
+ "surfaceId",
820
+ "components"
821
+ ],
822
+ "properties": {
823
+ "surfaceId": {
824
+ "$ref": "#/$defs/surfaceId"
825
+ },
826
+ "components": {
827
+ "type": "array",
828
+ "minItems": 1,
829
+ "maxItems": 512,
830
+ "items": {
831
+ "$ref": "#/$defs/component"
832
+ }
833
+ }
834
+ }
835
+ }
836
+ }
837
+ },
838
+ "updateDataModel": {
839
+ "type": "object",
840
+ "additionalProperties": false,
841
+ "required": [
842
+ "version",
843
+ "updateDataModel"
844
+ ],
845
+ "properties": {
846
+ "version": {
847
+ "type": "string",
848
+ "enum": [
849
+ "v0.9"
850
+ ]
851
+ },
852
+ "updateDataModel": {
853
+ "type": "object",
854
+ "additionalProperties": false,
855
+ "required": [
856
+ "surfaceId"
857
+ ],
858
+ "properties": {
859
+ "surfaceId": {
860
+ "$ref": "#/$defs/surfaceId"
861
+ },
862
+ "path": {
863
+ "type": "string",
864
+ "pattern": "^/",
865
+ "maxLength": 512
866
+ },
867
+ "value": {}
868
+ }
869
+ }
870
+ }
871
+ },
872
+ "deleteSurface": {
873
+ "type": "object",
874
+ "additionalProperties": false,
875
+ "required": [
876
+ "version",
877
+ "deleteSurface"
878
+ ],
879
+ "properties": {
880
+ "version": {
881
+ "type": "string",
882
+ "enum": [
883
+ "v0.9"
884
+ ]
885
+ },
886
+ "deleteSurface": {
887
+ "type": "object",
888
+ "additionalProperties": false,
889
+ "required": [
890
+ "surfaceId"
891
+ ],
892
+ "properties": {
893
+ "surfaceId": {
894
+ "$ref": "#/$defs/surfaceId"
895
+ }
896
+ }
897
+ }
898
+ }
899
+ },
900
+ "message": {
901
+ "anyOf": [
902
+ {
903
+ "$ref": "#/$defs/createSurface"
904
+ },
905
+ {
906
+ "$ref": "#/$defs/updateComponents"
907
+ },
908
+ {
909
+ "$ref": "#/$defs/updateDataModel"
910
+ },
911
+ {
912
+ "$ref": "#/$defs/deleteSurface"
913
+ }
914
+ ]
915
+ },
916
+ "surfaceId": {
14
917
  "type": "string",
15
- "description": "OPTIONAL per RFC 0030 §A — the model's reasoning, conventionally the first property of a kind whose payload benefits from multi-step composition."
918
+ "minLength": 1,
919
+ "maxLength": 128,
920
+ "pattern": "^[A-Za-z0-9_.:-]+$"
16
921
  },
17
- "catalogVersion": {
922
+ "catalogId": {
18
923
  "type": "string",
19
924
  "enum": [
20
- "0.9.1"
925
+ "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json"
21
926
  ],
22
- "description": "REQUIRED — the A2UI catalog version the surface targets. This enum IS the host's supported-version set (ai-envelope.md §\"A2UI surfaces\"); it is never a free string the producer invents. A consumer MUST refuse an unknown/higher version with `unknown_schema_version`. Pinning the version in the payload keeps `:fork`/replay deterministic after the external A2UI standard ships a breaking version."
927
+ "description": "The host-pinned catalog set (RFC 0209 §B.1). Never a free string."
23
928
  },
24
- "surface": {
25
- "$ref": "#/$defs/surface",
26
- "description": "REQUIRED — the A2UI surface document: a closed component tree (ai-envelope.md §\"A2UI surfaces\"). Self-contained: renderable from the payload alone, never a live reference into an external catalog."
27
- }
28
- },
29
- "$defs": {
30
929
  "surface": {
31
930
  "type": "object",
32
931
  "required": [
@@ -42,12 +941,12 @@
42
941
  "type": "array",
43
942
  "description": "The flat, ordered component list. Each element is one of the host's day-1 catalog components, discriminated by the single-string-enum `component` field. `anyOf` (not `oneOf`) per ai-envelope.md §\"Schema discipline\".",
44
943
  "items": {
45
- "$ref": "#/$defs/component"
944
+ "$ref": "#/$defs/componentV1"
46
945
  }
47
946
  }
48
947
  }
49
948
  },
50
- "component": {
949
+ "componentV1": {
51
950
  "description": "A single A2UI component. Closed set (day-1 catalog 0.9.1); the `component` discriminator is a single-string-enum per branch.",
52
951
  "anyOf": [
53
952
  {
@@ -287,6 +1186,5 @@
287
1186
  }
288
1187
  }
289
1188
  }
290
- },
291
- "x-openwop-seeded-from": "v1"
1189
+ }
292
1190
  }