/** * Deterministic quick-lane classifier (issue #3984). * * The deep-interview and ralplan skills describe a task-routing surface in * prose: small, clearly scoped, low-risk work should take a quick lane * (minimal orchestration) while vague, ambiguous, risky, or wide-breadth work * keeps the existing deep path. That gate existed only as prompt guidance, so * it was not auditable or testable. This module encodes the same signals as * deterministic, pure code so eligibility and exclusions are explicit and * regression-covered. * * The classifier is intentionally conservative and fail-closed: * - Any exclusion signal forces the `deep` lane, even when the task also names * concrete files or symbols. Safety is never overridden by a concrete anchor. * - The `deep` lane preserves the existing deep/interview behavior untouched; * this module only *classifies*, it never routes or mutates. * - A task with neither a concrete anchor nor an exclusion defaults to `deep` * because boundness cannot be confirmed. */ export type QuickLane = "quick" | "deep"; export interface QuickLaneDecision { /** The routed lane: `quick` (bounded, direct execution) or `deep` (planning/interview path). */ lane: QuickLane; /** Concrete anchors that made the task eligible for the quick lane (empty when `deep`). */ reasons: string[]; /** Exclusions that forced the deep lane (empty when `quick`). */ exclusions: string[]; } /** * Classify a task request into the quick lane (bounded, direct execution) or * the deep path (existing planning/interview orchestration). * * Order of operations (fail-closed): * 1. Exclusions are authoritative — any risk/ambiguity/breadth signal (including * two or more distinct file-path anchors) forces `deep`, even when concrete * anchors are present. * 2. Otherwise, any concrete anchor yields `quick`. * 3. Otherwise, `deep` (boundness could not be confirmed). */ export declare function classifyQuickLane(input: string): QuickLaneDecision;