@clowder-ai/plugin-contract 0.1.0-beta.2 → 0.1.0-beta.21

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 (183) hide show
  1. package/dist/codegen/generate-contract.d.ts +10 -0
  2. package/dist/codegen/generate-contract.d.ts.map +1 -1
  3. package/dist/codegen/generate-contract.js +201 -19
  4. package/dist/codegen/generate-contract.js.map +1 -1
  5. package/dist/conformance/fixtures.d.ts +11 -0
  6. package/dist/conformance/fixtures.d.ts.map +1 -0
  7. package/dist/conformance/fixtures.js +9 -0
  8. package/dist/conformance/fixtures.js.map +1 -0
  9. package/dist/conformance/index.d.ts +4 -0
  10. package/dist/conformance/index.d.ts.map +1 -1
  11. package/dist/conformance/index.js +3 -0
  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 +22 -2
  19. package/dist/conformance/runner.js.map +1 -1
  20. package/dist/conformance/stdio-harness/child-process-harness.d.ts +65 -0
  21. package/dist/conformance/stdio-harness/child-process-harness.d.ts.map +1 -0
  22. package/dist/conformance/stdio-harness/child-process-harness.js +296 -0
  23. package/dist/conformance/stdio-harness/child-process-harness.js.map +1 -0
  24. package/dist/conformance/stdio-harness/dual-transport-oracle.d.ts +26 -0
  25. package/dist/conformance/stdio-harness/dual-transport-oracle.d.ts.map +1 -0
  26. package/dist/conformance/stdio-harness/dual-transport-oracle.js +32 -0
  27. package/dist/conformance/stdio-harness/dual-transport-oracle.js.map +1 -0
  28. package/dist/conformance/stdio-harness/harness-process-spawn.d.ts +27 -0
  29. package/dist/conformance/stdio-harness/harness-process-spawn.d.ts.map +1 -0
  30. package/dist/conformance/stdio-harness/harness-process-spawn.js +43 -0
  31. package/dist/conformance/stdio-harness/harness-process-spawn.js.map +1 -0
  32. package/dist/conformance/stdio-harness/index.d.ts +5 -0
  33. package/dist/conformance/stdio-harness/index.d.ts.map +1 -0
  34. package/dist/conformance/stdio-harness/index.js +4 -0
  35. package/dist/conformance/stdio-harness/index.js.map +1 -0
  36. package/dist/conformance/stdio-harness/ndjson-frame.d.ts +31 -0
  37. package/dist/conformance/stdio-harness/ndjson-frame.d.ts.map +1 -0
  38. package/dist/conformance/stdio-harness/ndjson-frame.js +125 -0
  39. package/dist/conformance/stdio-harness/ndjson-frame.js.map +1 -0
  40. package/dist/conformance/stdio-harness/node-process-tree-runtime.d.ts +15 -0
  41. package/dist/conformance/stdio-harness/node-process-tree-runtime.d.ts.map +1 -0
  42. package/dist/conformance/stdio-harness/node-process-tree-runtime.js +78 -0
  43. package/dist/conformance/stdio-harness/node-process-tree-runtime.js.map +1 -0
  44. package/dist/conformance/stdio-harness/process-tree-controller.d.ts +51 -0
  45. package/dist/conformance/stdio-harness/process-tree-controller.d.ts.map +1 -0
  46. package/dist/conformance/stdio-harness/process-tree-controller.js +162 -0
  47. package/dist/conformance/stdio-harness/process-tree-controller.js.map +1 -0
  48. package/dist/conformance/stdio-harness/windows-sentinel.d.ts +15 -0
  49. package/dist/conformance/stdio-harness/windows-sentinel.d.ts.map +1 -0
  50. package/dist/conformance/stdio-harness/windows-sentinel.js +160 -0
  51. package/dist/conformance/stdio-harness/windows-sentinel.js.map +1 -0
  52. package/dist/conformance/stdio-harness/wire-shape.d.ts +18 -0
  53. package/dist/conformance/stdio-harness/wire-shape.d.ts.map +1 -0
  54. package/dist/conformance/stdio-harness/wire-shape.js +2 -0
  55. package/dist/conformance/stdio-harness/wire-shape.js.map +1 -0
  56. package/dist/docx-materialization.d.ts +8 -0
  57. package/dist/docx-materialization.d.ts.map +1 -0
  58. package/dist/docx-materialization.js +19 -0
  59. package/dist/docx-materialization.js.map +1 -0
  60. package/dist/generated/contract.generated.d.ts +984 -12
  61. package/dist/generated/contract.generated.d.ts.map +1 -1
  62. package/dist/generated/contract.generated.js +9 -1
  63. package/dist/generated/contract.generated.js.map +1 -1
  64. package/dist/index.d.ts +3 -1
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +5 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/validation/catalog.d.ts +21 -0
  69. package/dist/validation/catalog.d.ts.map +1 -0
  70. package/dist/validation/catalog.js +140 -0
  71. package/dist/validation/catalog.js.map +1 -0
  72. package/dist/validation/companion-bridge.d.ts +6 -0
  73. package/dist/validation/companion-bridge.d.ts.map +1 -0
  74. package/dist/validation/companion-bridge.js +70 -0
  75. package/dist/validation/companion-bridge.js.map +1 -0
  76. package/dist/validation/docx-materialization.d.ts +6 -0
  77. package/dist/validation/docx-materialization.d.ts.map +1 -0
  78. package/dist/validation/docx-materialization.js +36 -0
  79. package/dist/validation/docx-materialization.js.map +1 -0
  80. package/dist/validation/index.d.ts +6 -0
  81. package/dist/validation/index.d.ts.map +1 -1
  82. package/dist/validation/index.js +6 -0
  83. package/dist/validation/index.js.map +1 -1
  84. package/dist/validation/manifest.d.ts +23 -0
  85. package/dist/validation/manifest.d.ts.map +1 -0
  86. package/dist/validation/manifest.js +160 -0
  87. package/dist/validation/manifest.js.map +1 -0
  88. package/dist/validation/messaging-semantic.d.ts.map +1 -1
  89. package/dist/validation/messaging-semantic.js +49 -0
  90. package/dist/validation/messaging-semantic.js.map +1 -1
  91. package/dist/validation/messaging-wire.d.ts +38 -0
  92. package/dist/validation/messaging-wire.d.ts.map +1 -0
  93. package/dist/validation/messaging-wire.js +164 -0
  94. package/dist/validation/messaging-wire.js.map +1 -0
  95. package/dist/validation/signals.d.ts +26 -0
  96. package/dist/validation/signals.d.ts.map +1 -0
  97. package/dist/validation/signals.js +206 -0
  98. package/dist/validation/signals.js.map +1 -0
  99. package/dist/wire/constants.d.ts +36 -0
  100. package/dist/wire/constants.d.ts.map +1 -0
  101. package/dist/wire/constants.js +36 -0
  102. package/dist/wire/constants.js.map +1 -0
  103. package/dist/wire/disposition-fixtures.d.ts +118 -0
  104. package/dist/wire/disposition-fixtures.d.ts.map +1 -0
  105. package/dist/wire/disposition-fixtures.js +1881 -0
  106. package/dist/wire/disposition-fixtures.js.map +1 -0
  107. package/dist/wire/disposition.d.ts +102 -0
  108. package/dist/wire/disposition.d.ts.map +1 -0
  109. package/dist/wire/disposition.js +217 -0
  110. package/dist/wire/disposition.js.map +1 -0
  111. package/dist/wire/envelope.d.ts +253 -0
  112. package/dist/wire/envelope.d.ts.map +1 -0
  113. package/dist/wire/envelope.js +19 -0
  114. package/dist/wire/envelope.js.map +1 -0
  115. package/dist/wire/errors.d.ts +222 -0
  116. package/dist/wire/errors.d.ts.map +1 -0
  117. package/dist/wire/errors.js +153 -0
  118. package/dist/wire/errors.js.map +1 -0
  119. package/dist/wire/grants.d.ts +57 -0
  120. package/dist/wire/grants.d.ts.map +1 -0
  121. package/dist/wire/grants.js +59 -0
  122. package/dist/wire/grants.js.map +1 -0
  123. package/dist/wire/handshake-byte-bounds.d.ts +69 -0
  124. package/dist/wire/handshake-byte-bounds.d.ts.map +1 -0
  125. package/dist/wire/handshake-byte-bounds.js +173 -0
  126. package/dist/wire/handshake-byte-bounds.js.map +1 -0
  127. package/dist/wire/handshake.d.ts +146 -0
  128. package/dist/wire/handshake.d.ts.map +1 -0
  129. package/dist/wire/handshake.js +189 -0
  130. package/dist/wire/handshake.js.map +1 -0
  131. package/dist/wire/index.d.ts +37 -0
  132. package/dist/wire/index.d.ts.map +1 -0
  133. package/dist/wire/index.js +61 -0
  134. package/dist/wire/index.js.map +1 -0
  135. package/dist/wire/lifecycle-byte-bounds.d.ts +55 -0
  136. package/dist/wire/lifecycle-byte-bounds.d.ts.map +1 -0
  137. package/dist/wire/lifecycle-byte-bounds.js +209 -0
  138. package/dist/wire/lifecycle-byte-bounds.js.map +1 -0
  139. package/dist/wire/messaging-byte-bounds.d.ts +61 -0
  140. package/dist/wire/messaging-byte-bounds.d.ts.map +1 -0
  141. package/dist/wire/messaging-byte-bounds.js +459 -0
  142. package/dist/wire/messaging-byte-bounds.js.map +1 -0
  143. package/dist/wire/registry.d.ts +294 -0
  144. package/dist/wire/registry.d.ts.map +1 -0
  145. package/dist/wire/registry.js +256 -0
  146. package/dist/wire/registry.js.map +1 -0
  147. package/dist/wire/request-id.d.ts +34 -0
  148. package/dist/wire/request-id.d.ts.map +1 -0
  149. package/dist/wire/request-id.js +40 -0
  150. package/dist/wire/request-id.js.map +1 -0
  151. package/dist/wire/row-shapes.d.ts +217 -0
  152. package/dist/wire/row-shapes.d.ts.map +1 -0
  153. package/dist/wire/row-shapes.js +75 -0
  154. package/dist/wire/row-shapes.js.map +1 -0
  155. package/dist/wire/signal-byte-bounds.d.ts +97 -0
  156. package/dist/wire/signal-byte-bounds.d.ts.map +1 -0
  157. package/dist/wire/signal-byte-bounds.js +229 -0
  158. package/dist/wire/signal-byte-bounds.js.map +1 -0
  159. package/dist/wire/wire-uint53.d.ts +26 -0
  160. package/dist/wire/wire-uint53.d.ts.map +1 -0
  161. package/dist/wire/wire-uint53.js +32 -0
  162. package/dist/wire/wire-uint53.js.map +1 -0
  163. package/fixtures/behavior/messaging/adversarial-invariants.json +85 -0
  164. package/fixtures/manifest/invalid/duplicate-signal-type.json +33 -0
  165. package/fixtures/manifest/invalid/icon-package-escape.json +22 -0
  166. package/fixtures/manifest/valid/localized-product-metadata.json +27 -0
  167. package/fixtures/messaging/valid/subscription-delivery.json +1 -1
  168. package/fixtures/signals/invalid/destination-injection.json +15 -0
  169. package/fixtures/signals/invalid/dynamic-schema-url.json +10 -0
  170. package/fixtures/signals/invalid/forbidden-raw-privacy.json +10 -0
  171. package/fixtures/signals/invalid/non-utc-occurred-at.json +12 -0
  172. package/fixtures/signals/valid/feishu-meeting-artifact.json +18 -0
  173. package/fixtures/signals/valid/remote-service-declaration.json +10 -0
  174. package/package.json +19 -6
  175. package/src/schemas/behavior-fixture.schema.json +262 -2
  176. package/src/schemas/catalog.schema.json +91 -0
  177. package/src/schemas/companion-bridge.schema.json +1011 -0
  178. package/src/schemas/docx-materialization.schema.json +302 -0
  179. package/src/schemas/manifest.schema.json +490 -4
  180. package/src/schemas/messaging.schema.json +209 -32
  181. package/src/schemas/physical-limb.schema.json +319 -0
  182. package/src/schemas/plugin-metadata.schema.json +62 -0
  183. package/src/schemas/signal.schema.json +129 -0
