Swap one bot for another in a fund's roster.
Closes the old bot's positions and opens new ones for the replacement.
Incurs friction cost — use estimate_swap_cost first.
Args:
fund_id: The fund's ID.
old_bot_id: The bot to remove.
new_bot_id: The bot to add in its place.
new_bot_domain: The new bot's domain (e.g. "eth_usdc").
weight: Allocation weight for the new bot (defaults to old bot's weight).
reason: Optional reason for the swap.
Returns the updated roster entry and friction estimate.
ConnectorNo auth