Manage a full-duplex conversation channel with another easbot agent endpoint over HTTP or WebSocket.

Inputs (kept minimal):
- operation: connect | list | discover | capabilities | send | status | config | interrupt | close
- baseUrl: target easbot service base URL (required for connect, e.g. ws://localhost:3000)
- connectionId: local connection id (required for remote ops: capabilities/send/interrupt/close/status; auto-resolved from baseUrl if not provided)
- prompt: message to send (required for send)

Operations:
1. connect: Create or reuse a remote session, bind to local connectionId
   - Required: baseUrl (connectionId not needed)
   - Returns: connectionId, sessionId, remoteAgentId, channel
   - No service registration required; pure URL connection is supported

2. list: List all locally managed connections (active sessions)
   - Returns: array of connection info with connectionId, baseUrl, sessionId, channel

3. discover: Discover available agent services
   - Returns: array of { name, status, baseUrl }

4. capabilities: Query remote agent capabilities (ACP initialize)
   - Required: connectionId (auto-resolved from baseUrl)
   - Returns: protocolVersion, authMethods

5. send: Push one message to remote session
   - Required: connectionId, prompt
   - Automatically establishes event subscription on first send
   - Remote responses are injected into local SessionPrompt asynchronously
   - Returns: pending round info (waiting for remote response)

6. status: Inspect local managed connection state
   - Required: connectionId (auto-resolved from baseUrl)
   - Returns: connection state including sessionId, baseUrl, status

7. config: Inspect local agent client config and managed connections count
   - Returns: server config (channel, port, hostname) and managedConnections count

8. interrupt: Cancel remote session and cleanup local interaction state
   - Required: connectionId (auto-resolved from baseUrl)
   - Sends interrupt signal to remote server, cancels subscription
   - Use when you need to abort an ongoing interaction

9. close: Release local connection state and cleanup all interaction resources
   - Required: connectionId (auto-resolved from baseUrl)
   - Always call close when done to prevent resource leaks

Connection Flow:
1. connect + baseUrl -> creates connection, returns connectionId
2. Other operations use connectionId -> auto-resolved from baseUrl if not provided
3. If baseUrl provided but no connectionId, searches existing connections by baseUrl
4. If no matching connection found, connect operation is required first
5. Use discover to find available services before connecting

Local vs Remote Operations:
- Local (no remote RPC): config, list, discover
- Remote (requires connectionId after connect): capabilities, send, status, interrupt, close

Round Control:
- Each connection has a maximum of 10 interaction rounds by default
- One round = one question (send) + one answer (received response)
- When round limit is reached, subscription is automatically cancelled
- Use `close` to manually cleanup when interaction is complete

Returns:
- Standard tool result: { title, metadata: { count, ... }, output: XML format }
- Output format is XML-like for easy parsing:
  - <config>: configuration info
  - <connections>: list of active connections
  - <connection>: single connection details
  - <services>: discovered agent services
  - <capabilities>: remote agent capabilities
  - <agent_message>: message sent status, response will be injected automatically

Notes:
- Send without prior connect will fail with explicit error
- The tool automatically establishes subscription on first send
- Remote responses flow back via subscription into local conversation
- IMPORTANT: Always call `close` when interaction is complete to cleanup resources
- Use `interrupt` to abort an ongoing interaction before completion
- Pure URL connection: no service registration needed, just provide baseUrl
- Use discover to find available agent services before connecting
- Supports HTTP and WebSocket channels only