@canonmsg/agent-sdk 11.2.0 → 12.0.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 (188) hide show
  1. package/README.md +171 -536
  2. package/dist/chunks/chunk-6VK4UZHJ.js +2806 -0
  3. package/dist/chunks/chunk-FPQFTTND.js +4899 -0
  4. package/dist/chunks/chunk-OLJ7H4E2.js +14705 -0
  5. package/dist/chunks/mls-crypto-NZDNSPAO.js +10 -0
  6. package/dist/cli.js +198 -0
  7. package/dist/drivers/claude.d.ts +36 -0
  8. package/dist/drivers/code.d.ts +18 -0
  9. package/dist/drivers/codex.d.ts +37 -0
  10. package/dist/index.d.ts +12 -25
  11. package/dist/index.js +69 -13
  12. package/dist/internal/backend-contracts/agentBehaviorPolicy.d.ts +122 -0
  13. package/dist/internal/backend-contracts/agentDirectory.d.ts +32 -0
  14. package/dist/internal/backend-contracts/agentOrigin.d.ts +23 -0
  15. package/dist/internal/backend-contracts/agentSearch.d.ts +17 -0
  16. package/dist/internal/backend-contracts/api-origins.generated.d.ts +4 -0
  17. package/dist/internal/backend-contracts/apiErrors.d.ts +1 -0
  18. package/dist/internal/backend-contracts/artifactActions.d.ts +159 -0
  19. package/dist/internal/backend-contracts/artifacts.d.ts +386 -0
  20. package/dist/internal/backend-contracts/communication.d.ts +131 -0
  21. package/dist/internal/backend-contracts/conversationMembership.d.ts +28 -0
  22. package/dist/internal/backend-contracts/deliveryObservation.d.ts +23 -0
  23. package/dist/internal/backend-contracts/diffRedaction.d.ts +6 -0
  24. package/dist/internal/backend-contracts/endpoint-unread.d.ts +4 -0
  25. package/dist/internal/backend-contracts/endpoint.d.ts +103 -0
  26. package/dist/internal/backend-contracts/endpointContentPolicy.d.ts +37 -0
  27. package/dist/internal/backend-contracts/environment.d.ts +20 -0
  28. package/dist/internal/backend-contracts/externalInbound.d.ts +24 -0
  29. package/dist/internal/backend-contracts/firestoreValues.d.ts +9 -0
  30. package/dist/internal/backend-contracts/index.d.ts +48 -0
  31. package/dist/internal/backend-contracts/media-url.d.ts +6 -0
  32. package/dist/internal/backend-contracts/media.d.ts +51 -0
  33. package/dist/internal/backend-contracts/mediaDelivery.d.ts +46 -0
  34. package/dist/internal/backend-contracts/mediaTransferProtocol.d.ts +17 -0
  35. package/dist/internal/backend-contracts/membershipChange.d.ts +21 -0
  36. package/dist/internal/backend-contracts/message.d.ts +86 -0
  37. package/dist/internal/backend-contracts/messageText.d.ts +6 -0
  38. package/dist/internal/backend-contracts/mlsDevApplication.d.ts +73 -0
  39. package/dist/internal/backend-contracts/mlsDevCredential.d.ts +75 -0
  40. package/dist/internal/backend-contracts/mlsDevCredentialReconciliation.d.ts +45 -0
  41. package/dist/internal/backend-contracts/mlsDevDeviceCustody.d.ts +51 -0
  42. package/dist/internal/backend-contracts/mlsDevEnrollment.d.ts +74 -0
  43. package/dist/internal/backend-contracts/mlsDevGroup.d.ts +197 -0
  44. package/dist/internal/backend-contracts/mlsDevGroupFeed.d.ts +47 -0
  45. package/dist/internal/backend-contracts/mlsDevKeyPackage.d.ts +42 -0
  46. package/dist/internal/backend-contracts/mlsDevKeyPackages.d.ts +55 -0
  47. package/dist/internal/backend-contracts/moderation.d.ts +7 -0
  48. package/dist/internal/backend-contracts/plaintextProcessors.d.ts +63 -0
  49. package/dist/internal/backend-contracts/preparedContent.d.ts +54 -0
  50. package/dist/internal/backend-contracts/replyAuthority.d.ts +14 -0
  51. package/dist/internal/backend-contracts/runtimeCardFields.d.ts +66 -0
  52. package/dist/internal/backend-contracts/runtimeCardStorage.d.ts +3 -0
  53. package/dist/internal/backend-contracts/runtimeDescriptor.d.ts +88 -0
  54. package/dist/internal/backend-contracts/selfContext.d.ts +9 -0
  55. package/dist/internal/backend-contracts/turnProtocol.d.ts +43 -0
  56. package/dist/internal/backend-contracts/verbContract.d.ts +848 -0
  57. package/dist/internal/backend-contracts/verbSchemas.d.ts +1707 -0
  58. package/dist/internal/backend-contracts/verbWire.d.ts +493 -0
  59. package/dist/internal/backend-contracts/webAuth.d.ts +8 -0
  60. package/dist/internal/backend-contracts/workSessions.d.ts +205 -0
  61. package/dist/internal/core/agent-profiles.d.ts +69 -0
  62. package/dist/internal/core/agent-resolver.d.ts +49 -0
  63. package/dist/internal/core/agent-session.d.ts +12 -0
  64. package/dist/internal/core/approval-format.d.ts +26 -0
  65. package/dist/internal/core/approval-manager.d.ts +43 -0
  66. package/dist/internal/core/approval-types.d.ts +74 -0
  67. package/dist/internal/core/artifacts.d.ts +262 -0
  68. package/dist/internal/core/attached-native-session.d.ts +174 -0
  69. package/dist/internal/core/attached-session-file-store.d.ts +3 -0
  70. package/dist/internal/core/base-url.d.ts +1 -0
  71. package/dist/internal/core/cli-metadata.d.ts +13 -0
  72. package/dist/internal/core/client.d.ts +486 -0
  73. package/dist/internal/core/completed-output-journal.d.ts +39 -0
  74. package/dist/internal/core/constants.d.ts +4 -0
  75. package/dist/internal/core/control-poller.d.ts +221 -0
  76. package/dist/internal/core/endpoint-client.d.ts +43 -0
  77. package/dist/internal/core/exclusive-json-file-store.d.ts +7 -0
  78. package/dist/internal/core/execution-environment-mode.d.ts +8 -0
  79. package/dist/internal/core/execution-environment.d.ts +55 -0
  80. package/dist/internal/core/gifs.d.ts +35 -0
  81. package/dist/internal/core/group-context.d.ts +25 -0
  82. package/dist/internal/core/host-runtime.d.ts +257 -0
  83. package/dist/internal/core/inbound-frame.d.ts +64 -0
  84. package/dist/internal/core/index.d.ts +107 -0
  85. package/dist/internal/core/local-runtime-catalog.d.ts +131 -0
  86. package/dist/internal/core/message-format.d.ts +13 -0
  87. package/dist/internal/core/native-session-interaction.d.ts +44 -0
  88. package/dist/internal/core/node-media.d.ts +6 -0
  89. package/dist/internal/core/policy.d.ts +2 -0
  90. package/dist/internal/core/provenance.d.ts +31 -0
  91. package/dist/internal/core/registration-cli.d.ts +40 -0
  92. package/dist/internal/core/registration-profile.d.ts +10 -0
  93. package/dist/internal/core/registration-session.d.ts +55 -0
  94. package/dist/internal/core/registration.d.ts +21 -0
  95. package/dist/internal/core/retry.d.ts +122 -0
  96. package/dist/internal/core/rtdb-rest.d.ts +145 -0
  97. package/dist/internal/core/runtime-cards.d.ts +331 -0
  98. package/dist/internal/core/runtime-descriptor.d.ts +75 -0
  99. package/dist/internal/core/runtime-endpoints.d.ts +26 -0
  100. package/dist/internal/core/runtime-heartbeat.d.ts +29 -0
  101. package/dist/internal/core/runtime-presentation.d.ts +35 -0
  102. package/dist/internal/core/runtime-request-manager.d.ts +284 -0
  103. package/dist/internal/core/runtime-state-publisher.d.ts +42 -0
  104. package/dist/internal/core/self-context.d.ts +61 -0
  105. package/dist/internal/core/silent-turn.d.ts +86 -0
  106. package/dist/internal/core/stream.d.ts +77 -0
  107. package/dist/internal/core/turn-output-controller.d.ts +69 -0
  108. package/dist/internal/core/turn-protocol.d.ts +33 -0
  109. package/dist/internal/core/turn-verbosity.d.ts +97 -0
  110. package/dist/internal/core/types.d.ts +1075 -0
  111. package/dist/internal/core/typing-status-publisher.d.ts +14 -0
  112. package/dist/internal/core/unified-diff.d.ts +35 -0
  113. package/dist/internal/core/work-session-provider.d.ts +29 -0
  114. package/dist/internal/core/workspace-discovery.d.ts +17 -0
  115. package/dist/internal/endpoint/artifact-images.d.ts +60 -0
  116. package/dist/internal/endpoint/artifact-reducer.d.ts +35 -0
  117. package/dist/internal/endpoint/artifact-views.d.ts +113 -0
  118. package/dist/internal/endpoint/artifacts.d.ts +75 -0
  119. package/dist/internal/endpoint/delivery.d.ts +47 -0
  120. package/dist/internal/endpoint/engine.d.ts +219 -0
  121. package/dist/internal/endpoint/ephemeral.d.ts +8 -0
  122. package/dist/internal/endpoint/events.d.ts +32 -0
  123. package/dist/internal/endpoint/external-inbound.d.ts +36 -0
  124. package/dist/internal/endpoint/handoff.d.ts +50 -0
  125. package/dist/internal/endpoint/history.d.ts +22 -0
  126. package/dist/internal/endpoint/image-generation-errors.d.ts +2 -0
  127. package/dist/internal/endpoint/inbound.d.ts +29 -0
  128. package/dist/internal/endpoint/index.d.ts +32 -0
  129. package/dist/internal/endpoint/media.d.ts +172 -0
  130. package/dist/internal/endpoint/migration.d.ts +50 -0
  131. package/dist/internal/endpoint/mls-crypto.d.ts +25 -0
  132. package/dist/internal/endpoint/mls-dev-client.d.ts +44 -0
  133. package/dist/internal/endpoint/mls-dev-device.d.ts +67 -0
  134. package/dist/internal/endpoint/mls-dev-groups.d.ts +114 -0
  135. package/dist/internal/endpoint/mls-dev-key-package-service.d.ts +33 -0
  136. package/dist/internal/endpoint/mls-dev-key-packages.d.ts +42 -0
  137. package/dist/internal/endpoint/mls-dev-transport.d.ts +37 -0
  138. package/dist/internal/endpoint/node-mls-custody-protocol.d.ts +24 -0
  139. package/dist/internal/endpoint/node-mls-custody.d.ts +15 -0
  140. package/dist/internal/endpoint/node.d.ts +7 -0
  141. package/dist/internal/endpoint/observe-query.d.ts +17 -0
  142. package/dist/internal/endpoint/portable-node-mls-custody.d.ts +23 -0
  143. package/dist/internal/endpoint/queue.d.ts +22 -0
  144. package/dist/internal/endpoint/recovery.d.ts +27 -0
  145. package/dist/internal/endpoint/retention.d.ts +7 -0
  146. package/dist/internal/endpoint/store.d.ts +22 -0
  147. package/dist/internal/endpoint/sync.d.ts +33 -0
  148. package/dist/internal/endpoint/transient-publisher.d.ts +8 -0
  149. package/dist/internal/endpoint/transport.d.ts +58 -0
  150. package/dist/media.d.ts +1 -1
  151. package/dist/media.js +42 -541
  152. package/dist/runner/runner.d.ts +37 -0
  153. package/dist/runner/types.d.ts +168 -0
  154. package/package.json +18 -5
  155. package/dist/attached-session.d.ts +0 -58
  156. package/dist/attached-session.js +0 -638
  157. package/dist/bounded-file-read.d.ts +0 -14
  158. package/dist/bounded-file-read.js +0 -34
  159. package/dist/canon-agent.d.ts +0 -238
  160. package/dist/canon-agent.js +0 -2534
  161. package/dist/debouncer.d.ts +0 -18
  162. package/dist/debouncer.js +0 -133
  163. package/dist/inbound-handoff.d.ts +0 -6
  164. package/dist/inbound-handoff.js +0 -17
  165. package/dist/managed-session-host.d.ts +0 -27
  166. package/dist/managed-session-host.js +0 -195
  167. package/dist/managed-session-setup.d.ts +0 -99
  168. package/dist/managed-session-setup.js +0 -234
  169. package/dist/realtime.d.ts +0 -62
  170. package/dist/realtime.js +0 -193
  171. package/dist/runtime-card.d.ts +0 -48
  172. package/dist/runtime-card.js +0 -64
  173. package/dist/session-manager.d.ts +0 -77
  174. package/dist/session-manager.js +0 -285
  175. package/dist/turn-streaming-request.d.ts +0 -17
  176. package/dist/turn-streaming-request.js +0 -22
  177. package/dist/turn-verbosity-option.d.ts +0 -33
  178. package/dist/turn-verbosity-option.js +0 -23
  179. package/dist/types.d.ts +0 -387
  180. package/dist/types.js +0 -1
  181. package/dist/work-session-coordination.d.ts +0 -21
  182. package/dist/work-session-coordination.js +0 -53
  183. package/dist/work-session-host.d.ts +0 -31
  184. package/dist/work-session-host.js +0 -617
  185. package/dist/work-session-interactions.d.ts +0 -12
  186. package/dist/work-session-interactions.js +0 -173
  187. package/dist/work-session-state.d.ts +0 -36
  188. package/dist/work-session-state.js +0 -62