@@ -1,7 +1,21 @@
1
1
  /**
2
- * Generated from manifest.schema.json, messaging.schema.json, and behavior-fixture.schema.json.
2
+ * Generated from plugin-metadata.schema.json, manifest.schema.json, catalog.schema.json, signal.schema.json, messaging.schema.json, physical-limb.schema.json, docx-materialization.schema.json, and behavior-fixture.schema.json.
3
3
  * Do not edit by hand. Run `pnpm generate` after changing a schema.
4
4
  */
5
+ export type LocalizedDescriptionObject = {
6
+ readonly default: string;
7
+ readonly translations: Readonly<Record<string, string>>;
8
+ };
9
+ export type LocalizedDescription = string | LocalizedDescriptionObject;
10
+ export type PackageAssetPath = string;
11
+ export type PackageIcon = {
12
+ readonly type: 'svg';
13
+ readonly src: PackageAssetPath & `${string}.svg`;
14
+ } | {
15
+ readonly type: 'png';
16
+ readonly src: PackageAssetPath & `${string}.png`;
17
+ };
18
+ export type PluginIcon = 'github' | PackageIcon;
5
19
  export type SemVer = string;
6
20
  export type DataClass = 'cache' | 'ephemeral' | 'user-authored' | 'derived-user-visible' | 'relationship' | 'interaction-history';
7
21
  export type DataStrategy = 'lifecycle' | 'retained' | 'ask-on-uninstall';
@@ -41,17 +55,246 @@ export type ResourceReference = {
41
55
  readonly type: string;
42
56
  readonly id: string;
43
57
  };
