Commit Graph

4977 Commits

Author SHA1 Message Date
Peter Steinberger 7c70571683 chore(lint): clear 172 lint:all baseline violations in five batches (#118098)
* chore(lint): clean Android-Linux app assets batch

* chore(lint): clean setup-launcher-plugin batch

* chore(lint): clean changelog-updater batch

* chore(lint): clean QA-runtime-helper batch

* chore(lint): clean script-tests batch

* fix(mxc): await sandbox spawn before bridge selection

* fix(test): make fake plutil metacharacter escaping survive the template hop
2026-08-02 14:08:09 -07:00
Peter Steinberger 7214577cf1 test(macos): fix three races in the bounded process suites (#118196)
BoundedCommandTests and BoundedProcessTests failed nondeterministically:
4/20 runs idle, 7/8 under CPU saturation. Three separate causes.

1. #require inside a retry loop. waitForPID polled through readPID with
   `try?`, but #require records an issue even when its error is swallowed,
   so the first read of a created-but-not-yet-written pid file failed the
   test outright. Added a non-recording pollPID for the polling path and
   kept the recording read as the authoritative final attempt. The two
   single-read call sites now poll too - echo $$ > file creates and writes
   in two steps, so any single read can see a missing or empty file.

2. A 0.1s deadline racing process spawn. BoundedCommand starts its timeout
   concurrently with the spawn, so the deadline also bounded /bin/sh
   starting and publishing its pid; under load the child was killed before
   it ever wrote the file. Wait for the pid while the run is in flight and
   give the child a deadline well clear of spawn cost.

3. A 1s per-process budget on the concurrent fan-outs. Instrumenting the
   deadline showed a stalled run observed all 64 exits at ~3.1s, clustered
   within 100ms of each other - a global stall, not a straggler. Those
   tests assert that no exit is lost during monitor registration, not
   latency, so the timeout should not double as a performance assertion.
   A missed exit still fails: the 50ms pollUntilExit fallback would never
   complete.

Also widened waitUntilGone, since reaping is asynchronous.

No production code changed. Proof: 30/30 idle and 20/20 under full 32-core
saturation, against 16/20 and 1/8 before.
2026-08-02 14:03:57 -07:00
Peter Steinberger 860b4ee4a7 test(android): share Wear transport fixtures (#118177) 2026-08-02 14:01:28 -07:00
Peter Steinberger 1787cbb9de test(android): compact chat recovery fixtures (#118166) 2026-08-02 13:21:29 -07:00
Peter Steinberger 54c4ff3c06 refactor(swift): consolidate gateway problem mapping (#118107) 2026-08-02 13:17:22 -07:00
Peter Steinberger aae0342f7c test(android): consolidate gateway security fixtures (#118165) 2026-08-02 13:17:01 -07:00
Peter Steinberger b8a6ea12cc refactor(macos): remove the custom menu bar hover card (#118116)
* refactor(macos): remove the custom menu bar hover card

The status item showed two hover affordances at once: the native AppKit
tooltip and a custom SwiftUI panel rendering an "Idle / No recent activity"
card. Keep the native tooltip and drop the custom HUD.

The HUD was the only consumer of the status item's hover tracking, so the
NSTrackingArea and onHoverChanged plumbing in StatusItemMouseRouter goes
with it; click routing is unchanged. WorkActivityStore.lastToolLabel had no
other reader either.

* chore(i18n): refresh native i18n inventory after hover card removal

Deleting HoverHUD.swift shifted the MenuBar.swift line numbers that
apps/.i18n/native-source.json records. Regenerated with
`pnpm native:i18n:baseline`; only line numbers change, no strings added
or removed.

* refactor(macos): drop the orphaned anchored chat panel

Removing the hover card left WebChatManager.togglePanel() without a caller,
and it was the only thing that created the menu-bar-anchored chat popover.
Delete that presentation path: togglePanel/panelHidden, the panel controller
state, WebChatPresentation, WebChatPanel, presentAnchored and its dismiss
monitor, and WindowPlacement.anchoredBelowFrame.

Chat is unaffected as a window - WebChatManager.show() still backs the Dock
menu, --chat and deep links. The status item highlight that tracked chat
window visibility is preserved, renamed to onChatWindowVisibilityChanged
now that no panel exists to confuse it with.

Periphery reports no unused code.

* chore: drop CHANGELOG edit from this PR

AGENTS.md: CHANGELOG.md is release-only and release generation derives it
from merged PRs. Release-note context lives in the PR body instead.

* chore: restore CHANGELOG to the branch base

Correct the previous commit, which restored CHANGELOG.md from current
origin/main and so pulled in an unrelated entry added after this branch
forked. Reset to the merge-base content: this PR now touches no changelog.
2026-08-02 13:10:27 -07:00
Peter Steinberger 5c2559e2d9 test(macos): deduplicate onboarding AI setup fixtures (#118092)
* test(macos): deduplicate onboarding AI setup fixtures

* test(macos): fix fixture handler binding
2026-08-02 11:52:04 -07:00
Peter Steinberger 0335317679 fix(macos): preserve external remote gateway config edits (#118046)
* fix(macos): reconcile external gateway config edits

* refactor(macos): split gateway reconciliation helpers

* chore(macos): refresh native i18n inventory

* refactor(macos): remove obsolete gateway config helper

* test(macos): seed watcher fixtures as canonical

* fix(macos): add gateway config conflict recovery
2026-08-02 11:21:07 -07:00
Peter Steinberger 079d26c92c test(ios): consolidate gateway connection fixtures (#118072) 2026-08-02 11:10:17 -07:00
Peter Steinberger ad53d4419e fix: make gateway token recovery usable from macOS onboarding (#118051)
* fix(gateway): add safe token recovery

Co-authored-by: 宇宙熊Yzx <53250620+849261680@users.noreply.github.com>

* chore: move gateway release note to PR

* test(cli): classify gateway token output

---------

Co-authored-by: 宇宙熊Yzx <53250620+849261680@users.noreply.github.com>
2026-08-02 10:06:50 -07:00
Peter Steinberger 19aad4ac2a fix(macos): cron editor drops advanced delivery routes (#118047)
* fix(macos): preserve advanced cron delivery routing

* fix(macos): mark cron routing labels verbatim

* fix(macos): keep cron routing inventory stable
2026-08-02 10:04:58 -07:00
Peter Steinberger b3da16ffbb test(apple): consolidate outbox fixtures (#118052) 2026-08-02 10:03:57 -07:00
openclaw-mantis[bot] c1e31f1784 chore(i18n): refresh native locales (#117948)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-02 23:03:59 +08:00
Peter Steinberger 2472782622 fix(macos): gate remote onboarding on gateway auth (#117904)
* fix(macos): gate remote onboarding on gateway auth

* fix(macos): address onboarding CI failures

* test(macos): stabilize gateway auth routing coverage

* fix(macos): bound remote gateway onboarding probe

* fix(macos): satisfy remote probe CI guards

* fix(macos): scope remote probe cleanup ownership

* refactor(macos): remove unused health snapshot wrapper
2026-08-02 04:14:54 -07:00
Peter Steinberger 76cb418b6f fix(macos): reopen AI choice, fix daemon error text, hand onboarding off to the dashboard custodian (#117921)
* fix(macos): let onboarding replace an auto-connected AI

The AI page auto-tests the best detected candidate and connects without
asking, then hides every alternative route. Add 'Choose a different AI'
to the connected banner: a re-detect pass with auto-activation
suppressed that ends at the picker (candidates, provider sign-in, API
keys). Also disable the manual key Connect button while another test
runs (submitManualKey silently dropped the tap), and isolate a test
that read the machine's real resume store.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(macos): surface real daemon errors past the Node banner

Gateway daemon failures summarized as 'Node.js v26.5.1' because the
summary takes the last non-empty line and Node fatal errors end with a
version banner. Drop trailing banner lines and prefer the last
error-shaped line above them; all other output keeps its last line.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(macos): hand onboarding off to the dashboard custodian

Native onboarding now ends once inference verifies: welcome, connection,
install (when needed), AI setup. Finish opens the dashboard at
/custodian?onboarding=1, where the custodian onboarding owns memory
import, channels, app recommendations, and the hatch (browser-first per
the onboarding redesign). The native memory-import and permissions
pages leave the first-run flow; 'Set up later' keeps the native ready
page. The native navigation bridge gains a validated optional search
field so the handoff can request onboarding chrome; the URL fallback
carries the query alongside the token fragment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor(macos): delete the unreachable native memory-import module

The dashboard handoff removed the memory-import page from every flow,
leaving the module reachable only from tests. CI's dead-code scan
rightly flagged the first orphans; remove the whole path (model, page,
mascot wiring, tests) instead of trimming symbol by symbol. The
dashboard's own memory-import surface owns the feature.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 02:57:25 -07:00
Peter Steinberger 4e4959b283 refactor(android): consolidate chat controller test setup (#117862) 2026-08-01 23:06:51 -07:00
Peter Steinberger 90a377470f refactor(macos): consolidate gateway process fixtures (#117740) 2026-08-01 19:18:34 -07:00
Peter Steinberger 78193deff3 fix(macos): avoid self-named defaults suite (#117690)
* fix(macos): avoid self-named defaults suite

* chore: keep changelog release-owned
2026-08-01 18:57:42 -07:00
Vincent Koc ff770f9a48 fix(i18n): sync pinned native translations (#117726) 2026-08-02 09:36:29 +08:00
WhatsSkiLL 2fc32204b4 fix(android): show pinned state in sidebar sessions (#117063)
* fix(android): show pinned state in sidebar sessions

* fix(ci): leave native locale refresh to workflow

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
2026-08-01 16:16:49 -07:00
Peter Steinberger a3bdc53a71 test(ios): deduplicate node invoke fixtures (#117670) 2026-08-01 16:07:19 -07:00
Peter Steinberger e49c8339b8 refactor(android): simplify durable outbox test scenarios (#117667) 2026-08-01 15:45:02 -07:00
Peter Steinberger 9e43844264 build: generate native Canvas resources on demand (#117424) 2026-08-01 08:16:56 -07:00
Vincent Koc 7cc2e6d830 fix(ci): repair full release validation regressions (#117447)
* fix(worktrees): reject repositories without commits

* test(memory-wiki): allow agent isolation runtime

* test(ios): await queued approval retry
2026-08-01 14:55:13 +00:00
Harjoth Khara b97a214604 fix(canvas): preserve widgets across derived-name collisions (#117132)
Fixes #116945
2026-08-01 15:33:56 +08:00
Peter Steinberger 45c2d5911a refactor(i18n): remove unused Apple contradiction report (#117182) 2026-07-31 20:36:52 -07:00
Peter Steinberger aae474ab97 fix(macos): stop dashboard windows flashing during reconnects (#117112)
* fix(macos): stop dashboard windows flashing during reconnects

* fix(macos): refresh native localization inventory
2026-07-31 16:56:35 -07:00
metaforismo 102a5915ef fix(ios): restore Magic Keyboard return in chat composer (#116042)
* fix(ios): restore hardware return in chat composer

* test(ios): cover hardware return composer flow

* fix(ios): route history keys through native editor

* fix(ios): satisfy composer lint gates

* test(ios): fix snapshot app lookup

* test(ios): keep snapshot helper nonthrowing

---------

Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-07-31 16:21:41 -07:00
WhatsSkiLL f0170ca238 Android: collapse sidebar search behind header action (#116956)
* feat(android): collapse sidebar search

* test(android): cover sidebar search toggle

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>

* chore(android): refresh sidebar i18n inventory

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>

* test(android): restore sidebar test clock

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>

* test(android): remove stateful sidebar UI test

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-31 12:10:43 -07:00
Vincent Koc 66e1a4ad77 fix(macos): preserve localized setup fallback 2026-08-01 01:07:54 +08:00
Vincent Koc 0e24d596c0 improve(setup): clarify local provider actions 2026-08-01 00:26:40 +08:00
Peter Steinberger 349cc33669 test(android): synchronize Wear channel transport close completion (#116788)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-07-31 04:36:37 -07:00
Vincent Koc 9b736a42c6 feat(models): expose tool support to clients 2026-07-31 18:43:47 +08:00
openclaw-mantis[bot] fe408e109f chore(i18n): refresh native locales (#116640)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-31 18:04:29 +08:00
Vincent Koc 20e68e01df fix(gateway): sign device proofs with challenge time (#116679) 2026-07-31 16:45:53 +08:00
Vincent Koc e460fcfb60 test(ios): remove duplicate deep-link coverage (#116657) 2026-07-31 12:16:40 +08:00
Vincent Koc 9309a4fce9 test(android): remove duplicate setup-code coverage (#116658) 2026-07-31 12:12:35 +08:00
Vincent Koc b2cba4073c improve(macos): reuse the Codex App Server client (#116325)
* perf(macos): reuse Codex app server client

* refactor(macos): split Codex app server client

* fix(macos): enforce Codex frame limits per message

* refactor(macos): remove obsolete Codex wrappers

* test(macos): lock Codex wall-clock deadlines
2026-07-31 10:40:54 +08:00
Vincent Koc 776f564081 improve(macos): reuse Claude session discovery across pages (#116324)
* perf(macos): reuse Claude session discovery

* fix(macos): scope Claude discovery reuse to pagination

* fix(macos): keep Claude cursors restart-safe
2026-07-31 10:40:10 +08:00
Vincent Koc cfb9d2ec76 improve(macos): reuse Gateway search path discovery (#116323)
* perf(macos): reuse gateway search path snapshot

* chore(i18n): refresh native source inventory
2026-07-31 10:37:38 +08:00
Vincent Koc 0929a00c37 merge: improve local model onboarding (#116606)
* origin/improve/lmstudio-model-setup:
  test(setup): allow timeout fallback without prepare options
  chore(setup): refresh generated native artifacts
  fix(setup): sync macOS onboarding strings
  feat(setup): improve local model onboarding
2026-07-31 10:03:40 +08:00
Vincent Koc 88876f780b fix(android): preserve device work across lifecycle changes (#116593)
* fix(android): use configured SDK for screenshot AVDs

* fix(android): keep chat jump control clear of messages

* fix(wear): ignore stale control completions

* fix(android): advertise node permission changes

* fix(android): select play flavor for benchmarks

* test(android): decouple cron benchmark from copy

* fix(android): install play variant in perf scripts

* fix(wear): clear gateway control busy state

* fix(android): surface voice e2e connection errors

* test(android): cover common live node commands

* fix(android): retain share parsing across recreation

* fix(android): retain permission requests across recreation

* fix(wear): bind realtime audio to talk attempts

* fix(android): track active permission host

* fix(wear): own gateway control busy state

* fix(wear): admit realtime channels by attempt

* fix(android): refresh permissions on top resume

* fix(wear): serialize reconnect retirement with writes

* chore(i18n): refresh native source inventory

* fix(wear): retain pending audio through start RPC

* fix(wear): negotiate realtime channel compatibility

* test(wear): assert reconnect outcome without owner churn

* fix(android): move settings prompt with active host

* fix(wear): reject stale relay starts

* chore(changelog): leave notes to release generation
2026-07-31 09:49:11 +08:00
Vincent Koc 2bd9329af2 merge: sync origin/main
* origin/main:
  fix(ai): prevent websocket cache clobber on concurrent acquire (#116216)
  test(ui): settle custodian mobile layout assertions (#116613)
  fix(agents): resume Code Mode through gateway restarts (#116605)
2026-07-31 09:43:10 +08:00
Vincent Koc 32036c473d fix(agents): resume Code Mode through gateway restarts (#116605)
* fix(agents): preserve Code Mode restart recovery

* chore(protocol): regenerate Swift agent params
2026-07-31 09:22:27 +08:00
Vincent Koc 3fba74802b chore(setup): refresh generated native artifacts 2026-07-31 09:06:00 +08:00
Vincent Koc dc5d1c3f38 fix(setup): sync macOS onboarding strings 2026-07-31 08:56:49 +08:00
Vincent Koc f50d4cff45 merge: sync origin/main
* origin/main:
  fix(plugins): keep registry sqlite root consistent (#116427)
  fix(cli): keep Gateway auth failures parseable in JSON (#116597)
  fix(trajectory): preserve prompts in oversized events (#116220)
  test(buzz): add live QA Lab channel lane (#116298)
  chore(i18n): refresh native locales (#116567)
  feat: add OpenClaw TUI prototype skill (#116583)
  fix(update): accept concrete versions selected by ranges (#116585)
  fix(agents): preserve locked session model routes
2026-07-31 08:53:18 +08:00
Vincent Koc 94b85cba5f feat(setup): improve local model onboarding 2026-07-31 08:53:13 +08:00
openclaw-mantis[bot] 8c61044576 chore(i18n): refresh native locales (#116567)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-31 08:29:26 +08:00