import type { ChangeSize, ExecutionMode, FileArea, LoadedConfig, TaskType, ToolName } from "./config.js";
import type { RiskLevel } from "./risk.js";
import type { ProfileSelection } from "./profiles.js";
export interface TemplateContext {
    projectName: string;
    generatedAt: string;
    taskDirectory: string;
    contextDirectory: string;
    targetRoot: string;
    profileName: string;
    executionMode: ExecutionMode;
    projectType: string;
    profileSource: string;
    starterSpecialists: string;
    starterValidations: string;
    starterMcpHints: string;
}
export type ContractInstructionKey = "backend" | "frontend" | "docs" | "data";
export interface PortableContractSelection {
    projectType: string;
    activeRole: string;
    supportingRoles: string[];
    instructionKeys: ContractInstructionKey[];
    specialistIds: string[];
    coreSurfaces: string[];
    instructionSurfaces: string[];
    agentSurfaces: string[];
    roleSurfaces: string[];
    stateSurfaces: string[];
    ciSurfaces: string[];
    authorityFiles: string[];
    skippedSurfaces: string[];
}
export interface SurfaceSpec {
    tool: ToolName;
    file: string;
    template: string;
    blockName: string;
}
export interface PortableStateSpec {
    logicalName: string;
    templatePath: string;
    outputPath: string;
    writeMode?: "managed" | "seed-only";
    contentFormat?: "managed" | "raw";
    templateValues?: Record<string, string>;
}
export interface RoutingInputs {
    goal: string;
    profile: ProfileSelection;
    executionMode: ExecutionMode;
    riskLevel: RiskLevel;
    explicitTool?: ToolName;
    explicitTaskType?: TaskType;
    explicitFileArea?: FileArea;
    explicitChangeSize?: ChangeSize;
}
export interface RoutingDecision {
    profileName: string;
    primaryTool: ToolName;
    reviewTool: ToolName;
    taskType: TaskType;
    riskLevel: RiskLevel;
    fileArea: FileArea;
    changeSize: ChangeSize;
    executionMode: ExecutionMode;
    requiredRoles: string[];
    reasons: string[];
}
export declare function buildTemplateContext(targetRoot: string, config: LoadedConfig, options: {
    profileName: string;
    executionMode: ExecutionMode;
    projectType?: string;
    profileSource?: string;
    starterSpecialists?: string;
    starterValidations?: string;
    starterMcpHints?: string;
}): TemplateContext;
export declare function getSurfaceSpecs(config: LoadedConfig): SurfaceSpec[];
export declare function selectPortableContract(config: LoadedConfig, context: TemplateContext): PortableContractSelection;
export declare function getPortableStateSpecs(config: LoadedConfig, context: TemplateContext): PortableStateSpec[];
export declare function resolveRoutingDecision(config: LoadedConfig, inputs: RoutingInputs): RoutingDecision;
export declare function inferTaskType(goal: string, executionMode: ExecutionMode, explicitChangeSize?: ChangeSize, explicitFileArea?: FileArea): TaskType;
export declare function inferFileArea(goal: string): FileArea;
export declare function inferChangeSize(goal: string, executionMode: ExecutionMode): ChangeSize;
//# sourceMappingURL=router.d.ts.map