/**
 * src/agent/tool-intent.ts
 *
 * (v2.5.5) Natural-language / slang / typo-tolerant tool-intent inference.
 *
 * Given a user message in any mix of Saudi/Gulf Arabic dialect, MSA, English,
 * Hinglish/Arabish, with typos and slang — return which native tool(s) the
 * user is asking for. Used by:
 *   - brain.ts retry-directive builder (which tool to nudge toward)
 *   - brain.ts tool-list filter (drop irrelevant categories from the
 *     Qwen schema, preventing the v2.5.4 ZATCA-misfire on Excel requests)
 *   - hallucination guard's "you claimed X but didn't call Y" matcher
 *
 * Critical: JavaScript's `\b` only recognizes [A-Za-z0-9_] as word chars,
 * NOT Arabic letters. So `\bايميل\b` does NOT match `ابعت ايميل لاحمد`
 * because the boundary between Arabic letter and space is non-word →
 * non-word, not a word boundary. That single bug silently broke ~80% of
 * Arabic patterns in v2.5.4. This module uses an Arabic-aware boundary
 * helper (`ar()`) built around lookarounds that recognize Arabic ranges:
 *   - U+0600-U+06FF: Arabic
 *   - U+0750-U+077F: Arabic Supplement
 *   - U+FB50-U+FDFF: Arabic Presentation Forms-A
 *   - U+FE70-U+FEFF: Arabic Presentation Forms-B
 */
export type ToolCategory = 'saudi-regulatory' | 'document' | 'browser' | 'research' | 'media' | 'filesystem' | 'system' | 'send' | 'schedule' | 'memory' | 'display' | 'crm' | 'planning' | 'skills' | 'autonomy';
export interface IntentMatch {
    tool: string;
    category: ToolCategory;
}
/**
 * Match the first tool intent in the message (highest-priority rule wins).
 * Use this when you only need ONE tool — e.g. the retry directive.
 */
export declare function inferTool(message: string): IntentMatch | null;
/**
 * Match ALL tool intents in the message. Used for category-based tool
 * filtering so a message can pull in multiple categories (e.g. "اكتب
 * تقرير pdf وأرسله بالإيميل" → document + send).
 */
export declare function inferAllTools(message: string): IntentMatch[];
/**
 * Get all matched categories for a message. Useful for tool-list filtering:
 * if no Saudi-regulatory match, drop ZATCA/Saudization/etc from the catalog
 * so Qwen doesn't misfire them onto an Excel request.
 */
export declare function inferCategories(message: string): Set<ToolCategory>;
//# sourceMappingURL=tool-intent.d.ts.map