58
+ export type ContributionReference = {
59
+ readonly type: 'identity' | 'schedule' | 'tool' | 'mcp' | 'skill' | 'limb' | 'webhook' | 'message-subscription' | 'service' | 'connector' | 'ui' | 'content-editor-provider' | 'desktop-window';
60
+ readonly id: string;
61
+ };
62
+ export type PackageRelativePath = string;
63
+ export type ConfigurationOption = {
64
+ readonly value: string;
65
+ readonly label: string;
66
+ readonly hint?: string;
67
+ readonly docsUrl?: string;
68
+ };
69
+ export type ConfigurationField = {
70
+ readonly key: string;
71
+ readonly label: string;
72
+ readonly description?: string;
73
+ readonly kind: 'string';
74
+ readonly required: boolean;
75
+ readonly default?: string;
76
+ readonly options?: never;
77
+ } | {
78
+ readonly key: string;
79
+ readonly label: string;
80
+ readonly description?: string;
81
+ readonly kind: 'secret';
82
+ readonly required: boolean;
83
+ readonly default?: never;
84
+ readonly options?: never;
85
+ } | {
86
+ readonly key: string;
87
+ readonly label: string;
88
+ readonly description?: string;
89
+ readonly kind: 'select';
90
+ readonly required: boolean;
91
+ readonly default?: string;
92
+ readonly options: readonly ConfigurationOption[];
93
+ } | {
94
+ readonly key: string;
95
+ readonly label: string;
96
+ readonly description?: string;
97
+ readonly kind: 'boolean';
98
+ readonly required: boolean;
99
+ readonly default?: boolean;
100
+ readonly options?: never;
101
+ } | {
102
+ readonly key: string;
103
+ readonly label: string;
104
+ readonly description?: string;
105
+ readonly kind: 'number';
106
+ readonly required: boolean;
107
+ readonly default?: number;
108
+ readonly options?: never;
109
+ } | {
110
+ readonly key: string;
111
+ readonly label: string;
112
+ readonly description?: string;
113
+ readonly kind: 'url';
114
+ readonly required: boolean;
115
+ readonly default?: string;
116
+ readonly options?: never;
117
+ };
118
+ export type EnvironmentBinding = {
119
+ readonly source: 'config';
120
+ readonly key: string;
121
+ } | {
122
+ readonly source: 'secret';
123
+ readonly key: string;
124
+ };
125
+ export type ContributionRuntime = {
126
+ readonly transport: 'stdio' | 'ipc';
127
+ readonly entrypoint: PackageRelativePath;
128
+ readonly args?: readonly string[];
129
+ };
130
+ export type CallbackAction = {
131
+ readonly method: string;
132
+ readonly params?: Readonly<Record<string, unknown>>;
133
+ };
134
+ export type IdentityContribution = {
135
+ readonly type: 'identity';
136
+ readonly id: string;
137
+ readonly displayName: string;
138
+ readonly icon?: string;
139
+ readonly color?: string;
140
+ };
141
+ export type ScheduleContribution = {
142
+ readonly type: 'schedule';
143
+ readonly id: string;
144
+ readonly schedule: {
145
+ readonly kind: 'interval';
146
+ readonly everyMs: number;
147
+ } | {
148
+ readonly kind: 'cron';
149
+ readonly expression: string;
150
+ };
151
+ readonly action: CallbackAction;
152
+ readonly policy: {
153
+ readonly overlap: 'skip';
154
+ readonly timeoutMs: number;
155
+ };
156
+ };
157
+ export type DirectToolContribution = {
158
+ readonly type: 'tool';
159
+ readonly id: string;
160
+ readonly name: string;
161
+ readonly description?: string;
162
+ readonly inputSchema: Readonly<Record<string, unknown>>;
163
+ readonly action: CallbackAction;
164
+ };
165
+ export type McpContribution = {
166
+ readonly type: 'mcp';
167
+ readonly id: string;
168
+ readonly runtime: ContributionRuntime;
169
+ readonly environment?: Readonly<Record<string, EnvironmentBinding>>;
170
+ };
171
+ export type SkillContribution = {
172
+ readonly type: 'skill';
173
+ readonly id: string;
174
+ readonly path: PackageRelativePath;
175
+ };
176
+ export type LimbContribution = {
177
+ readonly type: 'limb';
178
+ readonly id: string;
179
+ readonly manifestPath: PackageRelativePath;
180
+ };
181
+ export type WebhookContribution = {
182
+ readonly type: 'webhook';
183
+ readonly id: string;
184
+ readonly path: string;
185
+ readonly methods: readonly ('GET' | 'POST' | 'PUT' | 'DELETE')[];
186
+ readonly action: CallbackAction;
187
+ readonly verificationSecretRef?: string;
188
+ };
189
+ export type MessageSubscriptionContribution = {
190
+ readonly type: 'message-subscription';
191
+ readonly id: string;
192
+ readonly binding: string;
193
+ readonly filter?: Readonly<Record<string, unknown>>;
194
+ readonly action: CallbackAction;
195
+ };
196
+ export type ServiceContribution = {
197
+ readonly type: 'service';
198
+ readonly id: string;
199
+ readonly runtime: ContributionRuntime;
200
+ readonly healthMethod: string;
201
+ readonly environment?: Readonly<Record<string, EnvironmentBinding>>;
202
+ };
203
+ export type ConnectorContribution = {
204
+ readonly type: 'connector';
205
+ readonly id: string;
206
+ readonly identityRef: string;
207
+ readonly inboundMethod: string;
208
+ readonly outboundMethod: string;
209
+ };
210
+ export type UiWhenClause = {
211
+ readonly featureEnabled?: boolean;
212
+ readonly requiresCapabilities?: readonly Capability[];
213
+ };
214
+ export type UiAnchor = {
215
+ readonly position: 'before' | 'after';
216
+ readonly target: string;
217
+ };
218
+ export type UiCommandContribution = {
219
+ readonly type: 'ui';
220
+ readonly id: string;
221
+ readonly kind: 'command';
222
+ readonly label: string;
223
+ readonly action: CallbackAction;
224
+ readonly when?: UiWhenClause;
225
+ };
226
+ export type UiSlotItemContribution = {
227
+ readonly type: 'ui';
228
+ readonly id: string;
229
+ readonly kind: 'slot-item';
230
+ readonly label: string;
231
+ readonly command: string;
232
+ readonly group: string;
233
+ readonly anchor?: UiAnchor;
234
+ readonly order?: number;
235
+ readonly when?: UiWhenClause;
236
+ };
237
+ export type UiMessageElementContribution = {
238
+ readonly type: 'ui';
239
+ readonly id: string;
240
+ readonly kind: 'message-element';
241
+ readonly label: string;
242
+ readonly elementKind: string;
243
+ readonly renderer: string;
244
+ readonly when?: UiWhenClause;
245
+ };
246
+ export type UiContribution = UiCommandContribution | UiSlotItemContribution | UiMessageElementContribution;
247
+ export type SemanticMaterializerDeclaration = {
248
+ readonly executionClass: 'dedicated-browser-worker';
249
+ readonly entrypoint: PackageRelativePath & `${string}.js`;
250
+ readonly integrity: string;
251
+ readonly protocolVersion: '1.0.0';
252
+ };
253
+ export type DesktopWindowContribution = {
254
+ readonly type: 'desktop-window';
255
+ readonly id: string;
256
+ readonly role: 'companion';
257
+ readonly surface: {
258
+ readonly entrypoint: PackageRelativePath & `${string}.html`;
259
+ readonly integrity: string;
260
+ };
261
+ readonly bridgeVersion: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0';
262
+ readonly presentation: {
263
+ readonly width: number;
264
+ readonly height: number;
265
+ readonly transparent: true;
266
+ readonly frame: false;
267
+ readonly alwaysOnTop: boolean;
268
+ readonly skipTaskbar: boolean;
269
+ };
270
+ };
271
+ export type ContentEditorProviderContribution = {
272
+ readonly type: 'content-editor-provider';
273
+ readonly id: string;
274
+ readonly mediaTypes: readonly ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'];
275
+ readonly surface: {
276
+ readonly entrypoint: PackageRelativePath;
277
+ readonly integrity: string;
278
+ readonly sandbox: 'dedicated-origin-iframe';
279
+ readonly navigationPolicy: 'navigation-api-deny';
280
+ };
281
+ readonly bridgeVersion: '1.0.0';
282
+ readonly semanticMaterializer?: SemanticMaterializerDeclaration;
283
+ readonly operations: readonly ['load' | 'settle' | 'comment' | 'tracked-change', 'load' | 'settle' | 'comment' | 'tracked-change', 'load' | 'settle' | 'comment' | 'tracked-change', 'load' | 'settle' | 'comment' | 'tracked-change'];
284
+ };
285
+ export type StaticContribution = IdentityContribution | ScheduleContribution | DirectToolContribution | McpContribution | SkillContribution | LimbContribution | WebhookContribution | MessageSubscriptionContribution | ServiceContribution | ConnectorContribution | UiContribution | ContentEditorProviderContribution | DesktopWindowContribution;
44
286
  export type PluginFeature = {
45
287
  readonly id: string;
46
288
  readonly name: string;
47
289
  readonly resources: readonly ResourceReference[];
290
+ readonly contributions?: readonly ContributionReference[];
48
291
  readonly capabilities: readonly Capability[];
49
292
  };
50
293
  export type RuntimeTransport = 'stdio' | 'ipc' | 'builtin';
51
294
  export type ExternalRuntimeTransport = 'stdio' | 'ipc';
52
295
  export type ExternalRuntimeDeclaration = {
53
296
  readonly transport: ExternalRuntimeTransport;
54
- readonly entrypoint: string;
297
+ readonly entrypoint: PackageRelativePath;
55
298
  };
