Commit Graph

31757 Commits

Author SHA1 Message Date
Luke Fornieri
d7c14b5c7b fix(memory-core): silence expected 'missing scope: operator.admin' in dreaming cleanup
The dreaming cron's narrative cleanup calls subagent.deleteSession, which
dispatches sessions.delete (ADMIN_SCOPE). From a background cron there is
no inherited operator scope, so the plugin subagent falls through to a
synthetic operator client that intentionally defaults to [WRITE_SCOPE] and
does not mint admin (codified by 'rejects fallback session deletion
without minting admin scope' in src/gateway/server-plugins.test.ts).

Result: every dreaming cycle logged
  memory-core: narrative session cleanup failed for <phase> phase: missing scope: operator.admin

The cleanup was already best-effort (try/catch), but the warn surfaced to
users on every cycle and made healthy instances look broken.

Treat the 'missing scope: operator.admin' case as an expected no-op and
suppress the warn for just that specific error. Any other cleanup error
(network, timeout, etc.) still surfaces as warn.

Adds a test locking in the new behavior; existing test covering non-scope
cleanup failures continues to pass unchanged.
2026-04-17 16:53:58 +10:00
Gustavo Madeira Santana
89706d323c Docs: add test performance guardrails 2026-04-17 02:23:49 -04:00
Gustavo Madeira Santana
e4c4f955b3 Tests: restore context-engine usage proof 2026-04-17 02:23:49 -04:00
Gustavo Madeira Santana
74c198f2e8 Tests: slim context engine runtime coverage 2026-04-17 02:23:49 -04:00
Peter Steinberger
0ee5baf6c5 ci: retry failed custom checkouts 2026-04-17 07:20:51 +01:00
Peter Steinberger
1ffc02e930 test: trim duplicate provider auth onboarding cases 2026-04-17 07:19:23 +01:00
EE
1ce2596195 matrix: fix sessions_spawn --thread subagent session spawning (#67643)
Merged via squash.

Prepared head SHA: 1e5127e217
Co-authored-by: eejohnso-ops <238848106+eejohnso-ops@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-17 02:17:56 -04:00
Peter Steinberger
857b9cd326 test: reduce auth choice fixture churn 2026-04-17 07:15:28 +01:00
Peter Steinberger
9d5ab4a54c test: mock health status config boundaries 2026-04-17 07:15:28 +01:00
Peter Steinberger
299694d721 test: mock onboard config io boundary 2026-04-17 07:15:28 +01:00
Peter Steinberger
2713089220 test: mock legacy state plugin boundaries 2026-04-17 07:15:28 +01:00
Peter Steinberger
b945248650 test: mock channel install boundaries 2026-04-17 07:15:28 +01:00
Peter Steinberger
b1a3ad49a4 test: mock doctor preview channel boundaries 2026-04-17 07:15:27 +01:00
Peter Steinberger
c66f16ac55 test: trim doctor command hotspots 2026-04-17 07:15:27 +01:00
Peter Steinberger
92859357bb test: isolate agent auth and spawn hotspots 2026-04-17 07:15:27 +01:00
Peter Steinberger
dd9d2ebd01 test: stabilize MCP startup disposal race 2026-04-17 07:15:27 +01:00
Peter Steinberger
5817a76236 test: merge browser contract server suites 2026-04-17 07:15:27 +01:00
Peter Steinberger
a0d9598425 test: narrow ollama provider discovery setup 2026-04-17 07:15:27 +01:00
Peter Steinberger
daaebb8558 test: split browser snapshot target helper 2026-04-17 07:15:27 +01:00
Peter Steinberger
f57ce21d73 test: trim process-backed agent assertions 2026-04-17 07:15:27 +01:00
Peter Steinberger
b71c91022b test: collapse exec preflight parser cases 2026-04-17 07:15:27 +01:00
Peter Steinberger
d07c921ae3 test: trim provider extra-param imports 2026-04-17 07:15:27 +01:00
Peter Steinberger
132d3c76a0 test: reuse browser server harness imports 2026-04-17 07:15:27 +01:00
Peter Steinberger
35dcd06764 test: trim agent test hotspots 2026-04-17 07:15:27 +01:00
Gustavo Madeira Santana
7ae670e501 Tests: fast-path Slack message tool discovery 2026-04-17 02:00:26 -04:00
Gustavo Madeira Santana
878f2122e5 Tests: fast-path Matrix ACP thread binding 2026-04-17 02:00:26 -04:00
Gustavo Madeira Santana
807c6648f9 Tests: fast-path gateway auth bypass discovery 2026-04-17 02:00:26 -04:00
Gustavo Madeira Santana
178c36532d Tests: isolate perf-sensitive env state 2026-04-17 02:00:26 -04:00
Ayaan Zaidi
26f7198eda fix(memory-core): preserve vector dims on readonly recovery 2026-04-17 11:22:56 +05:30
Ayaan Zaidi
bec52e5f7e fix: clear compaction replay after visible boundaries (#67993) 2026-04-17 11:18:22 +05:30
Ayaan Zaidi
5aad79571e fix(telegram): clear compaction replay after visible boundaries 2026-04-17 11:18:22 +05:30
Ayaan Zaidi
671579663b fix: preserve post-stream error payloads (#67991)
* fix(reply): preserve post-stream error payloads

* fix: preserve post-stream error payloads (#67991)
2026-04-17 11:11:37 +05:30
Rubén Cuevas
7b0e950e09 fix: dedupe degraded sqlite-vec warnings (#67898) (thanks @rubencu)
* Agents: dedupe bootstrap truncation warnings

* Memory: dedupe sqlite-vec degradation warnings

* Memory: align degraded vector warning

* test(memory-core): remove stale vector warning arg

* fix(memory-core): reset degraded warning on vector reset

* fix(memory-core): preserve warning latch across reindex rollback

* fix: dedupe degraded sqlite-vec warnings (#67898) (thanks @rubencu)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-17 11:09:14 +05:30
Chinar Amrutkar
8205de84a9 fix: clear stale telegram ACP bindings on startup (#67822) (thanks @chinar-amrutkar)
* fix(telegram): clean up thread bindings to stale/failed ACP sessions on startup

When loading persisted thread bindings on manager creation, validate each
ACP session against the session store. Remove bindings where:
- Session entry doesn't exist (deleted externally)
- Session status is failed/killed/timeout
- ACP runtime state is 'error'

This addresses issue #60102 where Telegram DMs remained routed to stale
ACP sessions even after restart, because the binding file persisted
across restarts without validating the target session was still valid.

* fix(telegram): guard against null session entry and transient store read failures

Address review comments on PR #67822:

1. Skip bindings when readAcpSessionEntry returns null or when
   session store is temporarily unreadable (storeReadFailed: true).
   Without this, a transient I/O error would mark all ACP bindings
   as stale and delete them on every startup.

2. Only set needsPersist when bindings were actually removed.
   Previously, stale session keys from OTHER accounts could set
   needsPersist=true even when zero bindings were removed for
   the current account — causing spurious disk writes.

Also clean up redundant optional chaining on entry.status now
that we guard against undefined/nullable sessionEntry.

* perf(telegram): dedupe ACP session reads in startup cleanup

Cache readAcpSessionEntry calls by targetSessionKey. Multiple bindings
to the same ACP session now result in a single session store read instead
of one read per binding.

Addresses chatgpt-codex-connector P2 review comment on PR #67822.

* fix(telegram): skip non-ACP session keys in stale binding cleanup

Address chatgpt-codex-connector P1 review comment on PR #67822:

Plugin-bound Telegram conversations use "plugin-binding:*" keys
with targetKind === "acp", but these are NOT ACP runtime sessions.
readAcpSessionEntry() returns no entry for them, so !sessionEntry.entry
would classify them as stale and delete them on every startup.

Now checks isAcpSessionKey(binding.targetSessionKey) to skip plugin-bound
sessions from the stale session cleanup scan.

Also clarifies the comment to explain why we use targetKind === "acp"
// together with isAcpSessionKey() check.

* fix(telegram): import isAcpSessionKey from sessions/session-key-utils

isAcpSessionKey is not re-exported from openclaw/plugin-sdk/routing.
Fix import to use the correct subpath: openclaw/sessions/session-key-utils.

Addresses chatgpt-codex-connector P1 review comment on PR #67822.

* fix(telegram): import from relative path, remove unused variable

- Import isAcpSessionKey from relative path ../../sessions/session-key-utils.js
  (not openclaw/sessions/session-key-utils which doesn't exist)
- Remove unused 'bindings' variable in for-of loop

Addresses CI failures on PR #67822.

* fix(telegram): export isAcpSessionKey from plugin-sdk/routing

isAcpSessionKey lives in src/routing/session-key.ts, which is already
exported via openclaw/plugin-sdk/routing. Re-export it from routing.ts
so extensions can import via the public plugin-sdk path.

Fixes chatgpt-codex-connector P1: relative path ../../sessions/session-key-utils.js
doesn't exist in the build output, making the Telegram extension fail
module resolution before startup cleanup can run.

* test(telegram): cover startup ACP binding cleanup

* fix: clear stale telegram ACP bindings on startup (#67822) (thanks @chinar-amrutkar)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-17 11:03:36 +05:30
Rubén Cuevas
c65f356ddc fix: keep telegram transient preview across compaction retry (#66939) (thanks @rubencu)
* fix(telegram): keep transient previews across compaction

* test(telegram): cover suppressed approval previews after compaction

* fix(telegram): preserve delayed message-start boundaries

* fix: keep telegram transient preview across compaction retry (#66939) (thanks @rubencu)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-17 10:57:46 +05:30
Rubén Cuevas
7e18c07e41 fix: dedupe repeated bootstrap truncation warnings (#67906) (thanks @rubencu)
* Agents: dedupe bootstrap truncation warnings

* Agents: normalize bootstrap warning cache bookkeeping

* fix(agents): scope bootstrap warning dedupe by workspace

* refactor(agents): simplify bootstrap warning wrapper

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-17 10:54:15 +05:30
Ayaan Zaidi
3fe8b24c4e fix: note plugin registration rollback in changelog (#67941) 2026-04-17 10:14:00 +05:30
Ayaan Zaidi
c95507978f fix(plugins): tighten register rollback 2026-04-17 10:14:00 +05:30
Ayaan Zaidi
59d07f0ab4 fix(plugins): roll back failed register globals 2026-04-17 10:14:00 +05:30
Ayaan Zaidi
5c1d6feb33 test(plugins): fix sync register call sites 2026-04-17 10:14:00 +05:30
Ayaan Zaidi
e8fd148437 fix(plugins): roll back failed register side effects 2026-04-17 10:14:00 +05:30
Ayaan Zaidi
2a283e87a7 fix(plugins): enforce synchronous registration 2026-04-17 10:14:00 +05:30
Ayaan Zaidi
15b2827fc1 test(gateway): stabilize canvas auth fetch retries 2026-04-17 09:59:12 +05:30
Ayaan Zaidi
65645ec54f fix(agents): refresh bundle command discovery 2026-04-17 09:59:03 +05:30
Gustavo Madeira Santana
e8ae3901b6 Tests: scope grouped benchmark artifacts 2026-04-16 23:45:57 -04:00
Gustavo Madeira Santana
8e444ac5a6 Tests: add grouped performance report benchmark 2026-04-16 23:43:06 -04:00
Ayaan Zaidi
6b45ba88a1 fix: reuse shared plugin discovery cache across workspaces (#67940) 2026-04-17 08:54:58 +05:30
Ayaan Zaidi
353950894a test(plugins): address discovery review feedback 2026-04-17 08:54:58 +05:30
Ayaan Zaidi
9da4d5f5df fix(plugins): reuse shared discovery cache 2026-04-17 08:54:58 +05:30
Peter Steinberger
c6af0437c9 test: avoid postinstall fixture installs 2026-04-17 04:10:55 +01:00