@clowder-ai/plugin-contract 0.1.0-beta.9 → 0.2.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 (145) hide show
  1. package/dist/codegen/generate-contract.d.ts +6 -0
  2. package/dist/codegen/generate-contract.d.ts.map +1 -1
  3. package/dist/codegen/generate-contract.js +343 -19
  4. package/dist/codegen/generate-contract.js.map +1 -1
  5. package/dist/conformance/fixtures.d.ts +3 -1
  6. package/dist/conformance/fixtures.d.ts.map +1 -1
  7. package/dist/conformance/fixtures.js +2 -1
  8. package/dist/conformance/fixtures.js.map +1 -1
  9. package/dist/conformance/index.d.ts +2 -1
  10. package/dist/conformance/index.d.ts.map +1 -1
  11. package/dist/conformance/index.js +2 -1
  12. package/dist/conformance/index.js.map +1 -1
  13. package/dist/conformance/messaging-behavior-fixture.d.ts +12 -0
  14. package/dist/conformance/messaging-behavior-fixture.d.ts.map +1 -0
  15. package/dist/conformance/messaging-behavior-fixture.js +30 -0
  16. package/dist/conformance/messaging-behavior-fixture.js.map +1 -0
  17. package/dist/conformance/runner.d.ts.map +1 -1
  18. package/dist/conformance/runner.js +3 -1
  19. package/dist/conformance/runner.js.map +1 -1
  20. package/dist/docx-materialization.d.ts +8 -0
  21. package/dist/docx-materialization.d.ts.map +1 -0
  22. package/dist/docx-materialization.js +19 -0
  23. package/dist/docx-materialization.js.map +1 -0
  24. package/dist/generated/contract.generated.d.ts +1647 -52
  25. package/dist/generated/contract.generated.d.ts.map +1 -1
  26. package/dist/generated/contract.generated.js +72 -3
  27. package/dist/generated/contract.generated.js.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/validation/catalog.d.ts +21 -0
  31. package/dist/validation/catalog.d.ts.map +1 -0
  32. package/dist/validation/catalog.js +140 -0
  33. package/dist/validation/catalog.js.map +1 -0
  34. package/dist/validation/cloud-conversation-host.d.ts +18 -0
  35. package/dist/validation/cloud-conversation-host.d.ts.map +1 -0
  36. package/dist/validation/cloud-conversation-host.js +83 -0
  37. package/dist/validation/cloud-conversation-host.js.map +1 -0
  38. package/dist/validation/companion-bridge.d.ts +6 -0
  39. package/dist/validation/companion-bridge.d.ts.map +1 -0
  40. package/dist/validation/companion-bridge.js +198 -0
  41. package/dist/validation/companion-bridge.js.map +1 -0
  42. package/dist/validation/docx-materialization.d.ts +6 -0
  43. package/dist/validation/docx-materialization.d.ts.map +1 -0
  44. package/dist/validation/docx-materialization.js +36 -0
  45. package/dist/validation/docx-materialization.js.map +1 -0
  46. package/dist/validation/index.d.ts +9 -1
  47. package/dist/validation/index.d.ts.map +1 -1
  48. package/dist/validation/index.js +9 -1
  49. package/dist/validation/index.js.map +1 -1
  50. package/dist/validation/manifest.d.ts.map +1 -1
  51. package/dist/validation/manifest.js +303 -0
  52. package/dist/validation/manifest.js.map +1 -1
  53. package/dist/validation/members.d.ts +4 -0
  54. package/dist/validation/members.d.ts.map +1 -0
  55. package/dist/validation/members.js +11 -0
  56. package/dist/validation/members.js.map +1 -0
  57. package/dist/validation/messaging-semantic.d.ts.map +1 -1
  58. package/dist/validation/messaging-semantic.js +98 -0
  59. package/dist/validation/messaging-semantic.js.map +1 -1
  60. package/dist/validation/messaging-wire.d.ts +42 -0
  61. package/dist/validation/messaging-wire.d.ts.map +1 -0
  62. package/dist/validation/messaging-wire.js +184 -0
  63. package/dist/validation/messaging-wire.js.map +1 -0
  64. package/dist/validation/operation-rows.d.ts +25 -0
  65. package/dist/validation/operation-rows.d.ts.map +1 -0
  66. package/dist/validation/operation-rows.js +135 -0
  67. package/dist/validation/operation-rows.js.map +1 -0
  68. package/dist/validation/signals.d.ts +1 -10
  69. package/dist/validation/signals.d.ts.map +1 -1
  70. package/dist/validation/signals.js +0 -174
  71. package/dist/validation/signals.js.map +1 -1
  72. package/dist/variant.d.ts +114 -0
  73. package/dist/variant.d.ts.map +1 -0
  74. package/dist/variant.js +305 -0
  75. package/dist/variant.js.map +1 -0
  76. package/dist/wire/constants.d.ts +2 -1
  77. package/dist/wire/constants.d.ts.map +1 -1
  78. package/dist/wire/constants.js +2 -1
  79. package/dist/wire/constants.js.map +1 -1
  80. package/dist/wire/dispatch.d.ts +49 -0
  81. package/dist/wire/dispatch.d.ts.map +1 -0
  82. package/dist/wire/dispatch.js +880 -0
  83. package/dist/wire/dispatch.js.map +1 -0
  84. package/dist/wire/disposition-fixtures.d.ts +9 -1
  85. package/dist/wire/disposition-fixtures.d.ts.map +1 -1
  86. package/dist/wire/disposition-fixtures.js +622 -95
  87. package/dist/wire/disposition-fixtures.js.map +1 -1
  88. package/dist/wire/envelope.d.ts +31 -0
  89. package/dist/wire/envelope.d.ts.map +1 -1
  90. package/dist/wire/envelope.js +48 -1
  91. package/dist/wire/envelope.js.map +1 -1
  92. package/dist/wire/errors.d.ts +31 -1
  93. package/dist/wire/errors.d.ts.map +1 -1
  94. package/dist/wire/errors.js +36 -0
  95. package/dist/wire/errors.js.map +1 -1
  96. package/dist/wire/grants.d.ts +4 -4
  97. package/dist/wire/grants.js +3 -3
  98. package/dist/wire/handshake-byte-bounds.d.ts.map +1 -1
  99. package/dist/wire/handshake-byte-bounds.js +5 -2
  100. package/dist/wire/handshake-byte-bounds.js.map +1 -1
  101. package/dist/wire/handshake.d.ts +6 -0
  102. package/dist/wire/handshake.d.ts.map +1 -1
  103. package/dist/wire/handshake.js +6 -3
  104. package/dist/wire/handshake.js.map +1 -1
  105. package/dist/wire/index.d.ts +13 -9
  106. package/dist/wire/index.d.ts.map +1 -1
  107. package/dist/wire/index.js +29 -6
  108. package/dist/wire/index.js.map +1 -1
  109. package/dist/wire/lifecycle-byte-bounds.d.ts +40 -0
  110. package/dist/wire/lifecycle-byte-bounds.d.ts.map +1 -0
  111. package/dist/wire/lifecycle-byte-bounds.js +149 -0
  112. package/dist/wire/lifecycle-byte-bounds.js.map +1 -0
  113. package/dist/wire/messaging-byte-bounds.d.ts +62 -0
  114. package/dist/wire/messaging-byte-bounds.d.ts.map +1 -0
  115. package/dist/wire/messaging-byte-bounds.js +581 -0
  116. package/dist/wire/messaging-byte-bounds.js.map +1 -0
  117. package/dist/wire/registry.d.ts +58 -86
  118. package/dist/wire/registry.d.ts.map +1 -1
  119. package/dist/wire/registry.js +45 -88
  120. package/dist/wire/registry.js.map +1 -1
  121. package/dist/wire/row-shapes.d.ts +86 -69
  122. package/dist/wire/row-shapes.d.ts.map +1 -1
  123. package/dist/wire/row-shapes.js +30 -3
  124. package/dist/wire/row-shapes.js.map +1 -1
  125. package/fixtures/behavior/messaging/adversarial-invariants.json +92 -2
  126. package/fixtures/manifest/invalid/duplicate-signal-type.json +4 -2
  127. package/fixtures/manifest/invalid/icon-package-escape.json +22 -0
  128. package/fixtures/manifest/valid/localized-product-metadata.json +27 -0
  129. package/fixtures/messaging/valid/subscription-delivery.json +1 -1
  130. package/package.json +16 -3
  131. package/src/schemas/behavior-fixture.schema.json +903 -116
  132. package/src/schemas/catalog.schema.json +91 -0
  133. package/src/schemas/companion-bridge.schema.json +2256 -0
  134. package/src/schemas/docx-materialization.schema.json +302 -0
  135. package/src/schemas/manifest.schema.json +2273 -88
  136. package/src/schemas/messaging.schema.json +692 -41
  137. package/src/schemas/plugin-metadata.schema.json +62 -0
  138. package/src/schemas/signal.schema.json +68 -78
  139. package/dist/wire/signal-byte-bounds.d.ts +0 -97
  140. package/dist/wire/signal-byte-bounds.d.ts.map +0 -1
  141. package/dist/wire/signal-byte-bounds.js +0 -229
  142. package/dist/wire/signal-byte-bounds.js.map +0 -1
  143. package/fixtures/signals/invalid/destination-injection.json +0 -15
  144. package/fixtures/signals/invalid/non-utc-occurred-at.json +0 -12
  145. package/fixtures/signals/valid/feishu-meeting-artifact.json +0 -18
