Commit Graph

78555 Commits

Author SHA1 Message Date
clawsweeper[bot] bc1f917163 fix(qqbot): remove stale data-directory diagnostic (#119849)
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
2026-08-06 17:09:36 +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
Vincent Koc c67556df31 fix(tooling): stop pnpm from reconciling shared worktree deps (#119863) 2026-08-06 16:58:01 +08:00
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
Patrick Erichsen 355c107c09 fix(macos): unblock first-launch gateway setup (#119831)
* fix(macos): stop writing retired config metadata

* fix(macos): guard packaged CLI bootstrap versions

* chore(macos): refresh native i18n inventory

* fix(macos): repair retired metadata before gateway start
2026-08-05 22:25:17 -07:00
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
pash-openai ddcc3fbd80 fix(slack): keep agent replies below newer messages (#119832)
* fix(slack): keep replies below messages sent while an agent is working

* fix(slack): preserve conversation order through final delivery
2026-08-05 21:42:38 -07:00
razshlomo 941e68bcf5 fix(workboard): card lists stall with large boards (#118848)
* perf(workboard): batch sqlite card child reads

* test(workboard): avoid global sqlite instrumentation

* test(workboard): use supported link type

---------

Co-authored-by: Raz <12373339+razshlomo@users.noreply.github.com>
Co-authored-by: yehezkel-assistant[bot] <3902212+yehezkel-assistant[bot]@users.noreply.github.com>
2026-08-05 21:25:23 -07:00
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
Alix-007 819f92bba5 fix(msteams): reject malformed OAuth token envelopes [AI-assisted] (#111638)
* fix(msteams): reject malformed OAuth token envelopes

* refactor(msteams): reuse canonical record guard
2026-08-06 03:57:33 +00: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 5f05410048 fix(diagnostics-otel): preserve zero model-call usage (#100115) 2026-08-06 11:47:50 +08:00
Vincent Koc 4db44c6923 fix(diagnostics): close lifecycle spans reliably (#119791) 2026-08-06 11:40:24 +08:00
Alix-007 2436a13d83 fix(memory): prevent remote errors from exposing credentials (#119666)
* fix(memory): redact credentials from remote errors

* fix(memory): redact full bearer token68 values

* fix(memory): redact bearer schemes case-insensitively

* fix(memory): redact short quoted bearer values
2026-08-05 20:40:18 -07: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
Alix-007 3954423725 fix(qqbot): require own account credential entries (#103371)
* fix(qqbot): require own account credential entries

* fix(qqbot): ignore inherited app ids when listing accounts

* fix(qqbot): require owned account containers

* style(qqbot): format approval account lookup

---------

Co-authored-by: Leon-SK668 <0668001470@xydigit.com>
2026-08-05 20:38:48 -07:00
Alix-007 ab74723229 fix(discord): prevent credentials from appearing in non-JSON errors (#119536)
* fix(discord): redact non-JSON API error details

* fix(discord): redact JSON API error details
2026-08-05 20:38:17 -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
qingminlong de27d8306e fix(memory): keep QMD file hints after stale docid misses (issue #113041) (#113515)
* fix(memory): keep qmd file hints after docid misses

* fix(memory): 不要将 hint-only 的 QMD 文档位置缓存到 docid 缓存中

当本地 docid 索引查询无结果时,使用 QMD 文件提示回退来解析文档位置。
但之前的代码将 hint-only 的结果也缓存到了 docPathCache 中,这导致
索引恢复后依然使用旧的回退位置。

修改:
1. qmd-document-resolver.ts: 分离索引查询结果和 hint 回退结果,
   只缓存来自索引查询的 pickDocLocation 结果。
2. qmd-manager.test.ts: 添加索引恢复回归测试,验证索引为空时
   使用 hint 回退,索引恢复后使用索引中的记录而不是缓存的回退位置。

Co-Authored-By: Claude <noreply@anthropic.com>

* test(memory): expect qmd hint provenance

* chore(memory): clarify QMD hint cache behavior

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-08-05 19:56:03 -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 37aa0b964e docs: correct dashboard auth precedence (#119785) 2026-08-06 02:21:54 +01:00
Shakker 47591e7b11 docs: document control ui owner handoff 2026-08-06 02:21:45 +01: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
Alix-007 f5849f134f fix(matrix): prevent shared client key collisions (#119667) 2026-08-05 17:44:58 -07: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
Vincent Koc 7dcb1ad5ce fix(qa): attest realized profile executions (#119761)
* fix(qa): attest profile execution plans

Persist the canonical profile membership partition and scheduler-owned expected and observed execution cells in QA evidence. Validate successful evidence completeness and bind the canonical plan digest into workflow manifests.

Punchcard-Session: silver-meadow-lantern-vx

* test(ci): exercise QA evidence artifact round trips

Punchcard-Session: silver-meadow-lantern-vx

* fix(qa): record only realized profile executions

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
Co-authored-by: ruel225 <ruel225@users.noreply.github.com>
Punchcard-Session: silver-meadow-lantern-vx

* test(qa): type realized channel evidence

Punchcard-Session: silver-meadow-lantern-vx

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
Co-authored-by: ruel225 <ruel225@users.noreply.github.com>
2026-08-06 08:33:02 +08: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 2fc2fc930b improve(ollama): reduce inactive startup cost (#119745)
* improve(ollama): defer optional runtime imports

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

* improve(ollama): isolate lazy runtime modules

* improve(ollama): preserve lazy runtime boundaries
2026-08-06 07:40:22 +08: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