Previously the agent loop used a frozen Tools slice from BuildRuntime.
When tool_load promoted a tool, it was added to the registry but the
runtime's Tools slice was never updated — the LLM never saw the new
tool's schema until a session rebuild.
Fix: on each turn, call ToolServer.ListTools() to get the current set
of built-in + dynamically loaded tools, then convert to backend.Tool.
This makes tool_load behave identically to a built-in: the schema is
injected into the tool definitions on the very next turn.