@@ -11,7 +11,13 @@
11
11
  "maxIdempotencyKeyLength": 200,
12
12
  "maxElementIdLength": 128,
13
13
  "maxElementsPerMessage": 128,
14
- "maxAppendOpsPerMessage": 64
14
+ "maxAppendOpsPerMessage": 64,
15
+ "maxMessageIdLength": 512,
16
+ "maxThreadIdLength": 512,
17
+ "maxActorIdLength": 512,
18
+ "maxMessageHandleTokenLength": 512,
19
+ "maxEventIdLength": 720,
20
+ "maxOccurredAtLength": 27
15
21
  },
16
22
  "x-clowder-replay-window-default": "P7D",
17
23
  "oneOf": [
@@ -33,7 +39,7 @@
33
39
  "type": "object",
34
40
  "properties": {
35
41
  "kind": { "$ref": "#/$defs/ActorKind" },
36
- "id": { "type": "string", "minLength": 1 }
42
+ "id": { "type": "string", "minLength": 1, "maxLength": 512 }
37
43
  },
38
44
  "required": ["kind", "id"],
39
45
  "additionalProperties": false
@@ -115,9 +121,13 @@
115
121
  "required": ["epistemicStatus"],
116
122
  "additionalProperties": false
117
123
  },
124
+ "MediaType": {
125
+ "type": "string",
126
+ "enum": ["image", "file", "audio", "video"]
127
+ },
118
128
  "ElementKind": {
119
129
  "type": "string",
120
- "enum": ["text", "media_ref", "rich_block"]
130
+ "enum": ["text", "media_ref", "rich_block", "media_unavailable", "media_warning"]
121
131
  },