56
299
  export type BuiltinRuntimeDeclaration = {
57
300
  readonly transport: 'builtin';
@@ -63,10 +306,87 @@ export type PluginManifest = {
63
306
  readonly version: SemVer;
64
307
  readonly contractVersion: SemVer;
65
308
  readonly name: string;
66
- readonly description?: string;
309
+ readonly description?: LocalizedDescription;
310
+ readonly icon?: PluginIcon;
311
+ readonly configuration?: readonly ConfigurationField[];
312
+ readonly contributions?: readonly StaticContribution[];
67
313
  readonly features: readonly PluginFeature[];
68
314
  readonly data?: readonly DataDeclaration[];
69
315
  readonly runtime: RuntimeDeclaration;
316
+ readonly signals?: SignalContribution;
317
+ };
318
+ export type CatalogSemVer = string;
319
+ export type CatalogPublisher = {
320
+ readonly id: string;
321
+ readonly name: string;
322
+ };
323
+ export type ArtifactProvenance = {
324
+ readonly repository: string;
325
+ readonly sourceDirectory: string;
326
+ };
327
+ export type NpmArtifact = {
328
+ readonly kind: 'npm';
329
+ readonly packageName: string;
330
+ readonly version: CatalogSemVer;
331
+ readonly tarballUrl: string;
332
+ readonly integrity: string;
333
+ readonly shasum: string;
334
+ readonly provenance: ArtifactProvenance;
335
+ };
336
+ export type CatalogPluginVersion = {
337
+ readonly version: CatalogSemVer;
338
+ readonly contractVersion: CatalogSemVer;
339
+ readonly manifestPath: 'plugin.yaml';
340
+ readonly artifact: NpmArtifact;
341
+ };
342
+ export type CatalogPluginEntry = {
343
+ readonly pluginId: string;
344
+ readonly name: string;
345
+ readonly description: LocalizedDescription;
346
+ readonly icon: PluginIcon;
347
+ readonly publisher: CatalogPublisher;
348
+ readonly keywords?: readonly string[];
349
+ readonly versions: readonly CatalogPluginVersion[];
350
+ };
351
+ export type PluginCatalog = {
352
+ readonly schemaVersion: '1';
353
+ readonly plugins: readonly CatalogPluginEntry[];
354
+ };
355
+ export type SignalType = string;
356
+ export type SignalSchemaRef = string;
357
+ export type SignalEpistemicStatus = 'observation' | 'inference';
358
+ export type SignalPrivacyClass = 'behavioral' | 'content-adjacent' | 'content' | 'av-raw' | 'input-raw';
359
+ export type AdmissibleSignalPrivacyClass = 'behavioral' | 'content-adjacent' | 'content';
360
+ export type SignalSourceClass = 'os-metadata' | 'accessibility-api' | 'remote-service' | 'av-capture' | 'input-hardware';
361
+ export type AdmissibleSignalSourceClass = 'os-metadata' | 'accessibility-api' | 'remote-service';
362
+ export type SignalDeclaration = {
363
+ readonly type: SignalType;
364
+ readonly schemaRef: SignalSchemaRef;
365
+ readonly epistemicStatus: SignalEpistemicStatus;
366
+ readonly privacyClass: AdmissibleSignalPrivacyClass;
367
+ readonly sourceClass: AdmissibleSignalSourceClass;
368
+ };
369
+ export type SignalContribution = {
370
+ readonly provides: readonly SignalDeclaration[];
371
+ };
372
+ export type SignalEventId = string;
373
+ export type SignalIdempotencyKey = string;
374
+ export type OpaqueSourceHandle = string;
375
+ export type SignalSourceRef = {
376
+ readonly handle: OpaqueSourceHandle;
377
+ };
378
+ export type EventsPublishInput = {
379
+ readonly signalType: SignalType;
380
+ readonly eventId: SignalEventId;
381
+ readonly idempotencyKey: SignalIdempotencyKey;
382
+ readonly occurredAt: string;
383
+ readonly payload: Readonly<Record<string, unknown>>;
384
+ readonly source: SignalSourceRef;
385
+ };
386
+ export type EventsPublishDisposition = 'accepted' | 'duplicate';
387
+ export type EventsPublishResult = {
388
+ readonly publicationId: SignalEventId;
389
+ readonly disposition: EventsPublishDisposition;
70
390
  };
71
391
  export type ActorKind = 'user' | 'cat' | 'plugin' | 'device' | 'system';
72
392
  export type ActorRef = {
@@ -171,6 +491,7 @@ export type MessageDraft = {
171
491
  readonly replyTo?: string;
172
492
  readonly payload: DraftPayload;
173
493
  };
494
+ export type OccurredAt = string | string;
174
495
  export type MessageEnvelope = {
175
496
  readonly messageId: string;
176
497
  readonly revision: number;
@@ -178,7 +499,7 @@ export type MessageEnvelope = {
178
499
  readonly replyTo?: string;
179
500
  readonly actor: ActorRef;
180
501
  readonly audience: CanonicalAudience;
181
- readonly occurredAt: string;
502
+ readonly occurredAt: OccurredAt;
182
503
  readonly payload: MessagePayload;
183
504
  };
184
505
  export type MessagePublishEvent = {
@@ -203,6 +524,7 @@ export type SendReceipt = {
203
524
  readonly messageId: string;
204
525
  readonly threadId: string;
205
526
  readonly revision: number;
527
+ readonly messageHandle: MessageHandle;
206
528
  readonly publishSequence?: number;
207
529
  };
208
530
  export type AppendReceipt = {
@@ -229,12 +551,12 @@ export type SubscriptionNormalResponse = {
229
551
  readonly stale: false;
230
552
  };
231
553
  export type SubscriptionEmptyResponse = {
232
- readonly events: readonly MessageOutputEvent[];
554
+ readonly events: readonly [];
233
555
  readonly ackToken: null;
234
556
  readonly stale: false;
235
557
  };
236
558
  export type SubscriptionStaleResponse = {
237
- readonly events: readonly MessageOutputEvent[];
559
+ readonly events: readonly [];
238
560
  readonly ackToken: null;
239
561
  readonly stale: true;
240
562
  };
@@ -243,6 +565,485 @@ export type SnapshotResponse = {
243
565
  readonly envelopes: readonly MessageEnvelope[];
244
566
  readonly resumeSequence: number;
245
567
  };
568
+ export type M0CSubscribeInput = {
569
+ readonly handle: string;
570
+ };
571
+ export type M0CSubscribeResult = {
572
+ readonly subscriptionId: string;
573
+ };
574
+ export type M0CReadInput = {
575
+ readonly subscriptionId: string;
576
+ readonly limit: number;
577
+ };
578
+ export type M0CReadNormalResult = {
579
+ readonly events: readonly MessageOutputEvent[];
580
+ readonly ackToken: string;
581
+ readonly stale: false;
582
+ };
583
+ export type M0CReadEmptyResult = {
584
+ readonly events: readonly [];
585
+ readonly ackToken: null;
586
+ readonly stale: false;
587
+ };
588
+ export type M0CReadStaleResult = {
589
+ readonly events: readonly [];
590
+ readonly ackToken: null;
591
+ readonly stale: true;
592
+ };
593
+ export type M0CReadResult = M0CReadNormalResult | M0CReadEmptyResult | M0CReadStaleResult;
594
+ export type M0CAckInput = {
595
+ readonly subscriptionId: string;
596
+ readonly ackToken: string;
597
+ };
598
+ export type M0CAckResult = null;
599
+ export type M0CSnapshotInput = {
600
+ readonly subscriptionId: string;
601
+ readonly maxItems: number;
602
+ readonly pageToken?: string;
603
+ };
604
+ export type M0CSnapshotIntermediateResult = {
605
+ readonly items: readonly MessageEnvelope[];
606
+ readonly nextPageToken: string;
607
+ readonly snapshotAckToken: null;
608
+ };
609
+ export type M0CSnapshotFinalResult = {
610
+ readonly items: readonly MessageEnvelope[];
611
+ readonly nextPageToken: null;
612
+ readonly snapshotAckToken: string;
613
+ };
614
+ export type M0CSnapshotResult = M0CSnapshotIntermediateResult | M0CSnapshotFinalResult;
615
+ export type M0CDeliverInput = {
616
+ readonly deliveryId: string;
617
+ readonly threadHandle: ThreadHandleAddress;
618
+ readonly envelope: MessageEnvelope;
619
+ };
620
+ export type M0CDeliverResult = {
621
+ readonly deliveryId: string;
622
+ };
623
+ export type PhysicalLimbIdentifier = string;
624
+ export type PhysicalLimbGrant = 'limb.action.motion' | 'limb.action.display' | 'limb.action.light' | 'limb.action.speaker' | 'limb.observe.touch' | 'limb.sensor.microphone' | 'limb.sensor.camera';
625
+ export type PhysicalLimbSafePose = {
626
+ readonly yawDeg: number;
627
+ readonly pitchDeg: number;
628
+ readonly timeoutMs: number;
629
+ };
630
+ export type PhysicalLimbContribution = {
631
+ readonly contributionId: PhysicalLimbIdentifier;
632
+ readonly nodeType: PhysicalLimbIdentifier;
633
+ readonly displayName: string;
634
+ readonly grants: readonly PhysicalLimbGrant[];
635
+ readonly safePose: PhysicalLimbSafePose;
636
+ };
637
+ export type PhysicalLimbExpressionSource = {
638
+ readonly kind: 'cat_state' | 'play' | 'degraded';
639
+ readonly ref: PhysicalLimbIdentifier;
640
+ };
641
+ export type PhysicalLimbTouchPayload = {
642
+ readonly gesture: 'tap' | 'stroke';
643
+ readonly durationMs: number;
644
+ readonly confidence: number;
645
+ };
646
+ export type PhysicalLimbTranscriptPayload = {
647
+ readonly interactionId: PhysicalLimbIdentifier;
648
+ readonly text: string;
649
+ readonly language?: string;
650
+ readonly captureDurationMs: number;
651
+ };
652
+ export type PhysicalLimbTouchObservation = {
653
+ readonly v: 1;
654
+ readonly observationId: PhysicalLimbIdentifier;
655
+ readonly nodeId: PhysicalLimbIdentifier;
656
+ readonly occurredAt: string;
657
+ readonly sessionId: PhysicalLimbIdentifier;
658
+ readonly kind: 'touch';
659
+ readonly payload: PhysicalLimbTouchPayload;
660
+ };
661
+ export type PhysicalLimbTranscriptObservation = {
662
+ readonly v: 1;
663
+ readonly observationId: PhysicalLimbIdentifier;
664
+ readonly nodeId: PhysicalLimbIdentifier;
665
+ readonly occurredAt: string;
666
+ readonly sessionId: PhysicalLimbIdentifier;
667
+ readonly kind: 'transcript';
668
+ readonly payload: PhysicalLimbTranscriptPayload;
669
+ };
670
+ export type PhysicalLimbObservation = PhysicalLimbTouchObservation | PhysicalLimbTranscriptObservation;
671
+ export type PhysicalLimbMotionPayload = {
672
+ readonly yawDeg: number;
673
+ readonly pitchDeg: number;
674
+ readonly speedDps: number;
675
+ readonly accelerationDps2: number;
676
+ };
677
+ export type PhysicalLimbDisplayPayload = {
678
+ readonly expression: string;
679
+ readonly expressionSource: PhysicalLimbExpressionSource;
680
+ };
681
+ export type PhysicalLimbRgb = readonly [number, number, number];
682
+ export type PhysicalLimbLightPayload = {
683
+ readonly colors: readonly PhysicalLimbRgb[];
684
+ };
685
+ export type PhysicalLimbSpeakerPayload = {
686
+ readonly text: string;
687
+ readonly voiceProfileRef: PhysicalLimbIdentifier;
688
+ readonly volumePercent: number;
689
+ };
690
+ export type PhysicalLimbMotionAction = {
691
+ readonly v: 1;
692
+ readonly actionId: PhysicalLimbIdentifier;
693
+ readonly nodeId: PhysicalLimbIdentifier;
694
+ readonly deadlineUnixMs: number;
695
+ readonly timeoutMs: number;
696
+ readonly cancelToken: PhysicalLimbIdentifier;
697
+ readonly kind: 'motion';
698
+ readonly payload: PhysicalLimbMotionPayload;
699
+ };
700
+ export type PhysicalLimbDisplayAction = {
701
+ readonly v: 1;
702
+ readonly actionId: PhysicalLimbIdentifier;
703
+ readonly nodeId: PhysicalLimbIdentifier;
704
+ readonly deadlineUnixMs: number;
705
+ readonly timeoutMs: number;
706
+ readonly cancelToken: PhysicalLimbIdentifier;
707
+ readonly kind: 'display';
708
+ readonly payload: PhysicalLimbDisplayPayload;
709
+ };
710
+ export type PhysicalLimbLightAction = {
711
+ readonly v: 1;
712
+ readonly actionId: PhysicalLimbIdentifier;
713
+ readonly nodeId: PhysicalLimbIdentifier;
714
+ readonly deadlineUnixMs: number;
715
+ readonly timeoutMs: number;
716
+ readonly cancelToken: PhysicalLimbIdentifier;
717
+ readonly kind: 'light';
718
+ readonly payload: PhysicalLimbLightPayload;
719
+ };
720
+ export type PhysicalLimbSpeakerAction = {
721
+ readonly v: 1;
722
+ readonly actionId: PhysicalLimbIdentifier;
723
+ readonly nodeId: PhysicalLimbIdentifier;
724
+ readonly deadlineUnixMs: number;
725
+ readonly timeoutMs: number;
726
+ readonly cancelToken: PhysicalLimbIdentifier;
727
+ readonly kind: 'speaker';
728
+ readonly payload: PhysicalLimbSpeakerPayload;
729
+ };
730
+ export type PhysicalLimbAction = PhysicalLimbMotionAction | PhysicalLimbDisplayAction | PhysicalLimbLightAction | PhysicalLimbSpeakerAction;
731
+ export type PhysicalLimbCancel = {
732
+ readonly v: 1;
733
+ readonly nodeId: PhysicalLimbIdentifier;
734
+ readonly actionId: PhysicalLimbIdentifier;
735
+ readonly cancelToken: PhysicalLimbIdentifier;
736
+ readonly reason: 'user' | 'timeout' | 'lease_lost' | 'host_lost' | 'superseded';
737
+ };
738
+ export type PhysicalLimbActionResult = {
739
+ readonly v: 1;
740
+ readonly actionId: PhysicalLimbIdentifier;
741
+ readonly nodeId: PhysicalLimbIdentifier;
742
+ readonly outcome: 'succeeded' | 'refused' | 'failed' | 'canceled';
743
+ readonly reason?: string;
744
+ readonly observedAt: string;
745
+ };
746
+ export type PhysicalLimbReadinessReason = 'gateway_disconnected' | 'device_disconnected' | 'firmware_incompatible' | 'sensor_unavailable' | 'speech_dependency_missing' | 'skin_unavailable' | 'grant_revoked' | 'host_unavailable';
747
+ export type PhysicalLimbReadyReadiness = {
748
+ readonly v: 1;
749
+ readonly nodeId: PhysicalLimbIdentifier;
750
+ readonly status: 'ready';
751
+ readonly observedAt: string;
752
+ };
753
+ export type PhysicalLimbUnavailableReadiness = {
754
+ readonly v: 1;
755
+ readonly nodeId: PhysicalLimbIdentifier;
756
+ readonly status: 'degraded' | 'offline';
757
+ readonly reason: PhysicalLimbReadinessReason;
758
+ readonly observedAt: string;
759
+ };
760
+ export type PhysicalLimbReadiness = PhysicalLimbReadyReadiness | PhysicalLimbUnavailableReadiness;
761
+ export type DocxMaterializationText = string;
762
+ export type DocxMaterializationAuthor = string;
763
+ export type DocxMaterializationBytes = string;
764
+ export type DocxMaterializationAnchor = {
765
+ readonly paragraphId: string;
766
+ readonly textQuote: string;
767
+ };
768
+ export type DocxMaterializationAttribution = {
769
+ readonly author: DocxMaterializationAuthor;
770
+ readonly operationId: string;
771
+ readonly timestamp: string;
772
+ };
773
+ export type DocxMaterializationOperation = {
774
+ readonly kind: 'inspect';
775
+ readonly cursor: number;
776
+ readonly limit: number;
777
+ } | {
778
+ readonly kind: 'tracked-change';
779
+ readonly target: DocxMaterializationAnchor;
780
+ readonly replacement: DocxMaterializationText;
781
+ readonly attribution: DocxMaterializationAttribution;
782
+ } | {
783
+ readonly kind: 'comment';
784
+ readonly target: DocxMaterializationAnchor;
785
+ readonly body: DocxMaterializationText;
786
+ readonly attribution: DocxMaterializationAttribution;
787
+ };
788
+ export type DocxMaterializationRequest = {
789
+ readonly protocolVersion: '1.0.0';
790
+ readonly requestId: string;
791
+ readonly mediaType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
792
+ readonly bytesBase64: DocxMaterializationBytes;
793
+ readonly operation: DocxMaterializationOperation;
794
+ };
795
+ export type DocxMaterializationResult = {
796
+ readonly kind: 'inspection';
797
+ readonly paragraphs: readonly ({
798
+ readonly target: DocxMaterializationAnchor;
799
+ readonly editable: boolean;
800
+ })[];
801
+ readonly nextCursor: number | null;
802
+ } | {
803
+ readonly kind: 'document';
804
+ readonly bytesBase64: DocxMaterializationBytes;
805
+ } | {
806
+ readonly kind: 'rejected';
807
+ readonly code: 'INVALID_DOCX' | 'TARGET_MISMATCH' | 'UNSUPPORTED_TARGET' | 'LIMIT_EXCEEDED' | 'INVALID_REQUEST';
808
+ };
809
+ export type DocxMaterializationResponse = {
810
+ readonly protocolVersion: '1.0.0';
811
+ readonly requestId: string;
812
+ readonly result: DocxMaterializationResult;
813
+ };
814
+ export type CompanionSelectionId = string;
815
+ export type CompanionScreenFrame = {
816
+ readonly image: string;
817
+ readonly width: number;
818
+ readonly height: number;
819
+ readonly frameId: string;
820
+ readonly sourceLabel: string;
821
+ readonly observedAt: number;
822
+ };
823
+ export type CompanionCommand = {
824
+ readonly kind: 'state';
825
+ } | {
826
+ readonly kind: 'prepare';
827
+ } | {
828
+ readonly kind: 'audio.connect';
829
+ readonly mode?: 'receive_only';
830
+ } | {
831
+ readonly kind: 'audio.close';
832
+ } | {
833
+ readonly kind: 'audio.microphone';
834
+ readonly muted: boolean;
835
+ } | {
836
+ readonly kind: 'audio.speaker';
837
+ readonly muted: boolean;
838
+ } | {
839
+ readonly kind: 'stop';
840
+ } | {
841
+ readonly kind: 'text';
842
+ readonly text: string;
843
+ readonly clientMessageId: string;
844
+ } | {
845
+ readonly kind: 'documents';
846
+ readonly allowed: boolean;
847
+ } | {
848
+ readonly kind: 'screen.pick';
849
+ } | {
850
+ readonly kind: 'screen.open';
851
+ readonly selectionId: CompanionSelectionId;
852
+ readonly label: string;
853
+ } | {
854
+ readonly kind: 'screen.frame';
855
+ readonly selectionId: CompanionSelectionId;
856
+ readonly frame: CompanionScreenFrame;
857
+ } | {
858
+ readonly kind: 'screen.close';
859
+ } | {
860
+ readonly kind: 'conversation.open';
861
+ } | {
862
+ readonly kind: 'decisions.read';
863
+ readonly offset: number;
864
+ readonly limit: number;
865
+ } | {
866
+ readonly kind: 'f221.inspect';
867
+ readonly proposalId: string;
868
+ } | {
869
+ readonly kind: 'view.resize';
870
+ readonly expanded: boolean;
871
+ } | {
872
+ readonly kind: 'view.layout';
873
+ readonly panel: 'none' | 'bubble' | 'actions' | 'menu' | 'chat' | 'decisions';
874
+ readonly width: number;
875
+ readonly height: number;
876
+ } | {
877
+ readonly kind: 'view.drag';
878
+ readonly phase: 'start' | 'end';
879
+ } | {
880
+ readonly kind: 'view.hide';
881
+ } | {
882
+ readonly kind: 'conversation.read';
883
+ };
884
+ export type CompanionActor = {
885
+ readonly catId: string;
886
+ readonly displayName: string;
887
+ };
888
+ export type CompanionIdentitySnapshotV1 = {
889
+ readonly v: 1;
890
+ readonly name: '猫猫球';
891
+ readonly partner: {
892
+ readonly catId: string;
893
+ readonly displayName: string;
894
+ readonly skin: string;
895
+ };
896
+ readonly live: {
897
+ readonly catId: string;
898
+ readonly displayName: string;
899
+ readonly transport: 'gpt_live_v3';
900
+ readonly verifiedModel: string | null;
901
+ };
902
+ readonly deep: {
903
+ readonly catId: string;
904
+ readonly displayName: string;
905
+ readonly verifiedModel: string | null;
906
+ };
907
+ };
908
+ export type CompanionLiveTransport = {
909
+ readonly kind: 'gpt_live_v3';
910
+ readonly verifiedModel: null;
911
+ };
912
+ export type CompanionAudioState = {
913
+ readonly supportedModes: readonly ('duplex' | 'receive_only')[];
914
+ readonly activeMode: 'duplex' | 'receive_only' | null;
915
+ };
916
+ export type CompanionNativeWorkEntry = {
917
+ readonly taskId: string;
918
+ readonly nativeTurnId: string;
919
+ readonly kind: 'reasoning' | 'tool' | 'workspace_fetch' | 'workspace_dispatch' | 'screen_read';
920
+ readonly startedAt: number;
921
+ readonly expiresAt: number;
922
+ };
923
+ export type CompanionNativeWorkEvent = {
924
+ readonly eventId: string;
925
+ readonly taskId: string;
926
+ readonly kind: 'reasoning' | 'tool' | 'workspace_fetch' | 'workspace_dispatch' | 'screen_read' | 'result';
927
+ readonly phase: 'started' | 'completed' | 'failed' | 'cancelled' | 'expired' | 'result_handed_to_voice';
928
+ readonly occurredAt: number;
929
+ readonly expiresAt: number;
930
+ readonly resultId?: string;
931
+ readonly nativeCarrierCatId?: string;
932
+ };
933
+ export type CompanionNativeWork = {
934
+ readonly scopeId: string | null;
935
+ readonly revision: number;
936
+ readonly active: readonly CompanionNativeWorkEntry[];
937
+ readonly recent: readonly CompanionNativeWorkEvent[];
938
+ };
939
+ export type CompanionState = {
940
+ readonly kind: 'state';
941
+ readonly phase: 'idle' | 'preparing' | 'ready' | 'connecting' | 'talking' | 'closed' | 'failed';
942
+ readonly displayName: string;
943
+ readonly skin: string;
944
+ readonly duty: CompanionActor;
945
+ readonly carrier: CompanionActor;
946
+ readonly documentsAllowed: boolean;
947
+ readonly toolsReady: boolean;
948
+ readonly nativeActivity: 'none' | 'reasoning' | 'tool_running';
949
+ readonly liveTransport: CompanionLiveTransport;
950
+ readonly audio?: CompanionAudioState;
951
+ readonly nativeWork: CompanionNativeWork;
952
+ };
953
+ export type CompanionDecisions = {
954
+ readonly kind: 'decisions';
955
+ readonly status: 'available' | 'unavailable';
956
+ readonly approvalCount: number | null;
957
+ readonly needsMeCount: number | null;
958
+ readonly otherNeedsMeCount: number | null;
959
+ readonly approvals: readonly ({
960
+ readonly proposalId: string;
961
+ readonly sourceFeatureId: string;
962
+ readonly summary: string;
963
+ readonly resolution: 'open' | 'accepted' | 'rejected' | 'closed_without_decision';
964
+ readonly materializationState: 'not_started' | 'outcome_unknown' | 'in_progress' | 'succeeded' | 'failed';
965
+ readonly linkedNeedsMe: boolean;
966
+ })[];
967
+ readonly otherNeedsMe: readonly ({
968
+ readonly subjectRef: string;
969
+ readonly summary: string;
970
+ })[];
971
+ readonly page: {
972
+ readonly offset: number;
973
+ readonly limit: number;
974
+ readonly hasMoreApprovals: boolean;
975
+ readonly hasMoreNeedsMe: boolean;
976
+ };
977
+ };
978
+ export type CompanionDecisionTrial = {
979
+ readonly kind: 'decision-trial';
980
+ readonly status: 'dismissed' | 'trial_confirmed' | 'stale' | 'unavailable';
981
+ };
982
+ export type CompanionErrorCode = 'invalid_request' | 'permission_required' | 'unavailable' | 'session_required' | 'busy' | 'selection_changed' | 'carrier_unavailable' | 'cancelled' | 'unconfirmed';
983
+ export type CompanionReply = {
984
+ readonly kind: 'ok';
985
+ } | CompanionState | CompanionDecisions | CompanionDecisionTrial | {
986
+ readonly kind: 'delivery';
987
+ readonly delivery: 'accepted' | 'unconfirmed';
988
+ } | {
989
+ readonly kind: 'selection';
990
+ readonly selectionId: CompanionSelectionId;
991
+ } | {
992
+ readonly kind: 'navigation';
993
+ readonly delivery: 'requested' | 'unconfirmed';
994
+ } | {
995
+ readonly kind: 'error';
996
+ readonly code: CompanionErrorCode;
997
+ } | {
998
+ readonly kind: 'layout';
999
+ readonly pet: {
1000
+ readonly x: number;
1001
+ readonly y: number;
1002
+ };
1003
+ readonly panel: {
1004
+ readonly x: number;
1005
+ readonly y: number;
1006
+ readonly width: number;
1007
+ readonly height: number;
1008
+ };
1009
+ readonly width: number;
1010
+ readonly height: number;
1011
+ } | {
1012
+ readonly kind: 'conversation';
1013
+ readonly threadTitle: string;
1014
+ readonly messages: readonly ({
1015
+ readonly id: string;
1016
+ readonly role: 'user' | 'assistant';
1017
+ readonly text: string;
1018
+ readonly name: string;
1019
+ readonly companionIdentity?: CompanionIdentitySnapshotV1;
1020
+ })[];
1021
+ readonly hasMore: boolean;
1022
+ };
1023
+ export type CompanionEvent = {
1024
+ readonly kind: 'media-stopped';
1025
+ readonly reason: 'locked' | 'suspended' | 'hidden' | 'closed' | 'revoked';
1026
+ } | {
1027
+ readonly kind: 'audio';
1028
+ readonly type: 'connected' | 'recovering' | 'recovered' | 'error';
1029
+ } | {
1030
+ readonly kind: 'audio';
1031
+ readonly type: 'transcript';
1032
+ readonly role: 'user' | 'assistant';
1033
+ readonly text: string;
1034
+ readonly turnId?: string;
1035
+ readonly itemId?: string;
1036
+ } | {
1037
+ readonly kind: 'audio';
1038
+ readonly type: 'turn-done';
1039
+ readonly role?: 'user' | 'assistant';
1040
+ readonly transcript?: string;
1041
+ readonly turnId?: string;
1042
+ } | {
1043
+ readonly kind: 'view-dismiss';
1044
+ };
1045
+ export declare const DOCX_MATERIALIZATION_TEXT_PATTERN = "^[\\u0009\\u000A\\u0020-\\uD7FF\\uE000-\\uFFFD\\u{10000}-\\u{10FFFF}]*(?![\\s\\S])";
1046
+ export declare const DOCX_MATERIALIZATION_AUTHOR_PATTERN = "^[\\u0020-\\uD7FF\\uE000-\\uFFFD\\u{10000}-\\u{10FFFF}]*(?![\\s\\S])";
246
1047
  export type FixtureMetadata = {
247
1048
  readonly executor: 'loopback';
248
1049
  readonly domain: 'messaging';
@@ -302,6 +1103,31 @@ export type FixtureOperation = {
302
1103
  readonly operation: 'deleteReplayEvents';
303
1104
  readonly input: DeleteReplayEventsInput;
304
1105
  };
1106
+ export type PluginToHostMethod = 'messaging.send' | 'messaging.appendElements' | 'messaging.subscribe' | 'messaging.read' | 'messaging.ack' | 'messaging.snapshot';
1107
+ export type BehaviorExpectationOracle = {
1108
+ readonly kind: 'behavior-expectation';
1109
+ };
1110
+ export type JsonRpcAdmissionOracle = {
1111
+ readonly kind: 'json-rpc-error';
1112
+ readonly code: -32602;
1113
+ readonly sideEffects: 'behavior-expectation';
1114
+ };
1115
+ export type BehaviorExecution = {
1116
+ readonly plane: 'plugin-to-host-wire';
1117
+ readonly method: PluginToHostMethod;
1118
+ readonly verdictOracle: BehaviorExpectationOracle;
1119
+ } | {
1120
+ readonly plane: 'wire-admission';
1121
+ readonly method: PluginToHostMethod;
1122
+ readonly verdictOracle: JsonRpcAdmissionOracle;
1123
+ } | {
1124
+ readonly plane: 'host-to-plugin-delivery';
1125
+ readonly method: 'host.messaging.deliver';
1126
+ readonly verdictOracle: BehaviorExpectationOracle;
1127
+ } | {
1128
+ readonly plane: 'host-control';
1129
+ readonly verdictOracle: BehaviorExpectationOracle;
1130
+ };
305
1131
  export type SendOperationInput = {
306
1132
  readonly address: Readonly<Record<string, unknown>>;
307
1133
  readonly idempotencyKey: string;
@@ -344,7 +1170,7 @@ export type PermissionMatrixEntry = {
344
1170
  readonly firstPartyPreset: boolean;
345
1171
  };
346
1172
  export type PermissionMatrixInput = {
347
- readonly entries: readonly PermissionMatrixEntry[];
1173
+ readonly entries: readonly [PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry, PermissionMatrixEntry];
348
1174
  };
349
1175
  export type DeleteReplayEventsInput = {
350
1176
  readonly subscriptionId: string;
@@ -352,19 +1178,159 @@ export type DeleteReplayEventsInput = {
352
1178
  };
353
1179
  export type SideEffectAssertion = {
354
1180
  readonly target: 'messages' | 'output_events' | 'idempotency_ledger' | 'subscription' | 'snapshot' | 'reply_preview' | 'provenance' | 'grant_state' | 'permission_matrix' | 'replay_events';
355
- readonly assertion: 'unchanged' | 'none' | 'state_equals' | 'round_trip' | 'matches';
356
- readonly value?: unknown;
1181
+ readonly assertion: 'unchanged';
1182
+ readonly value?: never;
1183
+ } | {
1184
+ readonly target: 'messages' | 'output_events' | 'idempotency_ledger' | 'subscription' | 'snapshot' | 'reply_preview' | 'provenance' | 'grant_state' | 'permission_matrix' | 'replay_events';
1185
+ readonly assertion: 'none';
1186
+ readonly value?: never;
1187
+ } | {
1188
+ readonly target: 'messages' | 'output_events' | 'idempotency_ledger' | 'subscription' | 'snapshot' | 'reply_preview' | 'provenance' | 'grant_state' | 'permission_matrix' | 'replay_events';
1189
+ readonly assertion: 'state_equals';
1190
+ readonly value: unknown;
1191
+ } | {
1192
+ readonly target: 'messages' | 'output_events' | 'idempotency_ledger' | 'subscription' | 'snapshot' | 'reply_preview' | 'provenance' | 'grant_state' | 'permission_matrix' | 'replay_events';
1193
+ readonly assertion: 'round_trip';
1194
+ readonly value: unknown;
1195
+ } | {
1196
+ readonly target: 'messages' | 'output_events' | 'idempotency_ledger' | 'subscription' | 'snapshot' | 'reply_preview' | 'provenance' | 'grant_state' | 'permission_matrix' | 'replay_events';
1197
+ readonly assertion: 'matches';
1198
+ readonly value: unknown;
357
1199
  };
358
1200
  export type ExpectedVerdict = {
359
- readonly status: 'success' | 'error';
360
- readonly errorCode?: MessagingErrorCode;
1201
+ readonly status: 'success';
1202
+ readonly errorCode?: never;
1203
+ readonly sideEffects: readonly SideEffectAssertion[];
1204
+ } | {
1205
+ readonly status: 'error';
1206
+ readonly errorCode: MessagingErrorCode;
361
1207
  readonly sideEffects: readonly SideEffectAssertion[];
362
1208
  };
363
1209
  export type BehaviorCase = {
364
1210
  readonly id: string;
365
1211
  readonly invariant: string;
1212
+ readonly execution: Extract<BehaviorExecution, {
1213
+ readonly plane: 'plugin-to-host-wire';
1214
+ }> & {
1215
+ readonly method: 'messaging.send';
1216
+ } | Extract<BehaviorExecution, {
1217
+ readonly plane: 'wire-admission';
1218
+ }> & {
1219
+ readonly method: 'messaging.send';
1220
+ };
1221
+ readonly given: FixtureSetup;
1222
+ readonly when: Extract<FixtureOperation, {
1223
+ readonly operation: 'send';
1224
+ }>;
1225
+ readonly expect: ExpectedVerdict;
1226
+ } | {
1227
+ readonly id: string;
1228
+ readonly invariant: string;
1229
+ readonly execution: Extract<BehaviorExecution, {
1230
+ readonly plane: 'plugin-to-host-wire';
1231
+ }> & {
1232
+ readonly method: 'messaging.appendElements';
1233
+ } | Extract<BehaviorExecution, {
1234
+ readonly plane: 'wire-admission';
1235
+ }> & {
1236
+ readonly method: 'messaging.appendElements';
1237
+ };
1238
+ readonly given: FixtureSetup;
1239
+ readonly when: Extract<FixtureOperation, {
1240
+ readonly operation: 'appendElements';
1241
+ }>;
1242
+ readonly expect: ExpectedVerdict;
1243
+ } | {
1244
+ readonly id: string;
1245
+ readonly invariant: string;
1246
+ readonly execution: Extract<BehaviorExecution, {
1247
+ readonly plane: 'plugin-to-host-wire';
1248
+ }> & {
1249
+ readonly method: 'messaging.subscribe';
1250
+ } | Extract<BehaviorExecution, {
1251
+ readonly plane: 'wire-admission';
1252
+ }> & {
1253
+ readonly method: 'messaging.subscribe';
1254
+ };
1255
+ readonly given: FixtureSetup;
1256
+ readonly when: Extract<FixtureOperation, {
1257
+ readonly operation: 'subscribe';
1258
+ }>;
1259
+ readonly expect: ExpectedVerdict;
1260
+ } | {
1261
+ readonly id: string;
1262
+ readonly invariant: string;
1263
+ readonly execution: Extract<BehaviorExecution, {
1264
+ readonly plane: 'plugin-to-host-wire';
1265
+ }> & {
1266
+ readonly method: 'messaging.read';
1267
+ } | Extract<BehaviorExecution, {
1268
+ readonly plane: 'wire-admission';
1269
+ }> & {
1270
+ readonly method: 'messaging.read';
1271
+ };
1272
+ readonly given: FixtureSetup;
1273
+ readonly when: Extract<FixtureOperation, {
1274
+ readonly operation: 'read';
1275
+ }>;
1276
+ readonly expect: ExpectedVerdict;
1277
+ } | {
1278
+ readonly id: string;
1279
+ readonly invariant: string;
1280
+ readonly execution: Extract<BehaviorExecution, {
1281
+ readonly plane: 'plugin-to-host-wire';
1282
+ }> & {
1283
+ readonly method: 'messaging.ack';
1284
+ } | Extract<BehaviorExecution, {
1285
+ readonly plane: 'wire-admission';
1286
+ }> & {
1287
+ readonly method: 'messaging.ack';
1288
+ };
1289
+ readonly given: FixtureSetup;
1290
+ readonly when: Extract<FixtureOperation, {
1291
+ readonly operation: 'ack';
1292
+ }>;
1293
+ readonly expect: ExpectedVerdict;
1294
+ } | {
1295
+ readonly id: string;
1296
+ readonly invariant: string;
1297
+ readonly execution: Extract<BehaviorExecution, {
1298
+ readonly plane: 'plugin-to-host-wire';
1299
+ }> & {
1300
+ readonly method: 'messaging.snapshot';
1301
+ } | Extract<BehaviorExecution, {
1302
+ readonly plane: 'wire-admission';
1303
+ }> & {
1304
+ readonly method: 'messaging.snapshot';
1305
+ };
1306
+ readonly given: FixtureSetup;
1307
+ readonly when: Extract<FixtureOperation, {
1308
+ readonly operation: 'snapshot';
1309
+ }>;
1310
+ readonly expect: ExpectedVerdict;
1311
+ } | {
1312
+ readonly id: string;
1313
+ readonly invariant: string;
1314
+ readonly execution: Extract<BehaviorExecution, {
1315
+ readonly plane: 'host-to-plugin-delivery';
1316
+ }> & {
1317
+ readonly method: 'host.messaging.deliver';
1318
+ };
1319
+ readonly given: FixtureSetup;
1320
+ readonly when: Extract<FixtureOperation, {
1321
+ readonly operation: 'deliverOnMessage';
1322
+ }>;
1323
+ readonly expect: ExpectedVerdict;
1324
+ } | {
1325
+ readonly id: string;
1326
+ readonly invariant: string;
1327
+ readonly execution: Extract<BehaviorExecution, {
1328
+ readonly plane: 'host-control';
1329
+ }>;
366
1330
  readonly given: FixtureSetup;
367
- readonly when: FixtureOperation;
1331
+ readonly when: Extract<FixtureOperation, {
1332
+ readonly operation: 'applyGrantPreset' | 'revokeGrant' | 'checkPermissionMatrix' | 'deleteReplayEvents';
1333
+ }>;
368
1334
  readonly expect: ExpectedVerdict;
369
1335
  };
370
1336
  export type BehaviorFixture = {
@@ -400,6 +1366,12 @@ export declare const MESSAGING_BOUNDS: {
400
1366
  readonly maxElementIdLength: 128;
401
1367
  readonly maxElementsPerMessage: 128;
402
1368
  readonly maxAppendOpsPerMessage: 64;
1369
+ readonly maxMessageIdLength: 512;
1370
+ readonly maxThreadIdLength: 512;
1371
+ readonly maxActorIdLength: 512;
1372
+ readonly maxMessageHandleTokenLength: 512;
1373
+ readonly maxEventIdLength: 720;
1374
+ readonly maxOccurredAtLength: 27;
403
1375
  };
404
1376
  /**
405
1377
  * @signed(G-0 2026-07-15)