Skip to content

macOS: improve chat, browser, cron, and permissions flows#39516

Closed
ImLukeF wants to merge 4 commits intoopenclaw:mainfrom
ImLukeF:codex/macos-app-fixes
Closed

macOS: improve chat, browser, cron, and permissions flows#39516
ImLukeF wants to merge 4 commits intoopenclaw:mainfrom
ImLukeF:codex/macos-app-fixes

Conversation

@ImLukeF
Copy link
Copy Markdown
Contributor

@ImLukeF ImLukeF commented Mar 8, 2026

Summary

This improves several rough edges in the macOS app and shared mac chat UI:

  • support pasting images into the chat composer from common macOS pasteboard formats
  • hide completed assistant trace/thinking output from the transcript and drop empty ghost bubbles
  • strip transport/debug wrapper noise from rendered chat messages
  • make Cron decoding lossy so one malformed entry does not break the whole tab
  • advertise browser capability from the mac node and proxy browser.proxy requests locally
  • make the Permissions tab scroll cleanly, keep the trailing action/status UI readable, and refresh status after returning from System Settings

Testing

  • swift test --package-path apps/shared/OpenClawKit --filter AssistantTextParserTests
  • swift test --package-path apps/shared/OpenClawKit --filter ChatComposerPasteSupportTests
  • swift test --package-path apps/shared/OpenClawKit --filter ChatMarkdownPreprocessorTests
  • swift test --package-path apps/macos --filter SettingsViewSmokeTests
  • swift test --package-path apps/macos --filter OnboardingViewSmokeTests
  • swift test --package-path apps/macos --filter GatewayEndpointStoreTests
  • swift test --package-path apps/macos --filter MacNodeRuntimeTests
  • swift test --package-path apps/macos --filter CronModelsTests
  • swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests

Manual verification

  • confirmed local chat replies work in the rebuilt mac app
  • confirmed image paste works in the composer
  • confirmed completed tool/thinking trace no longer clutters the transcript
  • confirmed browser requests work from the mac app
  • confirmed permissions UI behaves more cleanly after requesting access

With Love From Luke

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b97570e231

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 8, 2026

Greptile Summary

This PR polishes several macOS-side rough edges across five areas: lossy cron decoding, browser capability advertisement and local proxying, chat message filtering (hiding ghost bubbles and stripping transport noise), macOS clipboard image paste, and a more scrollable/refreshable Permissions settings tab.

The overall implementation is high quality, well-tested, and follows established patterns in the codebase. Two points to be aware of:

  • handleBrowserProxyInvoke is missing a runtime guard (OpenClawConfigFile.browserControlEnabled()). Every other capability-gated handler (handleCameraInvoke, canvas block at the top of handleInvoke) has a local guard so requests are rejected even if the command somehow arrives during a mid-reconnect window. The browser handler skips this, making it inconsistent with the rest of the node.
  • Synchronous Data(contentsOf:) in imageAttachmentsFromFileURLs runs on the main thread during a paste or drop operation. For typical screenshot-sized files this is fine, but a user dropping a large HEIC or TIFF raw file into the composer could cause a brief UI freeze. An async read path would be safer.

Confidence Score: 4/5

  • This PR is safe to merge. It fixes several UX rough edges and adds well-tested features with no data-loss risk.
  • The changes are well-scoped, each area has corresponding unit tests, and the core logic (lossy cron decoding, paste support, text parser, markdown preprocessor) is solid. The two findings — the missing browser-control guard and the synchronous main-thread file read — are valid but neither represents a critical blocking issue. The guard inconsistency is a minor defensive-programming gap given the gateway is the primary routing gatekeeper. The file read concern is a performance edge case for large files. Both are worth addressing but don't block merging.
  • apps/macos/Sources/OpenClaw/NodeMode/MacNodeRuntime.swift (missing browser-control guard) and apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatComposer.swift (synchronous main-thread file read in paste handler)

Last reviewed commit: b97570e

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ae98aa1f38

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +83 to +84
let controlPort = GatewayEnvironment.gatewayPort() + 2
let baseURL = URL(string: "http://127.0.0.1:\(controlPort)")!
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Route browser proxy through service available in remote mode

In remote mode the app explicitly stops the local gateway (ConnectionModeCoordinator.apply, remote branch), but this proxy always targets 127.0.0.1:(gatewayPort+2), which is the gateway-hosted browser-control HTTP port. That means browser.proxy will consistently fail for remote node sessions even though this node advertises browser capability and browser.proxy, so browser requests routed to the mac node become unusable in remote deployments.

Useful? React with 👍 / 👎.

steipete added a commit that referenced this pull request Mar 8, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
@steipete
Copy link
Copy Markdown
Contributor

steipete commented Mar 8, 2026

Landed on main from a fresh temp branch off main and squashed as a single commit.

What landed:

Landed commit:

Source commits:

Thanks @Imhermes1.

