"""Tests intent-based tool routing (Cursor-style).""" from __future__ import annotations from tool_router import select_tools_for_message SAMPLE_TOOLS = [ {"function": {"name": "web_search"}}, {"function": {"name": "browser_open"}}, {"function": {"name": "read_file"}}, {"function": {"name": "emo_reflect"}}, ] def _names(tools): return [(t.get("function") or {}).get("name") for t in tools] def test_tools_disabled_returns_empty(): assert select_tools_for_message("ouvre google", SAMPLE_TOOLS, tools_enabled=False) == [] def test_openai_gets_all_tools(): out = select_tools_for_message("hello", SAMPLE_TOOLS, provider="openai") assert len(out) == len(SAMPLE_TOOLS) def test_web_intent_includes_browser(): out = select_tools_for_message("cherche sur youtube des mods minecraft", SAMPLE_TOOLS, provider="groq") names = set(_names(out)) assert "web_search" in names assert "browser_open" in names def test_reflect_intent_for_owner(): out = select_tools_for_message("réfléchis sur ton identité", SAMPLE_TOOLS, is_owner=True, provider="groq") names = set(_names(out)) assert "emo_reflect" in names def test_local_tools_when_agent_online_and_code_intent(): out = select_tools_for_message("fix ce bug python", SAMPLE_TOOLS, agent_online=True, provider="groq") names = set(_names(out)) assert "read_file" in names def test_file_create_intent_includes_write_file(): tools = SAMPLE_TOOLS + [ {"function": {"name": "write_file"}}, {"function": {"name": "get_env"}}, {"function": {"name": "system_info"}}, {"function": {"name": "exec_shell"}}, {"function": {"name": "list_dir"}}, ] out = select_tools_for_message( "crée un fichier html sur le bureau", tools, agent_online=True, provider="groq", ) names = set(_names(out)) assert "write_file" in names