Peter Steinberger
9e43844264
build: generate native Canvas resources on demand ( #117424 )
2026-08-01 08:16:56 -07:00
Peter Steinberger
d962a3d9c1
fix(ios): avoid duplicate URLs in shared drafts ( #116430 )
...
* fix(ios): deduplicate shared URLs
* test(ios): prove share provider extraction
2026-07-30 09:09:35 -07:00
joshavant
690ed56441
fix(ios): preserve localized app display names
2026-07-22 22:56:22 -05:00
joshavant
12515ad182
fix(ios): harden App Store release flow
2026-07-21 13:44:11 -05: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
joshavant
1c16005cd7
fix(ios): identify Apple Health integration
2026-07-17 12:16:44 -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
joshavant
cac32bb5d1
fix(ios): declare Health update purpose
2026-07-13 19:12:21 -05: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
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
21ccca6b88
fix(ios): compile watch identifier helpers in logic tests
2026-07-12 18:33:47 +02:00
Vincent Koc
ff6f4af69a
test(watchos): cover localized chat status fallback
2026-07-12 18:33:47 +02:00
Peter Steinberger
2a02ab6bbe
refactor(apps): reuse Watch approval transport models ( #105024 )
...
* refactor(apps): reuse watch approval transport models
* fix(ios): satisfy exact identifier lint
2026-07-12 07:08:03 +01:00
Peter Steinberger
dc42c893c3
improve(ios): redesign share extension compose sheet ( #104187 )
2026-07-10 22:22:15 -07:00
lin-hongkuan
f4732576bd
fix(ios): preserve prefixed share text ( #103453 )
...
* fix(ios): preserve prefixed share text
* fix(ios): harden shared text normalization
---------
Co-authored-by: lin-hongkuan <lin-hongkuan@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 20:01:06 -07: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
Peter Steinberger
7fe004d852
feat: show build identity in About screens ( #103595 )
...
* feat: show build identity in About screens
* chore: leave root changelog to release automation
* fix: translate Control UI About build details
2026-07-10 10:42:36 +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
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
8d1668c441
fix(ios): harden Apple Watch pairing activation ( #100732 )
2026-07-06 09:16:02 +01:00
Peter Steinberger
65aec96440
fix(ios): simplify development app name ( #100466 )
2026-07-06 00:22:14 +01:00
PollyBot13
a320f775f0
fix(ios): defer QR pairing after scanner dismissal ( #99572 )
...
* fix(ios): defer QR pairing after scanner dismissal
* fix(ios): process QR pairing after scanner dismissal
* fix(ios): harden QR scanner handoff
* fix(ios): give QR scanner dismissal more time
* fix(ios): keep onboarding open for QR trust prompt
* fix(ios): keep QR trust prompt owned by onboarding
* fix(ios): recover operator pairing after QR bootstrap
* fix(ios): cancel stale QR scanner handoffs
Co-authored-by: PollyBot13 <pollybot13@gmail.com >
* fix(ios): defer QR setup until onboarding closes
* fix(ios): keep QR setup links with visible settings
* fix(ios): consume setup links during onboarding
* fix(ios): handle setup links during onboarding launch
* fix(ios): route setup links through active onboarding
* fix(ios): harden QR gateway handoff
* fix(ios): cancel superseded gateway attempts
* fix(ios): serialize scanner result delivery
* fix(ios): prevent stale gateway reconnects
* fix(ios): serialize gateway target handoff
* fix(ios): disable stale gateway relaunch route
* fix(ios): await staged bootstrap reset
* test(ios): bound gateway reset handoff
* fix(ios): preserve explicit gateway handoff
* fix(ios): harden gateway lifecycle ownership
* chore(ios): sync native i18n inventory
* test(ios): align gateway ownership assertions
* refactor(ios): remove superseded gateway helpers
* fix(ios): keep gateway auth route scoped
* fix(ios): restore gateway target review state
* fix(protocol): refresh Swift plugin approval model
* test(ios): isolate state directory overrides
* fix(ios): preserve watch alerts across gateway switches
* fix(ios): bind deferred work to gateway ownership
* docs(changelog): credit iOS gateway handoff fix
* chore(i18n): sync native app inventory
* test(ios): remove unused Watch approval hooks
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-05 12:31:53 -07:00
Peter Steinberger
245092dc3a
feat(ios): add Apple Watch voice turns ( #100283 )
...
* feat(ios): add Apple Watch voice turns
* chore(ios): sync native i18n inventory
* fix(ios): preserve Watch message label
2026-07-05 06:40:03 -07:00
Peter Steinberger
e60c510560
feat(ios): distinguish debug app builds ( #100222 )
...
* feat(ios): distinguish debug app builds
* feat(ios): distinguish debug app builds
* feat(ios): emphasize debug app icons
* feat(ios): emphasize debug app icons
2026-07-05 02:01:26 -07: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
joshavant
25c8fbb5e7
Fix iOS typography rebase audit
2026-07-03 18:45:45 -05:00
joshavant
d483cc1f72
fix(ios): cover remaining branded typography surfaces
2026-07-03 18:45:45 -05:00
joshavant
ea3c6dc5f7
fix(ios): align branded typography licenses
2026-07-03 18:45:45 -05:00
joelnishanth
9f73c9acdc
fix(ios): remove leaked location capability and restore chat hooks
...
- Remove UIBackgroundModes location from project.yml/Info.plist
- Restore emptyAssistantIntro in ChatProTab
- Restore accessibilityIdentifier("chat-gateway-status")
- Restore gatewayAccessibilityLabel computed property
- Re-sync native i18n inventory
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-03 18:45:45 -05:00
joelnishanth
39b703dfcf
feat(ios): implement branded typography design system
...
Add OpenClaw design system foundations:
- Custom typography tokens (OpenClawType) using Plus Jakarta Sans,
DM Sans, and JetBrains Mono with Dynamic Type scaling
- Spacing and radius token enums (OpenClawSpacing, OpenClawRadius)
- Additive brand color tokens (accentPressed, teal, void, obsidian,
slate, textPrimary, textSecondary)
- Shared components: OpenClawToggleIndicator, OpenClawStatusBadge,
OpenClawPrimaryButtonStyle, OpenClawSecondaryButtonStyle
- Bundled font files with OFL license provenance
Migrate all iOS views to OpenClawType tokens. No behavioral, navigation,
or routing changes — this is purely visual/typographic.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-07-03 18:45:45 -05:00
PollyBot13
671c315072
feat: clarify iOS Location Always permission flow ( #99247 )
...
* feat: clarify iOS Location Always permission flow
* fix(ios): avoid stale location permission summary
* fix(ios): clarify disabled location permission grants
* fix(ios): sync external location grants into settings
* chore(ios): refresh native i18n inventory
* fix(ios): preserve location off during permission sync
* fix(ios): preserve while using during location sync
* fix(ios): wait for location permission prompts
* fix(ios): reconcile significant location monitoring
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-03 14:16:20 -07:00
Peter Steinberger
0e68c50139
fix(ios): add Photos permission controls ( #99350 )
...
* fix(ios): add Photos permission controls
* chore(i18n): sync native Photos strings
* fix(ios): align Swedish Photos disclosure
* test(ios): complete limited Photos UI proof
* chore(i18n): refresh native source lines
2026-07-02 22:11:14 -07:00
joshavant
cfa7b1b616
Add iOS licenses settings screen
2026-07-02 20:34:59 -05: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
Vincent Koc
9cfbd1b65c
feat(apple): localize native app surfaces
2026-07-01 05:19:12 -07:00
Vincent Koc
02046b665f
feat(apple): add Russian and Hindi app catalogs
2026-07-01 05:19:12 -07:00
joshavant
e77994ed5a
fix(ios): clarify camera purpose string
2026-06-24 11:00:04 -05:00
joshavant
d4f666874f
feat: harden ios app store push release mode
2026-06-23 00:01:20 -05:00
joshavant
e08ef9f893
feat: add ios push relay sandbox profiles
2026-06-22 21:07:57 -04:00
joshavant
f7f415f26b
fix(ios): wire share extension app group signing
2026-06-19 12:53:45 +02:00
Peter Steinberger
8d9eba3f4f
fix(ios): complete single-target watch migration
...
Use the watchOS application API for text input, remove simulator-only Debug architecture restrictions, and document the standard Watch bundle location. Refs #92477 .
Co-authored-by: Sash Zats <sash@zats.io >
2026-06-19 06:18:43 -04:00
Sash Zats
b39a932112
fix: migrate watch app to single-target app (Xcode 27+ compat) ( #92477 )
...
* fix: migrate watch app to single-target app
* fix: build watch screenshots generically
* docs(ios): clarify watch embed invariant
* docs(ios): clarify watch embed invariant
---------
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-06-19 11:34:34 +02:00
Colin Johnson
c45c87acca
feat(ios): add watch action surface ( #93387 )
...
* feat(ios): add watch action surface
* fix: harden watch action surface
* fix: clean watch codegen lint
* fix(ios): scope watch chat commands to gateway
---------
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
2026-06-16 15:22:16 +02:00
joshavant
21e3cfa5e9
Add Apple Watch screenshot pipeline
2026-06-16 00:40:40 +02:00
joshavant
9092578d8d
feat: configure ios app store release upload
2026-06-15 19:27:55 +02:00
joshavant
a23de348b2
feat: configure ios app store release signing
2026-06-15 19:27:55 +02:00
joshavant
5a2641fc41
test: add ios screenshot automation
2026-06-15 19:27:55 +02:00
joshavant
379de52b59
fix: use canonical ios bundle identifiers
2026-06-15 19:27:55 +02:00