feat(macos): visible-markdown copy, full-message reader, and independent reasoning/tool toggles#110276
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 68da399ea3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| self.phase = .failed(String(localized: "The full message is no longer available.")) | ||
| return | ||
| } | ||
| let markdown = ChatMessageVisibleText.visibleText(in: message) |
There was a problem hiding this comment.
Preserve enabled trace content in full-message reader
When a truncated assistant row is visible only because Show Reasoning or Show Tool Activity is enabled, the new reader still calls ChatMessageVisibleText.visibleText, which always strips thinking and non-text tool content. In that scenario the user can choose Open Full Message from a visible truncated reasoning/tool row, but the sheet either omits the content they were viewing or reports “no readable text”; the reader needs to render with the same display options used by the transcript bubble.
Useful? React with 👍 / 👎.
|
Codex review: needs real behavior proof before merge. Reviewed July 17, 2026, 10:28 PM ET / July 18, 2026, 02:28 UTC. Summary PR surface: Docs 0, Other +2454. Total +2454 across 36 files. Reproducibility: yes. from source: an iOS host using the default Review metrics: 1 noteworthy metric.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review findings
Review detailsBest possible solution: Carry the active display options into the full-message reader, then either implement Do we have a high-confidence way to reproduce the issue? Yes, from source: an iOS host using the default Is this the best way to solve the issue? No: the current shared reader is not the best fix until it carries transcript display state and the capability boundary is made explicit across macOS and iOS. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: unclear because the file could not be read completely. Codex review notes: model internal, reasoning high; reviewed against 1bd6280f8549. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Docs 0, Other +2454. Total +2454 across 36 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (1 earlier review cycle)
|
…ed messages, and independent reasoning/tool toggles
68da399 to
ca04727
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ca04727877
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if role == "assistant", | ||
| message.isTruncated, | ||
| let messageID = message.transcriptMessageID?.trimmingCharacters(in: .whitespacesAndNewlines), | ||
| !messageID.isEmpty |
There was a problem hiding this comment.
Gate full-message action on transport support
When this shared view is used by iOS or any host that does not override OpenClawChatTransport.requestFullMessage, decoded __openclaw metadata now makes truncated assistant rows satisfy this condition, but the protocol default still returns nil and IOSGatewayChatTransport has no override. Those users will see an actionable “Open Full Message” item that always opens the failure state even though the gateway can serve chat.message.get; hide the action unless the transport supports it or implement the new method for the other gateway transports.
Useful? React with 👍 / 👎.
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: feat(macos): visible-markdown copy, full-message reader, and independent reasoning/tool toggles This is item 1/1 in the current shard. Shard 0/1. This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |
|
Merged via squash.
|
…ent reasoning/tool toggles (openclaw#110276) * feat(clients): copy visible markdown, full-message reader for truncated messages, and independent reasoning/tool toggles * chore(i18n): translate new reader and trace strings and regenerate catalogs * test(ios): adopt reader display-options API in render smoke tests
What Problem This Solves
Three message-level gaps versus the web chat: copying an assistant message grabs raw primary text (including markup the user never saw), messages truncated by bounded history cannot be opened in full, and reasoning + tool activity share a single all-or-nothing toggle while the web controls them independently.
Why This Change Was Made
Round 3 of native/web chat alignment, scoped to the message layer:
__openclaw.id/__openclaw.truncatedmetadata (wire contract verified atsrc/gateway/session-utils.fs.ts:792and the...(truncated)...marker atchat-display-projection.ts:80); truncated messages gain an "Open Full Message" action that fetcheschat.message.get(schema verified inpackages/gateway-protocol/src/schema/logs-chat.ts) into a selectable, scrollable reader with loading/unavailable/failure states. The transport method is additive with a nil default, so other hosts compile unchanged.User Impact
Copy produces exactly what you read; long responses clipped by history limits are one click from their full content; and reasoning vs tool visibility are now separate choices, both remembered — matching the web chat.
Evidence
GatewayProcessManagerTests(subsystem not modified by this PR; under separate investigation).pnpm format:swift,pnpm lint:swift, i18n sync idempotent; new strings translated across all 21 locales; Apple/Android catalogs regenerated.