@canonmsg/agent-sdk 12.1.0 → 12.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  runnerLockName,
23
23
  startRelayChannel,
24
24
  writeRelayCredential
25
- } from "./chunks/chunk-N722GWCP.js";
25
+ } from "./chunks/chunk-HITMISWV.js";
26
26
  import {
27
27
  CanonApiError,
28
28
  CanonClient,
@@ -33,11 +33,11 @@ import {
33
33
  resolveCanonRuntimeConnection,
34
34
  runCli,
35
35
  verifyCanonRuntimeConnection
36
- } from "./chunks/chunk-QZ4PPRQW.js";
36
+ } from "./chunks/chunk-O5C3ZGI4.js";
37
37
  import {
38
38
  __name,
39
39
  isCanonClientVersion
40
- } from "./chunks/chunk-7N6OPPW4.js";
40
+ } from "./chunks/chunk-J63YVAKA.js";
41
41
 
42
42
  // src/cli.ts
43
43
  import { realpathSync } from "node:fs";
@@ -194,7 +194,6 @@ Environment:
194
194
 
195
195
  SIGTERM or Ctrl-C stops taking messages, lets running turns finish for 10 seconds,
196
196
  then stops them.`;
197
- var DRIVERS = ["code", "claude", "codex", "hermes", "connector"];
198
197
  var AVAILABLE = ["code", "claude", "codex", "connector"];
199
198
  var PERMISSION_MODES = ["default", "acceptEdits", "bypassPermissions"];
200
199
  var SANDBOXES = ["workspace-write", "read-only", "danger-full-access"];
@@ -228,7 +227,7 @@ async function main() {
228
227
  if (positionals[0] === "tell" || positionals[0] === "post" || positionals[0] === "errand") return errand(positionals[0], values);
229
228
  if (!values.driver) throw new UsageError("--driver is required.");
230
229
  if (!AVAILABLE.includes(values.driver)) {
231
- throw new Error(DRIVERS.includes(values.driver) ? `The "${values.driver}" driver is not yet available; ${AVAILABLE.join(", ")} run today.` : `Unknown driver "${values.driver}". Available: ${AVAILABLE.join(", ")}.`);
230
+ throw new Error(`Unknown driver "${values.driver}". Available: ${AVAILABLE.join(", ")}.`);
232
231
  }
233
232
  if (values.driver === "code" && !values.module) throw new UsageError("--driver code needs --module <path>.");
234
233
  if (values.driver === "connector" !== !!values["relay-config"]) throw new UsageError("--relay-config goes with --driver connector, which needs it.");
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  runMlsDevSetup,
19
19
  runtimeDescriptor,
20
20
  startRelayChannel
21
- } from "./chunks/chunk-N722GWCP.js";
21
+ } from "./chunks/chunk-HITMISWV.js";
22
22
  import {
23
23
  CanonApiError,
24
24
  DEFAULT_ANTHROPIC_REQUEST_HEADROOM_BYTES,
@@ -43,8 +43,8 @@ import {
43
43
  toAnthropicImageBlock,
44
44
  toAnthropicImageBlocksWithinBudget,
45
45
  uploadMediaFile
46
- } from "./chunks/chunk-QZ4PPRQW.js";
47
- import "./chunks/chunk-7N6OPPW4.js";
46
+ } from "./chunks/chunk-O5C3ZGI4.js";
47
+ import "./chunks/chunk-J63YVAKA.js";
48
48
  export {
49
49
  CanonApiError,
50
50
  ConnectorRelayError,
@@ -23,12 +23,23 @@ export declare function formatCanonClientHeader(client: CanonClientIdentity): st
23
23
  /** A malformed header is treated as absent. */
24
24
  export declare function parseCanonClientHeader(value: unknown): CanonClientIdentity | null;
25
25
  export declare function compareCanonClientVersions(left: string, right: string): number;
26
- /** `mlsRollout/clientFloor`: per-kind minimums. A kind it does not name has none. */
26
+ /** The server-only floor record (mls-cutover-operator.md §2 15b), written by `scripts/mls-rollout.mjs floor-set`. */
27
+ export declare const CANON_CLIENT_FLOOR_PATH = "mlsRollout/clientFloor";
28
+ /** The record's per-kind minimums. A kind it does not name has none. */
27
29
  export interface CanonClientFloor {
28
30
  readonly minimum: Readonly<Partial<Record<CanonClientKind, string>>>;
29
31
  }
30
32
  /** The server-only record, in its exact shape; anything else is a broken floor, which the caller refuses rather than ignore. */
31
33
  export declare function parseCanonClientFloor(data: unknown): CanonClientFloor;
34
+ /** A server's cached floor: one `get` per `ttlMs`, null when none is set. A malformed record rejects (through `invalid`),
35
+ * so the caller fails closed rather than serve every client; a failed read is not remembered. */
36
+ export declare function createCanonClientFloorReader(get: () => Promise<{
37
+ readonly exists: boolean;
38
+ data(): unknown;
39
+ }>, ttlMs: number, invalid?: () => never): {
40
+ read(now?: number): Promise<CanonClientFloor | null>;
41
+ reset(): void;
42
+ };
32
43
  /** The refusal's message, naming the minimum, so a runner or plugin log says what to install. */
33
44
  export declare function canonClientUpdateMessage(refusal: {
34
45
  kind: CanonClientKind | null;
@@ -100,7 +100,7 @@ export interface EndpointCapabilities {
100
100
  /** Only for a principal eligible for MLS here: how new rooms are born (functions `rollout.ts`, `CANON_MLS_DEV_ROOMS`). */
101
101
  mls?: {
102
102
  eligible: true;
103
- roomMode: 'allowlist' | 'eligible' | 'default';
103
+ roomMode: 'default';
104
104
  /** The principal's MLS identity, its alias (mls-dev-groups.md, erasure privacy), and the opening that proves the alias
105
105
  * is its own; null until it has an alias, when the account is its own principal. Absent from older servers. */
106
106
  principal?: {
@@ -2,7 +2,7 @@ import { MediaAttachment } from './media.js';
2
2
  import { type MlsDevMessageReference } from './mlsDevApplication.js';
3
3
  export type SerializedSenderType = 'human' | 'ai_agent';
4
4
  /** Canonical agent client identifiers shared by Canon services and clients. */
5
- export declare const AGENT_CLIENT_TYPES: readonly ["claude-code", "codex", "hermes", "generic"];
5
+ export declare const AGENT_CLIENT_TYPES: readonly ["claude-code", "codex", "generic"];
6
6
  export type SerializedAgentClientType = typeof AGENT_CLIENT_TYPES[number];
7
7
  export type SerializedContentType = 'text' | 'image' | 'audio' | 'video' | 'file' | 'contact_card' | 'interaction';
8
8
  export interface ForwardedFrom {
@@ -54,6 +54,9 @@ export declare class MlsDevEnrollmentValidationError extends Error {
54
54
  readonly code = "INVALID_MLS_DEV_ENROLLMENT";
55
55
  constructor();
56
56
  }
57
+ /** An MLS principal ID on the wire (an account ID or an alias): well-formed UTF-16 whose UTF-8 is 1-512 bytes, with no
58
+ * control character. Account IDs follow the stricter `isMlsAccountId`. */
59
+ export declare function isMlsPrincipalId(value: unknown): value is string;
57
60
  /** Shared exact identity parsing for the separate protected Dev signing boundary. */
58
61
  export declare function parseMlsDevEnrollmentPrincipal(value: unknown): MlsDevEnrollmentPrincipal;
59
62
  export declare function parseMlsDevInstallationId(value: unknown): string;
@@ -8,6 +8,9 @@ export interface MlsPrincipalOpening {
8
8
  }
9
9
  /** An alias's shape; whether it opens to an account needs its opening. Account IDs never have it. */
10
10
  export declare function isMlsPrincipalAlias(value: unknown): value is string;
11
+ /** An account ID (a Firebase uid, an agent's document ID): an MLS principal ID that is also exactly one document ID, so
12
+ * never containing `/` and never `.` or `..`. */
13
+ export declare function isMlsAccountId(value: unknown): value is string;
11
14
  export declare function parseMlsPrincipalOpening(value: unknown): MlsPrincipalOpening;
12
15
  /**
13
16
  * SHA-256 over the domain above, LP environment, u8 type (human 0/agent 1), LP account ID and the raw 32-byte salt,
@@ -2,10 +2,6 @@
2
2
  * Canonical `canon.card.v1` action-field type vocabulary. The runtime array is
3
3
  * the single source of truth and the type is derived from it, so a value and a
4
4
  * type cannot drift.
5
- *
6
- * ORDER IS LOAD-BEARING: scripts/generate-skill-bundles.mjs renders this list
7
- * verbatim (via @canonmsg/rich-cards) into the Hermes plugin's committed
8
- * rich-cards SKILL.md, and `npm run check:skill-bundles` fails on a byte change.
9
5
  */
10
6
  export declare const RUNTIME_CARD_FIELD_TYPES: readonly ["text", "textarea", "select", "multiSelect", "boolean", "date", "number", "currency", "searchSelect", "lineItems"];
11
7
  export type RuntimeCardFieldType = (typeof RUNTIME_CARD_FIELD_TYPES)[number];
@@ -4,14 +4,14 @@
4
4
  * (v1 scope: messaging, HITL interactions, contact sharing, and the read
5
5
  * verbs bindings need alongside them).
6
6
  *
7
- * One verb = one intent-level action. Each runtime binding (Hermes native
8
- * tool, MCP server, codex dynamicTools, agent-sdk method, CLI) projects these
9
- * verbs into its native tool surface; the names, argument shapes, limits, and
10
- * result vocabularies defined here are the single source of truth. JSON
7
+ * One verb = one intent-level action. Each runtime binding (MCP server, codex
8
+ * dynamicTools, agent-sdk method, CLI) projects these verbs into its native
9
+ * tool surface; the names, argument shapes, limits, and result vocabularies
10
+ * defined here are the single source of truth. JSON
11
11
  * Schemas for each verb live in `verbSchemas.ts` and are also emitted as a
12
12
  * plain JSON artifact at build time (`dist/canon-verbs.schema.json`) so
13
- * non-TypeScript consumers (the Python hermes plugin, external integrators)
14
- * can consume the identical contract.
13
+ * non-TypeScript consumers (external integrators) can consume the identical
14
+ * contract.
15
15
  *
16
16
  * Deliberately NOT verbs: replying in the active conversation, streaming
17
17
  * partials, typing, and read receipts stay host-mediated — the model talks
@@ -99,9 +99,7 @@ export declare const VERB_LIMITS: {
99
99
  readonly externalSourceLabelChars: 80;
100
100
  /**
101
101
  * Contact-request note. Values longer than this are truncated by senders
102
- * (slice(0,497)+'...') — the truncation is currently triplicated in
103
- * functions/src/api/sendContextualMessage.ts, packages/core/src/reach-out.ts
104
- * and the hermes plugin; this constant is the canonical figure.
102
+ * (slice(0,497)+'...'); this constant is the canonical figure.
105
103
  */
106
104
  readonly contactRequestNoteChars: 500;
107
105
  /** Group membership cap incl. creator (functions/src/utils/conversations.ts MAX_GROUP_MEMBERS). */
@@ -760,9 +758,7 @@ export declare const CANON_VERB_LIMITS_ARTIFACT: {
760
758
  readonly externalSourceLabelChars: 80;
761
759
  /**
762
760
  * Contact-request note. Values longer than this are truncated by senders
763
- * (slice(0,497)+'...') — the truncation is currently triplicated in
764
- * functions/src/api/sendContextualMessage.ts, packages/core/src/reach-out.ts
765
- * and the hermes plugin; this constant is the canonical figure.
761
+ * (slice(0,497)+'...'); this constant is the canonical figure.
766
762
  */
767
763
  readonly contactRequestNoteChars: 500;
768
764
  /** Group membership cap incl. creator (functions/src/utils/conversations.ts MAX_GROUP_MEMBERS). */
@@ -5,9 +5,8 @@
5
5
  * `<verb>_result` definition per verb under `$defs` plus shared shapes. The
6
6
  * document is emitted verbatim to `dist/canon-verbs.schema.json` at build
7
7
  * time (see scripts/emit-verb-schemas.mjs) so non-TypeScript bindings can
8
- * consume the byte-identical contract instead of hand-porting it (the Python
9
- * hermes plugin adopts it in a follow-up PR; external integrators and
10
- * generated CLIs read it from the npm package).
8
+ * consume the byte-identical contract instead of hand-porting it (external
9
+ * integrators and generated CLIs read it from the npm package).
11
10
  *
12
11
  * Conventions:
13
12
  * - Verb INPUT schemas are strict (`additionalProperties: false`) — a binding
@@ -686,7 +685,7 @@ export declare const CANON_VERBS_JSON_SCHEMA: {
686
685
  }];
687
686
  };
688
687
  readonly send_to_result: {
689
- readonly description: string;
688
+ readonly description: "Canonical outcome vocabulary.";
690
689
  readonly oneOf: readonly [{
691
690
  readonly type: "object";
692
691
  readonly required: readonly ["status", "conversationId"];
@@ -1,19 +1,11 @@
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 } from './types.js';
1
+ import { type CanonMessage, type CanonConversation, type CanonUnifiedDiff, type CanonMessagesPage, type AgentContext, type MediaAttachment, type SendMessageOptions, type RegistrationStatus, type AgentOriginDeclaration, type SetRuntimeTurnOptions, type SetStreamingOptions } from './types.js';
2
2
  import type { RuntimeInputKind } from './runtime-cards.js';
3
3
  import type { ApprovalNativeRequestMetadata, ApprovalRequestCategory, ApprovalRequestDetail, ApprovalRisk, SessionRule } from './approval-types.js';
4
4
  import type { RuntimeInputAnswers, RuntimeInputChoice, RuntimeInputNativeMetadata, RuntimeInputQuestion, RuntimeCardNativeMetadata, RuntimeCardV1 } from './runtime-cards.js';
5
5
  import type { InboundDisposition } from './turn-protocol.js';
6
- import { type CanonVerbWireRequest, type CanonVerbWireResponse, type CommunicateInput, type CommunicateResult, type DiscoverAgentsInput, type DiscoverAgentsResult, type SendToInput } from '../backend-contracts/index.js';
6
+ import { type CanonVerbWireRequest, type CanonVerbWireResponse, type CommunicateInput, type CommunicateResult, type DiscoverAgentsInput, type DiscoverAgentsResult } from '../backend-contracts/index.js';
7
7
  import { type EndpointOperation } from '../endpoint/index.js';
8
8
  import { type CanonClientEndpointOptions, type CanonEndpoint } from './endpoint-client.js';
9
- export interface ResumableMediaUploadSession {
10
- uploadId: string;
11
- /** Private bearer capability returned by Cloud Storage. Do not persist or log it. */
12
- uploadUrl: string;
13
- expiresAt: string;
14
- sizeBytes: number;
15
- mimeType: string;
16
- }
17
9
  export interface ResumableMediaUploadResult {
18
10
  uploadId: string;
19
11
  url: string;
@@ -46,28 +38,10 @@ export declare class CanonClient {
46
38
  private authHeaders;
47
39
  getAgentMe(): Promise<AgentContext>;
48
40
  discoverAgents(input?: DiscoverAgentsInput): Promise<DiscoverAgentsResult>;
49
- /**
50
- * List conversations. Called with no options this is the historical request —
51
- * no query string, every conversation the agent belongs to, most recent
52
- * first. Passing `limit`/`before` opts into paging; use
53
- * `getConversationsPage` when you need the cursor back.
54
- */
55
- getConversations(options?: CanonConversationsPageOptions): Promise<CanonConversation[]>;
56
- /**
57
- * One page of conversations plus the cursor to continue from. Pages are cut
58
- * in conversation-id order; keep calling with `before: page.nextBefore` until
59
- * `nextBefore` is null. Do not stop on an empty page and do not derive the
60
- * cursor from the returned array — the array is recency-sorted within the
61
- * page and hidden conversations are filtered after the page is read.
62
- */
63
- getConversationsPage(options?: CanonConversationsPageOptions): Promise<CanonConversationsPage>;
64
- private fetchConversationsPage;
65
41
  /** Targeted membership read; session hosts must not poll the entire account. */
66
42
  getConversation(conversationId: string): Promise<CanonConversation | null>;
67
43
  getMessages(conversationId: string, limit?: number, before?: string): Promise<CanonMessage[]>;
68
44
  getMessagesPage(conversationId: string, limit?: number, before?: string): Promise<CanonMessagesPage>;
69
- /** Read one explicitly referenced message without extending ordinary history. */
70
- getMessage(conversationId: string, messageId: string): Promise<CanonMessage | null>;
71
45
  sendMessage(conversationId: string, text: string, options?: SendMessageOptions, delivery?: {
72
46
  operationId?: string;
73
47
  }): Promise<{
@@ -85,7 +59,6 @@ export declare class CanonClient {
85
59
  operationId?: string;
86
60
  signal?: AbortSignal;
87
61
  replacesOperationId?: string;
88
- proactive?: boolean;
89
62
  }): Promise<{
90
63
  id: string;
91
64
  sendPart(index: number, options?: {
@@ -95,36 +68,7 @@ export declare class CanonClient {
95
68
  messageId: string;
96
69
  }>;
97
70
  }>;
98
- /** Publish a native-formatted ordered plan through the same endpoint engine. */
99
- sendMessageGroup(conversationId: string, messageId: string | null, parts: Array<{
100
- text: string;
101
- options: SendMessageOptions;
102
- }>, delivery?: {
103
- proactive?: boolean;
104
- }): Promise<{
105
- messageId: string;
106
- messageIds: string[];
107
- }>;
108
71
  cancelMessageGroup(id: string): Promise<void>;
109
- /**
110
- * Send outside an active inbound turn through the canonical policy boundary.
111
- * Harness reply paths should keep using sendMessage; schedulers, notifications,
112
- * and other detached work must use this method.
113
- */
114
- sendProactiveMessage(conversationId: string, text: string, options?: SendToInput['messageOptions'], delivery?: {
115
- operationId?: string;
116
- }): Promise<{
117
- messageId: string;
118
- conversationId: string;
119
- }>;
120
- /** Reconcile an existing publication without rebuilding or resubmitting its body. */
121
- waitForProactiveMessage(operationId: string, options?: {
122
- signal?: AbortSignal;
123
- timeoutMs?: number;
124
- }): Promise<{
125
- messageId: string;
126
- conversationId: string;
127
- }>;
128
72
  /**
129
73
  * Execute a canonical verb over the wire contract (canon.verb-wire.v1).
130
74
  * Bindings build the request with projectVerbIntentToWire; the endpoint
@@ -147,50 +91,11 @@ export declare class CanonClient {
147
91
  communicate(input: CommunicateInput): Promise<CommunicateResult>;
148
92
  private executeCommunication;
149
93
  private startWithheld;
150
- /** Create a group. Direct conversations must go through `communicate`. */
151
- createGroup(options: CreateGroupOptions): Promise<CreateGroupResult>;
152
- createMemoStream(options: CreateMemoStreamOptions & {
153
- streamId?: string;
154
- }): Promise<CreateMemoStreamResult>;
155
- appendMemoStreamChunk(conversationId: string, streamId: string, options: AppendMemoStreamChunkOptions): Promise<MemoStreamChunkAck>;
156
- finalizeMemoStream(conversationId: string, streamId: string, messageId: string): Promise<void>;
157
- abortMemoStream(conversationId: string, streamId: string): Promise<void>;
158
- createVoiceSession(options: CreateVoiceSessionOptions): Promise<CanonVoiceSessionToken>;
159
- getVoiceSessionState(conversationId: string, sessionId: string): Promise<{
160
- session: CanonVoiceSession;
161
- }>;
162
- declineVoiceSession(conversationId: string, sessionId: string): Promise<void>;
163
- joinVoiceSession(conversationId: string, sessionId: string, options?: Omit<JoinVoiceSessionOptions, 'conversationId'>): Promise<CanonVoiceSessionToken>;
164
- endVoiceSession(conversationId: string, sessionId: string): Promise<void>;
165
- listContacts(): Promise<CanonContact[]>;
166
- getContact(contactId: string): Promise<CanonContact | null>;
167
- deleteContact(contactId: string): Promise<void>;
168
94
  blockUser(userId: string): Promise<void>;
169
- unblockUser(userId: string): Promise<void>;
170
- resolveAdmission(target: string | ResolveAdmissionTargetInput): Promise<CanonResolveAdmissionResult>;
171
- uploadMedia(conversationId: string, data: string, mimeType: string, fileName?: string, options?: {
172
- attachmentId?: string;
173
- }): Promise<{
174
- url: string;
175
- attachment: MediaAttachment;
176
- }>;
177
- /**
178
- * Start a private direct-to-Storage upload. The returned upload URL is a
179
- * short-lived bearer capability; send exactly `sizeBytes` raw bytes to it,
180
- * then call `finalizeResumableMediaUpload`.
181
- */
182
- createResumableMediaUpload(conversationId: string, sizeBytes: number, mimeType: string, fileName?: string): Promise<ResumableMediaUploadSession>;
183
- /** Promote validated pending bytes into a canonical Canon attachment. */
184
- finalizeResumableMediaUpload(uploadId: string): Promise<ResumableMediaUploadResult>;
185
- updateTopic(conversationId: string, topic: string): Promise<void>;
186
95
  deleteMessage(conversationId: string, messageId: string): Promise<void>;
187
96
  updateMessageDisposition(conversationId: string, messageId: string, inboundDisposition: InboundDisposition): Promise<void>;
188
97
  markAsRead(conversationId: string): Promise<void>;
189
- leaveConversation(conversationId: string): Promise<void>;
190
98
  react(conversationId: string, messageId: string, emoji: string): Promise<void>;
191
- updateConversationName(conversationId: string, name: string): Promise<void>;
192
- addMember(conversationId: string, userId: string): Promise<AddMemberResult>;
193
- removeMember(conversationId: string, userId: string): Promise<void>;
194
99
  setStreaming(options: SetStreamingOptions): Promise<void>;
195
100
  clearStreaming(conversationId: string): Promise<void>;
196
101
  setRuntimeTurn(options: SetRuntimeTurnOptions): Promise<void>;
@@ -35,8 +35,8 @@ export interface CanonClientEndpointOptions {
35
35
  /** Test seam for the client's out-of-protocol HTTP (identity, profile); production leaves it unset. */
36
36
  fetch?: typeof fetch;
37
37
  /**
38
- * Names this client to Canon's client floor (`X-Canon-Client`, mls-cutover-operator.md §2 15b). The runner, the Hermes
39
- * worker and the CLIs pass theirs; a client that names none is refused once a floor exists.
38
+ * Names this client to Canon's client floor (`X-Canon-Client`, mls-cutover-operator.md §2 15b). The runner and the CLIs
39
+ * pass theirs; a client that names none is refused once a floor exists.
40
40
  */
41
41
  client?: CanonClientIdentity;
42
42
  /** Canon refused this client as below its floor, on any request or stream (`426 CLIENT_UPDATE_REQUIRED`). */
@@ -6,17 +6,15 @@ export type { EndpointInboundHandoff, EndpointInboundHandoffPhase, EndpointInbou
6
6
  export { createNodeEndpointMediaBytes } from './node-media.js';
7
7
  export { resolveConversationPolicyScope } from '../backend-contracts/index.js';
8
8
  export { CLAUDE_PERMISSION_MODE_OPTIONS, } from './types.js';
9
- export type { AgentOrigin, AgentOriginDeclaration, AddMemberResult, AgentClientType, CanonControlAvailability, CanonControlDescriptor, CanonControlLiveBehavior, CanonControlSelectionPolicy, CanonControlValue, CanonRuntimeCardCapabilities, CanonRuntimeRichCardCapability, CanonRuntimeVoiceCapabilities, CanonRuntimeVoiceMode, CanonContact, CanonMembershipChange, CanonResolveAdmissionResult, ConversationUpdatedPayload, ContactAddedPayload, ContactCardPayload, ContactRemovedPayload, ContactSource, ResolvedAdmissionState, ResolvedAdmissionTargetSummary, ResolvedTargetAdmissionPayload, ResolveAdmissionTargetInput, CanonMessage, CanonRuntimeProvenance, CanonTurnDispatch, CanonConversation, CanonConversationsPage, CanonConversationsPageOptions, CanonMessagesPage, CanonVoiceSession, CanonVoiceSessionMode, CanonVoiceSessionParticipant, CanonVoiceSessionStatus, CanonVoiceSessionToken, AgentContext, AgentSessionSnapshot, MediaAttachment, MediaAttachmentKind, VideoProcessingStatus, VideoProcessingErrorCode, MessageCreatedPayload, MessageUpdatedPayload, TypingPayload, PresencePayload, RuntimeUpdatedPayload, RuntimeControlEventKind, RuntimeControlEventPayload, TurnUpdatedPayload, ParticipationSuppressedPayload, VoiceSessionEventPayload, SendMessageOptions, CreateGroupOptions, CreateGroupResult, CreateVoiceSessionOptions, JoinVoiceSessionOptions, RegistrationInput, RegistrationStatus, SetRuntimeTurnOptions, StreamingStatus, SetStreamingOptions, SessionState, AgentRuntime, CanonRuntimeDescriptor, CanonRuntimeActionAvailability, CanonRuntimeActionCategory, CanonRuntimeActionDescriptor, CanonRuntimeActionDispatch, CanonRuntimeActionPlacement, CanonRuntimeCommandArgumentChoice, CanonRuntimeCommandArgumentDescriptor, CanonRuntimeCommandArgumentKind, CanonRuntimeCommandDescriptor, CanonRuntimeDetailTier, CanonRuntimeExecutionMetadata, CanonRuntimePresentationField, CanonRuntimePresentationHint, CanonRuntimePresentationPolicy, CanonRuntimePresentationPreset, CanonRuntimeVisibility, CanonRuntimeActivityItem, CanonRuntimeActivityKind, CanonRuntimeActivityStatus, CanonRuntimeFact, CanonRuntimeFactGroup, CanonRuntimeInventory, CanonRuntimeInventoryEntry, CanonRuntimePrimitiveId, CanonRuntimeStreamingMode, CanonRuntimeStatusItem, CanonRuntimeSurfaceMode, CanonRuntimeTurnModeActivation, CanonRuntimeTurnModeDescriptor, CanonRuntimeTurnModeScope, CanonUnifiedDiff, CanonUnifiedDiffFile, CanonUnifiedDiffFileStatus, CanonWorkspaceRootMetadata, ModelOption, PermissionModeOption, RuntimeInfoPayload, RuntimeControlError, RuntimeControlState, RuntimeControlValueSource, TurnOutputBlock, TurnOutputBlockKind, TurnOutputBlockStatus, WorkspaceOption, WorkspaceOptionSource, } from './types.js';
9
+ export type { AgentOrigin, AgentOriginDeclaration, AgentClientType, CanonControlAvailability, CanonControlDescriptor, CanonControlLiveBehavior, CanonControlSelectionPolicy, CanonControlValue, CanonRuntimeCardCapabilities, CanonRuntimeRichCardCapability, CanonRuntimeVoiceCapabilities, CanonRuntimeVoiceMode, CanonResolveAdmissionResult, ContactCardPayload, ContactSource, ResolvedAdmissionState, ResolvedAdmissionTargetSummary, ResolvedTargetAdmissionPayload, CanonMessage, CanonRuntimeProvenance, CanonTurnDispatch, CanonConversation, CanonMessagesPage, CanonVoiceSession, CanonVoiceSessionMode, CanonVoiceSessionParticipant, CanonVoiceSessionStatus, CanonVoiceSessionToken, AgentContext, AgentSessionSnapshot, MediaAttachment, MediaAttachmentKind, VideoProcessingStatus, VideoProcessingErrorCode, MessageCreatedPayload, RuntimeUpdatedPayload, SendMessageOptions, RegistrationInput, RegistrationStatus, SetRuntimeTurnOptions, StreamingStatus, SetStreamingOptions, SessionState, AgentRuntime, CanonRuntimeDescriptor, CanonRuntimeActionAvailability, CanonRuntimeActionCategory, CanonRuntimeActionDescriptor, CanonRuntimeActionDispatch, CanonRuntimeActionPlacement, CanonRuntimeCommandArgumentChoice, CanonRuntimeCommandArgumentDescriptor, CanonRuntimeCommandArgumentKind, CanonRuntimeCommandDescriptor, CanonRuntimeDetailTier, CanonRuntimeExecutionMetadata, CanonRuntimePresentationField, CanonRuntimePresentationHint, CanonRuntimePresentationPolicy, CanonRuntimePresentationPreset, CanonRuntimeVisibility, CanonRuntimeActivityItem, CanonRuntimeActivityKind, CanonRuntimeActivityStatus, CanonRuntimeFact, CanonRuntimeFactGroup, CanonRuntimeInventory, CanonRuntimeInventoryEntry, CanonRuntimePrimitiveId, CanonRuntimeStreamingMode, CanonRuntimeStatusItem, CanonRuntimeSurfaceMode, CanonRuntimeTurnModeActivation, CanonRuntimeTurnModeDescriptor, CanonRuntimeTurnModeScope, CanonUnifiedDiff, CanonUnifiedDiffFile, CanonUnifiedDiffFileStatus, CanonWorkspaceRootMetadata, ModelOption, PermissionModeOption, RuntimeInfoPayload, RuntimeControlError, RuntimeControlState, RuntimeControlValueSource, TurnOutputBlock, TurnOutputBlockKind, TurnOutputBlockStatus, WorkspaceOption, WorkspaceOptionSource, } from './types.js';
10
10
  export type { CanonGifMetadata, CanonGifResult, CanonGifSearchResponse, GifProvider, } from './gifs.js';
11
11
  export { buildGifAttachment, buildGifMetadata, } from './gifs.js';
12
12
  export { isRuntimePresentationFieldHidden, redactAgentSessionSnapshotForConversation, redactRuntimeActivityItemForConversation, redactRuntimeInfoForConversation, } from './runtime-presentation.js';
13
13
  export type { CanonSelfContext, CanonSelfContextType, } from './self-context.js';
14
14
  export { CanonClient, CanonApiError } from './client.js';
15
15
  export type { EndpointOperation as CanonMessageOperation } from '../endpoint/index.js';
16
- export type { ResumableMediaUploadResult, ResumableMediaUploadSession, } from './client.js';
16
+ export type { ResumableMediaUploadResult, } from './client.js';
17
17
  export { EXECUTION_MODE_CONTROL_OPTIONS, RUNTIME_NEW_SESSION_ACTION, RUNTIME_STOP_ACTION, RUNTIME_STOP_AND_DROP_ACTION, normalizeRuntimeCommandAlias, normalizeRuntimeCommandAliases, normalizeRuntimeCommandDescriptors, } from './runtime-descriptor.js';
18
- export { CanonStream, CanonStreamError } from './stream.js';
19
- export type { CanonStreamErrorPayload, ReplayExpiredPayload, StreamHandler } from './stream.js';
20
18
  export { createRuntimeHeartbeat } from './runtime-heartbeat.js';
21
19
  export type { RuntimeHeartbeat, RuntimeHeartbeatOperation, RuntimeHeartbeatOptions, } from './runtime-heartbeat.js';
22
20
  export type { ParticipationStyle, AgentBehaviorSettings, ParticipationPolicy, ResolvedAgentBehaviorPolicy, ParticipationHistoryMessage, ParticipationHistorySnapshot, ParticipationDecisionInput, ParticipationDecision, } from './policy.js';
@@ -33,17 +33,11 @@ export type TurnVerbosity = 'verbose' | 'quiet';
33
33
  /** What a developer may write in config. `'auto'` === unset. */
34
34
  export type TurnVerbosityConfig = TurnVerbosity | 'auto';
35
35
  /**
36
- * Hermes spells a direct chat `'dm'` (adapter.py `_chat_type_from_conversation`);
37
- * the TS stack spells it `'direct'` and can also be `'unknown'` when the
38
- * conversation fetch failed (host-runtime.ts HostInboundParticipantContext).
39
- */
40
- export type TurnVerbosityConversationType = 'direct' | 'dm' | 'group' | 'unknown';
41
- /**
42
- * The per-conversation-type defaults. `canon-hermes-plugin` will hand-port this
43
- * map into Python — that package has no dependency on this one — and pin the
44
- * two sides with a cross-language parity test, the way it already does for the
45
- * turn-trail budgets and the group guidance wording.
36
+ * A direct chat is `'direct'`; the type is `'unknown'` when the conversation
37
+ * fetch failed (host-runtime.ts HostInboundParticipantContext).
46
38
  */
39
+ export type TurnVerbosityConversationType = 'direct' | 'group' | 'unknown';
40
+ /** The per-conversation-type defaults. */
47
41
  export declare const DEFAULT_TURN_VERBOSITY_BY_CONVERSATION_TYPE: {
48
42
  readonly direct: "verbose";
49
43
  readonly group: "quiet";
@@ -52,7 +46,7 @@ export declare const DEFAULT_TURN_VERBOSITY_BY_CONVERSATION_TYPE: {
52
46
  /**
53
47
  * Folds every spelling a runtime might hand us onto the three keys the
54
48
  * defaults map has. Accepts a raw string because the value arrives from
55
- * provenance, a conversation fetch, or a Python-side payload.
49
+ * provenance or a conversation fetch.
56
50
  */
57
51
  export declare function normalizeTurnVerbosityConversationType(value: string | null | undefined): 'direct' | 'group' | 'unknown';
58
52
  /**