Commit Graph

71877 Commits

Author SHA1 Message Date
Peter Steinberger d2ff17acc3 fix(ui): prevent Zod eval under strict Content Security Policy (#113617)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 04:16:17 -07:00
Peter Steinberger 57e2f220de fix(ci): restore packaged OpenWebUI and update validation (#113614)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 04:14:41 -07:00
Vincent Koc 13126e4bd7 refactor(workboard): share claim token redaction (#113618) 2026-07-25 19:06:18 +08:00
Peter Steinberger 66615987d3 fix(control-ui): keep polling gateway-driven setup progress (#113613) 2026-07-25 04:04:56 -07:00
joshavant bb47d9f29a test(packaging): cover manifest-declared plugin assets 2026-07-25 06:03:30 -05:00
joshavant f153858045 fix(onepassword): make SecretRef setup production-safe 2026-07-25 06:03:30 -05:00
joshavant 56bf326371 fix(onepassword): bound SecretRef resolution lifecycle 2026-07-25 06:03:30 -05:00
joshavant fb8589ebdb fix(onepassword): harden trusted op execution 2026-07-25 06:03:30 -05:00
sallyom f045f33a62 feat(onepassword): add managed SecretRef integration 2026-07-25 06:03:30 -05:00
Peter Steinberger 5b4df57248 fix(gateway): return 404 for disabled OpenAI API routes (#113609)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 03:57:46 -07:00
Alex Markson d998a1db84 fix: SQLite WAL file can stay inflated on a running gateway until restart (#112951)
* fix: SQLite WAL file can stay inflated on a running gateway until restart

Since #82366 switched the periodic 30-minute checkpoint to PASSIVE (to keep
WAL maintenance off the event loop), no checkpoint on a running process
truncates the WAL *file* any more -- only close() does, i.e. a restart.
wal_autocheckpoint recycles WAL space in place but never shrinks the file,
and is itself a PASSIVE checkpoint a reader can transiently block. So when a
reader briefly pins frames (e.g. a memory reindex, a backup, a slow query),
the WAL grows past the autocheckpoint size and then stays parked at that
high-water mark for the whole life of the process. Observed in production: a
1.6 GB agent DB left a 1.6 GB -wal that only manual TRUNCATE checkpoints
could reclaim. This affects every SQLite-backed store (task registry, plugin
state, proxy capture, memory host, ...), not just memory.

Set PRAGMA journal_size_limit (default 64 MiB, overridable via
journalSizeLimitBytes) right after wal_autocheckpoint so any completing
checkpoint -- including the PASSIVE periodic/auto ones #82366 now relies on
-- truncates the WAL file back to the ceiling. This restores the bounded
on-disk WAL that TRUNCATE used to give, without reintroducing the blocking
checkpoint #82366 removed: journal_size_limit only changes how far a
completing checkpoint truncates, never checkpoint timing. The 64 MiB ceiling
sits ~16x above the autocheckpoint steady state (~4 MB at 1000 pages), so it
is inert in normal operation and engages only on pathological growth.

Related: #82366, #81715

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: tighten SQLite WAL ceiling proof

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 03:52:33 -07:00
Vincent Koc 2b19ae1f00 fix(snapshot): recover complete pending sqlite snapshots (#113607) 2026-07-25 18:50:50 +08:00
Vincent Koc b8bb08a1ad refactor(gateway): share no-op reload plan check (#113610) 2026-07-25 18:45:12 +08:00
Franck MEYER 1e04925e03 fix: doctor preserves locks owned by exact gateway process title (#112855)
* fix(agents): recognize exact gateway process title

* refactor(agents): reuse gateway argv recognition

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 03:44:51 -07:00
Peter Steinberger 64daf8dd23 refactor(slack): split message dispatch (#113602) 2026-07-25 03:43:24 -07:00
lzw112 1defbc5473 fix(gateway): reject incomplete usage date ranges (#113259)
* fix(gateway): reject incomplete usage date ranges

* fix(gateway): tighten usage range validation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 03:41:05 -07:00
Vincent Koc 967dd9538a refactor(discord): share handle normalization (#113608) 2026-07-25 18:38:43 +08:00
Peter Steinberger 589ac0372e refactor(zalouser): compile blocks from CommonMark IR (#113590)
* refactor(zalouser): compile blocks from commonmark ir

* refactor(markdown-core): keep block metadata internal

* test(markdown-core): type hidden block metadata

* refactor(zalouser): drop split-module leftovers

* test(markdown-core): assert serialized metadata shape

* refactor(zalouser): satisfy formatter lint contracts

* refactor(zalouser): internalize source span helpers

* fix(zalouser): preserve nested container semantics
2026-07-25 03:34:53 -07:00
Peter Steinberger b0603cb443 refactor(fs): adopt shared safe filesystem primitives (#113596)
* refactor(fs): adopt fs-safe helpers

* fix(zalouser): keep stable per-profile QR temp path

* fix(fs): route adoption through owned facades
2026-07-25 03:24:19 -07:00
Peter Steinberger 91b5b43d78 feat(models): curate default model picker to current-generation catalogs (#113594)
* feat(models): curate default picker visibility

* chore(models): curate provider catalogs

* test(openai): generalize static-catalog transport guard after row curation (#91710)

* fix(models): propagate catalog lifecycle metadata

* test(models): keep picker suite within line budget
2026-07-25 03:22:42 -07:00
Vincent Koc 1d43d602c5 refactor(config): share legacy migration traversal (#113604)
* refactor(config): remove redundant MCP tier migration

* refactor(config): share legacy record traversal
2026-07-25 18:22:19 +08:00
Peter Steinberger e26fc17c77 fix(security): report canonical agents.entries paths in audit and diagnostics (#113603)
Audit findings, dangerous-flag labels, exec-approval provenance, filesystem
policy drift, and the skill-workshop tool diagnostic printed agents.list.*
paths users cannot paste into openclaw.json: dotted agents.list.<id> is valid
in no shape, and index-keyed agents.list.<n> only names the internal
validation projection. All display surfaces now emit agents.entries.<id>;
the summary agent-id extractor regex follows the new labels. Roster-aware
builders keep an indexed fallback only for id-less malformed legacy rows,
and validation/doctor/legacy-migration paths intentionally keep the legacy
form because they point into the user's actual file. Follow-up deferred
from #113160.
2026-07-25 03:19:07 -07:00
Peter Steinberger faaab9bd48 fix(onboard): rebase non-interactive commit onto first-agent write (#113601) 2026-07-25 03:13:51 -07:00
Peter Steinberger 6c39503161 refactor(gateway): split reload handlers (#113557)
* refactor(gateway): split reload handlers

* refactor(gateway): keep reload contracts private
2026-07-25 03:12:51 -07:00
Vincent Koc 3b1212b397 refactor(outbound): share audit history projection (#113597) 2026-07-25 17:59:56 +08:00
Peter Steinberger 902cc53279 refactor: batch of independent dedup wins (#113535)
* refactor(config): reuse session parent fork types

* refactor(channels): reuse setup adapter type

* refactor(discord): share model preference primitives

* refactor(whatsapp): share reaction eligibility

* test(auto-reply): deduplicate dispatch scenarios

* test(scripts): share scenario fixtures

* test: share process and registry fixtures

* test: satisfy dedup fixture lint

* fix(plugin-sdk): keep setup adapter contract acyclic
2026-07-25 02:56:05 -07:00
Dallin Romney 13039109a3 fix(qa): retarget generic channel coverage evidence (#113486) 2026-07-25 17:51:52 +08:00
Vincent Koc 84fb329895 fix(sqlite): avoid mutating invalid databases during repair (#113592)
* fix(sqlite): keep hostile schema repair atomic

* fix(sqlite): restore legacy schema ownership metadata

* fix(sqlite): validate complete maintenance repairs
2026-07-25 17:50:19 +08:00
Peter Steinberger 55d66fbf98 chore(scripts): remove resolved investigation tools and orphans (#113532)
* chore(scripts): remove orphaned wrappers

* chore(scripts): remove resolved investigation tools

* refactor(code-mode): remove orphaned plugin namespaces

* test(code-mode): remove stale namespace import
2026-07-25 02:47:40 -07:00
Vincent Koc f0ce854be2 refactor(cron): share diagnostic summary normalization (#113595) 2026-07-25 17:41:47 +08:00
xingzhou 87b424aca8 fix(browser): control results can contain corrupted text from malformed UTF-8 (#111898)
* fix(browser): reject malformed UTF-8 control responses

* test(browser): cover malformed UTF-8 error responses

* test(browser): strengthen UTF-8 transport coverage

* fix(browser): preserve retry guidance on decode errors

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 02:30:36 -07:00
Peter Steinberger c94746c924 fix: restore plugin bindings and macOS test stability (#113588)
* test(plugin-sdk): canonicalize memory fixture roots

* fix(channels): resolve plugin binding agent scope

* chore: defer release-owned changelog

* test(agents): retry session store fixture cleanup

* test(discord): cover configured plugin binding agent
2026-07-25 02:30:24 -07:00
ooiuuii 39c6db44fb fix(update): hide divergence when histories cannot be compared (#111946)
* fix(update): hide incomparable git divergence

Co-authored-by: luyifan <al3060388206@gmail.com>

* fix(update): handle dashed upstream refs

* fix(update): preserve older Git support

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 02:24:04 -07:00
Vincent Koc e9f2bd63a3 refactor(models): share config ref flattening (#113591) 2026-07-25 17:20:38 +08:00
Vitor Cepeda Lopes 2296e898e1 fix(release): stop Windows package descendants after timeout (#111956)
* fix(release): terminate Windows package command trees

* fix(release): type package runner test output

* fix(release): scope package runner normalization to Windows

* test(release): run package timeout proof on Windows CI

---------

Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 02:20:27 -07:00
Peter Steinberger 446816f751 test: table-drive followup scenarios, centralize sanitizer wiring, remove obsolete negatives (#113583)
* test(auto-reply): table-drive followup runner scenarios

* test(channels): centralize sanitizer wiring coverage

* test: remove obsolete negative coverage
2026-07-25 02:14:44 -07:00
Levi Hayes f78d958aca fix(gateway): streamed OpenAI-compatible requests fail with a spurious draining error (#113514)
* fix(gateway): retain root-work admission for streamed HTTP runs

Streaming requests to /v1/chat/completions and /v1/responses dispatch the
agent run from a detached `void (async () => {...})()` that intentionally
outlives the HTTP handler. The handler itself runs inside
runWithGatewayHttpWorkAdmission, which releases its root-work admission as
soon as it returns.

Because the detached run inherits that same AsyncLocalStorage store, it ends
up holding a *released* lease. isGatewaySubordinateWorkAdmissionClosed()
returns `current.released` for an inherited store, so every subordinate
session/lane admission the run subsequently requests is refused with
GatewayDrainingError - on a gateway that is not draining at all.

Symptoms: streamed turns fail partway with "Gateway is draining; new tasks
are not accepted", surfacing to OpenAI-compatible clients as a generic error
chunk. Non-streaming requests are unaffected, because they await the run
inside the handler's still-live admission.

Fix: retain the admission across the handler boundary with
retainGatewayRootWorkAdmissionContinuation() - the helper that already
exists for exactly this case ("Transfers an admitted request root to work
that intentionally outlives its handler") - and release it in the existing
finally block so drain accounting stays balanced.

* test(gateway): cover streamed HTTP admission lifetime

* test(gateway): satisfy deferred timer lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 02:14:30 -07:00
Vincent Koc 21667ef33c refactor(telegram): reuse shared error coercion (#113589) 2026-07-25 17:10:51 +08:00
destire-mio 0f92546408 fix(sdk): preserve zero values in normalized event IDs (#113349)
* fix(sdk): preserve zero values in event ids

* test(sdk): isolate zero event ID components

---------

Co-authored-by: destire-mio <248462155+destire-mio@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 02:07:59 -07:00
Peter Steinberger aba0b12014 refactor(browser): split Playwright session manager (#113585) 2026-07-25 01:58:10 -07:00
Peter Steinberger b03570fc60 refactor(infra): stage heartbeat runner (#113570) 2026-07-25 01:57:20 -07:00
Vincent Koc e4d6170237 refactor(matrix): reuse shared error coercion (#113586) 2026-07-25 16:54:55 +08:00
Peter Steinberger 48ab15851b test: consolidate Slack and QMD matrices (#113574) 2026-07-25 01:53:49 -07:00
Ben Badejo c61111ba93 fix(matrix): gateway startup stalls after repeated token rotation (#113489)
* fix(matrix): avoid scanning settled storage roots

* test(matrix): prove unsettled root fallback

---------

Co-authored-by: Benjamin Badejo <ben@benbadejo.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 01:52:41 -07:00
Peter Steinberger c5a2e9b9fb test(google-meet): deduplicate browser scenarios (#113573) 2026-07-25 01:51:07 -07:00
Vincent Koc e43d68896e fix(sqlite): recover hot rollback journals privately (#113580) 2026-07-25 16:47:27 +08:00
Peter Steinberger 93e0b7fd24 test: deduplicate plugin doctor install fixtures (#113572) 2026-07-25 01:46:53 -07:00
Vincent Koc 7f36147bda refactor(slack): reuse shared error coercion (#113581) 2026-07-25 16:41:46 +08:00
Peter Steinberger dd7f7ada7e feat(sessions): show preambles as live subtitles (#112958)
* feat(sessions): show preambles as live subtitles

* fix(sessions): harden preamble observer ordering

* fix(sessions): suppress duplicate preamble restore

* fix(sessions): preserve preamble observer lifecycle

* fix(ci): satisfy session subtitle checks

* fix(sessions): preserve terminal and preamble dedupe

* fix(sessions): finalize contextless terminal runs

* test(sessions): cover dormant contextless terminals

* fix(sessions): preserve queued preambles across dormancy
2026-07-25 01:26:50 -07:00
Peter Steinberger b0525e1a70 refactor(ai): split OpenAI Responses transport (#113569) 2026-07-25 01:23:28 -07:00