@canonmsg/agent-sdk 11.2.1 → 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 -236
  160. package/dist/canon-agent.js +0 -2531
  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,114 @@
1
+ import { type MlsDevEnrollmentPrincipal, type MlsDevDeviceContext, type MlsDevGroupContext, type MlsDevGroupCommand, type MlsDevGroupPreparation, type MlsDevGroupHead, type MlsDevGroupRosterEntry, type MlsDevGroupQuery, type MlsDevGroupQueryResult, MLS_DEV_TEXT_PROTOCOL, type MlsDevGroupFeedQuery, type MlsDevGroupFeedResult, type EndpointOperationReceipt } from '../backend-contracts/index.js';
2
+ import type { EndpointOperation } from './engine.js';
3
+ import type { MlsDevDeviceClientContext, MlsDevDeviceClientOptions } from './mls-dev-client.js';
4
+ import { type MlsDevKeyPackageClient } from './mls-dev-key-packages.js';
5
+ import { type EndpointStoreTransaction } from './store.js';
6
+ import { EndpointError } from './transport.js';
7
+ import type { EndpointSyncPage, EndpointSyncOptions } from './sync.js';
8
+ export type MlsDevProtectedGroupPreparer = (identityContext: MlsDevDeviceContext, groupContext: MlsDevGroupContext, command: MlsDevGroupCommand, wrappedIdentity: string, wrappedGroup: string | null, wrappedKeyPackage: string | null) => Promise<MlsDevGroupPreparation>;
9
+ export interface MlsDevGroupView {
10
+ readonly status: 'pending' | 'active' | 'removed';
11
+ readonly conversationId: string;
12
+ readonly groupId: string;
13
+ readonly head: MlsDevGroupHead | null;
14
+ readonly roster: readonly MlsDevGroupRosterEntry[];
15
+ readonly pendingOperationId: string | null;
16
+ }
17
+ declare const roomRecoveryCodes: readonly ["MLS_DEV_GROUP_PREPARATION_FAILED", "MLS_DEV_GROUP_CREDENTIAL_EXPIRED", "MLS_DEV_CREDENTIAL_EXPIRED"];
18
+ export interface MlsDevGroupRecoveryFailure {
19
+ readonly version: 1;
20
+ readonly conversationId: string;
21
+ readonly code: typeof roomRecoveryCodes[number];
22
+ readonly lastAppliedSequence: number;
23
+ readonly observedAtMs: number;
24
+ }
25
+ /** Only these fixed room-local failures may let the shared stream continue. */
26
+ export declare function isMlsDevGroupRoomRecoveryFailure(error: unknown): error is EndpointError;
27
+ /** Derived exclusively from an atomically committed, native-verified application. */
28
+ export interface MlsDevVerifiedMessageBinding {
29
+ readonly version: 1;
30
+ readonly protocol: typeof MLS_DEV_TEXT_PROTOCOL;
31
+ readonly conversationId: string;
32
+ readonly messageId: string;
33
+ readonly groupId: string;
34
+ readonly operationId: string;
35
+ readonly feedOrdinal: number;
36
+ readonly envelopeHash: string;
37
+ readonly senderDeviceId: string;
38
+ readonly senderPrincipal: MlsDevEnrollmentPrincipal;
39
+ readonly head: MlsDevGroupHead;
40
+ readonly acceptedAtMs: number;
41
+ }
42
+ /** An online, fully caught-up audience snapshot for a model turn and its delivery guard. */
43
+ export interface MlsDevCurrentAudience {
44
+ readonly version: 1;
45
+ readonly protocol: typeof MLS_DEV_TEXT_PROTOCOL;
46
+ readonly conversationId: string;
47
+ readonly groupId: string;
48
+ readonly ownDeviceId: string;
49
+ readonly head: MlsDevGroupHead;
50
+ readonly membershipRevision: number;
51
+ readonly admissionId: string;
52
+ readonly roster: readonly MlsDevGroupRosterEntry[];
53
+ readonly feedOrdinal: number;
54
+ }
55
+ export interface MlsDevGroupClient {
56
+ createRoom(input: {
57
+ conversationId: string;
58
+ name: string;
59
+ memberIds: string[];
60
+ operationId?: string;
61
+ protocol?: typeof MLS_DEV_TEXT_PROTOCOL;
62
+ }): Promise<EndpointOperation>;
63
+ create(input: {
64
+ conversationId: string;
65
+ operationId?: string;
66
+ }): Promise<EndpointOperation>;
67
+ add(input: {
68
+ conversationId: string;
69
+ claimRequestId: string;
70
+ operationId?: string;
71
+ }): Promise<EndpointOperation>;
72
+ remove(input: {
73
+ conversationId: string;
74
+ removedDeviceId: string;
75
+ operationId?: string;
76
+ }): Promise<EndpointOperation>;
77
+ refresh(conversationId: string): Promise<MlsDevGroupView | undefined>;
78
+ read(conversationId: string): Promise<MlsDevGroupView | undefined>;
79
+ readVerifiedMessageBinding(input: {
80
+ conversationId: string;
81
+ messageId: string;
82
+ }): Promise<MlsDevVerifiedMessageBinding | undefined>;
83
+ readCurrentAudience(conversationId: string): Promise<MlsDevCurrentAudience>;
84
+ assertCurrentAudience(expected: MlsDevCurrentAudience): Promise<void>;
85
+ readRecoveryFailure(conversationId: string): Promise<MlsDevGroupRecoveryFailure | undefined>;
86
+ }
87
+ export interface MlsDevGroupBridge {
88
+ hash(value: string): Promise<string>;
89
+ hashBytes?(value: Uint8Array): Promise<string>;
90
+ resolveProtocol?(conversationId: string): Promise<typeof MLS_DEV_TEXT_PROTOCOL | undefined>;
91
+ queryFeed?(request: MlsDevGroupFeedQuery): Promise<MlsDevGroupFeedResult>;
92
+ query(request: MlsDevGroupQuery): Promise<MlsDevGroupQueryResult>;
93
+ queue(tx: EndpointStoreTransaction, operation: EndpointOperation): Promise<EndpointOperation>;
94
+ settle(tx: EndpointStoreTransaction, operation: EndpointOperation, receipt: EndpointOperationReceipt, acceptedEcho: boolean): Promise<EndpointOperation>;
95
+ afterReceipt(operation: EndpointOperation): Promise<void>;
96
+ submitted(operation: EndpointOperation): void;
97
+ lookup(operationId: string, installationId: string): Promise<EndpointOperationReceipt | null>;
98
+ }
99
+ /** Internal attachment: the engine supplies its existing queue, receipt reducer,
100
+ * event/recovery intake, store and lifetime. Native work never runs inside tx. */
101
+ export declare function createMlsDevGroups(options: MlsDevDeviceClientOptions, context: MlsDevDeviceClientContext, keyPackages: MlsDevKeyPackageClient | undefined, bridge: MlsDevGroupBridge): {
102
+ client: MlsDevGroupClient;
103
+ sendText(value: unknown, operationId: string, guardId?: string): Promise<EndpointOperation>;
104
+ queryTextHistory(conversationId: string, name: string, parameters: Record<string, unknown>): Promise<{
105
+ messages: Record<string, unknown>[];
106
+ nextBefore?: string | null;
107
+ missingMessageIds?: string[];
108
+ }>;
109
+ syncText(conversationId: string, options?: EndpointSyncOptions): Promise<EndpointSyncPage>;
110
+ isTextReady(conversationId: string): Promise<boolean>;
111
+ readAcceptedReceipt(operation: EndpointOperation): Promise<EndpointOperationReceipt | undefined>;
112
+ settleReceipt(operation: EndpointOperation, receipt: EndpointOperationReceipt): Promise<boolean>;
113
+ };
114
+ export {};
@@ -0,0 +1,33 @@
1
+ import { type MlsDevDeviceBinding, type MlsDevKeyPackagePayload, type MlsDevKeyPackagePublicationReceipt, type MlsDevKeyPackageClaimReceipt, type MlsDevKeyPackageClaimPreconditions } from '../backend-contracts/index.js';
2
+ import type { createMlsDevDeviceCoordinator, MlsDevKeyPackagePrerequisite } from './mls-dev-device.js';
3
+ import type { MlsDevDeviceClientContext, MlsDevDeviceClientOptions } from './mls-dev-client.js';
4
+ import { type EndpointStore, type EndpointStoreTransaction } from './store.js';
5
+ /** Historical authenticated receipt; neither view grants current room authority. */
6
+ export interface MlsDevKeyPackagePublicationView {
7
+ readonly status: 'published';
8
+ readonly receipt: MlsDevKeyPackagePublicationReceipt;
9
+ }
10
+ export interface MlsDevKeyPackageClaimView {
11
+ readonly status: 'claimed';
12
+ readonly receipt: MlsDevKeyPackageClaimReceipt;
13
+ }
14
+ export interface MlsDevKeyPackageClaimInput {
15
+ readonly requestId: string;
16
+ readonly recipientDeviceId: string;
17
+ readonly preconditions: MlsDevKeyPackageClaimPreconditions;
18
+ }
19
+ export interface MlsDevKeyPackageServiceClient {
20
+ /** Revalidates online, including when a historical receipt exists. */
21
+ publish(input: {
22
+ keyPackageId: string;
23
+ }): Promise<MlsDevKeyPackagePublicationView>;
24
+ claim(input: MlsDevKeyPackageClaimInput): Promise<MlsDevKeyPackageClaimView>;
25
+ readPublication(keyPackageId: string): Promise<MlsDevKeyPackagePublicationView | undefined>;
26
+ readClaim(requestId: string): Promise<MlsDevKeyPackageClaimView | undefined>;
27
+ }
28
+ /** Uses the same device lifetime/store. Explicit calls only; no second drain loop.
29
+ * Publication reads public committed TLS; no provider ciphertext enters a request. */
30
+ export declare function createMlsDevKeyPackageService(options: MlsDevDeviceClientOptions, context: MlsDevDeviceClientContext, store: EndpointStore, initialized: () => Promise<{
31
+ binding: MlsDevDeviceBinding;
32
+ device: ReturnType<typeof createMlsDevDeviceCoordinator>;
33
+ }>, readPrepared: (tx: EndpointStoreTransaction, binding: MlsDevDeviceBinding, id: string, current: MlsDevKeyPackagePrerequisite, historical?: boolean) => Promise<MlsDevKeyPackagePayload | undefined>): MlsDevKeyPackageServiceClient;
@@ -0,0 +1,42 @@
1
+ import { type MlsDevDeviceBinding, type MlsDevDeviceContext, type MlsDevKeyPackageCommand, type MlsDevKeyPackagePayload, type MlsDevKeyPackagePreparation } from '../backend-contracts/index.js';
2
+ import { type MlsDevKeyPackagePrerequisite } from './mls-dev-device.js';
3
+ import type { MlsDevDeviceClientContext, MlsDevDeviceClientOptions } from './mls-dev-client.js';
4
+ import { type MlsDevKeyPackageServiceClient } from './mls-dev-key-package-service.js';
5
+ export type { MlsDevKeyPackagePublicationView, MlsDevKeyPackageClaimView, MlsDevKeyPackageClaimInput } from './mls-dev-key-package-service.js';
6
+ import { type EndpointStoreTransaction } from './store.js';
7
+ export type MlsDevProtectedKeyPackagePreparer = (context: MlsDevDeviceContext, command: MlsDevKeyPackageCommand, wrappedIdentityState: string) => Promise<MlsDevKeyPackagePreparation>;
8
+ /** A committed local preparation, never a current publication authorization. */
9
+ export interface MlsDevKeyPackageView {
10
+ readonly status: 'prepared';
11
+ readonly payload: MlsDevKeyPackagePayload;
12
+ }
13
+ export interface MlsDevKeyPackageClient extends MlsDevKeyPackageServiceClient {
14
+ prepare(input: {
15
+ keyPackageId: string;
16
+ }): Promise<MlsDevKeyPackageView>;
17
+ /** Returns exact committed bytes, including after credential expiry/renewal.
18
+ * Requires a committed registration/credential and no local revocation. */
19
+ read(keyPackageId: string): Promise<MlsDevKeyPackageView | undefined>;
20
+ }
21
+ /** Consumed identities survive active-inventory removal until logout resets the
22
+ * installation. A regenerated RefHash must never resurrect a used private key. */
23
+ export declare function assertMlsDevKeyPackageUnconsumed(tx: EndpointStoreTransaction, id: string, ref?: string): Promise<void>;
24
+ export interface MlsDevPreparedKeyPackageSnapshot {
25
+ readonly binding: MlsDevDeviceBinding;
26
+ readonly command: MlsDevKeyPackageCommand;
27
+ readonly payload: MlsDevKeyPackagePayload;
28
+ readonly wrappedState: string;
29
+ readonly fingerprint: string;
30
+ }
31
+ /** Internal private-provider capture for Welcome, never exported on Endpoint. */
32
+ export declare function captureMlsDevPreparedKeyPackage(tx: EndpointStoreTransaction, binding: MlsDevDeviceBinding, id: string, current: MlsDevKeyPackagePrerequisite): Promise<MlsDevPreparedKeyPackageSnapshot | undefined>;
33
+ /** The caller has already verified the accepted Welcome and group snapshot.
34
+ * Consumption shares that transaction; failure rolls back private state erasure. */
35
+ export declare function consumeMlsDevPreparedKeyPackage(tx: EndpointStoreTransaction, captured: MlsDevPreparedKeyPackageSnapshot, current: MlsDevKeyPackagePrerequisite, control: {
36
+ conversationId: string;
37
+ groupId: string;
38
+ controlSequence: number;
39
+ }): Promise<void>;
40
+ /** Internal endpoint attachment. Uses the device's existing store/lifetime and
41
+ * has no timer, signer generation or automatic inventory replenishment. */
42
+ export declare function createMlsDevKeyPackageClient(options: MlsDevDeviceClientOptions, context: MlsDevDeviceClientContext): MlsDevKeyPackageClient;
@@ -0,0 +1,37 @@
1
+ import { type MlsDevKeyPackagePublishRequest, type MlsDevKeyPackagePublicationReceipt, type MlsDevKeyPackageClaimRequest, type MlsDevKeyPackageClaimReceipt, type MlsDevEnrollmentBeginRequest, type MlsDevEnrollmentCompleteRequest, type MlsDevEnrollmentChallenge, type MlsDevEnrollmentResult, type MlsDevCredentialBeginRequest, type MlsDevCredentialCompleteRequest, type MlsDevCredentialChallenge, type MlsDevCredentialReceipt, type MlsDevCredentialRevokeRequest, type MlsDevCredentialRevocationReceipt, type MlsDevCredentialReconciliationBeginRequest, type MlsDevCredentialReconciliationCompleteRequest, type MlsDevCredentialReconciliationChallenge, type MlsDevCredentialReconciliationReceipt } from '../backend-contracts/index.js';
2
+ import { type EndpointCredentials } from './transport.js';
3
+ export interface MlsDevKeyPackageTransport {
4
+ publish(request: MlsDevKeyPackagePublishRequest, signal?: AbortSignal): Promise<MlsDevKeyPackagePublicationReceipt>;
5
+ claim(request: MlsDevKeyPackageClaimRequest, signal?: AbortSignal): Promise<MlsDevKeyPackageClaimReceipt>;
6
+ }
7
+ /** Authenticated Dev registration/issuance only; no room or history authority. */
8
+ export interface MlsDevDeviceTransport {
9
+ readonly keyPackages?: MlsDevKeyPackageTransport;
10
+ beginEnrollment(request: MlsDevEnrollmentBeginRequest, signal?: AbortSignal): Promise<MlsDevEnrollmentChallenge>;
11
+ completeEnrollment(request: MlsDevEnrollmentCompleteRequest, signal?: AbortSignal): Promise<MlsDevEnrollmentResult>;
12
+ beginCredential(request: MlsDevCredentialBeginRequest, signal?: AbortSignal): Promise<MlsDevCredentialChallenge>;
13
+ completeCredential(request: MlsDevCredentialCompleteRequest, signal?: AbortSignal): Promise<MlsDevCredentialReceipt>;
14
+ beginReconciliation(request: MlsDevCredentialReconciliationBeginRequest, signal?: AbortSignal): Promise<MlsDevCredentialReconciliationChallenge>;
15
+ completeReconciliation(request: MlsDevCredentialReconciliationCompleteRequest, signal?: AbortSignal): Promise<MlsDevCredentialReconciliationReceipt>;
16
+ revokeCredential(request: MlsDevCredentialRevokeRequest, signal?: AbortSignal): Promise<MlsDevCredentialRevocationReceipt>;
17
+ verifyGenerationObservation(receipt: MlsDevCredentialReconciliationReceipt): boolean;
18
+ }
19
+ export interface MlsDevDeviceHttpOptions {
20
+ enrollmentUrl: string;
21
+ credentialUrl: string;
22
+ reconciliationUrl: string;
23
+ keyPackagesUrl?: string;
24
+ /** Explicit origins trusted to receive the endpoint's login/API-key bearer. */
25
+ trustedOrigins: readonly string[];
26
+ /** Synthetic tests only: literal 127.0.0.1 or [::1], never DNS/remote HTTP. */
27
+ allowSyntheticLoopbackHttp?: boolean;
28
+ }
29
+ /** Internal constructor. The ordinary endpoint and Dev capability share credentials,
30
+ * fetch and ownership settings; the Dev deadline also covers auth and body reads. */
31
+ export declare function createMlsDevDeviceHttpTransport(config: MlsDevDeviceHttpOptions, dependencies: {
32
+ environmentId: string;
33
+ credentials: EndpointCredentials;
34
+ fetch: typeof globalThis.fetch;
35
+ timeoutMs?: number;
36
+ ownershipHeaders(): Record<string, string>;
37
+ }): MlsDevDeviceTransport;
@@ -0,0 +1,24 @@
1
+ import type { MlsDevProtectedPreparer } from './mls-dev-device.js';
2
+ import type { MlsDevProtectedKeyPackagePreparer } from './mls-dev-key-packages.js';
3
+ import type { MlsDevProtectedGroupPreparer } from './mls-dev-groups.js';
4
+ export interface NodeMlsDevCustody {
5
+ readonly prepareProtected: MlsDevProtectedPreparer;
6
+ readonly prepareProtectedKeyPackage: MlsDevProtectedKeyPackagePreparer;
7
+ readonly prepareProtectedGroup: MlsDevProtectedGroupPreparer;
8
+ /** Cancels owned processes; never destroys custody or committed wrapped state. */
9
+ close(): Promise<void>;
10
+ }
11
+ export declare class NodeMlsDevCustodyError extends Error {
12
+ readonly code = "MLS_NODE_CUSTODY_REJECTED";
13
+ constructor();
14
+ }
15
+ export declare const MAX_INPUT: number, MAX_OUTPUT: number;
16
+ export declare function rejected(): never;
17
+ export declare function requireValue(value: unknown): asserts value;
18
+ export declare function record(value: unknown, fields: string[]): Record<string, unknown>;
19
+ export declare function sealed(value: unknown, maximum: number, nullable?: boolean): string | null;
20
+ export declare function frame(operation: number, values: readonly (string | null)[]): Buffer;
21
+ /** JSON.parse supplies grammar validation; this pass rejects duplicate object
22
+ * names (including escaped aliases) before the closed contract parsers run. */
23
+ export declare function parseJson(bytes: Buffer): unknown;
24
+ export declare function typedNodeMlsDevCustody(job: <T>(work: (signal: AbortSignal) => Promise<T>) => Promise<T>, invoke: (operation: number, values: readonly (string | null)[], signal: AbortSignal) => Promise<unknown>, close: () => Promise<void>): NodeMlsDevCustody;
@@ -0,0 +1,15 @@
1
+ import { type NodeMlsDevCustody } from './node-mls-custody-protocol.js';
2
+ export interface NodeMlsDevCustodyOptions {
3
+ /** Canonical absolute path to the installed, signed .app (no symlink components). */
4
+ readonly bundlePath: string;
5
+ /** SHA-256 of the adjacent <bundlePath>.manifest.json; provision independently. */
6
+ readonly manifestSha256: string;
7
+ readonly executableSha256: string;
8
+ readonly bundleIdentifier: string;
9
+ readonly teamIdentifier: string;
10
+ /** Whole preparation, including signature checks and initialization. Default 30s. */
11
+ readonly timeoutMs?: number;
12
+ readonly signal?: AbortSignal;
13
+ }
14
+ export { NodeMlsDevCustodyError, type NodeMlsDevCustody } from './node-mls-custody-protocol.js';
15
+ export declare function createNodeMlsDevCustody(options: NodeMlsDevCustodyOptions): NodeMlsDevCustody;
@@ -0,0 +1,7 @@
1
+ import type { EndpointStore } from './store.js';
2
+ export declare function createNodeEndpointStore(options: {
3
+ directory: string;
4
+ namespace: string;
5
+ }): Promise<EndpointStore>;
6
+ export { createNodeMlsDevCustody, NodeMlsDevCustodyError, type NodeMlsDevCustody, type NodeMlsDevCustodyOptions } from './node-mls-custody.js';
7
+ export { createPortableNodeMlsDevCustody, type PortableNodeMlsDevCustody, type PortableNodeMlsDevCustodyOptions } from './portable-node-mls-custody.js';
@@ -0,0 +1,17 @@
1
+ export interface EndpointQueryObserver {
2
+ observe<T>(query: string, parameters: Record<string, unknown>, listener: (value: T) => void, onError?: (error: unknown) => void): () => void;
3
+ invalidate(affected?: (query: string, parameters: Record<string, unknown>) => boolean): void;
4
+ /** Re-arm idle subscriptions when the connection changes their polling cadence. */
5
+ reschedule(): void;
6
+ close(): void;
7
+ }
8
+ /**
9
+ * One temporary polling subscription per query per endpoint. UI components only
10
+ * subscribe; the endpoint owns fetching, coalescing, retry and lifecycle. A
11
+ * durable change-feed can call invalidate without changing any consumers.
12
+ */
13
+ export declare function createEndpointQueryObserver(options: {
14
+ query: <T>(query: string, parameters: Record<string, unknown>) => Promise<T>;
15
+ intervalMs?: number;
16
+ getPollInterval?: () => number;
17
+ }): EndpointQueryObserver;
@@ -0,0 +1,23 @@
1
+ import { type MlsDevDeviceContext } from '../backend-contracts/index.js';
2
+ import { type NodeMlsDevCustody } from './node-mls-custody-protocol.js';
3
+ export interface PortableNodeMlsDevCustodyOptions {
4
+ readonly executablePath: string;
5
+ readonly executableSha256: string;
6
+ /** Independently provisioned public identity, vault location and issuer pins. */
7
+ readonly configurationPath: string;
8
+ readonly configurationSha256: string;
9
+ /** An operator-managed credential mount, separate from the vault. JS opens but never reads it. */
10
+ readonly secretSource: {
11
+ readonly kind: 'managed-file';
12
+ readonly path: string;
13
+ };
14
+ readonly timeoutMs?: number;
15
+ readonly signal?: AbortSignal;
16
+ }
17
+ export interface PortableNodeMlsDevCustody extends NodeMlsDevCustody {
18
+ /** Deliberate first provisioning only. An existing or missing-on-restart vault is never replaced. */
19
+ provision(context: MlsDevDeviceContext): Promise<void>;
20
+ }
21
+ /** Portable software custody. Qualification currently covers Unix descriptor
22
+ * inheritance only; Windows must get its own ACL/handle acceptance before use. */
23
+ export declare function createPortableNodeMlsDevCustody(options: PortableNodeMlsDevCustodyOptions): PortableNodeMlsDevCustody;
@@ -0,0 +1,22 @@
1
+ import type { EndpointInboundRecord, EndpointIntent, EndpointOperation } from './engine.js';
2
+ import type { EndpointStoreTransaction } from './store.js';
3
+ /** `provider`: a job the server runs inline for as long as its provider takes; unordered, and never awaited by a drain. */
4
+ export type EndpointOrdering = 'conversation' | 'message' | 'signal' | 'artifact' | 'independent' | 'provider';
5
+ /** Derived here, never an adapter override. Unknown/state-changing actions stay ordered. */
6
+ export declare function endpointIntentOrdering(intent: EndpointIntent): EndpointOrdering;
7
+ /** Transaction sequence is ordering metadata, never an idempotency identity. */
8
+ export declare function nextQueueSequence(tx: EndpointStoreTransaction, name: string): Promise<number>;
9
+ export declare function orderOperation(tx: EndpointStoreTransaction, operation: EndpointOperation): Promise<EndpointOperation>;
10
+ export declare const outboxKey: (operation: EndpointOperation) => string;
11
+ /** Per-work lane of non-terminal shared-work operations, in authoring order. */
12
+ export declare const artifactOrderingPrefix: (conversationId: string, artifactId: string) => string;
13
+ export declare const operationOrderingKey: (operation: EndpointOperation) => string | undefined;
14
+ export declare function trackOperationOrder(tx: EndpointStoreTransaction, operation: EndpointOperation): Promise<void>;
15
+ export declare function enqueueOperation(tx: EndpointStoreTransaction, operation: EndpointOperation): Promise<void>;
16
+ export declare function removeOperationOutbox(tx: EndpointStoreTransaction, operation: EndpointOperation): Promise<void>;
17
+ export declare function settleOperationOrder(tx: EndpointStoreTransaction, operation: EndpointOperation): Promise<void>;
18
+ export declare function isFirstOrderedOperation(tx: EndpointStoreTransaction, operation: EndpointOperation): Promise<boolean>;
19
+ export declare const inboundReadyKey: (record: EndpointInboundRecord) => string;
20
+ export declare function orderInbound(tx: EndpointStoreTransaction, record: EndpointInboundRecord): Promise<EndpointInboundRecord>;
21
+ export declare function enqueueInbound(tx: EndpointStoreTransaction, record: EndpointInboundRecord): Promise<void>;
22
+ export declare function removeInboundReady(tx: EndpointStoreTransaction, record: EndpointInboundRecord): Promise<void>;
@@ -0,0 +1,27 @@
1
+ import type { EndpointEventObserver, EndpointTransportEvent } from './events.js';
2
+ import type { EndpointSyncOptions, EndpointSyncPage } from './sync.js';
3
+ import type { EndpointStore } from './store.js';
4
+ export interface EndpointRecoveryOptions {
5
+ intervalMs?: number;
6
+ onError?(error: unknown, conversationId?: string): void;
7
+ }
8
+ export interface EndpointRecoveryBaseline {
9
+ cutoverAt: string;
10
+ migrationId: string;
11
+ }
12
+ /** One account scan and recovery queue, independent of runtime/session count. */
13
+ export declare function createEndpointRecovery(input: {
14
+ store: EndpointStore;
15
+ ready(): Promise<unknown>;
16
+ query<T>(name: string, parameters: Record<string, unknown>): Promise<T>;
17
+ sync(conversationId: string, options?: EndpointSyncOptions): Promise<EndpointSyncPage>;
18
+ isProtocolReady?(conversationId: string): Promise<boolean | undefined>;
19
+ observe(listener: (event: EndpointTransportEvent) => void, hooks: EndpointEventObserver): () => void;
20
+ }): {
21
+ getBaseline(): Promise<EndpointRecoveryBaseline | undefined>;
22
+ configureBaseline(config: EndpointRecoveryBaseline): Promise<void>;
23
+ start(options?: EndpointRecoveryOptions): () => void;
24
+ refresh: () => Promise<void>;
25
+ assertReady(conversationId: string): Promise<void>;
26
+ close(): Promise<void>;
27
+ };
@@ -0,0 +1,7 @@
1
+ import type { EndpointOperation } from './engine.js';
2
+ import type { EndpointStore } from './store.js';
3
+ export declare function compactOperation(operation: EndpointOperation): EndpointOperation;
4
+ /** Age out duplicate plaintext, retaining small idempotency tombstones. */
5
+ export declare function compactExpiredPayloads(store: EndpointStore, clock: number): Promise<void>;
6
+ /** Logout erases local plaintext without turning uncertain external work into new work. */
7
+ export declare function eraseEndpointPlaintext(store: EndpointStore): Promise<void>;
@@ -0,0 +1,22 @@
1
+ /** Transaction callbacks may be retried. They must perform only store operations. */
2
+ export interface EndpointStoreTransaction {
3
+ get<T>(key: string): Promise<T | undefined>;
4
+ put<T>(key: string, value: T): Promise<void>;
5
+ delete(key: string): Promise<void>;
6
+ scan<T>(prefix: string, options?: {
7
+ after?: string;
8
+ limit?: number;
9
+ }): Promise<Array<{
10
+ key: string;
11
+ value: T;
12
+ }>>;
13
+ }
14
+ export interface EndpointStore {
15
+ transaction<T>(work: (transaction: EndpointStoreTransaction) => Promise<T>): Promise<T>;
16
+ close(): Promise<void>;
17
+ }
18
+ export declare function copyJson<T>(value: T): T;
19
+ /** Tests and explicitly ephemeral callers only. Production endpoints supply durable storage. */
20
+ export declare function createMemoryEndpointStore(): EndpointStore;
21
+ /** Shared canonical serialization for prepared payloads and legacy fingerprints. */
22
+ export { canonicalEndpointJson as canonicalJson } from '../backend-contracts/index.js';
@@ -0,0 +1,33 @@
1
+ import type { EndpointEvent } from '../backend-contracts/index.js';
2
+ import { type EndpointStore } from './store.js';
3
+ export interface EndpointSyncPage {
4
+ changes: EndpointEvent[];
5
+ cursor: string | null;
6
+ hasMore: boolean;
7
+ admissionId: string | null;
8
+ bootstrap: boolean;
9
+ reset?: boolean;
10
+ }
11
+ export interface EndpointSyncOptions {
12
+ /** Required on first use. Checkpoint is only for history proven not to be new work. */
13
+ bootstrap?: 'receive' | 'checkpoint';
14
+ limit?: number;
15
+ /** Preserve a sticky pause instead of silently creating a new admission baseline. */
16
+ pauseOnAdmissionChange?: boolean;
17
+ /** Explicitly choose a fresh boundary after a sticky pause. Ignored otherwise. */
18
+ resumeAdmissionChange?: 'checkpoint';
19
+ }
20
+ export declare function createConversationSynchronizer(input: {
21
+ store: EndpointStore;
22
+ query<T>(query: string, parameters: Record<string, unknown>): Promise<T>;
23
+ ready(): Promise<unknown>;
24
+ clock(): number;
25
+ invalidate(conversationId: string): void;
26
+ admitRecoveredMessages?: boolean;
27
+ preparationGeneration?(): number;
28
+ /** Apply ordered MLS controls through the same lifecycle before app recovery. */
29
+ prepareProtocol?(conversationId: string): Promise<boolean>;
30
+ syncProtocol?(conversationId: string, options: EndpointSyncOptions): Promise<EndpointSyncPage | undefined>;
31
+ }): ((conversationId: string, options?: EndpointSyncOptions) => Promise<EndpointSyncPage>) & {
32
+ close(): Promise<void>;
33
+ };
@@ -0,0 +1,8 @@
1
+ import type { Endpoint } from './engine.js';
2
+ /** Transient writes are coalesced here; they never enter the durable outbox. */
3
+ export declare function createEndpointTransientPublisher(endpoint: Pick<Endpoint, 'publish'>, clock?: () => number): {
4
+ pulseTyping(conversationId: string): void;
5
+ stopTyping: (conversationId: string) => void;
6
+ setPresence(state: "online" | "offline" | "hidden"): void;
7
+ close(): void;
8
+ };
@@ -0,0 +1,58 @@
1
+ import { type EndpointContentLane, type EndpointOperationRequest, type EndpointOperationReceipt, type EndpointCapabilities } from '../backend-contracts/index.js';
2
+ import { type EndpointTransportEvent, type EndpointEventFamily } from './events.js';
3
+ import { type MlsDevDeviceHttpOptions, type MlsDevDeviceTransport } from './mls-dev-transport.js';
4
+ export declare class EndpointError extends Error {
5
+ readonly status: number;
6
+ readonly code: string;
7
+ readonly retryable: boolean;
8
+ readonly operationId?: string;
9
+ readonly retryAfterMs?: number;
10
+ constructor(message: string, options?: {
11
+ status?: number;
12
+ code?: string;
13
+ retryable?: boolean;
14
+ operationId?: string;
15
+ retryAfterMs?: number;
16
+ });
17
+ }
18
+ /** HTTP failures and SSE close frames carry the same error details. A changed
19
+ * authorization reconnects through authentication; a rejected handshake stops. */
20
+ export declare function decodeEndpointError(value: unknown, options?: {
21
+ status?: number;
22
+ retryAfter?: string | null;
23
+ stream?: boolean;
24
+ }): EndpointError;
25
+ export interface EndpointCredentials {
26
+ getToken(forceRefresh?: boolean): Promise<string>;
27
+ }
28
+ /** Shared transport enforces the reviewed lane inventory in both directions.
29
+ * Content remains JSON; field classification never grants authorization. */
30
+ export declare function validateEndpointContentBoundary(lane: EndpointContentLane, name: string, payload: unknown): void;
31
+ export interface EndpointTransport {
32
+ mlsDevDevice?: MlsDevDeviceTransport;
33
+ capabilities?(): Promise<EndpointCapabilities>;
34
+ execute(request: EndpointOperationRequest, signal?: AbortSignal): Promise<EndpointOperationReceipt>;
35
+ getOperation(operationId: string, installationId: string, signal?: AbortSignal): Promise<EndpointOperationReceipt | null>;
36
+ query<T>(query: string, parameters: Record<string, unknown>, signal?: AbortSignal): Promise<T>;
37
+ publish<T>(action: string, body: Record<string, unknown>, signal?: AbortSignal): Promise<T>;
38
+ events?(options: {
39
+ lastEventId?: string;
40
+ signal: AbortSignal;
41
+ families?: EndpointEventFamily[];
42
+ principalScopes?: string[];
43
+ onConnected?(): void;
44
+ }): AsyncIterable<EndpointTransportEvent>;
45
+ }
46
+ export declare function createHttpEndpointTransport(options: {
47
+ baseUrl: string;
48
+ environmentId: string;
49
+ credentials: EndpointCredentials;
50
+ fetch?: typeof globalThis.fetch;
51
+ timeoutMs?: number;
52
+ streamUrl?: string;
53
+ /** Identifies one logical subscriber within its authenticated principal.
54
+ * Resolve once per transport; independent tabs/devices must use distinct IDs. */
55
+ streamId?: string | (() => string | Promise<string>);
56
+ ownershipVersion?: number | (() => number | undefined);
57
+ mlsDevDevice?: MlsDevDeviceHttpOptions;
58
+ }): EndpointTransport;
package/dist/media.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { CanonClient, type CanonReplyContext, type CanonMessage, type MediaAttachment, type ResumableMediaUploadResult, type SendMessageOptions } from '@canonmsg/core';
1
+ import { CanonClient, type CanonReplyContext, type CanonMessage, type MediaAttachment, type ResumableMediaUploadResult, type SendMessageOptions } from './internal/core/index.js';
2
2
  export interface MaterializeMediaOptions {
3
3
  agentId: string;
4
4
  conversationId: string;