Colin Johnson
5cd184c91b
fix(ios): keyboard unavailable after tapping chat composer ( #120723 )
...
* fix(ios): restore composer keyboard focus
* test(ios): cover composer focus in screenshot CI
Co-authored-by: Colin <colin@solvely.net >
* test(ios): make composer focus proof device-aware
Co-authored-by: Colin <colin@solvely.net >
* fix(ios): stabilize sidebar layout under keyboard
Co-authored-by: Colin <colin@solvely.net >
* chore(ios): refresh native i18n inventory
Co-authored-by: Colin <colin@solvely.net >
* test(ios): keep focus proof in screenshot helper
Co-authored-by: Colin <colin@solvely.net >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-08 21:56:46 -07:00
metaforismo
102a5915ef
fix(ios): restore Magic Keyboard return in chat composer ( #116042 )
...
* fix(ios): restore hardware return in chat composer
* test(ios): cover hardware return composer flow
* fix(ios): route history keys through native editor
* fix(ios): satisfy composer lint gates
* test(ios): fix snapshot app lookup
* test(ios): keep snapshot helper nonthrowing
---------
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-07-31 16:21:41 -07:00
Peter Steinberger
0021e51f22
feat(apple): media renditions, Now Playing, video upload ( #116051 )
...
* feat(apple): complete media playback and uploads
* fix(apple): preserve movie picker metadata
* fix(apple): harden rendition and picker routing
* style(apple): fix macOS media formatting
2026-07-29 15:50:18 -04:00
Peter Steinberger
85afb973e4
fix(ios): keep stop available for staged voice notes ( #115744 )
2026-07-29 04:31:07 -04:00
Peter Steinberger
0f066eec81
feat(dashboard): plugin widget kinds — native WorkBoard card and mini-board widgets ( #112434 )
...
* feat(board): add plugin widget kinds
* feat(ui): render native Workboard widgets
* fix(dashboard): compose plugin widgets with current main
* chore: internalize widget-kind contribution types
* fix(ui): retry plugin widget renderer loads
* fix(ui): harden Workboard widget refresh lifecycle
* fix(ci): clear plugin widget landing gates
* fix(boards): migrate plugin widget storage
* fix(db): migrate unreleased board widget constraint
* fix(ui): retry failed Workboard widget loads
* fix(ui): keep stale widget refresh cleanup inert
* fix(ci): align plugin widget landing guards
2026-07-21 17:59:20 -07: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
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
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
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
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
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
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
Vincent Koc
ee3104340d
fix(ios): localize design and chat surfaces
2026-07-12 18:33:47 +02:00
Peter Steinberger
091584b197
chore(swift): restore compact conditional bodies ( #103832 )
...
* style(swift): restore compact conditional bodies
* fix(ios): remove redundant startup timeout await
* chore(swift): sync native i18n inventory
2026-07-10 18:12:00 +01:00
Peter Steinberger
62bd760c0e
chore(swift): enforce current formatting and lint rules ( #103313 )
...
* style: apply SwiftFormat 0.62.1 rules
Refs #103202
* ci: enforce deterministic Swift lint
Refs #103202
* refactor: keep gateway connect lint-clean
Refs #103202
* style: keep iOS typography checks warning-free
* ci: route MLX Swift changes through pre-push
* fix: preserve native i18n extraction after Swift cleanup
* refactor: keep rebased Swift surfaces lint-clean
* style: format latest Swift additions
* chore: refresh native i18n inventory
* style: keep generated Swift formatter-clean
* fix: preserve node route invalidation callbacks
* fix: keep native translation IDs stable
* fix: retain native translation identifiers
* fix: preserve translations across Swift source moves
2026-07-10 11:54:08 +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
4babbb2f6f
feat(ios): context-window usage indicator in the chat composer ( #101183 )
2026-07-06 23:43:19 +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
538d4eeb77
feat(ios): hide thinking-level control for models without reasoning support ( #100875 )
2026-07-06 15:59:03 +01:00
Peter Steinberger
1f06b890a6
feat(ios): add model picker favorites and recents with working iOS model switching ( #100774 )
2026-07-06 11:44:13 +01:00
VicZhang
7acfb63535
feat: add slash command picker in chat composer ( #99426 )
...
* feat: add iOS slash command picker
* refine iOS slash command picker presentation
* Fix iOS slash picker scroll affordance build
* Preserve branded mono typography in slash picker
* Refresh native i18n inventory
* Remove slash picker row icons
* Refresh native i18n inventory
---------
Co-authored-by: Colin <colin@solvely.net >
2026-07-03 22:53:25 -04: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
37a9b9a91c
Audit iOS branded typography coverage
2026-07-03 18:45:45 -05:00
joshavant
ea3c6dc5f7
fix(ios): align branded typography licenses
2026-07-03 18:45:45 -05: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
Peter Steinberger
3e50f41dd6
improve(ios): simplify Talk controls and composer alignment ( #98736 )
...
* refactor(ios): streamline talk and composer controls
* test(ios): restore Talk control state
* chore(ios): refresh native i18n inventory
2026-07-02 00:48:37 +01:00
Peter Steinberger
8502ef6c59
feat(ios): modernize the app with iOS 26 Liquid Glass ( #98452 )
...
* feat(ios): adopt iOS 26 Liquid Glass design
* refactor(ios): refine Liquid Glass hierarchy
* docs(ios): require Xcode 26
* refactor(ios): remove obsolete design helpers
* fix(ios): keep agent tab navigation hidden
* fix(ios): compact chat composer at rest
* refactor(ios): reduce interface density
* fix(ios): keep native string inventory current
2026-07-01 19:06:04 +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
748881e0a8
fix(ios): label chat attachment button
2026-06-04 22:52:52 -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
Val Alexander
9ffe290a17
fix(chat): decode native thinking metadata
...
Decode gateway-provided thinking metadata for native iOS/macOS chat picker options, preserving extended and legacy thinking levels without leaking default-model options across sessions.\n\nVerification:\n- swift test --package-path apps/shared/OpenClawKit --filter ChatViewModelTests --no-parallel\n- swift test --package-path apps/macos --filter WebChatSwiftUISmokeTests --no-parallel\n- pnpm lint:swift\n- pnpm check:changed\n\nFollow-up maintainer fix for #40878 review feedback.
2026-05-07 02:39:01 -05:00
Peter Steinberger
b294f7c467
fix: harden ios app build hygiene
2026-04-28 01:42:10 +01:00
J. Tyler Bittner
00951dc9f9
fix(macOS): enable undo/redo in webchat composer text input ( #34962 )
...
* fix(macOS): enable undo/redo in webchat composer text input
Set `allowsUndo = true` on ChatComposerNSTextView in makeNSView().
NSTextView defaults allowsUndo to false, which prevented Cmd+Z and
the Edit menu Undo/Redo items from functioning.
Fixes #34898
* fix(macos): enable webchat composer undo/redo (#34962 ) (thanks @tylerbittner)
---------
Co-authored-by: Nimrod Gutman <nimrod.gutman@gmail.com >
2026-04-17 10:07:20 +03:00
Luke
061b8258bc
macOS: add chat model selector and persist thinking ( #42314 )
...
* feat(macos): add chat model selector and thinking persistence UX
* Chat UI: carry session model providers
* Docs: add macOS model selector changelog
* macOS: persist extended thinking levels
* Chat UI: keep model picker state in sync
* Chat UI tests: cover model selection races
---------
Co-authored-by: Ubuntu <ubuntu@vps-90352893.vps.ovh.ca >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-03-11 00:43:04 -04: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
Peter Steinberger
1970a1e9e5
fix(macos): keep Return for IME marked text commit ( #25178 )
...
Co-authored-by: jft0m <9837901+bottotl@users.noreply.github.com >
2026-02-25 00:14:00 +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