Peter Steinberger
20bf422cc7
fix(ui): keep fullscreen terminal loads exception-free ( #108317 )
...
* fix(ui): avoid empty terminal tab groups
* chore: keep release notes in PR
2026-07-15 06:36:32 -07:00
Peter Steinberger
84c7941f1e
refactor: simplify recent async ownership fixes ( #108164 )
...
* fix(device-pair): preserve concurrent notify state
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* refactor(ui): simplify logbook refresh ownership
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* fix(qa-lab): bound multipass retry window
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* chore: keep release notes in PR body
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* fix(ui): keep logbook controller state private
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* fix(ui): retire logbook client epochs
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* fix(ui): retire inactive logbook ownership
Co-authored-by: Alix-007 <li.long15@xydigit.com >
* fix(device-pair): require atomic notify state
Co-authored-by: Alix-007 <li.long15@xydigit.com >
---------
Co-authored-by: Alix-007 <li.long15@xydigit.com >
2026-07-15 03:32:15 -07:00
Peter Steinberger
b4d82f4729
refactor(ui): use libterminal color query responder ( #108234 )
2026-07-15 03:17:31 -07:00
Peter Steinberger
ce2bc379a3
refactor(deadcode): repair system-agent export ratchet ( #108201 )
...
* refactor(agents): privatize delegation tool factory
* refactor(state): privatize approval migration helpers
* refactor(ui): privatize approval event parsers
* chore(deadcode): remove system-agent baseline growth
2026-07-15 02:11:42 -07:00
Peter Steinberger
30bbe1b385
fix(system-agent): atomic approval migration + credential-scoped fallback
...
Final review findings:
- Wrap the operator-approval copy/drop/rename in a single immediate
transaction so a crash mid-migration cannot strand or lose rows.
- The inference fallback marked a provider attempted before probing, so a
stale requester credential blocked another agent's valid same-provider
route. Dedup by credential owner and only retire a whole provider on
provider-wide failures (auth/billing may differ per credential owner).
Refs #107237
2026-07-15 01:56:31 -07:00
Peter Steinberger
b1f4aac349
feat(agents): OpenClaw system-agent delegation
...
New openclaw delegation tool relays to openclaw.chat in-process; persistent
writes surface through the existing durable operator-approval registry as a
third system-agent kind (no parallel store), armed only by a human operator
in the Control UI — a delegated agent can never self-approve. Setup wizards
(channel/model/open-setup/open-tui) are refused in delegated mode so a
machine agent cannot complete setup or persist credentials unattended.
Vendor-neutral inference fallback ladder (requester route first, then other
authed providers by provider id). update.run removed from the gateway tool.
Caveman system-prompt fragment steers config/channels/plugins/agents/updates
to the openclaw tool. Doctor-owned state migration widens the approval-kind
constraint; runtime stays canonical-only.
Refs #107237
2026-07-15 01:56:31 -07:00
Peter Steinberger
6eda184f27
refactor: simplify native session executable resolution ( #108169 )
2026-07-15 01:49:45 -07:00
Miorbnli
9e6cce6358
fix(ui): show <1m for sub-minute quota reset windows instead of 0m ( #108009 )
...
* fix(ui): show <1m for sub-minute quota reset windows instead of 0m
formatQuotaReset computed Math.floor(diffMs / 60_000) for the minute branch.
When a provider quota window resets in under 60 seconds (common for 5h Anthropic
or 3h Codex windows near rollover), the floor is 0 and the UI rendered
"Resets in 0m" — nonsensical and indistinguishable from "already reset".
Add a sub-minute guard returning "<1m", matching the convention already used
by formatRemainingShort and formatRelativeTimestamp elsewhere in the codebase.
Co-Authored-By: Claude <noreply@anthropic.com >
* test(ui): cover quota reset display boundary
Co-Authored-By: ZCode <noreply@zcode.ai >
* test(ui): cover elapsed quota reset boundary
Co-Authored-By: ZCode <noreply@zcode.ai >
---------
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: ZCode <noreply@zcode.ai >
2026-07-15 01:15:36 -07:00
Peter Steinberger
f3e6042119
fix(ui): preserve explicit steer queue mode ( #108121 )
2026-07-15 01:09:55 -07:00
Peter Steinberger
0754d23615
fix: group native sessions by host ( #108062 )
...
* fix(control-ui): group native sessions by host
* test: satisfy native session checks
* chore: remove release-owned changelog entry
2026-07-14 23:51:00 -07:00
clawsweeper[bot]
5afb1fb381
feat(ui): add follow-up behavior setting for active runs (steer by default) ( #108032 )
...
* feat(ui): add follow-up behavior setting (queue vs steer) for active runs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* default follow-up behavior to steer
Follow-ups sent while a run is active now steer into the running turn by
default; queue mode becomes the persisted opt-out. Offline/disconnected
sends still always queue.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* feat(ui): steer active follow-ups by default
---------
Co-authored-by: openclaw-clawsweeper[bot] <openclaw-clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 23:28:27 -07:00
Peter Steinberger
1d22f1d34c
fix: restore palette-aware embedded terminal surfaces ( #108057 )
...
* fix(ui): answer terminal color queries
* chore: keep terminal release note in PR
2026-07-14 23:25:19 -07:00
Alix-007
ebb1e83b64
fix(logbook): bound background refresh concurrency ( #106397 )
...
* fix(logbook): bound background refresh concurrency
* fix(logbook): unify refresh ownership
* style(logbook): format type import
* test(logbook): use typed rejection error
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 22:27:20 -07:00
Peter Steinberger
51d85769b3
fix(ui): terminal artifacts after hide and show ( #107970 )
...
* fix(ui): repaint terminal after hide and show
* chore: leave release notes to release workflow
* fix(ui): keep terminal scrollbar hidden on repaint
* test(ui): assert terminal repaint pixels
2026-07-14 22:15:59 -07:00
Alix-007
f1778ad36b
fix(ui): prevent browser screenshot fetch hangs ( #107703 )
...
* fix(ui): prevent browser screenshot fetch hangs
* test(ui): cover stalled screenshot body
* test(ui): verify screenshot timer cleanup
* test(ui): cover successful timer cleanup
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-14 22:15:03 -07:00
Peter Steinberger
5b097eb48c
feat(ui): pick a repo folder and a cloud worker together in the new-session composer ( #107976 )
2026-07-14 22:10:58 -07:00
Peter Steinberger
4a6dc1fe1d
fix(ui): show New Session failures in a centered alert ( #107997 )
...
* fix(ui): center new session errors
* chore: remove release-owned changelog entry
2026-07-14 21:37:45 -07:00
Peter Steinberger
7748574c4b
fix: stabilize flaky test shards blocking merges ( #107938 )
...
* test: stabilize flaky test shards
* style: format Feishu delivery trace types
2026-07-14 20:41:54 -07:00
Shakker
977bf5b0bf
fix: split native chat work by run ( #107965 )
2026-07-15 04:38:01 +01:00
Shakker
2c95bd2387
fix: repair main CI regressions
2026-07-15 04:03:56 +01:00
Peter Steinberger
5fc7ba6da0
test: isolate UI globals and satisfy Mattermost lint ( #107936 )
2026-07-14 19:45:53 -07:00
Kyle Klouzal
2333bd59db
fix: keep yielded parent turns nonterminal ( #95996 )
...
* fix: keep yielded parent turns nonterminal
* fix: type chat final stop reasons
* test: isolate yielded session reconciliation
* fix: refresh yielded lifecycle generated surfaces
* test: register Codex lifecycle test shard
---------
Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com >
2026-07-14 20:35:33 -06:00
Peter Steinberger
57d926b4fd
fix: connect resumed native terminals reliably ( #107688 )
...
* fix: render resumed paired-node terminals
* fix(control-ui): connect native catalog terminals reliably
* chore: keep release notes in PR body
* fix(control-ui): require terminal reconnect cancellation
* fix(gateway): cancel timed-out terminal opens safely
* fix(control-ui): recover stalled terminal opens
* chore(ui): refresh i18n fallback baseline
* fix: preserve login shell path for resumed terminals
* refactor(plugin-sdk): avoid extra resolver export
* fix(gateway): normalize terminal open failures
* test(control-ui): split terminal readiness coverage
* docs: explain catalog terminal PATH restoration
* fix(control-ui): complete terminal readiness release gates
* fix(ci): remove unused shell resolver exports
* chore(plugin-sdk): refresh API baseline after rebase
2026-07-14 19:18:19 -07:00
Peter Steinberger
b1b5e212c0
fix(mac): keep dashboard navigation beside link browser ( #107798 )
...
* fix(mac): keep dashboard navigation beside link browser
* chore(i18n): refresh macOS browser source location
* test(ui): mirror responsive nav fixture state
* test(mac): respect constrained runner window size
* test(mac): measure laid-out browser split width
* test(mac): use constrained window layout width
* fix(mac): refresh split frames before restoring width
* chore(i18n): refresh macOS browser source location
* test(mac): use constrained window frame width
* test(mac): snapshot constrained split geometry
* test(mac): exercise feasible divider shrink
* test(mac): verify divider persistence callback
* test(mac): use current split dimension constant
2026-07-14 19:01:45 -07:00
Peter Steinberger
ba10c981af
refactor(ui): privatize chat test helpers ( #107913 )
2026-07-14 19:00:57 -07:00
Shakker
fcbc7900bb
test: harden chat transcript validation ( #107893 )
2026-07-15 02:27:06 +01:00
Shakker
a2f6d96bfb
fix: harden chat history lifecycle edges
2026-07-15 02:27:06 +01:00
Shakker
f310689cb0
fix: narrow cached chat stream rows
2026-07-15 02:27:06 +01:00
Shakker
4eb715d430
fix: hydrate split chat panes from session cache
2026-07-15 02:27:06 +01:00
Shakker
9ef1e965a6
fix: align virtual chat rows with the scroll origin
2026-07-15 02:27:06 +01:00
Shakker
876579fa73
fix: prevent duplicate chat row keys
2026-07-15 02:27:06 +01:00
Shakker
d660f7d38b
fix: preserve deep chat snapshots across panes
2026-07-15 02:27:06 +01:00
Shakker
1b1569c561
perf: avoid rebuilding chat history during streaming
2026-07-15 02:27:06 +01:00
Shakker
c6dfda6eee
fix: announce chat replies from the active pane
2026-07-15 02:27:06 +01:00
Shakker
59dd62d1af
test: prove virtualized chat workflows
2026-07-15 02:27:06 +01:00
Shakker
18cdf6b09b
fix: retain chat panes across viewport changes
2026-07-15 02:27:06 +01:00
Shakker
fbfa69456d
fix: preserve chat pane lifecycle
2026-07-15 02:27:06 +01:00
Shakker
d1c8bd48af
fix: stabilize virtualized chat rows
2026-07-15 02:27:06 +01:00
Shakker
59acd601f2
perf: virtualize chat transcript rendering
2026-07-15 02:27:06 +01:00
Shakker
aa9997b756
fix: support touch history loading
2026-07-15 02:27:06 +01:00
Shakker
dcb1de9b87
test: cover retained chat history returns
2026-07-15 02:27:06 +01:00
Shakker
e8498d546d
perf: isolate chat render caches by pane
2026-07-15 02:27:06 +01:00
Shakker
784c33be43
perf: reuse chat snapshot message weights
2026-07-15 02:27:06 +01:00
Shakker
d4cc1a8b72
fix: consolidate chat scroll ownership
2026-07-15 02:27:06 +01:00
Shakker
8da6548cce
fix: remove staged chat transcript rendering
2026-07-15 02:27:06 +01:00
Shakker
8121639e8d
fix: stabilize chat transcript rows
2026-07-15 02:27:06 +01:00
Shakker
fb7cda20f1
fix: bound automatic chat history loading
2026-07-15 02:27:06 +01:00
Shakker
cf45dcd07e
fix: preserve loaded chat session history
2026-07-15 02:27:06 +01:00
Jason (Json)
18b2c9cabd
fix(ui): steer restored queued messages ( #107836 )
...
Merged via squash.
Prepared head SHA: 3f8240bdaf
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com >
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com >
Reviewed-by: @fuller-stack-dev
2026-07-14 18:42:00 -06:00
Jason (Json)
4be39280e6
fix(ui): align new-session composer controls ( #107862 )
...
Match the new-session composer geometry with chat, keep the model picker at the bottom right, and anchor its menu so it expands left. Add browser coverage for composer alignment and model-menu placement.
2026-07-14 18:27:57 -06:00