Commit Graph

42314 Commits

Author SHA1 Message Date
Peter Steinberger 08a3f5f949 test(docker): shorten Unix socket fixture paths (#119952) 2026-08-06 06:44:37 -07:00
Vincent Koc 52b8f9be80 fix(plugins): migrate Fish Audio plugin identity (#119900)
* fix(plugins): migrate Fish Audio plugin identity

* fix(plugins): tighten Fish Audio identity migration

* fix(plugins): follow catalog selector for id replacements

* fix(plugins): reject replacement install collisions

* refactor(plugins): reuse skipped update outcomes
2026-08-06 20:50:36 +08:00
Vincent Koc c4292bc8b2 fix(diagnostics): report exporter health in doctor and status (#119816)
* fix(diagnostics): report exporter health transitions

* fix(diagnostics): retire exporter health on shutdown

* test(diagnostics): enforce OTLP protobuf content type

* test(diagnostics): satisfy exporter test type contracts

* fix(diagnostics): redact endpoint-like exporter codes

* fix(diagnostics): coordinate exporter route health

* test(diagnostics): satisfy exporter health static gates

* fix(diagnostics): keep exporter health internal
2026-08-06 20:50:18 +08:00
Peter Steinberger b0c368ae34 test(agents): isolate lifecycle registry persistence (#119931) 2026-08-06 05:24:57 -07:00
Ayaan Zaidi 90e39c49e4 feat(skills): reviewer patch contract, active learning bias, shallow-turn accumulation
Self-learning reviewer edits existing skills via targeted patches: it quotes the exact live text (or appends a section) and the service composes the full body inside the receipt-pinned read that hash-binds the proposal — untouched content survives by construction, and patches auto-apply through the scanner-gated pipeline. Full-body rewrites and oversized-skill edits stay pending for the operator. The review prompt shifts to active capture within the existing evidence gates, and shallow same-sender turns accumulate per session (provider-identity scoped, zero-iteration and duplicate-run contracts honored, aborted provenance carried, bounded state) so quick corrections get reviewed with their own transcripts. Replaces closed #119856.
2026-08-06 17:52:03 +05:30
Dallin Romney d6fc4a2a95 refactor(qa): make module flows implementation-aware (#118069) 2026-08-06 19:51:28 +08:00
sinner c7de4413a9 fix(cron): reject unsupported generic timeout edits (#119899)
Co-authored-by: zyw02 <zyw02@users.noreply.github.com>

Punchcard-Session: cobalt-willow-summit-z1

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-06 19:45:59 +08:00
Peter Steinberger f7f270555c test(compaction): provide post-compact usage evidence (#119911) 2026-08-06 03:45:43 -07:00
Pavan Kumar Gondhi 818190bd26 fix(gateway): reject capabilities from invalidated clients (#119848) 2026-08-06 15:14:35 +05:30
Dirk f64d7fab21 fix(gateway): preserve plain-text HEAD metadata (#119822)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-06 17:39:16 +08:00
ruel225 4e141a0523 fix(config): use real newline in invalid-config log message (#119871)
formatInvalidConfigLogMessage used \\n (literal backslash-n) in a
template literal, producing literal text instead of a line break in
gateway startup logs. The sibling createInvalidConfigError already used
a real newline. Operators saw a single-line message with \n text
instead of a readable multi-line block.

Fixes #119870

Co-authored-by: ruel225 <ruel225@users.noreply.github.com>
2026-08-06 17:32:55 +08:00
Vincent Koc beda1e97c6 fix(onboarding): honor external gateway supervision (#119846)
Punchcard-Session: quiet-meadow-timber-mj
2026-08-06 17:26:43 +08:00
Pavan Kumar Gondhi 528c5e0817 fix(feishu): honor cross-context limits for message mutations [AI] (#119845)
* fix(feishu): guard native mutation targets

* fix(outbound): preserve direct resource actions
2026-08-06 14:38:24 +05:30
w33d 2ea567972c fix(diagnostics): attribute plugin LLM usage spans (#107937)
Emit usage once at the shared plugin completion boundary and expose host-derived plugin identity only on OTel usage spans. Preserve aggregate metric labels and cover the redacted Gateway path end to end.

Refs #98968

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com>
2026-08-06 16:55:53 +08:00
Ayaan Zaidi f99b6a48f7 fix(reply): dedupe room-event prompt envelope and make ambient turns cache-stable
Room-event turns now send the persisted attributed chat line as the active model body, so the turn replays byte-identically and the provider prefix cache survives ambient traffic. The room-event context block keeps only the marker, room backlog, and reply-policy directive: the duplicate marker, bare inbound_event_kind line, and Current event copy of the chatter are gone, and the dead Current event goal anchor is removed from inbound-meta. Net -18 production LOC; quiet-room behavior unchanged (message tool still required for visible replies).
2026-08-06 14:12:18 +05:30
Peter Steinberger d8147f81b7 test(models): align list mocks with prepared runtime (#119876) 2026-08-06 01:35:26 -07:00
Peter Steinberger 245dbacbe0 fix: agent exec loads installed harnesses locally (#119855)
* fix(agents): bind local plugin harness registry (#119852)

* test(agents): isolate local registry in command suites
2026-08-06 00:26:02 -07:00
clawsweeper[bot] ed40d0599b fix(plugins): keep targeted official updates on the core channel (#119799)
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
2026-08-06 15:06:49 +08:00
joshavant e4968af845 test: type CLI gate hook mock 2026-08-06 01:48:09 -05:00
joshavant 779eeaf1b2 fix: preserve auth health for blocked CLI runs 2026-08-06 01:48:09 -05:00
joshavant 43b1e375a9 fix: preserve healthy incompatible auth profiles 2026-08-06 01:48:09 -05:00
joshavant 9702134882 fix: settle Gemini CLI auth preparation failures 2026-08-06 01:48:09 -05:00
joshavant f461701d00 fix: quarantine expired CLI auth profiles 2026-08-06 01:48:09 -05:00
Onur Solmaz 1f10ef8050 fix(agents): recover once from critical tool loops (#118647)
* feat(agents): add bounded tool-loop recovery

* feat(agents): wire loop detection into batch recovery

* test(agents): cover bounded tool-loop recovery

* fix(agents): enforce loop thresholds within tool batches

* fix(agents): retain rejected loop batch evidence

* test(agents): update embedded session recovery fixture

* fix(agents): surface terminal loop recovery failures

* fix(agents): preserve loop recovery across retries

* fix(agents): isolate rejected loop evidence

* fix(agents): terminate native critical tool loops

* fix(agents): canonicalize tool loop actions

* fix(agents): preserve tool loop recovery guidance

* fix(agents): preserve code mode tool identity

* fix(agents): preserve prebatch loop evidence

* fix(agents): order native loop termination

* fix(agents): clean up rebased tool validation

* fix(agents): interrupt codex side turns on critical tool loops

* fix(agents): tighten loop recovery batch lifecycle

* fix(agents): drop unconsumed loop detector type export

* fix(agents): drop unconsumed loop relay exports

* test(agents): add agent subscribe to embedded session doubles

* fix(agents): scope critical loop recovery to embedded runs
2026-08-06 14:09:10 +08:00
Ayaan Zaidi 874c63318b fix(skills): remove regex correction capture; self-learning is reviewer-only
Deletes the deterministic regex capture path that templated raw chat text into skill proposals (junk like a proposal whose whole procedure was one slugified user message). All autonomous learning now flows through the isolated experience reviewer: it sees a bounded workspace skill list, prefers revising pending proposals or updating the governing skill over creating new ones, and treats durable user corrections as first-class evidence. Update proposals are reviewer-only (explicit opt-in) and never auto-apply, since the reviewer drafts them without the live skill body. Removes the producerless pending-suggestion session machinery. Regression test proves the junk path is gone; real-Telegram E2E verdict in the PR body.
2026-08-06 11:01:59 +05:30
Jerry-Xin b8f6086411 fix(tts): deliver Telegram final speech without text churn
Defer Telegram final-mode text until speech settles, then deliver one captioned voice note or a proven-safe text fallback.

Co-authored-by: Jerry-Xin <jerryxin0@gmail.com>
2026-08-06 10:41:40 +05:30
Yuval Dinodia b3fbe6f5d7 fix(gateway): keep uncommitted generated media while its session run is live (#119764)
…is live

Generated assistant media is stored with a null messageId and a transient
retention class until the assistant turn commits its transcript message and
attaches the record. The managed outgoing media GC reaped transient records
purely by age, so any turn still in flight past the 15 minute TTL had its
media records and files deleted before finalization; the later attach is
silently ineffective and the committed message keeps a permanently dead
media URL.

Cleanup now accepts a hasActiveSessionRun probe and skips the transient age
reap while the owning session still has a registered chat run. Both GC entry
points, the chat.history sweep and the maintenance sweep, supply the probe
from the gateway's registered chat run map, which spans admission through
finalization. Sessions without a live run keep the existing TTL behavior.

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-05 23:13:38 -05:00
wanyongstar 4788eec6e9 fix(cli): parse cron scratch --expected-revision as strict decimal (#119518)
The compare-and-swap revision option was parsed with raw Number(), so
hexadecimal (0x2) and scientific (1e2) values were silently accepted
and used as the CAS revision even though the validation message
requires a non-negative integer. Delegate to the shared
parseStrictNonNegativeInteger helper used across the CLI so
non-decimal input fails fast and no write is attempted.
2026-08-05 20:53:52 -07:00
wanyongstar f608d2e2f8 fix(auto-reply): mark truncated row lists in export-session warnings (#119230)
The skipped malformed transcript row warning prints the total count
followed by a row-number sample capped at 20, with no indication the
list is partial, so messages like "Skipped 25 ... rows 1, ..., 20"
read as if every skipped row were listed. Append an ellipsis when the
count exceeds the retained sample.
2026-08-05 20:53:40 -07:00
大村愛弥 793f602f80 fix: remove bodyless 400/413 from overflow patterns to prevent false compaction (#119596)
* fix: remove bodyless 400/413 from overflow patterns to prevent false compaction

PR #67024 fixed the failover classification path (errors.ts) to not
classify bodyless 400/422 as 'format' errors. However, the compaction
trigger path (isContextOverflow in overflow.ts) still has the pattern
/^4(?:00|13)\s*(?:status code)?\s*\(no body\)/i in OVERFLOW_PATTERNS.

This means a bodyless 400 from any provider triggers compaction via
checkCompaction() -> isContextOverflow(), even though PR #67024
ensured the failover reason is null (not 'format'). The two paths are
independent: failover classification and compaction triggering use
separate functions.

A bodyless 400 cannot be a context overflow — real overflow errors
from all major providers include a descriptive body. A bare 400 with
no body is a transient/malformed error that should surface to the
user, not trigger a compaction loop.

Remove the Cerebras-specific pattern from OVERFLOW_PATTERNS. If
Cerebras returns bodyless 400/413 for actual overflow, it should be
handled with a more specific pattern or NON_OVERFLOW_PATTERNS exclusion.

AI-assisted.

* fix(ai): avoid compacting on bodyless 400 errors

---------

Co-authored-by: lykeion-dev <lykeion-dev@users.noreply.github.com>
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-08-05 20:53:02 -07:00
Vincent Koc 4db44c6923 fix(diagnostics): close lifecycle spans reliably (#119791) 2026-08-06 11:40:24 +08:00
Alix-007 5120f051ad fix(qa-channel): honor canonical thread action fields (#111070)
* fix(qa-channel): honor canonical thread action fields

* fix(qa-channel): prefer canonical action targets

* test(qa-channel): split direct action coverage

* test(qa-channel): keep action suite below line limit
2026-08-05 20:40:01 -07:00
Vincent Koc 63cadcf11b fix(backup): skip transient gateway lock databases (#119782)
Reported by @AgentSolomon in #119757.

Fixes #119757

Punchcard-Session: amber-meadow-timber-8r
2026-08-06 11:26:47 +08:00
Peter Steinberger 465544792c test(agents): use canonical auth session fixtures (#119821) 2026-08-05 20:22:26 -07:00
Peter Steinberger 88b7baca7b test(doctor): align fast-path repair contracts (#119812) 2026-08-05 19:55:27 -07:00
Vincent Koc c37ba84f66 perf(agents): index subagent recovery ownership (#119793)
* perf(agents): benchmark indexed recovery ownership

* perf(agents): index recovery owner lookups
2026-08-06 10:08:04 +08:00
Jason (Json) f5125a7e56 fix(gateway): keep chat startup off catalog discovery (#119742)
* fix(gateway): keep chat startup off catalog discovery

* fix(gateway): keep startup contract leaf-only

* fix(gateway): preserve prepared startup projections
2026-08-05 19:59:43 -06:00
Peter Steinberger 6e4d387fed fix(test): keep TUI PTY suites in their owner lane (#119787) 2026-08-05 18:28:17 -07:00
Shakker c56ad42525 fix: grant host-authorized control ui owner access 2026-08-06 02:21:45 +01:00
licheer-zte 1e347e2c7a fix(worktrees): preserve registered roots during orphan cleanup (#119709)
Classify direct and nested checkout roots through Git worktree registration before recursive orphan cleanup, including unborn and canonicalized paths. Fail closed when checkout metadata cannot be inspected.


Punchcard-Session: amber-meadow-timber-8r

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-06 08:59:56 +08:00
HughTang a1064adb68 fix(diagnostics-otel): propagate exported span context (#112283)
* fix(diagnostics-otel): harness.run root span adopts diagnostic trace context

Fall back to internalOrTrustedParentContext when there is no active
tracked parent, so the openclaw.harness.run root span (and its whole
OTel subtree) adopts the diagnostic traceId instead of minting a new
OTel root. This lets spans propagated via the diagnostic traceparent
(e.g. a2a-gateway a2a.call / downstream a2a.task) share one trace with
the run internals.

* fix(diagnostics-otel): propagate exported span context

Co-authored-by: HughTang <44694613+HughTang@users.noreply.github.com>

* fix(diagnostics): break propagation import cycle

* fix(diagnostics): preserve trace propagation contracts

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-06 08:41:20 +08:00
WhatsSkiLL d28371e95d fix(worker): isolate state observer failures (#117507)
* fix(worker): isolate state listener failures

* fix(worker): isolate ready listener failures

Co-authored-by: WhatsSkiLL <284122573+IWhatsskill@users.noreply.github.com>

* fix(worker): isolate inference listener failures

---------

Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-05 17:35:43 -07:00
Patrick Erichsen 678a3c18a9 fix(gateway): finish successful sessions after timestamp races (#119752)
* fix(gateway): correlate session lifecycle by run

* test(qa): expect settled handoffs to survive restart quietly

* test(agents): split embedded run persistence coverage
2026-08-05 17:24:12 -07:00
Vincent Koc a20746e3ab fix(agents): fence restart recovery lifecycle (#119776) 2026-08-06 08:05:29 +08:00
Jason (Json) 3645e369a8 fix(ui): preserve chat history and active run timing (#119729)
* fix(ui): preserve chat history and active run timing

* test(ui): prove reconnect preserves active timer

* fix(gateway): keep recovery fallback within budget

* test(gateway): keep chat abort coverage within lint budget
2026-08-05 17:48:02 -06:00
Vincent Koc e41c574793 improve(gateway): defer inactive plugin runtime imports (#119733)
* perf(gateway): defer Talk relay cleanup imports

Punchcard-Session: coral-workshop-workshop-3f

* perf(acpx): defer Pi session catalog runtime

Punchcard-Session: coral-workshop-workshop-3f

* perf(google-meet): defer meeting runtime imports

Punchcard-Session: coral-workshop-workshop-3f

* improve(memory-core): defer scoped runtime access

Punchcard-Session: coral-workshop-workshop-3f

* perf(google-meet): defer SDK action helpers

Punchcard-Session: coral-workshop-workshop-3f
2026-08-06 07:38:24 +08:00
Vito Cappello 2a835768ae fix(auth): limit inline key cooldowns to credential failures (#119147)
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
2026-08-05 16:02:05 -07:00
Vincent Koc 397a60582a fix(diagnostics): preserve OTEL startup failure (#119747) 2026-08-06 06:41:24 +08:00
Jacqueline Henriksen 5ec4d9f82a fix(agents): seed fresh session identity before transcript append (#119473)
* fix(agents): seed fresh session identity before transcript append

* test(agents): prove fresh session persistence through gateway

* fix(agents): seed session identity on first transcript write

* fix(agents): atomically seed fresh session identity
2026-08-05 15:30:30 -07:00
Jason (Json) 6d2ba0d562 fix: steering reaches active runs across agent harnesses (#119594)
* fix steering delivery across harnesses

* fix steering across moving transcript leaves

* test: align steering queue expectations

* fix: harden active steering ownership

* fix: retain steering fallback admission

* fix: reject late copilot steering

* fix: prevent replay of accepted steering

* fix: bind acquired chat work admission

* fix: bind steering to active transcript branch
2026-08-05 16:02:04 -06:00