Changelog
v0.1 — W12 wrap-up (May 2026)
The bridge data path is feature-complete for a
chat-with-tools-and-approvals workflow. Everything below is wired
through /v1/bridge/* and ships in iOS Phase 3.
Added
/v1/bridge/createTask | updateTask | finishTask— mirror the existingtask_*SAP events for paired bridges. Surfaces tool calls inside the bubble (drill-in) and on the live activity deck./v1/bridge/requestApproval— HITL for shell commands and plugin invocations. Resolution flows back through the bridge bus so the bridge can callexec.approval.resolveon OpenClaw./v1/me/sessions/:id/archive+/unarchive— chat archive affordance with cross-device SSE sync./v1/me/installations/:idPATCH now acceptscustom_emojialongsidecustom_display_name.installation_updatedSSE event for cross-device rename + emoji sync.- Phase 3.5 — bridge task routes (
createTask,updateTask,finishTask,requestApproval) are idempotent on their natural ids. Re-sending the same shape returnsidempotent: true. See Idempotency & resume. - Phase 3.6 — structured validation errors.
400 invalid_requestresponses now carry anerrors[]array with field paths (attachments.0.size), zod issue codes (too_big,invalid_type), and human messages. See Errors & rate limits. - Phase 3.6 —
X-RateLimit-*headers on every bridge response, bucketed (msg,delta,task,approval,memory,default) with documented capacities and refill rates. - Phase 3.6 —
X-Request-IDandtraceparent(W3C Trace Context) on every/v1/*response. See Observability. - Phase 3.7 —
GET /v1/me/snapshotcold-launch endpoint. Returns{ ts, pending_approvals }. iOS folds it before the SSE attaches so a "may I run this?" sheet that fired while the app was killed reappears on relaunch. - iOS: streaming-state granularity (
.thinking → .streamingon first delta). - iOS: file & image attachments forwarded through the bridge to OpenClaw's media pipeline.
- iOS: persistent tool segments inside the assistant bubble (the
task_*events now also yield to the in-flightsend()continuation, whichSessionStore's accumulator folds intoChatMessage.segments).
Fixed
- Snake_case sweep across
/v1/me/*(lib/wire.tsprojector). PreviouslyPlatformSession.lastActivityAtwas silently dropping tonow()because the server emittedlastActivityAtand iOS expectedlast_activity_at. GET /v1/me/sessions/:id/messagesreturns wire-shape rows now; every chat history fetch was a hard-fail decode prior to this.- Schema migration 0003 —
chat_sessions.agent_idnullable for bridge-owned sessions. - Schema migration 0004 —
approvals.agent_idnullable for bridge approvals. - Schema migration 0005 —
installations.custom_emojitext column.
Deferred
- Question prompts (
AskUserQuestiontool surface). - Server-side full-text search.
- Per-session model picker.
- Device-capability passthrough for bridge agents.
- Shared-agent path (
/v1/bot/*,agt_*tokens). The protocol RFC defines it; iOS does not surface it. Personal bridges (inst_*) are the supported path indefinitely.
v0.0 — W11 (April 2026)
- First end-to-end pairing flow.
/v1/bridge/sendMessage | sendMessageDelta | sendMessageEnd.- Bridge connector dist (
@sophonai/openclaw) shipped to npm. - iOS PlatformAdapter consumes the bridge namespace.