Commit Graph

71890 Commits

Author SHA1 Message Date
Vincent Koc
4df130d0be fix(anthropic): honor opus 5 aliases 2026-07-25 19:30:49 +08:00
Vincent Koc
85181e9db7 test(anthropic): allow fast capacity overloads 2026-07-25 19:30:49 +08:00
Vincent Koc
8373a55116 fix(anthropic): trust fallback boundary events 2026-07-25 19:30:49 +08:00
Vincent Koc
a69001850b fix(anthropic): canonicalize fallback model identities 2026-07-25 19:30:49 +08:00
Vincent Koc
aaea5c67ab test(anthropic): cover fallback serving transitions 2026-07-25 19:30:49 +08:00
Vincent Koc
604daecafc fix(anthropic): price fallback serving models 2026-07-25 19:30:48 +08:00
Vincent Koc
90b75a1e63 test(anthropic): lock opus 5 provider identities 2026-07-25 19:30:48 +08:00
Vincent Koc
b4348fca42 docs(anthropic): document opus 5 runtime contracts 2026-07-25 19:30:48 +08:00
Vincent Koc
3764d6739e fix(anthropic): use native fast mode for opus 2026-07-25 19:30:48 +08:00
Vincent Koc
18d4128215 fix(anthropic): enable default fallback for opus 5 2026-07-25 19:30:48 +08:00
Vincent Koc
e42401bce7 refactor(anthropic): centralize 1m context capability 2026-07-25 19:30:48 +08:00
Vincent Koc
d4794c90a0 test(sqlite): cover interrupted canonical index repair (#113624) 2026-07-25 19:27:17 +08:00
Vincent Koc
92188c9e5a refactor(matrix): use shared string normalization (#113627) 2026-07-25 19:26:25 +08:00
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