- Add MetabolicRouter routing tasks to T1/T2/T3 model tiers based on
complexity classification
- classify_complexity() assigns cheapest-sufficient tier using keyword
matching and game state signals (stuck, active quests, dialogue)
- build_prompt() assembles OpenAI-compatible message lists from game/UI state
- T3 (Qwen3-32B) pauses the game world before inference and unpauses in
a finally block (graceful if no world adapter)
- Fix: narrow "what should" phrase to "what should i do" to avoid
misclassifying dialogue tasks as T3
- Add pytestmark=pytest.mark.unit so tests run in tox -e unit
- Export all public symbols via infrastructure/router/__init__.py
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>