import type { ContextVisibilityMode, GroupPolicy } from "./types.base.js"; export type ChannelHeartbeatVisibilityConfig = { /** Show HEARTBEAT_OK acknowledgments in chat (default: false). */ showOk?: boolean; /** Show heartbeat alerts with actual content (default: true). */ showAlerts?: boolean; /** Emit indicator events for UI status display (default: true). */ useIndicator?: boolean; }; export type ChannelHealthMonitorConfig = { /** * Enable channel-health-monitor restarts for this channel or account. * Inherits the global gateway setting when omitted. */ enabled?: boolean; }; export type ChannelDefaultsConfig = { groupPolicy?: GroupPolicy; contextVisibility?: ContextVisibilityMode; /** Default heartbeat visibility for all channels. */ heartbeat?: ChannelHeartbeatVisibilityConfig; }; export type ChannelModelByChannelConfig = Record>; export type ExtensionNestedPolicyConfig = { policy?: string; allowFrom?: Array | ReadonlyArray; [key: string]: unknown; }; /** * Base type for extension channel config sections. * Extensions can use this as a starting point for their channel config. */ export type ExtensionChannelConfig = { enabled?: boolean; allowFrom?: Array | ReadonlyArray; /** Default delivery target for CLI --deliver when no explicit --reply-to is provided. */ defaultTo?: string | number; /** Optional default account id when multiple accounts are configured. */ defaultAccount?: string; dmPolicy?: string; groupPolicy?: GroupPolicy; contextVisibility?: ContextVisibilityMode; healthMonitor?: ChannelHealthMonitorConfig; dm?: ExtensionNestedPolicyConfig; network?: Record; groups?: Record; rooms?: Record; mediaMaxMb?: number; callbackBaseUrl?: string; interactions?: { callbackBaseUrl?: string; [key: string]: unknown; }; execApprovals?: Record; threadBindings?: { enabled?: boolean; spawnSessions?: boolean; defaultSpawnContext?: "isolated" | "fork"; /** @deprecated Use spawnSessions instead. */ spawnAcpSessions?: boolean; /** @deprecated Use spawnSessions instead. */ spawnSubagentSessions?: boolean; }; spawnSubagentSessions?: boolean; dangerouslyAllowPrivateNetwork?: boolean; accounts?: Record; [key: string]: unknown; }; export interface ChannelsConfig { defaults?: ChannelDefaultsConfig; /** Map provider -> channel id -> model override. */ modelByChannel?: ChannelModelByChannelConfig; /** * Channel sections are plugin-owned and keyed by arbitrary channel ids. * Keep the lookup permissive so augmented channel configs remain ergonomic at call sites. */ [key: string]: any; }