Commit Graph

32925 Commits

Author SHA1 Message Date
Val Alexander 529282dcff fix(ui): harden Workboard dialog accessibility
Harden Workboard modal and drawer accessibility.

Summary:
- Add Workboard dialog focus lifecycle handling for initial focus, Tab/Shift+Tab containment, Escape close, and opener restore.
- Mark Workboard background content inert/aria-hidden while modal or drawer dialogs are active.
- Add focused unit and Chromium browser smoke coverage for the audited modal/drawer accessibility requirements.
- Keep UI browser test aliases able to resolve shared workspace packages used by the Workboard view.

Verification:
- node scripts/run-vitest.mjs ui/src/ui/views/workboard.test.ts
- node scripts/run-vitest.mjs ui/src/ui/views/workboard.browser.test.ts
- (cd ui && pnpm exec vitest run --config vitest.config.ts --project browser src/ui/views/workboard.browser.test.ts)
- GitHub checks green at 6557012430
2026-06-03 06:14:40 -05:00
Vincent Koc b1fccd0605 perf(ui): surface chat ack server timing (#89801) 2026-06-03 04:11:14 -07:00
Vincent Koc a46181f168 test: stabilize timing-sensitive ARM suites 2026-06-03 03:47:48 -07:00
Vincent Koc c68938c19e perf(gateway): overlap chat catalog startup
Start optional model catalog loading earlier during chat history/startup hydration so catalog discovery overlaps history projection without changing the metadata contract. The response still awaits catalog-backed session/default/agents metadata before replying.

Verification:
- git diff --check
- autoreview local caught and rejected the short-timeout variant; fixed to overlap-only
- autoreview commit clean
- Testbox tbx_01kt6edf5d328vqr43epy0cs0b targeted gateway/UI shards passed
- Testbox tbx_01kt6eh4fk409g4ar1kpa0edhz check:changed lanes core, coreTests passed
2026-06-03 03:02:47 -07:00
Ayaan Zaidi 41ee6b1dd6 feat(telegram): show commentary in progress drafts 2026-06-03 14:30:30 +05:30
Ayaan Zaidi 04f93c2fb4 refactor(channels): share progress draft primitives 2026-06-03 14:30:30 +05:30
Onur Solmaz 17a285f298 fix(ui): preserve visible chat stream text
Fix WebChat stream/history reconciliation so visible assistant text survives stale history reloads, tool-history catch-up, and terminal final/error/abort events.\n\nRefactors the UI path into stream reconciliation, stream text, and typed tool-message helpers so persisted history and live stream state use the same matching rules.\n\nCloses #67035.
2026-06-03 16:56:33 +08:00
Ayaan Zaidi 1bd1483b62 refactor(auto-reply): unify transient failure visibility 2026-06-03 13:55:36 +05:30
FullerStackDev a5ef086e3c test(auto-reply): cover channel-agnostic failure routing 2026-06-03 13:55:36 +05:30
FullerStackDev a10faca06f fix(auto-reply): surface fatal channel errors 2026-06-03 13:55:36 +05:30
Yzx 932d6ea8e5 fix(webchat): show sessions_send handoffs as forwarded
Fix WebChat display projection for sessions_send inter-session handoffs. Forwarded messages now render assistant-side with source attribution while keeping transcript user-role semantics, stripping generated inter-session envelopes from display text, and preserving heartbeat/TTS/message-tool cleanup boundaries. Fixes #89161.
2026-06-03 01:09:45 -07:00
Vincent Koc 175cfe4846 fix(gateway): stabilize webchat prompt cache affinity
Keep WebChat run/idempotency ids per message while threading a stable hashed promptCacheKey through chat.send into embedded runs. Fixes #89139.
2026-06-03 00:33:02 -07:00
Dallin Romney d48b9274d8 fix: report gateway health auth diagnostics (#89337)
* fix: handle gateway health credential errors

* fix: diagnose gateway health credential state
2026-06-03 00:04:47 -07:00
Vincent Koc 7c1a83ff2e fix(build): externalize optional baileys image backends 2026-06-03 07:50:25 +02:00
Vincent Koc c0b05a2100 perf(control-ui): coalesce chat metadata startup
Add a coalesced chat.metadata Gateway method so the Control UI can fetch model and command metadata without blocking a clean first message path. Reuses existing models/commands builders, keeps compatibility fallback for older gateways, updates protocol artifacts, and adds focused gateway/UI/e2e coverage.
2026-06-02 22:34:54 -07:00
Ayaan Zaidi a4b09d72b9 refactor(channels): share progress draft compositor 2026-06-03 10:54:19 +05:30
Dallin Romney c0c4156b6d fix(exec): reject corrupt shell snapshots (#89701) 2026-06-02 21:58:28 -07:00
Ayaan Zaidi 8f1ae5967e fix(discord): sanitize tool progress scaffolding 2026-06-03 08:03:57 +05:30
Ayaan Zaidi d82bfcecb1 fix(discord): cover compact gh failure traces 2026-06-03 08:03:57 +05:30
FullerStackDev a8bf14da84 fix(discord): suppress internal agent failure traces 2026-06-03 08:03:57 +05:30
Gabriel F. 8b546facaf fix(outbound): stop schema-padded poll modifiers from blocking send (#89601)
Summary:
- The PR changes shared poll-intent detection so `pollDurationHours` and `pollMulti` alone no longer make `send` actions fail, with focused unit and outbound validation coverage.
- PR surface: Source -2, Tests +40. Total +38 across 3 files.
- Reproducibility: yes. Source inspection shows current main and `v2026.5.28` expose `pollDurationHours` throu ... d message schema, classify non-zero shared duration as poll intent, and throw before a `send` can dispatch.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

Validation:
- ClawSweeper review passed for head 0fd95756cd.
- Required merge gates passed before the squash merge.

Prepared head SHA: 0fd95756cd
Review: https://github.com/openclaw/openclaw/pull/89601#issuecomment-4606487310

Co-authored-by: Gabriel Fratica <gabriel@codez.ro>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
2026-06-03 00:30:02 +00:00
Michael Appel c208a10619 Harden node exec approval precheck env [AI] (#81488)
* fix: align node exec approval precheck env

* addressing ci

* fix: preserve node allow-always prechecks

* fix: finalize node exec approval port

* fix: align node prepare approval env

* test: tighten node marker reuse coverage proof

* test: fix node allow-always coverage mock typing

---------

Co-authored-by: Devin Robison <drobison@nvidia.com>
Co-authored-by: Devin Robison <drobison00@users.noreply.github.com>
2026-06-02 13:15:41 -06:00
Vincent Koc d07ba5f265 fix(providers): avoid custom provider runtime fanout 2026-06-02 19:23:38 +02:00
Vincent Koc f789081bae test(gateway): abort accepted agent run in e2e 2026-06-02 18:12:54 +02:00
Vincent Koc 388dc56ba5 test(gateway): defer sidecars in tools invoke e2e 2026-06-02 17:41:19 +02:00
Peter Steinberger c8d21fe7f0 fix: recover suspicious gateway startup configs (#89480) 2026-06-02 10:12:35 -04:00
Peter Steinberger 12c6ef6d57 fix(update): keep plugin repair fetch failures nonblocking 2026-06-02 14:55:55 +01:00
Peter Steinberger eef24d452f fix(models): preserve provider prompt cache boundaries
Split Anthropic system prompts at the cache boundary so only stable prefixes get cache_control, strip the internal marker when cache control is disabled, and keep OpenAI-compatible Anthropic cache-control routes from caching dynamic suffixes.\n\nFixes #89386.
2026-06-02 09:19:52 -04:00
Coy Geek 3509f7613e fix: audit and repair hooks token reuse with Gateway auth
Keep startup non-breaking for existing installs when hooks.token reuses Gateway auth, but surface a startup warning, critical security audit finding, and doctor --fix repair that rotates persisted hooks.token.

Closes #87376.

Co-authored-by: Coy Geek <65363919+coygeek@users.noreply.github.com>
2026-06-02 08:58:40 -04:00
Vincent Koc 4115f0c82f fix(scripts): keep watch proof asset copies out of idle window 2026-06-02 14:53:34 +02:00
Alix-007 1824aa07a0 fix(mistral): enable prompt cache keys
Enable Mistral prompt cache keys without long-retention forwarding. Update cached-read pricing and doctor migration for existing Mistral provider config. Fixes #83709.
2026-06-02 08:52:12 -04:00
Peter Steinberger 5259fa4495 fix(llm): keep OpenAI-compatible reasoning streams active 2026-06-02 08:40:03 -04:00
NVIDIAN 895dccd058 fix(agents): gate finalize hooks before delivery
Run `before_agent_finalize` for embedded agents before terminal delivery so revise decisions can retry without leaking a final assistant reply.

The embedded subscription now defers terminal assistant events, block replies, and lifecycle delivery until the pre-terminal gate resolves; accepted revise decisions suppress delivery, while hook failures and continue decisions finalize normally. It also preserves existing replay-invalid liveness behavior while still preventing revise after side-effecting turns.

Closes #87585

Co-authored-by: ai-hpc <mail.speedy.hpc@hotmail.com>
2026-06-02 08:27:36 -04:00
Peter Steinberger 06434d85a0 fix(llm): gate OpenAI-compatible reasoning output
Replaces #89343 because the contributor fork did not allow maintainer edits.

Co-authored-by: zz327455573 <327455573@qq.com>
2026-06-02 08:24:34 -04:00
Peter Steinberger a326faa10c fix: recover corrupt managed npm installs 2026-06-02 05:21:19 -07:00
Peter Steinberger 95880ae21c fix: align auth health status after Codex sidecar merge 2026-06-02 05:14:52 -07:00
兰之 10d10faa25 feat(plugin-sdk): add resolve_exec_env hook
Summary:
- Add the plugin SDK `resolve_exec_env` hook for bounded exec environment contributions.
- Wire resolved exec env through exec preparation/final execution without exposing plugin env values to generic tool hooks.
- Cover lazy exec loading, host and command rewrites, node/gateway execution, filtering, and EXEC shell snapshot cache behavior.

Verification:
- `pnpm changed:lanes --json`
- `node scripts/run-vitest.mjs src/agents/bash-tools.exec.resolve-env-hook.test.ts src/agents/agent-tool-definition-adapter.test.ts src/agents/agent-tool-definition-adapter.after-tool-call.test.ts src/agents/shell-snapshot.test.ts src/plugins/hook-resolve-exec-env.test.ts`
- `pnpm check:test-types`
- `pnpm lint src/agents/bash-tools.exec.ts src/agents/bash-tools.exec.resolve-env-hook.test.ts`
- `.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main`
- PR CI clean on 1bbad8d071: https://github.com/openclaw/openclaw/actions/runs/26817910293

Co-authored-by: Lanzhi <lizhan3@xiaomi.com>
2026-06-02 08:00:42 -04:00
Andy Ye e992af4b6e fix: surface unresolved OAuth sidecar auth failures
Surface stale Codex OAuth sidecar references as unresolved auth failures in auth health, model status, and gateway status instead of hiding them as generic missing auth.

Also refresh the running gateway after doctor auth-profile repairs by reloading secrets/runtime auth snapshots and then refreshing the model auth-status cache.

Thanks @TurboTheTurtle.

Fixes #84252.
2026-06-02 07:56:14 -04:00
Yzx b1bdc29d33 fix(providers): use native reasoning mode for Gemini instead of tagged (#89379)
* fix(providers): use native reasoning mode for direct Gemini API, keep CLI tagged

Gemini 2.5+ delivers reasoning via native thinkingParts (thinkingConfig.
includeThoughts). Having tagged mode active at the same time injects a
<think>…</think>/<final>…</final> directive into the system prompt; the
model opens a <think> block before a tool call, never closes it, and
returns an empty post-tool turn (content:[], payloads=0 error, #69220).

Fix: override resolveReasoningOutputMode in buildGoogleProvider() only —
not in the shared GOOGLE_GEMINI_PROVIDER_HOOKS. The Gemini CLI backend
(google-gemini-cli) runs gemini --output-format json and parses a text
response field, not native thought parts; it must stay on tagged mode.
A regression test confirms google-gemini-cli remains "tagged".

Also remove the dead BUILTIN_REASONING_OUTPUT_MODES entry keyed on
"google-generative-ai" from provider-utils.ts — that string is only
ever the transport model.api value, never the provider id passed to
resolveReasoningOutputMode, so the map was unreachable.

Fixes #69220

* docs: clarify Gemini reasoning output modes

* fix(google): keep Antigravity reasoning tagged

* fix(google): default direct reasoning checks to native

* fix(google): import reasoning context from plugin entry

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-06-02 07:46:08 -04:00
Vincent Koc 4b7f39e406 refactor(gateway): derive connection auth options 2026-06-02 13:24:17 +02:00
Vincent Koc 335c3a8d31 refactor(gateway): share node agent dispatch 2026-06-02 13:24:17 +02:00
Vincent Koc fd6b3255f8 refactor(gateway): share embedding remote options 2026-06-02 13:24:17 +02:00
Peter Steinberger b4dfa950b5 refactor: tighten agent harness surfaces
Refactor the agent harness surface after PR #88821 by moving compaction dispatch into its own module, splitting the harness type into explicit capability interfaces, and renaming the private agent-core class declaration to `CoreAgentHarness` while preserving the exported `AgentHarness` contract.

Verification:
- `node scripts/run-vitest.mjs src/agents/harness/selection.test.ts src/agents/command/cli-compaction.test.ts src/agents/embedded-agent-runner/compact.hooks.test.ts packages/agent-core/src/agent-loop.test.ts packages/agent-core/src/harness/messages.test.ts`
- `pnpm build`
- autoreview clean
- `pnpm check:changed` passed on Testbox `tbx_01kt407hq8sv1csm287pdj3fmp`
- PR CI merge state `CLEAN`
2026-06-02 07:20:43 -04:00
Mukunda Rao Katta 2d61521bd3 fix(update): pin post-core plugin compatibility to the downgraded core version (#87914) (#87952)
* fix(update): pin post-core plugin compatibility to the downgraded core version (#87914)

* fix(update): force plugin compatibility repair on rollback

* style(update): clarify downgrade compatibility note

* fix(plugins): resolve compatible prerelease plugin downgrades

* fix(plugins): honor host gates during npm downgrade repair

* fix(plugins): keep prerelease downgrade fallback on channel

---------

Co-authored-by: Gio Della-Libera <giodl73@gmail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-06-02 07:13:26 -04:00
Dallin Romney 30b9e123b8 fix: repeat doctor state migration repairs
Stabilize repeated `openclaw doctor --fix` state repairs for legacy plugin state and installed plugin index migrations.

- Import legacy-only plugin-state sidecar rows before deciding whether live conflicts require keeping the sidecar.
- Drop expired sidecar rows only when the sidecar can be archived, avoiding repeated false migration changes.
- Let richer current install records cover legacy records only when durable legacy fields are actually preserved, without erasing npm selector intent or malformed legacy metadata.

Proof:
- `node scripts/run-vitest.mjs src/commands/doctor-state-migrations.test.ts`
- `git diff --check origin/main...HEAD`
- `.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main`
- PR CI clean for head `5f3a7e0749372a40cabd7a090cae155997481b71`

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-06-02 07:13:02 -04:00
charles-openclaw 2c48dd2277 fix(sessions): preserve corrupt-header transcripts
Fixes #89037.

Co-authored-by: Charles <charles-openclaw@9bcfae.inboxapi.ai>
2026-06-02 07:02:09 -04:00
Hussein Nourelddine 4a285d529a feat(status): detect external plugin version drift
Surface active official external plugin version drift in gateway status diagnostics so users can see when a host/package update left npm or ClawHub plugins behind the running local gateway. The advisory uses the daemon service install records, compares against the running gateway version, gives detailed fix commands in deep status, and avoids local-state drift checks for remote gateway mode or explicit status probe URLs.

Co-authored-by: Hussein Nourelddine <hussein@gptc.com.kw>
2026-06-02 06:59:23 -04:00
Vincent Koc 07821e4bb8 refactor(gateway): share secret ref input resolution 2026-06-02 12:52:02 +02:00
Vincent Koc 4bae78858f refactor(gateway): share runtime service helpers 2026-06-02 12:52:02 +02:00
Andy Ye 1db2c2a3e0 Treat soft plugin repair warnings as nonfatal (#84431)
* Treat soft plugin repair warnings as nonfatal

* fix: scope plugin repair convergence failures

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-06-02 06:51:11 -04:00