@steipete steipete closed this Mar 8, 2026
Get-windy pushed a commit to Get-windy/JieZi-ai-PS that referenced this pull request Mar 8, 2026
上游主要更新(5d22bd029 → 92648f9):
- fix(agents): 扩大 402 临时限速错误的检测范围,允许计费冷却探测(openclaw#38533)
- fix(ui): 修正控制台设备鉴权 token 签名问题
- CLI: 避免无监听归因时的误判更新重启失败(openclaw#39508)
- fix: 合入社区贡献 PR openclaw#39516(@Imhermes1)
- build: 版本升级至 2026.3.8,发布 v2026.3.7 tag

本地累积更新(自上次同步):
- feat: OAuth token 自动续期 —— cron 触发前预检 token 并自动刷新
- fix: oauth-refresh-daemon shouldRefresh 修复(已过期 token 不再被跳过)
- fix: 守护进程失败3次后重置计数器,避免永久停止刷新
- feat: 智能路由模型账号选择、模型管理全面优化
- feat: 飞书/钉钉频道会话聚合历史视图
Saitop pushed a commit to NomiciAI/openclaw that referenced this pull request Mar 8, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
GordonSH-oss pushed a commit to GordonSH-oss/openclaw that referenced this pull request Mar 9, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
jenawant pushed a commit to jenawant/openclaw that referenced this pull request Mar 10, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
sauerdaniel pushed a commit to sauerdaniel/openclaw that referenced this pull request Mar 11, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
dhoman pushed a commit to dhoman/chrono-claw that referenced this pull request Mar 11, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
senw-developers pushed a commit to senw-developers/va-openclaw that referenced this pull request Mar 17, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
V-Gutierrez pushed a commit to V-Gutierrez/openclaw-vendor that referenced this pull request Mar 17, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
alexey-pelykh added a commit to remoteclaw/remoteclaw that referenced this pull request Mar 22, 2026
macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
(cherry picked from commit d15b6af)

# Conflicts:
#	CHANGELOG.md
#	apps/macos/Sources/RemoteClaw/NodeMode/MacNodeBrowserProxy.swift
#	apps/macos/Sources/RemoteClaw/NodeMode/MacNodeModeCoordinator.swift
#	apps/macos/Sources/RemoteClaw/NodeMode/MacNodeRuntime.swift
#	apps/macos/Sources/RemoteClaw/PermissionsSettings.swift
#	apps/macos/Tests/RemoteClawIPCTests/MacNodeBrowserProxyTests.swift
#	apps/shared/RemoteClawKit/Sources/RemoteClawChatUI/ChatView.swift
#	apps/shared/RemoteClawKit/Sources/RemoteClawKit/BrowserCommands.swift
#	apps/shared/RemoteClawKit/Tests/RemoteClawKitTests/ChatComposerPasteSupportTests.swift
alexey-pelykh added a commit to remoteclaw/remoteclaw that referenced this pull request Mar 22, 2026
…r live test fixes (#1795)

* Changelog: credit openclaw#39328 to @vincentkoc

(cherry picked from commit 2ec478c)

* Changelog: move openclaw#39328 credit to section end

(cherry picked from commit 5b30c9d)

* Pi Runner: gate parallel_tool_calls to compatible APIs (openclaw#39356)

* Pi Runner: gate parallel_tool_calls payload injection

* Pi Runner: cover parallel_tool_calls alias precedence

* Changelog: note parallel_tool_calls compatibility fix

* Update CHANGELOG.md

* Pi Runner: clarify null parallel_tool_calls override logging

(cherry picked from commit daecd2d)

# Conflicts:
#	CHANGELOG.md
#	src/agents/pi-embedded-runner-extraparams.test.ts
#	src/agents/pi-embedded-runner/extra-params.ts

* docs: add changelog for Telegram DM draft restore (openclaw#39398)

(cherry picked from commit 722c5e5)

* fix: document discord agentComponents schema parity (openclaw#39378) (thanks @gambletan) (openclaw#39378)

Co-authored-by: Shadow <[email protected]>
(cherry picked from commit 9c8e34d)

* fix: land openclaw#39337 by @goodspeed-apps for acpx MCP bootstrap

Co-authored-by: Goodspeed App Studio <[email protected]>
(cherry picked from commit 5659d7f)

# Conflicts:
#	extensions/acpx/openclaw.plugin.json
#	extensions/acpx/src/config.test.ts
#	extensions/acpx/src/config.ts
#	extensions/acpx/src/runtime-internals/test-fixtures.ts
#	extensions/acpx/src/runtime.test.ts
#	extensions/acpx/src/runtime.ts
#	extensions/acpx/src/service.ts

* docs: clean up latest changelog sections

(cherry picked from commit c743fd9)

* fix: land contributor PR openclaw#39516 from @Imhermes1

macOS app/chat/browser/cron/permissions fixes.

Co-authored-by: ImHermes1 <[email protected]>
(cherry picked from commit d15b6af)

# Conflicts:
#	CHANGELOG.md
#	apps/macos/Sources/RemoteClaw/NodeMode/MacNodeBrowserProxy.swift
#	apps/macos/Sources/RemoteClaw/NodeMode/MacNodeModeCoordinator.swift
#	apps/macos/Sources/RemoteClaw/NodeMode/MacNodeRuntime.swift
#	apps/macos/Sources/RemoteClaw/PermissionsSettings.swift
#	apps/macos/Tests/RemoteClawIPCTests/MacNodeBrowserProxyTests.swift
#	apps/shared/RemoteClawKit/Sources/RemoteClawChatUI/ChatView.swift
#	apps/shared/RemoteClawKit/Sources/RemoteClawKit/BrowserCommands.swift
#	apps/shared/RemoteClawKit/Tests/RemoteClawKitTests/ChatComposerPasteSupportTests.swift

* fix: stage docker live tests from mounted source

(cherry picked from commit 21df014)

* fix: add minimal process shim for acpx mcp-agent-command

The upstream process.ts depends on gutted runtime-api, so provide a
minimal spawnAndCollect implementation that satisfies the import.

---------

Co-authored-by: Vincent Koc <[email protected]>
Co-authored-by: Ayaan Zaidi <[email protected]>
Co-authored-by: gambletan <[email protected]>
Co-authored-by: Shadow <[email protected]>
Co-authored-by: Peter Steinberger <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants