import { type Args } from "./cli/args.js";
import { selectSession } from "./cli/session-picker.js";
import { ModelRegistry } from "./config/model-registry.js";
import { type ScopedModel } from "./config/model-resolver.js";
import { Settings } from "./config/settings.js";
import { InteractiveMode } from "./modes/interactive-mode.js";
import type { SubmittedUserInput } from "./modes/types.js";
import { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession, discoverAuthStorage } from "./sdk.js";
import type { AgentSession } from "./session/agent-session.js";
import type { AuthStorage } from "./session/auth-storage.js";
import { type SessionInfo } from "./session/session-listing.js";
import { SessionManager } from "./session/session-manager.js";
type RunAcpMode = (createSession: AcpSessionFactory) => Promise<never>;
export declare function writeStartupNotice(parsedArgs: Pick<Args, "mode">, text: string): void;
export interface InteractiveModeNotify {
    kind: "warn" | "error" | "info";
    message: string;
}
export declare function buildModelScopeNotification(scopedModelsForDisplay: readonly Pick<ScopedModel, "model" | "thinkingLevel" | "explicitThinkingLevel">[], startupQuiet: boolean): InteractiveModeNotify | null;
export declare function submitInteractiveInput(mode: Pick<InteractiveMode, "markPendingSubmissionStarted" | "finishPendingSubmission" | "showError" | "checkShutdownRequested">, session: Pick<AgentSession, "prompt" | "promptCustomMessage" | "isStreaming">, input: SubmittedUserInput): Promise<void>;
type AcpSessionFactory = (cwd: string) => Promise<AgentSession>;
export interface AcpSessionFactoryOptions {
    baseOptions: CreateAgentSessionOptions;
    settings: Settings;
    sessionDir?: string;
    authStorage: AuthStorage;
    modelRegistry: ModelRegistry;
    parsedArgs: Pick<Args, "apiKey">;
    rawArgs: string[];
    createSession: (options: CreateAgentSessionOptions) => Promise<CreateAgentSessionResult>;
}
/**
 * Build the per-`session/new` factory used by ACP mode.
 *
 * MCP servers in ACP sessions are owned exclusively by the ACP client, which
 * supplies them through `session/new.mcpServers` and re-applies them via
 * {@link AcpAgent#configureMcpServers}. We therefore force `enableMCP: false`
 * on every session created here so {@link createAgentSession} skips the on-disk
 * `.mcp.json` discovery path — otherwise host MCP tools land in the session's
 * tool registry and shadow the client-supplied servers (issue #1234).
 */
export declare function createAcpSessionFactory(args: AcpSessionFactoryOptions): AcpSessionFactory;
type SessionPromptResult = "accepted" | "declined" | "unavailable";
type SessionPrompt = (session: SessionInfo) => Promise<SessionPromptResult>;
/**
 * Friendly CLI failure raised by {@link createSessionManager} when the user's
 * session-resolution flags (`--resume`/`--fork`/cross-project prompts) cannot
 * be satisfied. {@link runRootCommand} catches it and prints a clean stderr
 * message instead of letting it surface as `[Uncaught Exception]`
 * (see issue #2084).
 */
export declare class SessionResolutionError extends Error {
    readonly hint?: string;
    constructor(message: string, hint?: string);
}
/** Resolves CLI session flags into an existing, forked, in-memory, or cancelled session manager. */
export declare function createSessionManager(parsed: Args, cwd: string, activeSettings?: Settings, askToForkSession?: SessionPrompt, askToMoveSession?: SessionPrompt): Promise<SessionManager | undefined>;
/** Apply resolved CLI/discovered prompt files without bypassing system prompt templates. */
export declare function applyResolvedSystemPromptInputs(options: CreateAgentSessionOptions, resolvedSystemPrompt: string | undefined, resolvedAppendPrompt: string | undefined): void;
interface RunRootCommandDependencies {
    createAgentSession?: typeof createAgentSession;
    discoverAuthStorage?: typeof discoverAuthStorage;
    selectSession?: typeof selectSession;
    runAcpMode?: RunAcpMode;
    settings?: Settings;
    forceSetupWizard?: boolean;
}
export declare function runRootCommand(parsed: Args, rawArgs: string[], deps?: RunRootCommandDependencies): Promise<void>;
export declare function main(args: string[]): Promise<void>;
export {};
