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
Peter Steinberger
bb5a31f5d6
fix(ios): "Jump to latest" no longer appears while the assistant is still writing ( #110811 )
...
* fix(ios): keep jump-to-latest hidden while the reader is at the live edge
* fix(ios): refresh native i18n inventory line offsets
2026-07-18 19:52:43 +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
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
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
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
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
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
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
195bec6910
feat(ios): show per-message usage metadata ( #103471 )
...
* feat(ios): show per-message usage metadata
* fix(ios): compile usage context calculation
2026-07-10 08:24:28 +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
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
Peter Steinberger
bb658d0a6d
feat(macos): redesign chat window as native shell with sessions sidebar, toolbar pickers, slash commands, and context usage ( #101103 )
...
* feat(chat-ui): native macOS chat window shell with sessions sidebar, context usage, and slash commands
* feat(macos): host redesigned chat window shell and complete gateway chat transport
* fix(chat-ui): gate slash panel on catalog support and register window shell shortcuts outside menus
* fix(chat-ui): make sidebar selection tags optional and sync programmatic composer text into the focused NSTextView
* fix(macos): track in-window session switches for chat window reuse
* fix(chat-ui): re-bootstrap in place when deleting the active main session
* docs(macos): describe the redesigned native chat window
* fix(macos): scope bare global session RPCs to the routing default agent
* style(chat-ui): restore blank line between rebased helpers
* fix(macos): scope selected global session actions
* fix(macos): refresh chat routing identity
* fix(chat-ui): hide delete for main sessions
* fix(macos): remove duplicate session patch path
* fix(chat-ui): resolve sidebar session aliases
* fix(chat-ui): isolate sidebar alias resolution
* fix(chat-ui): reconcile active session aliases
* fix(chat-ui): prefer selected session aliases
* chore(i18n): refresh chat window inventory
* fix(chat-ui): return sidebar filter result
* refactor(chat-ui): split session actions
2026-07-07 02:06:10 +01:00
Peter Steinberger
f95ca90378
fix(ios): persist voice notes through offline delivery ( #101236 )
...
* fix(ios): persist voice note delivery state
* fix(ios): pin chats during attachment staging
* fix(ios): keep voice notes on captured chat
* fix(ios): keep voice notes durable through staging
* fix(ios): harden voice note lifecycle
* test(ios): satisfy strict concurrency in voice note proof
* fix(ios): keep legacy attachment sends live
* fix(ios): retain legacy drafts during outbox restore
* fix(ios): pin voice note recipient presentation
* fix(ios): preserve confirmed voice note duration
* chore(i18n): refresh voice note source inventory
* chore: leave release notes to release automation
2026-07-07 01:21:16 +01:00
Peter Steinberger
b978dcc63b
feat(ios): record and send voice notes from the chat composer ( #100946 )
...
* feat(ios): record and send voice notes from the chat composer
Adds tap-to-record voice notes to the shared chat composer: m4a/AAC mono
capture with a 3-minute cap, lazy mic permission, cancel/finish controls,
audio attachment chips with duration, and a voice-note transcript row.
Voice-wake suppression becomes reason-scoped so recording and Talk cannot
clobber each other. Attachments stay online-only per the outbox contract.
Related: #100709
* fix(ios): harden voice note attachment staging
* chore(ios): keep voice note changelog release-owned
* fix(ios): gate voice notes with attachment availability
* chore(ios): refresh native localization inventory
2026-07-07 00:14:05 +01:00
Peter Steinberger
60ce506712
feat(ios): add Listen action speaking assistant messages via gateway TTS ( #100771 )
...
* test(gateway): shift advertised-method window for tts.speak
* feat(ios): add Listen action speaking assistant messages via gateway TTS
* docs(ios): document the chat Listen action
* style(ios): keep outbox label doc comment attached and give speech chip its own
* fix(ios): harden chat Listen playback
* docs(changelog): note iOS chat Listen
* fix(ios): unwrap speech MIME before classification
* docs(changelog): keep Listen note app-scoped
2026-07-06 19:32:54 +01:00
Peter Steinberger
06789ca4c2
fix(ios): keep offline chat sends on their original route ( #100942 )
2026-07-06 17:53:05 +01:00
Peter Steinberger
5713f1bec1
fix(ios): chat snaps back to bottom when scrolling to top via status-bar tap ( #100502 )
...
* fix(ios): stop chat snapping back to bottom after system scroll-to-top
* chore(i18n): sync native inventory after chat scroll fix
2026-07-06 07:41:35 +01:00
Peter Steinberger
4b7661e9a0
feat(ios): durable offline command outbox for chat sends ( #100331 )
...
* feat(ios): durable offline command outbox for chat sends
Text messages sent while the gateway is unreachable queue in a durable
per-gateway outbox (new outbox_commands table in the per-gateway chat
cache SQLite store, schema v2) instead of failing. Queued bubbles render
with visible Queued/Sending/Not sent states and flush strictly in
createdAt order once transport health recovers; each command's client
UUID rides as the send idempotency key, so at-least-once delivery plus
gateway dedupe keeps the transcript exact.
Contract summary:
- Bounds: 50 queued commands per gateway; refused enqueues keep the
draft. Queued rows older than 48h expire to failed("expired") rather
than silently sending stale commands; tap-to-retry refreshes
createdAt so an expired row can resend as new intent.
- Failure taxonomy: transport-level failures keep rows queued without
burning retry attempts (backoff ladder, then health drops so the
reconnect machinery owns pacing); gateway rejections burn attempts
and fail terminally after 3, with context-menu retry/delete.
- Deletes are tombstoned synchronously and rechecked after the claim
await so an active flush can never send a removed command; Delete is
hidden while a bubble is already in flight; offline enqueue is
guarded against double submit during the health probe.
- Post-reconnect live sends route behind draining outbox rows (FIFO),
and a cold open assumes a backlog until restore adopts durable rows.
- Crash safety: 'sending' rows revert to 'queued' at startup; flushed
turns are spliced into the session's cached transcript before their
outbox row is deleted, and stale history snapshots cannot evict a
just-flushed turn until a snapshot confirms it.
- Per-gateway scoping and purge ride the transcript cache: one SQLite
file per gateway; reset/forget drops the queue with the cache.
Fixture/unpaired transports get no outbox.
Part of #46664
* chore(ios): sync native i18n inventory
* style(chat-ui): satisfy strict SwiftFormat lint (doc comment, scope blank line)
2026-07-06 05:23:46 +01:00
Josh
e43c72954a
Polish iOS onboarding and chat critique fixes ( #99243 )
...
* fix(ios): polish onboarding and empty chat
Co-authored-by: Josh <17843332+jcooley8@users.noreply.github.com >
* fix(ios): correlate pending chat echoes
* fix(ios): ship localized chat starters
* fix(ios): preserve chat echo identity
* fix(ios): adopt late correlated chat echoes
* fix(ios): reconcile reused chat runs
* fix(ios): preserve transformed chat history
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-04 00:38:56 -07:00
Marvin Kaunda
5370f64cf0
improve: native iOS look with stock SwiftUI navigation, forms, chat, and talk visualizer ( #99231 )
...
* improve(ios): adopt native SwiftUI chrome across the app
* fix(ios): keep phone chat on the native navigation bar
* fix(ios): render licenses screen as native settings rows
* fix(ios): complete native interface polish
* fix(ios): preserve branded native interface
* test(ios): align gateway badge source guard
* fix(ios): center onboarding on iPad
* fix(ios): remove dead reskin symbols
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-03 18:17:09 -07:00
joshavant
3885ee19a0
Apply branded font to chat jump control
2026-07-03 18:45:45 -05:00
joshavant
ea3c6dc5f7
fix(ios): align branded typography licenses
2026-07-03 18:45:45 -05:00
christopheraaronhogg
ab2761f3a5
improve: make native chat scrolling reader-managed ( #98258 )
...
* improve native chat scroll behavior
* add native chat scroll proof harnesses
* fix(android): jump native chat to live content
* fix(mobile): harden reader-managed chat scrolling
* fix(android): preserve prompt anchor through completion
* fix(android): gate follow changes on user scroll
* fix(ios): handle optimistic chat rollback
* fix(mobile): harden reader boundary transitions
* fix(mobile): expose newer content after restore
* fix(android): preserve restored reader identity
* test(ios): prove reader pause and resume
* fix(android): scope restored reader state to session
* chore(i18n): sync native chat inventory
* fix(mobile): harden reader scroll recovery
* chore(i18n): sync native inventory after rebase
---------
Co-authored-by: Chris Hogg <chrishogg@Chriss-Mac-mini-3.local >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-03 06:57:16 -07:00
Peter Steinberger
c4102f5d67
feat(ios): refine the chat experience ( #98953 )
...
* feat(ios): refine the chat experience
* feat(ios): refine the chat experience
2026-07-02 08:40:53 +01:00
John McChesney TenEyck Jr
a54206f0f5
Fix iOS chat Dynamic Type text ( #97552 )
...
Co-authored-by: Your Name <you@example.com >
2026-06-28 14:52:37 -07:00
Sash Zats
5d9daea2b0
fix(ios): centralize app accent colors ( #94627 )
...
Move iOS accent and status colors through design tokens so raw SwiftUI color literals are blocked outside token definitions.
Set the app-wide tint in SwiftUI and UIKit from code, without relying on Assets.xcassets AccentColor.
2026-06-22 20:20:37 +00:00
joshavant
9942428df0
fix(ios): disable chat composer while offline
2026-06-06 04:41:33 -05:00
joshavant
dc5c24fbe6
fix(ios): keep chat messages above composer
2026-06-06 04:41:33 -05:00
joshavant
83a6bce835
Fix iOS chat background presentation
2026-06-06 04:41:32 -05:00
joshavant
73f056a0a4
fix ios chat error banner overlap
2026-06-06 04:41:31 -05:00
Colin Johnson
f6e51ff99a
feat(ios): refresh pro UI and gateway flows ( #87367 )
...
Summary:
- Replace the legacy iOS shell with Pro Command, Chat, Agents, and Settings tabs.
- Wire iOS chat/session/settings/diagnostics and realtime Talk flows through gateway-backed APIs.
- Add gateway/session and shared chat coverage for the new iOS flow.
Verification:
- git diff --check
- node scripts/run-vitest.mjs src/gateway/server.sessions.create.test.ts src/gateway/talk-realtime-relay.test.ts
- swift test --filter ChatViewModelTests (apps/shared/OpenClawKit)
- xcodebuild build for Nimrod's iPhone succeeded; install succeeded; launch was blocked because the phone was locked
Known follow-up:
- Preserve traceLevel in sessions.create parent runtime inheritance and keep the changelog credit in the follow-up patch.
2026-05-28 17:23:26 +03:00
javierdici
f6c00456dc
Render provider errors in chat history ( #65689 )
...
Merged via squash.
Prepared head SHA: a777c7506e
Co-authored-by: javierdici <131621115+javierdici@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-05-15 00:48:41 +03:00
Peter Steinberger
b294f7c467
fix: harden ios app build hygiene
2026-04-28 01:42:10 +01:00
Peter Steinberger
d15b6af77b
fix: land contributor PR #39516 from @Imhermes1
...
macOS app/chat/browser/cron/permissions fixes.
Co-authored-by: ImHermes1 <lukeforn@gmail.com >
2026-03-08 06:11:20 +00:00
Mariano
9476dda9f6
iOS Chat: clean UI noise and format tool outputs ( #22122 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 34dd87b0c0
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com >
Reviewed-by: @mbelinky
2026-02-20 19:01:03 +00:00
Peter Steinberger
9a7160786a
refactor: rename to openclaw
2026-01-30 03:16:21 +01:00