Commit Graph

41200 Commits

Author SHA1 Message Date
Peter Steinberger
358cd87ff3 ci(release): split release soak validation 2026-05-04 23:25:06 +01:00
Vincent Koc
ac3cd1a0ca Harden Codex harness control surfaces (#77459)
* fix(scripts): find codex protocol source from worktrees

* fix(test): keep codex harness docker caches writable

* fix(test): relax live codex cache mount permissions

* test(codex): add live docker harness debug output

* fix(test): detect numeric ci env in codex docker harness

* fix(codex): skip duplicate agent-command telemetry

* fix(tooling): skip sparse-missing oxlint tsconfig

* fix(tooling): route changed checks through testbox

* fix(qa): keep coverage json source-clean

* fix(test): preflight codex docker auth

* fix(codex): validate bind option values

* fix(codex): parse quoted command arguments

* fix(codex): reject extra control args

* fix(codex): use content for blank bound prompts

* fix(codex): decode local image file urls

* fix(codex): treat local media urls as images

* fix(codex): keep windows media paths local

* fix(codex): reject malformed diagnostics confirmations

* fix(codex): reject malformed resume commands

* fix(codex): reject malformed thread actions

* fix(codex): reject malformed turn controls

* fix(codex): reject malformed model controls

* fix(codex): resolve empty user input prompts

* fix(codex): enforce user input options

* fix(codex): reject ambiguous computer-use actions

* fix(codex): ignore stale bound turn notifications

* test(gateway): close task registries in gateway harness

* test(gateway): route cleanup through task seams

* fix(codex): describe current permission approvals

* fix(codex): disclose command approval amendments

* fix(codex): preserve approval detail under truncation

* fix(codex): propagate dynamic tool failures

* test(codex): align dynamic tool block contract

* fix(codex): reject extra read-only command operands

* fix(codex): escape command readout fields

* fix(codex): escape status probe errors

* fix(codex): narrow formatted thread details

* fix(codex): escape successful status summaries

* fix(codex): escape bound control replies

* fix(codex): escape user input prompts

* fix(codex): escape control failure replies

* fix(codex): escape approval prompt text

* test(codex): narrow escaped reply assertions

* test(codex): complete strict reply fixtures

* test(codex): preserve account fixture literals

* test(codex): align status probe fixtures

* fix(codex): satisfy sanitizer regex lint

* fix(codex): harden command readouts

* fix(codex): harden bound image inputs

* fix(codex): sanitize command failure replies

* test(codex): complete rate limit fixture

* test(tooling): isolate postinstall compile cache fixture

* fix(codex): keep app-server event ownership explicit

---------

Co-authored-by: pashpashpash <nik@vault77.ai>
2026-05-05 07:23:41 +09:00
hcl
b3e42bf327 fix(plugins): emit actionable install hint for externalized channel plugins (#77502)
Fixes #77483.\n\n- Suggest catalog-backed install commands for missing official external plugins in config validation.\n- Preserve stale/remove wording for non-catalog missing plugins.\n- Add regression coverage for plugins.entries and plugins.allow warnings.\n\nVerification:\n- pnpm exec oxfmt --check --threads=1 CHANGELOG.md src/config/validation.ts src/config/config.plugin-validation.test.ts\n- pnpm test src/config/config.plugin-validation.test.ts src/commands/doctor/shared/missing-configured-plugin-install.test.ts\n- pnpm crabbox:run -- --provider blacksmith-testbox ... pnpm check:changed\n- GitHub CI green on d1b1b10444
2026-05-04 15:22:15 -07:00
Chunyue Wang
14aa98827a fix(codex/app-server): stable mirror idempotency to prevent transcript loss (#77046)
* fix(codex/app-server): stable mirror idempotency to prevent transcript loss

* Changelog: note codex/app-server transcript mirror dedupe stabilization (#77046)
2026-05-04 23:17:00 +01:00
Peter Steinberger
be6543caf8 fix(doctor): preserve active auth profile metadata 2026-05-04 23:16:43 +01:00
Vincent Koc
a07d8cbf8a fix(docker): normalize plugin build args 2026-05-04 15:16:22 -07:00
Vincent Koc
0908f3d538 docs(changelog): note model runtime switch repair UX 2026-05-04 15:15:32 -07:00
Vincent Koc
57ca91ff38 fix(telegram): clarify model picker runtime scope 2026-05-04 15:15:32 -07:00
Vincent Koc
e091d912ce fix(model): guide runtime allowlist repairs 2026-05-04 15:15:32 -07:00
Brandon
70b1c17ae0 fix(config): prefer plugin ids for built-in channel claims
Prefer the manifest plugin id when auto-allowlisting configured built-in channel aliases, with regression coverage for alias/id split plugins and same-name official channel plugins.
2026-05-04 15:15:18 -07:00
Peter Steinberger
683d892eed test: make global install shell test portable 2026-05-04 23:13:58 +01:00
Peter Steinberger
a7263de258 fix(agents): preserve workspace metadata reuse
Pass the resolved agent workspace through hot model refresh paths so workspace-scoped plugin metadata snapshots can be reused.

Refs #77519.
Refs #77532.
2026-05-04 23:13:32 +01:00
Peter Steinberger
343f859b90 fix: preserve visible Discord labeled replies 2026-05-04 23:13:18 +01:00
Peter Steinberger
31edc4ee1a fix: clean up startup readiness PR docs 2026-05-04 23:13:18 +01:00
Satoshi
5572c8137c fix(discord): preserve non-text payloads in reply scrub 2026-05-04 23:13:18 +01:00
Satoshi
e259938e96 fix: harden startup readiness and discord replies
(cherry picked from commit 3956672106b3387d42427a485a9ca01e77f3b78f)
2026-05-04 23:13:18 +01:00
Vincent Koc
7e229f0d3d fix(docker): prune external plugin dist (#77547) 2026-05-04 15:11:14 -07:00
Peter Steinberger
8ee08b2b77 chore: update dependencies 2026-05-04 23:07:09 +01:00
Mogglemoss
43b5df7295 fix(secretrefs): resolve external channel contracts in dist/ sidecars (#77421)
* fix(secretrefs): resolve external channel contracts in dist/ sidecars

Externalized channel plugins published to npm (e.g. @openclaw/discord
since 2026.5.2) keep their compiled secret-contract-api artifact under
<rootDir>/dist/, per the package.json `openclaw.runtimeExtensions`
convention. The runtime contract loader added in #76449 only searched
the rootDir, so npm-installed plugins silently dropped their channel
SecretRef contracts: the runtime snapshot left `channels.<id>.token`
as an unresolved SecretRef, the plugin's `isConfigured` check then
returned false, and the gateway recorded `error: not configured`
without firing the usual channel startup logs.

Look in `<rootDir>/dist/` as well as `<rootDir>/`, preferring dist
when running from a built openclaw artifact and rootDir when running
from source. The new `loads dist/ secret-contract-api sidecars …`
test in channel-contract-api.external.test.ts mirrors the real
npm-package layout and fails without this change.

Refs #76371. Fixes #77416.

* docs: credit changelog contributor

---------

Co-authored-by: Magpie <magpie@local>
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-05-04 16:57:28 -05:00
Pnant
a7b665cfed fix(telegram): honor topic requireMention precedence
Telegram forum-topic requireMention config now takes precedence over persisted activation state, with focused regression coverage.\n\nFixes #49864.\nThanks @Panniantong.
2026-05-04 22:53:06 +01:00
hcl
d0cae0d950 fix(active-memory): skip sub-agent gracefully when no memory tools registered (#77506) (#77515)
* fix(active-memory): skip sub-agent gracefully when no memory tools registered (#77506)

When memory-core and memory-lancedb are both absent, the embedded
memory sub-agent would throw 'No callable tools remain after resolving
explicit tool allowlist', which propagated as a noisy warning through
the before_prompt_build hook. Catch this specific error in
runActiveMemorySubAgent and return an empty NONE result so the
gateway log stays clean and the sub-agent run is skipped without
disrupting the parent session.

* fix(active-memory): skip missing memory-tool subagent runs

* fix(active-memory): match inherited missing memory tool errors

* fix(active-memory): preserve policy-filtered memory errors

---------

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-05-04 16:47:38 -05:00
Penchan
1c52447f0b fix(plugins): treat CalVer correction versions as compatible with plugin API ranges (#77450)
* fix(plugins): accept CalVer correction plugin API hosts

Fixes #77293

* docs(changelog): credit plugin api calver fix pr

---------

Co-authored-by: pingu <pingu@penchan.co>
2026-05-04 14:46:29 -07:00
Vincent Koc
a4f2bf273a fix(openai): default direct responses to sse 2026-05-04 14:37:07 -07:00
Peter Steinberger
5005f5b22e docs(changelog): note npm script shell update fix 2026-05-04 22:34:30 +01:00
Peter Steinberger
4556707cb7 test(browser): mirror route URL guard in existing-session helper 2026-05-04 22:29:13 +01:00
Peter Steinberger
0909df1a4f refactor: centralize reply followup drain lifecycle 2026-05-04 22:25:16 +01:00
Peter Steinberger
86385f72e9 fix(update): use absolute npm script shell 2026-05-04 22:24:34 +01:00
Peter Steinberger
828b6be39d fix(cli): bound sessions list output 2026-05-04 22:18:25 +01:00
Peter Steinberger
14b5f73e2a fix(agents): avoid duplicate generated media attachments 2026-05-04 22:14:43 +01:00
Vincent Koc
29a3e71106 Merge branch 'main' of https://github.com/openclaw/openclaw
* 'main' of https://github.com/openclaw/openclaw:
  fix(update): isolate plugin sync failures
2026-05-04 14:07:57 -07:00
Vincent Koc
ed1089f822 test(plugins): source Testbox auth for kitchen sink live 2026-05-04 14:07:03 -07:00
Vincent Koc
7c0f5463a5 fix(update): isolate plugin sync failures
Disable and skip plugins that fail package-update plugin sync so broken plugin packages do not fail an otherwise successful OpenClaw update.
2026-05-04 14:06:44 -07:00
Vincent Koc
fdaa5a0c3d fix(update): exit post-core resume without result path 2026-05-04 14:06:18 -07:00
Sally O'Malley
02ac7dc5a6 fix(openrouter): keep DeepSeek V4 reasoning effort valid (#77423)
Summary:
- The PR removes `max` from OpenRouter DeepSeek V4 thinking profiles, maps stale OpenRouter `max` overrides to `xhigh`, preserves direct DeepSeek behavior, and updates docs, tests, and changelog.
- Reproducibility: yes. Source inspection on current main shows OpenRouter DeepSeek V4 advertises `max` and se ... ffort: "max"`, matching the linked 400 logs; I did not need a live OpenRouter request for this assist pass.

Automerge notes:
- Ran the ClawSweeper repair loop before final review.
- Addressed earlier ClawSweeper review findings before merge.
- Included post-review commit in the final squash: docs(changelog): credit OpenRouter duplicate fix
- Included post-review commit in the final squash: fix(openrouter): keep DeepSeek V4 reasoning effort valid

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

Prepared head SHA: becdea4223
Review: https://github.com/openclaw/openclaw/pull/77423#issuecomment-4372880583

Co-authored-by: sallyom <somalley@redhat.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
2026-05-04 21:05:05 +00:00
Peter Steinberger
a9817a5f97 fix(gateway): clear reply run before followup drain 2026-05-04 22:04:32 +01:00
Vincent Koc
e2eb8e3cfe test(plugins): harden kitchen sink live gauntlet 2026-05-04 14:01:59 -07:00
Vincent Koc
a71f906837 fix(browser): guard existing-session screenshots 2026-05-04 13:56:33 -07:00
Vincent Koc
59b5058cdb fix(active-memory): stabilize timeout partial recovery 2026-05-04 13:56:12 -07:00
Peter Steinberger
4820b701a5 fix(plugins): fall back from invalid beta npm updates 2026-05-04 21:55:08 +01:00
Josh Lehman
0fc8afeac9 test(package): cover stale source plugin shadows
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-05-04 21:55:08 +01:00
Vincent Koc
112924b113 fix(update): keep plugin install runtime aliases stable 2026-05-04 21:55:08 +01:00
Vincent Koc
b63336186a fix(update): stage npm-prefix package updates cleanly
Co-authored-by: Josh Lehman <josh@martian.engineering>
2026-05-04 21:55:08 +01:00
Brad
be8b4dc845 fix(agents): honor hook bootstrap content (#77501)
* Problem: `agent:bootstrap` hooks can inject `BOOTSTRAP.md` content, but embedded-runner bootstrap routing decided whether bootstrap was pending before hook-adjusted files were considered.
* Fix: preload hook-adjusted bootstrap files before routing, treat non-empty hook-provided `BOOTSTRAP.md` as pending and accessible bootstrap content, and reuse the preloaded files when building Project Context.
* Tests: added routing + context-engine regression coverage for hook-injected bootstrap content.

Co-authored-by: ificator <8387253+ificator@users.noreply.github.com>
Co-authored-by: galiniliev <galini@microsoft.com>
2026-05-04 13:48:40 -07:00
Vincent Koc
7b86481c94 fix(plugins): trust chat catalog installs 2026-05-04 13:46:11 -07:00
Peter Steinberger
06056926a0 fix(plugins): trust official diagnostics installs (#77516) 2026-05-04 13:39:23 -07:00
Peter Steinberger
021373a454 ci(release): recover Windows packaged update no-restart timeout 2026-05-04 21:34:24 +01:00
Devin Robison
982d123b80 Harden Windows command wrapper resolution (#77472)
* Harden Windows command wrapper resolution

* clawsweeper: route Windows cmd.exe wrapper through getWindowsInstallRoots

Replace the local SystemRoot/windir/SYSTEMROOT/WINDIR scan in
resolveTrustedWindowsCmdExe with the shared getWindowsInstallRoots()
resolver from src/infra/windows-install-roots.ts. The shared resolver
already rejects UNC paths, root-relative values, semicolon-delimited
path-lists, and missing-drive-letter roots, and prefers registry-derived
roots over env, so the wrapper-launch trust boundary now matches the
existing Windows install-root boundary on main.

Tests:
- _resetWindowsInstallRootsForTests in beforeEach so cached roots track
  per-test process.env mutations
- expectedTrustedCmdExe helper now joins the resolved systemRoot, so the
  expected wrapper executable matches the production resolver on Linux
  CI (where it falls back to DEFAULT_WINDOWS_SYSTEM_ROOT)
- new "rejects unsafe Windows root values" test covers UNC,
  semicolon-delimited path-list, root-relative, and bare-relative
  SystemRoot inputs

* Add CHANGELOG entry for #77472 Windows command wrapper hardening

* clawsweeper: stub registry probe in Windows wrapper tests

On real Windows CI runners getWindowsInstallRoots() reads the canonical
SystemRoot from the registry (e.g. C:\WINDOWS) before falling back to
process.env, which shadowed the env-only setup in the ComSpec-poisoning
and unsafe-root tests and produced casing mismatches like
"C:\WINDOWS\System32\cmd.exe" vs the expected "C:\Windows\...". Pass a
queryRegistryValue stub returning null in beforeEach (and inside the
unsafe-root loop) so install-root resolution is fully driven by the
test's process.env setup on every platform.

* clawsweeper: overwrite WINDIR alongside SystemRoot in unsafe-root test

Real Windows runners did not honor `delete process.env.windir`, so the
unsafe-root iteration's WINDIR fallback still resolved to the canonical
`C:\WINDOWS` and produced a casing mismatch against the expected default
`C:\Windows\System32\cmd.exe`. Set both `SystemRoot` and `WINDIR` to the
unsafe payload so every install-root env source is rejected by
`normalizeWindowsInstallRoot` and the resolver falls through to
`DEFAULT_WINDOWS_SYSTEM_ROOT`.
2026-05-04 14:33:18 -06:00
Vincent Koc
4fab34a63b docs(changelog): note update and slack fixes 2026-05-04 13:19:31 -07:00
Vincent Koc
3af3fcfebe fix(update): exit post-core package child 2026-05-04 13:16:02 -07:00
Vincent Koc
3fb8c405ed fix(update): finish post-core package updates 2026-05-04 13:10:24 -07:00