Commit Graph

76788 Commits

Author SHA1 Message Date
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
Vincent Koc d3d25737cf fix(qa): recognize portable Slack commentary lane (#119698)
Punchcard-Session: silver-meadow-lantern-vx
2026-08-06 07:18:12 +08:00
Vincent Koc b269e652bc chore(codex): bump app-server to 0.146.1 2026-08-06 07:11:37 +08:00
Ayaan Gazali 11757fecd4 docs(slack): document retired Socket Mode tuning cleanup (#119328)
* docs(slack): drop retired socketMode transport tuning

channels.slack.socketMode is rejected by Slack config validation, pinned by
the 'rejects retired Socket Mode ping/pong transport tuning' schema test, and
the client pong timeout is now a hardcoded 15s constant. The page still told
operators to configure it.

* fix(slack): migrate retired socketMode with doctor instead of hand-editing

The retired object fails schema validation at root and account scope, so the
docs previously left manual removal as the only recovery. Slack already owns
legacyConfigRules and normalizeCompatibilityConfig, so the strip belongs there.

* test(slack): narrow the doctor contract config record for check-test-types

normalizeCompatibilityConfig returns a possibly-absent channel entry, so the
socketMode assertions need expectDefined before indexing.

* docs(slack): describe socketMode retirement by observed behavior

openclaw config validate reports a config carrying the retired object as valid,
so the earlier 'validation rejects it / fails to load' wording was wrong. The
observable facts are that it is not read and that doctor --fix removes it.

* revert(slack): drop the duplicate socketMode doctor migration

Core already strips channels.slack.socketMode at root and account scope in
legacy-config-migrations.runtime.retired.ts via visitChannelEntries, so the
plugin-side rule was duplicate policy. Keeps this PR to the docs correction.

* docs(slack): state what doctor actually cleans up for socketMode

Doctor flags retired layout knobs with a general notice, and --fix removes the
three named fields and drops the object only once empty, so an unknown key
inside it survives.
2026-08-05 16:02:57 -07: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 b4e82951e7 perf(agents): isolate concurrency benchmark workers (#119749) 2026-08-06 06:49:36 +08: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
Peter Steinberger 97505b723c fix(cli): report accurate filtered node totals (#119744) 2026-08-05 14:58:48 -07:00
Peter Steinberger ad80956428 fix(skills): keep installed verdicts scoped to publisher (#119672)
* fix(skills): preserve owner-qualified security verdicts

* fix(skills): keep verdict helper internal

* fix(skills): bound legacy verdict fallbacks
2026-08-05 14:57:56 -07:00
Vincent Koc 92b4757227 fix(diagnostics): honor signal-specific OTLP protocols (#119708)
* fix(diagnostics): honor signal-specific OTLP protocols

* fix(docker): forward signal-specific OTLP protocols
2026-08-06 05:39:26 +08:00
Vincent Koc 7b8bba26c9 fix(qa): report cleanup failures truthfully (#119727)
* fix(qa): report cleanup failures truthfully

Punchcard-Session: silver-valley-valley-dt

* fix(qa): satisfy cleanup runner static checks

Punchcard-Session: silver-meadow-lantern-vx
2026-08-06 05:16:35 +08:00
Peter Steinberger e9e6ef3edb fix: keep completed actions visible after settled finalization (#119726)
* fix(agents): preserve settled finalization evidence

* fix(agents): retain cron denial after finalization
2026-08-05 14:04:05 -07:00
Vincent Koc 2db3431f4a fix(agents): rearm yielded requester wake (#119696)
Punchcard-Session: silver-valley-valley-dt
2026-08-06 03:59:51 +08:00
Vincent Koc 880dde979b fix(diagnostics): preserve telemetry during service shutdown (#119705)
* fix(diagnostics): preserve otel service shutdown lifecycle

* test(diagnostics): type OTEL unsubscribe callback

* test(diagnostics): normalize async stop assertion

* fix(plugins): preserve ordinary stop handling
2026-08-06 03:58:06 +08:00
sunlit-deng 66bfafa416 fix(clickclack): preserve MIME extension for unnamed uploads (#119646) 2026-08-05 12:52:07 -07:00
Vincent Koc 5eb7eddce6 fix(memory): keep post-ready RPCs responsive (#119710)
Punchcard-Session: coral-workshop-workshop-3f
2026-08-06 03:35:32 +08:00