export type LlmProvider = "ollama" | "openai";
export interface AppConfig {
    port: number;
    wsPort: number;
    host: string;
    logLevel: string;
    corsOrigin: string;
    nodeEnv: string;
    jwtSecret: string;
    llmProvider: LlmProvider;
    ollamaUrl: string;
    ollamaModel: string;
    openaiApiKey: string;
    openaiModel: string;
    openaiBaseUrl: string;
    /** Max context window tokens (auto-detected from model name if not set) */
    contextWindow: number;
    /**
     * Max autonomous tool-calling rounds per turn for the Jait provider.
     * Local models in particular make many small tool calls and need a higher
     * ceiling than cloud models. Override with env JAIT_MAX_ROUNDS; per-user
     * overrides come from the JAIT_MAX_ROUNDS settings key.
     */
    agentMaxRounds: number;
    /**
     * Context length (num_ctx) requested from ollama via its native /api/chat
     * endpoint. The OpenAI-compat /v1 endpoint ignores num_ctx and pins models
     * to the server default, so Jait sets this explicitly. Override per-user with
     * the OLLAMA_NUM_CTX setting, or globally with env OLLAMA_CONTEXT_LENGTH.
     */
    ollamaContextWindow: number;
    hookSecret: string;
    heartbeatCron: string;
    /** URL of the local Faster Whisper server (default http://localhost:8178) */
    whisperUrl: string;
    /** OpenAI model for the real-time voice assistant (Realtime API). */
    realtimeModel: string;
    /** Voice used by the real-time assistant (alloy, echo, shimmer, etc.). */
    realtimeVoice: string;
    /**
     * Hint string passed to the speech-to-text (STT) layer to bias recognition
     * toward domain-specific proper nouns. This fixes common mishearings such as
     * "Jait" being transcribed as "Jade". Override with env JAIT_STT_PROMPT.
     */
    sttPrompt: string;
    /**
     * URL of an upstream/primary gateway to link to as a filesystem node.
     * When set, this gateway opens an outbound WS to the primary, registers
     * itself as a browseable fs-node, and serves browse/roots/op requests from
     * its local disk — making it selectable in the primary's Open Project modal.
     * Empty string disables the link (default).
     */
    primaryGateway: string;
    /** Bearer token used to authenticate the primary-link WS (optional; not needed if the primary runs in development mode). */
    primaryToken: string;
    /** Display name advertised to the primary for this node (defaults to the hostname). */
    nodeName: string;
    /**
     * Run as a headless remote node only. In this mode the process does not
     * expose the gateway HTTP dashboard/API and only opens the outbound primary
     * link used for remote filesystem and terminal access.
     */
    nodeOnly: boolean;
}
/** Infer context window size from model name. Conservative defaults. */
export declare function inferContextWindow(model: string): number;
export declare function loadConfig(): AppConfig;
//# sourceMappingURL=config.d.ts.map