4d195be713
Adds a BlueBubbles channel so ZeroClaw can send and receive iMessages via a locally-running BlueBubbles server on macOS. What changed: - src/channels/bluebubbles.rs — new BlueBubblesChannel implementing Channel - Webhook-based ingestion (push, no polling) - Allowlist + ignore_senders filtering - Rich text via iMessage Private API (attributedBody bold/italic/underline) - Typing indicator (start_typing / stop_typing) while LLM processes - Message effects ([EFFECT:confetti], [EFFECT:slam], etc.) - 500-entry fromMe FIFO cache for reply-context resolution - Attachment placeholder format matching OpenClaw (<media:image>) - 38 unit tests covering parsing, filtering, timestamps, effects - src/config/schema.rs — BlueBubblesConfig struct + ChannelsConfig field - Fields: server_url, password, allowed_senders, webhook_secret, ignore_senders - Debug impl redacts password and webhook_secret - src/gateway/mod.rs — POST /bluebubbles route + handler - Bearer token auth if webhook_secret is set - Typing indicator around LLM call - Memory auto-save on incoming messages - src/channels/mod.rs — module + re-export + iMessage delivery instructions - src/providers/cursor.rs — fix pre-existing missing quota_metadata field Non-goals: BlueBubbles Private API pairing, polling mode, contact management. Closes #2268