Commit Graph

80632 Commits

Author SHA1 Message Date
Peter Steinberger 9924e2d7a7 feat(cli): prepare session-host onboarding (#125879)
* feat(cli): prepare session-host onboarding

* fix(cli): gate session-host installer capability
2026-08-18 16:08:48 -07:00
Josh Lehman a91f1202d9 fix(ui): keep Plugins hub navigation stable (#126061)
* fix(ui): keep Plugins hub navigation stable

* chore: format release validation skill
2026-08-18 16:08:41 -07:00
Peter Steinberger 11997bf211 fix(workshop): make collection restore ownership retryable (#126014) 2026-08-18 16:04:01 -07:00
ClawSweeper d39a24c687 fix(ui): identify current user in owner filters (#126052)
Pin the authenticated profile first and label it as Name (You) in the shared session owner menus.

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:49:33 -07:00
Josh Avant d7fe595ebb fix(media): honor sender tool policy for outbound file reads (#125950)
* fix(media): enforce sender policy for outbound reads

* fix(media): block denied attachment fallbacks

* fix(gateway): preserve sender aliases for media policy

* fix(media): scope wildcard and attachment actions

* test(gateway): prove denied media stays unbuffered

* fix(gateway): scope send attachment hydration
2026-08-18 15:49:18 -07:00
Peter Steinberger 1d9cda833f feat(ui): show machine CPU and RAM in the cloud picker (#125696)
The cloud machine picker described each class in prose ("Cheap smoke checks
and small repos"), which was the widest thing in the row, got ellipsized, and
did not say what the operator actually picks on. Machine options now carry the
class shape and the picker renders "32 vCPU · 64 GB" instead.

Crabbox reports per-provider class shapes from `providers --json`; the plugin
reads that catalog once per lifecycle and attaches cpu/memoryGb to each option.
A missing binary, failed command, unparseable output, absent classes, or an
unmatched provider all degrade to label-only rows, so an older Crabbox keeps
working.

`description` was never released, so it is removed rather than deprecated, and
listMachineOptions becomes async for the catalog read. Deletes the duplicate
machine-option projector in the environments server method.
2026-08-18 15:38:15 -07:00
Patrick Erichsen ed7317eeb9 fix(release): streamline validation setup (#126055)
* fix(release): streamline validation setup

* docs(release): add guided testing prompt

* docs(release): orient validation testers

* docs(release): introduce validation workflow
2026-08-18 15:35:04 -07:00
Peter Steinberger f7db0a4c51 fix: show named CLI sessions in the sidebar (#126043)
* fix(gateway): preserve explicit session names

* test(ui): keep session visibility fixture isolated
2026-08-18 15:33:43 -07:00
Peter Steinberger e8312171c1 fix: direct Gateway stops wait for active work (#126024)
* fix(gateway): drain active work on direct stop

* test(ui): isolate widget fetch retry mock
2026-08-18 15:29:52 -07:00
Patrick Erichsen f6f426c8e8 feat(ui): add copy session id action (#124059) 2026-08-18 22:29:20 +00:00
Peter Steinberger 0f08ba4a6e fix(tui): gate startup sends on restored session (#126046) 2026-08-18 15:20:56 -07:00
Peter Steinberger 39aec9b3d7 docs(gateway): document cloud-workers settings page and machine picker (#126049)
The Control UI settings page (#124864) and the New Session place
picker's machine section had no doc coverage — the configuration and
dispatch walkthroughs only described the JSON/RPC paths.
2026-08-18 15:19:48 -07:00
Peter Steinberger efff6964e0 fix(ui): make assign-to-me update session owner (#126031)
Make the self shortcut use the same canonical owner payload as the Assign to submenu so Control UI ownership updates reliably.

Refs #126026
2026-08-18 15:11:50 -07:00
ClawSweeper cd0cdfd521 fix(ui): keep the empty side panel closed (#126047)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:11:24 -07:00
ClawSweeper 20b6a04036 fix(ui): vertically center session row actions (#126041)
Center sidebar session pin and menu actions across the full two-line row while reserving text width on hover and touch. Add browser geometry regression coverage.

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:10:22 -07:00
ClawSweeper 20c09b8088 improve(ui): label new session picker menus (#126045)
Show Agents, Environments, Projects, and Branches headings when the four New Session pickers open.

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:10:04 -07:00
Peter Steinberger 6b68ffd3ab fix(canvas): present widgets atomically (#126039) 2026-08-18 15:08:17 -07:00
ClawSweeper 670f61200b improve(ui): slow new session spinner (#126044)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:06:55 -07:00
Jacqueline Henriksen 14d43ad93c fix(ui): reflect inherited agent skill allowlists (#124429)
* fix(ui): honor inherited agent skill filters

* test(ui): cover inherited agent skill allowlists

* test(ui): publish real gateway skill proof

* chore(proof): remove generated UI evidence

* fix(ui): show inherited skills in agent context

* fix(ui): show inherited skills in agent context

* docs(proof): record rebased gateway UI verification

* docs(proof): capture current-head agent skills UI

* docs(proof): bind agent skills capture to final head

* chore(ui): remove PR-only proof artifacts

* fix(ui): preserve list-form agent skill overrides

* fix(ui): preserve list-form agent mutations

* fix(ui): use canonical list skill replace path

* docs(ui): attach inherited skills gateway proof

* chore(proof): keep visual evidence out of source tree

* fix(ui): remove misleading enable-all action

* test(ui): reflect removed enable-all action

* fix(ui): describe skill reset as inherited defaults

* fix(ui): keep skill reset on canonical roster

* fix(ui): reset list-roster skill overrides

* fix(ui): satisfy inherited skills proof checks

* fix(ui): keep agent skill reset on canonical entries

* test(ui): focus inherited skill regression proof

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:06:28 -07:00
Peter Steinberger 4be131107f docs(gateway): document the Cloudflare Tunnel and Access deployment (#126029)
* docs(gateway): document the Cloudflare Tunnel and Access deployment

* docs(gateway): clarify Cloudflare Access trust boundary
2026-08-18 15:03:27 -07:00
Peter Steinberger b34eb16071 fix(copilot): restore OpenClaw guidance to agent turns (#125997)
* fix(copilot): add OpenClaw prompt guidance

Copilot append-mode system messages included credential safety, workspace bootstrap, and extra context but omitted OpenClaw delegation and reply-delivery policy.

Build guidance from the final policy-filtered tool surface so visible delegated work, Skill Workshop, and source replies follow the same behavior as Codex.

* fix(copilot): break prompt guidance import cycle

The CI architecture gate detected a cycle through attempt-config and prompt-guidance. Isolate raw-run mode detection in a leaf module.
2026-08-18 15:01:15 -07:00
zengLingbiao 56fb860270 fix(agents): redact reflected credentials from native PDF provider error body and reason phrase (#125499)
* fix(agents): redact reflected credentials from native PDF provider error body and reason phrase

* fix(agents): centralize provider error credential redaction

Redact the exact authentication values sent by native PDF and MiniMax VLM requests before provider-controlled response fields reach agent-facing errors.

Co-authored-by: zenglingbiao <zeng.lingbiao@xydigit.com>
Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-08-18 17:58:12 -04:00
Peter Steinberger 41e3968ee4 docs(config): clarify missing unset behavior (#126036) 2026-08-18 14:55:19 -07:00
Peter Steinberger 491dc7f8b1 fix(codex): report native project docs truthfully (#126010) 2026-08-18 14:42:56 -07:00
Patrick Erichsen a13251825a fix(gateway): tolerate locked terminal cleanup (#125058)
Co-authored-by: Jacqueline Henriksen <jjjhenriksen@users.noreply.github.com>
2026-08-18 14:32:45 -07:00
Onur Solmaz 5cabd2b72e Revert "fix(providers): report request acceptance consistently (#125807)" (#126021)
This reverts commit f5e9622fc9.
2026-08-19 00:16:09 +03:00
Peter Steinberger 39b39ca6ee fix(gateway): apply configured edge auth to session-URL targets (#125982)
* fix(gateway): apply configured edge auth to session-URL targets

Follow-up to #125700.

A URL target with explicit auth skipped config loading and silently dropped
gateway.remote.edgeAuth. Config I/O is now skipped only for plaintext loopback
targets.

Also document mandatory passEnv: ["HOME"] for the cloudflared exec provider.

* fix(gateway): keep explicit secure connections working when config is invalid

Addresses the ClawSweeper finding on #125982 by preserving the invalid-config recovery path while still applying configured edge auth.
2026-08-18 14:08:51 -07:00
Patrick Erichsen 695b25386d fix(release): offer OCM installation (#126019) 2026-08-18 14:08:14 -07:00
Peter Steinberger fa62fccb86 refactor(gateway): remove workspace plugin generation projections (#125990)
* refactor(agents): remove workspace plugin generation projections

* test(agents): pass explicit generation in auth refresh
2026-08-18 14:03:27 -07:00
Peter Steinberger f2158a9c36 feat(sessions): keep durable work visible and auto-archive stale sessions (#124925)
* feat(agents): clarify visible session guidance

* feat(sessions): auto-archive inactive dashboard sessions

* fix(sessions): preserve active dashboard sessions during maintenance

* test(sessions): preserve admitted dashboard sessions during archive

* chore: refresh session generated artifacts

* test: align recovery id with transcript redaction

* fix(sessions): report only committed maintenance counts
2026-08-18 14:02:54 -07:00
Peter Steinberger 8032e6c75e fix(ui): restore session link hovercards (#125968)
* fix(ui): restore session link hovercards

* chore: defer session hovercard release note
2026-08-18 13:51:35 -07:00
Onur Solmaz f5e9622fc9 fix(providers): report request acceptance consistently (#125807)
* fix(providers): report request acceptance consistently

* fix(providers): retain response hook compatibility

* fix(providers): keep legacy response hook path

* fix(providers): distinguish rejected response attempts

* fix(providers): keep acceptance evidence truthful

* fix(google): preserve provider acceptance errors

* test(google): satisfy acceptance callback lint

* fix(google): exclude acceptance hooks from retry deadline

* fix(openai): report Codex websocket acceptance

* fix(openai): commit websocket state before acceptance hook

* fix(google): abort pending acceptance callbacks

* fix(providers): abort pending acceptance callbacks

* fix(mistral): report observed HTTP response

* fix(mistral): report rejected HTTP responses

* fix(providers): derive acceptance from HTTP status

* fix(providers): preserve acceptance lifecycle cleanup

* fix(anthropic): report observed HTTP response

* fix(anthropic): report rejected HTTP responses

* fix(plugin-sdk): expose provider lifecycle

* fix(providers): stop after lifecycle abort

* fix(mistral): cancel unread acceptance failures
2026-08-18 23:50:57 +03:00
Peter Steinberger 549e6349f8 fix(workboard): prevent orphaned runs and overwritten cards (#125951)
* fix(workboard): make ownership updates atomic

Persist launch intent before worker acceptance, reconcile accepted identities,
fence cross-host card mutations, and deduplicate session capture in SQLite.

Closes #125932

* test(workboard): keep race fixtures plugin-local

Use a plugin-local synchronization helper and update the sessions-page capture
expectation for the new store-owned RPC.

* fix(workboard): fence lifecycle and restore races

Apply terminal lifecycle state only while the matched association is current,
and converge concurrent archived session restores on the active winner.
2026-08-18 13:50:17 -07:00
Peter Steinberger 347a0eaf8c feat(ui): activity feed automation grouping, live status, deep-link inspector (#125981)
* feat(ui): collapse automation sessions in activity feed

* feat(ui): show live run status on activity feed rows

* feat(ui): make run inspector deep-link only

* fix(ui): only link inspect run to a current active run

Addresses ClawSweeper P1: a stale observer digest could deep-link a live
row to an ended run's audit record; trust digest runId only when it is
still in activeRunIds.
2026-08-18 13:49:25 -07:00
Patrick Erichsen 3e2a82bc0b feat(release): add interactive release validation skill (#125642)
* feat(release): model interactive validation campaigns

* feat(release): add validation skill workflow

* fix(release): select validation scope before missions

* fix(release): harden copied validation setup

* fix(release): require manual validation skill invocation

* fix(release): harden copied validation finalization

* fix(release): narrow validation issue feedback

* fix(release): surface upgrade results before testing

* fix(release): select validation missions one at a time

* refactor(release): simplify validation to markdown worksheet

* feat(release): prioritize validation from release notes

* refactor(release): tighten validation worksheet hierarchy

* refactor(release): summarize validation priorities by theme

* refactor(release): integrate priorities into subsystem notes

* refactor(release): align subsystem note hierarchy

* refactor(release): remove cherry-picked examples

* refactor(release): derive validation from maturity scorecard

* fix(release): publish absolute scorecard links

* docs(release): preserve scorecard generation step

* docs(release): clarify generated surface headings

* refactor(release): present validation guidance in tables

* docs(release): normalize surface table example

* refactor(release): embed notes in surface tables

* refactor(release): sequence validation campaign setup

* fix(release): trust explicit validation issue

* fix(release): preserve campaign worksheet

* fix(release): clarify validation worksheet
2026-08-18 13:48:11 -07:00
Peter Steinberger 99acca309c fix(crabbox): surface invalid cloud worker profiles (#125991) 2026-08-18 13:47:51 -07:00
Peter Steinberger f97a133254 fix(config): fail config unset on a missing path again (#125958)
runConfigUnset scoped its missing-path error to --dry-run, so the real
invocation printed "No change" and exited 0 while --dry-run on the same
input exited 1 with a specific message. Dry-run exists to predict the
real run, and a typo'd unset in a script reported success.

Restore the failure for both modes, keeping the strict-config assertion
introduced alongside the regression and the JSON5 byte preservation it
was added to guarantee.
2026-08-18 13:45:57 -07:00
Peter Steinberger f59392fdf5 fix(channels): redact logs and reject unknown filters (#125939)
* fix(channels): redact and validate log filters

* fix(logging): preserve filtered redacted channel tails

* fix(channels): match log filters on exact boundaries

* fix(logging): honor redaction off mode
2026-08-18 13:37:17 -07:00
Peter Steinberger 1d36dac99d fix(gateway): retain chat root through error persistence (#125985) 2026-08-18 13:33:35 -07:00
Peter Steinberger a57d9b5060 fix(ui): never restore a stored draft over typed new-session composer text (#125884)
* fix(ui): never restore a stored draft over typed new-session composer text

After a reload the new-session composer renders before the gateway
recovery scope arrives; selectRoute then zeroes the draft revision, so
text typed in that window lost to the stored draft's higher revision and
the async restore overwrote (or, interleaved with input, appended to)
what the user had typed. Seen on PR #125690 CI (checks-ui-e2e 5/12, run
32122284238) as a doubled composer value.

NewSessionDraftPersistence now records a pristine baseline at each
programmatic content replacement (page reset, navigation handoff,
restore apply) and restores only when no user mutation happened past it;
otherwise the typed text wins and persists above the stored revision,
including minting a revision for text typed before route activation so
that draft still lands. The chat composer sibling is unaffected: its
revision lineage persists synchronously to localStorage.

* test(ui): run draft-persistence regression in the isolated ui lane

The regression test mocks the statically imported
durable-composer-persistence helper (the store runtime is only
dynamically imported, so under the shared isolate:false module graph its
mock alone is packing-dependent). Isolating the file makes the mocks
deterministic and keeps the shared-lane file set unchanged so sibling
packing does not shift.
2026-08-18 13:23:31 -07:00
Peter Steinberger d1a194b52f fix(gateway): refresh edited skills in agent RPC sessions (#125962)
* fix(gateway): watch skills for agent RPC turns

* ci: rebalance hosted agent chat shard
2026-08-18 13:06:48 -07:00
Peter Steinberger 6f8e5d9078 test(slack): remove cache reset seams (#125971) 2026-08-18 12:47:14 -07:00
Peter Steinberger d5aff660a2 fix(codex): keep large AGENTS.md instructions visible (#125966)
* fix(codex): raise native project doc budget

Default OpenClaw Codex threads to a bounded 128 KiB aggregate project-document budget so large AGENTS.md chains remain visible. Preserve explicit ordinary-thread overrides and keep restricted or lightweight turns at zero.

* test(codex): refresh project doc config expectations
2026-08-18 12:39:52 -07:00
Peter Steinberger d1f58c4be4 fix(ollama): stop response handling after abort (#125961)
Recheck the request signal after an async response hook settles so a concurrent abort cannot reach response body handling. Related to #125802 and #125834.

Co-authored-by: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
2026-08-18 12:31:46 -07:00
Peter Steinberger a99253f73e perf(test): reuse plugin load-context modules (#125965) 2026-08-18 12:26:24 -07:00
Peter Steinberger bb92dc61c8 fix: stop --tag main from failing during npm pack (#125949)
* fix: refuse unsupported OpenClaw source package updates

* refactor: narrow main update refusal
2026-08-18 12:22:45 -07:00
Peter Steinberger 3116923ff7 test(ui): stabilize widget hover proof (#125959) 2026-08-18 12:21:47 -07:00
Peter Steinberger 934a32cd81 test(providers): remove JSON reader facades (#125956) 2026-08-18 12:18:30 -07:00
Peter Steinberger 110be8ccb6 fix: resume turns settled during gateway restart drain (#125955)
Keep drain-owned recovery state authoritative when the pre-restart run reaches a normal terminal event, so startup continues the original request without requiring a manual retry.\n\nRelated: #57425
2026-08-18 12:14:16 -07:00
Peter Steinberger 7ae9cbf3bc fix(cli): stop claiming a write when approvals mutations are no-ops (#125960)
`openclaw approvals allowlist add|remove` printed "Writing local approvals."
from the shared target-resolution helper, before the mutation decision was
made. Both idempotent paths ("Already allowlisted.", "Pattern not found.")
returned without saving, so the CLI announced a write that never happened.
`approvals set` had the same problem: it announced the write and then rejected
unparseable input.

Move the announcement from `loadWritableSnapshotTarget` into the local branch
of `saveSnapshotTargeted`, the function that owns the write. Every caller of
the shared seam is fixed at once and exit codes are unchanged: idempotent add
and remove still leave the requested end state satisfied and exit 0.
2026-08-18 12:12:37 -07:00