Ben.Li
b170c08e6d
fix(ios): reject loopback-prefix hosts for auth retry ( #99859 )
...
* fix(ios): require parsed loopback hosts for auth retry
* fix(ios): narrow device token retry loopback trust
* test(ios): cover trusted auth retry hosts
* docs(changelog): position iOS auth retry fix
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-06 02:05:21 +01:00
Peter Steinberger
5d8293c1fe
feat(ios): read-only offline cache for chat sessions and transcripts ( #100219 )
...
* feat(ios): read-only offline cache for chat sessions and transcripts
Cache-first cold open for the iOS chat tab: the last known transcript and
session list render immediately from a local SQLite cache, then live gateway
history replaces them wholesale through the existing reconciliation path.
When the gateway is unreachable, recent sessions and transcripts stay
browsable read-only; sending remains gated by the existing connection state.
- New OpenClawChatTranscriptCache protocol seam plus SQLite-backed store in
OpenClawChatUI (raw SQLite3, no new dependencies), scoped per gateway
stableID so transcripts never leak across paired gateways.
- Bounds: 50 sessions, 50 transcripts, 200 messages per session; text rows
only (attachment/binary payloads and tool arguments are stripped).
- Disposable cache: schema versioned via user_version; any open/schema/decode
mismatch drops and rebuilds silently. File protection
completeUntilFirstUserAuthentication on iOS.
- View model pre-paints from cache only until a live response applies
(hasAppliedLiveHistory/hasAppliedLiveSessions guards); write-through is
chained and off the render path.
- iOS wiring keys the chat view model identity on transport mode plus cache
gateway ID so switching paired gateways rebuilds the view model.
Part of #100194
* fix(ios): harden offline transcript cache
* fix(ios): expose offline cached sessions
* fix(ios): isolate transcript caches by gateway
* chore(i18n): sync native inventory
* fix(ios): allow cache extension to replace messages
2026-07-06 01:02:15 +01:00
Peter Steinberger
8c19dbfb62
feat(ios): export chat transcripts as Markdown via the share sheet ( #100417 )
...
* feat(ios): export chat transcripts as Markdown via the share sheet
* chore(ios): sync native i18n inventory
2026-07-05 22:14:44 +01:00
Peter Steinberger
bf156386aa
feat(chat-ui): structured haptic feedback for chat events ( #100416 )
2026-07-05 21:42:44 +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
1833c0d771
test(ios): add deterministic streaming replay harness for shared chat pipeline ( #100201 )
2026-07-05 12:27:57 -07:00
Peter Steinberger
3f380635f5
feat(chat-ui): syntax-highlighted code blocks and native tables in chat markdown ( #100207 )
...
* feat(chat-ui): syntax-highlighted code blocks and native GFM tables in shared chat markdown (#100195 )
* chore(chat-ui): sync native i18n inventory
* fix(chat-ui): harden native markdown rendering
* refactor(chat-ui): split HTML block patterns
* refactor(chat-ui): parse markdown blocks with swift-markdown
* style(chat-ui): satisfy SwiftFormat lint
* fix(ios): bundle markdown dependency licenses
* style(ios): normalize markdown license file
* fix(ios): keep native markdown cards legible
2026-07-05 11:38:05 -07:00
Peter Steinberger
535ad8a0c3
test(ios): import pairing protocol model ( #100355 )
...
* test(ios): import pairing protocol model
* test(ios): import pairing protocol model
2026-07-05 08:49:34 -07:00
Peter Steinberger
862de9f1a1
fix(pairing): advertise reachable Tailnet routes ( #100317 )
...
* fix(pairing): advertise reachable tailnet routes
* fix(pairing): satisfy native and SDK checks
* fix(ios): cancel stale pairing route probes
* test(pairing): document LAN-only Serve fallback
* fix(ios): preserve pairing result initializer
2026-07-05 07:43:43 -07:00
Peter Steinberger
9ba14b80ab
fix(ios): own gateway setup deep-link delivery ( #100328 )
2026-07-05 06:01:15 -07:00
Peter Steinberger
deac98eb72
fix: harden small runtime and installer edge cases ( #100258 )
...
* fix(media): preserve dollar sequences in transcript echoes
Co-authored-by: uditDewan <udit.dewan21@gmail.com >
* fix(mcp): catch rejected gateway event handlers
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
* fix(auto-reply): support punctuated silent token prefixes
Co-authored-by: simon-w <weng.qimeng@xydigit.com >
* fix(discord): keep voice log previews UTF-16 safe
Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com >
* fix(clawrouter): bound usage response reads
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
* fix(browser): bound CDP JSON response reads
Co-authored-by: hailory <hailory@xydigit.com >
* fix(status): include current time in session status
Co-authored-by: connermo <conner.mo@gmail.com >
* fix(installer): require Arch detection before pacman
Co-authored-by: Iliya Abolghasemi <gfaerny@gmail.com >
* fix(apps): default TLS gateway deep links to port 443
Co-authored-by: ben.li <li.yang6@xydigit.com >
* fix(infra): keep Undici terminated exceptions nonfatal
Co-authored-by: harjoth <harjoth.khara@gmail.com >
* fix(auto-reply): avoid Unicode-unsafe token spread
---------
Co-authored-by: uditDewan <udit.dewan21@gmail.com >
Co-authored-by: 陈宪彪0668000387 <chen.xianbiao@xydigit.com >
Co-authored-by: simon-w <weng.qimeng@xydigit.com >
Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com >
Co-authored-by: 杨浩宇0668001029 <yang.haoyu@xydigit.com >
Co-authored-by: hailory <hailory@xydigit.com >
Co-authored-by: connermo <conner.mo@gmail.com >
Co-authored-by: Iliya Abolghasemi <gfaerny@gmail.com >
Co-authored-by: ben.li <li.yang6@xydigit.com >
Co-authored-by: harjoth <harjoth.khara@gmail.com >
2026-07-05 05:33:11 -07:00
Peter Steinberger
9c5ea29e38
test: stabilize OpenClawKit async tests ( #100243 )
2026-07-05 02:12:06 -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
Peter Steinberger
6df0fb818d
feat: add session thread management ( #98510 )
...
* feat: add session thread management
Squash of codex/thread-management (025aefc3ad1) onto origin/main:
pin/archive/rename sessions via sessions.patch, archived-aware
sessions.list, lifecycle fencing, read-only archived chat, SDK +
Swift protocol support, Control UI session management.
* refactor(ui): minimal session rows with hover-revealed management
Chat picker and sidebar recents share session-row primitives: single-line
rows, relative timestamps, rename/archive/pin revealed on hover or focus,
accent pin badge for pinned rows, and an active-run spinner in the trail
slot. Sidebar floats pinned sessions above recency via the shared
comparator and gains archive/pin actions through the unified sessions-view
patch fallback. Archive eligibility is one shared policy
(canArchiveSessionRow); the sidebar/picker active-run tooltip now uses the
real sessionsView.activeRun locale key.
* fix: align session admission with mailbox-era main
Integration fixes after rebasing onto current main: sessions_list mailbox
test expectations learn the archived/pinned row fields and archived:false
list param; gateway agent admission treats a session as deleted only when
both the requested and canonical alias sets miss it (legacy bare-main
stores and exec-approval followups read under different spellings); cron
persist tests keep a consistent store across claim-guarded persist calls;
the ACP abort hook test asserts abort propagation instead of signal
identity; drop dead lifecycle writes flagged by no-useless-assignment and
fix the promise-executor return in the codex compact test.
* fix(qa): align UI e2e and shard fixtures with redesigned session rows
Sidebar session rows are wrapper divs with an inner link now: update the
navigation browser tests and chat-flow Playwright selectors. Seed a real
per-test session store for the auto-fallback admission guard instead of
depending on leftover host files at /tmp/sessions.json. Teach the
test-projects routing fixture about the suites that newly import the
shared temp-dir helper. Document the Codex thread-format contract for
archivedAt/pinnedAt (flag derived from server-stamped timestamp, epoch ms
here vs Codex epoch seconds) at the type and in the session docs.
* test: route auto-fallback suite through temp-dir helper plans
The auto-fallback suite now imports the shared temp-dir helper for its
seeded session store, so the top-level helper routing fixture must list
it in the auto-reply plan.
2026-07-04 14:30:47 -04: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
Peter Steinberger
6a7b62889e
feat(macos): install and run the local Gateway automatically ( #99767 )
...
* feat(macos): automate local gateway setup
* fix(macos): auto-approve the local Mac node
* chore(macos): refresh generated setup metadata
* chore(macos): refresh generated setup metadata
* chore(macos): refresh generated setup metadata
* chore(macos): refresh generated setup metadata
* chore(macos): refresh generated setup metadata
2026-07-03 22:09:56 -07: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
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
ooiuuii
155c2f4e7e
fix: keep iOS LAN QR pairing authenticated after bootstrap ( #98066 )
...
* Persist iOS LAN bootstrap handoff tokens
* test: cover iOS LAN bootstrap reconnect auth
* test(ios): consolidate LAN bootstrap reconnect proof
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-02 14:13:19 -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
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
Josh Avant
ad59492d3c
fix: show actionable mobile protocol mismatch recovery ( #98385 )
...
* Fix mobile protocol mismatch recovery
* Test iOS protocol mismatch connect failures
* Fix iOS protocol mismatch problem actions
2026-07-01 00:11:03 -05:00
ooiuuii
5a5913a98b
fix(ios): avoid transient duplicate final replies ( #98117 )
...
* Fix iOS final reply dedupe
* fix(ios): scope final message reconciliation
* docs(ios): explain final message reconciliation key
---------
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
2026-06-30 23:05:33 -05:00
Josh Avant
47845e1651
Preserve chat soft line breaks on iOS ( #98304 )
2026-06-30 20:02:55 -05: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
David
3ff0c29f9d
fix: handle terminal chat send acknowledgements ( #91049 )
...
* test: cover terminal chat send acknowledgements
* test: cover Swift terminal chat send acknowledgement
* fix: handle terminal chat send acknowledgements
* fix: align terminal ack web lifecycle options
* test: fix Android terminal ack style
* fix: tidy Android terminal ack helpers
* fix: clear mic pending run after terminal ack
* fix: handle terminal talk mode chat send acks
* fix: handle terminal tui chat send acks
* fix: handle terminal acp chat send acks
* test: add Swift chat message text helper
* test: cover steer terminal chat send acknowledgements
* fix: handle terminal steer chat send acks
* test: cover terminal realtime consult send acks
* fix: reject terminal realtime consult send acks
* test: cover Swift terminal ok chat send ack
* fix: clear Swift pending run on terminal ok ack
* test: cover terminal ack helper callers
* fix: preserve terminal ack helper semantics
* fix: narrow terminal ack type guard
* test: cover mic terminal ack statuses
* fix: preserve mic terminal ack status
* fix: keep mic ack contract internal
* test: fix mic ack import order
* test: cover acp terminal ok ack
* test: narrow acp ok ack assertion
* test: cover redirect terminal acknowledgements
* fix: handle redirect terminal acknowledgements
* fix: settle terminal ack reconnect prompts
* fix: surface Android terminal ack timeouts
* fix(tui): handle detached terminal chat acknowledgements
* fix(tui): report terminal timeout send failures
* fix: satisfy iOS talk-mode SwiftFormat
* fix: keep iOS talk logs compile-safe
2026-06-22 17:27:54 +00:00
Andrew Stroup
378c4134f1
fix(slack): default member-info userId to inbound sender ( #89236 )
...
Merged via squash.
Prepared head SHA: c7a39e54f7
Co-authored-by: stroupaloop <2424551+stroupaloop@users.noreply.github.com >
Co-authored-by: steipete <58493+steipete@users.noreply.github.com >
Reviewed-by: @steipete
2026-06-19 14:03:29 +01:00
joshavant
99e69e16b7
remove ios identity migration
2026-06-19 14:16:48 +02:00
joshavant
f13dc76ba1
fix ios share extension device identity
2026-06-19 14:16:48 +02:00
joshavant
ea7e214bd4
Fix chat history races across agent switches
2026-06-06 04:41:32 -05:00
joshavant
7478e6e485
Fix chat session sync ownership
2026-06-06 04:41:32 -05:00
Peter Steinberger
772d13c19d
fix: handle iOS global agent transcripts
2026-05-31 18:01:17 +01:00
Yuval Dinodia
a6ee3dbbdd
fix(ios): update group chats in realtime
...
Subscribe the iOS gateway chat transport to per-session transcript events so group chats update when other clients send messages. Constrain local user echo adoption to the optimistic row tied to the still-pending send run, so repeated same-content user messages from other clients append instead of replacing history.
Fixes #80231 .
Co-authored-by: Yuval Dinodia <yetvald@gmail.com >
2026-05-31 17:24:59 +01:00
mochiexists
096bd13962
build(OpenClawKit): make ElevenLabsKit optional behind Talk trait
...
Adds a default-enabled SwiftPM Talk trait for OpenClawKit so chat-only consumers can opt out with traits: [] and avoid resolving ElevenLabsKit. Default traits preserve existing talk/TTS API and bundled app behavior; macOS CI now verifies the trait-off dependency graph and build.
Verification:
- CI at 85f00ebc04 passed macos-swift and Real behavior proof.
- Local Swift 6.3.2: trait-off dependency graph omitted ElevenLabsKit; full swift build with default traits disabled built through OpenClawChatUI; default dependency graph still included ElevenLabsKit; trait-off OpenClawKit target build passed.
- merge-tree against latest origin/main 4eba3e5d7d was clean.
- Current main already fails plugin-SDK declaration gates in unrelated TS files; reproduced locally with node scripts/run-tsgo.mjs -p tsconfig.plugin-sdk.dts.json --declaration true.
Thanks @mochiexists.
Co-authored-by: mochiexists <259077624+mochiexists@users.noreply.github.com >
Co-authored-by: atlascodesai <76924051+atlascodesai@users.noreply.github.com >
2026-05-31 07:40:35 +01:00
Peter Steinberger
4c33aaa86c
refactor: unify OpenAI provider identity ( #88451 )
...
* refactor: unify OpenAI provider identity
* refactor: move legacy oauth sidecar doctor helpers
* test: align OpenAI fixtures after rebase
* test: clean OpenAI provider unification
* fix: finish OpenAI provider cleanup
* fix: finish OpenAI cleanup follow-through
* fix: finish OpenAI CI cleanup
2026-05-31 00:29:44 +01:00
Nimrod Gutman
b352cb2d8e
fix(ios): guard websocket ping continuation ( #88231 )
...
Merged via squash.
Prepared head SHA: b4cee97b8a
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Reviewed-by: @ngutman
2026-05-30 07:56:34 +03: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
Nimrod Gutman
9ca52ce3d9
[codex] improve iOS realtime talk mode ( #86355 )
...
Merged via squash.
Prepared head SHA: 3f5aedb265
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Reviewed-by: @ngutman
2026-05-25 13:27:37 +03:00
Nimrod Gutman
94d8391c03
[codex] restore QR bootstrap operator handoff ( #83684 )
...
Merged via squash.
Prepared head SHA: 2dc955cfb7
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com >
Reviewed-by: @ngutman
2026-05-19 20:59:09 +03:00
Peter Steinberger
5b383af736
feat: add native mac dashboard window
2026-05-16 23:49:18 +01: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
Val Alexander
faa443a452
fix(chat/ios): downscale image attachments before send
...
Resize iOS chat PhotosPicker image attachments through the shared JPEG transcoder before staging/sending. Cap long edge and payload bytes, strip source metadata, preserve previews from processed data, and add focused processor/view-model regression tests.\n\nFixes #68524.\nSupersedes #73710 .
2026-05-13 21:44:05 -05:00
Val Alexander
6a41a54212
fix(macos): harden direct gateway TLS pinning
...
Summary:
- Require macOS system trust before saving and accepting first-use direct `wss://` gateway TLS pins.
- Honor `gateway.remote.tlsFingerprint` in macOS direct node-mode TLS params.
- Add focused Swift coverage and update remote gateway docs/changelog.
Verification:
- Local: swiftformat --lint on touched Swift files.
- Local: git diff --check HEAD~1..HEAD.
- Local: swift test --package-path apps/shared/OpenClawKit --filter GatewayTLSPinningTests.
- Local: swift test --package-path apps/macos --filter 'MacNodeModeCoordinatorTests|GatewayEndpointStoreTests'.
- Local: PATH=/Users/buns/.nvm/versions/node/v24.13.0/bin:$PATH pnpm docs:list.
- CI: macos-node, macos-swift, check-docs, security-fast, security-scm-fast, security-dependency-audit, Opengrep OSS, and changed-path checks passed on PR head cf383fc047 .
Fixes #50642 .
Supersedes #50643 .
2026-05-13 21:30:22 -05:00
Peter Steinberger
694ca50e97
Revert "refactor: move runtime state to SQLite"
...
This reverts commit f91de52f0d .
2026-05-13 13:33:38 +01:00
Peter Steinberger
f91de52f0d
refactor: move runtime state to SQLite
...
* refactor: remove stale file-backed shims
* fix: harden sqlite state ci boundaries
* refactor: store matrix idb snapshots in sqlite
* fix: satisfy rebased CI guardrails
* refactor: store current conversation bindings in sqlite table
* refactor: store tui last sessions in sqlite table
* refactor: reset sqlite schema history
* refactor: drop unshipped sqlite table migration
* refactor: remove plugin index file rollback
* refactor: drop unshipped sqlite sidecar migrations
* refactor: remove runtime commitments kv migration
* refactor: preserve kysely sync result types
* refactor: drop unshipped sqlite schema migration table
* test: keep session usage coverage sqlite-backed
* refactor: keep sqlite migration doctor-only
* refactor: isolate device legacy imports
* refactor: isolate push voicewake legacy imports
* refactor: isolate remaining runtime legacy imports
* refactor: tighten sqlite migration guardrails
* test: cover sqlite persisted enum parsing
* refactor: isolate legacy update and tui imports
* refactor: tighten sqlite state ownership
* refactor: move legacy imports behind doctor
* refactor: remove legacy session row lookup
* refactor: canonicalize memory transcript locators
* refactor: drop transcript path scope fallbacks
* refactor: drop runtime legacy session delivery pruning
* refactor: store tts prefs only in sqlite
* refactor: remove cron store path runtime
* refactor: use cron sqlite store keys
* refactor: rename telegram message cache scope
* refactor: read memory dreaming status from sqlite
* refactor: rename cron status store key
* refactor: stop remembering transcript file paths
* test: use sqlite locators in agent fixtures
* refactor: remove file-shaped commitments and cron store surfaces
* refactor: keep compaction transcript handles out of session rows
* refactor: derive transcript handles from session identity
* refactor: derive runtime transcript handles
* refactor: remove gateway session locator reads
* refactor: remove transcript locator from session rows
* refactor: store raw stream diagnostics in sqlite
* refactor: remove file-shaped transcript rotation
* refactor: hide legacy trajectory paths from runtime
* refactor: remove runtime transcript file bridges
* refactor: repair database-first rebase fallout
* refactor: align tests with database-first state
* refactor: remove transcript file handoffs
* refactor: sync post-compaction memory by transcript scope
* refactor: run codex app-server sessions by id
* refactor: bind codex runtime state by session id
* refactor: pass memory transcripts by sqlite scope
* refactor: remove transcript locator cleanup leftovers
* test: remove stale transcript file fixtures
* refactor: remove transcript locator test helper
* test: make cron sqlite keys explicit
* test: remove cron runtime store paths
* test: remove stale session file fixtures
* test: use sqlite cron keys in diagnostics
* refactor: remove runtime delivery queue backfill
* test: drop fake export session file mocks
* refactor: rename acp session read failure flag
* refactor: rename acp row session key
* refactor: remove session store test seams
* refactor: move legacy session parser tests to doctor
* refactor: reindex managed memory in place
* refactor: drop stale session store wording
* refactor: rename session row helpers
* refactor: rename sqlite session entry modules
* refactor: remove transcript locator leftovers
* refactor: trim file-era audit wording
* refactor: clean managed media through sqlite
* fix: prefer explicit agent for exports
* fix: use prepared agent for session resets
* fix: canonicalize legacy codex binding import
* test: rename state cleanup helper
* docs: align backup docs with sqlite state
* refactor: drop legacy Pi usage auth fallback
* refactor: move legacy auth profile imports to doctor
* refactor: keep Pi model discovery auth in memory
* refactor: remove MSTeams legacy learning key fallback
* refactor: store model catalog config in sqlite
* refactor: use sqlite model catalog at runtime
* refactor: remove model json compatibility aliases
* refactor: store auth profiles in sqlite
* refactor: seed copied auth profiles in sqlite
* refactor: make auth profile runtime sqlite-addressed
* refactor: migrate hermes secrets into sqlite auth store
* refactor: move plugin install config migration to doctor
* refactor: rename plugin index audit checks
* test: drop auth file assumptions
* test: remove legacy transcript file assertions
* refactor: drop legacy cli session aliases
* refactor: store skill uploads in sqlite
* refactor: keep subagent attachments in sqlite vfs
* refactor: drop subagent attachment cleanup state
* refactor: move legacy session aliases to doctor
* refactor: require node 24 for sqlite state runtime
* refactor: move provider caches into sqlite state
* fix: harden virtual agent filesystem
* refactor: enforce database-first runtime state
* refactor: rename compaction transcript rotation setting
* test: clean sqlite refactor test types
* refactor: consolidate sqlite runtime state
* refactor: model session conversations in sqlite
* refactor: stop deriving cron delivery from session keys
* refactor: stop classifying sessions from key shape
* refactor: hydrate announce targets from typed delivery
* refactor: route heartbeat delivery from typed sqlite context
* refactor: tighten typed sqlite session routing
* refactor: remove session origin routing shadow
* refactor: drop session origin shadow fixtures
* perf: query sqlite vfs paths by prefix
* refactor: use typed conversation metadata for sessions
* refactor: prefer typed session routing metadata
* refactor: require typed session routing metadata
* refactor: resolve group tool policy from typed sessions
* refactor: delete dead session thread info bridge
* Show Codex subscription reset times in channel errors (#80456 )
* feat(plugin-sdk): consolidate session workflow APIs
* fix(agents): allow read-only agent mount reads
* [codex] refresh plugin regression fixtures
* fix(agents): restore compaction gateway logs
* test: tighten gateway startup assertions
* Redact persisted secret-shaped payloads [AI] (#79006 )
* test: tighten device pair notify assertions
* test: tighten hermes secret assertions
* test: assert matrix client error shapes
* test: assert config compat warnings
* fix(heartbeat): remap cron-run exec events to session keys (#80214 )
* fix(codex): route btw through native side threads
* fix(auth): accept friendly OpenAI order for Codex profiles
* fix(codex): rotate auth profiles inside harness
* fix: keep browser status page probe within timeout
* test: assert agents add outputs
* test: pin cron read status
* fix(agents): avoid Pi resource discovery stalls
Co-authored-by: dataCenter430 <titan032000@gmail.com >
* fix: retire timed-out codex app-server clients
* test: tighten qa lab runtime assertions
* test: check security fix outputs
* test: verify extension runtime messages
* feat(wake): expose typed sessionKey on wake protocol + system event CLI
* fix(gateway): await session_end during shutdown drain and track channel + compaction lifecycle paths (#57790 )
* test: guard talk consult call helper
* fix(codex): scale context engine projection (#80761 )
* fix(codex): scale context engine projection
* fix: document Codex context projection scaling
* fix: document Codex context projection scaling
* fix: document Codex context projection scaling
* fix: document Codex context projection scaling
* chore: align Codex projection changelog
* chore: realign Codex projection changelog
* fix: isolate Codex projection patch
---------
Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org >
Co-authored-by: Josh Lehman <josh@martian.engineering >
* refactor: move agent runtime state toward piless
* refactor: remove cron session reaper
* refactor: move session management to sqlite
* refactor: finish database-first state migration
* chore: refresh generated sqlite db types
* refactor: remove stale file-backed shims
* test: harden kysely type coverage
# Conflicts:
# .agents/skills/kysely-database-access/SKILL.md
# src/infra/kysely-sync.types.test.ts
# src/proxy-capture/store.sqlite.test.ts
# src/state/openclaw-agent-db.test.ts
# src/state/openclaw-state-db.test.ts
* refactor: remove cron store path runtime
* refactor: keep compaction transcript handles out of session rows
* refactor: derive embedded transcripts from sqlite identity
* refactor: remove embedded transcript locator handoff
* refactor: remove runtime transcript file bridges
* refactor: remove transcript file handoffs
* refactor: remove MSTeams legacy learning key fallback
* refactor: store model catalog config in sqlite
* refactor: use sqlite model catalog at runtime
# Conflicts:
# docs/cli/secrets.md
# docs/gateway/authentication.md
# docs/gateway/secrets.md
* fix: keep oauth sibling sync sqlite-local
# Conflicts:
# src/commands/onboard-auth.test.ts
* refactor: remove task session store maintenance
# Conflicts:
# src/commands/tasks.ts
* refactor: keep diagnostics in state sqlite
* refactor: enforce database-first runtime state
* refactor: consolidate sqlite runtime state
* Show Codex subscription reset times in channel errors (#80456 )
* fix(codex): refresh subscription limit resets
* fix(codex): format reset times for channels
* Update CHANGELOG with latest changes and fixes
Updated CHANGELOG with recent fixes and improvements.
* fix(codex): keep command load failures on codex surface
* fix(codex): format account rate limits as rows
* fix(codex): summarize account limits as usage status
* fix(codex): simplify account limit status
* test: tighten subagent announce queue assertion
* test: tighten session delete lifecycle assertions
* test: tighten cron ops assertions
* fix: track cron execution milestones
* test: tighten hermes secret assertions
* test: assert matrix sync store payloads
* test: assert config compat warnings
* fix(codex): align btw side thread semantics
* fix(codex): honor codex fallback blocking
* fix(agents): avoid Pi resource discovery stalls
* test: tighten codex event assertions
* test: tighten cron assertions
* Fix Codex app-server OAuth harness auth
* refactor: move agent runtime state toward piless
* refactor: move device and push state to sqlite
* refactor: move runtime json state imports to doctor
* refactor: finish database-first state migration
* chore: refresh generated sqlite db types
* refactor: clarify cron sqlite store keys
* refactor: remove stale file-backed shims
* refactor: bind codex runtime state by session id
* test: expect sqlite trajectory branch export
* refactor: rename session row helpers
* fix: keep legacy device identity import in doctor
* refactor: enforce database-first runtime state
* refactor: consolidate sqlite runtime state
* build: align pi contract wrappers
* chore: repair database-first rebase
* refactor: remove session file test contracts
* test: update gateway session expectations
* refactor: stop routing from session compatibility shadows
* refactor: stop persisting session route shadows
* refactor: use typed delivery context in clients
* refactor: stop echoing session route shadows
* refactor: repair embedded runner rebase imports
# Conflicts:
# src/agents/pi-embedded-runner/run/attempt.tool-call-argument-repair.ts
* refactor: align pi contract imports
* refactor: satisfy kysely sync helper guard
* refactor: remove file transcript bridge remnants
* refactor: remove session locator compatibility
* refactor: remove session file test contracts
* refactor: keep rebase database-first clean
* refactor: remove session file assumptions from e2e
* docs: clarify database-first goal state
* test: remove legacy store markers from sqlite runtime tests
* refactor: remove legacy store assumptions from runtime seams
* refactor: align sqlite runtime helper seams
* test: update memory recall sqlite audit mock
* refactor: align database-first runtime type seams
* test: clarify doctor cron legacy store names
* fix: preserve sqlite session route projections
* test: fix copilot token cache test syntax
* docs: update database-first proof status
* test: align database-first test fixtures
* docs: update database-first proof status
* refactor: clean extension database-first drift
* test: align agent session route proof
* test: clarify doctor legacy path fixtures
* chore: clean database-first changed checks
* chore: repair database-first rebase markers
* build: allow baileys git subdependency
* chore: repair exp-vfs rebase drift
* chore: finish exp-vfs rebase cleanup
* chore: satisfy rebase lint drift
* chore: fix qqbot rebase type seam
* chore: fix rebase drift leftovers
* fix: keep auth profile oauth secrets out of sqlite
* fix: repair rebase drift tests
* test: stabilize pairing request ordering
* test: use source manifests in plugin contract checks
* fix: restore gateway session metadata after rebase
* fix: repair database-first rebase drift
* fix: clean up database-first rebase fallout
* test: stabilize line quick reply receipt time
* fix: repair extension rebase drift
* test: keep transcript redaction tests sqlite-backed
* fix: carry injected transcript redaction through sqlite
* chore: clean database branch rebase residue
* fix: repair database branch CI drift
* fix: repair database branch CI guard drift
* fix: stabilize oauth tls preflight test
* test: align database branch fast guards
* test: repair build artifact boundary guards
* chore: clean changelog rebase markers
---------
Co-authored-by: pashpashpash <nik@vault77.ai >
Co-authored-by: Eva <eva@100yen.org >
Co-authored-by: stainlu <stainlu@newtype-ai.org >
Co-authored-by: Jason Zhou <jason.zhou.design@gmail.com >
Co-authored-by: Ruben Cuevas <hi@rubencu.com >
Co-authored-by: Pavan Kumar Gondhi <pavangondhi@gmail.com >
Co-authored-by: Shakker <shakkerdroid@gmail.com >
Co-authored-by: Kaspre <36520309+Kaspre@users.noreply.github.com >
Co-authored-by: dataCenter430 <titan032000@gmail.com >
Co-authored-by: Kaspre <kaspre@gmail.com >
Co-authored-by: pandadev66 <nova.full.stack@outlook.com >
Co-authored-by: Eva <admin@100yen.org >
Co-authored-by: Eva (agent) <eva+agent-78055@100yen.org >
Co-authored-by: Josh Lehman <josh@martian.engineering >
Co-authored-by: jeffjhunter <support@aipersonamethod.com >
2026-05-13 13:15:12 +01:00
Val Alexander
51b73b39a8
fix(auth): align operator bootstrap scopes
...
Preserve full shared-token operator sessions while reusing bootstrap/cached device-token scopes for handoff reconnects.
Surface device-token scope mismatches as AUTH_SCOPE_MISMATCH and stop reconnect retry loops without clearing valid stored tokens.
Fixes #79292 .
Supersedes #79314 , #79296 , #79295 .
2026-05-11 14:14:33 -05:00
Nimrod Gutman
00a0858fd9
fix(ios): recover rotated gateway certificates
...
## Summary
- allow iOS to trust system-valid rotated gateway certificates
- rebuild active gateway sessions after replacing the stored TLS pin
- expose certificate trust recovery from gateway problem banners
## Verification
- swift test --filter 'GatewayErrorsTests|GatewayNodeSessionTests/changedSessionBoxRebuildsExistingGatewayChannel'
- xcodebuild build -scheme OpenClaw -destination 'platform=iOS,id=00008140-000848A92EE3001C'
- installed and launched OpenClaw on attached iPhone with devicectl
- verified iOS gateway log connected to wss://gutsy-home.tail06a72.ts.net:443 after trust/pairing recovery
2026-05-10 21:10:35 +03:00
Val Alexander
dafbdb6f20
fix: preserve shared macOS and CLI device identities
...
Fixes #76815 .
- Teach the Swift macOS identity store to load TypeScript PEM identity files without regenerating device IDs.
- Teach the TypeScript identity store to migrate legacy Swift raw-key identities to PEM after validating key material.
- Preserve recognized invalid identity files instead of clobbering them, preventing repeated pairing churn while retaining diagnostic evidence.
- Align the macOS wizard CLI with the generated protocol model.
Reported by @aboundTechOlogy.
Thanks @BunsDev.
2026-05-09 23:32:33 -05: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
Val Alexander
36df0d93b9
fix: repair iOS LAN pairing
...
Fix iOS LAN/setup-code pairing policy for #47887 .
- Allow explicit private LAN and .local plaintext ws:// setup/manual connects where policy allows it.
- Keep public hosts, .ts.net, and Tailscale CGNAT plaintext fail-closed.
- Prefer explicit passwords over stale bootstrap tokens in Swift and TypeScript gateway clients.
- Update setup-code/device-pair coverage, docs, and changelog with source credit for #65185 .
Verification:
- pnpm install
- git diff --check origin/main..HEAD
- pnpm exec oxfmt --check --threads=1 src/gateway/client.ts src/gateway/client.test.ts src/pairing/setup-code.ts src/pairing/setup-code.test.ts extensions/device-pair/index.ts extensions/device-pair/index.test.ts
- pnpm format:docs:check
- pnpm test src/gateway/client.test.ts src/pairing/setup-code.test.ts extensions/device-pair/index.test.ts
- cd apps/shared/OpenClawKit && swift test --filter 'DeepLinksSecurityTests|GatewayNodeSessionTests'
- pnpm lint:swift passes with the existing TalkModeRuntime.swift type-body-length warning
Blocked locally:
- iOS app-target xcodebuild tests require unavailable watchOS 26.4 runtime here.
- Testbox check:changed previously failed because the image lacks swiftlint; local swiftlint passes.
2026-05-05 21:07:19 -05:00