mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-02 10:51:33 +00:00
* fix(imessage): bold approval prompt labels in poll mode #113193 added bold headers and labels to the approval reaction prompt, but iMessage only shows that copy when tapbacks own the controls. On any poll-capable bridge the details message is built from `manualFallbackPayload`, the legacy unstyled builder, so every label (`Title:`, `Tool:`, `Host:`, `CWD:`, `Full id:`, ...) reaches Messages as flat text. Native polls are the default on a bridge-v2 host, so in practice #85954 still reproduced after it was closed. Add `nativeControlsPayload` to `ApprovalReactionPendingContent`: the same rich copy as `reactionPayload` minus the tapback hint, for channels whose native controls already own the decision surface. iMessage poll mode now renders it, so both control paths deliver identical styled copy. `imsg poll send --question` has no attributed-body channel, so the poll question keeps the marker-free rendering of that same text; otherwise the balloon would show literal asterisks. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Byq7UrC7ZpMHxoFXcddsa * refactor(plugin-sdk): carry native-controls prompt copy as text The iMessage poll path reads exactly one thing from the native-controls payload: its text. Replace the ReplyPayload field with nativeControlsText so buildApprovalReactionPendingContent stops running the metadata/session-key builder for fields no caller reads, and the '?? ""' sentinel goes away. Relative to main the SDK change stays additive: neither field exists in any release; nativeControlsPayload only ever existed on this branch. * refactor(plugin-sdk): expose native-controls prompt text as a builder, not a type field ClawSweeper flagged that requiring a new member on the shipped ApprovalReactionPendingContent type is source-incompatible for external producers that hand-construct it. The hint-free copy does not need to ride the type at all: export buildApprovalNativeControlsPromptText and let the iMessage handler call it at payload-build time. ApprovalReactionPendingContent is now byte-identical to the shipped shape; the SDK change is a single additive function export. Signal/WhatsApp test fixtures revert to their original form. --------- Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>