Commit Graph

4574 Commits

Author SHA1 Message Date
Peter Steinberger 8616c0c374 refactor: finish shared test helper migrations (#120996)
* test: finish shared helper migrations

* test: fix helper migration CI

* style: fix test import ordering

* test(acpx): restore deferred void types

* test: fix helper migrations after rebase
2026-08-09 06:00:06 -07:00
ZYV5ge b85c84682a fix(ui): remove redundant Labs config refresh (#119115)
Let the runtime config patch owner complete its authoritative refresh instead of starting a second Labs-page refresh. Tighten unit and mocked browser coverage around the single refresh and visible settings state.


Punchcard-Session: amber-workshop-workshop-36

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-09 20:29:32 +08:00
Shakker 0a898b70d8 test: satisfy browser annotation landing guards (#120848) 2026-08-09 13:56:55 +02:00
Shakker 88ec5a9343 fix: preserve browser annotation metadata styling 2026-08-09 13:56:55 +02:00
Shakker 7874024748 fix: preserve staged browser annotations across remounts 2026-08-09 13:56:55 +02:00
Shakker d0e76dea49 fix: bound browser annotation composer lifecycle 2026-08-09 13:56:55 +02:00
Shakker 7a98ff6ee6 test: construct annotation credential URL at runtime 2026-08-09 13:56:55 +02:00
Shakker 992c38f053 fix: restore annotation removal focus handling 2026-08-09 13:56:55 +02:00
Shakker a3938ef435 fix: couple browser annotations to composer attachments 2026-08-09 13:56:55 +02:00
Peter Steinberger 44a2a87134 fix(ui): prevent cloud draft recovery dead ends (#120970)
* fix(ui): harden cloud draft recovery

Refs #120953.

* fix(gateway): keep minimal metadata startup lazy

* fix(ui): preserve interrupted cloud setup state

* fix(ui): separate cloud recovery lifecycle fences
2026-08-09 04:06:05 -07:00
Colin Johnson c44b01614d fix: profile saves leave stale sidebar identity (#120791)
Profile identity changes now refresh immediately across connected browsers, including revisioned avatar URLs that avoid stale cached images.

Fixes #120784
Prepared head SHA: 20fb9ea42d
Co-authored-by: Colin Johnson <211764741+Solvely-Colin@users.noreply.github.com>
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-08-09 11:58:19 +01:00
Peter Steinberger 8b0735e89f refactor(memory)!: remove the QMD backend; builtin is the only memory engine (#120936)
* refactor(memory): remove qmd backend

Make builtin the sole memory-core engine, rename the retained session helper barrel, retire QMD config with doctor migrations, and remove QMD runtime/UI/policy surfaces.

* docs(memory): remove qmd backend guidance

Delete the QMD concept page, rewrite memory documentation for builtin retrieval, and remove QMD from navigation and taxonomy source.

* refactor(memory): remove qmd-only leftovers

* refactor(memory): finish qmd integration cleanup

* build(deps): align root string-width types

* build(deps): model root string-width tooling

* refactor(memory): align qmd removal ui and docs

* fix(memory): preserve qmd external paths in doctor

* test(memory): remove obsolete backend probe case

* test(plugin-sdk): refresh private type baseline
2026-08-09 03:05:47 -07:00
Peter Steinberger 6f56d797d7 fix(ui): survive route notFound at startup and stop silent chat draft loss (#120960) 2026-08-09 02:57:54 -07:00
Peter Steinberger b4564b02cd fix(ui): hide inert task-suggestion chips and strip bidi controls (#120967)
* fix(ui): hide inert task-suggestion chips and strip bidi controls

- render no suggestion card for operators who can neither accept nor dismiss (matches TUI behavior)
- strip RTL/bidi control characters from chip title, summary, project path, and instructions before rendering
- document the git-checkout requirement for spawn_task project directories (gateway enforcement landed in #120940)

* fix(ui): gate task-suggestion actions on negotiated gateway methods

Mirror the TUI capability rule: accept requires the taskSuggestions.accept method plus operator.admin, dismiss requires taskSuggestions.dismiss plus operator.write. List-only gateways render no chip; e2e fixtures now advertise the mutation methods they exercise, and a new regression proves a pending suggestion renders no chip when only listing is advertised. Addresses the ClawSweeper P2 on this PR.
2026-08-09 02:56:48 -07:00
Peter Steinberger e40e352fe7 refactor(session-url): centralize normalization and contract tests (#120945)
* refactor(session-url): centralize contract normalization

* fix(ui): resolve normalization agent-id alias

* test(session-url): make grammar tables type-safe
2026-08-09 02:56:07 -07:00
Peter Steinberger c708b41af4 fix(beam): open uploads at canonical catalog URLs (#120927)
* fix(beam): emit canonical catalog URLs

* fix(beam): type readonly runtime config

* fix(gateway): keep minimal metadata startup lazy

* chore(plugin-sdk): refresh API baseline
2026-08-09 02:09:01 -07:00
Peter Steinberger a5cad30645 test(ui): stabilize history and reconnect e2e races (#120732) 2026-08-09 01:18:57 -07:00
Peter Steinberger f67da420f6 feat(ui): labs-gated CLI agent targets in new-session model picker (#120949)
* feat(config): gate CLI agent discovery

* feat(ui): add CLI agents to model picker
2026-08-09 00:00:00 -07:00
Peter Steinberger 5ea44f5916 refactor(ui): remove dead Control UI weight (#120870)
* refactor(ui): remove dead Control UI weight

* test(ui): trim redundant preview fixture

* fix(ui): preserve agent file preview behavior
2026-08-08 22:22:32 -07:00
Vyctor H. Brzezowski 7a727cbb4d fix(ui): show OpenAI plan usage accurately (#120846)
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
2026-08-09 02:16:43 -03:00
Peter Steinberger 34062ead20 fix(gateway): allow write-scoped session model changes (#120875) 2026-08-08 21:43:55 -07:00
Vyctor H. Brzezowski 7a819da6fc fix(ui): rank slash commands by relevance (#120790) 2026-08-09 01:10:48 -03:00
Vyctor H. Brzezowski df2edbc9a6 fix: label pasted text attachments "Show in text field" (#120799) 2026-08-09 01:01:12 -03:00
Shakker 264177871c fix: keep theme import command semantics 2026-08-09 03:57:54 +01:00
Peter Steinberger a74738c16e feat(chat): add four rare working-claw stances and raise surprise odds (#120826)
* feat(chat): add four rare working-claw stances and raise surprise odds

* test(ui): assert claw surprises against the exported allowlist

* fix(ci): refresh native i18n inventory and drop test-only surprise export
2026-08-08 19:56:31 -07:00
Peter Steinberger bc4055e172 fix(ui): add space above session rail (#120838) 2026-08-08 19:55:43 -07:00
Peter Steinberger c5bdad48de fix(ui): declare direct workspace dependencies (#120830) 2026-08-08 19:50:02 -07:00
Peter Steinberger 1273657993 fix(ui): archive eligible sessions from mixed selections (#120835)
Batch Archive now delegates protected-row failures to ordered patchMany outcomes, while single Archive and Delete remain guarded.
2026-08-08 19:49:21 -07:00
Peter Steinberger c50eb91b3f fix(ui): dashboard widgets no longer flash white in dark mode (#120820)
* fix(ui): prevent dark widget loading flashes

Dashboard Canvas and MCP App frames now paint their theme-derived widget surface while sandbox content loads, avoiding white flashes in dark mode.

* test(ui): avoid shadowing widget fixture
2026-08-08 19:37:56 -07:00
Peter Steinberger b4cedfd40e fix(ui): show dev checkout commit lag in Updates (#120769)
* fix(ui): report dev checkout update status

Show tracked-upstream commit lag and verified install/commit timestamps in Settings > Updates. Verify the post-restart Git revision before reporting success, and surface same-revision updates as an explicit no-op unless plugin convergence changed the install.

* test(ui): expect authoritative update reconciliation
2026-08-08 17:21:42 -07:00
Peter Steinberger bd6d35443f fix(ui): keep dashboards alive across view switches (#120640)
* fix(ui): retain dashboards across view switches

Keep visited dashboard runtimes alive across Chat, Split, and Dashboard transitions, suspend hidden work, and avoid same-face persistence requests.

Refs #120639

* fix(ui): preserve session owner during route loads

Carry the last successful route match through pending loads so face-only navigation retains dashboard runtimes without stranding session or catalog switches.

Refs #120639

* fix(ui): preserve sandbox bridge while hidden

Suspend hidden board frame work without disposing the one-shot sandbox handshake, loaded document, or MessagePort.

Refs #120639

* fix(ui): forward sandbox readiness while hidden

Keep the constrained sandbox message channel alive during dashboard suspension so one-shot proxy readiness reaches the retained host without resuming widget work.

Refs #120639

* fix(ui): pause hidden plugin widgets

Propagate board activity through trusted plugin renderers so Workboard widgets suppress hidden refresh and mutation work, then refresh once without remounting.

Refs #120639
2026-08-08 15:53:59 -07:00
Peter Steinberger 51944498eb refactor(gateway): generalize bulk session patches (#120629)
* refactor(gateway): generalize bulk session patches

* fix(gateway): normalize bulk session fences

* refactor(gateway): simplify normalized target fence

* test(ui): align disconnected session wording
2026-08-08 15:00:09 -07:00
Shakker 50ee791a8a test: cover responsive file preview content states (#116885) 2026-08-08 22:57:46 +01:00
Peter Steinberger c8b5df08eb fix(ui): preserve responsive preview and modal owner layouts 2026-08-08 22:57:46 +01:00
Peter Steinberger 2fd7c4fea7 refactor(ui): rename stale delete-confirm surface to confirmed-action after hide removal (#120719)
The rewind-only confirmation popover kept "delete" naming from the removed
local-only hide feature (#120681). Rename identifiers and DOM/CSS classes to
confirmed-action, drop the dead right-side placement variant, collapse the
single-caller renderConfirmedActionButton indirection into renderRewindButton,
and localize the hardcoded Cancel / Don't ask again strings.

The openclaw:skip-rewind-confirm localStorage preference key is intentionally
unchanged so users' "Don't ask again" choice survives.
2026-08-08 14:48:50 -07:00
Peter Steinberger 909509a5db fix(codex): resume catalog sessions with the catalog's CODEX_HOME; add main-content terminal placement (#120708)
* fix(codex): pin catalog CODEX_HOME onto terminal resume spawns

The Codex session catalog lists threads through the plugin's supervision
app-server connection, which can run on the agent-scoped Codex home
(homeScope: "agent"). The terminal resume plan spawned a bare
'codex resume <threadId>' under the operator login shell, so the CLI
resolved its default ~/.codex and failed with "No saved session found".

Terminal plans now carry the catalog connection's CODEX_HOME (local and
paired-node paths), the gateway merges plan env into the PTY spawn, and
the triplicated home-scope resolution collapses into one shared
resolveCodexAppServerLocalHomeDir.

* feat(ui): add main-content terminal placement

The terminal panel gains a third dock placement, "main", filling the
content region next to the sidebar like the transcript pane. The panel
header gets a bottom/right/main placement switcher (persisted in the
existing openclaw.terminal.panel.v1 store), and opening a Codex/Claude
session from the session catalog selects main mode so resumed sessions
appear as a full window instead of a bottom strip.
2026-08-08 14:33:20 -07:00
Peter Steinberger 4930c9d7de refactor(ui): remove local-only chat message hide feature (#120681)
Remove the localStorage-backed per-browser hide action ("Hide in this browser only") so the transcript mirrors agent context. The action was un-undoable because restore() had no UI path.

Stale openclaw:deleted:* localStorage keys become inert.
2026-08-08 13:57:15 -07:00
Peter Steinberger 99afb31626 fix(ui): reveal question prompts without scroll overlap (#120695)
Question panels now use normal footer flow. Resize following respects explicit backscroll intent, and the latest-message affordance stays above footer surfaces.
2026-08-08 13:54:06 -07:00
Peter Steinberger 47fd629c8d feat(gateway): persist per-origin device auth (#120533)
* feat(gateway): add per-origin device auth

* fix(ui): remove unused gateway scope alias

* test(tui): split gateway chat coverage

* test(tui): update connection test routing

* fix(auth): preserve legacy device auth migration guard
2026-08-08 13:53:31 -07:00
Peter Steinberger f15ce3941f refactor(ui): devices is the user-facing word for paired hardware (#120689)
Implements docs/plan/runners.md milestone 1b.
2026-08-08 13:47:17 -07:00
Peter Steinberger f25385fcda fix(ui): contain transcript focus ring (#120693) 2026-08-08 13:45:18 -07:00
Peter Steinberger 0b85f9c174 feat: resolve short session references in the gateway (#120512)
* feat(gateway): resolve short session references

* refactor(ui): delegate short session resolution to gateway

* fix: complete short session resolver integration

* fix(gateway): filter deleted-agent short sessions

* fix(ui): support older gateway short links

* docs(web): qualify short-link candidate limits for older gateways

* refactor(protocol): split session resolve schema

* fix(gateway): filter session resolver visibility
2026-08-08 12:52:06 -07:00
Peter Steinberger 3a4506073b fix(ui): streamline live token counter in the chat working row (#120676)
The live working indicator read '592 output tokens' next to the whimsical
progress phrase, duplicating liveness signals and diverging from the
turn-recap wording ('592 tokens'). Now the whimsical phrase shows only
while no usage data exists; once tokens stream, the count replaces it and
reuses the shared turnRecap token labels. Removes the redundant
chat.outputTokens i18n key.
2026-08-08 12:49:25 -07:00
Peter Steinberger 1889764369 revert(ui): session is the product noun — undo thread copy rename (#120667)
Implements docs/plan/runners.md milestone 1a.
2026-08-08 12:43:05 -07:00
Peter Steinberger 2717342e45 fix(ui): quiet tool-activity rows with one hover treatment (#120674)
Replace the bordered activity-group card (border + background + hairline
row separators + per-row radius flattening) with a flat indented list and
a single 2px left rail. Every tool row now shares the same 6px hover pill
inside and outside groups, removing the square/round corner mismatch.

Also scope the generic .chat-bubble:hover accent-border rule away from
tool-shell bubbles: it tinted the group's hairline separators red on
hover, which read as an error state.
2026-08-08 12:38:50 -07:00
Peter Steinberger a445cdd824 fix(ui): remove model picker chevrons (#120673) 2026-08-08 12:37:58 -07:00
Peter Steinberger e7a9f33d89 refactor(core): adopt normalization-core leaf helpers across production (#120350)
* refactor(core): adopt normalization-core leaf helpers across production

* fix(ci): keep plugin contract source-resolvable

* fix(errors): preserve adapter-owned error fields

* fix(errors): short-circuit existing errors before stringifying

* fix(errors): skip throwing structured getters

* ci: retrigger checks on current base

* fix(errors): guard structured error enumeration

* fix: harden error detail copying
2026-08-08 12:00:49 -07:00
Peter Steinberger e3de98a451 feat(update): scheduled update campaigns with countdown, dev-channel auto-update, and Updates settings page (#120506)
* feat(update): scheduled update campaigns with countdown, dev-channel auto-update, and Updates settings page

* fix(ui): satisfy update campaign deadcode checks

* feat(update): extend scheduled update campaigns

* test(ui): include Updates page in settings sidebar search expectations

* fix(update): end campaigns when apply fails

* fix(update): pin dev campaign applies to the announced commit

* test(ui): align update e2e fixtures

* fix(update): pin adopted dev updates to the announced commit

* docs(update): document automatic dev update campaigns

* fix(ui): gate automatic dev updates on git installs

* fix(gateway): scope detailed update metadata to read-capable clients

* fix(gateway): break post-attach madge cycle with a leaf client-lookup type

* chore(protocol): regenerate clients after rebase

* test(gateway): update method tail after rebase

* fix(update): preserve campaign target and hold state

* test(update): align adoption mocks and split handoff suite

* test(update): route split handoff suites on Windows
2026-08-08 11:19:53 -07:00
Peter Steinberger a70deaf14e fix(ui): label only operator-pinned runtimes in model picker rows (#120646) 2026-08-08 10:57:27 -07:00
Peter Steinberger 74b1627f88 feat(ui): show agent runtime distinction in model picker rows (#120617)
* feat(ui): show agent runtime distinction in model picker rows

* fix(ui): label known CLI runtime ids in model picker rows
2026-08-08 09:36:19 -07:00