@@ -0,0 +1,75 @@
1
+ import { type MlsDevEnrollmentDevice } from './mlsDevEnrollment.js';
2
+ export declare const MLS_DEV_CREDENTIAL_TTL_MS = 86400000;
3
+ export declare const MLS_DEV_CREDENTIAL_CHALLENGE_TTL_MS = 300000;
4
+ export declare const MLS_DEV_CREDENTIAL_MAX_BYTES = 8192;
5
+ export interface MlsDevCredentialClaims {
6
+ readonly version: 1;
7
+ readonly credentialId: string;
8
+ readonly issuer: 'canon-mls-dev-v1';
9
+ readonly device: MlsDevEnrollmentDevice;
10
+ readonly generation: number;
11
+ readonly issuedAtMs: number;
12
+ readonly expiresAtMs: number;
13
+ }
14
+ export interface MlsDevCredentialUnsigned {
15
+ readonly keyVersion: string;
16
+ readonly claims: MlsDevCredentialClaims;
17
+ }
18
+ export interface MlsDevCredentialChallenge {
19
+ readonly version: 1;
20
+ readonly challengeId: string;
21
+ readonly nonce: string;
22
+ readonly issuedAtMs: number;
23
+ readonly expiresAtMs: number;
24
+ readonly credential: MlsDevCredentialUnsigned;
25
+ }
26
+ export interface MlsDevCredentialBeginRequest {
27
+ readonly version: 1;
28
+ readonly deviceId: string;
29
+ readonly expectedCredentialGeneration: number;
30
+ }
31
+ export interface MlsDevCredentialCompleteRequest {
32
+ readonly version: 1;
33
+ readonly challengeId: string;
34
+ readonly proof: string;
35
+ }
36
+ export interface MlsDevCredentialReceipt {
37
+ readonly version: 1;
38
+ readonly authorization: 'device_credential_only';
39
+ readonly credential: string;
40
+ }
41
+ export interface MlsDevCredentialRevokeRequest {
42
+ readonly version: 1;
43
+ readonly deviceId: string;
44
+ }
45
+ export interface MlsDevCredentialRevocationReceipt {
46
+ readonly version: 1;
47
+ readonly authorization: 'device_revocation_only';
48
+ readonly deviceId: string;
49
+ readonly revokedAtMs: number;
50
+ }
51
+ export declare class MlsDevCredentialValidationError extends Error {
52
+ readonly code = "INVALID_MLS_DEV_CREDENTIAL";
53
+ constructor();
54
+ }
55
+ export declare function parseMlsDevIssuerKeyVersion(value: unknown): string;
56
+ export declare function parseMlsDevCredentialClaims(value: unknown): MlsDevCredentialClaims;
57
+ export declare function parseMlsDevCredentialUnsigned(value: unknown): MlsDevCredentialUnsigned;
58
+ export declare function parseMlsDevCredentialChallenge(value: unknown): MlsDevCredentialChallenge;
59
+ export declare function parseMlsDevCredentialBegin(value: unknown): MlsDevCredentialBeginRequest;
60
+ export declare function parseMlsDevCredentialComplete(value: unknown): MlsDevCredentialCompleteRequest;
61
+ export declare function parseMlsDevCredentialRevoke(value: unknown): MlsDevCredentialRevokeRequest;
62
+ export declare function parseMlsDevCredentialRevocationReceipt(value: unknown): MlsDevCredentialRevocationReceipt;
63
+ export declare function createMlsDevCredentialSigningInput(value: MlsDevCredentialUnsigned): string;
64
+ export declare function parseMlsDevCredentialSigningInput(value: unknown): MlsDevCredentialUnsigned;
65
+ export declare function encodeMlsDevCredentialToken(unsigned: MlsDevCredentialUnsigned, signature: string): string;
66
+ /** Structure only. Does not verify the signature, clock, revocation or authority. */
67
+ export declare function parseMlsDevCredentialToken(value: unknown): Readonly<{
68
+ unsigned: MlsDevCredentialUnsigned;
69
+ signature: string;
70
+ signingInput: string;
71
+ }>;
72
+ /** Receipt parsing validates credential structure only, never its authority. */
73
+ export declare function parseMlsDevCredentialReceipt(value: unknown): MlsDevCredentialReceipt;
74
+ /** Device Ed25519 signs these domain-separated bytes directly, without prehash. */
75
+ export declare function encodeMlsDevCredentialProof(value: MlsDevCredentialChallenge): Uint8Array;
@@ -0,0 +1,45 @@
1
+ import { type MlsDevEnrollmentDevice } from './mlsDevEnrollment.js';
2
+ /** Observations synchronize an intact device journal; they grant no authority. */
3
+ export declare const MLS_DEV_CREDENTIAL_RECONCILIATION_CHALLENGE_TTL_MS = 300000;
4
+ export declare const MLS_DEV_CREDENTIAL_RECONCILIATION_MAX_BYTES = 8192;
5
+ export interface MlsDevCredentialReconciliationBeginRequest {
6
+ readonly version: 1;
7
+ readonly deviceId: string;
8
+ readonly requestId: string;
9
+ readonly expectedCredentialGeneration: number;
10
+ }
11
+ export interface MlsDevCredentialReconciliationChallenge {
12
+ readonly version: 1;
13
+ readonly challengeId: string;
14
+ readonly requestId: string;
15
+ readonly nonce: string;
16
+ readonly device: MlsDevEnrollmentDevice;
17
+ readonly expectedCredentialGeneration: number;
18
+ readonly issuedAtMs: number;
19
+ readonly expiresAtMs: number;
20
+ }
21
+ export interface MlsDevCredentialReconciliationCompleteRequest {
22
+ readonly version: 1;
23
+ readonly challengeId: string;
24
+ readonly proof: string;
25
+ }
26
+ export interface MlsDevCredentialReconciliationReceipt {
27
+ readonly version: 1;
28
+ readonly authorization: 'credential_generation_observation_only';
29
+ readonly challenge: MlsDevCredentialReconciliationChallenge;
30
+ readonly observedCredentialGeneration: number;
31
+ readonly observedAtMs: number;
32
+ }
33
+ export declare class MlsDevCredentialReconciliationValidationError extends Error {
34
+ readonly code = "INVALID_MLS_DEV_CREDENTIAL_RECONCILIATION";
35
+ constructor();
36
+ }
37
+ export declare function parseMlsDevCredentialReconciliationBegin(value: unknown): MlsDevCredentialReconciliationBeginRequest;
38
+ export declare function parseMlsDevCredentialReconciliationChallenge(value: unknown): MlsDevCredentialReconciliationChallenge;
39
+ export declare function parseMlsDevCredentialReconciliationComplete(value: unknown): MlsDevCredentialReconciliationCompleteRequest;
40
+ /** Structure only. The caller must authenticate the server response separately.
41
+ * Neither this receipt nor its generation establishes credential/current status. */
42
+ export declare function parseMlsDevCredentialReconciliationReceipt(value: unknown): MlsDevCredentialReconciliationReceipt;
43
+ /** Fixed Ed25519, no prehash: domain || u32be(JSON byte length) || closed JSON.
44
+ * Signers reconstruct the canonical challenge; no caller-supplied bytes enter. */
45
+ export declare function encodeMlsDevCredentialReconciliationProof(value: MlsDevCredentialReconciliationChallenge): Uint8Array;
@@ -0,0 +1,51 @@
1
+ import { type MlsDevEnrollmentChallenge, type MlsDevEnrollmentPrincipal, type MlsDevEnrollmentResult } from './mlsDevEnrollment.js';
2
+ import { type MlsDevCredentialChallenge } from './mlsDevCredential.js';
3
+ import { type MlsDevCredentialReconciliationChallenge } from './mlsDevCredentialReconciliation.js';
4
+ /** Synthetic Dev native bridge contracts; never an issuer or membership grant. */
5
+ export declare const MLS_DEV_DEVICE_CONTEXT_MAX_BYTES = 2048;
6
+ export declare const MLS_DEV_DEVICE_COMMAND_MAX_BYTES = 16384;
7
+ export declare const MLS_DEV_DEVICE_WRAPPED_STATE_MAX_BYTES = 6144;
8
+ export interface MlsDevDeviceBinding {
9
+ readonly version: 1;
10
+ readonly environmentId: 'canon-dev-v1';
11
+ readonly principal: MlsDevEnrollmentPrincipal;
12
+ readonly installationId: string;
13
+ }
14
+ export interface MlsDevDeviceContext extends MlsDevDeviceBinding {
15
+ /** Current committed revision. The native result is wrapped at revision + 1. */
16
+ readonly revision: number;
17
+ }
18
+ export type MlsDevDeviceCommand = {
19
+ readonly op: 'create';
20
+ } | {
21
+ readonly op: 'enrollment_proof';
22
+ readonly challenge: MlsDevEnrollmentChallenge;
23
+ } | {
24
+ readonly op: 'credential_proof';
25
+ readonly challenge: MlsDevCredentialChallenge;
26
+ readonly registrationResult: MlsDevEnrollmentResult;
27
+ readonly expectedCredentialGeneration: number;
28
+ } | {
29
+ readonly op: 'credential_reconciliation_proof';
30
+ readonly challenge: MlsDevCredentialReconciliationChallenge;
31
+ readonly expectedCredentialGeneration: number;
32
+ };
33
+ export interface MlsDevDevicePayload {
34
+ readonly signaturePublicKey: string;
35
+ /** Present only for proof commands; no raw key or private state crosses JS. */
36
+ readonly proof?: string;
37
+ }
38
+ export interface MlsDevDevicePreparation {
39
+ readonly wrappedState: string;
40
+ readonly payload: MlsDevDevicePayload;
41
+ }
42
+ export declare class MlsDevDeviceCustodyValidationError extends Error {
43
+ readonly code = "INVALID_MLS_DEV_DEVICE_CUSTODY";
44
+ constructor();
45
+ }
46
+ export declare function parseMlsDevDeviceBinding(value: unknown): MlsDevDeviceBinding;
47
+ export declare function parseMlsDevDeviceContext(value: unknown): MlsDevDeviceContext;
48
+ /** The host supplies time and private state; neither is accepted from JavaScript. */
49
+ export declare function parseMlsDevDeviceCommand(value: unknown): MlsDevDeviceCommand;
50
+ /** Structural validation only: the native host authenticates wrapped state. */
51
+ export declare function parseMlsDevDevicePreparation(value: unknown, op: MlsDevDeviceCommand['op']): MlsDevDevicePreparation;
@@ -0,0 +1,74 @@
1
+ /** Dev device-key registration only. These records are not MLS issuer credentials. */
2
+ export declare const MLS_DEV_ENROLLMENT_CHALLENGE_TTL_MS = 300000;
3
+ export declare const MLS_DEV_ENROLLMENT_MAX_BYTES = 4096;
4
+ export type MlsDevEnrollmentPrincipal = {
5
+ readonly type: 'human';
6
+ readonly id: string;
7
+ } | {
8
+ readonly type: 'ai_agent';
9
+ readonly id: string;
10
+ readonly ownershipVersion: number;
11
+ };
12
+ export interface MlsDevEnrollmentBeginRequest {
13
+ readonly version: 1;
14
+ readonly installationId: string;
15
+ readonly signaturePublicKey: string;
16
+ }
17
+ export interface MlsDevEnrollmentCompleteRequest {
18
+ readonly version: 1;
19
+ readonly challengeId: string;
20
+ readonly proof: string;
21
+ }
22
+ export interface MlsDevEnrollmentChallenge {
23
+ readonly version: 1;
24
+ readonly challengeId: string;
25
+ readonly deviceId: string;
26
+ readonly environmentId: 'canon-dev-v1';
27
+ readonly principal: MlsDevEnrollmentPrincipal;
28
+ readonly installationId: string;
29
+ readonly ciphersuite: 1;
30
+ readonly signatureScheme: 'ed25519';
31
+ readonly signaturePublicKey: string;
32
+ readonly nonce: string;
33
+ readonly issuedAtMs: number;
34
+ readonly expiresAtMs: number;
35
+ }
36
+ export interface MlsDevEnrollmentDevice {
37
+ readonly version: 1;
38
+ readonly deviceId: string;
39
+ readonly environmentId: 'canon-dev-v1';
40
+ readonly principal: MlsDevEnrollmentPrincipal;
41
+ readonly installationId: string;
42
+ readonly ciphersuite: 1;
43
+ readonly signatureScheme: 'ed25519';
44
+ readonly signaturePublicKey: string;
45
+ readonly registeredAtMs: number;
46
+ }
47
+ export interface MlsDevEnrollmentResult {
48
+ readonly version: 1;
49
+ readonly authorization: 'registration_only';
50
+ readonly device: MlsDevEnrollmentDevice;
51
+ }
52
+ export declare class MlsDevEnrollmentValidationError extends Error {
53
+ readonly code = "INVALID_MLS_DEV_ENROLLMENT";
54
+ constructor();
55
+ }
56
+ /** Shared exact identity parsing for the separate protected Dev signing boundary. */
57
+ export declare function parseMlsDevEnrollmentPrincipal(value: unknown): MlsDevEnrollmentPrincipal;
58
+ export declare function parseMlsDevInstallationId(value: unknown): string;
59
+ export declare function parseMlsDevEnrollmentBegin(value: unknown): MlsDevEnrollmentBeginRequest;
60
+ export declare function parseMlsDevEnrollmentComplete(value: unknown): MlsDevEnrollmentCompleteRequest;
61
+ export declare function parseMlsDevEnrollmentChallenge(value: unknown): MlsDevEnrollmentChallenge;
62
+ export declare function parseMlsDevEnrollmentResult(value: unknown): MlsDevEnrollmentResult;
63
+ /** Canonical unpadded base64url; uses no Node-only or browser-only APIs. */
64
+ export declare function encodeCanonicalMlsBase64Url(bytes: Uint8Array): string;
65
+ export declare function decodeCanonicalMlsBase64Url(value: unknown, expectedBytes: number): Uint8Array;
66
+ /**
67
+ * Ed25519 signs these bytes directly (no extra prehash). Version 1 uses the
68
+ * domain below, u16 version, LP environment, u8 principal tag (human 0/agent 1),
69
+ * LP principal id, agent-only u64 ownership version, LP installation id, raw
70
+ * UUID device/challenge ids, u16 suite, raw key/nonce, u64 issued/expiry times.
71
+ * LP is u32 byte length followed by UTF-8; all integers are big endian.
72
+ * The signature scheme is fixed by the validated version/suite, not negotiated.
73
+ */
74
+ export declare function encodeMlsDevEnrollmentProof(value: MlsDevEnrollmentChallenge): Uint8Array;
@@ -0,0 +1,197 @@
1
+ import { MLS_DEV_TEXT_PROTOCOL, type MlsDevApplicationEnvelope, type MlsDevApplicationPreconditions } from './mlsDevApplication.js';
2
+ import { type MlsDevGroupFeedApplicationEntry } from './mlsDevGroupFeed.js';
3
+ import { type MlsDevEnrollmentDevice } from './mlsDevEnrollment.js';
4
+ import { type MlsDevKeyPackageClaimReceipt } from './mlsDevKeyPackages.js';
5
+ export declare const MLS_DEV_GROUP_ROSTER_MAX = 32;
6
+ export declare const MLS_DEV_GROUP_TLS_MAX_BYTES: number;
7
+ export declare const MLS_DEV_GROUP_CONTROL_MAX_BYTES: number;
8
+ export declare const MLS_DEV_GROUP_WRAPPED_MAX_BYTES: number;
9
+ export declare const MLS_DEV_GROUP_PREPARATION_MAX_BYTES: number;
10
+ export declare const MLS_DEV_GROUP_QUERY_MAX_BYTES: number;
11
+ export declare const MLS_DEV_GROUP_QUERY_MAX_CONTROLS = 4;
12
+ export interface MlsDevGroupCreateConversation {
13
+ readonly name: string;
14
+ readonly memberIds: readonly string[];
15
+ readonly mlsDev: {
16
+ readonly version: 1;
17
+ readonly conversationId: string;
18
+ readonly credential: string;
19
+ readonly protocol?: typeof MLS_DEV_TEXT_PROTOCOL;
20
+ };
21
+ }
22
+ export interface MlsDevGroupHead {
23
+ readonly sequence: number;
24
+ readonly epoch: number;
25
+ readonly hash: string;
26
+ }
27
+ export interface MlsDevGroupMarker {
28
+ readonly version: 1;
29
+ readonly groupId: string;
30
+ readonly head: MlsDevGroupHead;
31
+ }
32
+ export interface MlsDevGroupRosterEntry {
33
+ readonly device: MlsDevEnrollmentDevice;
34
+ readonly admissionId: string;
35
+ }
36
+ export interface MlsDevGroupPreconditions {
37
+ readonly membershipRevision: number;
38
+ readonly admissionId: string;
39
+ readonly targetAdmissionId: string | null;
40
+ }
41
+ export interface MlsDevGroupUnsignedControl {
42
+ readonly version: 1;
43
+ readonly environmentId: 'canon-dev-v1';
44
+ readonly kind: 'create' | 'add' | 'remove';
45
+ readonly conversationId: string;
46
+ readonly groupId: string;
47
+ readonly senderCredential: string;
48
+ readonly expectedHead: MlsDevGroupHead | null;
49
+ readonly epoch: number;
50
+ readonly preconditions: MlsDevGroupPreconditions;
51
+ readonly roster: readonly MlsDevGroupRosterEntry[];
52
+ readonly groupInfo: string | null;
53
+ readonly commit: string | null;
54
+ readonly welcome: string | null;
55
+ readonly keyPackageClaim: MlsDevKeyPackageClaimReceipt | null;
56
+ readonly removedDeviceId: string | null;
57
+ }
58
+ /** The device signs the closed public control plus the existing outer endpoint
59
+ * operation ID. Neither the signature nor an issuer credential grants membership. */
60
+ export interface MlsDevGroupControl extends MlsDevGroupUnsignedControl {
61
+ readonly proof: string;
62
+ }
63
+ export interface MlsDevGroupAcceptedControl {
64
+ readonly version: 1;
65
+ readonly authorization: 'group_control_only';
66
+ readonly operationId: string;
67
+ readonly control: MlsDevGroupControl;
68
+ readonly head: MlsDevGroupHead;
69
+ readonly acceptedAtMs: number;
70
+ readonly membershipRevision: number;
71
+ }
72
+ export interface MlsDevGroupQuery {
73
+ readonly version: 1;
74
+ readonly conversationId: string;
75
+ readonly credential: string;
76
+ readonly afterSequence: number;
77
+ readonly limit: number;
78
+ }
79
+ export interface MlsDevGroupQueryResult {
80
+ readonly version: 1;
81
+ readonly conversationId: string;
82
+ readonly marker: MlsDevGroupMarker | null;
83
+ readonly membershipRevision: number;
84
+ readonly admissionId: string;
85
+ readonly roster: readonly MlsDevGroupRosterEntry[];
86
+ readonly controls: readonly MlsDevGroupAcceptedControl[];
87
+ readonly nextSequence: number;
88
+ readonly hasMore: boolean;
89
+ /** True exposes only the caller's bounded removal history, never later rows. */
90
+ readonly terminal: boolean;
91
+ }
92
+ export interface MlsDevGroupContext {
93
+ readonly version: 1;
94
+ readonly environmentId: 'canon-dev-v1';
95
+ readonly conversationId: string;
96
+ readonly groupId: string;
97
+ readonly deviceId: string;
98
+ readonly installationId: string;
99
+ /** Local protected-state revision, distinct from server sequence and MLS epoch. */
100
+ readonly revision: number;
101
+ readonly protocol?: typeof MLS_DEV_TEXT_PROTOCOL;
102
+ }
103
+ export type MlsDevGroupCommand = {
104
+ readonly op: 'encrypt_text';
105
+ readonly operationId: string;
106
+ readonly messageId: string;
107
+ readonly credential: string;
108
+ readonly expectedHead: MlsDevGroupHead;
109
+ readonly preconditions: MlsDevApplicationPreconditions;
110
+ readonly text: string;
111
+ } | {
112
+ readonly op: 'process_application';
113
+ readonly entry: MlsDevGroupFeedApplicationEntry;
114
+ } | {
115
+ readonly op: 'create';
116
+ readonly operationId: string;
117
+ readonly credential: string;
118
+ readonly preconditions: MlsDevGroupPreconditions;
119
+ } | {
120
+ readonly op: 'add';
121
+ readonly operationId: string;
122
+ readonly credential: string;
123
+ readonly expectedHead: MlsDevGroupHead;
124
+ readonly preconditions: MlsDevGroupPreconditions;
125
+ readonly keyPackageClaim: MlsDevKeyPackageClaimReceipt;
126
+ } | {
127
+ readonly op: 'remove';
128
+ readonly operationId: string;
129
+ readonly credential: string;
130
+ readonly expectedHead: MlsDevGroupHead;
131
+ readonly preconditions: MlsDevGroupPreconditions;
132
+ readonly removedDeviceId: string;
133
+ } | {
134
+ readonly op: 'finalize';
135
+ readonly accepted: MlsDevGroupAcceptedControl;
136
+ } | {
137
+ readonly op: 'discard';
138
+ readonly operationId: string;
139
+ readonly control: MlsDevGroupControl;
140
+ } | {
141
+ readonly op: 'join';
142
+ readonly credential: string;
143
+ readonly accepted: MlsDevGroupAcceptedControl;
144
+ readonly keyPackageId: string;
145
+ } | {
146
+ readonly op: 'process';
147
+ readonly credential: string;
148
+ readonly accepted: MlsDevGroupAcceptedControl;
149
+ };
150
+ export type MlsDevGroupPayload = {
151
+ readonly kind: 'application';
152
+ readonly envelope: MlsDevApplicationEnvelope;
153
+ } | {
154
+ readonly kind: 'text';
155
+ readonly messageId: string;
156
+ readonly operationId: string;
157
+ readonly senderDeviceId: string;
158
+ readonly text: string;
159
+ readonly feedOrdinal: number;
160
+ } | {
161
+ readonly kind: 'discarded';
162
+ readonly operationId: string;
163
+ readonly head: MlsDevGroupHead | null;
164
+ } | {
165
+ readonly kind: 'control';
166
+ readonly control: MlsDevGroupControl;
167
+ } | {
168
+ readonly kind: 'applied';
169
+ readonly head: MlsDevGroupHead;
170
+ readonly roster: readonly MlsDevGroupRosterEntry[];
171
+ readonly removed: boolean;
172
+ readonly consumedKeyPackageId: string | null;
173
+ };
174
+ export interface MlsDevGroupPreparation {
175
+ readonly wrappedState: string;
176
+ readonly payload: MlsDevGroupPayload;
177
+ }
178
+ export declare class MlsDevGroupValidationError extends Error {
179
+ readonly code = "INVALID_MLS_DEV_GROUP";
180
+ constructor();
181
+ }
182
+ export declare function parseMlsDevGroupCreateConversation(value: unknown): MlsDevGroupCreateConversation;
183
+ export declare function parseMlsDevGroupHead(value: unknown): MlsDevGroupHead;
184
+ export declare function parseMlsDevGroupMarker(value: unknown): MlsDevGroupMarker;
185
+ export declare function parseMlsDevGroupRoster(value: unknown): readonly MlsDevGroupRosterEntry[];
186
+ export declare function parseMlsDevGroupPreconditions(value: unknown): MlsDevGroupPreconditions;
187
+ export declare function parseMlsDevGroupUnsignedControl(value: unknown): MlsDevGroupUnsignedControl;
188
+ export declare function parseMlsDevGroupControl(value: unknown): MlsDevGroupControl;
189
+ export declare function parseMlsDevGroupAcceptedControl(value: unknown): MlsDevGroupAcceptedControl;
190
+ export declare function parseMlsDevGroupQuery(value: unknown): MlsDevGroupQuery;
191
+ export declare function parseMlsDevGroupQueryResult(value: unknown): MlsDevGroupQueryResult;
192
+ export declare function parseMlsDevGroupContext(value: unknown): MlsDevGroupContext;
193
+ export declare function parseMlsDevGroupCommand(value: unknown): MlsDevGroupCommand;
194
+ export declare function parseMlsDevGroupPreparation(value: unknown): MlsDevGroupPreparation;
195
+ export declare function encodeMlsDevGroupControlProof(value: unknown, operationId: string): Uint8Array;
196
+ /** Hash these exact bytes with SHA-256 for the accepted control head. */
197
+ export declare function encodeMlsDevGroupHead(value: unknown, operationId: string): Uint8Array;
@@ -0,0 +1,47 @@
1
+ import { type MlsDevGroupAcceptedControl, type MlsDevGroupMarker, type MlsDevGroupRosterEntry } from './mlsDevGroup.js';
2
+ import { MLS_DEV_TEXT_PROTOCOL, type MlsDevApplicationEnvelope, type MlsDevApplicationReceipt } from './mlsDevApplication.js';
3
+ export declare const MLS_DEV_GROUP_FEED_MAX_ENTRIES = 4;
4
+ export declare const MLS_DEV_GROUP_FEED_MAX_BYTES: number;
5
+ export interface MlsDevGroupFeedControlEntry {
6
+ readonly version: 1;
7
+ readonly ordinal: number;
8
+ readonly kind: 'control';
9
+ readonly accepted: MlsDevGroupAcceptedControl;
10
+ }
11
+ export interface MlsDevGroupFeedApplicationEntry {
12
+ readonly version: 1;
13
+ readonly ordinal: number;
14
+ readonly kind: 'application';
15
+ readonly receipt: MlsDevApplicationReceipt;
16
+ readonly envelope: MlsDevApplicationEnvelope;
17
+ }
18
+ export type MlsDevGroupFeedEntry = MlsDevGroupFeedControlEntry | MlsDevGroupFeedApplicationEntry;
19
+ export interface MlsDevGroupFeedQuery {
20
+ readonly version: 1;
21
+ readonly conversationId: string;
22
+ readonly credential: string;
23
+ readonly afterOrdinal: number;
24
+ readonly limit: number;
25
+ }
26
+ export interface MlsDevGroupFeedResult {
27
+ readonly version: 1;
28
+ readonly protocol: typeof MLS_DEV_TEXT_PROTOCOL;
29
+ readonly conversationId: string;
30
+ readonly marker: MlsDevGroupMarker | null;
31
+ readonly membershipRevision: number;
32
+ readonly admissionId: string;
33
+ readonly roster: readonly MlsDevGroupRosterEntry[];
34
+ readonly minimumOrdinal: number | null;
35
+ readonly latestOrdinal: number;
36
+ readonly nextOrdinal: number;
37
+ readonly entries: readonly MlsDevGroupFeedEntry[];
38
+ readonly hasMore: boolean;
39
+ readonly terminal: boolean;
40
+ }
41
+ export declare class MlsDevGroupFeedValidationError extends Error {
42
+ readonly code = "INVALID_MLS_DEV_GROUP_FEED";
43
+ constructor();
44
+ }
45
+ export declare function parseMlsDevGroupFeedEntry(value: unknown): MlsDevGroupFeedEntry;
46
+ export declare function parseMlsDevGroupFeedQuery(value: unknown): MlsDevGroupFeedQuery;
47
+ export declare function parseMlsDevGroupFeedResult(value: unknown): MlsDevGroupFeedResult;
@@ -0,0 +1,42 @@
1
+ export declare const MLS_DEV_KEY_PACKAGE_COMMAND_MAX_BYTES = 16384;
2
+ export declare const MLS_DEV_KEY_PACKAGE_WIRE_MAX_BYTES = 16384;
3
+ export declare const MLS_DEV_KEY_PACKAGE_WRAPPED_STATE_MAX_BYTES: number;
4
+ export declare const MLS_DEV_KEY_PACKAGE_PREPARATION_MAX_BYTES: number;
5
+ /** Typed local preparation only; neither this command nor its output grants
6
+ * publication, room membership, or current device authority. */
7
+ export interface MlsDevKeyPackageCommand {
8
+ readonly version: 1;
9
+ readonly op: 'key_package';
10
+ readonly keyPackageId: string;
11
+ readonly credential: string;
12
+ }
13
+ export interface MlsDevKeyPackagePayload {
14
+ readonly version: 1;
15
+ readonly keyPackageId: string;
16
+ readonly deviceId: string;
17
+ readonly credentialId: string;
18
+ readonly credentialGeneration: number;
19
+ readonly ciphersuite: 1;
20
+ readonly signaturePublicKey: string;
21
+ /** Canonical base64url TLS MLSMessage carrying one KeyPackage. */
22
+ readonly keyPackage: string;
23
+ /** MLS RefHash, not a hash of the enclosing MLSMessage. */
24
+ readonly keyPackageRef: string;
25
+ /** The encoded MLS lifetime expressed as a half-open interval in milliseconds. */
26
+ readonly notBeforeMs: number;
27
+ readonly expiresAtMs: number;
28
+ }
29
+ export interface MlsDevKeyPackagePreparation {
30
+ readonly wrappedState: string;
31
+ readonly payload: MlsDevKeyPackagePayload;
32
+ }
33
+ export declare class MlsDevKeyPackageValidationError extends Error {
34
+ readonly code = "INVALID_MLS_DEV_KEY_PACKAGE";
35
+ constructor();
36
+ }
37
+ export declare function parseMlsDevKeyPackageId(value: unknown): string;
38
+ export declare function parseMlsDevKeyPackageCommand(value: unknown): MlsDevKeyPackageCommand;
39
+ export declare function parseMlsDevKeyPackagePayload(value: unknown): MlsDevKeyPackagePayload;
40
+ /** Structural validation. Only the native boundary can authenticate ciphertext
41
+ * or inspect the MLS leaf/signature; callers independently verify issuer trust. */
42
+ export declare function parseMlsDevKeyPackagePreparation(value: unknown): MlsDevKeyPackagePreparation;
@@ -0,0 +1,55 @@
1
+ export declare const MLS_DEV_KEY_PACKAGES_MAX_BYTES = 32768;
2
+ export declare const MLS_DEV_KEY_PACKAGE_TLS_MAX_BYTES = 16384;
3
+ export interface MlsDevKeyPackagePublishRequest {
4
+ readonly version: 1;
5
+ readonly requestId: string;
6
+ readonly keyPackage: string;
7
+ }
8
+ export interface MlsDevKeyPackagePublicationReceipt {
9
+ readonly version: 1;
10
+ readonly authorization: 'key_package_publication_only';
11
+ readonly requestId: string;
12
+ readonly keyPackageRef: string;
13
+ readonly deviceId: string;
14
+ readonly publishedAtMs: number;
15
+ readonly expiresAtMs: number;
16
+ }
17
+ export interface MlsDevKeyPackageClaimPreconditions {
18
+ readonly conversationId: string;
19
+ readonly membershipRevision: number;
20
+ readonly admissionId: string;
21
+ readonly targetAdmissionId: string;
22
+ }
23
+ export interface MlsDevKeyPackageClaimRequest {
24
+ readonly version: 1;
25
+ readonly requestId: string;
26
+ readonly claimantCredential: string;
27
+ readonly recipientDeviceId: string;
28
+ readonly preconditions: MlsDevKeyPackageClaimPreconditions;
29
+ }
30
+ /** A bounded, authenticated delivery receipt. It grants neither membership nor
31
+ * permission to accept the peer: the receiving MLS implementation must validate
32
+ * the package again when preparing Add. */
33
+ export interface MlsDevKeyPackageClaimReceipt {
34
+ readonly version: 1;
35
+ readonly authorization: 'key_package_claim_only';
36
+ readonly requestId: string;
37
+ readonly preconditions: MlsDevKeyPackageClaimPreconditions;
38
+ readonly claimantDeviceId: string;
39
+ readonly recipientDeviceId: string;
40
+ readonly keyPackageRef: string;
41
+ readonly keyPackage: string;
42
+ readonly claimedAtMs: number;
43
+ }
44
+ export declare class MlsDevKeyPackagesValidationError extends Error {
45
+ readonly code = "INVALID_MLS_DEV_KEY_PACKAGES";
46
+ constructor();
47
+ }
48
+ /** Structural encoding validation only; the server's OpenMLS validator parses
49
+ * and authenticates the actual TLS message before publication. */
50
+ export declare function parseMlsDevKeyPackageWire(value: unknown): string;
51
+ export declare function parseMlsDevKeyPackageClaimPreconditions(value: unknown): MlsDevKeyPackageClaimPreconditions;
52
+ export declare function parseMlsDevKeyPackagePublish(value: unknown): MlsDevKeyPackagePublishRequest;
53
+ export declare function parseMlsDevKeyPackagePublicationReceipt(value: unknown): MlsDevKeyPackagePublicationReceipt;
54
+ export declare function parseMlsDevKeyPackageClaim(value: unknown): MlsDevKeyPackageClaimRequest;
55
+ export declare function parseMlsDevKeyPackageClaimReceipt(value: unknown): MlsDevKeyPackageClaimReceipt;
@@ -0,0 +1,7 @@
1
+ export type ModerationStatus = 'active' | 'ejected';
2
+ /**
3
+ * The single definition of "this account is ejected", read off an
4
+ * already-fetched `moderationUsers/{id}` document. A missing document reads
5
+ * 'active'. Fetching is the caller's job — this package holds no Firestore handle.
6
+ */
7
+ export declare function readModerationStatus(data: unknown): ModerationStatus;
@@ -0,0 +1,63 @@
1
+ /** Existing server content readers. Classification is not encryption: these
2
+ * processors intentionally inspect plaintext in the current JSON release.
3
+ * Their input boundary must be redesigned before enabling encrypted rooms. */
4
+ export declare const PLAINTEXT_PROCESSORS: {
5
+ readonly preview: {
6
+ readonly current: "Read message/display text to derive conversation and notification previews.";
7
+ readonly beforeMls: "Derive on authorized endpoints; clear/reconcile deleted-message previews there.";
8
+ };
9
+ readonly push: {
10
+ readonly current: "Send visible titles and message previews to FCM/APNs.";
11
+ readonly beforeMls: "Use generic wake notifications or endpoint-decrypted notification extensions.";
12
+ };
13
+ readonly topic: {
14
+ readonly current: "Derive the initial topic from message text.";
15
+ readonly beforeMls: "Derive on an authorized endpoint and publish as encrypted conversation content.";
16
+ };
17
+ readonly forward: {
18
+ readonly current: "Read source content and copy plaintext attachments into the target room.";
19
+ readonly beforeMls: "Decrypt and re-encrypt on an authorized endpoint; keep server target admission checks.";
20
+ };
21
+ readonly message_validation: {
22
+ readonly current: "Inspect text, attachment descriptors and rich content before storing messages.";
23
+ readonly beforeMls: "Validate decrypted content on endpoints; retain bounded ciphertext/envelope checks on the server.";
24
+ };
25
+ readonly interaction_validation: {
26
+ readonly current: "Validate card/input/approval/plan render contracts and submitted responses.";
27
+ readonly beforeMls: "Validate content on authorized requesting/responding endpoints; retain public admission and lifecycle checks.";
28
+ };
29
+ readonly image_generation: {
30
+ readonly current: "Send prompts/source image bytes to Vertex and persist generated output.";
31
+ readonly beforeMls: "Require explicit provider disclosure and an authorized endpoint/processing participant; no silent server decryption.";
32
+ };
33
+ readonly media_assembly: {
34
+ readonly current: "Decode prepared JSON and combine ordered accepted blob descriptors into canonical publication.";
35
+ readonly beforeMls: "Pass an immutable encrypted envelope without interpreting or rewriting it; private blob metadata stays inside the payload.";
36
+ };
37
+ readonly streaming: {
38
+ readonly current: "Validate and publish plaintext live text, chunks and provisional content.";
39
+ readonly beforeMls: "Encrypt and validate streaming content on authorized endpoints with explicit ordering and key-epoch boundaries.";
40
+ };
41
+ readonly video_processing: {
42
+ readonly current: "Download plaintext video, normalize it and create a poster.";
43
+ readonly beforeMls: "Process on an endpoint or an explicitly authorized processing participant before encrypted upload.";
44
+ };
45
+ readonly owner_observation: {
46
+ readonly current: "Allow authenticated owners to inspect managed agent conversations without room membership.";
47
+ readonly beforeMls: "Explicitly enroll authorized owner keyholders or retire content observation; ownership alone supplies no decryption keys.";
48
+ };
49
+ readonly moderation_evidence: {
50
+ readonly current: "Accept user-selected plaintext message evidence for moderation.";
51
+ readonly beforeMls: "Design explicit selective disclosure/authenticity (including franking policy); never infer access to room keys.";
52
+ };
53
+ };
54
+ export type PlaintextProcessorName = keyof typeof PLAINTEXT_PROCESSORS;
55
+ export interface PlaintextProcessorInput<T> {
56
+ encoding: 'json';
57
+ value: T;
58
+ }
59
+ /** The callback is the actual content processor, not a telemetry hook. Keeping
60
+ * the codec explicit ensures an opaque body cannot accidentally be processed by
61
+ * the JSON path. This is not authorization; callers still enforce their domain
62
+ * policy and every enabled transport currently requires JSON. */
63
+ export declare function runPlaintextProcessor<T, R>(name: PlaintextProcessorName, input: PlaintextProcessorInput<T>, process: (value: T) => R): R;