@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
@@ -2,14 +2,14 @@
2
2
  * Per-row input/result shapes for the 13-row method registry.
3
3
  * Mechanized from #1165 frozen shape.
4
4
  *
5
- * CLOSED rows (1, 2, 5, 7, 10, 11, 12): full executable shapes with bounds.
6
- * RESERVED rows (3, 4, 6, 8, 9): type stubs only — no executable
7
- * contract may be exported until the row's matrix entries close.
5
+ * Every row has a closed executable target shape. Rows 3–9 are exposed for
6
+ * the beta.11 M0-C slice; registry readiness still depends on the exact
7
+ * source-admission and byte-proof evidence tracked by that slice.
8
8
  *
9
9
  * Each closed row's shape is additionalProperties: false.
10
10
  * Bounds constants are provided for runtime validation.
11
11
  */
12
- import type { GrantSnapshot } from './grants.js';
12
+ import type { AppendElementsRequest, AppendReceipt, M0CAckInput, M0CAckResult, PluginDeliveryInput, PluginDeliveryReceipt, M0CReadEmptyResult, M0CReadInput, M0CReadNormalResult, M0CReadResult, M0CReadStaleResult, M0CSnapshotFinalResult, M0CSnapshotInput, M0CSnapshotIntermediateResult, M0CSnapshotResult, M0CSubscribeInput, M0CSubscribeResult, MediaReadInput as GeneratedMediaReadInput, MediaReadResult as GeneratedMediaReadResult, MessageDraft, SendReceipt } from '../generated/contract.generated.js';
13
13
  import type { BrokerReadyParams, CandidateHello, SessionBinding } from './handshake.js';
14
14
  /**
15
15
  * Row 5 input: subscribe to a handle for event delivery.
@@ -18,18 +18,12 @@ import type { BrokerReadyParams, CandidateHello, SessionBinding } from './handsh
18
18
  * The handle is a reference identifier (1..256 code points, M4 CLOSED).
19
19
  * The peer responds with a subscriptionId for subsequent read/ack calls.
20
20
  */
21
- export interface SubscribeInput {
22
- /** M4 CLOSED — 1..256 code points. */
23
- readonly handle: string;
24
- }
21
+ export type SubscribeInput = M0CSubscribeInput;
25
22
  /**
26
23
  * Row 5 result: the created subscription identifier.
27
24
  * Wire shape: `{ subscriptionId: string }` — additionalProperties: false.
28
25
  */
29
- export interface SubscribeResult {
30
- /** M4 CLOSED — 1..128 code points. */
31
- readonly subscriptionId: string;
32
- }
26
+ export type SubscribeResult = M0CSubscribeResult;
33
27
  /** Minimum code-point length for subscribe handle. */
34
28
  export declare const SUBSCRIBE_HANDLE_MIN_LENGTH: 1;
35
29
  /** Maximum code-point length for subscribe handle. */
@@ -55,17 +49,12 @@ export declare const SUBSCRIBE_SUBSCRIPTION_ID_MAX_ENCODED_BYTES: 770;
55
49
  *
56
50
  * Closed shape per R3 addendum (owner-specified).
57
51
  */
58
- export interface MessagingAckRequest {
59
- /** M4 CLOSED — 1..128 code points. */
60
- readonly subscriptionId: string;
61
- /** M4 CLOSED — 1..512 code points. */
62
- readonly ackToken: string;
63
- }
52
+ export type MessagingAckRequest = M0CAckInput;
64
53
  /**
65
54
  * Row 7 result: null.
66
55
  * Ack is fire-and-confirm — a null result signals success.
67
56
  */
68
- export type MessagingAckResult = null;
57
+ export type MessagingAckResult = M0CAckResult;
69
58
  /** Minimum code-point length for ack subscriptionId. */
70
59
  export declare const ACK_SUBSCRIPTION_ID_MIN_LENGTH: 1;
71
60
  /** Maximum code-point length for ack subscriptionId. */
@@ -95,7 +84,10 @@ export declare const ACK_TOKEN_MAX_ENCODED_BYTES: 3074;
95
84
  *
96
85
  * additionalProperties: false. CLOSED.
97
86
  */
