import type { AgentConfig, AgentHooks, ConsecutiveMistakeLimitContext, ConsecutiveMistakeLimitDecision, HookErrorMode, TeamEvent, Tool } from "@clinebot/agents";
import type { LlmsProviders } from "@clinebot/llms";
import type { AgentMode, BasicLogger, ITelemetryService, SessionExecutionConfig, SessionPromptConfig, SessionWorkspaceConfig } from "@clinebot/shared";
import type { ToolRoutingRule } from "../tools/model-tool-routing.js";
export type CoreAgentMode = AgentMode;
export interface CoreModelConfig {
    providerId: string;
    modelId: string;
    apiKey?: string;
    baseUrl?: string;
    headers?: Record<string, string>;
    providerConfig?: LlmsProviders.ProviderConfig;
    knownModels?: Record<string, LlmsProviders.ModelInfo>;
    /**
     * Request model-side thinking/reasoning when supported.
     */
    thinking?: boolean;
    /**
     * Explicit reasoning effort override for capable models.
     */
    reasoningEffort?: LlmsProviders.ProviderConfig["reasoningEffort"];
}
export interface CoreRuntimeFeatures {
    enableTools: boolean;
    enableSpawnAgent: boolean;
    enableAgentTeams: boolean;
}
export interface CoreSessionConfig extends CoreModelConfig, CoreRuntimeFeatures, Omit<SessionWorkspaceConfig, "workspaceRoot">, Omit<SessionPromptConfig, "systemPrompt">, Omit<SessionExecutionConfig, "enableTools" | "teamName" | "missionLogIntervalSteps" | "missionLogIntervalMs"> {
    sessionId?: string;
    workspaceRoot?: string;
    systemPrompt: string;
    teamName?: string;
    missionLogIntervalSteps?: number;
    missionLogIntervalMs?: number;
    hooks?: AgentHooks;
    hookErrorMode?: HookErrorMode;
    logger?: BasicLogger;
    telemetry?: ITelemetryService;
    extraTools?: Tool[];
    pluginPaths?: string[];
    extensions?: AgentConfig["extensions"];
    onTeamEvent?: (event: TeamEvent) => void;
    onConsecutiveMistakeLimitReached?: (context: ConsecutiveMistakeLimitContext) => Promise<ConsecutiveMistakeLimitDecision> | ConsecutiveMistakeLimitDecision;
    toolRoutingRules?: ToolRoutingRule[];
    /**
     * Optional skill allowlist for the `skills` tool. When provided, only these
     * skills are surfaced in tool metadata and invocable by name.
     */
    skills?: string[];
}
