Commit Graph

52209 Commits

Author SHA1 Message Date
Peter Steinberger
b9f975b64e Replace Sharp image backend with Photon (#86437)
* refactor: replace sharp image backend with photon

* refactor: remove whatsapp jimp dependency

* chore: remove stale sharp install workarounds

* test: keep image fixtures off photon

* test: use valid prompt image fixtures

* test: account for optimized PNG fixtures

* test: use valid minimax image fixtures
2026-05-25 15:04:44 +01:00
Chunyue Wang
32ddfc22f5 fix(agents): release embedded-attempt session lock on every exit path (#86427)
* fix(agents): release embedded-attempt session lock on every exit path

The embedded run controller acquires its session write lock eagerly at
creation and released it only inside the post-run cleanup block. An
exception thrown in post-prompt processing skipped that block, so the lock
leaked to the live gateway process until the watchdog reclaimed it and
later requests to the session failed with SessionWriteLockTimeoutError.

Add an idempotent dispose() to the lock controller and call it from the
run's outer finally so the eagerly-held lock is released on every exit
path. Normal/aborted/timed-out runs still hand the lock to
acquireForCleanup first, so dispose() is a no-op then (no double release).

Fixes #86014

* fix: keep session lock teardown comment lean

* docs(changelog): note embedded session lock fix

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-25 15:03:23 +01:00
Peter Steinberger
b077c3a813 fix: accept OpenClaw voice wake confusions (#86507) 2026-05-25 15:03:16 +01:00
Vincent Koc
ee5f8c7c22 fix(crabbox): bootstrap macos js toolchain 2026-05-25 15:52:57 +02:00
Peter Steinberger
d63e8d4b4f chore: add agent transcript skill 2026-05-25 14:50:16 +01:00
Peter Steinberger
89a21db627 fix(gateway): dedupe session tool fanout
Dedupe gateway tool-event fanout so connections subscribed by both run and session receive the canonical run-scoped agent event only, while session-only subscribers keep the compatibility session.tool mirror.\n\nVerification:\n- node scripts/run-vitest.mjs src/gateway/server-chat.agent-events.test.ts\n- git diff --check\n- env -u OPENCLAW_TESTBOX pnpm check:changed\n- .agents/skills/autoreview/scripts/autoreview --mode local
2026-05-25 14:40:07 +01:00
clawsweeper[bot]
d51f26850d fix: Hook ingress token unlocks password-mode gateway auth (#86453)
Summary:
- The PR expands security audit, CLI docs, and tests so `hooks.token` reuse of active Gateway token/password auth is reported while password-mode Gateway startup remains compatible.
- PR surface: Source +178, Tests +311, Docs +14. Total +503 across 14 files.
- Reproducibility: yes. from source inspection: current main forwards a bearer token as both token and passwor ... ecause this review was read-only, but the linked issue and code path make the reproduction high confidence.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(cr-fmi-hook-ingress-token-unlocks-password-mode-gateway-auth): ap…
- PR branch already contained follow-up commit before automerge: fix: include trusted proxy password in hooks token reuse check
- PR branch already contained follow-up commit before automerge: fix(gateway): audit hooks password reuse without blocking startup
- PR branch already contained follow-up commit before automerge: fix: Hook ingress token unlocks password-mode gateway auth

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

Prepared head SHA: 7c796b22ec
Review: https://github.com/openclaw/openclaw/pull/86453#issuecomment-4533831028

Co-authored-by: Coy Geek <65363919+coygeek@users.noreply.github.com>
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: jesse-merhi
2026-05-25 13:39:56 +00:00
zhang-guiping
d6b7fe8615 fix #86077: keep fallback errors candidate scoped (#86134)
Merged via squash.

Prepared head SHA: 73cc076761
Co-authored-by: zhangguiping-xydt <275915537+zhangguiping-xydt@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-05-25 16:32:41 +03:00
Chunyue Wang
6f76d9f246 fix(diagnostics): reclaim wedged session lanes with a stale leaked active run (#86056)
* fix(diagnostics): reclaim wedged session lanes with a stale leaked active run

A group session lane could wedge permanently (#85639): an embedded run that dies
abnormally leaves a stale ACTIVE_EMBEDDED_RUNS handle, so the diagnostic heartbeat
classifies the lane stale_session_state (recoveryEligible without allowActiveAbort)
while stuck-session recovery reads the leaked isEmbeddedPiRunActive flag and skips
with active_reply_work — a tautology that keeps the lane forever. The age-based
escape never fires because ageMs (last-activity) resets on every incoming queued
message.

Make the active-run skip a liveness check: before keeping the lane, consult the
run's real forward-progress age (lastProgressAgeMs, not refreshed by incoming
messages). If a run flagged active has made no forward progress past the resolved
diagnostics.stuckSessionAbortMs threshold (threaded through the recovery request;
falls back to a 5-minute floor) with queued work waiting, treat it as a
leaked/dead handle and reclaim it (abort + drain + force-clear) instead of
skipping. A genuinely progressing run, or one within an operator-raised
threshold, is kept.

Fixes #85639

* test(diagnostics): cover stale active run recovery

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-25 14:20:59 +01:00
Peter Steinberger
e761eb8f3e fix: derive plugin media trust from metadata (#86410) 2026-05-25 14:18:36 +01:00
狼哥
75c72360ad fix(media-understanding): normalize HEIC before image descriptions (#86037)
Summary:
- The PR adds HEIC/HEIF-to-JPEG normalization before media-understanding image description providers run, with regression tests and a changelog entry.
- PR surface: Source +58, Tests +82, Docs +1. Total +141 across 6 files.
- Reproducibility: yes. at source level: current main forwards HEIC buffers to `describeImage` without normali ... ody includes a red HEIC regression test before the patch. I did not execute tests in this read-only review.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(media-understanding): normalize HEIC before image descriptions

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

Prepared head SHA: ed34620bd7
Review: https://github.com/openclaw/openclaw/pull/86037#issuecomment-4528578874

Co-authored-by: luoyanglang <hanwanlonga@gmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
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-05-25 13:18:18 +00:00
Peter Steinberger
8fe4f34af2 fix: accept leading fuzzy Discord voice wake names (#86484) 2026-05-25 14:01:15 +01:00
Peter Steinberger
5d018034f6 feat: promote provider tool call stream wrapper (#86489) 2026-05-25 13:55:23 +01:00
Vincent Koc
6eb46ceac8 fix(test): dedupe kitchen sink command assertions 2026-05-25 14:48:57 +02:00
Peter Steinberger
fcf0bff929 test: derive deprecated sdk usage guard (#86403) 2026-05-25 13:45:08 +01:00
Vincent Koc
ba2b820c5c fix(qa): extend memory fallback Windows budget 2026-05-25 14:43:25 +02:00
Vincent Koc
968c87d798 fix(ui): move control ui chunking helper out of runtime source 2026-05-25 14:31:38 +02:00
Peter Steinberger
5f934830d3 fix: quiet retained lost task noise (#86475) 2026-05-25 13:28:23 +01:00
Vincent Koc
dc26069a71 fix(build): keep control ui chunking out of deadcode 2026-05-25 14:24:15 +02:00
Peter Steinberger
dc2c4aab6d fix: rotate realtime voice sessions on max duration
- Rotate OpenAI Realtime voice sessions on provider max-duration events without surfacing the expected expiry as a Discord voice error.
- Add lifecycle logging for Realtime rotation/reconnect and regression coverage for max-duration reconnect.
- Allowlist the existing Control UI chunking helper for the optional Knip unused-file guard so the dependency shard stays green on the current base.
2026-05-25 13:16:48 +01:00
Vincent Koc
fc3cd4970c fix(test): stream bundled plugin sweep logs 2026-05-25 13:37:38 +02:00
Peter Steinberger
2e7e4bc966 docs: add bugfix changelog credits 2026-05-25 12:23:06 +01:00
Rohit
a6df39dd92 fix(models): show oauth marker auth status (#86378) 2026-05-25 12:21:06 +01:00
Fermin Quant
92afd8ba25 fix: seed cron task progress summaries (#86313) 2026-05-25 12:21:02 +01:00
Steven
28f169be0c fix(update): exclude prerelease tags from stable git channel (#86260) 2026-05-25 12:20:57 +01:00
xin zhuang
c637944707 fix(doctor): warn and continue when cron job store is unreadable (#86384)
Catch non-ENOENT load failures inside maybeRepairLegacyCronStore so an
unreadable ~/.openclaw/cron/jobs.json (e.g. root-owned 0600 inside
Docker) no longer aborts the rest of the doctor health checks. The
scheduler-side loadCronStore keeps its strict throw-on-read-failure
contract.

Closes #86102

Co-authored-by: 1052326311 <1052326311@users.noreply.github.com>
2026-05-25 12:20:52 +01:00
Dirk
90caa3b610 fix(gateway): clear runtime config snapshot before in-process restart (#86388)
After config.patch writes new values to openclaw.json, a subsequent
SIGUSR1 in-process restart could overwrite them with a stale snapshot.

Root cause: run-loop's onIteration hook resets lanes and task registry,
but leaves the runtimeConfigSnapshot intact. loadConfig() then returns
the old snapshot via loadPinnedRuntimeConfig() instead of re-reading disk.

Fix: clearRuntimeConfigSnapshot() in the restart iteration hook so the
next startup reads fresh config from disk.

Refs #86350
2026-05-25 12:20:47 +01:00
Vincent Koc
d270879c4b fix(scripts): restore sparse crabbox changed gates 2026-05-25 13:16:51 +02:00
Vincent Koc
0bb9b421f3 fix(build): support Windows UI builds 2026-05-25 13:06:56 +02:00
Onur Solmaz
7ff29a9e6d Fix local embedding worker safety (#85348)
Summary:
- The PR routes local GGUF memory embeddings through a bundled worker sidecar, adds structured degradation and fallback handling, updates memory tests/build output, and keeps the local config contract unchanged.
- PR surface: Source +831, Tests +503, Docs +1, Other +2. Total +1337 across 23 files.
- Reproducibility: Do we have a high-confidence way to reproduce the issue? Source and report evidence are str ... cludes native crash logs; the exact Metal teardown abort was not reproduced in this review or the PR proof.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(memory): keep local embedding config unchanged
- PR branch already contained follow-up commit before automerge: fix(memory): type local embedding degradation
- PR branch already contained follow-up commit before automerge: fix(memory): refresh keywords after embedding fallback
- PR branch already contained follow-up commit before automerge: fix(memory): keep worker errors internal
- PR branch already contained follow-up commit before automerge: test: satisfy memory provider lifecycle harnesses
- PR branch already contained follow-up commit before automerge: fix: harden local embedding worker fallback

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

Prepared head SHA: 1d1fe41c4e
Review: https://github.com/openclaw/openclaw/pull/85348#issuecomment-4518516047

Co-authored-by: Onur Solmaz <onur@Onurs-MacBook-Pro.local>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: osolmaz
Co-authored-by: osolmaz <2453968+osolmaz@users.noreply.github.com>
2026-05-25 11:03:04 +00:00
Sergiusz
70c7d6f588 fix(ui): scope chat session picker to active agent (#85965)
* fix(ui): scope chat session picker to active agent

* fix(ui): preserve picker search result bounds

* fix(ui): keep chat picker pagination scoped

* test(ui): mock session subscription sync in chat view test
2026-05-25 20:58:30 +10:00
Nimrod Gutman
9ca52ce3d9 [codex] improve iOS realtime talk mode (#86355)
Merged via squash.

Prepared head SHA: 3f5aedb265
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com>
Co-authored-by: ngutman <1540134+ngutman@users.noreply.github.com>
Reviewed-by: @ngutman
2026-05-25 13:27:37 +03:00
Vincent Koc
5e944691b7 fix(scripts): dedupe docker lane resources 2026-05-25 12:14:37 +02:00
Peter Steinberger
9a60fcfd3c docs: add code size guidance 2026-05-25 11:11:02 +01:00
Vincent Koc
e9b8a6ecbf fix(test): avoid source gateway import in rpc walk 2026-05-25 12:05:31 +02:00
Peter Steinberger
f950132207 docs: add bugfix changelog entries 2026-05-25 11:01:50 +01:00
Zennn
e2c174e8c8 Fix heartbeat response loop guard (#86324) (#86357) 2026-05-25 11:00:29 +01:00
Sebastien Tardif
8b42771aab fix(memory-core): filter REM dreaming candidates to light-staged entries (#86302)
* fix(memory-core): filter REM dreaming candidates to light-staged entries

REM dreaming re-ingested the full short-term recall store independently,
ignoring which entries were staged by the light sleep phase. Because the
confidence formula heavily weights accumulated averageScore (45%) and
recallStrength (25%), old high-recall entries permanently dominated
freshly staged candidates. The intended light→REM→deep pipeline was
broken: light correctly staged current material, but REM selected a
different set entirely, so lightHits never paired with remHits for deep
ranking.

Fix: in runRemDreaming(), read the phase-signals store for keys with
lightHits > 0 and filter entries to that set before passing to
previewRemDreaming(). When no light-staged keys exist (light disabled
or first run), fall back to the full entry set for backward
compatibility.

Added readLightStagedKeys() to short-term-promotion.ts as a clean
export for reading the light-staged key set from the phase signal store.

Closes #86249

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>

* fix(memory-core): keep REM staging pending

* fix(memory-core): mark REM-considered staged entries

---------

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-25 11:00:24 +01:00
Sebastien Tardif
5182ebcf38 fix(telegram): propagate forum topic names into agent context (#86299)
* fix(telegram): propagate forum topic names into agent context

The topic-name-cache already tracks forum topic names via
forum_topic_created/edited/closed events in bot-message-context, but
this metadata was not surfaced in two key paths:

1. The native-command handler (bot-native-commands.ts) builds the agent
   context payload with IsForum but never looked up the cached topic
   name. Now it resolves the topic name from the cache and includes
   TopicName in the context, giving agents awareness of which forum
   topic they are responding in.

2. The action runtime (action-runtime.ts) executes createForumTopic and
   editForumTopic actions but never persisted the resulting topic
   metadata back to the cache. Now both actions write the topic name
   (and optional icon metadata) to the cache after success, ensuring
   subsequent messages in those topics can resolve the name.

Closes #86024

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>

* fix(telegram): scope forum topic cache updates

---------

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-25 11:00:17 +01:00
Neerav Makwana
2fcd481276 fix(slack): keep downloaded files out of reply media (#86318)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-25 11:00:12 +01:00
mushuiyu_xydt
9239f94e5b fix(cron): accept plus durations for one-shot jobs (#86341) 2026-05-25 11:00:06 +01:00
Peter Steinberger
e7c696a5b0 fix(plugins): clear metadata memo at lifecycle boundaries 2026-05-25 10:39:42 +01:00
Peter Steinberger
4737e19058 chore(skills): normalize release skill routing 2026-05-25 10:34:45 +01:00
Peter Steinberger
033693843c docs(release): require early performance regression check 2026-05-25 10:26:47 +01:00
Vincent Koc
9afbfc1b63 fix(qa): capture Windows gateway metrics 2026-05-25 11:24:16 +02:00
Peter Steinberger
a1fe86a0ff feat(qa): add coverage scenario matching 2026-05-25 10:22:51 +01:00
Vincent Koc
4a45098a86 fix(perf): avoid duplicate docker package ui build 2026-05-25 11:16:09 +02:00
Peter Steinberger
bbc1772f4d build: enable modern TypeScript module syntax
* build: enable modern TypeScript flags

* build: drop erasable TypeScript syntax flag

* build: keep legacy class field semantics
2026-05-25 10:10:12 +01:00
Peter Steinberger
a39a2c5acb ci: include performance evidence in release validation 2026-05-25 10:09:17 +01:00
Vincent Koc
912fdfbedd fix(providers): stream ordinary tool-like prose promptly 2026-05-25 10:53:03 +02:00