Peter Steinberger
9e43844264
build: generate native Canvas resources on demand ( #117424 )
2026-08-01 08:16:56 -07:00
WhatsSkiLL
f0170ca238
Android: collapse sidebar search behind header action ( #116956 )
...
* feat(android): collapse sidebar search
* test(android): cover sidebar search toggle
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
* chore(android): refresh sidebar i18n inventory
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
* test(android): restore sidebar test clock
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
* test(android): remove stateful sidebar UI test
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
---------
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-31 12:10:43 -07:00
Peter Steinberger
349cc33669
test(android): synchronize Wear channel transport close completion ( #116788 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 04:36:37 -07:00
Vincent Koc
20e68e01df
fix(gateway): sign device proofs with challenge time ( #116679 )
2026-07-31 16:45:53 +08:00
Vincent Koc
9309a4fce9
test(android): remove duplicate setup-code coverage ( #116658 )
2026-07-31 12:12:35 +08:00
Vincent Koc
88876f780b
fix(android): preserve device work across lifecycle changes ( #116593 )
...
* fix(android): use configured SDK for screenshot AVDs
* fix(android): keep chat jump control clear of messages
* fix(wear): ignore stale control completions
* fix(android): advertise node permission changes
* fix(android): select play flavor for benchmarks
* test(android): decouple cron benchmark from copy
* fix(android): install play variant in perf scripts
* fix(wear): clear gateway control busy state
* fix(android): surface voice e2e connection errors
* test(android): cover common live node commands
* fix(android): retain share parsing across recreation
* fix(android): retain permission requests across recreation
* fix(wear): bind realtime audio to talk attempts
* fix(android): track active permission host
* fix(wear): own gateway control busy state
* fix(wear): admit realtime channels by attempt
* fix(android): refresh permissions on top resume
* fix(wear): serialize reconnect retirement with writes
* chore(i18n): refresh native source inventory
* fix(wear): retain pending audio through start RPC
* fix(wear): negotiate realtime channel compatibility
* test(wear): assert reconnect outcome without owner churn
* fix(android): move settings prompt with active host
* fix(wear): reject stale relay starts
* chore(changelog): leave notes to release generation
2026-07-31 09:49:11 +08:00
openclaw-mantis[bot]
8c61044576
chore(i18n): refresh native locales ( #116567 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-31 08:29:26 +08:00
WhatsSkiLL
47f8c1d6b0
Android: add adaptive app navigation sidebar ( #113908 )
...
* feat(android): add adaptive navigation sidebar
* fix(android): satisfy native i18n checks
* fix(android): use adaptive Material navigation
* fix(android): preserve adaptive navigation state
* chore(i18n): refresh native source baseline
* fix(android): keep compact navigation labels on one line
* chore(android): refresh native i18n source lines
* fix(android): preserve sidebar gateway status
* fix(android): satisfy status label checks
---------
Co-authored-by: Colin <colin@solvely.net >
2026-07-30 17:27:45 -04:00
openclaw-mantis[bot]
81d165c612
chore(i18n): refresh native locales ( #116213 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-30 15:17:38 +08:00
joshavant
e4e7f37d24
chore(android): record 2026.7.4 Play metadata
2026-07-30 01:49:07 -05:00
joshavant
eb263c5104
chore(android): prepare 2026.7.4 Play release
2026-07-30 01:19:40 -05:00
licheer-zte
6288a750ca
fix(android): move Wear capability keep rules to raw keep files to prevent resource shrinking ( #116068 )
...
* fix(android): move Wear capability keep rules to raw keep files
Resource-shrinker keep directives in res/values/*.xml are not honored
by Android's resource shrinker during release builds. Move the
tools:keep declarations into dedicated res/raw/*.keep.xml files as
documented by Android:
https://developer.android.com/topic/performance/app-optimization/customize-which-resources-to-keep
Fixes openclaw/openclaw#116049
* fix(android): rename keep files - use underscores instead of dots
Android resource names must contain only lowercase a-z, 0-9, and underscores.
Dots in file names cause build failure with AAPT2 resource merger.
- ai.openclaw.app.phone.keep.xml -> ai_openclaw_app_phone_keep.xml
- ai.openclaw.app.wear.keep.xml -> ai_openclaw_app_wear_keep.xml
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-30 08:55:45 +08:00
Peter Steinberger
e1cc617f86
feat(android): media renditions, MediaSession, video upload ( #116037 )
...
* feat(android): add media rendition and video support
* chore(android): refresh native i18n inventory
* fix(android): opt in to Media3 command API
* chore(android): sync native i18n source locations
2026-07-29 15:44:04 -04:00
Peter Steinberger
ff72f287c3
fix(gateway): declare viewer presence explicitly instead of deriving it from subscriptions ( #116001 )
...
* fix(gateway): declare viewer presence explicitly instead of deriving it from subscriptions
* refactor(ui): isolate viewer presence lifecycle ownership
* chore(protocol): register viewer presence schema owner
* fix(ui): keep viewer presence cleared after detach
* chore: drop changelog edits from this PR
CHANGELOG.md is release-owned; release generation derives entries from merged
PRs. Release-note context stays in the PR body.
2026-07-29 13:56:54 -04:00
Peter Steinberger
80176dab8d
feat(android): inline audio/video players with Media3 ( #115916 )
...
* feat(android): add inline media players
* fix(android): release inactive media players
* fix(android): preserve paused media playback
* test(android): include Media3 license notice
* chore(android): refresh native i18n inventory
2026-07-29 10:26:45 -04:00
Peter Steinberger
68a3d28906
fix: keep content after HTML-backed disclosures visible ( #115877 )
...
* fix(chat): close disclosures in coalesced HTML
Keep model-authored details closers visible to the shared disclosure contract when CommonMark absorbs them into type-6 HTML blocks across the Control UI and native apps.
* refactor(apps): isolate disclosure unfolding
Keep the native disclosure segmenter below its lint complexity and type-size limits, and refresh the source-owned native i18n inventory after the move.
* fix(apps): align disclosure helper visibility
Keep the extracted same-file helper compatible with Swift access control while leaving its implementation types hidden outside the source file.
* fix(apps): align source replacement visibility
Keep the source replacement helper at the same file-private boundary as the extracted disclosure unfolding types.
2026-07-29 10:24:46 -04:00
Peter Steinberger
662abec754
feat(gateway): push session PR indicators to subscribed clients ( #115643 )
...
* feat(gateway): push session PR indicators to subscribed clients
* test(gateway): fix PR indicator drift
* chore(protocol): allowlist PR-indicator event for native apps (Control UI surface)
* test: align PR indicator lifecycle coverage
* fix(ui): scope session PR store listeners to active watchers
2026-07-29 06:30:01 -04:00
Peter Steinberger
4232126bba
chore: update dependencies across workspace ( #115677 )
...
* chore(deps): update dependencies
* fix(deps): restore CI compatibility
2026-07-29 05:16:42 -04:00
Vincent Koc
14940edf15
feat(skills): add Skill Workshop lifecycle hooks ( #115606 )
...
* feat(skills): add lifecycle hook contracts
* feat(plugins): expose skill hook contracts
* feat(plugins): identify skill evaluators
* feat(skills): persist proposal evaluation lifecycle
* feat(skills): add agent evaluation action
* feat(skills): emit committed skill lifecycle changes
* feat(gateway): expose skill proposal evaluation lifecycle
* feat(ui): add Skill Workshop evaluations
* fix(skills): bind lifecycle state to proposal revisions
* fix(skills): preserve lifecycle events without artifacts
* feat(cli): evaluate skill proposals
* fix(ui): bind evaluations to proposal revisions
* docs(skills): document lifecycle hook primitives
* chore(plugin-sdk): refresh skill hook surface
* fix(skills): harden proposal evaluator execution
* fix(plugins): isolate skill evaluator inputs
* fix(cli): align skill lifecycle deadlines
* fix(skills): preserve evaluation replay invariants
* test(ui): capture Skill Workshop evaluation proof
* fix(skills): bind apply to evaluated target tree
* fix(skills): preserve evaluation contract edges
* fix(skills): bound evaluation event storage
* chore(skills): keep lifecycle helpers internal
* refactor(skills): isolate evaluation persistence
* fix(skills): satisfy lifecycle validation gates
* chore(protocol): refresh Skill Workshop clients
* docs: refresh Skill Workshop map
* chore: keep release notes in PR metadata
* docs: refresh merged docs map
* fix(ci): type Code Mode catch errors
* fix(skills): freeze lifecycle observation payloads
* fix(protocol): keep proposal inspect backward-decodable
* fix(skills): enforce final evaluator bundle limits
* fix(skills): preserve lifecycle caller attribution
* chore: drop subsumed Code Mode formatting
* test(plugins): adapt lifecycle hook mocks
2026-07-29 15:49:44 +08:00
Peter Steinberger
138675aeeb
feat(apps): render collapsible details natively ( #115641 )
...
* feat(apps): render collapsible details natively in chat
* fix(apps): preserve reference definitions when folding disclosures
* fix(apps): keep authored details summaries unlocalized
* fix(apps): keep raw-HTML disclosure examples literal
* refactor(apps): isolate summaries and raw HTML contexts
* fix(apps): honor all CommonMark raw HTML contexts in disclosures
* chore(apps): refresh native i18n inventory for disclosure strings
2026-07-29 02:52:54 -04:00
Peter Steinberger
26bfa88bb2
fix: restore native Talk transcripts, fallback, and microphone access ( #115577 )
...
* fix(ios): decode frameless Talk events
* fix(android): keep browser-only Talk models native
* fix(macos): gate dashboard media capture
* docs(talk): clarify native platform fallbacks
* chore(i18n): refresh native source inventory
* fix(android): gate relay entry on provider-level browser-only models too
2026-07-29 01:55:47 -04:00
Peter Steinberger
df9a940872
feat(chat): show live run telemetry across clients ( #113084 )
...
* feat(chat): show live run telemetry across clients
* fix(chat): satisfy native validation gates
* fix(chat): settle advertised terminal runs
* fix(android): clear stale run usage on gaps
* chore(i18n): align native source inventory
* fix(chat): reconcile telemetry with current projections
* refactor(chat): keep run state in owner extensions
* chore(i18n): refresh native source inventory
* test(ui): expect persistent working telemetry through streaming
2026-07-29 01:27:58 -04:00
Vincent Koc
c0a472f0b2
chore(i18n): refresh native locales ( #115532 )
2026-07-29 13:11:40 +08:00
Peter Steinberger
5e3a8e37a3
feat(gateway): add memory.search operator method ( #115346 )
...
* feat(gateway): add memory.search operator method
* fix(gateway): validate memory.search agentId against configured agents
* test(gateway): keep memory.search handler tests core-only
* chore(protocol): regenerate android method registry for memory.search
* test(gateway): type memory.search stub results
2026-07-28 14:40:25 -04:00
NianJiu
1a319f9a78
fix(android): keep welcome action reachable with large text ( #111747 )
...
* fix(android): keep welcome action reachable with large text
* test(android): isolate Compose host theme
* fix(android): keep gateway setup usable with large text
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-28 14:39:33 -04:00
Yue Fei
1b4a465ea1
feat(gateway): accept WebSocket request trace context ( #113189 )
...
* feat(gateway): accept WebSocket request trace context
* test(gateway): prove WebSocket trace isolation
* test(gateway): simplify traced response match
* ci: allow iOS screenshot validation to finish
* fix(gateway): keep traced request failures scoped
* test(ci): align iOS screenshot timeout contract
* test(ui): reset config route location
* ci: scope iOS screenshots to native changes
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-28 13:15:05 -04:00
Vincent Koc
d92062b970
fix(android): respect locale in compact labels
2026-07-28 23:49:44 +08:00
Bryan Tegomoh, MD, MPH
15866acef5
Refresh macOS skills after node reconnect ( #107660 )
...
* Refresh macOS skills after node reconnect
* fix(macos): queue skills refresh during reconnect
* chore(i18n): refresh native skills inventory
* fix(macos): refresh skills from gateway invalidations
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
* fix(android): update gateway event catalog
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
* refactor(skills): keep remote eligibility helper bounded
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
* ci(test): pin model shard worker budget
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
* ci(test): isolate network-sensitive agent suites
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
* test: align isolated prefix routing expectation
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
* test(macos): isolate gateway process test port
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
* fix(macos): recover skills after failed refresh
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
* fix(ci): avoid duplicate agent test routing
Co-authored-by: Bryan Tegomoh <bryan.tegomoh@gmail.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-28 09:10:45 -04:00
Chris M.
37bddc75cc
fix(android): finish Wear OS release readiness [AI-assisted] ( #110425 )
...
* fix(android): harden Wear release quality
* fix(android): use Wear minimum touch targets
Co-authored-by: Chris Mish <chrism@promethean-dynamic.com >
* fix(android): localize Wear accessibility actions
Co-authored-by: Chris Mish <chrism@promethean-dynamic.com >
* fix(android): preserve dictation without live voice
Co-authored-by: Chris Mish <chrism@promethean-dynamic.com >
* fix(android): isolate Wear locale source changes
Co-authored-by: Chris Mish <chrism@promethean-dynamic.com >
* fix(android): keep Wear dictate preview exclusive
Co-authored-by: Chris Mish <chrism@promethean-dynamic.com >
* fix(android): separate large-font Wear hit targets
Co-authored-by: Chris Mish <chrism@promethean-dynamic.com >
* test(pr): isolate review artifact ripgrep fixture
* ci: extend embedded-agent fork watchdog
* refactor(android): clarify Wear voice action availability
* style(android): preserve Wear locale source lines
* chore(i18n): refresh native source inventory
* style(android): restore Wear label indentation
---------
Co-authored-by: Chris Mish <chrism@promethean-dynamic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-28 05:41:53 -04:00
Vincent Koc
9fbe9abc86
fix(ci): restore Android CodeQL compatibility ( #115095 )
2026-07-28 11:24:22 +02:00
Vincent Koc
f8ed8ecf4f
fix(security): harden CodeQL-reported boundaries ( #115055 )
...
* fix(security): harden CodeQL-reported boundaries
* style(android): fix WebMessage listener indentation
2026-07-28 16:47:12 +08:00
Peter Steinberger
4b05d83035
fix: generated images do not appear in native chat ( #115042 )
...
* fix(chat): render managed images in native clients
Co-authored-by: Francesco Giannicola <francescogiannicola1@gmail.com >
* chore: keep release changelog owned
* refactor(macos): split managed image loading
* test(apple): prove managed image header policy
* test(native): stabilize managed image proof
* test(apple): satisfy strict concurrency checks
---------
Co-authored-by: Francesco Giannicola <francescogiannicola1@gmail.com >
2026-07-28 04:39:53 -04:00
Vincent Koc
9000da0451
refactor(android): remove unused Wear voice button ( #115061 )
2026-07-28 16:19:34 +08:00
Vincent Koc
7838c6a6fd
fix(apps): fence stale mobile delivery state
2026-07-28 08:15:52 +02:00
Peter Steinberger
a4d60af42b
fix: sharpen working-claw silhouette into a toothed pincer ( #114939 )
2026-07-28 01:18:36 -04:00
Peter Steinberger
01f6ad67d5
chore(i18n): refresh native locale catalogs ( #114915 )
...
* chore(i18n): refresh native locale catalogs
* chore(i18n): sync native translation artifacts
2026-07-28 00:42:59 -04:00
Masato Hoshino
852120e724
fix(android): honor reduced motion reactively in mascot and talk waveform ( #112687 )
...
* fix(android): honor reduced motion reactively in mascot and talk waveform
OpenClawMascot and TalkWaveform read Settings.Global.ANIMATOR_DURATION_SCALE
with a one-shot remember(context){} that never reacts when the user toggles
"Remove animations" while the screen stays mounted. Extract the reactive
ContentObserver read that ChatWorkingIndicator already used into a shared
ui/SystemAnimations.kt helper and use it in all three surfaces. Follow-up to
#112245 (Wear avatar).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
* fix(android): resync the native i18n baseline after the animation refactor
The native-i18n check failed with "native app i18n inventory drift detected".
apps/.i18n/native-source.json pins a line number for each of its 5290 entries,
and 23 of them point into ChatWorkingIndicator.kt. Extracting the shared
rememberSystemAnimationsEnabled helper shortened that file by 26 lines, so every
recorded string below the edit moved and the inventory no longer matched.
Regenerated with `pnpm native:i18n:baseline`, as the failure message instructs.
The diff is 23 line-number updates (384 -> 358 and so on); no `source` value
changes, because this refactor adds and removes no user-facing strings.
`node --import tsx scripts/native-app-i18n.ts verify` now passes.
* fix(android): reuse Compose motion scale
Co-authored-by: Masato Hoshino <g515hoshino@gmail.com >
* fix(android): keep system motion scale authoritative
Co-authored-by: Masato Hoshino <g515hoshino@gmail.com >
* test(cli): raise root help deadlock guard
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-28 00:38:50 -04:00
NianJiu
aa26ecfac1
fix(android): Wear Talk works after exiting and reopening ( #112383 )
...
* fix(android): scope Wear Talk client to ViewModel
* test(android): exercise Wear ViewModel factory lifecycle
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
---------
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-27 23:35:10 -04:00
dependabot[bot]
52bf653427
build(deps): bump the android-deps group across 1 directory with 5 updates ( #113083 )
...
Bumps the android-deps group with 5 updates in the /apps/android directory:
| Package | From | To |
| --- | --- | --- |
| [io.kotest:kotest-assertions-core-jvm](https://github.com/kotest/kotest ) | `6.2.2` | `6.2.3` |
| [io.kotest:kotest-runner-junit5-jvm](https://github.com/kotest/kotest ) | `6.2.2` | `6.2.3` |
| com.android.application | `9.3.0` | `9.3.1` |
| com.android.library | `9.3.0` | `9.3.1` |
| com.android.test | `9.3.0` | `9.3.1` |
Updates `io.kotest:kotest-assertions-core-jvm` from 6.2.2 to 6.2.3
- [Release notes](https://github.com/kotest/kotest/releases )
- [Commits](https://github.com/kotest/kotest/compare/6.2.2...6.2.3 )
Updates `io.kotest:kotest-runner-junit5-jvm` from 6.2.2 to 6.2.3
- [Release notes](https://github.com/kotest/kotest/releases )
- [Commits](https://github.com/kotest/kotest/compare/6.2.2...6.2.3 )
Updates `io.kotest:kotest-runner-junit5-jvm` from 6.2.2 to 6.2.3
- [Release notes](https://github.com/kotest/kotest/releases )
- [Commits](https://github.com/kotest/kotest/compare/6.2.2...6.2.3 )
Updates `com.android.application` from 9.3.0 to 9.3.1
Updates `com.android.library` from 9.3.0 to 9.3.1
Updates `com.android.test` from 9.3.0 to 9.3.1
Updates `com.android.library` from 9.3.0 to 9.3.1
Updates `com.android.test` from 9.3.0 to 9.3.1
---
updated-dependencies:
- dependency-name: com.android.application
dependency-version: 9.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: android-deps
- dependency-name: com.android.library
dependency-version: 9.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: android-deps
- dependency-name: com.android.library
dependency-version: 9.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: android-deps
- dependency-name: com.android.test
dependency-version: 9.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: android-deps
- dependency-name: com.android.test
dependency-version: 9.3.1
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: android-deps
- dependency-name: io.kotest:kotest-assertions-core-jvm
dependency-version: 6.2.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: android-deps
- dependency-name: io.kotest:kotest-runner-junit5-jvm
dependency-version: 6.2.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: android-deps
- dependency-name: io.kotest:kotest-runner-junit5-jvm
dependency-version: 6.2.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: android-deps
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-27 21:51:56 -04:00
Peter Steinberger
f85a458a45
refactor(mobile): consolidate native gateway and voice lifecycles ( #114671 )
...
* refactor(mobile): consolidate native lifecycle ownership
* fix(ci): cover Codex prewarm and chat lifecycle proof
2026-07-27 14:52:02 -04:00
Peter Steinberger
56d9802f6e
fix(mobile): prevent stale reconnect, approval and voice cancellation ( #114549 )
...
* fix(mobile): fence reconnect, approval and voice cancellation
* fix(mobile): refresh native localization source inventory
* test(android): advance cancelled voice finalizer scheduler
* test(android): retain one approval during cancellation proof
2026-07-27 08:49:01 -04:00
Peter Steinberger
4aa96a118d
fix(sessions): prevent stale and cross-agent observer status after reconnect ( #114548 )
...
* fix(sessions): prevent stale and cross-agent observer status
* fix(sessions): sync native observer source inventory
* fix(android): satisfy observer ownership formatting gate
2026-07-27 08:39:29 -04:00
Peter Steinberger
64bf485ba2
fix(sessions): scope observer state by agent
2026-07-27 05:43:19 -04:00
Peter Steinberger
6a3696000e
fix(android): prefer selected observer owner
2026-07-27 05:43:19 -04:00
Peter Steinberger
51f228f6fe
fix(ui): preserve agent-owned session navigation
...
Add agent ownership to observer digests, scope global observer delivery and reconciliation, and centralize application session selection across navigation and reconnects.
Co-authored-by: xbrxr03 <abrarhabib03@gmail.com >
2026-07-27 05:43:19 -04:00
Peter Lee
0406e66369
fix(ui): keep stable chat rows in insertion order and only sort live tool/stream items by timestamp ( #113266 )
...
* fix(ui): keep stable chat rows in insertion order and only sort live tool/stream items by timestamp
* fix(ui): keep live rows within current turn
* fix(ui): keep current work above queued turns
* fix(ui): keep streamed replies above queued turns
* fix(ui): preserve reconnecting run order
* fix(ui): preserve causal terminal ordering
* fix(ui): bound replay rows to owning turns
* fix(ui): keep question summaries in owning turns
* fix(ui): scope question run ownership to session
* fix(ui): restore reconnecting chat run identity
* fix(ui): remove unused chatItemTimestamp import in chat-thread-build.ts
* fix(ui): correlate question summaries with agent runs
Co-authored-by: Peter Lee <li.xialong@xydigit.com >
* chore(i18n): refresh native source baseline
Co-authored-by: Peter Lee <li.xialong@xydigit.com >
* fix(ui): remove unused chatItemTimestamp export and split tool-stream test file
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-27 02:08:22 -04:00
Peter Steinberger
852a686a1b
feat(chat): restore prompt image attachments on rewind/fork ( #113945 )
...
* feat(chat): restore prompt image attachments on rewind/fork
* chore(i18n): refresh native source inventory anchors
* fix(gateway): restore media-store images on rewind/fork
* fix(gateway): bound and dedupe rewind media reads
* fix(sessions): bound inline editor attachments in message cut
* fix(ui): align restored attachment cap with gateway 5 MiB limit
* fix(gateway): dedupe rewind media refs by resolved id
* fix(sessions): lint-safe __openclaw access in message cut
2026-07-25 20:32:16 -07:00
Peter Steinberger
af44cb1a72
feat(native): show Swarm progress in chat ( #113850 )
...
* feat(native): show swarm progress
* fix(native): align swarm progress lifecycle
* chore(native): shorten swarm progress source name
* style(macos): pad swarm progress surfaces
* chore(native): use compact swarm source name
* fix(native): harden swarm route ownership
* fix(native): preserve swarm render ownership
* chore(i18n): refresh native swarm inventory
* fix(native): bound swarm refresh ownership
* fix(native): remove unused swarm capability initializer
2026-07-25 15:11:19 -07:00
Peter Steinberger
ce5ab8adb8
refactor(gateway): remove dead sessions.observer.ask rpc ( #113791 )
...
* refactor(gateway): remove dead sessions.observer.ask rpc
* docs: record btw and companion contract split
* fix(gateway): unexport observer model sanitizer after ask removal
2026-07-25 14:44:02 -07:00
Peter Steinberger
935ee7fedf
fix(wear): keep active watch replies when older turns finish ( #113804 )
...
* fix(wear): preserve active replies when older turns end
* fix(wear): isolate terminal events at the watch
---------
Co-authored-by: Peter Steinberger <steipete@golden-gate.local >
2026-07-25 12:42:42 -07:00