Commit Graph

80881 Commits

Author SHA1 Message Date
Peter Steinberger 177828aa75 fix(cron): honor failure alert thresholds (#126483)
* fix(cron): honor failure alert thresholds

Per-run Gateway announcements bypassed threshold, cooldown, and opt-out policy. Make the scheduler the sole owner of failure notification decisions.

* fix(cron): preserve safe failure details

Keep trusted failure detail proof on the scheduler-authorized transport and remove the obsolete Gateway event-context handoff after the ownership consolidation.

* test(cron): assert alternate failure route isolation
2026-08-19 17:25:14 -07:00
PollyBot13 035853b921 fix(state): migrate exact v14 session schema (#126354) 2026-08-19 17:25:04 -07:00
Vyctor H. Brzezowski 02be7fea97 improve(ui): unify resize handles (#125066)
* improve(ui): unify resize handles

* perf(ui): trim resize handle startup cost

* fix(ui): stop resize drags on blur

* perf(ui): absorb resize blur cleanup

* perf(ui): unify resize drag listener target

* refactor(ui): unify resize drag state

* perf(ui): remove duplicate resize styles

* refactor(ui): let layouts own resize edges

* fix(ui): preserve resize interaction contracts

* test(ui): satisfy resize event lint
2026-08-19 21:11:39 -03:00
Peter Steinberger 17de76ed73 fix(diffs): use canonical auth rate limiter (#126484) 2026-08-19 17:09:30 -07:00
Vyctor H. Brzezowski e741649856 fix(ui): keep prose fences fully visible (#126346) 2026-08-19 21:05:51 -03:00
Peter Steinberger c4c9f6d464 fix(logging): report unavailable log tails (#126481)
Only missing-path metadata failures remain empty successes. Operational filesystem errors now reach existing Gateway, UI, CLI, channel, and diagnostics error paths.\n\nCloses #126467
2026-08-19 17:00:06 -07:00
Peter Steinberger 13fd888281 fix(tui): stop auth child on exit (#126476) 2026-08-19 16:57:28 -07:00
Peter Steinberger c5fd6252a7 fix(mcp): preserve resolved tool failures (#126472) 2026-08-19 16:44:01 -07:00
Peter Steinberger b740c68bb5 fix(pr): distinguish owner review from independent approval (#126475) 2026-08-19 16:37:34 -07:00
Patrick Erichsen 1762f43a34 docs: preflight release validation imports (#126471) 2026-08-19 16:25:50 -07:00
Patrick Erichsen 7d3471f129 docs: add release validation handoff (#126456)
* docs: add release validation handoff

* docs: label release validation campaigns

* fix: match release validation label exactly

* docs: structure release validation reports
2026-08-19 16:25:38 -07:00
Vyctor H. Brzezowski 16b09ad307 fix(ui): sync Terminal with live theme changes (#126297)
* fix(ui): sync terminal with live theme changes

* test(ui): cover terminal theme lifecycle

* test(ui): supply resolved theme in gateway fixture
2026-08-19 20:21:26 -03:00
Peter Steinberger 6ca7b43263 fix: preserve worker lease during cleanup recovery (#126465) 2026-08-19 16:17:54 -07:00
Peter Steinberger bdceeeb88c fix(qa): preserve terminal script failures (#126466) 2026-08-19 16:16:21 -07:00
Markus Hartung 4970ed2357 fix(matrix): accept Room v12 IDs without server suffix (#123931)
* fix(matrix): recognize room version 12 room IDs (no :server suffix)

Room version 12 (MSC4291) dropped the trailing ":server" from room
IDs -- they are now a hash of the create event. Every place in the
Matrix plugin that treated "!" + ":" as the signature of an
already-resolved room ID silently discarded valid v12 room IDs as
unresolved instead of using them directly:

- channels.matrix.rooms config resolution (config.ts) dropped the
  entry entirely, so group rooms could never pass the groupPolicy
  "allowlist" gate on a v12 homeserver -- messages were dropped with
  no reply and no default-level log line, since the only trace is a
  verbose-only debug log.
- The invite auto-join allowlist validator and the interactive
  group-room setup resolver in onboarding.ts had the same check
  duplicated, so a user typing a v12 room ID during setup would be
  told it was invalid.
- session-route.ts's per-room DM recipientSessionExact check had the
  same gap for room-kind sends.

Runtime auto-join (auto-join.ts) already only checked for the "!"
sigil, which is why joining a v12 room worked while responding in it
did not -- this made the bug hard to spot from the join path alone.

Fix: add a single canonical isMatrixRoomId predicate next to the
existing isMatrixQualifiedUserId in target-ids.ts (user IDs and
aliases still require ":server" per spec; only room IDs changed) and
reuse it at all four sites instead of repeating the stale check.

Confirmed live against a real Room v12 homeserver (Conduit): the
server's own /joined_rooms response returns bare "!<hash>" room IDs
with no colon.

* docs(matrix): document suffixless room version 12 room IDs

Room version 12 (MSC4291) dropped the ":server" suffix from room
IDs. Document that the suffixless "!room" form is accepted anywhere
the docs previously only showed "!room:server", matching the
target-ids.ts fix landed in this same PR.

* fix(matrix): update stale Room v12 guidance text

* docs(matrix): accept suffixless Room v12 IDs in the group-policy guide

docs/channels/matrix.md already documents that channels.matrix.groups
accepts the suffixless !room form on room version 12+, but the
group-policy guide (docs/channels/groups.md) still only listed
!room:server, contradicting the channel doc an operator on a v12
homeserver would actually be following.

Addresses the ClawSweeper P2 finding on PR #123931.

* fix(matrix): advertise suffixless Room v12 IDs in onboarding placeholders

The invite auto-join and group-room setup prompts' placeholder text
still showed only `!roomId:server`, even though the retry note,
validation, and unresolved-room diagnostic already accept and describe
the suffixless `!roomId` form on room version 12+. An operator on a
v12 homeserver would see their homeserver's own room IDs contradicted
by the very placeholder guiding them through setup.

Updated both placeholders to list the suffixless form alongside the
existing examples, matching the phrasing already used in
docs/channels/matrix.md and the invite retry note. Added
configureRoomsAccess/roomsAllowlist options to the shared
createMatrixUpdateKeepCredentialsPrompter test harness (mirroring the
existing inviteAutoJoin option) so the group-room setup flow can be
exercised without duplicating the base prompter setup, then added
focused tests asserting the exact placeholder text for both prompts.
Verified both new tests fail against the pre-fix placeholders and pass
after.

Addresses the two ClawSweeper P2 findings on PR #123931.

* test(matrix): restore only allowlisted environment keys

* fix(matrix): reject empty room identifiers

---------

Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-08-19 16:12:05 -07:00
Erick Kinnee 6ac998eba8 fix(gateway): scope session list model catalog to each row's agent
Unscoped sessions.list resolved one completed catalog (the default
agent's) and stamped it onto every row, so a multi-agent listing
projected the default agent's thinking levels and context caps onto
sessions owned by other agents whenever provider/model collided.

Resolve a per-agent completed catalog map for unscoped listings (each
configured agent's snapshot, read-only, never starts discovery) and
select the catalog by the row's sessionAgentId. The list cache fence
now advances when any row owner's catalog revision changes.

Plain-array callers (search/resolve/direct listSessionsFromStore) are
unchanged; scoped requests resolve exactly one agent's catalog.
2026-08-20 00:11:29 +01:00
Erick Kinnee ee70dbcb14 test(ui): split dynamic catalog convergence e2e test into its own file
Keeps chat-flow.models-reasoning.e2e.test.ts under the 1000-line max-lines
budget; the ratchet forbids new suppressions. The moved test is unchanged.
2026-08-20 00:11:29 +01:00
Erick Kinnee 09d419683e test(ui): cover dynamic catalog projection convergence 2026-08-20 00:11:29 +01:00
Erick Kinnee cc445a32bb fix: refresh dynamic model metadata in session controls 2026-08-20 00:11:29 +01:00
Josh Avant a4f17833ad fix(gateway): make config revision tokens opaque (#126464)
* fix(gateway): make config revision tokens opaque

* test(gateway): cover config revision key startup phase
2026-08-19 16:10:27 -07:00
Peter Steinberger 88345d984b fix(package): restore root tarball budget (#126448)
Exclude maintainer-only docs, shrink the Crabbox worker wallpaper, and keep installed dependency scans compatible with canonical self-contained worker bundles without changing release budgets.
2026-08-19 16:07:15 -07:00
Josh Avant 9a9e688e99 fix(tailscale): preserve privileged route conflicts (#126449) 2026-08-19 16:03:56 -07:00
Ben Badejo 20af8688dd fix(codex): refresh stale isolated Computer Use bundles (#126080)
* fix(codex): refresh stale isolated Computer Use bundles

* fix(codex): satisfy Computer Use CI contracts

* fix(codex): constrain Computer Use bundle refresh

* test(codex): guard Computer Use cache fixture

* fix(codex): contain native Computer Use refresh paths

* fix(codex): keep service path type private

---------

Co-authored-by: Benjamin Badejo <ben@benbadejo.com>
Co-authored-by: Josh Lehman <550978+jalehman@users.noreply.github.com>
2026-08-19 16:02:23 -07:00
Peter Steinberger 2fe6c0206d fix(discord): retain attachment-only reply context (#126204) 2026-08-19 15:55:55 -07:00
Peter Steinberger 6afb2ce88f fix(onboard): provision named first-agent state (#126463)
Refs #126454
2026-08-19 15:49:14 -07:00
Josh Lehman 841f25eae6 fix(codex): accept newer desktop app-server versions (#126450) 2026-08-19 15:36:54 -07:00
Jason (Json) beb466df3c fix(sessions): preserve resolved context in cold projections (#126422)
* fix(sessions): preserve resolved context in cold projections

* fix(sessions): preserve verified context provenance

* test(sessions): complete context metadata fixture

* fix(sessions): version verified context resolution
2026-08-19 16:34:20 -06:00
Peter Steinberger 7e0b599ca4 fix: surface Codex input prompts across runtimes (#126387)
* fix: surface Codex input prompts across runtimes

Codex structured input now reaches bounded Gateway questions in native and ACP runs, with exact turn ownership, explicit unsupported outcomes, and cancellation fencing. Consume the published ACPX elicitation support.

* chore: align elicitation helpers with current guards

Use protocol-specific helper names required by current main and update the reservation regression to the generalized input owner.

* fix: formalize structured input SDK surface

Expose one documented, frozen agent-harness structured-input contract with runtime and subpath coverage, replacing the accidental function-property API.

* fix: satisfy elicitation architecture gates

Register the real-process ACPX fixture as an executable test root and move shared structured-input types into the boundary leaf to keep Knip and Madge clean.

* fix: remove structured input lint suppression

Preserve the rejected control and invisible-character ranges with an explicit code-point check so the production suppression inventory stays closed.
2026-08-19 15:25:33 -07:00
Peter Steinberger 33e6daa3bd fix(ui): show mixed-role node connectivity (#126428)
Devices keeps machine-wide liveness while showing node-role offline/manual-wake state accurately.
2026-08-19 15:24:31 -07:00
Steven ff37627804 fix(discord): resolve realtime voice API key references (#125443)
* fix(discord): resolve realtime voice SecretRefs

* fix(discord): isolate realtime voice secret owners

* fix(discord): contain realtime secret owner gate

* fix(build): align plugin SDK boundary paths

* fix(discord): normalize realtime secret owner accounts

* fix(discord): gate canonical realtime secret owners

* style(discord): format realtime voice tests

* test(codex): assign run-attempt tools shard

* fix(discord): skip unavailable realtime providers

* fix(discord): preserve realtime provider availability errors

---------

Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-08-19 15:23:14 -07:00
Jason (Json) 45b8750d8b fix(compaction): default maintenance reasoning to low (#126421)
* fix(compaction): default maintenance reasoning to low

* test(compaction): cover explicit inherit fallback

* test(compaction): preserve inherit literal type
2026-08-19 16:18:06 -06:00
Peter Steinberger 7769cb6466 fix(cli): accept daemon --json before subcommands (#126447)
* fix(cli): accept daemon json before subcommands

* test(cli): update doctor public-surface fixture

* test(cli): classify daemon parent JSON output
2026-08-19 15:17:21 -07:00
Vitor Cepeda Lopes e00f860198 fix(codex): Computer Use fails when Desktop bundles a newer app-server (#125883)
* fix(codex): allow newer app-server runtimes

* fix(codex): bound external app-server compatibility

---------

Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>
Co-authored-by: Josh Lehman <550978+jalehman@users.noreply.github.com>
2026-08-19 14:42:33 -07:00
ClawSweeper fa407417f0 fix(ui): honor categories for child sessions (#126388)
* fix(ui): honor categories for child sessions

* fix(ui): admit categorized child sessions as roots

* fix(ui): keep sidebar files within line budget

* fix(ui): include cached categorized children

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Jason (Json) <263060202+fuller-stack-dev@users.noreply.github.com>
2026-08-19 15:39:24 -06:00
Peter Steinberger a3ca8466ee fix(ui): refresh device labels after rename (#126432)
* fix(ui): refresh device labels after rename

* fix(ci): classify device label refresh event for mobile

* chore(protocol): regenerate Android gateway events
2026-08-19 14:18:50 -07:00
Peter Steinberger 513ec6218c fix(crabbox): harden worker desktop setup (#126417)
* fix(crabbox): harden desktop provisioning

* docs(gateway): clarify worker desktop routes
2026-08-19 14:13:06 -07:00
ClawSweeper d8fd2937aa fix(ui): keep mobile sidebar session menus reachable (#126355)
* fix(ui): keep mobile sidebar menus in viewport

* fix(ui): bound compact sidebar menu height

* fix(ui): restore Open PR cursor marker

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-19 14:00:39 -07:00
Vincent Koc ee6cab4a2e fix(e2e): use packaged CLI in git fixtures (#126383) 2026-08-20 05:00:25 +08:00
Vincent Koc 42a4db5f42 fix(qa): wait for config restart wake (#126368) 2026-08-20 05:00:23 +08:00
Peter Steinberger 0135046830 refactor(llama-cpp): use one provider for managed and existing servers (#126434)
* refactor(llama-cpp): unify server ownership modes

* test(llama-cpp): preserve shared discovery limits

* fix(plugin-sdk): retain provider auth removal export
2026-08-19 13:57:33 -07:00
Peter Steinberger 8513204e51 fix(file-transfer): report fetched file count accurately (#126439)
Count successful directory fetches from the extracted regular-file manifest while retaining the node wire count for compatibility.
2026-08-19 13:54:40 -07:00
Josh Avant 61416e1254 fix(feishu): honor disabled default tool accounts (#126412) 2026-08-19 13:47:23 -07:00
Peter Steinberger 108a737552 test(ui): await anchored model picker geometry (#126438) 2026-08-19 13:47:20 -07:00
Peter Steinberger 14c02a43ab fix(mcp): stop revoked App actions after catalog waits (#126415)
* fix(mcp): revalidate app grants after catalog work

* test(mcp): track grant proof temp state

* test(browser): use canonical graceful stop budget
2026-08-19 13:35:01 -07:00
Peter Steinberger a1db88b2c5 fix: show useful automation failure details (#126384)
* fix(cron): show useful automation failure details

* test(cron): align failure detail expectations

* fix(cron): use trusted failure details

* fix(cron): preserve event callback shape
2026-08-19 13:34:30 -07:00
Peter Steinberger db533799d5 fix(qa): reject incomplete evidence runs (#126407)
* fix(qa): enforce terminal evidence lifecycle

* test(qa): mark CPU fixture summary completed

* fix(qa): fence calls after flow timeout
2026-08-19 13:30:02 -07:00
Shakker f68503084b fix: scope selected provider hook loading (#126427)
Scope selected-model hook fallback loading to the selected provider so unrelated plugins no longer delay onboarding.

Fixes #126408.
2026-08-19 21:09:38 +01:00
Peter Steinberger fd2fccbc8e docs(agents): restore the non-default scope for systemAgent ownership (#126431)
Live-testing #126377 in a real explicit fleet surfaced an inaccuracy that PR
introduced. It dropped 'Other agent-scoped methods do not use this setting as a
general default', which is still true: only models.list, models.authStatus,
skills.status, and doctor.memory.status opt in, while the generic Gateway
resolver in agent-id-shared.ts deliberately does not.

Verified against a live gateway and CLI on a three-agent explicit fleet with
systemAgent.agentId set: 'openclaw models list', 'openclaw sessions', stored
session lookup, and TUI startup all still require an explicit agent. Name those
surfaces so operators know where the owner does and does not apply.
2026-08-19 13:08:34 -07:00
Samuel Judson 24a1139188 fix: move raw call transcripts from system to user prompt to protect provenance (#123846)
* Move raw transcript from system to user prompt to protect provenance.

* Type fix.

* fix(voice-call): harden transcript context handling

* fix(voice-call): initialize inbound Twilio control state

* test(voice-call): align runtime coordinator fixture

---------

Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-08-19 13:07:59 -07:00
Peter Steinberger 1ef2ebf114 fix(cli): CLI commands crash on multi-agent rosters without --agent (#126418)
* fix(cli): route bare startup on configured inference, not a default agent

Bare `openclaw` resolved a single "default" agent to decide whether inference
was configured. On an explicit multi-agent roster (agents.ownership="explicit"
with 2+ entries) that resolution has no answer, so startup threw
AgentSelectionRequiredError instead of launching the TUI or onboarding.

The branch only needs to know whether inference is configured at all, so it now
asks exactly that across the roster and hands off to the TUI, which already
owns agent selection and resolves by workspace path first. Routing ambiguous
rosters to onboarding instead would have dropped a working multi-agent install
back into the setup wizard.

* fix(cli): honor the configured system agent for model read commands

`openclaw models status`, `models list`, `models auth list`, and
`models auth-order get` resolved a deprecated "default" agent when --agent was
omitted, so they threw AgentSelectionRequiredError on an explicit multi-agent
roster. schema.help.core.ts already documents agents.defaults.systemAgent.agentId
as the owner for these unscoped reads, and the Gateway twins
(models.ts, models-auth-status.ts) already honored it; only the local CLI paths
did not.

resolveModelsTargetAgent now takes a closed read/mutation mode. Reads resolve
explicit --agent, then the configured system agent, then a sole agent.
Credential mutations still require an explicit owner rather than guessing which
agent to write into, and say so with a flag that exists on those commands.

The deprecated resolver is gone from this owner. Help text for the two commands
whose default changed now names the system agent.
2026-08-19 13:02:19 -07:00