ToolWrapper
Adapts a BaseAsyncLlmAgent so it can be passed as a tool to another LLM.
The wrapped agent exposes a single string parameter input — the calling LLM passes natural-language instructions, which become a user message to the inner agent. The agent's textual response is returned to the outer LLM.
Mirrors the Python reference's ToolWrapper.