@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,486 @@
1
+ import { type CanonMessage, type CanonConversation, type CanonUnifiedDiff, type CanonContact, type CanonConversationsPage, type CanonConversationsPageOptions, type CanonMessagesPage, type CanonResolveAdmissionResult, type ResolveAdmissionTargetInput, type AppendMemoStreamChunkOptions, type CanonVoiceSession, type CanonVoiceSessionToken, type CreateMemoStreamOptions, type CreateMemoStreamResult, type CreateVoiceSessionOptions, type MemoStreamChunkAck, type AgentContext, type AddMemberResult, type CreateGroupResult, type MediaAttachment, type SendMessageOptions, type CreateGroupOptions, type JoinVoiceSessionOptions, type RegistrationStatus, type AgentOriginDeclaration, type SetRuntimeTurnOptions, type SetStreamingOptions, type UpdateAgentProfileOptions } from './types.js';
2
+ import type { CanonGifSearchOptions, CanonGifSearchResponse } from './gifs.js';
3
+ import type { RuntimeInputKind } from './runtime-cards.js';
4
+ import type { ApprovalNativeRequestMetadata, ApprovalRequestCategory, ApprovalRequestDetail, ApprovalRisk, SessionRule } from './approval-types.js';
5
+ import type { RuntimeInputAnswers, RuntimeInputChoice, RuntimeInputNativeMetadata, RuntimeInputQuestion, RuntimeCardNativeMetadata, RuntimeCardV1 } from './runtime-cards.js';
6
+ import type { InboundDisposition } from './turn-protocol.js';
7
+ import { type CanonVerbWireRequest, type CanonVerbWireResponse, type CommunicateInput, type CommunicateResult, type DiscoverAgentsInput, type DiscoverAgentsResult, type SendToInput } from '../backend-contracts/index.js';
8
+ import type { WorkSessionRuntimeRegistration, WorkSessionRuntimeState, WorkSessionHeartbeatInput, WorkSessionRuntimeAuth, WorkSessionClaimInput, WorkSessionClaimResult, CompleteWorkSessionInput, WorkSessionRequest, ReleaseWorkSessionBindingInput, WorkSessionReportInput } from '../backend-contracts/index.js';
9
+ import { type EndpointOperation } from '../endpoint/index.js';
10
+ import { type CanonClientEndpointOptions, type CanonEndpoint } from './endpoint-client.js';
11
+ import { type CanonConversationArtifacts } from './artifacts.js';
12
+ export interface ResumableMediaUploadSession {
13
+ uploadId: string;
14
+ /** Private bearer capability returned by Cloud Storage. Do not persist or log it. */
15
+ uploadUrl: string;
16
+ expiresAt: string;
17
+ sizeBytes: number;
18
+ mimeType: string;
19
+ }
20
+ export interface ResumableMediaUploadResult {
21
+ uploadId: string;
22
+ url: string;
23
+ status?: 'processing' | 'ready' | 'failed';
24
+ attachment: MediaAttachment;
25
+ }
26
+ /**
27
+ * Agent-facing ergonomics over the shared endpoint engine. Authentication and
28
+ * operator registration remain outside the conversation protocol.
29
+ */
30
+ export declare class CanonClient {
31
+ private workSessionRequest;
32
+ registerWorkSessionRuntime(input: WorkSessionRuntimeRegistration): Promise<WorkSessionRuntimeState>;
33
+ heartbeatWorkSessionRuntime(input: WorkSessionHeartbeatInput): Promise<WorkSessionRuntimeState>;
34
+ releaseWorkSessionRuntime(input: WorkSessionRuntimeAuth): Promise<{
35
+ released: boolean;
36
+ }>;
37
+ claimWorkSessionRequest(input: WorkSessionClaimInput): Promise<WorkSessionClaimResult>;
38
+ completeWorkSessionRequest(input: CompleteWorkSessionInput): Promise<WorkSessionRequest>;
39
+ releaseWorkSessionBinding(input: ReleaseWorkSessionBindingInput): Promise<WorkSessionRuntimeState>;
40
+ reportWorkSessionDetails(input: WorkSessionReportInput): Promise<{
41
+ reportedAt: number;
42
+ }>;
43
+ private baseUrl;
44
+ private apiKey;
45
+ private endpointOptions;
46
+ private endpointLease?;
47
+ /** Out-of-protocol HTTP (identity, profile, keys); resolved per call so the seam stays late-bound. */
48
+ private readonly http;
49
+ constructor(apiKey: string, baseUrl?: string, options?: CanonClientEndpointOptions);
50
+ /** All durable communication shares this installation's engine and journal. */
51
+ getEndpoint(): Promise<CanonEndpoint>;
52
+ /** Last-seen snapshots and participant names for shared work, per conversation. */
53
+ private readonly artifactMemory;
54
+ /**
55
+ * Shared work bound to one conversation. Cheap to create: replay state lives
56
+ * in the endpoint and "last seen" snapshots on this client, so every room
57
+ * object for the same conversation shares them.
58
+ */
59
+ artifacts(conversationId: string): CanonConversationArtifacts;
60
+ /** Seed participant names used by shared-work views (for example an inbound message's sender). */
61
+ rememberParticipantNames(conversationId: string, names: Record<string, string | null | undefined>): void;
62
+ close(): Promise<void>;
63
+ getFileMediaPipeline(fetchImpl?: typeof fetch): Promise<import("../endpoint/index.js").EndpointMediaPipeline<string>>;
64
+ waitForOperation<T>(operationId: string, options?: {
65
+ signal?: AbortSignal;
66
+ timeoutMs?: number;
67
+ }): Promise<T>;
68
+ private endpointAction;
69
+ private endpointQuery;
70
+ private endpointPublish;
71
+ private authHeaders;
72
+ getAuthToken(): Promise<{
73
+ token: string;
74
+ expiresAt: string;
75
+ agentId: string;
76
+ }>;
77
+ getAgentMe(): Promise<AgentContext>;
78
+ discoverAgents(input?: DiscoverAgentsInput): Promise<DiscoverAgentsResult>;
79
+ updateAgentProfile(options: UpdateAgentProfileOptions): Promise<void>;
80
+ rotateAgentKey(): Promise<{
81
+ apiKey: string;
82
+ }>;
83
+ /**
84
+ * List conversations. Called with no options this is the historical request —
85
+ * no query string, every conversation the agent belongs to, most recent
86
+ * first. Passing `limit`/`before` opts into paging; use
87
+ * `getConversationsPage` when you need the cursor back.
88
+ */
89
+ getConversations(options?: CanonConversationsPageOptions): Promise<CanonConversation[]>;
90
+ /**
91
+ * One page of conversations plus the cursor to continue from. Pages are cut
92
+ * in conversation-id order; keep calling with `before: page.nextBefore` until
93
+ * `nextBefore` is null. Do not stop on an empty page and do not derive the
94
+ * cursor from the returned array — the array is recency-sorted within the
95
+ * page and hidden conversations are filtered after the page is read.
96
+ */
97
+ getConversationsPage(options?: CanonConversationsPageOptions): Promise<CanonConversationsPage>;
98
+ private fetchConversationsPage;
99
+ /** Targeted membership read; session hosts must not poll the entire account. */
100
+ getConversation(conversationId: string): Promise<CanonConversation | null>;
101
+ /** Stream and snapshot producers share the engine's monotonic roster merge. */
102
+ rememberConversation(conversation: CanonConversation): Promise<CanonConversation>;
103
+ getMessages(conversationId: string, limit?: number, before?: string): Promise<CanonMessage[]>;
104
+ getMessagesPage(conversationId: string, limit?: number, before?: string): Promise<CanonMessagesPage>;
105
+ /** Read one explicitly referenced message without extending ordinary history. */
106
+ getMessage(conversationId: string, messageId: string): Promise<CanonMessage | null>;
107
+ sendMessage(conversationId: string, text: string, options?: SendMessageOptions, delivery?: {
108
+ operationId?: string;
109
+ }): Promise<{
110
+ messageId: string;
111
+ }>;
112
+ /** Inspect a trusted reply's durable delivery without rebuilding its body. */
113
+ getMessageOperation(conversationId: string, messageId: string, delivery?: {
114
+ operationId?: string;
115
+ }): Promise<EndpointOperation | undefined>;
116
+ /** Core's chunker records all ordered message intents before publishing any part. */
117
+ prepareMessageGroup(conversationId: string, messageId: string, parts: Array<{
118
+ text: string;
119
+ options: SendMessageOptions;
120
+ }>, delivery?: {
121
+ operationId?: string;
122
+ signal?: AbortSignal;
123
+ replacesOperationId?: string;
124
+ proactive?: boolean;
125
+ }): Promise<{
126
+ id: string;
127
+ sendPart(index: number, options?: {
128
+ signal?: AbortSignal;
129
+ timeoutMs?: number;
130
+ }): Promise<{
131
+ messageId: string;
132
+ }>;
133
+ }>;
134
+ /** Publish a native-formatted ordered plan through the same endpoint engine. */
135
+ sendMessageGroup(conversationId: string, messageId: string | null, parts: Array<{
136
+ text: string;
137
+ options: SendMessageOptions;
138
+ }>, delivery?: {
139
+ proactive?: boolean;
140
+ }): Promise<{
141
+ messageId: string;
142
+ messageIds: string[];
143
+ }>;
144
+ cancelMessageGroup(id: string): Promise<void>;
145
+ /**
146
+ * Send outside an active inbound turn through the canonical policy boundary.
147
+ * Harness reply paths should keep using sendMessage; schedulers, notifications,
148
+ * and other detached work must use this method.
149
+ */
150
+ sendProactiveMessage(conversationId: string, text: string, options?: SendToInput['messageOptions'], delivery?: {
151
+ operationId?: string;
152
+ }): Promise<{
153
+ messageId: string;
154
+ conversationId: string;
155
+ }>;
156
+ /** Inspect the original durable publication before renewing an expired attachment.
157
+ * Pending or uncertain operations must be reconciled before any replacement.
158
+ * A replacement operation ID belongs in the caller's durable product journal;
159
+ * retain the same messageId and use it only after a definitive no-effect rejection.
160
+ */
161
+ getProactiveMessageOperation(conversationId: string, messageId: string, delivery?: {
162
+ operationId?: string;
163
+ }): Promise<EndpointOperation | undefined>;
164
+ /** Reconcile an existing publication without rebuilding or resubmitting its body. */
165
+ waitForProactiveMessage(operationId: string, options?: {
166
+ signal?: AbortSignal;
167
+ timeoutMs?: number;
168
+ }): Promise<{
169
+ messageId: string;
170
+ conversationId: string;
171
+ }>;
172
+ /**
173
+ * Execute a canonical verb over the wire contract (canon.verb-wire.v1).
174
+ * Bindings build the request with projectVerbIntentToWire; the endpoint
175
+ * validates the envelope, executes with the json codec, and answers 501
176
+ * for mls bodies until the codec lands (docs/design/e2ee-mls.md).
177
+ */
178
+ executeVerbWire(request: CanonVerbWireRequest, delivery?: {
179
+ operationId?: string;
180
+ }): Promise<CanonVerbWireResponse>;
181
+ /** Internal transport for the compact public `communicate` operation. */
182
+ private sendTo;
183
+ /**
184
+ * Communicate across Canon conversations through one compact operation.
185
+ *
186
+ * This is intentionally a small, principal-neutral projection over the
187
+ * canonical verb layer: policy and admission remain server-owned, and
188
+ * callers cannot provide runtime/session configuration or trusted turn
189
+ * context.
190
+ */
191
+ communicate(input: CommunicateInput): Promise<CommunicateResult>;
192
+ private executeCommunication;
193
+ /** Create a group. Direct conversations must go through `communicate`. */
194
+ createGroup(options: CreateGroupOptions): Promise<CreateGroupResult>;
195
+ createMemoStream(options: CreateMemoStreamOptions & {
196
+ streamId?: string;
197
+ }): Promise<CreateMemoStreamResult>;
198
+ appendMemoStreamChunk(conversationId: string, streamId: string, options: AppendMemoStreamChunkOptions): Promise<MemoStreamChunkAck>;
199
+ finalizeMemoStream(conversationId: string, streamId: string, messageId: string): Promise<void>;
200
+ abortMemoStream(conversationId: string, streamId: string): Promise<void>;
201
+ createVoiceSession(options: CreateVoiceSessionOptions): Promise<CanonVoiceSessionToken>;
202
+ getVoiceSessionState(conversationId: string, sessionId: string): Promise<{
203
+ session: CanonVoiceSession;
204
+ }>;
205
+ declineVoiceSession(conversationId: string, sessionId: string): Promise<void>;
206
+ joinVoiceSession(conversationId: string, sessionId: string, options?: Omit<JoinVoiceSessionOptions, 'conversationId'>): Promise<CanonVoiceSessionToken>;
207
+ endVoiceSession(conversationId: string, sessionId: string): Promise<void>;
208
+ listContacts(): Promise<CanonContact[]>;
209
+ getContact(contactId: string): Promise<CanonContact | null>;
210
+ deleteContact(contactId: string): Promise<void>;
211
+ blockUser(userId: string): Promise<void>;
212
+ unblockUser(userId: string): Promise<void>;
213
+ resolveAdmission(target: string | ResolveAdmissionTargetInput): Promise<CanonResolveAdmissionResult>;
214
+ uploadMedia(conversationId: string, data: string, mimeType: string, fileName?: string, options?: {
215
+ attachmentId?: string;
216
+ }): Promise<{
217
+ url: string;
218
+ attachment: MediaAttachment;
219
+ }>;
220
+ /**
221
+ * Start a private direct-to-Storage upload. The returned upload URL is a
222
+ * short-lived bearer capability; send exactly `sizeBytes` raw bytes to it,
223
+ * then call `finalizeResumableMediaUpload`.
224
+ */
225
+ createResumableMediaUpload(conversationId: string, sizeBytes: number, mimeType: string, fileName?: string): Promise<ResumableMediaUploadSession>;
226
+ /** Promote validated pending bytes into a canonical Canon attachment. */
227
+ finalizeResumableMediaUpload(uploadId: string): Promise<ResumableMediaUploadResult>;
228
+ getFeaturedGifs(options?: Omit<CanonGifSearchOptions, 'query'>): Promise<CanonGifSearchResponse>;
229
+ searchGifs(query: string, options?: Omit<CanonGifSearchOptions, 'query'>): Promise<CanonGifSearchResponse>;
230
+ updateTopic(conversationId: string, topic: string): Promise<void>;
231
+ deleteMessage(conversationId: string, messageId: string): Promise<void>;
232
+ updateMessageDisposition(conversationId: string, messageId: string, inboundDisposition: InboundDisposition): Promise<void>;
233
+ markAsRead(conversationId: string): Promise<void>;
234
+ leaveConversation(conversationId: string): Promise<void>;
235
+ react(conversationId: string, messageId: string, emoji: string): Promise<void>;
236
+ updateConversationName(conversationId: string, name: string): Promise<void>;
237
+ addMember(conversationId: string, userId: string): Promise<AddMemberResult>;
238
+ removeMember(conversationId: string, userId: string): Promise<void>;
239
+ setStreaming(options: SetStreamingOptions): Promise<void>;
240
+ clearStreaming(conversationId: string): Promise<void>;
241
+ setRuntimeTurn(options: SetRuntimeTurnOptions): Promise<void>;
242
+ setTyping(conversationId: string, typing: boolean, status?: 'thinking' | 'typing'): Promise<void>;
243
+ peekRuntimeSignal(conversationId: string): Promise<Record<string, unknown>>;
244
+ /** Acknowledge exactly the signal observed before the native handler ran. */
245
+ acknowledgeRuntimeSignal(conversationId: string, signalId: string): Promise<Record<string, unknown>>;
246
+ consumeRuntimeSignal(conversationId: string): Promise<Record<string, unknown>>;
247
+ listRuntimePrimitives(conversationId: string): Promise<{
248
+ requests: Record<string, {
249
+ value: unknown;
250
+ revision: string;
251
+ }>;
252
+ }>;
253
+ consumeRuntimePrimitive(conversationId: string, requestId: string, expectedRevision: string): Promise<{
254
+ status: 'consumed' | 'missing' | 'mismatch';
255
+ }>;
256
+ /** Runtime adapters can inspect only their own projection in an admitted room. */
257
+ getRuntimeProjection(family: 'agent-runtime' | 'agent-session' | 'turn-state' | 'runtime-info' | 'runtime-activity' | 'streaming', conversationId?: string): Promise<unknown>;
258
+ publishRuntimeSession(conversationId: string, mode: 'patch' | 'clear', state?: Record<string, unknown>): Promise<void>;
259
+ publishRuntimeInfo(conversationId: string, mode: 'replace' | 'patch' | 'clear', info?: Record<string, unknown>): Promise<void>;
260
+ publishRuntimeActivity(conversationId: string, input: {
261
+ mode: 'upsert';
262
+ item: Record<string, unknown>;
263
+ } | {
264
+ mode: 'remove';
265
+ itemId: string;
266
+ } | {
267
+ mode: 'clear';
268
+ }): Promise<void>;
269
+ patchRuntimeStreaming(conversationId: string, patch: Record<string, unknown>): Promise<void>;
270
+ createRuntimeInputRequest(options: {
271
+ conversationId: string;
272
+ inputId: string;
273
+ kind: RuntimeInputKind;
274
+ expiresAt: number;
275
+ title?: string;
276
+ prompt?: string;
277
+ choices?: RuntimeInputChoice[];
278
+ questions?: RuntimeInputQuestion[];
279
+ secretName?: string;
280
+ native?: RuntimeInputNativeMetadata;
281
+ sensitive?: boolean;
282
+ responseUserId?: string;
283
+ turnId?: string;
284
+ }): Promise<{
285
+ success: true;
286
+ inputId: string;
287
+ expiresAt: number;
288
+ messageId?: string;
289
+ }>;
290
+ consumeRuntimeInputResponse(options: {
291
+ conversationId: string;
292
+ inputId: string;
293
+ cancel?: boolean;
294
+ }): Promise<{
295
+ status: 'pending';
296
+ inputId: string;
297
+ expiresAt?: number;
298
+ } | {
299
+ status: 'submitted';
300
+ inputId: string;
301
+ kind: RuntimeInputKind;
302
+ value: string;
303
+ answers?: RuntimeInputAnswers;
304
+ } | {
305
+ status: 'cancelled';
306
+ inputId: string;
307
+ kind: RuntimeInputKind;
308
+ } | {
309
+ status: 'timeout';
310
+ inputId: string;
311
+ kind: RuntimeInputKind;
312
+ }>;
313
+ createRuntimeApprovalRequest(options: {
314
+ conversationId: string;
315
+ approvalId?: string;
316
+ toolName: string;
317
+ toolSummary: string;
318
+ expiresAt: number;
319
+ responseUserId?: string;
320
+ riskLevel?: 'normal' | 'destructive';
321
+ risk?: ApprovalRisk;
322
+ category?: ApprovalRequestCategory;
323
+ runtimeId?: string;
324
+ turnId?: string;
325
+ native?: ApprovalNativeRequestMetadata;
326
+ details?: ApprovalRequestDetail[];
327
+ /** File-change preview rendered inline on the approval card. Truncate via truncateUnifiedDiff before sending. */
328
+ diff?: CanonUnifiedDiff;
329
+ allowSessionRule?: boolean;
330
+ }): Promise<{
331
+ success: true;
332
+ approvalId: string;
333
+ expiresAt: number;
334
+ messageId?: string;
335
+ responseUserId: string;
336
+ allowSessionRule: boolean;
337
+ }>;
338
+ consumeRuntimeApprovalResponse(options: {
339
+ conversationId: string;
340
+ approvalId: string;
341
+ cancel?: boolean;
342
+ }): Promise<{
343
+ status: 'pending';
344
+ approvalId: string;
345
+ expiresAt?: number;
346
+ } | {
347
+ status: 'allow';
348
+ approvalId: string;
349
+ sessionRule?: SessionRule;
350
+ respondedBy?: string;
351
+ } | {
352
+ status: 'deny';
353
+ approvalId: string;
354
+ sessionRule?: SessionRule;
355
+ respondedBy?: string;
356
+ } | {
357
+ status: 'timeout';
358
+ approvalId: string;
359
+ }>;
360
+ createRuntimeCardRequest(options: {
361
+ conversationId: string;
362
+ card: RuntimeCardV1;
363
+ cardId?: string;
364
+ expiresAt?: number;
365
+ responseUserId?: string;
366
+ runtimeId?: string;
367
+ turnId?: string;
368
+ native?: RuntimeCardNativeMetadata;
369
+ }): Promise<{
370
+ success: true;
371
+ cardId: string;
372
+ messageId: string;
373
+ /** True when the card has actions and a response is pending; false for display cards. */
374
+ interactive: boolean;
375
+ /** Effective human responder selected by Canon. */
376
+ responseUserId?: string;
377
+ /** Present only for interactive cards. */
378
+ expiresAt?: number;
379
+ }>;
380
+ consumeRuntimeCardResponse(options: {
381
+ conversationId: string;
382
+ cardId: string;
383
+ cancel?: boolean;
384
+ }): Promise<{
385
+ status: 'pending';
386
+ cardId: string;
387
+ expiresAt?: number;
388
+ } | {
389
+ status: 'submitted';
390
+ cardId: string;
391
+ actionId?: string;
392
+ values?: Record<string, unknown>;
393
+ respondedBy?: string;
394
+ } | {
395
+ status: 'cancelled';
396
+ cardId: string;
397
+ respondedBy?: string;
398
+ } | {
399
+ status: 'timeout';
400
+ cardId: string;
401
+ }>;
402
+ /**
403
+ * Create a server-owned plan-approval interaction.
404
+ *
405
+ * Seeds the pending node + attention + runtime-card state and authors the
406
+ * `plan_approval` card message, mirroring the other `createRuntime*Request`
407
+ * spine methods. Hosts resolve it through `consumeRuntimePlanResponse()` so
408
+ * the canonical pending state, rather than a timeline receipt, is authoritative.
409
+ */
410
+ createRuntimePlanRequest(options: {
411
+ conversationId: string;
412
+ planId?: string;
413
+ title?: string;
414
+ summary?: string;
415
+ body?: string;
416
+ allowedPrompts?: ReadonlyArray<{
417
+ tool: string;
418
+ prompt: string;
419
+ }>;
420
+ responseUserId?: string;
421
+ turnId?: string;
422
+ expiresAt?: number;
423
+ }): Promise<{
424
+ success: true;
425
+ planId: string;
426
+ expiresAt: number;
427
+ messageId?: string;
428
+ interactive: boolean;
429
+ }>;
430
+ consumeRuntimePlanResponse(options: {
431
+ conversationId: string;
432
+ planId: string;
433
+ cancel?: boolean;
434
+ }): Promise<{
435
+ status: 'pending';
436
+ planId: string;
437
+ expiresAt?: number;
438
+ } | {
439
+ status: 'approve' | 'revise' | 'reject';
440
+ planId: string;
441
+ feedback?: string;
442
+ grantedPrompts?: Array<{
443
+ tool: string;
444
+ prompt: string;
445
+ }>;
446
+ receiptId?: string;
447
+ } | {
448
+ status: 'cancelled';
449
+ planId: string;
450
+ } | {
451
+ status: 'timeout';
452
+ planId: string;
453
+ }>;
454
+ updateRuntimeStatus(options: {
455
+ runtime: string;
456
+ hostMode?: boolean;
457
+ runtimeDescriptor?: Record<string, unknown>;
458
+ online?: true;
459
+ } | {
460
+ online: false;
461
+ }): Promise<void>;
462
+ static register(baseUrl: string | undefined, body: {
463
+ name: string;
464
+ description: string;
465
+ ownerPhone: string;
466
+ developerInfo: string;
467
+ avatarUrl?: string;
468
+ clientType?: string;
469
+ origin?: AgentOriginDeclaration;
470
+ requestedAgentId?: string;
471
+ localRegistrationId?: string;
472
+ }): Promise<{
473
+ requestId: string;
474
+ pollToken?: string;
475
+ }>;
476
+ static checkStatus(baseUrl: string | undefined, requestId: string, pollToken?: string): Promise<RegistrationStatus>;
477
+ static ackRegistrationStatus(baseUrl: string | undefined, requestId: string, pollToken?: string): Promise<void>;
478
+ }
479
+ export declare class CanonApiError extends Error {
480
+ /** Reconcile this durable operation instead of allocating another action. */
481
+ operationId?: string;
482
+ status: number;
483
+ retryAfter?: string | null;
484
+ code?: string;
485
+ constructor(status: number, body: string, headers?: Headers);
486
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * A runtime's finished turn output, saved before it is published so a host that
3
+ * dies between the native result and Canon delivery replays exactly that
4
+ * output on restart instead of losing it, and never runs the turn again.
5
+ */
6
+ export interface CompletedOutputRecordBase {
7
+ version: 1;
8
+ turnId: string;
9
+ conversationId: string;
10
+ createdAt: string;
11
+ /** Who could read the conversation when the output was produced. */
12
+ audience: {
13
+ memberIds: string[];
14
+ membershipRevision?: number;
15
+ } | null;
16
+ }
17
+ export interface CompletedOutputJournal<T extends CompletedOutputRecordBase> {
18
+ /** Durably save a record; saving the identical record again is a no-op, a different one is refused. */
19
+ save(record: T): void;
20
+ /** Every saved record, oldest first, after recovering writes a crash interrupted. */
21
+ list(): T[];
22
+ remove(turnId: string): void;
23
+ }
24
+ /**
25
+ * Atomic, fsynced, one file per turn under a folder keyed by `scope` (runtime,
26
+ * environment, principal, ownership generation, installation), so a transferred
27
+ * agent or another installation never sees these plaintext records.
28
+ */
29
+ export declare function createCompletedOutputJournal<T extends CompletedOutputRecordBase>(directory: string, scope: unknown, options: {
30
+ /** Names the runtime in errors, e.g. `Codex`. */
31
+ label: string;
32
+ /** Runtime-specific shape check beyond the base fields; false is an invalid record. */
33
+ validate?: (record: T) => boolean;
34
+ }): CompletedOutputJournal<T>;
35
+ /** A new delivery after restart must not silently adopt a changed audience. */
36
+ export declare function assertCompletedOutputAudience(record: Pick<CompletedOutputRecordBase, 'audience'>, current: {
37
+ memberIds: string[];
38
+ membershipRevision?: number;
39
+ } | null, label: string): void;
@@ -0,0 +1,4 @@
1
+ export declare const DEFAULT_BASE_URL: string;
2
+ export declare const DEFAULT_STREAM_URL: string;
3
+ export declare const DEFAULT_RTDB_URL: string;
4
+ export declare const FIREBASE_WEB_API_KEY: string;