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
joshavant
17fafcc901
chore(android): prepare 2026.7.1 Play release
2026-07-08 02:47:55 -05:00