e85eef05b8
Two changes to make the tool schema sent to the LLM deterministic: 1. ToolSet.normalize() — sort tools by name before serialization. Called at the end of build_main_agent() after all injection passes. Eliminates ordering drift from plugin load order, MCP reconnection, and persona tool list differences. 2. Always inject full sandbox tool set — ComputerToolProvider now returns get_default_sandbox_tools() unconditionally, regardless of sandbox boot state. Browser tools are always in the schema even if the sandbox profile lacks browser capability. The executor rejects calls to unavailable browser tools with a descriptive error instead of silently omitting them from the schema. This eliminates the pre-boot/post-boot tool set jump that caused prefix cache misses on the second request of a conversation.