Commit Graph

31725 Commits

Author SHA1 Message Date
Tak Hoffman
a5d70edf53 fix(bootstrap): workspace bootstrap prompt routing 2026-04-17 00:49:06 -05:00
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
Peter Steinberger
a2f2e5738e test: trim messaging test hotspots 2026-04-17 04:10:55 +01:00
chaoliang yan
35fb3f7e1c fix: preserve models.json baseUrls on regen (#67893) (thanks @lawrence3699)
* models-config: preserve existing models.json baseUrls

* test: distill models-config baseUrl regression test

* fix: preserve models.json baseUrls on regen (#67893) (thanks @lawrence3699)

---------

Co-authored-by: lawrence3699 <lawrence3699@users.noreply.github.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-17 08:32:35 +05:30
chaoliang yan
a189394590 fix: guard WhatsApp setup prompt values (#67895) (thanks @lawrence3699)
* fix(whatsapp): guard setup prompt values

* fix(whatsapp): preserve allowFrom invalid input details

* fix: guard WhatsApp setup prompt values (#67895) (thanks @lawrence3699)

---------

Co-authored-by: lawrence3699 <lawrence3699@users.noreply.github.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-17 08:12:55 +05:30
Ayaan Zaidi
685f9903ec fix: unify responses api capability detection (#67918)
* fix: unify responses api capability detection

* fix: unify responses api capability detection (#67918)
2026-04-17 08:03:19 +05:30
Peter Steinberger
24431e5114 build: declare qa-lab aimock runtime dependency 2026-04-17 02:57:18 +01:00
Peter Steinberger
ee856ab31f test: speed up safe-bins exec harness 2026-04-17 02:57:18 +01:00
Peter Steinberger
acd86a06cd test: preserve tool helpers in embedded runner mocks 2026-04-17 02:57:18 +01:00
Peter Steinberger
77e6e4cf87 refactor: move memory embeddings into provider plugins 2026-04-17 02:57:18 +01:00
Peter Steinberger
7e9ff0f86e test: reuse system-run temp fixtures 2026-04-17 02:49:37 +01:00
Peter Steinberger
12a59b0a18 test: trim hotspot wait overhead 2026-04-17 02:47:09 +01:00
Gustavo Madeira Santana
baf11b83d7 Check: avoid duplicate boundary prep
Rely on the lint wrapper to prepare extension package-boundary artifacts during pnpm check instead of invoking the same prep script again at the end.

Add a script regression so the duplicate check path does not return.
2026-04-16 21:37:08 -04:00
Peter Steinberger
3a59eddd07 test: reduce hotspot fixture overhead 2026-04-17 02:37:00 +01:00
Val Alexander
2cfb660a9b feat(ui): overhaul settings and slash command UX (#67819) thanks @BunsDev
Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com>
2026-04-16 20:29:11 -05:00
Gustavo Madeira Santana
42805d26cf QA Matrix: exit cleanly on failure
Make the Matrix QA CLI single-shot exit contract symmetric: artifact-backed failures now print the preserved error, flush stdio, and exit with code 1 instead of waiting on Matrix native handles.

Keep an opt-out for direct test harnesses with OPENCLAW_QA_MATRIX_DISABLE_FORCE_EXIT.
2026-04-16 21:24:59 -04:00
Gustavo Madeira Santana
7e659e168b QA Matrix: isolate scenario coverage
Add the Matrix subagent-thread scenario and route it through the contract runner while preserving the current missing-hook failure as an explicit scenario result.

Give E2EE scenarios isolated rooms and storage keys so lifecycle tests do not reuse stale encrypted state across scenarios.
2026-04-16 21:24:59 -04:00
Gustavo Madeira Santana
94081d8863 Matrix: refresh crypto bootstrap state
Refresh published cross-signing keys before bootstrap imports secret-storage keys, add sync-filter plumbing for QA E2EE clients, and document the remaining upstream key-backup cache noise without suppressing SDK logs.
2026-04-16 21:24:59 -04:00
Gustavo Madeira Santana
bb7e9823a8 QA Lab: add provider registry
Move mock and live provider behavior behind provider-owned definitions so suite, manual, Matrix, and transport lanes share defaults, auth staging, model config, and standalone server startup.

Add AIMock as a first-class local provider mode while keeping mock-openai as the scenario-aware deterministic lane.
2026-04-16 21:24:59 -04:00
Gustavo Madeira Santana
4acab55db8 Matrix: add plugin changelog 2026-04-16 21:24:58 -04:00
Peter Steinberger
f4853115a9 test: trim more hotspot overhead 2026-04-17 02:20:02 +01:00
Peter Steinberger
6ba8626c25 test: trim remaining hotspot tests 2026-04-17 02:07:26 +01:00
Peter Steinberger
dbc8179f31 test: narrow hotspot mocks 2026-04-17 01:53:16 +01:00
Peter Steinberger
cd330f5f98 test: isolate gemini embedding request helpers 2026-04-17 01:46:47 +01:00
Peter Steinberger
fd48dfa68f test: trim memory and mcp hotspots 2026-04-17 01:39:39 +01:00
Peter Steinberger
2e08c77582 test: slim provider registry mocks 2026-04-17 01:29:12 +01:00
Peter Steinberger
a2753e2d9f fix: keep Opus 4.7 effort separate from adaptive thinking 2026-04-17 01:26:11 +01:00
Peter Steinberger
c73a6d2f68 feat: support xhigh for Claude Opus 4.7 2026-04-17 01:26:11 +01:00
Peter Steinberger
272536015f test: slim runtime hotspot mocks 2026-04-17 01:15:31 +01:00
Peter Steinberger
59b98334f6 test: narrow hotspot boundaries 2026-04-17 01:10:48 +01:00
Peter Steinberger
0dc4c4076c chore: bump version to 2026.4.16 2026-04-17 00:45:04 +01:00
Peter Steinberger
26db52ed69 build: restore qa lab updater sidecar 2026-04-17 00:44:35 +01:00
Peter Steinberger
0c5bdbde89 chore: update mac appcast for 2026.4.15 2026-04-17 00:39:15 +01:00
Peter Steinberger
5c1c52f870 build: bump protobufjs override 2026-04-17 00:22:58 +01:00