/** * [WHO]: StructuralAnchor, AnchorResolution, locateTask(), locateAction(), scoreNode() * [FROM]: Depends on extensions/builtin/sal/terrain.ts, extensions/builtin/sal/weights.ts * [TO]: Consumed by extensions/builtin/sal/index.ts * [HERE]: extensions/builtin/sal/anchors.ts - evidence-driven anchor inference and scoring */ import { type TerrainSnapshot } from "./terrain.js"; import type { SalWeights } from "./weights.js"; export interface StructuralAnchor { workspaceId: string; modulePath?: string; filePath?: string; confidence: number; source: Array<"prompt" | "tool" | "file" | "p3" | "import-graph" | "manual">; } export interface AnchorCandidate { anchor: StructuralAnchor; score: number; reasons: string[]; } export type AnchorTargetKind = "task" | "memory" | "action"; export interface AnchorResolution { targetKind: AnchorTargetKind; candidates: AnchorCandidate[]; selected?: StructuralAnchor; unresolvedSignals?: string[]; } declare function normalizeRel(workspaceRoot: string, p: string): string; export interface LocateTaskInput { prompt: string; cwd: string; mentionedFiles?: string[]; snapshot: TerrainSnapshot; weights: SalWeights; } export declare function locateTask(input: LocateTaskInput): AnchorResolution; export interface LocateActionInput { touchedFiles: string[]; snapshot: TerrainSnapshot; } /** * locateAction collapses observed file touches into the highest-confidence module anchor. * If multiple modules are touched, the one with the most touches wins; ties broken by depth. */ export declare function locateAction(input: LocateActionInput): AnchorResolution; export { normalizeRel };