122
132
  "TextElementPayload": {
123
133
  "type": "object",
@@ -129,12 +139,60 @@
129
139
  },
130
140
  "MediaRefElementPayload": {
131
141
  "type": "object",
132
- "additionalProperties": true
142
+ "properties": {
143
+ "type": { "$ref": "#/$defs/MediaType" },
144
+ "reference": {
145
+ "type": "string",
146
+ "minLength": 1,
147
+ "maxLength": 2048,
148
+ "description": "pmr_* enters only through a public messaging.send draft that carries sourceEventId; whisper, appendElements, and pmr drafts without sourceEventId are rejected. hmr_* is an opaque identifier, not a bearer token: send, appendElements, and media.read share the same Host authorization decision, and unknown, unauthorized, cross-instance, or revoked references all return MEDIA_ACCESS_DENIED. References without either prefix are legacy opaque values: the Host does not parse, materialize, or expose them through media.read."
149
+ },
150
+ "sourceId": { "type": "string", "minLength": 1, "maxLength": 256 },
151
+ "fileName": { "type": "string", "minLength": 1, "maxLength": 512 }
152
+ },
153
+ "required": ["type", "reference"],
154
+ "additionalProperties": true,
155
+ "allOf": [
156
+ {
157
+ "if": { "properties": { "reference": { "pattern": "^pmr_" } }, "required": ["reference"] },
158
+ "then": { "required": ["sourceId"] }
159
+ },
160
+ {
161
+ "if": { "properties": { "reference": { "pattern": "^hmr_" } }, "required": ["reference"] },
162
+ "then": { "not": { "required": ["sourceId"] } }
163
+ }
164
+ ]
133
165
  },
134
166
  "RichBlockElementPayload": {
135
167
  "type": "object",
168
+ "properties": {
169
+ "id": { "type": "string", "minLength": 1, "maxLength": 128 },
170
+ "kind": { "type": "string", "minLength": 1, "maxLength": 128 },
171
+ "v": { "const": 1 }
172
+ },
173
+ "required": ["id", "kind", "v"],
136
174
  "additionalProperties": true
137
175
  },