98
- export type GrantsChangedInput = GrantSnapshot;
87
+ /**
88
+ * Runtime key set mirror of {@link GrantsChangedInput} (= GrantSnapshot).
89
+ * additionalProperties: false — { grantRevision, effectiveGrants }.
90
+ */
99
91
  export type { GrantSnapshot } from './grants.js';
100
92
  /**
101
93
  * Row 11 input: liveness ping carrying a nonce.
@@ -107,6 +99,11 @@ export interface PingInput {
107
99
  /** M4 CLOSED — string 1..512 code points. */
108
100
  readonly nonce: string;
109
101
  }
102
+ /**
103
+ * Runtime key set mirror of the {@link PingInput} interface.
104
+ * additionalProperties: false — { nonce }.
105
+ */
106
+ export declare const PING_INPUT_KEYS: ReadonlySet<string>;
110
107
  /**
111
108
  * Row 11 result: echo of the input nonce.
112
109
  * Wire shape: `{ nonce: string }` — additionalProperties: false.
@@ -117,6 +114,11 @@ export interface PingResult {
117
114
  /** Byte-equal echo of the input nonce. */
118
115
  readonly nonce: string;
119
116
  }
117
+ /**
118
+ * Runtime key set mirror of the {@link PingResult} interface.
119
+ * additionalProperties: false — { nonce }.
120
+ */
121
+ export declare const PING_RESULT_KEYS: ReadonlySet<string>;
120
122
  /** Minimum code-point length for ping nonce. */
121
123
  export declare const PING_NONCE_MIN_LENGTH: 1;
122
124
  /** Maximum code-point length for ping nonce. */
@@ -137,19 +139,15 @@ export declare const PING_NONCE_MAX_ENCODED_BYTES: 3074;
137
139
  *
138
140
  * W2 covers "row 12 `params.input.deadlineUnixMs`".
139
141
  */
140
- export interface DrainInput {
141
- /**
142
- * Drain-specific deadline.
143
- * WireUInt53(1, 9_007_199_254_740_991) — same profile as CallMeta.
144
- */
145
- readonly deadlineUnixMs: number;
146
- }
142
+ /**
143
+ * Runtime key set mirror of the {@link DrainInput} interface.
144
+ * additionalProperties: false — { deadlineUnixMs }.
145
+ */
147
146
  /**
148
147
  * Row 12 result: null.
149
148
  * Drain is fire-and-confirm — a null result signals the plugin
150
149
  * has completed its graceful shutdown sequence.
151
150
  */
