Commit Graph

905 Commits

Author SHA1 Message Date
joshavant
ebbbfa4c30 fix(ios): stabilize release screenshot launches 2026-07-23 00:28:00 -05:00
Peter Steinberger
26e4dec8c9 fix(ios): native Talk respects session thinking level (#112901)
* fix(ios): inherit thinking in native Talk

* test(ios): verify native Talk thinking inheritance

* test(ios): keep Talk regression i18n-neutral

* test(ios): import Talk request builder module

* test(secrets): secure plugin preset fixture

---------

Co-authored-by: RECOVERI <alfred@recoveri.io>
2026-07-23 01:02:12 -04:00
joshavant
1af115d257 test(ios): retry stalled screenshot launches 2026-07-22 23:42:32 -05:00
joshavant
690ed56441 fix(ios): preserve localized app display names 2026-07-22 22:56:22 -05:00
openclaw-mantis[bot]
a3a08a6db0 chore(i18n): refresh native locales (#112662)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-22 09:38:17 -07:00
Peter Steinberger
74de1a2f0c feat(ios): add OpenClaw settings chat (#112420)
* feat(ios): add OpenClaw settings chat

* chore(ios): sanitize screenshot fixture label

* fix(ios): gate OpenClaw settings chat

* fix(ios): stabilize OpenClaw settings support checks

* chore(i18n): refresh native source inventory

* fix(ios): bind OpenClaw chat to gateway route
2026-07-22 05:14:47 -07:00
Peter Steinberger
0b080b9c2e feat(apps): native session-list observer digests on iOS, Android, and macOS (#112597)
* feat(apps): native session-list observer digests on iOS, Android, and macOS

* fix(apps): satisfy swift, periphery, and lint gates for native digests
2026-07-22 01:53:29 -07:00
Peter Steinberger
bd03b4d658 fix(i18n): regenerate native locale artifacts after Android inventory drift 2026-07-21 14:15:31 -07:00
joshavant
a69ebf3067 fix(ios): keep snapshot results outside upload tree 2026-07-21 13:44:11 -05:00
joshavant
b3cdb49aca test(ios): stabilize appearance screenshot 2026-07-21 13:44:11 -05:00
joshavant
12515ad182 fix(ios): harden App Store release flow 2026-07-21 13:44:11 -05:00
Peter Steinberger
8f31892b55 feat(apps): native session branch switcher with branch-safe durable outbox (#112056)
Branch menu (list/switch) for macOS+iOS shared chat via sessions.branches.*;
rewind/fork/switch gated on run activity and pending outbox work through a
durable session-mutation lease; outbox rows carry branch-epoch ownership with
local-only flush checks, atomic confirm/park transitions, attempt-versioned
delivery callbacks, fresh retry identity for possibly-accepted rows, and
epoch-guarded branch evidence; 21-locale native translations for new strings.
2026-07-21 10:59:44 -07:00
Peter Steinberger
26165bbe80 fix(ios): smooth sidebar drags and remove background seams (#112299)
* fix(ios): polish sidebar drawer interaction

* fix(ios): latch sidebar drag direction
2026-07-21 08:40:30 -07:00
Peter Steinberger
5e7cb225e4 fix(mobile): load pinned and base-path Control UI pages (#112175)
* fix(mobile): harden Control UI webviews

* refactor(mobile): keep native inventory stable

* docs(android): clarify shared pinned trust

* fix(ios): preserve encoded Control UI base paths
2026-07-21 08:19:07 -07:00
Peter Steinberger
8481c69cbe feat(apple): port the working claw indicator, wait phrases, and turn recap to iOS/macOS (#112188)
* feat(chat): add native working progress state

* feat(chat): port working claw indicator to Apple

* fix(apple): isolate generated locale catalog

* style(apple): use doc comments on ChatWorkingPhrase API declaration
2026-07-21 04:35:27 -07:00
Peter Steinberger
312e656138 fix(ios): show agent avatars and use more sidebar space (#112082)
* fix(ios): improve agent sidebar menu layout

* chore(i18n): refresh native source inventory
2026-07-21 03:05:18 -07:00
Peter Steinberger
262deec72c feat(mobile): session Dashboard on iOS and Android via authenticated Control UI webview (#112163)
* feat(mobile): session dashboard screens on iOS and Android via authenticated Control UI webview

* fix(android): keep configured Control UI base path in session dashboard URL

* docs(android): note system-trust boundary of the shared Control UI webview

* fix(android): origin-only document-start rule for Control UI auth script

* chore(i18n): refresh native inventory on rebased head

* fix(ios): swiftlint closure form in session dashboard toolbar

* fix(i18n): tolerate workflow-owned pending native rows in PR alignment checks

* fix(android): KTX toUri per lint and refresh native inventory

* fix(android): ktlint import order incl. main-inherited fleet test, refresh inventory
2026-07-21 01:13:23 -07:00
Vincent Koc
2c316f51f7 fix(apps): harden mobile gateway and watch state 2026-07-21 09:00:21 +02:00
Peter Steinberger
9f66f53fb5 feat(chat): collapse long user prompts (#111866)
* feat(chat): collapse long user prompts

* fix(chat): sync disclosure strings

* fix(android): reuse disclosure labels

* chore(i18n): refresh native inventory

* perf(ui): trim prompt disclosure chunk
2026-07-20 20:10:15 -07:00
Peter Steinberger
49ff6a4497 fix(protocol): classify system agents in rosters (#111920)
* fix(protocol): classify system agents in rosters

* fix(ci): align agent kind client gates

* fix(ci): keep roster filtering in startup bundle

* chore(ui): remove superseded roster module

* style(android): satisfy agent kind test formatting

* style(linux): format merged agent capability assertion

* fix(config): reject reserved system agent ids

* chore(i18n): refresh native source inventory

* style(android): format agent kind surfaces

* fix(gateway): preserve configured agent ownership
2026-07-20 16:57:04 -07:00
Colin Johnson
0d3cbae6a1 fix(ios): sidebar drags jitter and toolbar control flickers (#111831)
* fix(ios): smooth sidebar gestures and toolbar controls

* fix(ios): keep sidebar edge gesture below toolbar

* chore(ios): refresh native localization inventory

* fix(ios): preserve edge content interactions

* fix(ios): restore smooth sidebar tracking

* test(ios): align drawer source guards
2026-07-20 17:26:17 -04:00
Peter Steinberger
a52eb2134b feat(apps): connect multiple gateways simultaneously (#111932)
* feat(apps): support simultaneous gateways

* fix(apps): satisfy multi-gateway checks

* chore(apps): refresh multi-gateway baselines

* style(android): format gateway fleet code
2026-07-20 13:06:29 -07:00
Colin Johnson
2f967bc8f3 test(ios): refresh chat voice and sidebar UI coverage (#111655) 2026-07-20 08:02:16 -04:00
Peter Steinberger
bdf71d7d98 refactor(apple): unify offline client databases (#111598)
* refactor(apple): unify offline client databases

* refactor(apple): remove dead cache APIs

* fix(apple): satisfy native storage gates

* fix(apple): sync generated localization catalog

* Revert "fix(apple): sync generated localization catalog"

This reverts commit d0f5e7b749.

* fix(i18n): keep source validation pre-merge

* test(macos): isolate flaky suite state

* test(macos): isolate log locator on main actor
2026-07-19 22:14:12 -07:00
Peter Steinberger
0fff74c800 feat(ios): replace the tab bar with a black overlay sidebar (web parity + dashboard) (#111339)
* feat(ios): unify navigation on a black overlay sidebar and drop the phone tab bar

* test(ios): rework navigation tests and snapshot UITests for the sidebar shell

* chore(i18n): sync derived native catalogs for sidebar strings

* feat(ios): reveal the sidebar beneath a push-away rounded content card

* feat(ios): web-parity sidebar — agent switcher, pinned pages, sessions vocabulary, uniform content card

* chore(i18n): translate sidebar and session strings across native catalogs

* fix(ios): sidebar footer shows connection dot only when degraded, like the web

* feat(ios): sidebar toggle top-left with edge-swipe open; card surface owns the drawer chrome

* fix(ios): single sidebar refresh owner, alias-aware Home badges, RM tap-close, user pin order, drop vestigial idiom shims

* feat(ios): align sidebar with the mobile prototype — agent roster, theme-following palette, web session subtitles, row badges

* chore(i18n): translate agent roster and Recent strings across native catalogs

* feat(ios): frosted-glass agent picker with uniform drawer insets

* fix(ios): address sidebar review findings — settings toggle edge, per-agent scoping, alias-aware selection, cron paging, refresh cadence

* fix(ios): clear landing CI blockers
2026-07-19 14:50:39 -07:00
metaforismo
a53461b2b1 fix(ios): render Markdown lists and thematic breaks (#111223) 2026-07-19 11:24:30 -04:00
Peter Steinberger
da534dc506 fix(ios): harden Talk voice-session lifecycle from review (#111424)
- Close+clear the adopted logical voice session when a config/provider change
  invalidates a realtime prefetch (a live call is preserved); prevents the
  gateway rejecting a stale voiceSessionId resume under a new provider.
- Retry talk.client.close (0/500/2000ms) before forgetting the session, matching
  the web client, so a transient close does not orphan it until the 6h sweep.
- Surface exhausted transcript-persist failures through the session delegate so a
  dropped affirmation transcript no longer silently blocks spoken confirmation.
- Localize the "Confirmation needed" status through the presentation switches;
  add its native locale translations.
2026-07-19 07:01:28 -07:00
Peter Steinberger
4e008cd713 feat(ios): adopt Talk voice sessions (#111369)
* feat(ios): adopt Talk voice sessions

* docs(agents): fix unrelated red-main breakage in the landing PR

* chore(i18n): translate Talk voice-session strings across native locales
2026-07-19 06:28:18 -07:00
Peter Steinberger
8178b3cc14 feat(clients): adopt model controls, session management, and keyboard history recall on iOS (#110831)
* feat(clients): adopt model controls, session management, and keyboard history recall on iOS

* chore(i18n): translate iOS adoption strings and realign locale artifacts

* refactor(clients): drop test-only group response inits flagged by the shared dead-code intersect

* chore: retrigger ci

* chore(i18n): resync inventory after voice-unification main rebase

* chore(i18n): resync inventory after main rebase

* chore(i18n): resync inventory after main rebase

* chore(i18n): realign locale artifacts after main rebase

* fix(clients): preserve native chat API and locale copy

* fix(ios): retain public session DTO initializers

* refactor(clients): delete test-only session DTO inits flagged dead instead of suppressing
2026-07-19 03:08:22 -07:00
Peter Steinberger
59b2fbbb4b feat(ios): Talk camera flip control and mic input selection (#111044)
* feat(ios): add Talk camera flip and mic selection

* chore(ios): sync native i18n inventory and locale artifacts for talk camera/mic strings

* chore(ios): commit regenerated Localizable.xcstrings for new talk strings

* fix(ios): extract Talk composer controls

* chore(ios): resync native i18n inventory and locale artifacts atop landed Android entries

* fix(ios): repair Talk composer CI checks

* chore(i18n): commit regenerated Android locale outputs from catalog reconciliation

* chore(i18n): sync Android locale outputs after rebase
2026-07-19 01:24:53 -07:00
Peter Steinberger
649e94dd21 feat(apple): copy or save rendered widgets as images from the chat transcript (#110987)
* feat(apple): copy or save rendered widgets as images from the chat transcript

* chore(i18n): regenerate native locale artifacts for widget export strings

* chore(i18n): resync native locale artifacts after main i18n advance
2026-07-18 21:53:40 -07:00
Peter Steinberger
b57660d024 fix(apps): call chat sessions threads (#111038)
* fix(apps): call chat sessions threads

* test(apps): update thread wording expectations

* fix(i18n): guard retained Android translations
2026-07-18 20:34:12 -07:00
Peter Steinberger
62c5a8b888 fix(gateway): make scope errors machine-readable across clients (#111013)
* fix(gateway): consume structured scope errors

* docs(gateway): clarify tools error boundary

* refactor(gateway): unify node admin policy
2026-07-18 17:53:45 -07:00
Peter Steinberger
593ac4ae0c feat(apps): rewind and fork a session from native chat bubbles (#110886)
* feat(apps): rewind and fork a session from native chat bubbles

* docs(apps): note lease-parity contract on message fork dispatch

* fix(apps): native i18n inventory sync and doc-comment style for bubble actions

* fix(apps): translate native bubble action strings across locales

* fix(apps): refresh generated iOS localization catalog after rebase
2026-07-18 17:52:03 -07:00
Peter Steinberger
d343216510 fix(ios): keep unified voice controls recoverable (#110906)
* docs(ios): align unified chat voice copy

* fix(ios): keep active dictation control available

* fix(ios): keep active talk control available

* fix(ios): restore unified voice recovery

* fix(ios): keep pending dictation cancel visible

* chore(ios): refresh native i18n inventory

* chore(ios): sync unified voice locale memory

* fix(ios): return unified mic label view

* test(ios): lock dictation cancellation ordering
2026-07-18 23:41:00 +01:00
Peter Steinberger
81362bf643 feat(apps,ui): question surface parity and composer takeover (#110681)
* feat(apple): question parity — persistent summaries, skip, reconnect fallback, macOS keyboard

* feat(android): question parity — persistent summaries, skip, reconnect fallback

* feat(ui): question panel replaces composer while expanded

* fix(apps): regenerate question parity contracts

* fix(apps): preserve question reconciliation state

* fix(apps): keep question terminal state monotonic

* test(android): satisfy question test formatting

* fix(security): restore skill audit file reads

* fix(apps): harden question parity edge cases

* fix(apps): preserve expired question summaries

* fix(apps): keep question recovery retries current

* fix(apps): retry stale question recovery snapshots

* fix(android): reset stale question retry budgets

* docs(tools): clarify question composer takeover

* fix(apps): satisfy question recovery release gates

* fix(apps): preserve unknown question outcomes

* fix(apps): harden question action state

* fix(apps): keep unavailable questions terminal

* fix(apps): finalize local question outcomes

* fix(apps): preserve question card API

* fix(apps): reconcile external question answers

* fix(apps): reset question backoff budget

* chore(apps): refresh native i18n inventory

* fix(android): distinguish question skip progress

* fix(android): reconcile locally expired questions

* fix(apps): keep question recovery state fresh

* docs: note question surface parity

* fix(ui): reconcile IME draft before question takeover

* docs: leave question parity notes to release workflow
2026-07-18 21:42:15 +01:00
Peter Steinberger
019e42e013 fix(ios): auto-scroll to the reply when sending with the keyboard open (#110944) 2026-07-18 21:41:47 +01:00
Colin Johnson
1ca6b6ff67 feat(ios): unify chat and voice experience (#107879)
* feat(ios): unify chat and voice experience

* refactor(ios): finish unified chat ownership

* fix(ios): unify chat and voice capture ownership

* fix(ios): serialize Talk permission hydration

* fix(ios): clear voice CI regressions

* fix(ios): clear remaining unified chat CI failures

* chore(i18n): sync native source inventory

* refactor(ios): defer provider-only realtime voice

* fix(ios): clean unified chat voice PR

* fix(ios): localize unified voice controls

* fix(ios): serialize composer audio controls

* fix(ios): isolate dictation preparation lifecycle

* fix(ios): key chat tab icons by appearance

* fix(ios): preserve talk upgrade handshakes

* fix(ios): refresh native i18n inventory

* fix(ios): reconcile shared locale artifacts

* fix(ios): satisfy chat view lint limit

* fix(ios): reconcile shared composer implementation

* test(apple): avoid XCTest actor deinit crash

* fix(ios): satisfy SwiftFormat scope spacing

* fix(ios): remove duplicate merged helper declarations
2026-07-18 14:30:10 -04:00
Peter Steinberger
4d27b5b67e refactor(macos): move PortGuardian state to SQLite (#110527)
* refactor: compose native SQLite bootstrap tables

* refactor: share native SQLite state bootstrap

* refactor(macos): move PortGuardian state to SQLite

* test: align PortGuardian future-schema fixture

* fix(macos): reserve PortGuardian ledger across tunnel spawn

* fix(ci): align PortGuardian migration gates

* fix(macos): tolerate vanished SQLite sidecars

* fix(macos): revalidate PortGuardian writes

* test(macos): use sqlite identity bootstrap
2026-07-18 18:15:17 +01:00
Peter Steinberger
915d5360b5 refactor(chat-ui): render iOS tool calls as flat expandable rows (#110618)
* refactor(chat-ui): render tool calls as flat expandable rows

Replace the nested ToolCallCard/ToolResultCard/pending-tool cards inside
assistant bubbles with flat rows that mirror the web Control UI: chevron +
kind icon + title + one-line mono detail, result folded into the row and
revealed on tap (Show all for long outputs). Tool-only messages no longer
render bubble chrome.

* chore(i18n): sync native inventory + translations for tool-row strings
2026-07-18 17:46:44 +01:00
Peter Steinberger
98410d986e refactor(state): move device identity into canonical SQLite state (#110392)
* refactor: store device identities in SQLite

* style: satisfy Swift identity lint limits

* test: harden device identity migration fixtures

* fix: harden SQLite device identity recovery

* chore: remove stale identity helper

* refactor: isolate device identity repair

* chore: remove stale migration import

* test: validate migrated identity key types

* fix: harden device identity repair

* style: format device identity assertion

* fix: derive repaired identity key from PEM

* style: remove redundant PEM conversions

* fix: align native identity store with schema v4

* fix(state): satisfy SQLite identity CI gates

* fix(state): coordinate native identity migration

* test(doctor): include native identity claim path

* fix(infra): preserve coordinator release error

* fix(state): clear identity validation gates

* refactor(apple): remove identity test-only APIs

* refactor(apple): remove dead identity error type

* test(apple): use canonical identity test seam

* test(macos): isolate gateway readiness identity
2026-07-18 17:43:56 +01:00
Peter Steinberger
1cddec35f4 feat(clients): session groups, batch actions, inspector, and worktree-aware creation for native chat (#110347)
* feat(clients): gateway session groups, batch operations, session inspector, and new-session options

* chore(i18n): translate session management strings and regenerate catalogs

* chore(i18n): complete translation artifacts for session management strings

* fix(clients): fail closed when a transport cannot honor agent or base-ref session options

* fix(clients): authoritative agent identity for new-session parents and revision-keyed sidebar group refresh

* fix(clients): refetch session groups on remote catalog events and correct Swedish repository-root translation

* fix(clients): resilient new-session popover, revision-keyed group manager, and popover string translations

* fix(clients): scope reset fallback to plain new-session requests and revision-key the inspector groups

* fix(clients): reject empty agent catalogs and refresh sessions on remote group events

* refactor(clients): drop unused agents fetch wrapper and runtime memberwise init flagged by periphery

* chore(i18n): realign locale artifacts after rebase onto model-controls main

* chore(clients): split session creation into the session-actions extension and realign i18n after ask-user main rebase

* chore(i18n): resync derived artifacts after question-card main rebase
2026-07-18 14:09:42 +01:00
Peter Steinberger
7994c44b06 fix(ios): shrink the chat "Jump to latest" pill to a compact icon button (#110651)
* fix(ios): shrink chat jump-to-latest pill to a compact icon button

* fix(ios): drop removed jump-to-latest string from native locale artifacts
2026-07-18 13:26:26 +01:00
Peter Steinberger
af0d189774 fix(ios): stop repeated gateway errors from wobbling (#110493)
* fix(ios): keep gateway problem toast stationary

* chore(ios): sync native i18n inventory
2026-07-18 09:07:47 +01:00
Peter Steinberger
4d4099e608 fix(ios): prevent black edge bands in chat (#110505)
* fix(ios): restore translucent chat edges

* chore: keep release notes in pull request

* chore(ios): sync native i18n inventory
2026-07-18 09:01:37 +01:00
Peter Steinberger
09963412d1 fix(exec): track background commands as tasks (#110468) 2026-07-18 08:51:23 +01:00
Peter Steinberger
d7de67ae02 feat: ask_user follow-ups — harness convergence, channel finalization + reactions, native cards, docked web panel (#110372)
* feat(ask-user): follow-up harness slice

* feat(ask-user): follow-up channels slice

* feat(ask-user): follow-up native slice

* feat(ui): dock question panel above composer with stepper and compact stream summaries

* docs: refresh follow-up integration maps

* test(ui): align terminal summary proof

* fix(infra): echo declared option answers in terminal status when free-text is allowed

* fix(infra): keep reaction answering when display labels are formatter-adjusted

* fix(agents): settle plain-text claims only after question registration commits

* fix(agents,apps): commit-ordered claim persistence, claim-aware prompt delivery, non-blocking question refresh

* fix(harness,infra): reaction-appropriate question copy, caller presentations honored

* fix(native,infra,agents): local-expiry eviction, value-addressed reactions, reserve-before-request

* fix(infra,android): dual-mode question resolver for compact callbacks; reset terminal retention on replayed pending

* fix(harness,discord): claim-aware prompt delivery in run helper; escape finalization labels

* fix(macos): merge transient-content visibility with question cards after main sync

* fix: repair ask user follow-up CI

* test: update limited bootstrap scope expectation

* fix: retain shared question card API

* chore: refresh native i18n inventory
2026-07-18 03:32:39 -04:00
Peter Steinberger
8ae1581798 feat(clients): provider-grouped model picker with fast, verbosity, and inherited-thinking controls (#110339)
* feat(clients): provider-grouped model picker with fast, verbosity, and inherited-thinking controls

* chore(i18n): translate model-control strings and regenerate platform catalogs

* feat(clients): inherited-default restore for fast mode and verbosity controls

* fix(clients): preserve control state in thinking snapshots and persist inherited verbosity

* chore(i18n): resync native inventory after rebase onto message-reader main

* chore(i18n): realign locale artifacts after rebase onto message-reader main

* refactor(clients): drop superseded fast-mode accessors and picker convenience flagged by periphery

* chore(i18n): resync inventory line refs after dead-code removal
2026-07-18 07:01:31 +01:00
Peter Steinberger
a89f01abf4 perf(sqlite): fast schema gates, background integrity verification, and downgrade protection (#110271)
* perf(sqlite): gate schema version before integrity scans and quarantine terminal open failures

* feat(gateway): refuse incompatible database schemas at boot and verify integrity in the background

* feat(update): refuse installing builds that cannot open the current databases

* docs: add database schema reference with version history and downgrade guidance

* test(update): tolerate optional runner options in git-mutation mocks

* refactor(update): split npm package-target metadata out of update-check

* chore: model verifier internals for knip and regenerate docs map

* chore(i18n): resync stale iOS localization catalog

* chore: allowlist read-only preflight and verifier raw SQLite access
2026-07-18 05:49:39 +01:00
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