Gustavo Madeira Santana
a8f433d611
BlueBubbles: move group policy behind plugin boundary
2026-03-18 03:40:42 +00:00
Gustavo Madeira Santana
bf8702973f
Google Chat: move group policy behind plugin boundary
2026-03-18 03:39:25 +00:00
Gustavo Madeira Santana
1f5f3fc2ef
iMessage: move group policy behind plugin boundary
2026-03-18 03:38:01 +00:00
Gustavo Madeira Santana
c29458d407
WhatsApp: move group policy behind plugin boundary
2026-03-18 03:38:01 +00:00
Peter Steinberger
9c12b41c52
fix: restore plugin sdk exports after rebase
2026-03-17 20:36:03 -07:00
Gustavo Madeira Santana
7ba8dd112f
Telegram: move group policy behind plugin boundary
2026-03-18 03:32:51 +00:00
Vincent Koc
f8f9e06b58
Guardrails: pin runtime-api export seams ( #49371 )
...
* Guardrails: pin runtime-api export seams
* Guardrails: tighten runtime-api keyed lookup
* Changelog: note runtime-api guardrails
* Tests: harden runtime-api guardrail parsing
* Tests: align runtime-api guardrails with current seams
2026-03-17 20:30:14 -07:00
Gustavo Madeira Santana
0bfaa36126
Discord: move group policy behind plugin boundary
2026-03-18 03:30:02 +00:00
Peter Steinberger
9350cb19dd
refactor: deduplicate plugin setup and channel config helpers
2026-03-18 03:28:05 +00:00
Gustavo Madeira Santana
9e556f75f5
Slack: move group policy behind plugin boundary
2026-03-18 03:26:21 +00:00
Vincent Koc
2f21eeb3cb
Plugins: internalize bluebubbles SDK imports
2026-03-17 20:21:00 -07:00
Gustavo Madeira Santana
1777b99ccc
Signal: move message actions behind plugin boundary
2026-03-18 03:19:35 +00:00
Gustavo Madeira Santana
28b888cbcd
Slack: move message actions behind plugin boundary
2026-03-18 03:14:32 +00:00
Peter Steinberger
cd5c2f4cb2
refactor: dedupe channel plugin shared assembly
2026-03-17 20:13:52 -07:00
Vincent Koc
3cc83cb81e
Plugins: internalize msteams SDK imports
2026-03-17 20:11:24 -07:00
Peter Steinberger
fa34cb887d
fix: resolve rebase export collisions
2026-03-17 19:53:32 -07:00
Peter Steinberger
5b2c5ee2bc
refactor: remove remaining extension src imports
2026-03-17 19:53:32 -07:00
Vincent Koc
889bb8a78a
Plugins: internalize matrix and feishu SDK imports
2026-03-17 19:47:25 -07:00
Peter Steinberger
1313767825
refactor: enforce plugin boundary seams
2026-03-17 19:45:36 -07:00
Gustavo Madeira Santana
1c6676cd57
Plugins: remove first-party legacy message discovery shims
2026-03-18 02:17:40 +00:00
Gustavo Madeira Santana
ed7269518f
Tlon: fix plugin-sdk import boundaries
2026-03-18 02:12:53 +00:00
Gustavo Madeira Santana
b3ae50c71c
Slack: move action runtime into extension
2026-03-18 02:08:08 +00:00
Gustavo Madeira Santana
c3386d34d2
Telegram: move action runtime into extension
2026-03-18 02:08:07 +00:00
Gustavo Madeira Santana
9df3e9b617
Discord: move action runtime into extension
2026-03-18 02:08:07 +00:00
Gustavo Madeira Santana
4c36436fb4
Plugin SDK: add legacy message discovery helper
2026-03-18 02:08:07 +00:00
Vincent Koc
d3fc6c0cc7
Plugins: internalize mattermost and tlon SDK imports
2026-03-17 19:05:51 -07:00
Gustavo Madeira Santana
a14ad01d66
Plugin SDK: centralize message tool discovery and context
2026-03-17 23:48:43 +00:00
Gustavo Madeira Santana
f118191182
Plugin SDK: break line and nostr export cycles
2026-03-17 23:22:22 +00:00
Vincent Koc
af63b72901
Plugins: internalize nextcloud talk SDK imports
2026-03-17 15:58:00 -07:00
Josh Lehman
2f65ae1b80
fix: break Synology Chat plugin-sdk reexport cycle ( #49281 )
...
Build failed because src/plugin-sdk/synology-chat.ts reexported setup symbols through extensions/synology-chat/api.ts, and that API shim reexports openclaw/plugin-sdk/synology-chat back into the same entry. Export the setup symbols directly from the concrete setup surface so tsdown can bundle the SDK subpath without a self-referential export graph.
2026-03-17 15:27:58 -07:00
Vincent Koc
90a0d50ae9
Plugins: internalize line SDK imports
2026-03-17 15:10:20 -07:00
Vincent Koc
dcdfed995a
Plugins: internalize nostr SDK imports
2026-03-17 15:08:06 -07:00
Vincent Koc
f23a069d37
Plugins: internalize synology chat SDK imports
2026-03-17 15:06:22 -07:00
Vincent Koc
ba09092a44
Plugins: guard internalized extension SDK imports
2026-03-17 14:54:12 -07:00
Peter Steinberger
6d9bf6de93
refactor: narrow extension public seams
2026-03-17 09:58:33 -07:00
Peter Steinberger
4b125762f6
refactor: clean extension api boundaries
2026-03-17 09:38:21 -07:00
Peter Steinberger
a724bbce1a
feat: add bundled Chutes extension ( #49136 )
...
* refactor: generalize bundled provider discovery seams
* feat: land chutes extension via plugin-owned auth (#41416 ) (thanks @Veightor)
2026-03-17 09:35:21 -07:00
Bob
ea15819ecf
ACP: harden startup and move configured routing behind plugin seams ( #48197 )
...
* ACPX: keep plugin-local runtime installs out of dist
* Gateway: harden ACP startup and service PATH
* ACP: reinitialize error-state configured bindings
* ACP: classify pre-turn runtime failures as session init failures
* Plugins: move configured ACP routing behind channel seams
* Telegram tests: align startup probe assertions after rebase
* Discord: harden ACP configured binding recovery
* ACP: recover Discord bindings after stale runtime exits
* ACPX: replace dead sessions during ensure
* Discord: harden ACP binding recovery
* Discord: fix review follow-ups
* ACP bindings: load channel snapshots across workspaces
* ACP bindings: cache snapshot channel plugin resolution
* Experiments: add ACP pluginification holy grail plan
* Experiments: rename ACP pluginification plan doc
* Experiments: drop old ACP pluginification doc path
* ACP: move configured bindings behind plugin services
* Experiments: update bindings capability architecture plan
* Bindings: isolate configured binding routing and targets
* Discord tests: fix runtime env helper path
* Tests: fix channel binding CI regressions
* Tests: normalize ACP workspace assertion on Windows
* Bindings: isolate configured binding registry
* Bindings: finish configured binding cleanup
* Bindings: finish generic cleanup
* Bindings: align runtime approval callbacks
* ACP: delete residual bindings barrel
* Bindings: restore legacy compatibility
* Revert "Bindings: restore legacy compatibility"
This reverts commit ac2ed68fa2426ecc874d68278c71c71ad363fcfe.
* Tests: drop ACP route legacy helper names
* Discord/ACP: fix binding regressions
---------
Co-authored-by: Onur <2453968+osolmaz@users.noreply.github.com>
2026-03-17 17:27:52 +01:00
Peter Steinberger
39a8dab0da
refactor: dedupe plugin lazy runtime helpers
2026-03-17 09:24:22 -07:00
Peter Steinberger
9f8cf7f71a
test: stabilize full gate
2026-03-17 16:21:59 +00:00
Peter Steinberger
91f055c10e
test: preload plugin sdk subpath imports
2026-03-17 16:21:58 +00:00
Peter Steinberger
795f1f438b
refactor: expose lazy runtime helper to plugins
2026-03-17 08:37:11 -07:00
Peter Steinberger
3a456678ee
feat(image-generation): add image_generate tool
2026-03-17 01:09:58 -07:00
Peter Steinberger
f9588da3e0
refactor: split plugin testing seam from bundled extension helpers
2026-03-17 01:05:09 -07:00
Peter Steinberger
ec1b80809d
refactor: remove remaining extension core imports
2026-03-17 00:59:46 -07:00
Peter Steinberger
9648e7fecb
refactor: consolidate lazy runtime surfaces
2026-03-17 00:59:20 -07:00
Peter Steinberger
449127b474
fix: restore full gate
2026-03-17 07:47:28 +00:00
Peter Steinberger
6f795fd60e
refactor: dedupe bundled plugin entrypoints
2026-03-17 00:14:12 -07:00
Peter Steinberger
5fb7a1363f
fix: stabilize full gate
2026-03-17 07:06:25 +00:00
Peter Steinberger
026d8ea534
fix: unblock full gate
2026-03-17 07:06:24 +00:00
Peter Steinberger
f6868b7e42
refactor: dedupe channel entrypoints and test bridges
2026-03-16 23:52:23 -07:00
Peter Steinberger
e32976f8cf
fix(plugin-sdk): restore core export boundary
2026-03-17 06:24:01 +00:00
Peter Steinberger
520d753b27
refactor(usage): share legacy pi auth token lookup
2026-03-17 06:24:01 +00:00
Peter Steinberger
da9e0b658d
refactor(outbound): share base session helpers
2026-03-17 06:24:01 +00:00
Peter Steinberger
79078f6a70
refactor(setup): share env-aware patched adapters
2026-03-17 06:24:01 +00:00
Peter Steinberger
618d35f933
feat(google): add image generation provider
2026-03-16 23:21:16 -07:00
Peter Steinberger
c1ef5748eb
refactor: enforce scoped plugin sdk imports
2026-03-16 23:15:24 -07:00
Peter Steinberger
aa2d5aaa0c
feat(plugins): add image generation capability
2026-03-16 22:58:55 -07:00
Peter Steinberger
00b57145ff
refactor: move agent runtime into agents layer
2026-03-16 22:53:16 -07:00
Peter Steinberger
5dd2245094
refactor: restore public sdk seams after rebase
2026-03-16 22:51:46 -07:00
Peter Steinberger
f2bd76cd1a
refactor: finalize plugin sdk legacy boundary cleanup
2026-03-16 22:51:46 -07:00
Vincent Koc
0bf11c1d69
Tests: guard channel setup import seams
2026-03-16 22:26:20 -07:00
Peter Steinberger
d2445b5fcd
feat(plugins): share capability capture helpers
2026-03-16 22:21:18 -07:00
Peter Steinberger
10660fe47d
refactor(channels): share legacy dm allowlist paths
2026-03-17 05:17:51 +00:00
Peter Steinberger
880bc969f9
refactor: move plugin sdk setup helpers out of commands
2026-03-16 22:11:56 -07:00
Peter Steinberger
50c3321d2e
feat(media): route image tool through media providers
2026-03-16 22:00:39 -07:00
Peter Steinberger
dde89d2a83
refactor: isolate provider sdk auth and model helpers
2026-03-16 21:47:28 -07:00
Peter Steinberger
0cfc80b81c
refactor: finish public plugin sdk boundary seams
2026-03-16 21:33:59 -07:00
Peter Steinberger
73703d977c
refactor: remove onboard auth compat barrels
2026-03-16 21:33:41 -07:00
Peter Steinberger
9183081bf1
refactor: move provider auth helpers into plugin layer
2026-03-16 21:21:17 -07:00
Peter Steinberger
9ebe38b6e3
refactor: untangle remaining plugin sdk boundaries
2026-03-16 21:16:32 -07:00
Peter Steinberger
3e010e280a
feat(plugins): add media understanding provider registration
2026-03-16 20:42:00 -07:00
Peter Steinberger
a71c61122d
refactor: add plugin sdk setup entrypoint
2026-03-16 20:17:45 -07:00
Peter Steinberger
2497b8147e
refactor: add shared setup sdk subpath
2026-03-16 20:17:13 -07:00
Peter Steinberger
5a763ac57b
fix: restore check after upstream type drift
2026-03-16 20:17:00 -07:00
Peter Steinberger
fe4368cbca
fix: align thinking defaults and plugin sdk exports
2026-03-17 03:16:39 +00:00
lishuaigit
76500c7a78
fix: detect Ollama "prompt too long" as context overflow error ( #34019 )
...
Merged via squash.
Prepared head SHA: 825a402f0f
Co-authored-by: lishuaigit <7495165+lishuaigit@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-03-16 18:57:33 -07:00
Peter Steinberger
662031a88e
feat(plugins): add speech provider registration
2026-03-16 18:50:09 -07:00
Peter Steinberger
e554eee541
refactor: route bundled channel setup helpers through private sdk bridges
2026-03-16 18:35:20 -07:00
Harold Hunt
94c27f34a1
fix(plugins): keep built plugin loading on one module graph ( #48595 )
2026-03-16 20:58:58 -04:00
Tak Hoffman
2de28379dd
Plugins: remove public extension-api surface ( #48462 )
...
* Plugins: remove public extension-api surface
* Plugins: fix loader setup routing follow-ups
* CI: ignore non-extension helper dirs in extension-fast
* Docs: note extension-api removal as breaking
2026-03-16 15:51:08 -05:00
Gustavo Madeira Santana
8ad8069854
Tests: fix green check typing regressions
2026-03-16 12:54:01 +00:00
Gustavo Madeira Santana
841025da66
Plugin SDK: add narrow setup subpaths
2026-03-16 12:46:04 +00:00
Gustavo Madeira Santana
c186176ca3
Plugin SDK: keep root alias reflection lazy
2026-03-16 12:35:13 +00:00
Gustavo Madeira Santana
9fc6c1929a
Plugin SDK: split setup and sandbox subpaths
2026-03-16 12:06:32 +00:00
Gustavo Madeira Santana
296083a49a
Plugin SDK: consolidate shared channel exports
2026-03-16 10:05:40 +00:00
Gustavo Madeira Santana
92700940d9
Plugin SDK: restore scoped imports for bundled channels
2026-03-16 09:51:36 +00:00
Peter Steinberger
7e74adef91
refactor: shrink public channel plugin sdk surfaces
2026-03-16 01:34:22 -07:00
Peter Steinberger
a73d6620b3
refactor: route remaining channel imports through plugin sdk
2026-03-16 01:17:13 -07:00
Peter Steinberger
f11589b311
refactor: tighten plugin sdk channel seams
2026-03-16 01:05:51 -07:00
Peter Steinberger
3a2c24e598
refactor: route shared channel sdk imports through plugin seams
2026-03-16 00:48:53 -07:00
Peter Steinberger
b3025e6d8e
refactor(plugin-sdk): clean shared core imports
2026-03-16 00:25:32 -07:00
Peter Steinberger
7964563299
refactor: finish plugin-owned channel runtime seams
2026-03-16 00:25:19 -07:00
Peter Steinberger
99c501a9a7
refactor(plugin-sdk): use scoped core imports for bundled channels
2026-03-16 00:19:31 -07:00
Peter Steinberger
85b7bc7edf
refactor: remove dock shim and move session routing into plugins
2026-03-16 00:09:38 -07:00
Peter Steinberger
7cdd8a84a6
refactor: add plugin-owned outbound adapters
2026-03-15 23:47:43 -07:00
Peter Steinberger
2054cb9431
refactor: move remaining channel seams into plugins
2026-03-15 23:47:30 -07:00
Peter Steinberger
ae60094fb5
refactor(plugins): move onboarding auth metadata to manifests
2026-03-15 23:47:16 -07:00
Peter Steinberger
e627a5069f
refactor(plugins): move auth profile hooks into providers
2026-03-15 22:23:55 -07:00
Vincent Koc
0277aa0159
Slack: fix review regressions
2026-03-15 21:55:45 -07:00
Vincent Koc
c7d31bae8a
Channels: centralize shared interactive rendering
2026-03-15 21:55:45 -07:00
Vincent Koc
2d048980af
Slack: map shared interactive sends in SDK actions
2026-03-15 21:55:45 -07:00
Vincent Koc
28de97356d
Plugin SDK: export Slack interactive handler context
2026-03-15 21:55:45 -07:00
Peter Steinberger
656848dcd7
refactor: rename setup wizard surfaces
2026-03-15 21:40:31 -07:00
Peter Steinberger
b8bb8510a2
feat: move ssh sandboxing into core
2026-03-15 21:35:30 -07:00
Peter Steinberger
53ccc78c63
refactor: rename setup helper surfaces
2026-03-15 21:06:55 -07:00
Peter Steinberger
a33caab280
refactor(plugins): move auth and model policy to providers
2026-03-15 20:59:06 -07:00
Peter Steinberger
371366e9eb
feat: add synology chat setup wizard
2026-03-15 20:44:26 -07:00
Peter Steinberger
77d0ff629c
refactor: rename channel setup flow seam
2026-03-15 20:44:25 -07:00
Peter Steinberger
d8b927ee6a
feat: add openshell sandbox backend
2026-03-15 20:03:22 -07:00
Peter Steinberger
46482a283a
feat: add nostr setup and unify channel setup discovery
2026-03-15 19:58:22 -07:00
Peter Steinberger
84c0326f4d
refactor: move group access into setup wizard
2026-03-15 19:58:22 -07:00
Vincent Koc
dd203c8eee
Zalouser: split setup adapter helpers
2026-03-15 19:39:38 -07:00
Vincent Koc
88b8151c52
Zalo: split setup adapter helpers
2026-03-15 19:37:25 -07:00
Vincent Koc
61bcdcca9c
Feishu: split setup adapter helpers
2026-03-15 19:35:25 -07:00
Vincent Koc
0c9428a865
MSTeams: split setup adapter helpers
2026-03-15 19:32:48 -07:00
Vincent Koc
7212b5f01a
Matrix: split setup adapter helpers
2026-03-15 19:31:11 -07:00
Vincent Koc
ecc688d205
Google Chat: split setup adapter helpers
2026-03-15 19:29:19 -07:00
Peter Steinberger
47a9c1a893
refactor: merge minimax bundled plugins
2026-03-16 02:26:45 +00:00
Peter Steinberger
38abdea8ce
fix: restore ci type checks
2026-03-16 02:23:44 +00:00
Vincent Koc
6a2efa541b
LINE: split setup adapter helpers
2026-03-15 19:21:40 -07:00
Vincent Koc
c89527f389
Tlon: split setup adapter helpers
2026-03-15 19:19:28 -07:00
Vincent Koc
067215629f
Telegram: split setup adapter helpers
2026-03-15 19:15:50 -07:00
Peter Steinberger
60bf58ddbc
refactor: trim onboarding sdk exports
2026-03-15 19:14:36 -07:00
Peter Steinberger
ec93398d7b
refactor: move line to setup wizard
2026-03-15 19:14:36 -07:00
Peter Steinberger
59940cb3ee
refactor(plugin-sdk): centralize entrypoint manifest
2026-03-16 02:11:18 +00:00
Vincent Koc
413d2ff3da
iMessage: lazy-load setup wizard surface
2026-03-15 18:53:58 -07:00
Vincent Koc
de6666b895
Signal: lazy-load setup wizard surface
2026-03-15 18:44:59 -07:00
Vincent Koc
d663df7a74
Discord: lazy-load setup wizard surface
2026-03-15 18:36:57 -07:00
Vincent Koc
961f42e0cf
Slack: lazy-load setup wizard surface
2026-03-15 18:29:40 -07:00
Peter Steinberger
26a8aee01c
refactor: drop channel onboarding fallback
2026-03-15 18:24:39 -07:00
Peter Steinberger
0958aea112
refactor: move matrix msteams twitch to setup wizard
2026-03-15 18:24:39 -07:00
Peter Steinberger
40be12db96
refactor: move feishu zalo zalouser to setup wizard
2026-03-15 18:24:39 -07:00
Peter Steinberger
b54e37c71f
feat(plugins): merge openai vendor seams into one plugin
2026-03-15 18:20:52 -07:00
Peter Steinberger
bc5054ce68
refactor(google): merge gemini auth into google plugin
2026-03-16 01:19:32 +00:00
Peter Steinberger
a78b83472e
refactor: expose setup wizard sdk surfaces
2026-03-15 17:57:04 -07:00
Peter Steinberger
c455cccd3d
refactor: move nextcloud talk to setup wizard
2026-03-15 17:34:36 -07:00
Peter Steinberger
bad65f130e
refactor: move bluebubbles to setup wizard
2026-03-15 17:34:36 -07:00
Peter Steinberger
1f37203f88
refactor: move signal imessage mattermost to setup wizard
2026-03-15 17:06:42 -07:00
Peter Steinberger
e7555724af
feat(plugins): add provider usage runtime hooks
2026-03-15 16:57:16 -07:00
Peter Steinberger
5a68e8261e
refactor: drop onboarding adapter sdk exports
2026-03-15 16:48:43 -07:00
Harold Hunt
aa1454d1a8
Plugins: broaden plugin surface for Codex App Server ( #45318 )
...
* Plugins: add inbound claim and Telegram interaction seams
* Plugins: add Discord interaction surface
* Chore: fix formatting after plugin rebase
* fix(hooks): preserve observers after inbound claim
* test(hooks): cover claimed inbound observer delivery
* fix(plugins): harden typing lease refreshes
* fix(discord): pass real auth to plugin interactions
* fix(plugins): remove raw session binding runtime exposure
* fix(plugins): tighten interactive callback handling
* Plugins: gate conversation binding with approvals
* Plugins: migrate legacy plugin binding records
* Plugins/phone-control: update test command context
* Plugins: migrate legacy binding ids
* Plugins: migrate legacy codex session bindings
* Discord: fix plugin interaction handling
* Discord: support direct plugin conversation binds
* Plugins: preserve Discord command bind targets
* Tests: fix plugin binding and interactive fallout
* Discord: stabilize directory lookup tests
* Discord: route bound DMs to plugins
* Discord: restore plugin bindings after restart
* Telegram: persist detached plugin bindings
* Plugins: limit binding APIs to Telegram and Discord
* Plugins: harden bound conversation routing
* Plugins: fix extension target imports
* Plugins: fix Telegram runtime extension imports
* Plugins: format rebased binding handlers
* Discord: bind group DM interactions by channel
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-03-15 16:06:11 -07:00
Peter Steinberger
4eee827dce
Channels: use owned helper imports
2026-03-15 15:59:12 -07:00
Peter Steinberger
8b001d6e4d
Channels: move onboarding adapters into extensions
2026-03-15 15:59:12 -07:00
Peter Steinberger
4a0f72866b
feat(plugins): move provider runtimes into bundled plugins
2026-03-15 15:18:32 -07:00
Nimrod Gutman
e2dac5d5cb
fix(plugins): load bundled extensions from dist ( #47560 )
2026-03-15 21:16:27 +02:00
Vincent Koc
5e78c8bc95
Webhooks: tighten pre-auth body handling ( #46802 )
...
* Webhooks: tighten pre-auth body handling
* Webhooks: clean up request body guards
2026-03-15 09:45:18 -07:00
Peter Steinberger
87c4ae36b4
refactor: drop deprecated whatsapp mention pattern sdk helper
2026-03-15 08:50:31 -07:00
Peter Steinberger
ff61343d76
fix: harden mention pattern regex compilation
2026-03-15 08:44:12 -07:00
songlei
df3a247db2
feat(feishu): structured cards with identity header, note footer, and streaming enhancements (openclaw#29938)
...
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: nszhsl <512639+nszhsl@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-14 20:31:46 -05:00
Tak Hoffman
f4dbd78afd
Add Feishu reactions and card action support ( #46692 )
...
* Add Feishu reactions and card action support
* Tighten Feishu action handling
2026-03-14 20:25:02 -05:00
Tak Hoffman
774b40467b
fix(zalouser): stop inheriting dm allowlist for groups ( #46663 )
2026-03-14 19:10:11 -05:00
Tomáš Dinh
b5b589d99d
fix(zalo): use plugin-sdk export for webhook client IP resolution (openclaw#46549)
...
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: Tomáš Dinh <82420070+No898@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-14 18:37:56 -05:00
scoootscooob
439c21e078
refactor: remove channel shim directories, point all imports to extensions ( #45967 )
...
* refactor: remove channel shim directories, point all imports to extensions
Delete the 6 backward-compat shim directories (src/telegram, src/discord,
src/slack, src/signal, src/imessage, src/web) that were re-exporting from
extensions. Update all 112+ source files to import directly from
extensions/{channel}/src/ instead of through the shims.
Also:
- Move src/channels/telegram/ (allow-from, api) to extensions/telegram/src/
- Fix outbound adapters to use resolveOutboundSendDep (fixes 5 pre-existing TS errors)
- Update cross-extension imports (src/web/media.js → extensions/whatsapp/src/media.js)
- Update vitest, tsdown, knip, labeler, and script configs for new paths
- Update guard test allowlists for extension paths
After this, src/ has zero channel-specific implementation code — only the
generic plugin framework remains.
* fix: update raw-fetch guard allowlist line numbers after shim removal
* refactor: document direct extension channel imports
* test: mock transcript module in delivery helpers
2026-03-14 03:43:07 -07:00
scoootscooob
16505718e8
refactor: move WhatsApp channel implementation to extensions/ ( #45725 )
...
* refactor: move WhatsApp channel from src/web/ to extensions/whatsapp/
Move all WhatsApp implementation code (77 source/test files + 9 channel
plugin files) from src/web/ and src/channels/plugins/*/whatsapp* to
extensions/whatsapp/src/.
- Leave thin re-export shims at all original locations so cross-cutting
imports continue to resolve
- Update plugin-sdk/whatsapp.ts to only re-export generic framework
utilities; channel-specific functions imported locally by the extension
- Update vi.mock paths in 15 cross-cutting test files
- Rename outbound.ts -> send.ts to match extension naming conventions
and avoid false positive in cfg-threading guard test
- Widen tsconfig.plugin-sdk.dts.json rootDir to support shim->extension
cross-directory references
Part of the core-channels-to-extensions migration (PR 6/10).
* style: format WhatsApp extension files
* fix: correct stale import paths in WhatsApp extension tests
Fix vi.importActual, test mock, and hardcoded source paths that weren't
updated during the file move:
- media.test.ts: vi.importActual path
- onboarding.test.ts: vi.importActual path
- test-helpers.ts: test/mocks/baileys.js path
- monitor-inbox.test-harness.ts: incomplete media/store mock
- login.test.ts: hardcoded source file path
- message-action-runner.media.test.ts: vi.mock/importActual path
2026-03-14 02:44:55 -07:00
Peter Steinberger
b61bc4948e
refactor: share dual text command gating
2026-03-14 01:41:17 +00:00
Peter Steinberger
c0831927b0
refactor: share allowlist wildcard matching
2026-03-14 01:41:17 +00:00
Peter Steinberger
7285e04ead
refactor: share whatsapp outbound adapter base
2026-03-14 01:41:17 +00:00
Peter Steinberger
d55fa78e40
refactor: share delimited channel entry parsing
2026-03-14 01:41:16 +00:00
Peter Steinberger
81ea997d40
refactor: share self hosted provider plugin helpers
2026-03-14 01:40:41 +00:00
Peter Steinberger
a66a0852bb
test: cover plugin-sdk subpath imports
2026-03-13 22:09:06 +00:00
Peter Steinberger
b7ff8256ef
test: guard plugin-sdk shared-bundle regression ( #45426 ) (thanks @TarasShyn)
2026-03-13 21:57:43 +00:00
Vincent Koc
a976cc2e95
Slack: add opt-in interactive reply directives ( #44607 )
...
* Reply: add Slack interactive directive parser
* Reply: wire Slack directives into normalization
* Reply: cover Slack directive parsing
* Reply: test Slack directive normalization
* Slack: hint interactive reply directives
* Config: add Slack interactive reply capability type
* Config: validate Slack interactive reply capability
* Reply: gate Slack directives behind capability
* Slack: gate interactive reply hints by capability
* Tests: cover Slack interactive reply capability gating
* Changelog: note opt-in Slack interactive replies
* Slack: fix interactive reply review findings
* Slack: harden interactive reply routing and limits
* Slack: harden interactive reply trust and validation
2026-03-13 14:08:04 -07:00
Peter Steinberger
496ca3a637
fix(feishu): fail closed on webhook signature checks
2026-03-13 03:13:56 +00:00
Peter Steinberger
88244c0942
refactor(zalouser): reuse shared name matching helper
2026-03-13 01:44:42 +00:00
Peter Steinberger
87ad1ce9b1
refactor: add non-interactive provider plugin setup
2026-03-13 01:19:35 +00:00
Peter Steinberger
d83491e751
feat: modularize provider plugin architecture
2026-03-12 22:24:35 +00:00
Peter Steinberger
bf89947a8e
fix: switch pairing setup codes to bootstrap tokens
2026-03-12 22:23:07 +00:00
Lyle
c965049dc6
fix(mattermost): pass mediaLocalRoots through reply delivery ( #44021 )
...
Merged via squash.
Prepared head SHA: 856f11f129
Co-authored-by: LyleLiu666 <31182860+LyleLiu666@users.noreply.github.com>
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com>
Reviewed-by: @mukhtharcm
2026-03-12 20:13:51 +05:30
Xaden Ryan
658bd54ecf
feat(llm-task): add thinking override
...
Co-authored-by: Xaden Ryan <165437834+xadenryan@users.noreply.github.com>
2026-03-12 19:21:35 +11:00
ademczuk
8618a711ff
fix(voice-call): add speed and instructions to OpenAI TTS config schema ( #39226 )
...
Merged via squash.
Prepared head SHA: 775e3063b5
Co-authored-by: ademczuk <5212682+ademczuk@users.noreply.github.com>
Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com>
Reviewed-by: @obviyus
2026-03-11 23:15:48 +05:30
Peter Steinberger
f4a4b50cd5
refactor: compile allowlist matchers
2026-03-11 00:07:47 +00:00
Peter Steinberger
201420a7ee
fix: harden secret-file readers
2026-03-10 23:40:10 +00:00
Peter Steinberger
bc1cc2e50f
refactor: share telegram payload send flow
2026-03-10 22:18:04 +00:00
Peter Steinberger
a455c0cc3d
refactor: share passive account lifecycle helpers
2026-03-10 22:18:04 +00:00
Peter Steinberger
50ded5052f
refactor: share channel config schema fragments
2026-03-10 22:18:04 +00:00
Peter Steinberger
4a8e039a5f
refactor: share channel config security scaffolding
2026-03-10 22:18:04 +00:00
Peter Steinberger
725958c66f
refactor: share onboarding secret prompt flows
2026-03-10 22:18:03 +00:00
Peter Steinberger
00170f8e1a
refactor: share scoped account config patching
2026-03-10 22:18:03 +00:00
Rodrigo Uroz
ff2e7a2945
fix(acp): strip provider auth env for child ACP processes (openclaw#42250)
...
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: rodrigouroz <384037+rodrigouroz@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-10 16:50:10 -05:00
Josh Avant
d30dc28b8c
Secrets: reject exec SecretRef traversal ids across schema/runtime/gateway ( #42370 )
...
* Secrets: harden exec SecretRef validation and reload LKG coverage
* Tests: harden exec fast-exit stdin regression case
* Tests: align lifecycle daemon test formatting with oxfmt 0.36
2026-03-10 13:45:37 -05:00
Xinhua Gu
4790e40ac6
fix(plugins): expose model auth API to context-engine plugins ( #41090 )
...
Merged via squash.
Prepared head SHA: ee96e96bb9
Co-authored-by: xinhuagu <562450+xinhuagu@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-03-09 16:07:26 -07:00
Kyle
a438ff4397
fix(plugin-sdk): remove remaining bundled plugin src imports (openclaw#39638)
...
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: Kyle <3477429+kyledh@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-08 22:32:45 -05:00
Peter Steinberger
936ac22ec2
refactor: share channel config adapter base
2026-03-08 23:38:24 +00:00
Peter Steinberger
5845b5bfba
refactor: share multi-account config schema fragments
2026-03-08 23:38:24 +00:00
Peter Steinberger
8d7778d1d6
refactor: dedupe plugin runtime stores
2026-03-08 23:38:24 +00:00
Gustavo Madeira Santana
5889a2e98e
fix(plugin-sdk): lazily load legacy root alias
2026-03-08 17:13:46 -04:00
Peter Steinberger
25d0aa7296
refactor: simplify plugin sdk compatibility aliases
2026-03-08 18:40:14 +00:00
darkamenosa
67b2e81360
Zalo: fix provider lifecycle restarts ( #39892 )
...
* Zalo: fix provider lifecycle restarts
* Zalo: add typing indicators, smart webhook cleanup, and API type fixes
* fix review
* add allow list test secrect
* Zalo: bound webhook cleanup during shutdown
* Zalo: bound typing chat action timeout
* Zalo: use plugin-safe abort helper import
2026-03-08 22:33:18 +07:00
Vincent Koc
3b1be1a08c
Plugin SDK: align allowFrom helper test input
2026-03-07 16:08:39 -08:00
Peter Steinberger
cc03c097c5
refactor: share provider group-policy warning collectors
2026-03-08 00:05:24 +00:00
Peter Steinberger
566a821e5d
refactor: share missing-sender matched allowlist evaluation
2026-03-08 00:05:24 +00:00
Peter Steinberger
2b54070526
refactor: share allowlist provider warning resolution
2026-03-08 00:05:24 +00:00
Peter Steinberger
846ec320e2
refactor: share account-scoped config adapter accessors
2026-03-08 00:05:24 +00:00
Peter Steinberger
b0d9246768
refactor: share matched group policy evaluation
2026-03-08 00:05:24 +00:00
Peter Steinberger
f319ec2dac
refactor: share onboarding allowlist entry parsing
2026-03-08 00:05:24 +00:00
Peter Steinberger
dc92f2e19d
refactor: share nextcloud onboarding allowFrom lookup
2026-03-07 23:27:51 +00:00
Peter Steinberger
c9128e1f3f
refactor: share trimmed list normalization in provider helpers
2026-03-07 23:27:51 +00:00
Peter Steinberger
c5bd84309a
refactor: share allowFrom stringification helpers
2026-03-07 23:27:51 +00:00
Peter Steinberger
8c15b8600c
refactor: share sender group policy evaluation
2026-03-07 23:27:51 +00:00
Peter Steinberger
d228a62143
refactor: share trimmed string entry normalization
2026-03-07 23:27:51 +00:00
Peter Steinberger
6647d02846
refactor: share dock config adapter helper scaffolding
2026-03-07 23:27:51 +00:00
Peter Steinberger
556aa8a702
refactor: share config adapter allowFrom and defaultTo helpers
2026-03-07 23:27:51 +00:00
Peter Steinberger
feac26c3b7
refactor: share allowFrom formatter scaffolding
2026-03-07 23:27:51 +00:00
Peter Steinberger
c91bfa830a
refactor: share route-level group gating decisions
2026-03-07 23:27:51 +00:00
Peter Steinberger
5bbca5be91
refactor: share sender-scoped group policy derivation
2026-03-07 23:27:51 +00:00
Peter Steinberger
b7d03ea1f5
refactor: centralize open group-policy warning flow collectors
2026-03-07 23:27:51 +00:00
Peter Steinberger
b456649974
refactor: unify account-scoped dm security policy resolver
2026-03-07 23:27:51 +00:00
Peter Steinberger
7230b96cc7
refactor: unify extension allowlist resolver and directory scaffolding
2026-03-07 23:27:51 +00:00
Peter Steinberger
8e0e76697a
refactor: unify channel open-group-policy warning builders
2026-03-07 23:27:51 +00:00
Peter Steinberger
4b61779a46
refactor: unify extension webhook request lifecycle scaffolding
2026-03-07 23:27:51 +00:00
Peter Steinberger
27dad962fe
refactor: normalize runtime group sender gating decisions
2026-03-07 23:27:51 +00:00
Peter Steinberger
5eba663c38
refactor: unify onboarding secret-input prompt state wiring
2026-03-07 23:27:51 +00:00
Peter Steinberger
6b1c82c4f1
refactor: unify onboarding dm/group policy scaffolding
2026-03-07 23:27:51 +00:00
Peter Steinberger
f0b05869fc
refactor: share onboarding account id resolution prelude
2026-03-07 21:09:26 +00:00
Peter Steinberger
95fe282a17
refactor: unify channel status snapshot base fields
2026-03-07 20:33:50 +00:00
Peter Steinberger
b9e7521463
refactor: unify directory config entry extraction
2026-03-07 20:33:50 +00:00
Peter Steinberger
b0ac284dae
refactor: share setup account config patch helper
2026-03-07 20:33:50 +00:00
Peter Steinberger
7242777d63
refactor: unify account list/default scaffolding
2026-03-07 20:33:50 +00:00
Peter Steinberger
2bcd56cfac
refactor: unify DM pairing challenge flows
2026-03-07 20:33:50 +00:00
Peter Steinberger
08aae60dc9
refactor(plugin-sdk): extract shared channel prelude exports
2026-03-07 17:05:23 +00:00
Peter Steinberger
a82df52753
refactor(extensions): share secret input schema builder
2026-03-07 17:05:23 +00:00
Muhammed Mukhthar CM
4f08dcccfd
Mattermost: add interactive model picker ( #38767 )
...
Merged via squash.
Prepared head SHA: 0883654e88
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com>
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com>
Reviewed-by: @mukhtharcm
2026-03-07 21:45:29 +05:30
Peter Steinberger
3c71e2bd48
refactor(core): extract shared dedup helpers
2026-03-07 10:41:05 +00:00
Josh Lehman
fee91fefce
feature(context): extend plugin system to support custom context management ( #22201 )
...
* feat(context-engine): add ContextEngine interface and registry
Introduce the pluggable ContextEngine abstraction that allows external
plugins to register custom context management strategies.
- ContextEngine interface with lifecycle methods: bootstrap, ingest,
ingestBatch, afterTurn, assemble, compact, prepareSubagentSpawn,
onSubagentEnded, dispose
- Module-level singleton registry with registerContextEngine() and
resolveContextEngine() (config-driven slot selection)
- LegacyContextEngine: pass-through implementation wrapping existing
compaction behavior for 100% backward compatibility
- ensureContextEnginesInitialized() guard for safe one-time registration
- 19 tests covering contract, registry, resolution, and legacy parity
* feat(plugins): add context-engine slot and registerContextEngine API
Wire the ContextEngine abstraction into the plugin system so external
plugins can register context engines via the standard plugin API.
- Add 'context-engine' to PluginKind union type
- Add 'contextEngine' slot to PluginSlotsConfig (default: 'legacy')
- Wire registerContextEngine() through OpenClawPluginApi
- Export ContextEngine types from plugin-sdk for external consumers
- Restore proper slot-based resolution in registry
* feat(context-engine): wire ContextEngine into agent run lifecycle
Integrate the ContextEngine abstraction into the core agent run path:
- Resolve context engine once per run (reused across retries)
- Bootstrap: hydrate canonical store from session file on first run
- Assemble: route context assembly through pluggable engine
- Auto-compaction guard: disable built-in auto-compaction when
the engine declares ownsCompaction (prevents double-compaction)
- AfterTurn: post-turn lifecycle hook for ingest + background
compaction decisions
- Overflow compaction: route through contextEngine.compact()
- Dispose: clean up engine resources in finally block
- Notify context engine on subagent lifecycle events
Legacy engine: all lifecycle methods are pass-through/no-op, preserving
100% backward compatibility for users without a context engine plugin.
* feat(plugins): add scoped subagent methods and gateway request scope
Expose runtime.subagent.{run, waitForRun, getSession, deleteSession}
so external plugins can spawn sub-agent sessions without raw gateway
dispatch access.
Uses AsyncLocalStorage request-scope bridge to dispatch internally via
handleGatewayRequest with a synthetic operator client. Methods are only
available during gateway request handling.
- Symbol.for-backed global singleton for cross-module-reload safety
- Fallback gateway context for non-WS dispatch paths (Telegram/WhatsApp)
- Set gateway request scope for all handlers, not just plugin handlers
- 3 staleness tests for fallback context hardening
* feat(context-engine): route /compact and sessions.get through context engine
Wire the /compact command and sessions.get handler through the pluggable
ContextEngine interface.
- Thread tokenBudget and force parameters to context engine compact
- Route /compact through contextEngine.compact() when registered
- Wire sessions.get as runtime alias for plugin subagent dispatch
- Add .pebbles/ to .gitignore
* style: format with oxfmt 0.33.0
Fix duplicate import (ControlUiRootState in server.impl.ts) and
import ordering across all changed files.
* fix: update extension test mocks for context-engine types
Add missing subagent property to bluebubbles PluginRuntime mock.
Add missing registerContextEngine to lobster OpenClawPluginApi mock.
* fix(subagents): keep deferred delete cleanup retryable
* style: format run attempt for CI
* fix(rebase): remove duplicate embedded-run imports
* test: add missing gateway context mock export
* fix: pass resolved auth profile into afterTurn compaction
Ensure the embedded runner forwards resolved auth profile context into
legacy context-engine compaction params on the normal afterTurn path,
matching overflow compaction behavior. This allows downstream LCM
summarization to use the intended provider auth/profile consistently.
Also fix strict TS typing in external-link token dedupe and align an
attempt unit test reasoningLevel value with the current ReasoningLevel
enum.
Regeneration-Prompt: |
We were debugging context-engine compaction where downstream summary
calls were missing the right auth/profile context in normal afterTurn
flow, while overflow compaction already propagated it. Preserve current
behavior and keep changes additive: thread the resolved authProfileId
through run -> attempt -> legacy compaction param builder without
broad refactors.
Add tests that prove the auth profile is included in afterTurn legacy
params and that overflow compaction still passes it through run
attempts. Keep existing APIs stable, and only adjust small type issues
needed for strict compilation.
* fix: remove duplicate imports from rebase
* feat: add context-engine system prompt additions
* fix(rebase): dedupe attempt import declarations
* test: fix fetch mock typing in ollama autodiscovery
* fix(test): add registerContextEngine to diffs extension mock APIs
* test(windows): use path.delimiter in ios-team-id fixture PATH
* test(cron): add model formatting and precedence edge case tests
Covers:
- Provider/model string splitting (whitespace, nested paths, empty segments)
- Provider normalization (casing, aliases like bedrock→amazon-bedrock)
- Anthropic model alias normalization (opus-4.5→claude-opus-4-5)
- Precedence: job payload > session override > config default
- Sequential runs with different providers (CI flake regression pattern)
- forceNew session preserving stored model overrides
- Whitespace/empty model string edge cases
- Config model as string vs object format
* test(cron): fix model formatting test config types
* test(phone-control): add registerContextEngine to mock API
* fix: re-export ChannelKind from config-reload-plan
* fix: add subagent mock to plugin-runtime-mock test util
* docs: add changelog fragment for context engine PR #22201
2026-03-06 05:31:59 -08:00
Josh Avant
0e4245063f
CLI: make read-only SecretRef status flows degrade safely ( #37023 )
...
* CLI: add read-only SecretRef inspection
* CLI: fix read-only SecretRef status regressions
* CLI: preserve read-only SecretRef status fallbacks
* Docs: document read-only channel inspection hook
* CLI: preserve audit coverage for read-only SecretRefs
* CLI: fix read-only status account selection
* CLI: fix targeted gateway fallback analysis
* CLI: fix Slack HTTP read-only inspection
* CLI: align audit credential status checks
* CLI: restore Telegram read-only fallback semantics
2026-03-05 23:07:13 -06:00
Tony Dehnke
136ca87f7b
feat(mattermost): add interactive buttons support ( #19957 )
...
Merged via squash.
Prepared head SHA: 8a25e60872
Co-authored-by: tonydehnke <36720180+tonydehnke@users.noreply.github.com>
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com>
Reviewed-by: @mukhtharcm
2026-03-05 20:14:57 +05:30
Joseph Turian
e5b6a4e19d
Mattermost: honor onmessage mention override and add gating diagnostics tests ( #27160 )
...
Merged via squash.
Prepared head SHA: 6cefb1d5bf
Co-authored-by: turian <65918+turian@users.noreply.github.com>
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com>
Reviewed-by: @mukhtharcm
2026-03-05 17:59:54 +05:30
a
4fb40497d4
fix(daemon): handle systemctl is-enabled exit 4 (not-found) on Ubuntu ( #33634 )
...
Merged via squash.
Prepared head SHA: 67dffc3ee2
Co-authored-by: Yuandiaodiaodiao <33371662+Yuandiaodiaodiao@users.noreply.github.com>
Co-authored-by: shakkernerd <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-03-04 16:13:45 +00:00
Bob
61f7cea48b
fix: kill stuck ACP child processes on startup and harden sessions in discord threads ( #33699 )
...
* Gateway: resolve agent.wait for chat.send runs
* Discord: harden ACP thread binding + listener timeout
* ACPX: handle already-exited child wait
* Gateway/Discord: address PR review findings
* Discord: keep ACP error-state thread bindings on startup
* gateway: make agent.wait dedupe bridge event-driven
* discord: harden ACP probe classification and cap startup fan-out
* discord: add cooperative timeout cancellation
* discord: fix startup probe concurrency helper typing
* plugin-sdk: avoid Windows root-alias shard timeout
* plugin-sdk: keep root alias reflection path non-blocking
* discord+gateway: resolve remaining PR review findings
* gateway+discord: fix codex review regressions
* Discord/Gateway: address Codex review findings
* Gateway: keep agent.wait lifecycle active with shared run IDs
* Discord: clean up status reactions on aborted runs
* fix: add changelog note for ACP/Discord startup hardening (#33699 ) (thanks @dutifulbob)
---------
Co-authored-by: Onur <2453968+osolmaz@users.noreply.github.com>
2026-03-04 10:52:28 +01:00
Gustavo Madeira Santana
7a2f5a0098
Plugin SDK: add full bundled subpath wiring
2026-03-04 02:35:12 -05:00
Gustavo Madeira Santana
802b9f6b19
Plugins: add root-alias shim and cache/docs updates
2026-03-04 01:20:48 -05:00
Tak Hoffman
7f2708a8c3
fix(routing): unify session delivery invariants for duplicate suppression ( #33786 )
...
* Routing: unify session delivery invariants
* Routing: address PR review feedback
* Routing: tighten topic and session-scope suppression
* fix(chat): inherit routes for per-account channel-peer sessions
2026-03-03 21:40:38 -06:00
Gustavo Madeira Santana
1278ee9248
plugin-sdk: add channel subpaths and migrate bundled plugins
2026-03-03 22:07:03 -05:00
Igal Tabachnik
a4850b1b8f
fix(plugins): lazily initialize runtime and split plugin-sdk startup imports ( #28620 )
...
Merged via squash.
Prepared head SHA: 8bd7d6c13b
Co-authored-by: hmemcpy <601206+hmemcpy@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-03-03 19:58:48 -05:00
Muhammed Mukhthar CM
b1b41eb443
feat(mattermost): add native slash command support (refresh) ( #32467 )
...
Merged via squash.
Prepared head SHA: 989126574e
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com>
Co-authored-by: mukhtharcm <56378562+mukhtharcm@users.noreply.github.com>
Reviewed-by: @mukhtharcm
2026-03-03 12:39:18 +05:30
Runkun Miao
7c6f8bfe73
feat(feishu): add broadcast support for multi-agent groups ( #29575 )
...
* feat(feishu): add broadcast support for multi-agent group observation
When multiple agents share a Feishu group chat, only the @mentioned
agent receives the message. This prevents observer agents from building
session memory of group activity they weren't directly addressed in.
Adds broadcast support (reusing the same cfg.broadcast schema as
WhatsApp) so all configured agents receive every group message in their
session transcripts. Only the @mentioned agent responds on Feishu;
observer agents process silently via no-op dispatchers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): guard sequential broadcast dispatch against single-agent failure
Wrap each dispatchForAgent() call in the sequential loop with try/catch
so one agent's dispatch failure doesn't abort delivery to remaining agents.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): avoid duplicate messages in broadcast observer mode and normalize agent IDs
- Skip recordPendingHistoryEntryIfEnabled for broadcast groups when not
mentioned, since the message is dispatched directly to all agents.
Previously the message appeared twice in the agent prompt.
- Normalize agent IDs with toLowerCase() before membership checks so
config casing mismatches don't silently skip valid agents.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): set WasMentioned per-agent and normalize broadcast IDs
- buildCtxPayloadForAgent now takes a wasMentioned parameter so active
agents get WasMentioned=true and observers get false (P1 fix)
- Normalize broadcastAgents to lowercase at resolution time and
lowercase activeAgentId so all comparisons and session key generation
use canonical IDs regardless of config casing (P2 fix)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): canonicalize broadcast agent IDs with normalizeAgentId
* fix(feishu): match ReplyDispatcher sync return types for noop dispatcher
The upstream ReplyDispatcher changed sendToolResult/sendBlockReply/
sendFinalReply to synchronous (returning boolean). Update the broadcast
observer noop dispatcher to match.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): deduplicate broadcast agent IDs after normalization
Config entries like "Main" and "main" collapse to the same canonical ID
after normalizeAgentId but were dispatched multiple times. Use Set to
deduplicate after normalization.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): honor requireMention=false when selecting broadcast responder
When requireMention is false, the routed agent should be active (reply
on Feishu) even without an explicit @mention. Previously activeAgentId
was null whenever ctx.mentionedBot was false, so all agents got the
noop dispatcher and no reply was sent — silently breaking groups that
disabled mention gating.
Hoist requireMention out of the if(isGroup) block so it's accessible
in the dispatch code.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): cross-account broadcast dedup to prevent duplicate dispatches
In multi-account Feishu setups, the same message event is delivered to
every bot account in a group. Without cross-account dedup, each account
independently dispatches broadcast agents, causing 2×N dispatches instead
of N (where N = number of broadcast agents).
Two changes:
1. requireMention=true + bot not mentioned: return early instead of
falling through to broadcast. The mentioned bot's handler will
dispatch for all agents. Non-mentioned handlers record to history.
2. Add cross-account broadcast dedup using a shared 'broadcast' namespace
(tryRecordMessagePersistent). The first handler to reach the broadcast
block claims the message; subsequent accounts skip. This handles the
requireMention=false multi-account case.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): strip CommandAuthorized from broadcast observer contexts
Broadcast observer agents inherited CommandAuthorized from the sender,
causing slash commands (e.g. /reset) to silently execute on every observer
session. Now only the active agent retains CommandAuthorized; observers
have it stripped before dispatch.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): use actual mention state for broadcast WasMentioned
The active broadcast agent's WasMentioned was set to true whenever
requireMention=false, even when the bot was not actually @mentioned.
Now uses ctx.mentionedBot && agentId === activeAgentId, consistent
with the single-agent path which passes ctx.mentionedBot directly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(feishu): skip history buffer for broadcast accounts and log parallel failures
1. In requireMention groups with broadcast, non-mentioned accounts no
longer buffer pending history — the mentioned handler's broadcast
dispatch already writes turns into all agent sessions. Buffering
caused duplicate replay via buildPendingHistoryContextFromMap.
2. Parallel broadcast dispatch now inspects Promise.allSettled results
and logs rejected entries, matching the sequential path's per-agent
error logging.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Changelog: note Feishu multi-agent broadcast dispatch
* Changelog: restore author credit for Feishu broadcast entry
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-02 21:38:46 -06:00
Josh Avant
806803b7ef
feat(secrets): expand SecretRef coverage across user-supplied credentials ( #29580 )
...
* feat(secrets): expand secret target coverage and gateway tooling
* docs(secrets): align gateway and CLI secret docs
* chore(protocol): regenerate swift gateway models for secrets methods
* fix(config): restore talk apiKey fallback and stabilize runner test
* ci(windows): reduce test worker count for shard stability
* ci(windows): raise node heap for test shard stability
* test(feishu): make proxy env precedence assertion windows-safe
* fix(gateway): resolve auth password SecretInput refs for clients
* fix(gateway): resolve remote SecretInput credentials for clients
* fix(secrets): skip inactive refs in command snapshot assignments
* fix(secrets): scope gateway.remote refs to effective auth surfaces
* fix(secrets): ignore memory defaults when enabled agents disable search
* fix(secrets): honor Google Chat serviceAccountRef inheritance
* fix(secrets): address tsgo errors in command and gateway collectors
* fix(secrets): avoid auth-store load in providers-only configure
* fix(gateway): defer local password ref resolution by precedence
* fix(secrets): gate telegram webhook secret refs by webhook mode
* fix(secrets): gate slack signing secret refs to http mode
* fix(secrets): skip telegram botToken refs when tokenFile is set
* fix(secrets): gate discord pluralkit refs by enabled flag
* fix(secrets): gate discord voice tts refs by voice enabled
* test(secrets): make runtime fixture modes explicit
* fix(cli): resolve local qr password secret refs
* fix(cli): fail when gateway leaves command refs unresolved
* fix(gateway): fail when local password SecretRef is unresolved
* fix(gateway): fail when required remote SecretRefs are unresolved
* fix(gateway): resolve local password refs only when password can win
* fix(cli): skip local password SecretRef resolution on qr token override
* test(gateway): cast SecretRef fixtures to OpenClawConfig
* test(secrets): activate mode-gated targets in runtime coverage fixture
* fix(cron): support SecretInput webhook tokens safely
* fix(bluebubbles): support SecretInput passwords across config paths
* fix(msteams): make appPassword SecretInput-safe in onboarding/token paths
* fix(bluebubbles): align SecretInput schema helper typing
* fix(cli): clarify secrets.resolve version-skew errors
* refactor(secrets): return structured inactive paths from secrets.resolve
* refactor(gateway): type onboarding secret writes as SecretInput
* chore(protocol): regenerate swift models for secrets.resolve
* feat(secrets): expand extension credential secretref support
* fix(secrets): gate web-search refs by active provider
* fix(onboarding): detect SecretRef credentials in extension status
* fix(onboarding): allow keeping existing ref in secret prompt
* fix(onboarding): resolve gateway password SecretRefs for probe and tui
* fix(onboarding): honor secret-input-mode for local gateway auth
* fix(acp): resolve gateway SecretInput credentials
* fix(secrets): gate gateway.remote refs to remote surfaces
* test(secrets): cover pattern matching and inactive array refs
* docs(secrets): clarify secrets.resolve and remote active surfaces
* fix(bluebubbles): keep existing SecretRef during onboarding
* fix(tests): resolve CI type errors in new SecretRef coverage
* fix(extensions): replace raw fetch with SSRF-guarded fetch
* test(secrets): mark gateway remote targets active in runtime coverage
* test(infra): normalize home-prefix expectation across platforms
* fix(cli): only resolve local qr password refs in password mode
* test(cli): cover local qr token mode with unresolved password ref
* docs(cli): clarify local qr password ref resolution behavior
* refactor(extensions): reuse sdk SecretInput helpers
* fix(wizard): resolve onboarding env-template secrets before plaintext
* fix(cli): surface secrets.resolve diagnostics in memory and qr
* test(secrets): repair post-rebase runtime and fixtures
* fix(gateway): skip remote password ref resolution when token wins
* fix(secrets): treat tailscale remote gateway refs as active
* fix(gateway): allow remote password fallback when token ref is unresolved
* fix(gateway): ignore stale local password refs for none and trusted-proxy
* fix(gateway): skip remote secret ref resolution on local call paths
* test(cli): cover qr remote tailscale secret ref resolution
* fix(secrets): align gateway password active-surface with auth inference
* fix(cli): resolve inferred local gateway password refs in qr
* fix(gateway): prefer resolvable remote password over token ref pre-resolution
* test(gateway): cover none and trusted-proxy stale password refs
* docs(secrets): sync qr and gateway active-surface behavior
* fix: restore stability blockers from pre-release audit
* Secrets: fix collector/runtime precedence contradictions
* docs: align secrets and web credential docs
* fix(rebase): resolve integration regressions after main rebase
* fix(node-host): resolve gateway secret refs for auth
* fix(secrets): harden secretinput runtime readers
* gateway: skip inactive auth secretref resolution
* cli: avoid gateway preflight for inactive secret refs
* extensions: allow unresolved refs in onboarding status
* tests: fix qr-cli module mock hoist ordering
* Security: align audit checks with SecretInput resolution
* Gateway: resolve local-mode remote fallback secret refs
* Node host: avoid resolving inactive password secret refs
* Secrets runtime: mark Slack appToken inactive for HTTP mode
* secrets: keep inactive gateway remote refs non-blocking
* cli: include agent memory secret targets in runtime resolution
* docs(secrets): sync docs with active-surface and web search behavior
* fix(secrets): keep telegram top-level token refs active for blank account tokens
* fix(daemon): resolve gateway password secret refs for probe auth
* fix(secrets): skip IRC NickServ ref resolution when NickServ is disabled
* fix(secrets): align token inheritance and exec timeout defaults
* docs(secrets): clarify active-surface notes in cli docs
* cli: require secrets.resolve gateway capability
* gateway: log auth secret surface diagnostics
* secrets: remove dead provider resolver module
* fix(secrets): restore gateway auth precedence and fallback resolution
* fix(tests): align plugin runtime mock typings
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-03-03 02:58:20 +00:00
Peter Steinberger
666073ee46
test: fix tsgo baseline test compatibility
2026-03-03 01:24:20 +00:00
Peter Steinberger
fd3ca8a34c
refactor: dedupe agent and browser cli helpers
2026-03-03 00:15:00 +00:00
Sid
481da215b9
fix(feishu): persist dedup cache across gateway restarts via warmup (openclaw#31605) thanks @Sid-Qin
...
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test:macmini (fails on unrelated baseline test: src/config/config.legacy-config-detection.rejects-routing-allowfrom.test.ts)
Co-authored-by: Sid-Qin <201593046+Sid-Qin@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-02 17:30:40 -06:00
Peter Steinberger
34daed1d1e
refactor(core): dedupe infra, media, pairing, and plugin helpers
2026-03-02 21:32:11 +00:00
Glucksberg
61d14e8a8a
fix(plugin-sdk): add export verification tests and release guard ( #27569 )
2026-03-02 21:30:44 +00:00
Peter Steinberger
866bd91c65
refactor: harden msteams lifecycle and attachment flows
2026-03-02 21:19:23 +00:00
Peter Steinberger
3a08e69a05
refactor: unify queueing and normalize telegram slack flows
2026-03-02 20:55:15 +00:00
Peter Steinberger
9d30159fcd
refactor: dedupe channel and gateway surfaces
2026-03-02 19:57:33 +00:00
Peter Steinberger
1c9deeda97
refactor: split webhook ingress and policy guards
2026-03-02 18:02:21 +00:00
Peter Steinberger
d3e8b17aa6
fix: harden webhook auth-before-body handling
2026-03-02 17:21:09 +00:00
Peter Steinberger
7a7eee920a
refactor(gateway): harden plugin http route contracts
2026-03-02 16:48:00 +00:00
Peter Steinberger
18f8393b6c
fix: harden sandbox writes and centralize atomic file writes
2026-03-02 16:45:12 +00:00