mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-22 02:15:26 -06:00
e7cfff2167
* feat(control-ui): stream live draft previews in the typing indicator Multi-identity sessions now show what a teammate is typing, not just that they are typing: the composer's per-keystroke session.typing sends carry a bounded tail of the draft (optional preview field, 400 code points max), the gateway throttle re-emits on changed payloads at 250ms (boolean-only stays at 1s, trailing edge keeps the latest draft), and the transcript renders a per-actor bubble with the live text plus a blinking caret. Actors without preview data keep the three-dot bubble. Previews are ephemeral presence: never persisted, never part of the session transcript or model context, excluded from aria-live regions, and gated by the existing >=2-live-viewers, sharing-role, and incognito checks. No new config surface. * chore(protocol): regenerate Swift gateway models for typing preview * fix(gateway): aggregate typing previews across same-actor connections A boolean-only session.typing update from a second connection of the same actor (another tab or device) erased their live draft preview, because typing liveness aggregated per actor while the broadcast preview came only from the latest request. Preview aggregation now lives with the connection aggregation owner: updateTypingConnections tracks per-connection previews and returns the newest non-empty preview among live connections, so the broadcast keeps the active draft until its connection stops or expires. Regression fails pre-fix (event lost its preview field).