Commit Graph

3899 Commits

Author SHA1 Message Date
Peter Steinberger 477b2860d5 feat(macos): add tabs to the dashboard link browser sidebar (#103438)
Each inline link opens in its own tab (exact-URL dedupe); sidebar
target=_blank links open new tabs. Tab strip on top with click to
activate, close buttons, middle-click close, pointer-drag reorder, and
a per-tab context menu (Open in Default Browser, Copy Link, Reload,
Close Tab, Close Other Tabs). Navigation controls sit below the tabs
and follow the active tab. Closing the last tab collapses the sidebar
with no lingering webviews or history.
2026-07-10 06:51:49 +01:00
Peter Steinberger 461772868d fix(computer): prevent stale, replayed, and post-cancel desktop actions (#103422)
* fix(ai): preserve streamed tool-call identity

* fix(computer): bind actions to current tool authority

* fix(macos): serialize computer control lifecycle

* docs(computer): document hardened control contract

* chore: follow release-owned changelog policy

* test(agents): cover node list cancellation
2026-07-10 06:47:56 +01:00
Peter Steinberger 0e4c7cd155 feat(ios): render native markdown headings (#103404) 2026-07-10 06:21:46 +01:00
Sahil Satralkar 4e3d91a020 feat: iOS Privacy screen location controls (#103096)
* Fix iOS privacy location card presentation

* Refine iOS location privacy controls

* fix(ios): restore location access chooser

* style(ios): format location access dialog

* chore: keep release note in PR body

* test(ios): keep privacy coverage focused

* fix(ios): clear unresolved location mode

* chore(ios): refresh native strings

* fix(ios): localize location status copy

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 05:42:04 +01:00
Peter Steinberger 1f12e7fc87 fix(ios): replace dead-end discovered gateway connects (#103289)
* fix(ios): clarify insecure discovered gateways

* fix(ios): finish discovered gateway guidance

* fix(ios): preserve gateway failure expression
2026-07-10 05:08:58 +01:00
Peter Steinberger a789b92b39 fix(macos): harden fresh AI onboarding (#102637)
* fix(macos): bootstrap Codex before onboarding test

* fix(plugins): activate deferred runtimes on demand

* fix(macos): stage Codex runtime for onboarding probe

* fix(macos): expose sanitized onboarding errors

* fix(codex): reuse native CLI auth during onboarding

* fix(macos): hide Crestodian without inference

* fix(codex): honor explicit runtime policy during setup

* fix(onboarding): redact verification errors

* fix(macos): reset onboarding state with gateway route

* fix(onboarding): persist Codex plugin install metadata

* chore: refresh onboarding inventories

* fix(macos): restart AI setup after gateway change

* chore: refresh native onboarding inventory

* fix(onboarding): defer gateway restart until setup persists

* fix(macos): reset Crestodian on gateway changes

* chore(macos): refresh native i18n inventory

* fix(onboarding): harden inference setup state

* docs(skills): reuse pristine Parallels snapshots

* chore(macos): refresh onboarding i18n inventory

* fix(onboarding): prevent stale gateway and install state

* docs(skills): preserve saved Parallels sessions

* fix(macos): balance AI onboarding layout

* fix(parallels): parse npm workspace pack output

* chore(macos): refresh onboarding i18n inventory

* fix(parallels): bundle workspace runtime in package artifact

* fix(parallels): isolate canonical package helper

* fix(parallels): pack self-contained workspace artifact

* fix(packaging): exclude macOS app bundle

* fix(macos): restart inference checks after route changes

* docs(changelog): defer onboarding note to release

* fix(onboarding): enforce inference-first gateway setup
2026-07-10 04:59:15 +01:00
Peter Steinberger 1696366f88 feat(android): add safe cron job management (#102997)
* feat(android): add safe cron job management

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>

* fix(android): harden cron editor state

* fix(android): preserve cron state across lifecycle

* fix(android): satisfy cron release gates

* fix(android): retain cron drafts outside saved state

* fix(android): scope cron auto-delete to one-shot jobs

* fix(android): use Compose activity owner

* docs(changelog): note Android cron management

* fix(cron): harden Android job management

* chore(i18n): refresh Android cron inventory

* test(cron): cover enriched read views

* chore(changelog): defer Android cron note to release

---------

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>
2026-07-10 04:12:18 +01:00
NianJiu 05d17289c9 fix(android): order disconnect after in-flight gateway work (#103068)
* fix(android): drain gateway events before disconnect callback

* chore(android): refresh native i18n inventory

* chore(android): refresh native i18n inventory

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-10 01:51:51 +01:00
NianJiu 04c090fb50 fix(ios): return promptly from noncooperative timeouts (#103066)
* fix(ios): return promptly from noncooperative timeouts

* fix(apple): harden async timeout cancellation

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>

* fix(apple): preserve legacy location requests

* style(apple): format location continuation code

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 00:29:03 +01:00
Peter Steinberger c6d7088035 refactor(android): align talk levels and thinking state with iOS/macOS (#103130)
* refactor(android): align talk levels and thinking state with iOS/macOS

TalkAudioLevel.kt ports OpenClawKit's level scale exactly: PCM16 RMS
through the shared 50 dB window replaces mean-abs (mic/talk/playback)
and linear peak (voice notes), so Android waveforms read identically to
iOS/macOS at the same loudness. The waveform's Thinking phase now comes
from a typed awaitingAgent StateFlow set alongside every status change
in TalkModeManager instead of the UI matching status string literals;
forgetting the flag at a new status site fails safe to Listening/Idle.

* fix(android): keep awaiting-agent flag intact on no-op status republishes

* chore(i18n): resync native inventory
2026-07-09 23:59:12 +01:00
Peter Steinberger f5806d08e2 refactor(gateway): retire the standalone node pairing store (#103120)
* refactor(gateway): fold node pairing store into device records

* docs+cli: retire standalone node pairing store references

* test(infra): respec node pairing as device-backed surface approvals

* test(infra): assemble migration token fixtures dynamically

* fix(pairing): preserve node surface across device re-approval, strip legacy tokens in CLI JSON

* test(gateway): drop retired node token from pairing fixtures

* chore(protocol): regenerate Swift models, drop dead pairing-pending module
2026-07-09 22:58:03 +01:00
Peter Steinberger db44b284ff fix: keep usage day buckets correct across DST (#103097)
* fix: bucket usage days across DST

* docs: document DST-aware usage dates

* perf: reuse usage day formatters

* fix: preserve usage fallback on older gateways

* docs: normalize usage changelog entry

* docs: leave release changelog unchanged

* fix: handle skipped timezone dates
2026-07-09 22:39:57 +01:00
Peter Steinberger 4aa8bf12e3 refactor(voice): dedupe talk audio primitives into OpenClawKit (#103099)
* refactor(voice): dedupe talk audio primitives into OpenClawKit

One buffered TTS clip player (watchdog + metering) shared by iOS and
macOS replaces the near-identical pair; macOS TalkPlaybackResult was a
field-for-field duplicate of StreamingPlaybackResult and is gone. One
AVAudioPCMBuffer RMS helper replaces five per-file copies; the metered
PCM passthrough moves into PCMPlaybackEnvelope; TalkModeManager's
duplicated ElevenLabs PCM-then-mp3-retry blocks collapse into one
helper. Net -378 lines, no behavior change.

* fix(ios): drop stray blank line and resync i18n inventory

* fix(ios): drop stray blank line after helper extraction
2026-07-09 22:21:00 +01:00
Peter Steinberger af6a58a2ba refactor(android): remove orphaned sheet composer (#103094) 2026-07-09 21:25:22 +01:00
Ben.Li 1d4c17073c fix(android): keep link preview metadata UTF-16 safe (#102988)
* fix(android): keep link preview metadata UTF-16 safe

* refactor(android): share UTF-16-safe truncation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 20:58:18 +01:00
Peter Steinberger d8d369b065 feat(macos): open dashboard links in a sidebar browser (#102899)
* feat(macos): add dashboard link browser

* fix(macos): preserve browser navigation state

* fix(macos): preserve accessible external link activation

* fix(macos): preserve trusted editor handoff

* docs: refresh dashboard link map

* chore: keep dashboard release note in PR

* fix(macos): harden sidebar browser lifecycle
2026-07-09 16:40:50 +01:00
Peter Steinberger 20816f676f feat(voice): universal talk waveform driven by real audio levels (#102901)
* feat(voice): universal talk waveform driven by real audio levels

One shared Siri-style talk animation across iOS, watchOS, macOS, and
Android (TalkWaveformView + exact Compose port), replacing per-platform
fakes: synthetic speaking pulses, constant speech-detected power, static
Android bar rows, flat realtime listening. Listening/recording follow
live mic levels on every route; agent speech follows the real playback
envelope (AVAudioPlayer metering + playback-aligned PCM envelope +
WebRTC stats); voice-note recording shows a live capture wave.

* fix(android): order waveform imports and sync native i18n inventory

* chore(i18n): resync native inventory after rebase
2026-07-09 16:33:25 +01:00
Peter Steinberger 54f45a950b feat(watchos): connect directly to Gateway as a node (#102893)
* feat(watchos): add direct gateway node

* docs: refresh watch node docs map

* chore: leave release notes to release workflow

* chore(ios): refresh native localization inventory

* fix(watchos): keep direct node policy bounded
2026-07-09 15:53:02 +01:00
Peter Steinberger b80062be3a improve(ui): drop the redundant desktop top bar and add back/forward navigation to the macOS app (#102808)
* feat(ui): drop the desktop top bar in favor of sidebar navigation

The Control UI top bar only rendered the OpenClaw › agent › page breadcrumb
on desktop, duplicating the sidebar. Desktop now renders no topbar row; the
row returns solely as the chat split toolbar's backdrop. Narrow viewports
keep the header (drawer toggle, brand, command-palette search) and now show
the brand across the whole drawer range. Routing already uses pushState, so
browser back/forward traverses navigation.

* feat(macos): add back/forward controls to the dashboard window

Native titlebar buttons next to the traffic lights drive WKWebView history,
which carries the Control UI's pushState navigation; enabled state tracks
canGoBack/canGoForward via KVO and trackpad swipe gestures are enabled too.
Back/forward traversals to entries from a replaced gateway endpoint cancel
silently instead of opening a dead URL in the system browser.

* fix(macos): keep the dashboard drag strip off the web content column

With the desktop topbar row removed, the 28px mid-window drag region sat on
top of the content column (chat thread has no top padding) and swallowed
clicks as window drags. Shrink it to a 12px edge strip; the sidebar region
over the reserved native-chrome padding stays the primary drag surface.
2026-07-09 15:46:59 +01:00
Peter Steinberger f8dbd34ab8 feat(nodes): add computer use (computer.act) on macOS nodes via Peekaboo (#102776)
* feat(nodes): add computer use (computer.act) on macOS nodes via Peekaboo

* fix(nodes): release held computer.act input on node disconnect/stop/disable

* fix(nodes): release held computer.act input armed after a lifecycle release

* fix(nodes): scope computer.act lifecycle catch-up release to the arming action

* chore(nodes): register computer tool display metadata, sync native i18n, doc-comment constants

* fix(nodes): preserve caught-error cause in computer tool resolver; regen docs map
2026-07-09 15:28:09 +01:00
Peter Steinberger d9f8fc6322 feat(android): add system app language selection (#102876)
Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>
2026-07-09 15:27:36 +01:00
Raghav Sethi 19f42a27e5 feat(ios): redesign Control tab to a flatter, card-based layout (#98582)
* feat(ios): refresh Control tab layout

Co-authored-by: Raghav Sethi <rsraghavsethi@gmail.com>

* fix(ios): align Control card edges

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 15:08:07 +01:00
Vincent Koc cb7468fc58 refactor(android): remove orphaned legacy screens (#102809) 2026-07-09 06:02:30 -07:00
Peter Steinberger 411bf2ad4b test(android): cover discovery and startup gates (#102758)
* test(android): cover discovery and startup gates

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>

* test(android): keep startup gate tests keystore-free
2026-07-09 13:25:40 +01:00
Peter Steinberger 66db3024bc test(android): cover main activity lifecycle gates (#102764) 2026-07-09 13:04:57 +01:00
Peter Steinberger 6621ead871 improve(ios): manage notifications from Privacy (#102733)
* improve(ios): manage notifications from privacy

Co-authored-by: Sahil Satralkar <62758655+sahilsatralkar@users.noreply.github.com>

* fix(ios): make notification status returns explicit

---------

Co-authored-by: Sahil Satralkar <62758655+sahilsatralkar@users.noreply.github.com>
2026-07-09 12:35:29 +01:00
Peter Steinberger c046fbd451 fix(macos): open dashboard for existing gateways (#102677)
* fix(macos): skip onboarding for existing gateways

* chore: keep changelog release-owned

* chore(macos): refresh native i18n inventory
2026-07-09 12:17:41 +01:00
snowzlmbot 6fef79a28d feat(android): add Skill Workshop settings panel (#101911)
* feat(android): add Skill Workshop settings

* fix(android): scope Skill Workshop state by agent

* fix(android): confirm Skill Workshop proposal actions

* fix(android): strengthen Skill Workshop action proof gates

* fix(android): satisfy Skill Workshop action ktlint

* fix(android): serialize Skill Workshop lifecycle actions

* chore(android): refresh native i18n inventory

---------

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 12:07:04 +01:00
Eulices 182376ea83 fix: iOS chat streaming stays visually stable as replies arrive (#50483)
* fix(ios): stabilize visible chat streaming

Co-authored-by: Eulices Lopez <leulices@gmail.com>

* fix(ios): keep chat segment IDs out of localization

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 11:59:42 +01:00
Peter Steinberger 5154fe08fa feat: show Codex sessions across Gateway and paired nodes (#102586)
* feat(codex): add federated session catalog

* fix(codex): align session catalog checks

* fix(ui): translate Codex session catalog

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-09 03:42:03 -07:00
Peter Steinberger 201acd4e7a fix(macos): keep Settings below native titlebar controls (#102663)
* fix(macos): clear settings titlebar controls

* chore: leave release notes to release automation
2026-07-09 11:41:29 +01:00
Josh ff031149f3 chore: align Android icons with favicon mark (#101423)
* chore: align Android icons with favicon mark

* fix(android): keep launcher mark inside adaptive safe zone

* docs(changelog): note Android launcher icon refresh

* chore: keep release changelog unchanged

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 11:37:24 +01:00
Peter Steinberger 4cc92009ed feat(mac): unified Liquid Glass pairing approval panel (#102601)
* feat(mac): unified Liquid Glass pairing approval panel

Replace the serial node/device pairing NSAlerts with one floating
approval panel. Both prompters feed request cards into a shared
PairingApprovalCenter; each card shows a hardware icon, platform and
model, app/core version, source IP, a copyable short id, request age,
a trust line (first connection / already-paired-id caution / repair
token rotation), and a friendly access summary with an elevated
warning for system.run-class commands. Requests resolved elsewhere
disappear live; Not Now snoozes without resolving (gateway TTL
applies) and the menu-bar pending line reopens the panel. Liquid
Glass surface on macOS 26+, material fallback on macOS 15. Deletes
the NSAlert + invisible-host-window machinery, dead node isRepair
handling, and text-only describe() body.

Closes #102535

* fix(mac): satisfy swiftformat conditionalAssignment and resync native i18n inventory
2026-07-09 10:31:42 +01:00
Samuel Alake 3f2466c4c3 fix(swift): keep device auth compatible with v2 gateways (#80656)
* fix(swift): keep device auth compatible with v2 gateways

* refactor(swift): contain v2 auth compatibility

* docs(changelog): note Swift v2 auth compatibility

* chore(apple): sync native string inventory

* chore: keep release changelog owned

---------

Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 10:15:47 +01:00
Josh b8a801930a chore: align iOS icons with favicon mark (#101411)
* chore: align iOS icons with favicon mark

* fix(ios): restore distinct debug app icons

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 10:07:58 +01:00
mahmoud 32510a3225 improve(ios): show connection progress and errors prominently in onboarding gateway step (#101921)
* fix(ios): surface connection progress and errors prominently in onboarding gateway step

* fix(ios): surface onboarding validation failures

* chore(ios): sync native string inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 10:03:26 +01:00
John McChesney TenEyck Jr ccdb60e5db fix: show iOS chat activity after foreground refresh (#102309)
* Preserve iOS chat activity on foreground refresh

Show an activity indicator when foreground history reports session activity without a chat in-flight snapshot, while keeping unanswered turns blocked and clearing the fallback state on answers, terminal events, session changes, and timeout.

* fix(ios): preserve foreground run ownership

* chore(ios): sync native string inventory

* chore: keep release changelog owned

---------

Co-authored-by: Your Name <you@example.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:45:35 +01:00
NianJiu 67be0cda44 fix: cancel Android link preview calls (#101853)
* fix: cancel Android link preview calls

* test(android): cover response cancellation stage

* fix(android): preserve link preview deadline

* docs(android): clarify cancellation contract

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 09:21:50 +01:00
Peter Steinberger ea8076a091 fix(macos): remove stale .sidebar-shell__header rule from injected dashboard CSS (#102526) 2026-07-09 08:54:56 +01:00
冯基魁 bacf048ab9 fix(chat): keep proof decision out of actor closure (#101611)
* fix(chat): keep proof decision out of actor closure

* fix(ios): narrow chat proof lock scope

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 08:44:14 +01:00
dependabot[bot] 75848adb8c chore(deps): bump androidx.test.uiautomator:uiautomator in /apps/android (#101501)
Bumps androidx.test.uiautomator:uiautomator from 2.4.0-beta02 to 2.4.0.

---
updated-dependencies:
- dependency-name: androidx.test.uiautomator:uiautomator
  dependency-version: 2.4.0
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-09 08:29:17 +01:00
Ben.Li 3e787f3187 fix(android): preserve UTF-16 boundaries in notification text (#102442)
* fix(android): keep notification text UTF-16 safe

* test(android): cover UTF-16 notification boundaries

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-09 08:11:32 +01:00
Peter Steinberger 363cf0461f fix(mac): keep launch-at-login app running (#102465)
* fix(mac): avoid launch-agent self-reload

* chore: leave release changelog generation

* style(mac): use conditional expression
2026-07-09 08:08:17 +01:00
joshavant 644aea7050 chore(android): bump 2026.7.1 Play build 2026-07-09 02:04:56 -05:00
Peter Steinberger 00e323c990 chore(i18n): refresh native source inventory (#102476) 2026-07-09 07:56:01 +01:00
joshavant f163f32f85 fix(android): make release screenshots deterministic 2026-07-09 01:32:13 -05:00
Peter Steinberger 5533d979d4 feat: add follow-up task suggestions (#102422)
* feat(tools): add follow-up task suggestions

* chore: leave changelog to release flow

* fix(tools): add task suggestion display metadata

* fix(tools): update task suggestion display snapshot

* docs: format task suggestion tool table

* test(gateway): expect compaction worktree workspace

* test(gateway): preserve configured compaction workspace

* fix(ui): translate task suggestions
2026-07-09 06:30:01 +01:00
冯基魁 003bb8284b fix(macos): skip unresolved dashboard auth templates (#101375)
* fix(macos): skip unresolved auth env templates

* fix(macos): align gateway auth env refs

* fix(macos): resolve dashboard refs from service env

* fix(macos): read generated gateway service env

* chore: keep release changelog owner-only

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-09 04:35:53 +01:00
joshavant 4ae8d735bf chore(ios): prepare 2026.7.1 release notes 2026-07-08 02:51:58 -05:00
joshavant 89c42e58fb fix(ios): satisfy SwiftFormat in session filter 2026-07-08 02:48:42 -05:00