import { CONNECTED_CONTEXT_SCHEMA_VERSION, type ExplorationBudget, type RetrievalQuery, type SelectedScope } from "@oscharko-dev/keiko-contracts/connected-context";
import type { SearchLimits } from "@oscharko-dev/keiko-workspace";
import { type SearchAnchor } from "./anchors.js";
export type ExplorationPlanState = "ready" | "completed" | "budget-exhausted" | "clarification-needed" | "scope-invalid";
export type RetrievalRingKind = "lexical" | "structural" | "git-history";
export interface RetrievalRing {
    readonly kind: RetrievalRingKind;
    readonly label: string;
    readonly anchorTerms: readonly string[];
    readonly searchLimits: SearchLimits;
    readonly rationale: string;
}
export type ClarificationReason = "no-anchors" | "too-generic" | "scope-empty" | "scope-invalid";
export interface ClarificationPrompt {
    readonly reason: ClarificationReason;
    readonly suggestedQuestions: readonly string[];
    readonly minimumAnchorCount: number;
}
export interface ExplorationPlan {
    readonly schemaVersion: typeof CONNECTED_CONTEXT_SCHEMA_VERSION;
    readonly planId: string;
    readonly state: ExplorationPlanState;
    readonly scope: SelectedScope;
    readonly query: RetrievalQuery;
    readonly anchors: readonly SearchAnchor[];
    readonly rings: readonly RetrievalRing[];
    readonly budget: ExplorationBudget;
    readonly clarification: ClarificationPrompt | undefined;
    readonly createdAtMs: number;
}
export interface CreatePlanInput {
    readonly scope: SelectedScope;
    readonly query: RetrievalQuery;
    readonly budget?: ExplorationBudget;
    readonly maxAnchors?: number;
}
export interface CreatePlanDeps {
    readonly nowMs?: () => number;
}
export declare function createExplorationPlan(input: CreatePlanInput, deps?: CreatePlanDeps): ExplorationPlan;
//# sourceMappingURL=plan.d.ts.map