Execute a command over WebSocket, yielding raw message dicts.
Returns a tuple of (message_iterator, control). The control object provides send_kill() and send_input() methods for the CommandHandle.
The iterator yields dicts with a "type" field:
If on_stdout/on_stderr callbacks are provided, they are invoked as data arrives in addition to yielding the messages.
run_ws_stream(
dataplane_url: str,
api_key: Optional[str],
command: str,
*,
timeout: int = 60,
env: Optional[dict[str, str]] = None,
cwd: Optional[str] = None,
shell: str = '/bin/bash',
on_stdout: Optional[Callable[[str], Any]] = None,
on_stderr: Optional[Callable[[str], Any]] = None
) -> tuple[Iterator[dict], _WSStreamControl]