Commit Graph

13505 Commits

Author SHA1 Message Date
Shakker
0fc2faa0f4 test: narrow whatsapp mention fixture 2026-06-11 17:29:24 +01:00
Shakker
fdf3667e09 test: clean whatsapp alias assertions 2026-06-11 17:29:24 +01:00
Shakker
de9260f813 fix: keep whatsapp inbound aliases live 2026-06-11 17:29:24 +01:00
Marcus Castro
1bea7d8ef3 test(whatsapp): cover inbound context compatibility 2026-06-11 17:29:24 +01:00
Marcus Castro
008d785a80 test(whatsapp): update auto reply inbound fixtures 2026-06-11 17:29:24 +01:00
Marcus Castro
eebcb100b8 refactor(whatsapp): read inbound contexts in auto reply 2026-06-11 17:29:24 +01:00
Marcus Castro
b5295a6a34 refactor(whatsapp): introduce inbound message contexts 2026-06-11 17:29:24 +01:00
Ben Newell
cdb55b3edb fix(memory-core): retry narrative message reads (#89091)
* fix(memory-core): retry narrative message reads

* fix(memory-core): wait longer for narrative text
2026-06-11 20:36:18 +09:00
Dream Hunter
8d72cb9401 fix(memory): abort orphaned embedding work when memory_search times out (#91742)
* fix(memory): abort orphaned embedding work when memory_search times out

memory_search raced its 15s deadline with Promise.race and returned a clean
timeout to the agent, but the underlying embedQueryWithRetry loop kept
retrying (3 attempts x 60s) against the embedding backend with no consumer.
Thread the tool-owned AbortSignal through manager.search ->
embedQueryWithRetry -> runEmbeddingOperationWithTimeout so the deadline
cancels in-flight embedding work, stops the retry loop, and skips
fallback-provider activation for an absent caller.

Fixes #91718

* fix(memory): let the deadline result win before aborting the search

Abort listeners dispatch synchronously, so an abort-aware search could
reject the raced task before the timeout promise resolved and replace the
stable 'memory_search timed out after 15s' result with a provider-wrapped
abort error. Resolve the timeout first, then abort.

* fix(memory): scope deadline abort to builtin embeddings

* fix(memory): preserve deadline signal across fallback

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-06-11 20:36:11 +09:00
Vincent Koc
3883d7365e fix(qqbot): guard silent-final tool flushing 2026-06-11 20:09:55 +09:00
Syu
038da08073 fix(discord): clean migrated thread binding state (#89552)
* fix(discord): clean migrated thread binding state

* fix(discord): omit undefined thread binding fields

---------

Co-authored-by: Hex <hex@openclaw.ai>
2026-06-11 20:09:39 +09:00
Sliverp
7e88c287a1 fix(qqbot): flush tool output before silent non-streaming final (#92074)
* fix(qqbot): flush tool output before silent non-streaming final

* fix qqbot silent final delivery

* chore: drop local plugin runtime helper

* fix: suppress stale qqbot tool flush

* fix(qqbot): flush tool output before silent non-streaming final (#92074) (thanks @sliverp)

---------

Co-authored-by: Ubuntu <ubuntu@localhost.localdomain>
2026-06-11 18:28:32 +08:00
Leon GyeongMan Baek
96e1b8c3ba Google: show detailed Gemini CLI OAuth extraction failures (#41991)
* Google: preserve Gemini CLI OAuth failure context

Port the diagnostics-only fix to the bundled Google OAuth implementation so user-facing setup errors explain why automatic Gemini CLI client-config discovery failed.

Constraint: #54289 may remove or gate automatic Gemini CLI credential extraction
Rejected: Change extraction consent behavior here | security/product decision belongs in #54289
Confidence: medium
Scope-risk: narrow
Tested: pnpm test -- extensions/google/oauth.test.ts
Tested: pnpm check
Tested: pnpm format:check extensions/google/oauth.credentials.ts extensions/google/oauth.test.ts
Not-tested: full pnpm test suite

* Google: clarify Gemini bundle fallback diagnostic comment

Keep the follow-up limited to the explanatory comment so it matches the diagnostic error preservation added around bundle traversal failures.

Constraint: comment-only cleanup after diagnostics port
Confidence: high
Scope-risk: narrow
Tested: pnpm format:check extensions/google/oauth.credentials.ts
Not-tested: tests not run; comment-only change

* fix: resolve OAuth test rebase conflict
2026-06-11 19:24:52 +09:00
xydt-tanshanshan
865fdab075 fix(memory): preserve live SQLite index during swaps
Fixes #91216.

Preserve the live memory SQLite index during atomic reindex swaps by publishing the POSIX main DB with an overwrite rename, keeping target WAL/SHM sidecars rollbackable until publish succeeds, and refusing no-create post-swap reopens that would otherwise auto-create an empty DB.

Verification:
- node scripts/run-vitest.mjs extensions/memory-core/src/memory/manager.atomic-reindex.test.ts extensions/memory-core/src/memory/manager-db-probe.test.ts extensions/memory-core/src/memory/manager.self-heal-missing-identity.test.ts extensions/memory-core/src/memory/manager-reindex-state.test.ts extensions/memory-core/src/memory/manager.fts-only-reindex.test.ts extensions/memory-core/src/memory/manager.readonly-recovery.test.ts
- git diff --check origin/main...HEAD
- node scripts/run-oxlint.mjs extensions/memory-core/src/memory/manager-atomic-reindex.ts extensions/memory-core/src/memory/manager.atomic-reindex.test.ts extensions/memory-core/src/memory/manager-db.ts extensions/memory-core/src/memory/manager-db-probe.test.ts extensions/memory-core/src/memory/manager-sync-ops.ts
- .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main
- GitHub CI on 60df2b4178
2026-06-11 19:15:20 +09:00
openclaw-clownfish[bot]
c692fabeba fix(feishu): reply inside P2P direct-message threads (#92136)
* fix(feishu): keep P2P replies inside direct-message threads

* fix(clownfish): address review for ghcrawl-165996-agentic-merge (1)

* fix(clownfish): address review for ghcrawl-165996-agentic-merge (1)

Co-authored-by: LiaoyuanNing@TTC <259494737+LiaoyuanNing@users.noreply.github.com>

---------

Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: LiaoyuanNing@TTC <259494737+LiaoyuanNing@users.noreply.github.com>
2026-06-11 18:57:51 +09:00
Ayaan Zaidi
bd96e4d22d refactor(auto-reply): distill verbose commentary lane wiring 2026-06-11 08:18:04 +05:30
Ayaan Zaidi
317ba47543 test(discord): add onVerboseProgressVisibility to dispatch params type 2026-06-11 08:18:04 +05:30
Cameron Beeley
b25b8f396c fix(discord): yield the commentary draft while durable verbose progress is active
Discord consumes the dispatch verbose-progress visibility getter the same way
Telegram does: while the durable lane is delivering commentary as standalone
messages, the ephemeral progress draft skips its preamble lines so commentary
renders exactly once. Covered by an active/inactive regression pair.
2026-06-11 08:18:04 +05:30
Cameron Beeley
dc55a5b112 feat(telegram): route verbose progress payloads durably instead of into the streaming draft
With streaming on, the dispatcher diverted tool-kind payloads (including the
new durable commentary messages) into the ephemeral progress draft, where they
were discarded when the final answer arrived - so verbose runs lost their
progress record whenever streaming was enabled. While the durable verbose lane
is active (per the dispatch visibility getter), tool payloads are now sent as
real standalone messages and the draft yields its commentary lines; tool/plan
draft lines keep the draft since they have no durable counterpart. Reasoning
lane and tool status reactions are unaffected.
2026-06-11 08:18:04 +05:30
Shubhankar Tripathy
0bcabea9cc fix(discord): scope command-deploy cache by application id (#77367)
* fix(discord): scope command-deploy cache by application id

Multi-bot Discord setups share a single command-deploy-cache.json under the
state dir. Cache keys were unscoped (`global:reconcile`, `guild:<id>`), so a
later account whose command set hashed identically to an earlier account would
hit the shared hash and skip its own application's command reconcile entirely
— Discord's Integration panel showed 'This application has no commands' for
the secondary bot even though gateway connect, application id, and token were
all valid.

Scope every cache key with `app:<clientId>:` so each Discord application
reconciles independently. Add regression tests covering: two applications with
identical command sets each call REST against their own application; a single
application with the same command set still hits the persisted cache; the
on-disk cache JSON contains application-scoped keys.

Fixes #77359.

* fix(discord): merge on-disk hashes inside persistHashes to survive concurrent writes

Codex follow-up on #77359 noted that server-channels.ts can start multiple
Discord deployers concurrently, so two deployers that both load the cache
file before either persists end up with the second writer overwriting the
first writer's app-scoped key — defeating the rate-limit cache that the
file exists to provide.

Inside persistHashes, re-read the on-disk cache and merge it with our
in-memory entries before the rename. Our in-memory entries always win on
key collisions (we just produced them); on-disk entries we don't have in
memory are preserved. Refresh in-memory state after the write so future
writes from the same deployer also keep entries other deployers added.

This is the lighter of the two repairs the codex review suggested
(re-read/merge vs serialize writes); it covers the realistic case where
one deployer writes before the other persists. Add a regression test that
exercises the load-then-other-deployer-writes-then-persist sequence.

* fix(discord): serialize command-deploy cache persists via in-process mutex

Codex follow-up on #77367 noted: re-read-before-write inside persistHashes
isn't enough — two deployers running persistHashes in true parallel can
both read the same snapshot before either writes, and the later rename
overwrites the earlier writer's app-scoped entries.

Add a module-level Map<storePath, Promise<void>> mutex and wrap the
read-merge-write cycle in withCachePersistLock so concurrent persists for
the same on-disk path serialize. In-process is sufficient because Discord
deployers only run inside the gateway process.

New regression test fires three deployers via Promise.all on the same
tick and asserts all three application-scoped entries survive — pre-fix
this race lost at least one entry.

* fix(discord): add override modifier on StaticCommand.description to satisfy strict TS

Current main enables noImplicitOverride; the StaticCommand test helper
re-declares the concrete BaseCommand.description property, which now
requires an explicit 'override' modifier (TS4114).

* test(discord): suppress typescript/unbound-method on vitest mock refs

The createRest() helper returns vi.fn() handlers cast as RequestClient,
so expect(rest.get).toHaveBeenCalledTimes(...) triggers
typescript/unbound-method 12 times. File-level disable: these are
vitest mock identities, not unbound class methods.

* fix(discord): clean up command cache lock

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-06-10 22:45:54 -04:00
Vincent Koc
f76bdffd06 fix(bedrock): normalize Mythos minimal effort 2026-06-11 11:11:23 +09:00
Vincent Koc
abec88cfab fix(auth): apply runtime request overrides everywhere 2026-06-11 11:11:22 +09:00
Vincent Koc
25bea06596 fix(foundry): type runtime auth result 2026-06-11 11:11:22 +09:00
Vincent Koc
08655fb02b fix(foundry): bind auth and thinking contracts 2026-06-11 11:11:22 +09:00
Vincent Koc
76ce9d6d22 fix(foundry): expose Claude 4.6 max effort 2026-06-11 11:11:22 +09:00
Vincent Koc
cc344fee65 fix(foundry): make API labels exhaustive 2026-06-11 11:11:22 +09:00
Vincent Koc
78d621855d fix(foundry): label Anthropic Messages onboarding 2026-06-11 11:11:22 +09:00
Vincent Koc
f0bbe4d95e fix(bedrock): guard Mantle thinking options 2026-06-11 11:11:22 +09:00
Vincent Koc
fdf1ec9f5c fix(bedrock): route Mythos through Mantle 2026-06-11 11:11:22 +09:00
Vincent Koc
d6081f99ff fix(bedrock): keep optional thinking opt-in 2026-06-11 11:11:22 +09:00
Vincent Koc
819fc0037a fix(foundry): align Claude thinking contracts 2026-06-11 11:11:22 +09:00
Vincent Koc
bebe96b402 test(foundry): type auth lookup 2026-06-11 11:11:22 +09:00
Vincent Koc
818c3c276e fix(foundry): preserve canonical thinking identity 2026-06-11 11:11:22 +09:00
Vincent Koc
7d681ab603 fix(vertex): default Mythos to adaptive thinking 2026-06-11 11:11:22 +09:00
Vincent Koc
6b0f718b9a fix(providers): encode Mythos adaptive requests 2026-06-11 11:11:21 +09:00
Vincent Koc
9b57db3b60 fix(foundry): route bearer auth from headers 2026-06-11 11:11:21 +09:00
Vincent Koc
5e4a84e04f fix(vertex): preserve Mythos thinking policy 2026-06-11 11:11:21 +09:00
Vincent Koc
9ffb5407f7 fix(providers): reconcile Claude profile routing 2026-06-11 11:11:21 +09:00
Vincent Koc
4457ae3e35 fix(providers): preserve Claude output limits 2026-06-11 11:11:21 +09:00
Vincent Koc
aabb8498da fix(providers): bound Claude model matching 2026-06-11 11:11:21 +09:00
Vincent Koc
55384bc236 fix(foundry): clamp Mythos Preview thinking 2026-06-11 11:11:21 +09:00
Vincent Koc
9db8601235 fix(foundry): avoid stale setup metadata 2026-06-11 11:11:21 +09:00
Vincent Koc
2031603542 fix(providers): preserve Mythos max routing 2026-06-11 11:11:21 +09:00
Vincent Koc
b4aa520b07 fix(bedrock): preserve Mythos Preview thinking policy 2026-06-11 11:11:21 +09:00
Vincent Koc
4afe616f22 fix(providers): apply auth patch deletions 2026-06-11 11:11:21 +09:00
Vincent Koc
06312ad805 fix(foundry): preserve Sonnet output limits 2026-06-11 11:11:20 +09:00
Vincent Koc
c4493943e1 fix(foundry): clear API key auth on Entra setup 2026-06-11 11:11:20 +09:00
Vincent Koc
15806717d9 fix(foundry): infer selected Claude routes 2026-06-11 11:11:20 +09:00
Vincent Koc
0a8dfc21be fix(foundry): align Claude onboarding contracts 2026-06-11 11:11:20 +09:00
Vincent Koc
b66f0b6ca3 fix(foundry): use bearer auth for Claude 2026-06-11 11:11:20 +09:00