152
- export type DrainResult = null;
153
151
  /**
154
152
  * Row 1 — broker.hello: CLOSED in beta.8.
155
153
  *
@@ -168,45 +166,64 @@ export type HelloResult = SessionBinding;
168
166
  export type ReadyInput = BrokerReadyParams;
169
167
  export type ReadyResult = null;
170
168
  /**
171
- * Row 3 — messaging.send: RESERVED (M1/M2/M5/I1).
172
- *
173
- * Plugin → Host message send. The domain types (MessageDraft,
174
- * SendReceipt) exist in the generated contract types, but the wire
175
- * input/result shapes remain reserved until the row's matrix entries close.
176
- */
177
- export type SendInput = never;
178
- export type SendResult = never;
179
- /**
180
- * Row 4 — messaging.appendElements: RESERVED (M1/M2/M5/I1).
181
- *
182
- * Plugin → Host element append. The domain types exist in the
183
- * generated contract types, but the wire input/result shapes remain
184
- * reserved until the row's matrix entries close.
185
- */
186
- export type AppendInput = never;
187
- export type AppendResult = never;
188
- /**
189
- * Row 6 — messaging.read: RESERVED (M1/M2/M3/M4/M5/M6/M7/I1).
190
- *
191
- * Plugin → Host subscription read. The wire input/result shapes
192
- * remain reserved until the row's matrix entries close.
193
- */
194
- export type ReadInput = never;
195
- export type ReadResult = never;
196
- /**
197
- * Row 8 — messaging.snapshot: RESERVED (M1/M2/M5/M7/I1).
198
- *
199
- * Plugin → Host snapshot request. The wire input/result shapes
200
- * remain reserved until the row's matrix entries close.
201
- */
202
- export type SnapshotInput = never;
203
- export type SnapshotResult = never;
204
- /**
205
- * Row 9 — host.messaging.deliver: RESERVED (M1/M2/M5/M7/I1).
206
- *
207
- * Host → Plugin delivery push. The wire input/result shapes
208
- * remain reserved until the row's matrix entries close.
209
- */
210
- export type DeliverInput = never;
211
- export type DeliverResult = never;
169
+ * Row 3 — messaging.send.
170
+ * Plugin → Host message send using the canonical generated domain types.
171
+ */
172
+ export type SendInput = MessageDraft;
173
+ export type SendResult = SendReceipt;
174
+ /**
175
+ * Row 4 — messaging.appendElements.
176
+ * Plugin → Host append with revision-CAS settlement in K-1.
177
+ */
178
+ export type AppendInput = AppendElementsRequest;
179
+ export type AppendResult = AppendReceipt;
180
+ /**
181
+ * Row 6 request. No page token is exposed: reads resume from the Host-owned
182
+ * acknowledged cursor.
183
+ */
184
+ export type SubscriptionReadPageRequest = M0CReadInput;
185
+ export type SubscriptionNormalPageResponse = M0CReadNormalResult;
186
+ export type SubscriptionEmptyPageResponse = M0CReadEmptyResult;
187
+ export type SubscriptionStalePageResponse = M0CReadStaleResult;
188
+ /** Closed three-variant row-6 result. */
189
+ export type BoundedSubscriptionReadPageResponse = M0CReadResult;
190
+ export type ReadInput = SubscriptionReadPageRequest;
191
+ export type ReadResult = BoundedSubscriptionReadPageResponse;
192
+ export declare const READ_SUBSCRIPTION_ID_MIN_LENGTH: 1;
193
+ export declare const READ_SUBSCRIPTION_ID_MAX_LENGTH: 128;
194
+ export declare const READ_LIMIT_MIN: 1;
195
+ export declare const READ_LIMIT_MAX: 32;
196
+ export declare const READ_ACK_TOKEN_MIN_LENGTH: 1;
197
+ export declare const READ_ACK_TOKEN_MAX_LENGTH: 512;
198
+ /**
199
+ * Row 8 request. An absent pageToken starts an immutable Host view.
200
+ */
201
+ export type SnapshotPageRequest = M0CSnapshotInput;
202
+ export type SnapshotIntermediatePageResponse = M0CSnapshotIntermediateResult;
203
+ export type SnapshotFinalPageResponse = M0CSnapshotFinalResult;
204
+ /** Closed intermediate/final row-8 result. */
205
+ export type SnapshotPageResponse = M0CSnapshotResult;
206
+ export type SnapshotInput = SnapshotPageRequest;
207
+ export type SnapshotResult = SnapshotPageResponse;
208
+ export declare const SNAPSHOT_SUBSCRIPTION_ID_MIN_LENGTH: 1;
209
+ export declare const SNAPSHOT_SUBSCRIPTION_ID_MAX_LENGTH: 128;
210
+ export declare const SNAPSHOT_MAX_ITEMS_MIN: 1;
211
+ export declare const SNAPSHOT_MAX_ITEMS_MAX: 64;
212
+ export declare const SNAPSHOT_PAGE_TOKEN_MIN_LENGTH: 1;
213
+ export declare const SNAPSHOT_PAGE_TOKEN_MAX_LENGTH: 512;
214
+ export declare const SNAPSHOT_ACK_TOKEN_MIN_LENGTH: 1;
215
+ export declare const SNAPSHOT_ACK_TOKEN_MAX_LENGTH: 512;
216
+ /**
217
+ * Row 9 — Host → Plugin callback request and byte-equal acknowledgement.
218
+ */
219
+ export type HostMessagingDeliverRequest = PluginDeliveryInput;
220
+ export type HostMessagingDeliverResult = PluginDeliveryReceipt;
221
+ export type DeliverInput = HostMessagingDeliverRequest;
222
+ export type DeliverResult = HostMessagingDeliverResult;
223
+ export declare const DELIVER_DELIVERY_ID_MIN_LENGTH: 1;
224
+ export declare const DELIVER_DELIVERY_ID_MAX_LENGTH: 128;
225
+ /** P1 media byte streaming row. Each result is bounded to one 512 KiB chunk. */
226
+ export type MediaReadInput = GeneratedMediaReadInput;
227
+ export type MediaReadResult = GeneratedMediaReadResult;
228
+ export declare const MEDIA_READ_CHUNK_MAX_BYTES: 524288;
212
229
  //# sourceMappingURL=row-shapes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"row-shapes.d.ts","sourceRoot":"","sources":["../../src/wire/row-shapes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"row-shapes.d.ts","sourceRoot":"","sources":["../../src/wire/row-shapes.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,9 @@
2
2
  * Per-row input/result shapes for the 13-row method registry.
3
3
  * Mechanized from #1165 frozen shape.
4
4
  *
5
- * CLOSED rows (1, 2, 5, 7, 10, 11, 12): full executable shapes with bounds.
6
- * RESERVED rows (3, 4, 6, 8, 9): type stubs only — no executable
7
- * contract may be exported until the row's matrix entries close.
5
+ * Every row has a closed executable target shape. Rows 3–9 are exposed for
6
+ * the beta.11 M0-C slice; registry readiness still depends on the exact
7
+ * source-admission and byte-proof evidence tracked by that slice.
8
8
  *
9
9
  * Each closed row's shape is additionalProperties: false.
10
10
  * Bounds constants are provided for runtime validation.
@@ -46,6 +46,16 @@ export const ACK_TOKEN_MAX_LENGTH = 512;
46
46
  * 6 * 512 + 2 quotes = 3074 bytes.
47
47
  */
48
48
  export const ACK_TOKEN_MAX_ENCODED_BYTES = 3074;
49
+ /**
50
+ * Runtime key set mirror of the {@link PingInput} interface.
51
+ * additionalProperties: false — { nonce }.
52
+ */
53
+ export const PING_INPUT_KEYS = new Set(['nonce']);
54
+ /**
55
+ * Runtime key set mirror of the {@link PingResult} interface.
56
+ * additionalProperties: false — { nonce }.
57
+ */
58
+ export const PING_RESULT_KEYS = new Set(['nonce']);
49
59
  /** Minimum code-point length for ping nonce. */
50
60
  export const PING_NONCE_MIN_LENGTH = 1;
51
61
  /** Maximum code-point length for ping nonce. */
@@ -56,4 +66,21 @@ export const PING_NONCE_MAX_LENGTH = 512;
56
66
  * 6 * 512 + 2 quotes = 3074 bytes.
57
67
  */
58
68
  export const PING_NONCE_MAX_ENCODED_BYTES = 3074;
69
+ export const READ_SUBSCRIPTION_ID_MIN_LENGTH = 1;
70
+ export const READ_SUBSCRIPTION_ID_MAX_LENGTH = 128;
71
+ export const READ_LIMIT_MIN = 1;
72
+ export const READ_LIMIT_MAX = 32;
73
+ export const READ_ACK_TOKEN_MIN_LENGTH = 1;
74
+ export const READ_ACK_TOKEN_MAX_LENGTH = 512;
75
+ export const SNAPSHOT_SUBSCRIPTION_ID_MIN_LENGTH = 1;
76
+ export const SNAPSHOT_SUBSCRIPTION_ID_MAX_LENGTH = 128;
77
+ export const SNAPSHOT_MAX_ITEMS_MIN = 1;
78
+ export const SNAPSHOT_MAX_ITEMS_MAX = 64;
79
+ export const SNAPSHOT_PAGE_TOKEN_MIN_LENGTH = 1;
80
+ export const SNAPSHOT_PAGE_TOKEN_MAX_LENGTH = 512;
81
+ export const SNAPSHOT_ACK_TOKEN_MIN_LENGTH = 1;
82
+ export const SNAPSHOT_ACK_TOKEN_MAX_LENGTH = 512;
83
+ export const DELIVER_DELIVERY_ID_MIN_LENGTH = 1;
84
+ export const DELIVER_DELIVERY_ID_MAX_LENGTH = 128;
85
+ export const MEDIA_READ_CHUNK_MAX_BYTES = 524_288;
59
86
  //# sourceMappingURL=row-shapes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"row-shapes.js","sourceRoot":"","sources":["../../src/wire/row-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmCH,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAU,CAAC;AAEtD,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAY,CAAC;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAa,CAAC;AAEhE,oDAAoD;AACpD,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAU,CAAC;AAE/D,oDAAoD;AACpD,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAY,CAAC;AAEjE;;;GAGG;AACH,MAAM,CAAC,MAAM,2CAA2C,GAAG,GAAY,CAAC;AAyBxE,wDAAwD;AACxD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAU,CAAC;AAEzD,wDAAwD;AACxD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAY,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAY,CAAC;AAElE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC;AAE/C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAY,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAa,CAAC;AAiDzD,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAU,CAAC;AAEhD,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAY,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAa,CAAC"}
