import type { Route, RouterReason } from "./types.js"; /** * Triggers from the OpenClaw SDK that mean "not a user-initiated turn". * * Sourced from `PluginHookAgentContext.trigger` in the OpenClaw plugin SDK: * `"user" | "heartbeat" | "cron" | "memory"`. */ export declare const NON_USER_TRIGGERS: Set; export interface HeuristicInput { /** The extracted user query (already trimmed and length-validated). */ query: string; /** Trigger from `PluginHookAgentContext`. May be undefined on legacy SDKs. */ trigger?: string; /** Whether the messageProvider indicates the local CLI test harness. */ isCli?: boolean; } export interface HeuristicVerdict { route: Route | null; reason: RouterReason; } /** * Decide a route from cheap signals only. Returns `route: null` when the * input is ambiguous and a classifier (or `ALL` fallback) should take over. * * NOTE: there are no keyword fast-paths for WORLD_ONLY / EXPERIENCE_ONLY * in this version. The reason: distinguishing those two routes reliably * requires semantic understanding (a question CAN reference past * conversation without using the word "remember"), and a buggy keyword * rule would mis-route real questions. Operators who want fine routing * configure the classifier with the 4-class labels. */ export declare function heuristicRoute(input: HeuristicInput): HeuristicVerdict;