#28515 Gemini hallucinates tool argument names when input_schema is in claude-agent-sdk's 'bare field' shape
## Summary
When the wallet's tools are defined via `claude-agent-sdk`'s `@tool` decorator, the `input_schema` is emitted in a non-standard "bare field" shape:
```json { "to": {"type": "string", "description": "Recipient", "required": true}, "amount": {"type": "string", "description": "Amount", "required": true}, "token": {"type": "string", "description": "Token symbol"} } ```
Anthropic's `/v1/messages` API tolerates this. MiniMax (Anthropic-compatible upstream) tolerates this. **Gemini does not** — LiteLLM's `_build_vertex_schema` correctly looks for `properties` (per the JSON Schema spec), finds none, and `filter_schema_fields` strips the schema down to `{"type": "object"}`.
The Gemini model then receives an empty schema for a tool named `transfer` and **hallucinates field names** from the tool description text (e.g., `dst_address` instead of `to`, `coin` instead of `token`).
## Reproduction
Tool definition (via claude-agent-sdk @tool): ```python @tool("transfer", "Send tokens to an address.", { "to": {"type": "string", "description": "Recipient", "required": True}, "amount": {"type": "string", "description": "Amount", "required": True}, "token": {"…