1
+ {"version":3,"file":"row-shapes.js","sourceRoot":"","sources":["../../src/wire/row-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoDH,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAU,CAAC;AAEtD,sDAAsD;AACtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAY,CAAC;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAa,CAAC;AAEhE,oDAAoD;AACpD,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAAU,CAAC;AAE/D,oDAAoD;AACpD,MAAM,CAAC,MAAM,oCAAoC,GAAG,GAAY,CAAC;AAEjE;;;GAGG;AACH,MAAM,CAAC,MAAM,2CAA2C,GAAG,GAAY,CAAC;AAoBxE,wDAAwD;AACxD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAU,CAAC;AAEzD,wDAAwD;AACxD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAY,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAY,CAAC;AAElE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC;AAE/C,8CAA8C;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAY,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAa,CAAC;AA4CzD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAavE;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAExE,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAU,CAAC;AAEhD,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAY,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAa,CAAC;AAqG1D,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAU,CAAC;AAC1D,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAY,CAAC;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAU,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,EAAW,CAAC;AAC1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAU,CAAC;AACpD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAY,CAAC;AAiBtD,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAU,CAAC;AAC9D,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAY,CAAC;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAW,CAAC;AAClD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAU,CAAC;AACzD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAY,CAAC;AAC3D,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAU,CAAC;AACxD,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAY,CAAC;AAY1D,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAU,CAAC;AACzD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAY,CAAC;AAK3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAgB,CAAC"}
@@ -10,6 +10,11 @@
10
10
  {
11
11
  "id": "raw-thread-id-rejection",
12
12
  "invariant": "Plugins cannot address threads by raw threadId.",
13
+ "execution": {
14
+ "plane": "wire-admission",
15
+ "method": "messaging.send",
16
+ "verdictOracle": { "kind": "json-rpc-error", "code": -32602, "sideEffects": "behavior-expectation" }
17
+ },
13
18
  "given": {
14
19
  "caller": { "pluginInstanceId": "plugin-a" },
15
20
  "grants": ["messaging.send"],
@@ -40,6 +45,11 @@
40
45
  {
41
46
  "id": "system-audience-dual-rejection",
42
47
  "invariant": "Drafts cannot express the host-only system audience.",
48
+ "execution": {
49
+ "plane": "wire-admission",
50
+ "method": "messaging.send",
51
+ "verdictOracle": { "kind": "json-rpc-error", "code": -32602, "sideEffects": "behavior-expectation" }
52
+ },
43
53
  "given": {
44
54
  "caller": { "pluginInstanceId": "plugin-a" },
45
55
  "grants": ["messaging.send"],
@@ -73,6 +83,11 @@
73
83
  {
74
84
  "id": "cross-instance-handle-rejection",
75
85
  "invariant": "A message handle issued to one plugin instance cannot authorize another.",
86
+ "execution": {
87
+ "plane": "plugin-to-host-wire",
88
+ "method": "messaging.appendElements",
89
+ "verdictOracle": { "kind": "behavior-expectation" }
90
+ },
76
91
  "given": {
77
92
  "caller": { "pluginInstanceId": "plugin-a" },
78
93
  "grants": ["messaging.appendElements"],
@@ -103,6 +118,11 @@
103
118
  {
104
119
  "id": "origin-forgery-rejection",
105
120
  "invariant": "A thread-handle send may only declare the caller's own plugin origin.",
121
+ "execution": {
122
+ "plane": "plugin-to-host-wire",
123
+ "method": "messaging.send",
124
+ "verdictOracle": { "kind": "behavior-expectation" }
125
+ },
106
126
  "given": {
107
127
  "caller": { "pluginInstanceId": "plugin-a" },
108
128
  "grants": ["messaging.send"],
@@ -135,6 +155,11 @@
135
155
  {
136
156
  "id": "base-revision-conflict-zero-change",
137
157
  "invariant": "A stale baseRevision produces CONFLICT and no mutation.",
158
+ "execution": {
159
+ "plane": "plugin-to-host-wire",
160
+ "method": "messaging.appendElements",
161
+ "verdictOracle": { "kind": "behavior-expectation" }
162
+ },
138
163
  "given": {
139
164
  "caller": { "pluginInstanceId": "plugin-a" },
140
165
  "grants": ["messaging.appendElements"],
@@ -165,6 +190,11 @@
165
190
  {
166
191
  "id": "stale-cursor-snapshot-roundtrip",
167
192
  "invariant": "A stale cursor reports stale and snapshot catch-up supplies an exact resume point.",
193
+ "execution": {
194
+ "plane": "plugin-to-host-wire",
195
+ "method": "messaging.read",
196
+ "verdictOracle": { "kind": "behavior-expectation" }
197
+ },
168
198
  "given": {
169
199
  "caller": { "pluginInstanceId": "plugin-a" },
170
200
  "grants": ["message.event.subscribe"],
@@ -189,6 +219,11 @@
189
219
  {
190
220
  "id": "cross-subscription-ack-rejection",
191
221
  "invariant": "Ack tokens are subscription-local and cannot cross subscriptions.",
222
+ "execution": {
223
+ "plane": "plugin-to-host-wire",
224
+ "method": "messaging.ack",
225
+ "verdictOracle": { "kind": "behavior-expectation" }
226
+ },
192
227
  "given": {
193
228
  "caller": { "pluginInstanceId": "plugin-a" },
194
229
  "grants": ["message.event.subscribe"],
@@ -214,6 +249,11 @@
214
249
  {
215
250
  "id": "reply-to-cross-thread-leakage",
216
251
  "invariant": "replyTo cannot reference a message from another thread.",
252
+ "execution": {
253
+ "plane": "plugin-to-host-wire",
254
+ "method": "messaging.send",
255
+ "verdictOracle": { "kind": "behavior-expectation" }
256
+ },
217
257
  "given": {
218
258
  "caller": { "pluginInstanceId": "plugin-a" },
219
259
  "grants": ["messaging.send"],
@@ -247,6 +287,11 @@
247
287
  {
248
288
  "id": "epistemic-status-upgrade-rejection",
249
289
  "invariant": "Derived content cannot claim a stronger epistemic status than its source.",
290
+ "execution": {
291
+ "plane": "plugin-to-host-wire",
292
+ "method": "messaging.appendElements",
293
+ "verdictOracle": { "kind": "behavior-expectation" }
294
+ },
250
295
  "given": {
251
296
  "caller": { "pluginInstanceId": "plugin-a" },
252
297
  "grants": ["messaging.appendElements"],
@@ -277,6 +322,10 @@
277
322
  {
278
323
  "id": "preset-l2-rejected",
279
324
  "invariant": "First-party presets are derived from L1 and cannot silently grant L2 capabilities.",
325
+ "execution": {
326
+ "plane": "host-control",
327
+ "verdictOracle": { "kind": "behavior-expectation" }
328
+ },
280
329
  "given": {
281
330
  "caller": { "pluginInstanceId": "first-party-plugin" },
282
331
  "grants": ["messaging.send"],
@@ -298,6 +347,10 @@
298
347
  {
299
348
  "id": "preset-visible-revocable",
300
349
  "invariant": "A first-party L1 preset remains visible and independently revocable.",
350
+ "execution": {
351
+ "plane": "host-control",
352
+ "verdictOracle": { "kind": "behavior-expectation" }
353
+ },
301
354
  "given": {
302
355
  "caller": { "pluginInstanceId": "first-party-plugin" },
303
356
  "grants": ["messaging.send"],
@@ -318,6 +371,11 @@
318
371
  {
319
372
  "id": "whisper-target-beyond-default-empty-grant-rejected",
320
373
  "invariant": "The default whisper target grant is empty; messaging.send alone cannot add a target.",
374
+ "execution": {
375
+ "plane": "plugin-to-host-wire",
376
+ "method": "messaging.send",
377
+ "verdictOracle": { "kind": "behavior-expectation" }
378
+ },
321
379
  "given": {
322
380
  "caller": { "pluginInstanceId": "plugin-a" },
323
381
  "grants": ["messaging.send"],
@@ -351,6 +409,11 @@
351
409
  {
352
410
  "id": "append-without-grant-rejected",
353
411
  "invariant": "A valid message handle does not bypass the messaging.appendElements grant.",
412
+ "execution": {
413
+ "plane": "plugin-to-host-wire",
414
+ "method": "messaging.appendElements",
415
+ "verdictOracle": { "kind": "behavior-expectation" }
416
+ },
354
417
  "given": {
355
418
  "caller": { "pluginInstanceId": "plugin-a" },
356
419
  "grants": [],
@@ -381,6 +444,11 @@
381
444
  {
382
445
  "id": "denied-on-message-rejected",
383
446
  "invariant": "The Host cannot deliver an onMessage envelope without an explicit scoped L2 grant.",
447
+ "execution": {
448
+ "plane": "host-to-plugin-delivery",
449
+ "method": "host.messaging.deliver",
450
+ "verdictOracle": { "kind": "behavior-expectation" }
451
+ },
384
452
  "given": {
385
453
  "caller": { "pluginInstanceId": "plugin-a" },
386
454
  "grants": [],
@@ -408,6 +476,10 @@
408
476
  {
409
477
  "id": "permission-matrix-complete",
410
478
  "invariant": "The loopback policy matrix covers every signed capability and presets only L1 for first-party plugins.",
479
+ "execution": {
480
+ "plane": "host-control",
481
+ "verdictOracle": { "kind": "behavior-expectation" }
482
+ },
411
483
  "given": {
412
484
  "caller": { "pluginInstanceId": "policy-auditor" },
413
485
  "grants": [],
@@ -423,18 +495,23 @@
423
495
  { "capability": "plugin.state.set", "layer": "L0", "firstPartyPreset": false },
424
496
  { "capability": "messaging.send", "layer": "L1", "firstPartyPreset": true },
425
497
  { "capability": "schedule.register", "layer": "L1", "firstPartyPreset": true },
426
- { "capability": "events.publish", "layer": "L1", "firstPartyPreset": true },
427
498
  { "capability": "messaging.appendElements", "layer": "L1", "firstPartyPreset": true },
499
+ { "capability": "streams.read", "layer": "L1", "firstPartyPreset": true },
428
500
  { "capability": "onMessage", "layer": "L2", "firstPartyPreset": false },
429
501
  { "capability": "message.event.subscribe", "layer": "L2", "firstPartyPreset": false },
430
502
  { "capability": "secret.read", "layer": "L2", "firstPartyPreset": false },
431
503
  { "capability": "thread.listMetadata", "layer": "L2", "firstPartyPreset": false },
432
504
  { "capability": "thread.readContent", "layer": "L2", "firstPartyPreset": false },
505
+ { "capability": "thread.write", "layer": "L2", "firstPartyPreset": false },
506
+ { "capability": "task.read", "layer": "L2", "firstPartyPreset": false },
507
+ { "capability": "task.write", "layer": "L2", "firstPartyPreset": false },
508
+ { "capability": "task.admitEntrusted", "layer": "L2", "firstPartyPreset": false },
433
509
  { "capability": "memory.query", "layer": "L2", "firstPartyPreset": false },
434
510
  { "capability": "memory.append", "layer": "L2", "firstPartyPreset": false },
435
511
  { "capability": "memory.retrieve", "layer": "L2", "firstPartyPreset": false },
436
512
  { "capability": "windows.create", "layer": "L2", "firstPartyPreset": false },
437
- { "capability": "whisper.extend", "layer": "L2", "firstPartyPreset": false }
513
+ { "capability": "whisper.extend", "layer": "L2", "firstPartyPreset": false },
514
+ { "capability": "cloud.conversation.host", "layer": "L2", "firstPartyPreset": false }
438
515
  ]
439
516
  }
440
517
  },
@@ -448,6 +525,10 @@
448
525
  {
449
526
  "id": "delete-replay-events-preserves-canonical-messages",
450
527
  "invariant": "Deleting the replay transport buffer cannot delete canonical messages or threads.",
528
+ "execution": {
529
+ "plane": "host-control",
530
+ "verdictOracle": { "kind": "behavior-expectation" }
531
+ },
451
532
  "given": {
452
533
  "caller": { "pluginInstanceId": "host-retention" },
453
534
  "grants": ["message.event.subscribe"],
@@ -474,6 +555,11 @@
474
555
  {
475
556
  "id": "snapshot-without-grant-rejected",
476
557
  "invariant": "A subscription identifier cannot bypass the message.event.subscribe grant for snapshots.",
558
+ "execution": {
559
+ "plane": "wire-admission",
560
+ "method": "messaging.snapshot",
561
+ "verdictOracle": { "kind": "json-rpc-error", "code": -32602, "sideEffects": "behavior-expectation" }
562
+ },
477
563
  "given": {
478
564
  "caller": { "pluginInstanceId": "plugin-a" },
479
565
  "grants": [],
@@ -498,6 +584,10 @@
498
584
  {
499
585
  "id": "foreign-replay-delete-rejected",
500
586
  "invariant": "A caller cannot delete another plugin instance's subscription replay buffer.",
587
+ "execution": {
588
+ "plane": "host-control",
589
+ "verdictOracle": { "kind": "behavior-expectation" }
590
+ },
501
591
  "given": {
502
592
  "caller": { "pluginInstanceId": "plugin-b" },
503
593
  "grants": ["message.event.subscribe"],
@@ -8,7 +8,7 @@
8
8
  "id": "meeting-intake",
9
9
  "name": "Meeting intake",
10
10
  "resources": [],
11
- "capabilities": ["events.publish"]
11
+ "capabilities": []
12
12
  }
13
13
  ],
14
14
  "signals": {
@@ -29,5 +29,7 @@
29
29
  }
30
30
  ]
31
31
  },
32
- "runtime": { "transport": "builtin" }
32
+ "runtime": {
33
+ "transport": "builtin"
34
+ }
33
35
  }
@@ -0,0 +1,22 @@
1
+ {
2
+ "pluginId": "com.example.icon-escape",
3
+ "version": "1.0.0",
4
+ "contractVersion": "0.1.0-beta.13",
5
+ "name": "Icon escape fixture",
6
+ "description": "Legacy description remains accepted.",
7
+ "icon": {
8
+ "type": "svg",
9
+ "src": "../outside.svg"
10
+ },
11
+ "features": [
12
+ {
13
+ "id": "main",
14
+ "name": "Main",
15
+ "resources": [],
16
+ "capabilities": []
17
+ }
18
+ ],
19
+ "runtime": {
20
+ "transport": "builtin"
21
+ }
22
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "pluginId": "com.example.localized-metadata",
3
+ "version": "1.0.0",
4
+ "contractVersion": "0.1.0-beta.13",
5
+ "name": "Localized metadata fixture",
6
+ "description": {
7
+ "default": "Describe this plugin for agents and people.",
8
+ "translations": {
9
+ "zh-CN": "向 Agent 和用户介绍这个插件。"
10
+ }
11
+ },
12
+ "icon": {
13
+ "type": "svg",
14
+ "src": "assets/icon.svg"
15
+ },
16
+ "features": [
17
+ {
18
+ "id": "main",
19
+ "name": "Main",
20
+ "resources": [],
21
+ "capabilities": []
22
+ }
23
+ ],
24
+ "runtime": {
25
+ "transport": "builtin"
26
+ }
27
+ }
@@ -18,7 +18,7 @@
18
18
  "audience": {
19
19
  "kind": "public"
20
20
  },
21
- "occurredAt": "2026-07-15T02:42:00Z",
21
+ "occurredAt": "2026-07-15T02:42:00.000Z",
22
22
  "payload": {
23
23
  "provenance": {
24
24
  "origin": {