import type { AgentBinding, AgentsConfig } from "./types.agents.js";
import type { ApprovalsConfig } from "./types.approvals.js";
import type { AuthConfig } from "./types.auth.js";
import type { DiagnosticsConfig, LoggingConfig, SessionConfig, WebConfig } from "./types.base.js";
import type { BrowserConfig } from "./types.browser.js";
import type { ChannelsConfig } from "./types.channels.js";
import type { CronConfig } from "./types.cron.js";
import type { CanvasHostConfig, DiscoveryConfig, GatewayConfig, TalkConfig } from "./types.gateway.js";
import type { HooksConfig } from "./types.hooks.js";
import type { MemoryConfig } from "./types.memory.js";
import type { BroadcastConfig, CommandsConfig, MessagesConfig } from "./types.messages.js";
import type { ModelsConfig } from "./types.models.js";
import type { NodeHostConfig } from "./types.node-host.js";
import type { PluginsConfig } from "./types.plugins.js";
import type { SkillsConfig } from "./types.skills.js";
import type { ToolsConfig } from "./types.tools.js";
export type SymiConfig = {
    meta?: {
        /** Last Symi version that wrote this config. */
        lastTouchedVersion?: string;
        /** ISO timestamp when this config was last written. */
        lastTouchedAt?: string;
    };
    auth?: AuthConfig;
    env?: {
        /** Opt-in: import missing secrets from a login shell environment (exec `$SHELL -l -c 'env -0'`). */
        shellEnv?: {
            enabled?: boolean;
            /** Timeout for the login shell exec (ms). Default: 15000. */
            timeoutMs?: number;
        };
        /** Inline env vars to apply when not already present in the process env. */
        vars?: Record<string, string>;
        /** Sugar: allow env vars directly under env (string values only). */
        [key: string]: string | Record<string, string> | {
            enabled?: boolean;
            timeoutMs?: number;
        } | undefined;
    };
    wizard?: {
        lastRunAt?: string;
        lastRunVersion?: string;
        lastRunCommit?: string;
        lastRunCommand?: string;
        lastRunMode?: "local" | "remote";
    };
    diagnostics?: DiagnosticsConfig;
    logging?: LoggingConfig;
    update?: {
        /** Update channel for git + npm installs ("stable", "beta", or "dev"). */
        channel?: "stable" | "beta" | "dev";
        /** Check for updates on gateway start (npm installs only). */
        checkOnStart?: boolean;
    };
    browser?: BrowserConfig;
    ui?: {
        /** Accent color for Symi UI chrome (hex). */
        seamColor?: string;
        assistant?: {
            /** Assistant display name for UI surfaces. */
            name?: string;
            /** Assistant avatar (emoji, short text, or image URL/data URI). */
            avatar?: string;
        };
    };
    skills?: SkillsConfig;
    /**
     * Stage 4 of the prompt-reduction plan. Master gate for compact-mode
     * prompt section deletions; opt-in via symi.json.
     */
    prompt?: {
        compactMode?: boolean;
    };
    plugins?: PluginsConfig;
    models?: ModelsConfig;
    nodeHost?: NodeHostConfig;
    agents?: AgentsConfig;
    tools?: ToolsConfig;
    bindings?: AgentBinding[];
    broadcast?: BroadcastConfig;
    messages?: MessagesConfig;
    commands?: CommandsConfig;
    approvals?: ApprovalsConfig;
    session?: SessionConfig;
    web?: WebConfig;
    channels?: ChannelsConfig;
    cron?: CronConfig;
    hooks?: HooksConfig;
    discovery?: DiscoveryConfig;
    canvasHost?: CanvasHostConfig;
    talk?: TalkConfig;
    gateway?: GatewayConfig;
    memory?: MemoryConfig;
};
export type ConfigValidationIssue = {
    path: string;
    message: string;
};
export type LegacyConfigIssue = {
    path: string;
    message: string;
};
export type ConfigFileSnapshot = {
    path: string;
    exists: boolean;
    raw: string | null;
    parsed: unknown;
    /**
     * Config after $include resolution and ${ENV} substitution, but BEFORE runtime
     * defaults are applied. Use this for config set/unset operations to avoid
     * leaking runtime defaults into the written config file.
     */
    resolved: SymiConfig;
    valid: boolean;
    config: SymiConfig;
    hash?: string;
    issues: ConfigValidationIssue[];
    warnings: ConfigValidationIssue[];
    legacyIssues: LegacyConfigIssue[];
};
