Session Info: Connect iMessage connector (opt-in, lists contacts and group chats)
HOLD: waits for #33660 (step A, the Rust imessage op) to land and publish its app FFI release; this PR then pins that release in Package.swift.
Leo-ask: ask-c41eed1aa4
Leo, on the first iMessage plan ("iMessage on by default. If access is missing, one 'Grant Full Disk Access' step opens the right System Settings pane"):
well i mean like some sort of connect imessage type thing...
This adds that: a Connect iMessage connector in Session Info's Connectors section (Mac only).
- Not connected: an iMessage row with a Connect button. Nothing reads Messages until that click (
imessage.enabled, default false; the row itself shows by default). - Connect walks the missing access in place: Full Disk Access (opens that System Settings pane), then Messages Automation (opens that pane, or Skip to stay read-only). Cancel undoes the opt-in.
- Connected: the row says Connected; opening it lists your contacts and group chats (titles and participants only, read from the local Messages database through the
cmux-imessagereader from #32891), with Disconnect. - Sending still goes through #32919's path and each send still needs your click; this PR adds no send trigger.
Parts: a Rust FFI bridge (cmux-layout-reducer-ffi/src/imessage.rs) over the merged cmux-imessage crate; a thin Swift host (AgentPaneIMessageConnector.swift, permission probe moved into SystemPermissionAccess); the two settings; the web connector (IMessageConnector.tsx, imessage.ts) with gallery variants and tests.
Carried from the lane/imessage-connector-ui branch, whose lane stalled before opening a PR; rebased on feat-cmux-next (one formatting conflict in SessionInfo.tsx, taken as the branch had it). Session Info design spec: design/session-info.md; Connectors stays outside the short default view (#32939).
Risk: touches permissions (probe refactor) and adds an FFI module; reads happen only after the person's Connect click.
Agent session: agent session
🤖 Generated with Claude Code
![Autofix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark-3x.png)
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Adds an opt-in Connect iMessage connector to Session Info's Connectors section (Mac only). Nothing reads Messages until the person clicks Connect, and once connected it lists contacts and group chats from the local Messages database.
- Connect walks the missing access in place: Full Disk Access, then Messages Automation (or Skip to stay read-only); Cancel undoes the opt-in.
- Connected opens a list of contacts and group chats (titles and participants only) with Disconnect, read through the
cmux-imessagereader behind a new Rust FFI bridge. - The connector is visible by default but reads nothing until enabled (
imessage.enabled, default false); sending needs the person's click and stays on the existing path. - An unconnected row keeps the Connectors section folded; "Connect iMessage" appears as the section meta only when no MCP servers are present.