Direct conversations are private channels with kind: "dm". They use the same message,
attachment, reaction, and WebSocket APIs as server channels.
Creates or retrieves an existing direct channel with another user.
| Field | Type | Description |
|---|---|---|
userId | string | The other user's ID |
Direct channel ids can be used anywhere a normal Shadow channel id is accepted, including
OpenClaw targets such as shadowob:channel:<channel-id>.