Commit Graph

856 Commits

Author SHA1 Message Date
Peter Steinberger
9dec7acc91 feat(macos): visible-markdown copy, full-message reader, and independent reasoning/tool toggles (#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
2026-07-18 04:05:50 +01:00
Peter Steinberger
125934addc feat(ios): harvest shared chat capabilities — verbosity, trace toggle, live talk level, sessions entry (#110254)
* feat(ios): wire verbosity, assistant trace toggle, live talk level, and chat-local sessions entry

* chore(i18n): translate new iOS chat strings and regenerate catalogs
2026-07-18 03:27:45 +01:00
joshavant
6a053f59cd fix(ios): keep system rsync paired during export 2026-07-17 15:51:10 -07:00
joshavant
1c16005cd7 fix(ios): identify Apple Health integration 2026-07-17 12:16:44 -07:00
Peter Steinberger
75697ad3bf feat(macos): session detail parity — row actions, unread auto-clear, and subagent tree in native chat (#110019)
* feat(clients): session detail parity — row actions, unread auto-clear, and subagent tree in the native chat sidebar

* fix(clients): overlay pending explicit unread values over stale session snapshots

* chore(i18n): translate new session action strings and regenerate Apple/Android catalogs

* chore(clients): delete dead pin helper and worktree memberwise init
2026-07-17 15:54:08 +01:00
Peter Steinberger
311f5bfbaa feat(macos): honor the selected microphone in Talk and show live voice activity in chat (#109995)
* feat(macos): honor the selected microphone in Talk and surface live level, transcript, and mic picker in chat

* chore(i18n): translate new talk activity strings and regenerate Apple/Android catalogs
2026-07-17 15:45:46 +01:00
Peter Steinberger
bf754b8a34 feat: align native macOS chat with the web chat capability set (#109712)
* feat(macos): wire sessions manager, assistant trace, talk, voice notes, and Listen into native chat

* feat(clients): add input history, reply quoting, and per-session drafts to native chat composer

* fix(clients): capture TTS server lease before gateway check and dedupe restored input-history entries

* docs(clients): document reply-chip consume parity with web accepted-send semantics

* fix(clients): retire sent-text recall stash and keep recall markers stable under prepends

* test(clients): wait for outbox restore before asserting live-send paths

* docs(clients): note cross-session outbox flush scheduling contract

* chore(clients): split oversized chat files to satisfy SwiftLint length caps

* chore(i18n): sync native app i18n inventory for new chat strings

* chore: retrigger ci

* chore(i18n): translate new chat strings and regenerate Apple catalogs

* chore(i18n): regenerate Android localization resources for new chat strings

* test(clients): await lifecycle cleanup before modeling replacement gateway traffic

* chore(clients): split invoke timeout helper to satisfy SwiftLint length cap

* chore(clients): drop unused OpenClawProtocol import from invoke timeout split
2026-07-17 13:44:48 +01:00
Peter Steinberger
28a3540f32 feat: add native inline widget support (#109212)
* feat: add native inline widget support

* refactor: simplify plugin surface refresh

* fix: preserve plugin surface refresh API

* fix: reload widgets after WebKit termination

* fix: harden native widget refresh

* fix: bound native widget recovery

* docs: defer native widget release note

* chore: refresh native i18n inventory

* fix: harden native widget delivery

* refactor: simplify native widget API surface

* fix: serialize native widget capability refresh

* fix: harden native widget recovery

* fix: recover native widget capabilities

* style: format widget refresh role selection

* fix: correct widget refresh formatting

* fix: harden cross-platform widget recovery

* fix: bind widget trust and recovery to routes

* chore: refresh native i18n inventory

* chore: regenerate Android gateway protocol

* test: remove unused release workflow read
2026-07-16 19:24:41 -07:00
Peter Steinberger
c6ebd6be34 feat(watch): inbox mascot with Always-On-safe rendering (#109365)
The watch inbox's empty and waiting surface gets a 72pt Clawd: sleepy
(nightcap and all) when nothing is waiting, thinking while the watch
waits for iPhone sync, attentive when an approval needs a decision.
The Always-On display renders a static pose so the animation loop
never runs dimmed, and the active loop is throttled to 15fps for
battery. The shared mascot gains a defaulted minimum frame interval;
mascot sources compile directly into the watch target following the
TalkWaveformView pattern.
2026-07-16 17:47:07 -07:00
Peter Steinberger
a9f82837a1 feat: inspect background tasks across web and mobile (#109150)
* feat: add background task details across clients

* fix: refresh background task clients and translations

* fix: keep background task details fresh

* fix: ignore deleted background task details

* refactor: split background task rendering

* fix: use canonical background task ids

* refactor: extract background task view types

* fix(apps): regenerate task localizations

* fix(ios): remove unused task screen import

* fix(apps): refresh task localization inventory
2026-07-16 13:08:42 -07:00
Peter Steinberger
aebea4891e feat(ios): render plugin approvals as native Allow/Deny notifications (#108709)
* feat(ios): render plugin approvals as native Allow/Deny notifications

Extend the iOS approval handling from exec to plugin approvals so the native
push the gateway now sends (#108505) shows a phone notification with Allow/Deny.
Extract a shared ApprovalNotificationBridge with exec/plugin wrappers owning
their own kind constants and category; tag the parsed prompt with its kind;
register the plugin category and route plugin pushes in the app delegate; add a
.plugin case that maps the plugin presentation (title/description/pluginId/
severity) into the existing prompt and widens the exec-only validation, current,
cache-restore, and resolve guards to accept plugin; parameterize the dialog copy
by kind. Watch snapshot publication stays exec-only; the phone notification still
mirrors to the watch via WatchConnectivity. Reuses the unified approval.get/
approval.resolve RPCs (already kind-generic); no server or protocol changes.

* chore(i18n): sync native inventory after rebase

* chore(ios): drop accidentally committed local Version.xcconfig build override

* fix(ios): sync Apple i18n catalog and remove dead approval-bridge methods

Sync apps/ios/Resources/Localizable.xcstrings for the new plugin-approval
strings (native inventory sync alone did not cover the Apple catalog).
Remove the superseded per-bridge registerCategory variants and the redundant
exec parseResolvedPush wrapper flagged by the iOS Periphery dead-code scan;
registration uses ApprovalNotificationBridge.registerCategories and the shared
parse helpers.

* chore(ios): drop generated SwiftSources filelist; reconcile native i18n inventory

* chore(ios): drop generated Xcode project from tracking

Codex generated OpenClaw.xcodeproj for its simulator test run and the initial
apps/ios directory commit force-added it; xcodegen regenerates it in CI, so it
must not be tracked (matches main).

* chore(ios): reconcile native i18n inventory after rebase
2026-07-16 09:50:42 -07:00
Peter Steinberger
b3301e3212 feat(clients): show live plan checklists in web, iOS, and Android chat (#108675)
The gateway already broadcasts stream:"plan" agent events with typed
{step, status} snapshots; all three clients dropped them. Control UI now
renders an expandable checklist bar above the composer (run-scoped,
cleared on run lifecycle); the shared iOS/macOS chat UI mounts a
Liquid Glass pill (iOS 26 glassEffect, material fallback) between the
message list and composer; Android adds an expandable pill above the
composer bridged through ChatController/NodeRuntime/MainViewModel.
All parsers accept typed and legacy string steps, enforce the
single-in_progress invariant, and scope snapshots and clears to the
owning run. Locale artifacts, Android resources, and the iOS string
catalog carry generated translations for the pill strings.
2026-07-16 09:33:52 -07:00
Peter Steinberger
6b79db8b7d feat(ios): mascot moods for onboarding and gateway quick setup (#108900)
* feat(ios): mascot moods for onboarding and gateway quick setup

The activation glyph now takes a mood: the onboarding welcome step
shows the hard-hat working mascot while connecting, the success step
celebrates, and the gateway quick-setup header derives working/sad/
curious/idle from its connect state.

* fix(ios): quick-setup mood reflects app-level gateway problems too

The sheet renders two error surfaces — the local connect error and the
app-level gateway problem banner — and the mascot now goes sad for
either instead of only the sheet-local failure.
2026-07-16 08:56:18 -07:00
Peter Steinberger
93c9d2a20c fix(ios): stop fresh setup from failing after pairing (#108779)
* fix(ios): make setup keychain handoff atomic

* fix(ios): refresh native i18n inventory
2026-07-16 03:50:54 -07:00
NianJiu
727f9e0a7e fix(ios): preserve active chat across foreground reconnects (#108241)
* fix(ios): preserve chat focus across reconnects

* chore(ios): sync native i18n inventory

* test(ios): strengthen reconnect ownership coverage

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

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 01:38:45 -07:00
Peter Lee
e08e1a0ca8 fix(ios): attach EKAlarm to reminders.add so due-time notifications fire (#106376)
* fix(ios): attach EKAlarm to reminders.add so due-time notifications fire

EKReminder.dueDateComponents only sets the deadline; without an explicit
EKAlarm, iOS does not produce lock-screen or banner notifications.

Closes #105523

* fix(ios): configure reminder due alerts

Co-authored-by: xialonglee <li.xialong@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 01:14:40 -07:00
Peter Steinberger
96eaf2be80 fix: restore recent native, browser, and audio behavior (#107631)
* fix: repair recent landed regressions

* chore: keep release changelog owned

* test(macos): align CLI fixtures with Node floor

* fix(macos): document Node runtime floor contract

* style(auto-reply): restore runtime mode formatting
2026-07-14 10:47:33 -07:00
openclaw-mantis[bot]
6fa40830a9 chore(i18n): refresh native locales (#107573)
* chore(i18n): refresh native locales

* fix(i18n): limit Korean glossary refresh

* fix(i18n): correct Korean status copy

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-14 08:10:59 -07:00
Josh Avant
db541e5c60 fix(ios): preserve pinned tools for archive (#107188) 2026-07-14 03:25:56 -07:00
joshavant
0c95332ffd chore(ios): prepare 2026.7.2 release notes 2026-07-13 20:43:02 -05:00
Vincent Koc
1185db56c0 refactor(ios): remove write-only talk provider state (#106881)
* refactor(ios): remove write-only talk provider state

* chore(ios): sync native i18n inventory
2026-07-14 08:46:46 +08:00
joshavant
cac32bb5d1 fix(ios): declare Health update purpose 2026-07-13 19:12:21 -05:00
Peter Steinberger
334e7f3f21 feat(apps): add native mobile Automations parity (#106355)
* fix(apps): address native Skills review feedback

* feat(apps): add native Automations parity

* fix(ios): preserve automation editor selection

* fix(android): page automation discovery

* chore(apps): refresh native source inventory

* fix(ios): refresh invalid automation diagnostics

* chore(apps): sync native localization

* fix(cron): stabilize paginated snapshots

* refactor(cron): split pagination helpers

* fix(apps): address final native review feedback

* chore(apps): refresh native source inventory

* fix(ios): dedupe automation list actions

* chore: keep release note in PR context

* fix(ci): repair current main architecture gates

* fix(ios): default new skill requirement fields

* fix(ios): retain queued automation reservations
2026-07-13 15:35:32 -07:00
Peter Steinberger
9b64c861e5 fix(chat): prevent reasoning races after model changes (#106534)
* fix(chat): serialize session setting changes

* fix(chat): bind settings mutations to gateway routes

* fix(chat): align settings lanes with shared requests

* fix(ios): preserve injected session mutations

* fix(chat): preserve authoritative settings refreshes

* fix(chat): reconcile authoritative settings state

* fix(ci): satisfy session settings quality gates

* fix(android): regenerate native string resources

* fix(ci): update session settings export baseline

* fix(ci): reconcile dead export baseline

* fix(android): resume outbox after settings lane

* chore(i18n): refresh native source inventory

* chore(i18n): refresh rebased native inventory

* chore(i18n): sync control UI locales

* chore: keep release notes in pull request

* style(macos): fix settings comment format

* fix(ai): keep Google thinking type internal
2026-07-13 14:27:54 -07:00
Peter Steinberger
6e8df6c045 fix(ios): block incomplete shares when attachments are omitted (#106513)
* fix(ios): block omitted share attachments

Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com>

* chore: keep release note in PR body

---------

Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com>
2026-07-13 11:14:30 -07:00
Peter Steinberger
5ca0e634bc fix(ios): connect iPhone and Watch to protocol v3 gateways (#106294)
* fix(ios): support gateway protocol v3

* chore(i18n): refresh native source metadata

* fix(watchos): keep direct transport on protocol v4

* chore(i18n): refresh Watch source metadata
2026-07-13 05:44:49 -07:00
Peter Steinberger
e1a92c99cf fix(ios): persist chat thinking selections (#106287)
* refactor(apple): share chat gateway requests

* fix(ci): sync native app inventory

* docs: keep Apple release note in PR body
2026-07-13 05:44:08 -07:00
Peter Steinberger
d9a6be9b16 fix(ios): typography audit rejects localized accessibility labels (#106092)
* test(ios): exempt accessibility metadata from typography audit

* test(ios): cover adjacent visual text audit

* test(ios): tighten accessibility typography exemption

* test(ios): preserve strict accessibility typography audit

* test(ios): handle multiline accessibility closures

* test(ios): classify accessibility typography per line

* test(ios): parse nested accessibility metadata
2026-07-13 05:42:46 -07:00
Peter Steinberger
6c5084f1ad feat(xai): add realtime voice provider (#106267)
* feat(xai): add realtime voice provider

Co-authored-by: Vitor Cepeda Lopes <vitor@vitorcepedalopes.com>

* fix(xai): satisfy realtime voice validation

* fix(xai): harden realtime relay boundaries

* chore: drop release-owned changelog edit

* chore(i18n): refresh native voice catalogs

* chore(i18n): refresh Control UI raw-copy baseline

* chore(plugin-sdk): refresh API baseline hashes

* chore(i18n): use canonical main catalogs

* chore(i18n): refresh realtime voice source inventory

* chore: refresh xai voice landing head [skip ci]

* chore: refresh integrated protocol artifacts [skip ci]

---------

Co-authored-by: Vitor Cepeda Lopes <vitor@vitorcepedalopes.com>
2026-07-13 05:17:24 -07:00
openclaw-mantis[bot]
801252c66e chore(i18n): refresh native locales (#106260)
* chore(i18n): refresh native locales

* chore(i18n): sync generated app resources

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 03:49:36 -07:00
Peter Steinberger
73a0bf4b7c refactor(apple): share chat gateway payload mapping (#106154)
* refactor(apple): share chat gateway payload mapping

* test(apple): track shared event mapping
2026-07-13 02:39:01 -07:00
Peter Steinberger
938d41014f feat(mobile): default pairing to full node access (#105928)
* feat(mobile): default pairing to full node access

* chore: leave release notes to release workflow

* refactor(mobile): bound pairing helpers

* chore(i18n): refresh mobile access inventory

* chore(ci): lower mobile pairing LOC baseline

* fix(mobile): complete pairing validation artifacts

* ci: remove stale transcript target export baseline

* fix(ios): wrap access upgrade guidance

* fix(ios): preserve localized access key

* fix(ci): dedupe read-only SQLite guardrail

* fix(mobile): secure full-access node setup
2026-07-13 02:30:45 -07:00
Peter Steinberger
3261667b73 fix(ios): keep reconnect errors visible (#105875)
* fix(ios): keep reconnect errors visible

* fix(ios): clear stale errors on gateway switch

* chore(ios): keep release notes in PR

* fix(ios): reset status when switching gateways

* fix(ios): retain errors through same-target reconnect

* fix(ios): unpause explicit pairing retries

* fix(ios): isolate retained reconnect errors

* chore(i18n): resync rebased native inventory

* fix(ios): separate reconnect display state
2026-07-13 02:11:26 -07:00
Peter Steinberger
17630226fc improve(ios): make gateway QR pairing prominent in Settings (#106111)
Reorder Settings -> Gateway by intent: pairing (Add Gateway with Scan QR,
setup code, discovered gateways) right below status, nav-bar QR scanner
button on the gateway route, and a Scan QR to Pair status-card hero while
nothing is paired (honoring the shared connect lock). Manual Gateway and
credentials move to the bottom. Fix setup-code Connect busy spinner to
track the whole attempt. New strings ran the full native i18n pipeline.

Closes #106013
2026-07-13 00:35:38 -07:00
Peter Steinberger
d2b382528e feat(ios): guide first launch through pairing explainer and permissions (#106129)
* feat(ios): guide first launch through pairing explainer and permissions

* fix(ios): keep first-run flow resumable and surface limited grants in onboarding

* chore(ios): regenerate native i18n after rebase

* chore(android): project refreshed native translations into strings.xml

* fix(ios): move i18n wrapper contract to shared permission row and sync catalog
2026-07-13 00:35:31 -07:00
Peter Steinberger
b57e7b74e6 feat: add native Skills management parity (#105814)
* feat(apps): add native skills management parity

* chore(i18n): refresh native skills inventory

* style(apps): apply canonical Swift formatting

* style(ios): wrap skills status message

* chore(i18n): refresh native skill locales

* refactor(apps): trim native skills review surface

* chore(i18n): regenerate native app resources

* chore: keep release changelog owner-only

* fix(ios): remove dead gateway and watch wrappers
2026-07-13 00:11:11 -07:00
Colin Johnson
6242842722 fix(ios): focus missing gateway credentials (#98189)
* fix(ios): focus missing gateway credentials

Co-authored-by: Colin <colin@solvely.net>

* test(macos): let main actor polling suspend

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 23:36:29 -07:00
Peter Steinberger
c81ae0412c fix(ios): localize Settings accessibility labels (#105859)
* fix(ios): preserve localized accessibility labels

* chore(i18n): refresh native source inventory
2026-07-12 19:33:27 -07:00
Vincent Koc
818eca2c09 fix(ios): coalesce automatic overview refreshes 2026-07-13 03:53:15 +02:00
Vincent Koc
918745ed21 docs(changelog): note native app reliability fixes 2026-07-13 03:53:15 +02:00
Vincent Koc
5e9bc0916f fix(ios): harden gateway and watch state handling 2026-07-13 03:53:15 +02:00
Peter Steinberger
5e45ebe82b feat(ios): add private HealthKit summaries (#105616)
* feat(ios): add private HealthKit summaries

* fix(ios): satisfy Health settings lint

* chore(ios): sync Health localization artifacts

* chore(ios): refresh generated localization and docs

* fix(ios): reject partial Health history

* chore(ios): sync Health string catalogs

* fix(ios): bridge Health authorization dates

* fix(ios): scope Health summaries to today
2026-07-12 12:52:38 -07:00
Vincent Koc
5ec053a6e9 refactor(ios): remove unused live activity wrapper 2026-07-12 18:33:47 +02:00
Vincent Koc
8eda61a0fa chore(i18n): translate sidebar reveal action 2026-07-12 18:33:47 +02:00
Vincent Koc
f64eb0cbaa fix(ios): localize sidebar reveal actions 2026-07-12 18:33:47 +02:00
Vincent Koc
59bed9db0b test(ios): inspect typed sidebar action labels 2026-07-12 18:33:47 +02:00
Vincent Koc
e999802e6e fix(ios): type watch gateway request identifier 2026-07-12 18:33:47 +02:00
Vincent Koc
01ed6b1f04 fix(ios): distinguish localized and verbatim session actions 2026-07-12 18:33:47 +02:00
Vincent Koc
7394d07a49 fix(ios): use typed localized retry action 2026-07-12 18:33:47 +02:00
Vincent Koc
aa1a8ddb34 fix(ios): preserve localized text value boundaries 2026-07-12 18:33:47 +02:00