176
+ "MediaUnavailableElementPayload": {
177
+ "type": "object",
178
+ "properties": {
179
+ "type": { "$ref": "#/$defs/MediaType" },
180
+ "fileName": { "type": "string", "minLength": 1, "maxLength": 512 },
181
+ "reason": { "type": "string", "enum": ["source_expired", "timeout", "unavailable"] }
182
+ },
183
+ "required": ["type", "reason"],
184
+ "additionalProperties": false
185
+ },
186
+ "MediaWarningElementPayload": {
187
+ "type": "object",
188
+ "properties": {
189
+ "mediaElementId": { "type": "string", "minLength": 1, "maxLength": 128 },
190
+ "stage": { "type": "string", "enum": ["transcription", "preview"] },
191
+ "reason": { "type": "string", "enum": ["timeout", "processing_failed"] }
192
+ },
193
+ "required": ["mediaElementId", "stage", "reason"],
194
+ "additionalProperties": false
195
+ },
138
196
  "TextMessageElement": {
139
197
  "type": "object",
140
198
  "properties": {
@@ -159,6 +217,20 @@
159
217
  "required": ["elementId", "kind", "payload"],
160
218
  "additionalProperties": false
161
219
  },
220
+ "PmrMediaRefElementMatch": {
221
+ "type": "object",
222
+ "properties": {
223
+ "kind": { "const": "media_ref" },
224
+ "payload": {
225
+ "type": "object",
226
+ "properties": {
227
+ "reference": { "type": "string", "pattern": "^pmr_" }
228
+ },
229
+ "required": ["reference"]
230
+ }
231
+ },
232
+ "required": ["kind", "payload"]
233
+ },
162
234
  "RichBlockMessageElement": {
163
235
  "type": "object",
164
236
  "properties": {
@@ -171,11 +243,37 @@
171
243
  "required": ["elementId", "kind", "payload"],
172
244
  "additionalProperties": false
173
245
  },
246
+ "MediaUnavailableMessageElement": {
247
+ "type": "object",
248
+ "properties": {
249
+ "elementId": { "type": "string", "minLength": 1, "maxLength": 128 },
250
+ "kind": { "const": "media_unavailable" },
251
+ "payload": { "$ref": "#/$defs/MediaUnavailableElementPayload" },
252
+ "derivedFromElementId": { "type": "string", "minLength": 1, "maxLength": 128 },
253
+ "epistemicStatus": { "$ref": "#/$defs/EpistemicStatus" }
254
+ },
255
+ "required": ["elementId", "kind", "payload"],
256
+ "additionalProperties": false
257
+ },
258
+ "MediaWarningMessageElement": {
259
+ "type": "object",
260
+ "properties": {
261
+ "elementId": { "type": "string", "minLength": 1, "maxLength": 128 },
262
+ "kind": { "const": "media_warning" },
263
+ "payload": { "$ref": "#/$defs/MediaWarningElementPayload" },
264
+ "derivedFromElementId": { "type": "string", "minLength": 1, "maxLength": 128 },
265
+ "epistemicStatus": { "$ref": "#/$defs/EpistemicStatus" }
266
+ },
267
+ "required": ["elementId", "kind", "payload"],
268
+ "additionalProperties": false
269
+ },
174
270
  "MessageElement": {
175
271
  "oneOf": [
176
272
  { "$ref": "#/$defs/TextMessageElement" },
177
273
  { "$ref": "#/$defs/MediaRefMessageElement" },
178
- { "$ref": "#/$defs/RichBlockMessageElement" }
274
+ { "$ref": "#/$defs/RichBlockMessageElement" },
275
+ { "$ref": "#/$defs/MediaUnavailableMessageElement" },
276
+ { "$ref": "#/$defs/MediaWarningMessageElement" }
179
277
  ]
180
278
  },
181
279
  "MessagePayload": {
@@ -278,6 +376,12 @@
278
376
  { "$ref": "#/$defs/SystemAudience" }
279
377
  ]
280
378
  },
379
+ "MessageId": {
380
+ "type": "string",
381
+ "minLength": 1,
382
+ "maxLength": 512,
383
+ "description": "Host message id."
384
+ },
281
385
  "MessageDraft": {
282
386
  "type": "object",
283
387
  "properties": {
@@ -285,26 +389,82 @@
285
389
  "draftAudience": { "$ref": "#/$defs/DraftAudience" },
286
390
  "idempotencyKey": { "type": "string", "minLength": 1, "maxLength": 200 },
287
391
  "sourceEventId": { "type": "string", "minLength": 1, "maxLength": 512 },
288
- "replyTo": { "type": "string", "minLength": 1, "maxLength": 256 },
392
+ "replyTo": { "$ref": "#/$defs/MessageId" },
289
393
  "payload": { "$ref": "#/$defs/DraftPayload" }
290
394
  },
291
395
  "required": ["address", "idempotencyKey", "payload"],
292
- "additionalProperties": false
396
+ "additionalProperties": false,
397
+ "allOf": [
398
+ {
399
+ "if": {
400
+ "properties": {
401
+ "draftAudience": {
402
+ "type": "object",
403
+ "properties": { "kind": { "const": "whisper" } },
404
+ "required": ["kind"]
405
+ }
406
+ },
407
+ "required": ["draftAudience"]
408
+ },
409
+ "then": {
410
+ "properties": {
411
+ "payload": {
412
+ "properties": {
413
+ "elements": {
414
+ "not": { "contains": { "$ref": "#/$defs/PmrMediaRefElementMatch" } }
415
+ }
416
+ }
417
+ }
418
+ }
419
+ }
420
+ },
421
+ {
422
+ "if": {
423
+ "properties": {
424
+ "payload": {
425
+ "properties": {
426
+ "elements": {
427
+ "contains": { "$ref": "#/$defs/PmrMediaRefElementMatch" }
428
+ }
429
+ }
430
+ }
431
+ }
432
+ },
433
+ "then": { "required": ["sourceEventId"] }
434
+ }
435
+ ]
436
+ },
437
+ "OccurredAt": {
438
+ "oneOf": [
439
+ {
440
+ "type": "string",
441
+ "maxLength": 24,
442
+ "format": "date-time",
443
+ "pattern": "Z$"
444
+ },
445
+ {
446
+ "type": "string",
447
+ "minLength": 27,
448
+ "maxLength": 27,
449
+ "pattern": "^[+-][0-9]{6}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{3}Z$"
450
+ }
451
+ ]
452
+ },
453
+ "ThreadId": {
454
+ "type": "string",
455
+ "minLength": 1,
456
+ "maxLength": 512
293
457
  },
294
458
  "MessageEnvelope": {
295
459
  "type": "object",
296
460
  "properties": {
297
- "messageId": { "type": "string", "minLength": 1 },
298
- "revision": { "type": "integer", "minimum": 1 },
299
- "threadId": { "type": "string", "minLength": 1 },
300
- "replyTo": { "type": "string", "minLength": 1 },
461
+ "messageId": { "$ref": "#/$defs/MessageId" },
462
+ "revision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
463
+ "threadId": { "$ref": "#/$defs/ThreadId" },
464
+ "replyTo": { "$ref": "#/$defs/MessageId" },
301
465
  "actor": { "$ref": "#/$defs/ActorRef" },
302
466
  "audience": { "$ref": "#/$defs/CanonicalAudience" },
303
- "occurredAt": {
304
- "type": "string",
305
- "format": "date-time",
306
- "pattern": "Z$"
307
- },
467
+ "occurredAt": { "$ref": "#/$defs/OccurredAt" },
308
468
  "payload": { "$ref": "#/$defs/MessagePayload" }
309
469
  },
310
470
  "required": ["messageId", "revision", "threadId", "actor", "audience", "occurredAt", "payload"],
@@ -313,8 +473,8 @@
313
473
  "MessagePublishEvent": {
314
474
  "type": "object",
315
475
  "properties": {
316
- "eventId": { "type": "string", "minLength": 1 },
317
- "sequence": { "type": "integer", "minimum": 0 },
476
+ "eventId": { "type": "string", "minLength": 1, "maxLength": 720 },
477
+ "sequence": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
318
478
  "type": { "const": "message.publish" },
319
479
  "envelope": { "$ref": "#/$defs/MessageEnvelope" }
320
480
  },
@@ -324,14 +484,14 @@
324
484
  "MessageElementsAppendEvent": {
325
485
  "type": "object",
326
486
  "properties": {
327
- "eventId": { "type": "string", "minLength": 1 },
328
- "sequence": { "type": "integer", "minimum": 0 },
487
+ "eventId": { "type": "string", "minLength": 1, "maxLength": 720 },
488
+ "sequence": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
329
489
  "type": { "const": "message.elements.append" },
330
- "messageId": { "type": "string", "minLength": 1 },
331
- "threadId": { "type": "string", "minLength": 1 },
490
+ "messageId": { "$ref": "#/$defs/MessageId" },
491
+ "threadId": { "$ref": "#/$defs/ThreadId" },
332
492
  "operationId": { "type": "string", "minLength": 1, "maxLength": 200 },
333
- "baseRevision": { "type": "integer", "minimum": 1 },
334
- "revision": { "type": "integer", "minimum": 1 },
493
+ "baseRevision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
494
+ "revision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
335
495
  "elements": {
336
496
  "type": "array",
337
497
  "items": { "$ref": "#/$defs/MessageElement" },
@@ -351,24 +511,31 @@
351
511
  "SendReceipt": {
352
512
  "type": "object",
353
513
  "properties": {
354
- "messageId": { "type": "string", "minLength": 1 },
355
- "threadId": { "type": "string", "minLength": 1 },
356
- "revision": { "type": "integer", "minimum": 1 },
357
- "handle": { "$ref": "#/$defs/MessageHandle" },
358
- "publishSequence": { "type": "integer", "minimum": 0 }
514
+ "messageId": { "$ref": "#/$defs/MessageId" },
515
+ "threadId": { "$ref": "#/$defs/ThreadId" },
516
+ "revision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
517
+ "messageHandle": { "$ref": "#/$defs/MessageHandle" },
518
+ "publishSequence": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
519
+ "pendingPublication": {
520
+ "const": true,
521
+ "description": "The Host accepted and reserved this message, but media import is still pending and the message is not yet published or readable."
522
+ }
359
523
  },
360
- "required": ["messageId", "threadId", "revision"],
361
- "additionalProperties": false
524
+ "required": ["messageId", "threadId", "revision", "messageHandle"],
525
+ "additionalProperties": false,
526
+ "not": { "required": ["publishSequence", "pendingPublication"] }
362
527
  },
363
528
  "AppendReceipt": {
364
529
  "type": "object",
365
530
  "properties": {
366
- "messageId": { "type": "string", "minLength": 1 },
367
- "revision": { "type": "integer", "minimum": 1 },
368
- "appendSequence": { "type": "integer", "minimum": 0 },
531
+ "messageId": { "$ref": "#/$defs/MessageId" },
532
+ "revision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
533
+ "appendSequence": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
369
534
  "appliedElementIds": {
370
535
  "type": "array",
371
- "items": { "type": "string", "minLength": 1, "maxLength": 128 }
536
+ "items": { "type": "string", "minLength": 1, "maxLength": 128 },
537
+ "minItems": 1,
538
+ "maxItems": 32
372
539
  }
373
540
  },
374
541
  "required": ["messageId", "revision", "appliedElementIds"],
@@ -376,13 +543,13 @@
376
543
  },
377
544
  "MessagingErrorCode": {
378
545
  "type": "string",
379
- "enum": ["VALIDATION", "PERMISSION", "NOT_FOUND", "CONFLICT", "RETRYABLE_INFLIGHT", "STALE_CURSOR"]
546
+ "enum": ["VALIDATION", "PERMISSION", "NOT_FOUND", "CONFLICT", "RETRYABLE_INFLIGHT", "STALE_CURSOR", "MEDIA_ACCESS_DENIED", "MESSAGE_NOT_PUBLISHED"]
380
547
  },
381
548
  "MessageHandle": {
382
549
  "type": "object",
383
550
  "properties": {
384
551
  "kind": { "const": "message" },
385
- "token": { "type": "string", "minLength": 1 }
552
+ "token": { "type": "string", "minLength": 1, "maxLength": 512 }
386
553
  },
387
554
  "required": ["kind", "token"],
388
555
  "additionalProperties": false
@@ -392,12 +559,13 @@
392
559
  "properties": {
393
560
  "handle": { "$ref": "#/$defs/MessageHandle" },
394
561
  "operationId": { "type": "string", "minLength": 1, "maxLength": 200 },
395
- "baseRevision": { "type": "integer", "minimum": 1 },
562
+ "baseRevision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
396
563
  "elements": {
397
564
  "type": "array",
398
565
  "items": { "$ref": "#/$defs/MessageElement" },
399
566
  "minItems": 1,
400
- "maxItems": 32
567
+ "maxItems": 32,
568
+ "not": { "contains": { "$ref": "#/$defs/PmrMediaRefElementMatch" } }
401
569
  }
402
570
  },
403
571
  "required": ["handle", "operationId", "elements"],
@@ -406,6 +574,7 @@
406
574
  "SubscriptionCursor": {
407
575
  "type": "string",
408
576
  "minLength": 1,
577
+ "maxLength": 512,
409
578
  "description": "Opaque, subscription-local acknowledgement token."
410
579
  },
411
580
  "SubscriptionNormalResponse": {
@@ -429,6 +598,7 @@
429
598
  "events": {
430
599
  "type": "array",
431
600
  "items": { "$ref": "#/$defs/MessageOutputEvent" },
601
+ "minItems": 0,
432
602
  "maxItems": 0
433
603
  },
434
604
  "ackToken": { "type": "null" },
@@ -443,6 +613,7 @@
443
613
  "events": {
444
614
  "type": "array",
445
615
  "items": { "$ref": "#/$defs/MessageOutputEvent" },
616
+ "minItems": 0,
446
617
  "maxItems": 0
447
618
  },
448
619
  "ackToken": { "type": "null" },
@@ -463,12 +634,492 @@
463
634
  "properties": {
464
635
  "envelopes": {
465
636
  "type": "array",
466
- "items": { "$ref": "#/$defs/MessageEnvelope" }
637
+ "items": { "$ref": "#/$defs/MessageEnvelope" },
638
+ "maxItems": 128
467
639
  },
468
- "resumeSequence": { "type": "integer", "minimum": 0 }
640
+ "resumeSequence": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
469
641
  },
470
642
  "required": ["envelopes", "resumeSequence"],
471
643
  "additionalProperties": false
644
+ },
645
+ "FrontendDisplayUrl": {
646
+ "type": "string",
647
+ "minLength": 1,
648
+ "maxLength": 2048,
649
+ "format": "uri",
650
+ "pattern": "^https?://",
651
+ "description": "Absolute browser-facing http(s) URL. Userinfo and the case-insensitive query keys bearer, access_token, token, secret, and api_key are forbidden by semantic validation."
652
+ },
653
+ "DeliveryPresentationActor": {
654
+ "type": "object",
655
+ "properties": {
656
+ "displayName": { "type": "string", "minLength": 1, "maxLength": 256 },
657
+ "emoji": { "type": "string", "minLength": 1, "maxLength": 32 }
658
+ },
659
+ "required": ["displayName", "emoji"],
660
+ "additionalProperties": false
661
+ },
662
+ "DeliveryPresentationThread": {
663
+ "type": "object",
664
+ "properties": {
665
+ "shortId": { "type": "string", "minLength": 1, "maxLength": 128 },
666
+ "title": { "type": "string", "minLength": 1, "maxLength": 512 },
667
+ "featId": { "type": "string", "minLength": 1, "maxLength": 128 }
668
+ },
669
+ "required": ["shortId"],
670
+ "additionalProperties": false
671
+ },
672
+ "DeliveryPresentationContext": {
673
+ "type": "object",
674
+ "properties": {
675
+ "actor": { "$ref": "#/$defs/DeliveryPresentationActor" },
676
+ "thread": { "$ref": "#/$defs/DeliveryPresentationThread" },
677
+ "deepLinkUrl": { "$ref": "#/$defs/FrontendDisplayUrl" }
678
+ },
679
+ "required": ["actor", "thread"],
680
+ "additionalProperties": false
681
+ },
682
+ "MediaReadInput": {
683
+ "type": "object",
684
+ "properties": {
685
+ "reference": { "type": "string", "pattern": "^hmr_", "maxLength": 2048 },
686
+ "offset": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
687
+ "limit": { "type": "integer", "minimum": 1, "maximum": 524288 }
688
+ },
689
+ "required": ["reference", "offset", "limit"],
690
+ "additionalProperties": false
691
+ },
692
+ "MediaReadResult": {
693
+ "type": "object",
694
+ "properties": {
695
+ "offset": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
696
+ "dataBase64": { "type": "string", "maxLength": 699052, "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" },
697
+ "nextOffset": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
698
+ "done": { "type": "boolean" }
699
+ },
700
+ "required": ["offset", "dataBase64", "done"],
701
+ "additionalProperties": false,
702
+ "allOf": [
703
+ {
704
+ "if": { "properties": { "done": { "const": false } }, "required": ["done"] },
705
+ "then": {
706
+ "properties": { "dataBase64": { "minLength": 4 } },
707
+ "required": ["nextOffset"]
708
+ }
709
+ },
710
+ { "if": { "properties": { "done": { "const": true } }, "required": ["done"] }, "then": { "not": { "required": ["nextOffset"] } } }
711
+ ]
712
+ },
713
+ "PluginMessageDelivery": {
714
+ "type": "object",
715
+ "properties": {
716
+ "kind": {
717
+ "const": "message"
718
+ },
719
+ "deliveryId": {
720
+ "type": "string",
721
+ "minLength": 1,
722
+ "maxLength": 128
723
+ },
724
+ "threadId": {
725
+ "$ref": "#/$defs/ThreadId"
726
+ },
727
+ "executionId": {
728
+ "type": "string",
729
+ "minLength": 1,
730
+ "maxLength": 128
731
+ },
732
+ "envelope": {
733
+ "$ref": "#/$defs/MessageEnvelope"
734
+ },
735
+ "presentation": {
736
+ "$ref": "#/$defs/DeliveryPresentationContext"
737
+ }
738
+ },
739
+ "required": [
740
+ "kind",
741
+ "deliveryId",
742
+ "threadId",
743
+ "envelope"
744
+ ],
745
+ "additionalProperties": false
746
+ },
747
+ "PluginExecutionStartedDelivery": {
748
+ "type": "object",
749
+ "properties": {
750
+ "deliveryId": {
751
+ "type": "string",
752
+ "minLength": 1,
753
+ "maxLength": 128
754
+ },
755
+ "threadId": {
756
+ "$ref": "#/$defs/ThreadId"
757
+ },
758
+ "state": {
759
+ "const": "started"
760
+ },
761
+ "presentation": {
762
+ "$ref": "#/$defs/DeliveryPresentationContext"
763
+ },
764
+ "placeholderLine": {
765
+ "type": "string",
766
+ "minLength": 1,
767
+ "maxLength": 256
768
+ },
769
+ "replyTo": {
770
+ "$ref": "#/$defs/MessageId"
771
+ },
772
+ "executionId": {
773
+ "type": "string",
774
+ "minLength": 1,
775
+ "maxLength": 128
776
+ },
777
+ "kind": {
778
+ "const": "execution_status"
779
+ }
780
+ },
781
+ "required": [
782
+ "executionId",
783
+ "deliveryId",
784
+ "threadId",
785
+ "state",
786
+ "presentation",
787
+ "kind"
788
+ ],
789
+ "additionalProperties": false
790
+ },
791
+ "PluginExecutionCatchingUpDelivery": {
792
+ "type": "object",
793
+ "properties": {
794
+ "deliveryId": {
795
+ "type": "string",
796
+ "minLength": 1,
797
+ "maxLength": 128
798
+ },
799
+ "threadId": {
800
+ "$ref": "#/$defs/ThreadId"
801
+ },
802
+ "state": {
803
+ "const": "catching_up"
804
+ },
805
+ "executionId": {
806
+ "type": "string",
807
+ "minLength": 1,
808
+ "maxLength": 128
809
+ },
810
+ "kind": {
811
+ "const": "execution_status"
812
+ }
813
+ },
814
+ "required": [
815
+ "executionId",
816
+ "deliveryId",
817
+ "threadId",
818
+ "state",
819
+ "kind"
820
+ ],
821
+ "additionalProperties": false
822
+ },
823
+ "PluginExecutionBlockedDelivery": {
824
+ "type": "object",
825
+ "properties": {
826
+ "deliveryId": {
827
+ "type": "string",
828
+ "minLength": 1,
829
+ "maxLength": 128
830
+ },
831
+ "threadId": {
832
+ "$ref": "#/$defs/ThreadId"
833
+ },
834
+ "state": {
835
+ "const": "blocked"
836
+ },
837
+ "reason": {
838
+ "type": "string",
839
+ "minLength": 1,
840
+ "maxLength": 512
841
+ },
842
+ "recoveryUrl": {
843
+ "$ref": "#/$defs/FrontendDisplayUrl"
844
+ },
845
+ "executionId": {
846
+ "type": "string",
847
+ "minLength": 1,
848
+ "maxLength": 128
849
+ },
850
+ "kind": {
851
+ "const": "execution_status"
852
+ }
853
+ },
854
+ "required": [
855
+ "executionId",
856
+ "deliveryId",
857
+ "threadId",
858
+ "state",
859
+ "reason",
860
+ "kind"
861
+ ],
862
+ "additionalProperties": false
863
+ },
864
+ "PluginExecutionResumedDelivery": {
865
+ "type": "object",
866
+ "properties": {
867
+ "deliveryId": {
868
+ "type": "string",
869
+ "minLength": 1,
870
+ "maxLength": 128
871
+ },
872
+ "threadId": {
873
+ "$ref": "#/$defs/ThreadId"
874
+ },
875
+ "state": {
876
+ "const": "resumed"
877
+ },
878
+ "executionId": {
879
+ "type": "string",
880
+ "minLength": 1,
881
+ "maxLength": 128
882
+ },
883
+ "kind": {
884
+ "const": "execution_status"
885
+ }
886
+ },
887
+ "required": [
888
+ "executionId",
889
+ "deliveryId",
890
+ "threadId",
891
+ "state",
892
+ "kind"
893
+ ],
894
+ "additionalProperties": false
895
+ },
896
+ "PluginExecutionSettledDelivery": {
897
+ "type": "object",
898
+ "properties": {
899
+ "deliveryId": {
900
+ "type": "string",
901
+ "minLength": 1,
902
+ "maxLength": 128
903
+ },
904
+ "threadId": {
905
+ "$ref": "#/$defs/ThreadId"
906
+ },
907
+ "state": {
908
+ "const": "settled"
909
+ },
910
+ "chainDone": {
911
+ "type": "boolean"
912
+ },
913
+ "outcome": {
914
+ "type": "string",
915
+ "enum": [
916
+ "completed",
917
+ "failed",
918
+ "cancelled"
919
+ ]
920
+ },
921
+ "executionId": {
922
+ "type": "string",
923
+ "minLength": 1,
924
+ "maxLength": 128
925
+ },
926
+ "kind": {
927
+ "const": "execution_status"
928
+ }
929
+ },
930
+ "required": [
931
+ "executionId",
932
+ "deliveryId",
933
+ "threadId",
934
+ "state",
935
+ "chainDone",
936
+ "outcome",
937
+ "kind"
938
+ ],
939
+ "additionalProperties": false
940
+ },
941
+ "PluginExecutionStatusDelivery": {
942
+ "oneOf": [
943
+ {
944
+ "$ref": "#/$defs/PluginExecutionStartedDelivery"
945
+ },
946
+ {
947
+ "$ref": "#/$defs/PluginExecutionCatchingUpDelivery"
948
+ },
949
+ {
950
+ "$ref": "#/$defs/PluginExecutionBlockedDelivery"
951
+ },
952
+ {
953
+ "$ref": "#/$defs/PluginExecutionResumedDelivery"
954
+ },
955
+ {
956
+ "$ref": "#/$defs/PluginExecutionSettledDelivery"
957
+ }
958
+ ]
959
+ },
960
+ "PluginDeliveryInput": {
961
+ "oneOf": [
962
+ {
963
+ "$ref": "#/$defs/PluginMessageDelivery"
964
+ },
965
+ {
966
+ "$ref": "#/$defs/PluginExecutionStatusDelivery"
967
+ }
968
+ ]
969
+ },
970
+ "PluginDeliveryReceipt": {
971
+ "type": "object",
972
+ "properties": {
973
+ "deliveryId": {
974
+ "type": "string",
975
+ "minLength": 1,
976
+ "maxLength": 128
977
+ }
978
+ },
979
+ "required": [
980
+ "deliveryId"
981
+ ],
982
+ "additionalProperties": false
983
+ },
984
+
985
+
986
+
987
+
988
+
989
+
990
+ "M0CSubscribeInput": {
991
+ "type": "object",
992
+ "properties": {
993
+ "handle": { "type": "string", "minLength": 1, "maxLength": 256 }
994
+ },
995
+ "required": ["handle"],
996
+ "additionalProperties": false
997
+ },
998
+ "M0CSubscribeResult": {
999
+ "type": "object",
1000
+ "properties": {
1001
+ "subscriptionId": { "type": "string", "minLength": 1, "maxLength": 128 }
1002
+ },
1003
+ "required": ["subscriptionId"],
1004
+ "additionalProperties": false
1005
+ },
1006
+ "M0CReadInput": {
1007
+ "type": "object",
1008
+ "properties": {
1009
+ "subscriptionId": { "type": "string", "minLength": 1, "maxLength": 128 },
1010
+ "limit": { "type": "integer", "minimum": 1, "maximum": 32 }
1011
+ },
1012
+ "required": ["subscriptionId", "limit"],
1013
+ "additionalProperties": false
1014
+ },
1015
+ "M0CReadNormalResult": {
1016
+ "type": "object",
1017
+ "properties": {
1018
+ "events": {
1019
+ "type": "array",
1020
+ "items": { "$ref": "#/$defs/MessageOutputEvent" },
1021
+ "minItems": 1,
1022
+ "maxItems": 32
1023
+ },
1024
+ "ackToken": { "type": "string", "minLength": 1, "maxLength": 512 },
1025
+ "stale": { "const": false }
1026
+ },
1027
+ "required": ["events", "ackToken", "stale"],
1028
+ "additionalProperties": false
1029
+ },
1030
+ "M0CReadEmptyResult": {
1031
+ "type": "object",
1032
+ "properties": {
1033
+ "events": {
1034
+ "type": "array",
1035
+ "items": { "$ref": "#/$defs/MessageOutputEvent" },
1036
+ "minItems": 0,
1037
+ "maxItems": 0
1038
+ },
1039
+ "ackToken": { "type": "null" },
1040
+ "stale": { "const": false }
1041
+ },
1042
+ "required": ["events", "ackToken", "stale"],
1043
+ "additionalProperties": false
1044
+ },
1045
+ "M0CReadStaleResult": {
1046
+ "type": "object",
1047
+ "properties": {
1048
+ "events": {
1049
+ "type": "array",
1050
+ "items": { "$ref": "#/$defs/MessageOutputEvent" },
1051
+ "minItems": 0,
1052
+ "maxItems": 0
1053
+ },
1054
+ "ackToken": { "type": "null" },
1055
+ "stale": { "const": true }
1056
+ },
1057
+ "required": ["events", "ackToken", "stale"],
1058
+ "additionalProperties": false
1059
+ },
1060
+ "M0CReadResult": {
1061
+ "oneOf": [
1062
+ { "$ref": "#/$defs/M0CReadNormalResult" },
1063
+ { "$ref": "#/$defs/M0CReadEmptyResult" },
1064
+ { "$ref": "#/$defs/M0CReadStaleResult" }
1065
+ ]
1066
+ },
1067
+ "M0CAckInput": {
1068
+ "type": "object",
1069
+ "properties": {
1070
+ "subscriptionId": { "type": "string", "minLength": 1, "maxLength": 128 },
1071
+ "ackToken": { "type": "string", "minLength": 1, "maxLength": 512 }
1072
+ },
1073
+ "required": ["subscriptionId", "ackToken"],
1074
+ "additionalProperties": false
1075
+ },
1076
+ "M0CAckResult": {
1077
+ "type": "null"
1078
+ },
1079
+ "M0CSnapshotInput": {
1080
+ "type": "object",
1081
+ "properties": {
1082
+ "subscriptionId": { "type": "string", "minLength": 1, "maxLength": 128 },
1083
+ "maxItems": { "type": "integer", "minimum": 1, "maximum": 64 },
1084
+ "pageToken": { "type": "string", "minLength": 1, "maxLength": 512 }
1085
+ },
1086
+ "required": ["subscriptionId", "maxItems"],
1087
+ "additionalProperties": false
1088
+ },
1089
+ "M0CSnapshotIntermediateResult": {
1090
+ "type": "object",
1091
+ "properties": {
1092
+ "items": {
1093
+ "type": "array",
1094
+ "items": { "$ref": "#/$defs/MessageEnvelope" },
1095
+ "minItems": 1,
1096
+ "maxItems": 64
1097
+ },
1098
+ "nextPageToken": { "type": "string", "minLength": 1, "maxLength": 512 },
1099
+ "snapshotAckToken": { "type": "null" }
1100
+ },
1101
+ "required": ["items", "nextPageToken", "snapshotAckToken"],
1102
+ "additionalProperties": false
1103
+ },
1104
+ "M0CSnapshotFinalResult": {
1105
+ "type": "object",
1106
+ "properties": {
1107
+ "items": {
1108
+ "type": "array",
1109
+ "items": { "$ref": "#/$defs/MessageEnvelope" },
1110
+ "maxItems": 64
1111
+ },
1112
+ "nextPageToken": { "type": "null" },
1113
+ "snapshotAckToken": { "type": "string", "minLength": 1, "maxLength": 512 }
1114
+ },
1115
+ "required": ["items", "nextPageToken", "snapshotAckToken"],
1116
+ "additionalProperties": false
1117
+ },
1118
+ "M0CSnapshotResult": {
1119
+ "oneOf": [
1120
+ { "$ref": "#/$defs/M0CSnapshotIntermediateResult" },
1121
+ { "$ref": "#/$defs/M0CSnapshotFinalResult" }
1122
+ ]
472
1123
  }
473
1124
  }
474
1125
  }