/**
 * Task Domain Detection — selects which system prompt guidance is injected.
 *
 * qlogicagent handles coding, office, AND creative tasks; a coding-only prompt
 * hurts non-coding performance, so the per-domain CONTENT blocks are kept.
 *
 * Resolution is STATELESS and recomputed every turn (CC-aligned — no hidden
 * session/disk state, no stickiness latch, no auto-persisted guesses):
 *   1. Host override: `config.taskDomain` from thread.turn params (explicit).
 *   2. Auto-detect: keyword match on the current user message; "general" if ambiguous.
 *
 * The universal BEHAVIORAL rules (answer-directly, tools-not-default, conciseness)
 * live in universalGuidance() and apply in every domain, so misclassifying a turn
 * as "general" degrades only the domain-tailored content, never the core behavior.
 */
/**
 * Task domain determines which system prompt sections are injected.
 *
 * - "coding" — software engineering: bug fixes, refactoring, code gen, etc.
 * - "office" — data analysis, reports, documents, spreadsheets, emails
 * - "creative" — writing, copywriting, marketing, storytelling, brainstorming
 * - "general" — undetectable or mixed domain, uses universal guidance
 */
export type TaskDomain = "coding" | "office" | "creative" | "general";
/**
 * Detect task domain from user message text. Keyword matching — fast, no LLM call.
 */
export declare function detectTaskDomain(userText: string): TaskDomain;
export interface DomainResolutionContext {
    /** Host-provided override from config.taskDomain (explicit, per-request). */
    hostOverride?: TaskDomain;
    /** Current turn's user message text. */
    userText: string;
}
/**
 * Resolve task domain, stateless and per-turn: explicit host override, else fresh
 * keyword auto-detect on this turn's message. No project file, no session stickiness,
 * no disk persistence.
 */
export declare function resolveTaskDomain(ctx: DomainResolutionContext): {
    domain: TaskDomain;
    source: "host-override" | "auto-detect";
};
